コード例 #1
0
        /// <summary>
        /// Specifies a common dialog box.
        /// </summary>
        /// <param name="hwndOwner">A value that represents the window handle of the owner window for the common dialog box.</param>
        /// <returns><see langword="true" /> if the file could be opened; otherwise, <see langword="false" />.</returns>
        protected override bool RunDialog(IntPtr hwndOwner)
        {
            if (_downlevelDialog != null)
            {
                return(_downlevelDialog.ShowDialog(hwndOwner == IntPtr.Zero ? null : new WindowHandleWrapper(hwndOwner)) == DialogResult.OK);
            }

            Ookii.Dialogs.Interop.IFileDialog dialog = null;
            try
            {
                dialog = new Ookii.Dialogs.Interop.NativeFileOpenDialog();
                SetDialogProperties(dialog);
                int result = dialog.Show(hwndOwner);
                if (result < 0)
                {
                    if ((uint)result == (uint)HRESULT.ERROR_CANCELLED)
                    {
                        return(false);
                    }
                    else
                    {
                        throw System.Runtime.InteropServices.Marshal.GetExceptionForHR(result);
                    }
                }
                GetResult(dialog);
                return(true);
            }
            finally
            {
                if (dialog != null)
                {
                    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(dialog);
                }
            }
        }
コード例 #2
0
        private void SetDialogProperties(Ookii.Dialogs.Interop.IFileDialog dialog)
        {
            // Description
            if (!string.IsNullOrEmpty(_description))
            {
                if (_useDescriptionForTitle)
                {
                    dialog.SetTitle(_description);
                }
                else
                {
                    Ookii.Dialogs.Interop.IFileDialogCustomize customize = (Ookii.Dialogs.Interop.IFileDialogCustomize)dialog;
                    customize.AddText(0, _description);
                }
            }

            dialog.SetOptions(NativeMethods.FOS.FOS_PICKFOLDERS | NativeMethods.FOS.FOS_FORCEFILESYSTEM | NativeMethods.FOS.FOS_FILEMUSTEXIST);

            if (!string.IsNullOrEmpty(_selectedPath))
            {
                string parent = Path.GetDirectoryName(_selectedPath);
                if (parent == null || !Directory.Exists(parent))
                {
                    dialog.SetFileName(_selectedPath);
                }
                else
                {
                    string folder = Path.GetFileName(_selectedPath);
                    dialog.SetFolder(NativeMethods.CreateItemFromParsingName(parent));
                    dialog.SetFileName(folder);
                }
            }
        }
コード例 #3
0
 private void GetResult(Ookii.Dialogs.Interop.IFileDialog dialog)
 {
     if (Multiselect)
     {
         Ookii.Dialogs.Interop.IShellItemArray results;
         ((Ookii.Dialogs.Interop.IFileOpenDialog)dialog).GetResults(out results);
         uint count;
         results.GetCount(out count);
         string[] selectedPaths = new string[count];
         for (uint x = 0; x < count; ++x)
         {
             Ookii.Dialogs.Interop.IShellItem item;
             results.GetItemAt(x, out item);
             string name;
             item.GetDisplayName(NativeMethods.SIGDN.SIGDN_FILESYSPATH, out name);
             selectedPaths[x] = name;
         }
         _selectedPaths = selectedPaths;
     }
     else
     {
         Ookii.Dialogs.Interop.IShellItem item;
         dialog.GetResult(out item);
         item.GetDisplayName(NativeMethods.SIGDN.SIGDN_FILESYSPATH, out _selectedPaths[0]);
     }
 }
コード例 #4
0
 private bool RunFileDialog(IntPtr hwndOwner)
 {
     _hwndOwner = hwndOwner;
     Ookii.Dialogs.Interop.IFileDialog dialog = null;
     try
     {
         dialog = CreateFileDialog();
         SetDialogProperties(dialog);
         int result = dialog.Show(hwndOwner);
         if (result < 0)
         {
             if (result == (int)HRESULT.ERROR_CANCELLED)
             {
                 return(false);
             }
             else
             {
                 throw System.Runtime.InteropServices.Marshal.GetExceptionForHR(result);
             }
         }
         return(true);
     }
     finally
     {
         _hwndOwner = IntPtr.Zero;
         if (dialog != null)
         {
             System.Runtime.InteropServices.Marshal.FinalReleaseComObject(dialog);
         }
     }
 }
