private async void MidiFileButtonOnOnPressed(BaseButton.ButtonEventArgs obj)
        {
            var filters  = new FileDialogFilters(new FileDialogFilters.Group("mid", "midi"));
            var filename = await _fileDialogManager.OpenFile(filters);

            var instrumentEnt = _owner.Instrument.Owner;
            var instrument    = _owner.Instrument;

            ContainerHelpers.TryGetContainerMan(_owner.Instrument.Owner, out var conMan);

            var localPlayer = IoCManager.Resolve <IPlayerManager>().LocalPlayer;

            // The following checks are only in place to prevent players from playing MIDI songs locally.
            // There are equivalents for these checks on the server.

            if (string.IsNullOrEmpty(filename))
            {
                return;
            }

            // If we don't have a player or controlled entity, we return.
            if (localPlayer?.ControlledEntity == null)
            {
                return;
            }

            // If the instrument is handheld and we're not holding it, we return.
            if ((instrument.Handheld && (conMan == null ||
                                         conMan.Owner != localPlayer.ControlledEntity)))
            {
                return;
            }

            // We check that we're in range unobstructed just in case.
            if (!EntitySystem.Get <SharedInteractionSystem>()
                .InRangeUnobstructed(localPlayer.ControlledEntity.Transform.MapPosition,
                                     instrumentEnt.Transform.MapPosition, ignoredEnt: instrumentEnt))
            {
                return;
            }

            if (!_midiManager.IsMidiFile(filename))
            {
                Logger.Warning($"Not a midi file! Chosen file: {filename}");
                return;
            }

            MidiStopButtonOnPressed(null);
            await Timer.Delay(100);

            if (!_owner.Instrument.OpenMidi(filename))
            {
                return;
            }
            MidiPlaybackSetButtonsDisabled(false);
            if (midiInputButton.Pressed)
            {
                midiInputButton.Pressed = false;
            }
        }
Пример #2
0
        protected string ShowExportDialog(RsExportFormat aFormat)
        {
            XmlNode lGeneralDlg = RsViewEngine.Locale.GetDialogData("generalDialogs");
            string  lFilter;

            switch (aFormat)
            {
            case RsExportFormat.ExcelDocument:
                lFilter = FileDialogFilters.BuildExcelFilter(lGeneralDlg); break;

            case RsExportFormat.HtmlDocument:
                lFilter = FileDialogFilters.BuildHTMLFilter(lGeneralDlg); break;

            case RsExportFormat.WordDocument:
                lFilter = FileDialogFilters.BuildWordFilter(lGeneralDlg); break;

            case RsExportFormat.XmlDocument:
                lFilter = FileDialogFilters.BuildXMLFilter(lGeneralDlg); break;

            default:
                lFilter = FileDialogFilters.BuildPDFFilter(lGeneralDlg); break;
            }

            _dlgExport.Filter = lFilter;

            return(_dlgExport.ShowDialog() == DialogResult.OK ? _dlgExport.FileName : null);
        }
Пример #3
0
        private async void MidiFileButtonOnOnPressed(BaseButton.ButtonEventArgs obj)
        {
            var filters  = new FileDialogFilters(new FileDialogFilters.Group("mid", "midi"));
            var filename = await _fileDialogManager.OpenFile(filters);

            if (filename == null)
            {
                return;
            }

            if (!_midiManager.IsMidiFile(filename))
            {
                Logger.Warning($"Not a midi file! Chosen file: {filename}");
                return;
            }

            if (!_owner.Instrument.OpenMidi(filename))
            {
                return;
            }
            MidiPlaybackSetButtonsDisabled(false);
            if (midiInputButton.Pressed)
            {
                midiInputButton.Pressed = false;
            }
        }
Пример #4
0
        private static void EhLocalizationChanged(CLocalization aLocale)
        {
            XmlNode lDialogLocale = aLocale.GetDialogData("generalDialogs");

            SaveCollectionDialog.Filter = FileDialogFilters.BuildCollectionFilter(lDialogLocale);
            OpenCollectionDialog.Filter = FileDialogFilters.BuildCollectionFilter(lDialogLocale);
        }
