internal virtual void OnBeforeVistaDialog(FileDialogNative.IFileDialog dialog) { dialog.SetDefaultExtension(this.DefaultExt); dialog.SetFileName(this.FileName); if (!string.IsNullOrEmpty(this.InitialDirectory)) { try { FileDialogNative.IShellItem initialDirectory = GetShellItemForPath(this.InitialDirectory); dialog.SetDefaultFolder(initialDirectory); dialog.SetFolder(initialDirectory); } catch (FileNotFoundException) { } } dialog.SetTitle(this.Title); dialog.SetOptions(GetOptions()); SetFileTypes(dialog); this._customPlaces.Apply(dialog); }
internal override string[] ProcessVistaFiles(FileDialogNative.IFileDialog dialog) { FileDialogNative.IShellItem item; FileDialogNative.IFileSaveDialog dialog1 = (FileDialogNative.IFileSaveDialog) dialog; dialog.GetResult(out item); return new string[] { FileDialog.GetFilePathFromShellItem(item) }; }
internal override string[] ProcessVistaFiles(FileDialogNative.IFileDialog dialog) { FileDialogNative.IShellItem item2; FileDialogNative.IFileOpenDialog dialog2 = (FileDialogNative.IFileOpenDialog) dialog; if (this.Multiselect) { FileDialogNative.IShellItemArray array; uint num; dialog2.GetResults(out array); array.GetCount(out num); string[] strArray = new string[num]; for (uint i = 0; i < num; i++) { FileDialogNative.IShellItem item; array.GetItemAt(i, out item); strArray[i] = FileDialog.GetFilePathFromShellItem(item); } return strArray; } dialog2.GetResult(out item2); return new string[] { FileDialog.GetFilePathFromShellItem(item2) }; }
public void OnOverwrite(FileDialogNative.IFileDialog pfd, FileDialogNative.IShellItem psi, out FileDialogNative.FDE_OVERWRITE_RESPONSE pResponse) { pResponse = FileDialogNative.FDE_OVERWRITE_RESPONSE.FDEOR_DEFAULT; }
public void OnTypeChange(FileDialogNative.IFileDialog pfd) { }
public void OnShareViolation(FileDialogNative.IFileDialog pfd, FileDialogNative.IShellItem psi, out FileDialogNative.FDE_SHAREVIOLATION_RESPONSE pResponse) { pResponse = FileDialogNative.FDE_SHAREVIOLATION_RESPONSE.FDESVR_DEFAULT; }
public void OnSelectionChange(FileDialogNative.IFileDialog pfd) { }
public void OnFolderChange(FileDialogNative.IFileDialog pfd) { }
private bool HandleVistaFileOk(FileDialogNative.IFileDialog dialog) { int saveOptions = options; int saveFilterIndex = filterIndex; string[] saveFileNames = fileNames; bool saveSecurityCheckFileNames = securityCheckFileNames; bool ok = false; try { securityCheckFileNames = true; Thread.MemoryBarrier(); uint filterIndexTemp; dialog.GetFileTypeIndex(out filterIndexTemp); filterIndex = unchecked((int)filterIndexTemp); fileNames = ProcessVistaFiles(dialog); if (ProcessFileNames()) { CancelEventArgs ceevent = new CancelEventArgs(); if (NativeWindow.WndProcShouldBeDebuggable) { OnFileOk(ceevent); ok = !ceevent.Cancel; } else { try { OnFileOk(ceevent); ok = !ceevent.Cancel; } catch (Exception e) { Application.OnThreadException(e); } } } } finally { if (!ok) { //Order here is important. We don't want a window where securityCheckFileNames is false, but the temporary fileNames is still in place securityCheckFileNames = saveSecurityCheckFileNames; Thread.MemoryBarrier(); fileNames = saveFileNames; options = saveOptions; filterIndex = saveFilterIndex; } else { if (0 != (options & NativeMethods.OFN_HIDEREADONLY)) { //When the dialog is dismissed OK, the Readonly bit can't // be left on if ShowReadOnly was false // Downlevel this happens automatically, on Vista mode, we need to watch out for it. options &= ~ NativeMethods.OFN_READONLY; } } } return ok; }
internal abstract string[] ProcessVistaFiles(FileDialogNative.IFileDialog dialog);
internal override string[] ProcessVistaFiles(FileDialogNative.IFileDialog dialog) { FileDialogNative.IFileOpenDialog openDialog = (FileDialogNative.IFileOpenDialog)dialog; if (Multiselect) { FileDialogNative.IShellItemArray results; openDialog.GetResults(out results); uint count; results.GetCount(out count); string[] files = new string[count]; for (uint i = 0; i < count; ++i) { FileDialogNative.IShellItem item; results.GetItemAt(i, out item); files[unchecked((int)i)] = GetFilePathFromShellItem(item); } return files; } else { FileDialogNative.IShellItem item; openDialog.GetResult(out item); return new string[] { GetFilePathFromShellItem(item) }; } }
private bool HandleVistaFileOk(FileDialogNative.IFileDialog dialog) { int options = this.options; int filterIndex = this.filterIndex; string[] fileNames = this.fileNames; bool securityCheckFileNames = this.securityCheckFileNames; bool flag2 = false; try { uint num3; this.securityCheckFileNames = true; Thread.MemoryBarrier(); dialog.GetFileTypeIndex(out num3); this.filterIndex = (int) num3; this.fileNames = this.ProcessVistaFiles(dialog); if (!this.ProcessFileNames()) { return flag2; } CancelEventArgs e = new CancelEventArgs(); if (NativeWindow.WndProcShouldBeDebuggable) { this.OnFileOk(e); return !e.Cancel; } try { this.OnFileOk(e); flag2 = !e.Cancel; } catch (Exception exception) { Application.OnThreadException(exception); } } finally { if (!flag2) { this.securityCheckFileNames = securityCheckFileNames; Thread.MemoryBarrier(); this.fileNames = fileNames; this.options = options; this.filterIndex = filterIndex; } else if ((this.options & 4) != 0) { this.options &= -2; } } return flag2; }
internal static string GetFilePathFromShellItem(FileDialogNative.IShellItem item) { string str; item.GetDisplayName((FileDialogNative.SIGDN) (-2147319808), out str); return str; }
public int OnFolderChanging(FileDialogNative.IFileDialog pfd, FileDialogNative.IShellItem psiFolder) { return 0; }
public int OnFileOk(FileDialogNative.IFileDialog pfd) { if (!this._dialog.HandleVistaFileOk(pfd)) { return 1; } return 0; }
private void SetFileTypes(FileDialogNative.IFileDialog dialog) { FileDialogNative.COMDLG_FILTERSPEC[] filterItems = FilterItems; dialog.SetFileTypes((uint)filterItems.Length, filterItems); if (filterItems.Length > 0) { dialog.SetFileTypeIndex(unchecked((uint)filterIndex)); } }
internal static string GetFilePathFromShellItem(FileDialogNative.IShellItem item) { string filename; item.GetDisplayName(FileDialogNative.SIGDN.SIGDN_DESKTOPABSOLUTEPARSING, out filename); return filename; }
public int OnFileOk(FileDialogNative.IFileDialog pfd) { return this._dialog.HandleVistaFileOk(pfd) ? NativeMethods.S_OK : NativeMethods.S_FALSE; }
public static extern int SHCreateShellItem(IntPtr pidlParent, IntPtr psfParent, IntPtr pidl, out FileDialogNative.IShellItem ppsi);
public int OnFolderChanging(FileDialogNative.IFileDialog pfd, FileDialogNative.IShellItem psiFolder) { return NativeMethods.S_OK; }