コード例 #5
0
        internal override void GetResult(Ookii.Dialogs.Interop.IFileDialog dialog)
        {
            if (Multiselect)
            {
                Ookii.Dialogs.Interop.IShellItemArray results;
                ((Ookii.Dialogs.Interop.IFileOpenDialog)dialog).GetResults(out results);
                uint count;
                results.GetCount(out count);
                string[] fileNames = new string[count];
                for (uint x = 0; x < count; ++x)
                {
                    Ookii.Dialogs.Interop.IShellItem item;
                    results.GetItemAt(x, out item);
                    string name;
                    item.GetDisplayName(NativeMethods.SIGDN.SIGDN_FILESYSPATH, out name);
                    fileNames[x] = name;
                }
                FileNamesInternal = fileNames;
            }
            else
            {
                FileNamesInternal = null;
            }

            if (ShowReadOnly)
            {
                Interop.IFileDialogCustomize customize = (Interop.IFileDialogCustomize)dialog;
                int selected;
                customize.GetSelectedControlItem(_openDropDownId, out selected);
                _readOnlyChecked = (selected == _readOnlyItemId);
            }

            base.GetResult(dialog);
        }
コード例 #6
0
        internal bool DoFileOk(Ookii.Dialogs.Interop.IFileDialog dialog)
        {
            GetResult(dialog);

            System.ComponentModel.CancelEventArgs e = new System.ComponentModel.CancelEventArgs();
            OnFileOk(e);
            return(!e.Cancel);
        }
コード例 #7
0
 /// <summary>
 /// Resets all properties to their default values.
 /// </summary>
 public override void Reset()
 {
     _description            = string.Empty;
     _useDescriptionForTitle = false;
     _selectedPath           = string.Empty;
     _rootFolder             = Environment.SpecialFolder.Desktop;
     _showNewFolderButton    = true;
     _dialog = null;
 }
コード例 #8
0
 internal virtual void GetResult(Ookii.Dialogs.Interop.IFileDialog dialog)
 {
     if (!GetOption(Natives.FOS.FOS_ALLOWMULTISELECT))
     {
         _fileNames = new string[1];
         Ookii.Dialogs.Interop.IShellItem result;
         dialog.GetResult(out result);
         result.GetDisplayName(Natives.SIGDN.SIGDN_FILESYSPATH, out _fileNames[0]);
     }
 }
コード例 #9
0
 internal override void SetDialogProperties(Ookii.Dialogs.Interop.IFileDialog dialog)
 {
     base.SetDialogProperties(dialog);
     if (_showReadOnly)
     {
         Ookii.Dialogs.Interop.IFileDialogCustomize customize = (Ookii.Dialogs.Interop.IFileDialogCustomize)dialog;
         customize.EnableOpenDropDown(_openDropDownId);
         customize.AddControlItem(_openDropDownId, _openItemId, ComDlgResources.LoadString(ComDlgResources.ComDlgResourceId.OpenButton));
         customize.AddControlItem(_openDropDownId, _readOnlyItemId, ComDlgResources.LoadString(ComDlgResources.ComDlgResourceId.ReadOnly));
     }
 }
