Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
 public bool CreateWindow(Address address)
 {
     using(IDLWrapper wrapper = new IDLWrapper(address)) {
         if(wrapper.Available) {
             tabBar.OpenNewWindow(wrapper);
             return true;
         }
     }
     return false;
 }
Ejemplo n.º 3
0
 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;
 }
Ejemplo n.º 4
0
 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;
 }
Ejemplo n.º 5
0
 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;
 }
Ejemplo n.º 6
0
 public PluginEventArgs(int index, Address address)
 {
     this.index = index;
     this.address = address;
 }
Ejemplo n.º 7
0
 public bool TryGetSelection(out Address[] adSelectedItems, out string pathFocused, bool fDisplayName)
 {
     using(IDLWrapper wrapper = GetFocusedItem()) {
         pathFocused = wrapper.ParseName;
     }
     return TryGetSelection(out adSelectedItems, fDisplayName);
 }
Ejemplo n.º 8
0
 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;
 }
Ejemplo n.º 9
0
        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;
                }
            }
        }
Ejemplo n.º 10
0
 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;
 }
Ejemplo n.º 11
0
        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;
        }
Ejemplo n.º 12
0
 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);
     }
 }
Ejemplo n.º 13
0
 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;
 }
Ejemplo n.º 14
0
 public bool TryGetSelection(out Address[] adSelectedItems)
 {
     string str;
     return tabBar.ShellBrowser.TryGetSelection(out adSelectedItems, out str, false);
 }
Ejemplo n.º 15
0
 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;
 }
Ejemplo n.º 16
0
 public bool TrySetSelection(Address[] itemsToSelect, bool fDeselectOthers)
 {
     return tabBar.ShellBrowser.TrySetSelection(itemsToSelect, null, fDeselectOthers);
 }
Ejemplo n.º 17
0
 internal bool TryGetSelection(out Address[] adSelectedItems, out string pathFocused, bool fDisplayName) {
     return ShellBrowser.TryGetSelection(out adSelectedItems, out pathFocused, fDisplayName);
 }
Ejemplo n.º 18
0
        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;
        }
Ejemplo n.º 19
0
 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;
 }
Ejemplo n.º 20
0
        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;
        }
Ejemplo n.º 21
0
 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;
 }
Ejemplo n.º 22
0
 public void SetSelectedItemsAt(string path, Address[] names, string focused) {
     dicSelectdItems[path] = names;
     dicFocusedItemName[path] = focused;
 }
Ejemplo n.º 23
0
        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;
                }
            }
        }