public AppLauncher(Address[] addresses, string pathCurrent) { List<string> list = new List<string>(); List<string> list2 = new List<string>(); this.strCurrentPath = this.strSelFiles = this.strSelDirs = this.strSelObjs = string.Empty; this.iSelItemsCount = this.iSelFileCount = this.iSelDirsCount = 0; if(addresses != null) { this.iSelItemsCount = addresses.Length; for(int i = 0; i < addresses.Length; i++) { using(IDLWrapper wrapper = new IDLWrapper(addresses[i].ITEMIDLIST)) { if(wrapper.Available && wrapper.HasPath) { if(wrapper.IsFileSystemFile) { list.Add(addresses[i].Path); } else { list2.Add(addresses[i].Path); } } } } } if(Directory.Exists(pathCurrent)) { this.strCurrentPath = "\"" + pathCurrent + "\""; } foreach(string str in list) { this.strSelFiles = this.strSelFiles + "\"" + str + "\" "; } foreach(string str2 in list2) { this.strSelDirs = this.strSelDirs + "\"" + str2 + "\" "; } this.strSelObjs = (this.strSelFiles + this.strSelDirs).Trim(); this.strSelFiles = this.strSelFiles.Trim(); this.strSelDirs = this.strSelDirs.Trim(); this.iSelFileCount = list.Count; this.iSelDirsCount = list2.Count; }
public bool CreateWindow(Address address) { using(IDLWrapper wrapper = new IDLWrapper(address)) { if(wrapper.Available) { tabBar.OpenNewWindow(wrapper); return true; } } return false; }
public bool CreateTab(Address address, int index, bool fLocked, bool fSelect) { using(IDLWrapper wrapper = new IDLWrapper(address)) { address.ITEMIDLIST = wrapper.IDL; address.Path = wrapper.Path; } if((address.ITEMIDLIST == null) || (address.ITEMIDLIST.Length <= 0)) { return false; } QTabItem tab = new QTabItem(QTUtility2.MakePathDisplayText(address.Path, false), address.Path, tabBar.tabControl1); tab.NavigatedTo(address.Path, address.ITEMIDLIST, -1, false); tab.ToolTipText = QTUtility2.MakePathDisplayText(address.Path, true); tab.TabLocked = fLocked; if(index < 0) { tabBar.AddInsertTab(tab); } else { if(index > tabBar.tabControl1.TabCount) { index = tabBar.tabControl1.TabCount; } tabBar.tabControl1.TabPages.Insert(index, tab); } if(fSelect) { tabBar.tabControl1.SelectTab(tab); } return true; }
private static IntPtr AddressToPIDL(Address address) { IntPtr zero = IntPtr.Zero; if((address.ITEMIDLIST != null) && (address.ITEMIDLIST.Length != 0)) { return ShellMethods.CreateIDL(address.ITEMIDLIST); } if(!string.IsNullOrEmpty(address.Path)) { zero = PInvoke.ILCreateFromPath(address.Path); } return zero; }
internal bool TryGetSelection(out Address[] adSelectedItems, out string pathFocused, bool fDisplayName) { adSelectedItems = new Address[0]; pathFocused = string.Empty; List<Address> list = new List<Address>(); if(!this.fIFolderViewNotImplemented) { IShellFolder shellFolder = null; IShellView ppshv = null; IFolderView view2 = null; IPersistFolder2 ppv = null; IEnumIDList list2 = null; IntPtr zero = IntPtr.Zero; try { if(this.ShellBrowser.QueryActiveShellView(out ppshv) == 0) { int num; IntPtr ptr2; int num2; try { view2 = (IFolderView)ppshv; } catch(InvalidCastException) { this.fIFolderViewNotImplemented = true; return false; } Guid riid = ExplorerGUIDs.IID_IPersistFolder2; Guid guid2 = ExplorerGUIDs.IID_IEnumIDList; if(view2.GetFolder(ref riid, out ppv) != 0) { return false; } if((ppv.GetCurFolder(out zero) != 0) || (zero == IntPtr.Zero)) { return false; } if(!ShellMethods.GetShellFolder(zero, out shellFolder)) { return false; } if((view2.GetFocusedItem(out num) == 0) && (view2.Item(num, out ptr2) == 0)) { STRRET strret; IntPtr pv = PInvoke.ILCombine(zero, ptr2); StringBuilder pszBuf = new StringBuilder(260); if(shellFolder.GetDisplayNameOf(ptr2, 0x8000, out strret) == 0) { PInvoke.StrRetToBuf(ref strret, ptr2, pszBuf, pszBuf.Capacity); } pathFocused = pszBuf.ToString(); PInvoke.CoTaskMemFree(ptr2); PInvoke.CoTaskMemFree(pv); } if(view2.ItemCount(1, out num2) != 0) { return false; } if(num2 != 0) { IntPtr ptr4; if((view2.Items(1, ref guid2, out list2) != 0) || (list2 == null)) { return false; } uint uFlags = fDisplayName ? 0 : 0x8000u; while(list2.Next(1, out ptr4, null) == 0) { STRRET strret2; StringBuilder builder2 = new StringBuilder(260); if(shellFolder.GetDisplayNameOf(ptr4, uFlags, out strret2) == 0) { PInvoke.StrRetToBuf(ref strret2, ptr4, builder2, builder2.Capacity); } IntPtr pidl = PInvoke.ILCombine(zero, ptr4); list.Add(new Address(pidl, builder2.ToString())); PInvoke.CoTaskMemFree(ptr4); PInvoke.CoTaskMemFree(pidl); } adSelectedItems = list.ToArray(); } return true; } } catch(Exception exception) { QTUtility2.MakeErrorLog(exception, null); } finally { if(shellFolder != null) { Marshal.ReleaseComObject(shellFolder); shellFolder = null; } if(ppshv != null) { Marshal.ReleaseComObject(ppshv); ppshv = null; } if(ppv != null) { Marshal.ReleaseComObject(ppv); ppv = null; } if(list2 != null) { Marshal.ReleaseComObject(list2); list2 = null; } if(zero != IntPtr.Zero) { PInvoke.CoTaskMemFree(zero); } } } return false; }
public PluginEventArgs(int index, Address address) { this.index = index; this.address = address; }
public bool TryGetSelection(out Address[] adSelectedItems, out string pathFocused, bool fDisplayName) { using(IDLWrapper wrapper = GetFocusedItem()) { pathFocused = wrapper.ParseName; } return TryGetSelection(out adSelectedItems, fDisplayName); }
public bool Browse(Address address) { if(tab != null) { tabBar.tabControl1.SelectTab(tab); using(IDLWrapper wrapper = new IDLWrapper(address)) { return tabBar.ShellBrowser.Navigate(wrapper) == 0; } } return false; }
private void Explorer_NavigateComplete2(object pDisp, ref object URL) { string path = (string)URL; lastCompletedBrowseObjectIDL = lastAttemptedBrowseObjectIDL; if(!IsShown) { DoFirstNavigation(false, path); } if(fNowQuitting) { Explorer.Quit(); } else { int hash = -1; bool flag = IsSpecialFolderNeedsToTravel(path); bool flag2 = QTUtility2.IsShellPathButNotFileSystem(path); bool flag3 = QTUtility2.IsShellPathButNotFileSystem(CurrentTab.CurrentPath); // If we're navigating on a locked tab, we simulate opening the target folder // in a new tab. First we clone the tab at the old address and lock it. Then // we move the current tab to the "new tab" position and unlock it. if(!flag2 && !flag3 && !NavigatedByCode && CurrentTab.TabLocked) { int pos = tabControl1.SelectedIndex; tabControl1.SetRedraw(false); QTabItem item = CloneTabButton(CurrentTab, null, false, pos); item.TabLocked = true; CurrentTab.TabLocked = false; pos++; int max = tabControl1.TabPages.Count - 1; switch(QTUtility.ConfigValues[1]) { case 0: if(pos != max) { tabControl1.TabPages.Relocate(pos, max); } break; case 1: tabControl1.TabPages.Relocate(pos, 0); break; case 3: tabControl1.TabPages.Relocate(pos, pos - 1); break; } tabControl1.SetRedraw(true); lstActivatedTabs.Remove(CurrentTab); lstActivatedTabs.Add(item); lstActivatedTabs.Add(CurrentTab); if(lstActivatedTabs.Count > 15) { lstActivatedTabs.RemoveAt(0); } } if(!NavigatedByCode && flag) { hash = DateTime.Now.GetHashCode(); LogEntryDic[hash] = GetCurrentLogEntry(); } ClearTravelLogs(); try { tabControl1.SetRedraw(false); if(fNowTravelByTree) { using(IDLWrapper wrapper = GetCurrentPIDL()) { QTabItem tabPage = CreateNewTab(wrapper); tabControl1.SelectTabDirectly(tabPage); CurrentTab = tabPage; } } if(tabControl1.AutoSubText && !fNavigatedByTabSelection) { CurrentTab.Comment = string.Empty; } CurrentAddress = path; CurrentTab.Text = Explorer.LocationName; CurrentTab.CurrentIDL = null; CurrentTab.TooltipText2 = null; byte[] idl; using(IDLWrapper wrapper2 = GetCurrentPIDL()) { CurrentTab.CurrentIDL = idl = wrapper2.IDL; if(flag) { if((!NavigatedByCode && (idl != null)) && (idl.Length > 0)) { path = path + "*?*?*" + hash; QTUtility.ITEMIDLIST_Dic_Session[path] = idl; CurrentTab.CurrentPath = CurrentAddress = path; } } else if((flag2 && wrapper2.Available) && !CurrentTab.CurrentPath.Contains("???")) { string str2; int num2; if(IDLWrapper.GetIDLHash(wrapper2.PIDL, out num2, out str2)) { hash = num2; CurrentTab.CurrentPath = CurrentAddress = path = str2; } else if((idl != null) && (idl.Length > 0)) { hash = num2; path = path + "???" + hash; IDLWrapper.AddCache(path, idl); CurrentTab.CurrentPath = CurrentAddress = path; } } if(!NavigatedByCode) { CurrentTab.NavigatedTo(CurrentAddress, idl, hash); } } SyncTravelState(); if(QTUtility.IsXP) { if(CurrentAddress.StartsWith(QTUtility.PATH_SEARCHFOLDER)) { ShowSearchBar(true); } else if(QTUtility.fExplorerPrevented || QTUtility.fRestoreFolderTree) { if(!QTUtility.CheckConfig(Settings.NoNewWndFolderTree) || QTUtility.fRestoreFolderTree) { ShowFolderTree(true); } QTUtility.fExplorerPrevented = QTUtility.fRestoreFolderTree = false; } } if(CurrentAddress.StartsWith("::")) { CurrentTab.ToolTipText = CurrentTab.Text; QTUtility.DisplayNameCacheDic[CurrentAddress] = CurrentTab.Text; } else if(flag2) { CurrentTab.ToolTipText = (string)URL; } else if(((CurrentAddress.Length == 3) || CurrentAddress.StartsWith(@"\\")) || (CurrentAddress.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || CurrentAddress.StartsWith("ftp://", StringComparison.OrdinalIgnoreCase))) { CurrentTab.ToolTipText = CurrentTab.CurrentPath; QTUtility.DisplayNameCacheDic[CurrentAddress] = CurrentTab.Text; } else { CurrentTab.ToolTipText = CurrentTab.CurrentPath; } if(NavigatedByCode && !NowTabCreated) { string str3; Address[] selectedItemsAt = CurrentTab.GetSelectedItemsAt(CurrentAddress, out str3); if(selectedItemsAt != null) { ShellBrowser.TrySetSelection(selectedItemsAt, str3, true); } } else if(!string.IsNullOrEmpty(QTUtility.PathToSelectInCommandLineArg)) { Address[] addresses = new Address[] { new Address(QTUtility.PathToSelectInCommandLineArg) }; ShellBrowser.TrySetSelection(addresses, null, true); QTUtility.PathToSelectInCommandLineArg = string.Empty; } if(QTUtility.RestoreFolderTree_Hide) { new WaitTimeoutCallback(WaitTimeout).BeginInvoke(150, AsyncComplete_FolderTree, false); } if(fNowRestoring) { fNowRestoring = false; if(QTUtility.LockedTabsToRestoreList.Contains(path)) { CurrentTab.TabLocked = true; } } if((!QTUtility.IsXP || FirstNavigationCompleted) && (!PInvoke.IsWindowVisible(ExplorerHandle) || PInvoke.IsIconic(ExplorerHandle))) { WindowUtils.BringExplorerToFront(ExplorerHandle); } if(pluginManager != null) { pluginManager.OnNavigationComplete(tabControl1.SelectedIndex, idl, (string)URL); } if(buttonNavHistoryMenu.DropDown.Visible) { buttonNavHistoryMenu.DropDown.Close(ToolStripDropDownCloseReason.AppFocusChange); } if(QTUtility.CheckConfig(Settings.AutoUpdate)) { UpdateChecker.Check(false); } } catch(Exception exception) { QTUtility2.MakeErrorLog(exception, null); } finally { QTUtility.RestoreFolderTree_Hide = NavigatedByCode = fNavigatedByTabSelection = NowTabCreated = fNowTravelByTree = false; tabControl1.SetRedraw(true); FirstNavigationCompleted = true; } } }
private static IEnumerable<string> CreateTMPPathsToOpenNew(Address[] addresses, string pathExclude) { List<string> list = new List<string>(); QTUtility2.InitializeTemporaryPaths(); for(int i = 0; i < addresses.Length; i++) { try { using(IDLWrapper wrapper = new IDLWrapper(addresses[i].ITEMIDLIST)) { if(wrapper.Available && wrapper.HasPath) { string path = wrapper.Path; if(path.Length > 0 && !path.PathEquals(pathExclude) && !QTUtility2.IsShellPathButNotFileSystem(path) && wrapper.IsFolder && !wrapper.IsLinkToDeadFolder) { list.Add(path); } } } } catch { } } return list; }
private static string MakeSourcePaths(Address[] addresses) { string str = String.Empty; foreach(Address ad in addresses) { if(!String.IsNullOrEmpty(ad.Path) /*&& ( File.Exists( ad.Path ) || Directory.Exists( ad.Path ) ) */) //to allow compressed.. str += ad.Path + "\0"; } str += "\0"; return str; }
public IDLWrapper(Address ad) { attributes = 0xfffffff0; pIDL = IntPtr.Zero; if(ad.ITEMIDLIST != null && ad.ITEMIDLIST.Length > 0) { pIDL = ShellMethods.CreateIDL(ad.ITEMIDLIST); } if(pIDL == IntPtr.Zero && !string.IsNullOrEmpty(ad.Path)) { InitFromPath(ad.Path); } }
internal bool TrySetSelection(Address[] addresses, string pathToFocus, bool fDeselectOthers) { if(addresses != null) { IShellFolder ppshf = null; IShellView ppshv = null; try { if(this.ShellBrowser.QueryActiveShellView(out ppshv) == 0) { IntPtr ptr3; if(PInvoke.SHGetDesktopFolder(out ppshf) != 0) { return false; } bool flag = true; bool flag2 = false; bool flag3 = (pathToFocus != null) && (pathToFocus.Length > 0); uint pchEaten = 0; uint pdwAttributes = 0; if(fDeselectOthers) { ((IFolderView)ppshv).SelectItem(0, 4); } foreach(Address address in addresses) { IntPtr zero = IntPtr.Zero; if((address.ITEMIDLIST != null) && (address.ITEMIDLIST.Length > 0)) { zero = ShellMethods.CreateIDL(address.ITEMIDLIST); } if((((zero != IntPtr.Zero) || (address.Path == null)) || ((address.Path.Length <= 0) || (ppshf.ParseDisplayName(IntPtr.Zero, IntPtr.Zero, address.Path, ref pchEaten, out zero, ref pdwAttributes) == 0))) && (zero != IntPtr.Zero)) { IntPtr pidlItem = PInvoke.ILFindLastID(zero); uint uFlags = 1; if(flag) { uFlags |= 8; if(!flag3) { flag2 = true; uFlags |= 0x10; } if(fDeselectOthers) { uFlags |= 4; } flag = false; } if((!flag2 && flag3) && (address.Path == pathToFocus)) { flag2 = true; uFlags |= 0x10; } ppshv.SelectItem(pidlItem, uFlags); PInvoke.CoTaskMemFree(zero); } } if((!flag2 && flag3) && (ppshf.ParseDisplayName(IntPtr.Zero, IntPtr.Zero, pathToFocus, ref pchEaten, out ptr3, ref pdwAttributes) == 0)) { IntPtr ptr4 = PInvoke.ILFindLastID(ptr3); ppshv.SelectItem(ptr4, 0x18); PInvoke.CoTaskMemFree(ptr3); } return true; } } catch(Exception exception) { QTUtility2.MakeErrorLog(exception, null); } finally { if(ppshv != null) { Marshal.ReleaseComObject(ppshv); ppshv = null; } if(ppshf != null) { Marshal.ReleaseComObject(ppshf); ppshf = null; } } } return false; }
public bool TryGetSelection(out Address[] adSelectedItems) { string str; return tabBar.ShellBrowser.TryGetSelection(out adSelectedItems, out str, false); }
private bool HandleTabFolderActions(int index, Keys modKeys, bool fEnqExec) { IntPtr zero = IntPtr.Zero; IntPtr ppidl = IntPtr.Zero; try { Address[] addressArray; IDLWrapper wrapper1; bool flag = true; if(index != -1) { addressArray = new Address[0]; wrapper1 = ShellBrowser.GetItem(index); } else { string str; if(ShellBrowser.TryGetSelection(out addressArray, out str, false) && (addressArray.Length > 0)) { List<Address> list = new List<Address>(addressArray); wrapper1 = new IDLWrapper(ShellMethods.CreateIDL(list[0].ITEMIDLIST)); list.RemoveAt(0); addressArray = list.ToArray(); flag = (addressArray.Length > 0) || (modKeys == Keys.Shift); } else { return false; } } using(IDLWrapper wrapper = wrapper1) { if((wrapper.Available && wrapper.HasPath) && wrapper.IsReadyIfDrive) { if(wrapper.IsFolder) { if(modKeys == Keys.Control) { if(!wrapper.IsLinkToDeadFolder) { QTUtility.TMPPathList.AddRange(CreateTMPPathsToOpenNew(addressArray, wrapper.Path)); OpenNewWindow(wrapper); } else { SystemSounds.Hand.Play(); } } else if(modKeys == (Keys.Alt | Keys.Control | Keys.Shift)) { DirectoryInfo info = new DirectoryInfo(wrapper.Path); if(info.Exists) { DirectoryInfo[] directories = info.GetDirectories(); if((directories.Length + tabControl1.TabCount) < 0x41) { tabControl1.SetRedraw(false); foreach(DirectoryInfo info2 in directories) { if(info2.Name != "System Volume Information") { using(IDLWrapper wrapper2 = new IDLWrapper(info2.FullName)) { if(wrapper2.Available && (!wrapper2.IsLink || Directory.Exists(ShellMethods.GetLinkTargetPath(info2.FullName)))) { OpenNewTab(wrapper2, true, false); } } } } tabControl1.SetRedraw(true); } else { SystemSounds.Hand.Play(); } } } else { if(addressArray.Length > 1) { tabControl1.SetRedraw(false); } try { if(flag) { OpenNewTab(wrapper, (modKeys & Keys.Shift) == Keys.Shift, false); } else if(!wrapper.IsFileSystemFile) { ShellBrowser.Navigate(wrapper); } else { return false; } for(int i = 0; i < addressArray.Length; i++) { using(IDLWrapper wrapper3 = new IDLWrapper(addressArray[i].ITEMIDLIST)) { if(((wrapper3.Available && wrapper3.HasPath) && (wrapper3.IsReadyIfDrive && wrapper3.IsFolder)) && !wrapper3.IsLinkToDeadFolder) { string path = wrapper3.Path; if(((path != wrapper.Path) && (path.Length > 0)) && !QTUtility2.IsShellPathButNotFileSystem(path)) { OpenNewTab(wrapper3, true, false); } } } } } finally { if(addressArray.Length > 1) { tabControl1.SetRedraw(true); } } } return true; } if(wrapper.IsLink) { using(IDLWrapper wrapper4 = new IDLWrapper(ShellMethods.GetLinkTargetIDL(wrapper.Path))) { if(((wrapper4.Available && wrapper4.HasPath) && (wrapper4.IsReadyIfDrive && wrapper4.IsFolder)) && !wrapper.IsLinkToDeadFolder) { if(modKeys == Keys.Control) { QTUtility.TMPPathList.AddRange(CreateTMPPathsToOpenNew(addressArray, wrapper.Path)); OpenNewWindow(wrapper4); } else { if(flag) { OpenNewTab(wrapper4, (modKeys & Keys.Shift) == Keys.Shift, false); } else { ShellBrowser.Navigate(wrapper4); } for(int j = 0; j < addressArray.Length; j++) { using(IDLWrapper wrapper5 = new IDLWrapper(addressArray[j].ITEMIDLIST)) { if(((wrapper5.Available && wrapper5.HasPath) && (wrapper5.IsReadyIfDrive && wrapper5.IsFolder)) && !wrapper5.IsLinkToDeadFolder) { string str3 = wrapper5.Path; if(((str3 != wrapper4.Path) && (str3.Length > 0)) && !QTUtility2.IsShellPathButNotFileSystem(str3)) { OpenNewTab(wrapper5, true, false); } } } } } return true; } } } if(fEnqExec) { List<string> list2 = new List<string>(); list2.Add(wrapper.Path); foreach(Address address in addressArray) { using(IDLWrapper wrapper6 = new IDLWrapper(address.ITEMIDLIST)) { if(wrapper6.IsFolder) { return true; } if(wrapper6.HasPath && !wrapper6.IsLinkToDeadFolder) { list2.Add(wrapper6.Path); } } } foreach(string str4 in list2) { QTUtility.ExecutedPathsList.Add(str4); } } } } } catch(Exception exception) { QTUtility2.MakeErrorLog(exception, null); } finally { if(zero != IntPtr.Zero) { PInvoke.CoTaskMemFree(zero); } if(ppidl != IntPtr.Zero) { PInvoke.CoTaskMemFree(ppidl); } } return false; }
public bool TrySetSelection(Address[] itemsToSelect, bool fDeselectOthers) { return tabBar.ShellBrowser.TrySetSelection(itemsToSelect, null, fDeselectOthers); }
internal bool TryGetSelection(out Address[] adSelectedItems, out string pathFocused, bool fDisplayName) { return ShellBrowser.TryGetSelection(out adSelectedItems, out pathFocused, fDisplayName); }
public bool TryGetSelection(out Address[] adSelectedItems, bool fDisplayName) { if(GetSelectedCount() == 0) { adSelectedItems = new Address[0]; return false; } adSelectedItems = GetItems(true).Select(wrapper => fDisplayName ? new Address(wrapper.PIDL, wrapper.DisplayName) : new Address(wrapper.PIDL, wrapper.ParseName)).ToArray(); return true; }
private static byte[] AddressToIDL(Address address) { if((address.ITEMIDLIST != null) && (address.ITEMIDLIST.Length != 0)) { return address.ITEMIDLIST; } if(!string.IsNullOrEmpty(address.Path)) { IntPtr pIDL = PInvoke.ILCreateFromPath(address.Path); if(pIDL != IntPtr.Zero) { byte[] iDLData = ShellMethods.GetIDLData(pIDL); PInvoke.CoTaskMemFree(pIDL); return iDLData; } } return null; }
public bool TrySetSelection(Address[] addresses, string pathToFocus, bool fDeselectOthers) { IShellView shellView = folderView as IShellView; if(addresses == null || folderView == null || shellView == null) return false; try { bool fFirst = true; bool fFocused = false; bool fFocusingNeeded = !string.IsNullOrEmpty(pathToFocus); if(fDeselectOthers) folderView.SelectItem(0, SVSIF.DESELECTOTHERS); foreach(Address ad in addresses) { using(IDLWrapper wrapper = new IDLWrapper(ad)) { if(!wrapper.Available) continue; IntPtr pIDLCHILD = PInvoke.ILFindLastID(wrapper.PIDL); SVSIF svsi = SVSIF.SELECT; if(fFirst) { svsi |= SVSIF.ENSUREVISIBLE; if(!fFocusingNeeded) { fFocused = true; svsi |= SVSIF.FOCUSED; } if(fDeselectOthers) svsi |= SVSIF.DESELECTOTHERS; fFirst = false; } if(!fFocused && ad.Path == pathToFocus) { fFocused = true; svsi |= SVSIF.FOCUSED; } shellView.SelectItem(pIDLCHILD, svsi); } } if(!fFocused && fFocusingNeeded) { using(IDLWrapper wrapper = new IDLWrapper(pathToFocus)) { IntPtr pIDLFOCUSCHILD = PInvoke.ILFindLastID(wrapper.PIDL); shellView.SelectItem(pIDLFOCUSCHILD, SVSIF.FOCUSED | SVSIF.ENSUREVISIBLE); } } return true; } catch(Exception ex) { QTUtility2.MakeErrorLog(ex); } return false; }
private static string AddressToPath(Address address) { string str = string.Empty; if(string.IsNullOrEmpty(address.Path)) { IntPtr pidl = AddressToPIDL(address); if(pidl != IntPtr.Zero) { StringBuilder pszPath = new StringBuilder(260); if(PInvoke.SHGetPathFromIDList(pidl, pszPath)) { str = pszPath.ToString(); } PInvoke.CoTaskMemFree(pidl); } return str; } return address.Path; }
public void SetSelectedItemsAt(string path, Address[] names, string focused) { dicSelectdItems[path] = names; dicFocusedItemName[path] = focused; }
private void Explorer_NavigateComplete2(object pDisp, ref object URL) { this.NowNavigating = false; string path = (string)URL; if(!this.IsShown) { DoFirstNavigation(false, path); } if(this.fNowQuitting) { base.Explorer.Quit(); } else { int hash = -1; bool flag = IsSpecialFolderNeedsToTravel(path); bool flag2 = QTUtility2.IsShellPathButNotFileSystem(path); bool flag3 = QTUtility2.IsShellPathButNotFileSystem(CurrentTab.CurrentPath); // Restore the locked tab on 7. This condition should never be // met on XP/Vista if(!flag2 && !flag3 && !NavigatedByCode && CurrentTab.TabLocked) { QTabItem item = this.CloneTabButton(this.CurrentTab, null, false, this.tabControl1.SelectedIndex); item.TabLocked = true; CurrentTab.TabLocked = false; } if(!this.NavigatedByCode && flag) { hash = DateTime.Now.GetHashCode(); this.LogEntryDic[hash] = this.GetCurrentLogEntry(); } this.ClearTravelLogs(); try { this.tabControl1.SetRedraw(false); if(this.fNowTravelByTree) { using(IDLWrapper wrapper = new IDLWrapper(this.GetCurrentPIDL())) { QTabItem tabPage = this.CreateNewTab(wrapper); this.tabControl1.SelectTabDirectly(tabPage); this.CurrentTab = tabPage; } } if(this.tabControl1.AutoSubText && !this.fNavigatedByTabSelection) { this.CurrentTab.Comment = string.Empty; } this.CurrentAddress = path; this.CurrentTab.Text = base.Explorer.LocationName; this.CurrentTab.CurrentIDL = null; this.CurrentTab.TooltipText2 = null; byte[] idl = null; using(IDLWrapper wrapper2 = new IDLWrapper(this.GetCurrentPIDL())) { this.CurrentTab.CurrentIDL = idl = wrapper2.IDL; if(flag) { if((!this.NavigatedByCode && (idl != null)) && (idl.Length > 0)) { path = path + "*?*?*" + hash; QTUtility.ITEMIDLIST_Dic_Session[path] = idl; this.CurrentTab.CurrentPath = this.CurrentAddress = path; } } else if((flag2 && wrapper2.Available) && !this.CurrentTab.CurrentPath.Contains("???")) { string str2; int num2; if(IDLWrapper.GetIDLHash(wrapper2.PIDL, out num2, out str2)) { hash = num2; this.CurrentTab.CurrentPath = this.CurrentAddress = path = str2; } else if((idl != null) && (idl.Length > 0)) { hash = num2; path = path + "???" + hash; IDLWrapper.AddCache(path, idl); this.CurrentTab.CurrentPath = this.CurrentAddress = path; } } if(!this.NavigatedByCode) { this.CurrentTab.NavigatedTo(this.CurrentAddress, idl, hash); } } this.SyncTravelState(); if(!QTUtility.IsVista) { if(this.CurrentAddress.StartsWith(QTUtility.PATH_SEARCHFOLDER)) { this.ShowSearchBar(true); } else if(QTUtility.fExplorerPrevented || QTUtility.fRestoreFolderTree) { if(!QTUtility.CheckConfig(Settings.NoNewWndFolderTree) || QTUtility.fRestoreFolderTree) { this.ShowFolderTree(true); } QTUtility.fExplorerPrevented = QTUtility.fRestoreFolderTree = false; } } if(this.CurrentAddress.StartsWith("::")) { this.CurrentTab.ToolTipText = this.CurrentTab.Text; QTUtility.DisplayNameCacheDic[this.CurrentAddress] = this.CurrentTab.Text; } else if(flag2) { this.CurrentTab.ToolTipText = (string)URL; } else if(((this.CurrentAddress.Length == 3) || this.CurrentAddress.StartsWith(@"\\")) || (this.CurrentAddress.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || this.CurrentAddress.StartsWith("ftp://", StringComparison.OrdinalIgnoreCase))) { this.CurrentTab.ToolTipText = this.CurrentTab.CurrentPath; QTUtility.DisplayNameCacheDic[this.CurrentAddress] = this.CurrentTab.Text; } else { this.CurrentTab.ToolTipText = this.CurrentTab.CurrentPath; } if(this.NavigatedByCode && !this.NowTabCreated) { string str3; Address[] selectedItemsAt = this.CurrentTab.GetSelectedItemsAt(this.CurrentAddress, out str3); if(selectedItemsAt != null) { this.TrySetSelection(selectedItemsAt, str3, true); } } else if(!string.IsNullOrEmpty(QTUtility.PathToSelectInCommandLineArg)) { Address[] addresses = new Address[] { new Address(QTUtility.PathToSelectInCommandLineArg) }; this.TrySetSelection(addresses, null, true); QTUtility.PathToSelectInCommandLineArg = string.Empty; } if(QTUtility.RestoreFolderTree_Hide) { new WaitTimeoutCallback(QTTabBarClass.WaitTimeout).BeginInvoke(150, new AsyncCallback(this.AsyncComplete_FolderTree), false); } if(this.fNowRestoring) { this.fNowRestoring = false; if(QTUtility.LockedTabsToRestoreList.Contains(path)) { this.CurrentTab.TabLocked = true; } } if((QTUtility.IsVista || this.FirstNavigationCompleted) && (!PInvoke.IsWindowVisible(this.ExplorerHandle) || PInvoke.IsIconic(this.ExplorerHandle))) { WindowUtils.BringExplorerToFront(this.ExplorerHandle); } if(this.pluginManager != null) { this.pluginManager.OnNavigationComplete(this.tabControl1.SelectedIndex, idl, (string)URL); } if(this.buttonNavHistoryMenu.DropDown.Visible) { this.buttonNavHistoryMenu.DropDown.Close(ToolStripDropDownCloseReason.AppFocusChange); } if(QTUtility.CheckConfig(Settings.AutoUpdate)) { UpdateChecker.Check(false); } } catch(Exception exception) { QTUtility2.MakeErrorLog(exception, null); } finally { QTUtility.RestoreFolderTree_Hide = this.fIFolderViewNotImplemented = this.NavigatedByCode = this.fNavigatedByTabSelection = this.NowTabCreated = this.fNowTravelByTree = false; this.subDirIndex = this.thumbnailIndex = this.itemIndexDROPHILITED = -1; this.tabControl1.SetRedraw(true); this.FirstNavigationCompleted = true; } } }