コード例 #10
0
        private void SetDialogProperties(Ookii.Dialogs.Interop.IFileDialog dialog)
        {
            // [seanba] - Cache the dialog reference. We need it to update the title/description
            _dialog = dialog;

            // [seanba] - Need broswer dialog events
            uint cookie;

            dialog.Advise(new VistaFolderBrowserDialogEvents(this), out cookie);

            // [seanba] - Always have the additional text box present
            Ookii.Dialogs.Interop.IFileDialogCustomize customize = (Ookii.Dialogs.Interop.IFileDialogCustomize)dialog;
            customize.AddText(0, "");

            // Description
            if (!string.IsNullOrEmpty(_description))
            {
                if (_useDescriptionForTitle)
                {
                    dialog.SetTitle(_description);
                }
                else
                {
                    // [seanba] - Disable this. We'll always have the added text
                    //Ookii.Dialogs.Interop.IFileDialogCustomize customize = (Ookii.Dialogs.Interop.IFileDialogCustomize)dialog;
                    //customize.AddText(0, _description);
                    customize.SetControlLabel(0, _description);
                }
            }

            dialog.SetOptions(NativeMethods.FOS.FOS_PICKFOLDERS | NativeMethods.FOS.FOS_FORCEFILESYSTEM | NativeMethods.FOS.FOS_FILEMUSTEXIST);

            if (!string.IsNullOrEmpty(_selectedPath))
            {
                string parent = Path.GetDirectoryName(_selectedPath);
                if (parent == null || !Directory.Exists(parent))
                {
                    dialog.SetFileName(_selectedPath);
                }
                else
                {
                    string folder = Path.GetFileName(_selectedPath);
                    dialog.SetFolder(NativeMethods.CreateItemFromParsingName(parent));
                    dialog.SetFileName(folder);
                }
            }
        }
コード例 #11
0
 private void GetResult(Ookii.Dialogs.Interop.IFileDialog dialog)
 {
     Ookii.Dialogs.Interop.IShellItem item;
     dialog.GetResult(out item);
     item.GetDisplayName(NativeMethods.SIGDN.SIGDN_FILESYSPATH, out _selectedPath);
 }
コード例 #12
0
        internal virtual void SetDialogProperties(Ookii.Dialogs.Interop.IFileDialog dialog)
        {
            uint cookie;

            dialog.Advise(new VistaFileDialogEvents(this), out cookie);

            // Set the default file name
            if (!(_fileNames == null || _fileNames.Length == 0 || string.IsNullOrEmpty(_fileNames[0])))
            {
                string parent = Path.GetDirectoryName(_fileNames[0]);
                if (parent == null || !Directory.Exists(parent))
                {
                    dialog.SetFileName(_fileNames[0]);
                }
                else
                {
                    string folder = Path.GetFileName(_fileNames[0]);
                    dialog.SetFolder(Natives.CreateItemFromParsingName(parent));
                    dialog.SetFileName(folder);
                }
            }

            // Set the filter
            if (!string.IsNullOrEmpty(_filter))
            {
                string[] filterElements            = _filter.Split(new char[] { '|' });
                Natives.COMDLG_FILTERSPEC[] filter = new Natives.COMDLG_FILTERSPEC[filterElements.Length / 2];
                for (int x = 0; x < filterElements.Length; x += 2)
                {
                    filter[x / 2].pszName = filterElements[x];
                    filter[x / 2].pszSpec = filterElements[x + 1];
                }
                dialog.SetFileTypes((uint)filter.Length, filter);

                if (_filterIndex > 0 && _filterIndex <= filter.Length)
                {
                    dialog.SetFileTypeIndex((uint)_filterIndex);
                }
            }

            // Default extension
            if (_addExtension && !string.IsNullOrEmpty(_defaultExt))
            {
                dialog.SetDefaultExtension(_defaultExt);
            }

            // Initial directory
            if (!string.IsNullOrEmpty(_initialDirectory))
            {
                Interop.IShellItem item = Natives.CreateItemFromParsingName(_initialDirectory);
                dialog.SetDefaultFolder(item);
            }

            // ShowHelp
            if (_showHelp)
            {
                Ookii.Dialogs.Interop.IFileDialogCustomize customize = (Ookii.Dialogs.Interop.IFileDialogCustomize)dialog;
                customize.AddPushButton(HelpButtonId, "Help");
            }

            if (!string.IsNullOrEmpty(_title))
            {
                dialog.SetTitle(_title);
            }

            dialog.SetOptions((_options | Natives.FOS.FOS_FORCEFILESYSTEM));
        }