Пример #5
0
        private async void MidiFileButtonOnOnPressed(ButtonEventArgs obj)
        {
            var filters = new FileDialogFilters(new FileDialogFilters.Group("mid", "midi"));

            await using var file = await _fileDialogManager.OpenFile(filters);

            // did the instrument menu get closed while waiting for the user to select a file?
            if (Disposed)
            {
                return;
            }

            // The following checks are only in place to prevent players from playing MIDI songs locally.
            // There are equivalents for these checks on the server.

            if (file == null)
            {
                return;
            }

            /*if (!_midiManager.IsMidiFile(filename))
             * {
             *  Logger.Warning($"Not a midi file! Chosen file: {filename}");
             *  return;
             * }*/

            if (!PlayCheck())
            {
                return;
            }

            MidiStopButtonOnPressed(null);
            await using var memStream = new MemoryStream((int) file.Length);
            // 100ms delay is due to a race condition or something idk.
            // While we're waiting, load it into memory.
            await Task.WhenAll(Timer.Delay(100), file.CopyToAsync(memStream));

            if (_owner.Instrument is not {
            } instrument ||
                !EntitySystem.Get <InstrumentSystem>().OpenMidi(instrument.Owner, memStream.GetBuffer().AsSpan(0, (int)memStream.Length), instrument))
            {
                return;
            }

            MidiPlaybackSetButtonsDisabled(false);
            if (InputButton.Pressed)
            {
                InputButton.Pressed = false;
            }
        }
Пример #6
0
    public async void Execute(IConsoleShell shell, string argStr, string[] args)
    {
        var cfgMan = IoCManager.Resolve <IConfigurationManager>();

        if (!cfgMan.GetCVar(CCVars.ResourceUploadingEnabled))
        {
            shell.WriteError("Network Resource Uploading is currently disabled by the server.");
            return;
        }

        if (args.Length != 1)
        {
            shell.WriteError("Wrong number of arguments!");
            return;
        }

        var dialog = IoCManager.Resolve <IFileDialogManager>();

        var filters = new FileDialogFilters(new FileDialogFilters.Group("*"));

        await using var file = await dialog.OpenFile(filters);

        if (file == null)
        {
            shell.WriteError("Error picking file!");
            return;
        }

        var sizeLimit = cfgMan.GetCVar(CCVars.ResourceUploadingLimitMb);

        if (sizeLimit > 0f && file.Length * SharedNetworkResourceManager.BytesToMegabytes > sizeLimit)
        {
            shell.WriteError($"File above the current size limit! It must be smaller than {sizeLimit} MB.");
            return;
        }

        var data = file.CopyToArray();

        var netManager = IoCManager.Resolve <INetManager>();
        var msg        = netManager.CreateNetMessage <NetworkResourceUploadMessage>();

        msg.RelativePath = new ResourcePath(args[0]).ToRelativePath();
        msg.Data         = data;

        netManager.ClientSendMessage(msg);
    }
Пример #7
0
/// <summary>
/// Setup Filters
/// </summary>
/// <param name="fd"></param>
/// <param name="defaultExt"></param>
/// <param name="fltrs"></param>
/// <returns>Index of initial filter</returns>

        static int SetupFilters(
            string filter,
            string defaultExt,
            Microsoft.Office.Core.FileDialog fd)
        {
            FileDialogFilters fltrs = null;

            if (fd != null)             // only setup if fd is defined
            {
                fltrs = fd.Filters;
                fltrs.Clear();
            }

            string[] sa  = filter.Split(',');
            int      sfi = 0;

            for (int fi = 0; fi < sa.Length; fi += 2)
            {
                string desc = sa[fi];
                string ext  = sa[fi + 1];
                if (fltrs != null)
                {
                    fltrs.Add(desc, ext);
                }

                if (Lex.Contains(ext, defaultExt))                 // selected filter
                {
                    sfi = fi / 2 + 1;
                }
            }

            if (sfi == 0 && sa.Length > 0)
            {
                sfi = 1;
            }
            if (fltrs != null)
            {
                fd.FilterIndex = sfi;                            // set the filter index
            }
            return(sfi);
        }
Пример #8
0
        private async void MidiFileButtonOnOnPressed(BaseButton.ButtonEventArgs obj)
        {
            var filters  = new FileDialogFilters(new FileDialogFilters.Group("mid", "midi"));
            var filename = await _fileDialogManager.OpenFile(filters);

            // The following checks are only in place to prevent players from playing MIDI songs locally.
            // There are equivalents for these checks on the server.

            if (string.IsNullOrEmpty(filename))
            {
                return;
            }

            if (!_midiManager.IsMidiFile(filename))
            {
                Logger.Warning($"Not a midi file! Chosen file: {filename}");
                return;
            }

            if (!PlayCheck())
            {
                return;
            }

            MidiStopButtonOnPressed(null);
            await Timer.Delay(100);

            if (!_owner.Instrument.OpenMidi(filename))
            {
                return;
            }
            MidiPlaybackSetButtonsDisabled(false);
            if (_midiInputButton.Pressed)
            {
                _midiInputButton.Pressed = false;
            }
        }
