Beispiel #1
0
 private bool RunFileDialog(IntPtr hwndOwner)
 {
     TylorsTech.HandyClasses.WPF.Dialogs.Interop.IFileDialog dialog = null;
     try
     {
         dialog = CreateFileDialog();
         SetDialogProperties(dialog);
         var result = dialog.Show(hwndOwner);
         if (result < 0)
         {
             if ((uint)result == (uint)HRESULT.ERROR_CANCELLED)
             {
                 return(false);
             }
             else
             {
                 throw System.Runtime.InteropServices.Marshal.GetExceptionForHR(result);
             }
         }
         return(true);
     }
     finally
     {
         if (dialog != null)
         {
             System.Runtime.InteropServices.Marshal.FinalReleaseComObject(dialog);
         }
     }
 }
Beispiel #2
0
        internal virtual void SetDialogProperties(TylorsTech.HandyClasses.WPF.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])))
            {
                var parent = Path.GetDirectoryName(_fileNames[0]);
                if (parent == null || !Directory.Exists(parent))
                {
                    dialog.SetFileName(_fileNames[0]);
                }
                else
                {
                    var folder = Path.GetFileName(_fileNames[0]);
                    dialog.SetFolder(NativeMethods.CreateItemFromParsingName(parent));
                    dialog.SetFileName(folder);
                }
            }

            // Set the filter
            if (!string.IsNullOrEmpty(_filter))
            {
                var filterElements = _filter.Split(new char[] { '|' });
                var filter         = new NativeMethods.COMDLG_FILTERSPEC[filterElements.Length / 2];
                for (var 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))
            {
                TylorsTech.HandyClasses.WPF.Dialogs.Interop.IShellItem item = NativeMethods.CreateItemFromParsingName(_initialDirectory);
                dialog.SetDefaultFolder(item);
            }

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

            dialog.SetOptions((_options | NativeMethods.FOS.FOS_FORCEFILESYSTEM));
        }
        internal override void GetResult(TylorsTech.HandyClasses.WPF.Dialogs.Interop.IFileDialog dialog)
        {
            if (Multiselect)
            {
                TylorsTech.HandyClasses.WPF.Dialogs.Interop.IShellItemArray results;
                ((TylorsTech.HandyClasses.WPF.Dialogs.Interop.IFileOpenDialog)dialog).GetResults(out results);
                uint count;
                results.GetCount(out count);
                var fileNames = new string[count];
                for (uint x = 0; x < count; ++x)
                {
                    TylorsTech.HandyClasses.WPF.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)
            {
                var customize = (TylorsTech.HandyClasses.WPF.Dialogs.Interop.IFileDialogCustomize)dialog;
                int selected;
                customize.GetSelectedControlItem(_openDropDownId, out selected);
                _readOnlyChecked = (selected == _readOnlyItemId);
            }

            base.GetResult(dialog);
        }
        private void SetDialogProperties(TylorsTech.HandyClasses.WPF.Dialogs.Interop.IFileDialog dialog)
        {
            // Description
            if (!string.IsNullOrEmpty(_description))
            {
                if (UseDescriptionForTitle)
                {
                    dialog.SetTitle(_description);
                }
                else
                {
                    var customize = (TylorsTech.HandyClasses.WPF.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))
            {
                var parent = Path.GetDirectoryName(_selectedPath);
                if (parent == null || !Directory.Exists(parent))
                {
                    dialog.SetFileName(_selectedPath);
                }
                else
                {
                    var folder = Path.GetFileName(_selectedPath);
                    dialog.SetFolder(NativeMethods.CreateItemFromParsingName(parent));
                    dialog.SetFileName(folder);
                }
            }
        }
Beispiel #5
0
        internal bool DoFileOk(TylorsTech.HandyClasses.WPF.Dialogs.Interop.IFileDialog dialog)
        {
            GetResult(dialog);

            var e = new System.ComponentModel.CancelEventArgs();

            OnFileOk(e);
            return(!e.Cancel);
        }
Beispiel #6
0
 internal virtual void GetResult(TylorsTech.HandyClasses.WPF.Dialogs.Interop.IFileDialog dialog)
 {
     if (!GetOption(NativeMethods.FOS.FOS_ALLOWMULTISELECT))
     {
         _fileNames = new string[1];
         TylorsTech.HandyClasses.WPF.Dialogs.Interop.IShellItem result;
         dialog.GetResult(out result);
         result.GetDisplayName(NativeMethods.SIGDN.SIGDN_FILESYSPATH, out _fileNames[0]);
     }
 }
 internal override void SetDialogProperties(TylorsTech.HandyClasses.WPF.Dialogs.Interop.IFileDialog dialog)
 {
     base.SetDialogProperties(dialog);
     if (_showReadOnly)
     {
         var customize = (TylorsTech.HandyClasses.WPF.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));
     }
 }
 private void GetResult(TylorsTech.HandyClasses.WPF.Dialogs.Interop.IFileDialog dialog)
 {
     TylorsTech.HandyClasses.WPF.Dialogs.Interop.IShellItem item;
     dialog.GetResult(out item);
     item.GetDisplayName(NativeMethods.SIGDN.SIGDN_FILESYSPATH, out _selectedPath);
 }