public bool OpenFileDialog(OpenFileDialogParams openParams, Action <OpenFileDialogParams> callback)
        {
            WinformsSystemWindow.ShowingSystemDialog = true;
            openParams.FileName  = "";
            openParams.FileNames = null;

            var openFileDialog1 = new OpenFileDialog
            {
                InitialDirectory = openParams.InitialDirectory,
                Filter           = openParams.Filter,
                Multiselect      = openParams.MultiSelect,
                Title            = openParams.Title,
                FilterIndex      = openParams.FilterIndex,
                RestoreDirectory = true
            };

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                this.LastDirectoryUsed = System.IO.Path.GetDirectoryName(openFileDialog1.FileName);

                openParams.FileNames = openFileDialog1.FileNames;
                openParams.FileName  = openFileDialog1.FileName;
            }

            WinformsSystemWindow.ShowingSystemDialog = false;

            UiThread.RunOnIdle(() =>
            {
                callback(openParams);
            });
            return(true);
        }
Пример #2
0
        public bool OpenFileDialog(OpenFileDialogParams openParams, Action <OpenFileDialogParams> callback)
        {
            WinformsSystemWindow.ShowingSystemDialog = true;
            Gtk.Application.Init();

            Gtk.FileChooserDialog fc =
                new Gtk.FileChooserDialog(openParams.Title,
                                          null,
                                          FileChooserAction.Open,
                                          "Cancel", ResponseType.Cancel,
                                          "Open", ResponseType.Accept);

            if (openParams.InitialDirectory != null)
            {
                fc.SetCurrentFolder(openParams.InitialDirectory);
            }
            fc.SelectMultiple = openParams.MultiSelect;

            Gtk.FileFilter filter = new Gtk.FileFilter();
            filter.Name = openParams.Filter.Split('|')[0];
            string[] extensions = openParams.Filter.Split('|') [1].Split(';');
            foreach (string e in extensions)
            {
                filter.AddPattern(e.ToLower());
                filter.AddPattern(e.ToUpper());
            }
            fc.AddFilter(filter);

            // fc.Show();
            // fc.Present();
            fc.KeepAbove = true;

            if (fc.Run() == (int)ResponseType.Accept)
            {
                this.LastDirectoryUsed = Path.GetDirectoryName(fc.Filename);
                openParams.FileNames   = fc.Filenames;
                openParams.FileName    = fc.Filename;
                UiThread.RunOnIdle(() =>
                {
                    callback(openParams);
                });
            }

            fc.Destroy();
            while (Gtk.Application.EventsPending())
            {
                Gtk.Main.Iteration();
            }

            WinformsSystemWindow.ShowingSystemDialog = false;

            return(true);
        }
        public bool OpenFileDialog(OpenFileDialogParams openParams, Action <OpenFileDialogParams> callback)
        {
            ShowFileDialog((fileText) =>
            {
                if (fileText.Length > 2)
                {
                    string[] files       = fileText.Split(';', ' ').Select(f => f.Trim('\"')).ToArray();
                    openParams.FileName  = files[0];
                    openParams.FileNames = files;
                }
                UiThread.RunOnIdle(() => callback?.Invoke(openParams));
            });

            return(true);
        }