Пример #9
0
        private void SaveWorkSheet(Workbook wb, bool saveasui, ref bool cancel, bool reOpen)
        {
            // 不需要保存处理的话,直接返回
            if (!SettingsCsv.Default.EnableSaveEncode)
            {
                return;
            }

            string fileName = wb.FullName;

            if (!fileName.ToLower().EndsWith(".csv"))
            {
                return;
            }

            if (!fileDict.ContainsKey(fileName))
            {
                Encoding encoding = GetFileEncoding(fileName);
                fileDict[fileName] = encoding;
            }

            Encoding fileEncoding = fileDict[fileName];

            if (Equals(fileEncoding, Encoding.UTF8) || Equals(fileEncoding, Encoding.Unicode) || Equals(fileEncoding, Encoding.BigEndianUnicode))
            {
                // 自己来操作
                cancel = true;

                // 如果是另存为,那么需要获取另存为的文件名,所以要自己显示另存为保存框
                if (saveasui)
                {
                    FileDialog fileDialog = app.FileDialog[MsoFileDialogType.msoFileDialogSaveAs];
                    fileDialog.InitialFileName  = wb.Name;
                    fileDialog.AllowMultiSelect = false;
                    fileDialog.Title            = "另存为";
                    FileDialogFilters fileDialogFilters = fileDialog.Filters;
                    bool flag = false;
                    for (int i = 1; i <= fileDialogFilters.Count; i++)
                    {
                        if ("*.csv".Equals(fileDialogFilters.Item(i).Extensions))
                        {
                            flag = true;
                            fileDialog.FilterIndex = i;
                            break;
                        }
                    }
                    if (!flag)
                    {
                        fileDialogFilters.Add("CSV (逗号分隔)", "*.csv");
                        fileDialog.FilterIndex = fileDialogFilters.Count;
                    }

                    // 取消了操作
                    if (fileDialog.Show() == 0)
                    {
                        return;
                    }

                    string fileNewName = fileDialog.SelectedItems.Item(1);
                    if (!fileNewName.ToLower().EndsWith(".csv"))
                    {
                        // 非csv则普通保存,需要标志一下,否则会再进来,因为文件名是同一个
                        flagSaveAs = true;
                        wb.SaveAs(fileNewName);
                        return;
                    }

                    fileDict[fileNewName] = fileEncoding;
                    fileName = fileNewName;
                }
                app.ScreenUpdating = false;

                // 取值
                StringBuilder sb    = new StringBuilder();
                Worksheet     sheet = wb.ActiveSheet;
                Range         range = sheet.UsedRange;
                int           row   = range.Rows.Count;
                int           col   = range.Columns.Count;

                object[,] tmp = sheet.UsedRange.Value;
                for (int i = 1; i <= row; i++)
                {
                    for (int j = 1; j <= col; j++)
                    {
                        if (j != 1)
                        {
                            sb.Append(',');
                        }

                        var obj = tmp[i, j];
                        if (obj == null)
                        {
                            continue;
                        }

                        var val = obj.ToString();
                        if (!string.IsNullOrEmpty(val))
                        {
                            sb.Append(ConvertToCsvCellString(val));
                        }
                    }

                    if (i != row)
                    {
                        sb.AppendLine(string.Empty);
                    }
                }

                var win = wb.Windows[1];
                range = win.ActiveCell;
                row   = range.Row;
                col   = range.Column;
                int scrollRow = win.ScrollRow;
                int scrollCol = win.ScrollColumn;

                // 如果异常,就不用再打开单元簿
                bool canClose = reOpen;
                try
                {
                    wb.Saved = true;
                    wb.Close(false);
                }
                catch
                {
                    canClose = false;
                }

                // 保存带编码的csv
                using (StreamWriter sw = new StreamWriter(fileName, false, fileEncoding))
                {
                    sw.Write(sb.ToString());
                    sw.Close();
                    sw.Dispose();
                }

                if (canClose)
                {
                    wb = app.Workbooks.Open(fileName);
                    app.ScreenUpdating = false;
                    sheet = wb.ActiveSheet;
                    sheet.UsedRange.Columns.NumberFormat = "@";
                    sheet.UsedRange.Value = tmp;    // 设置成文本格式后,需要再赋值,否则会出现科学计数
                    sheet.Cells[row, col].Select();
                    wb.Windows[1].ScrollColumn = scrollCol;
                    wb.Windows[1].ScrollRow    = scrollRow;
                    wb.Saved = true;
                }
                app.ScreenUpdating = true;
            }
        }