def __init__(self, parent=None,
              completionMode=QCompleter.PopupCompletion,
              showHidden=False):
     """
     Constructor
     
     @param parent parent widget of the completer (QWidget)
     @keyparam completionMode completion mode of the
         completer (QCompleter.CompletionMode)
     @keyparam showHidden flag indicating to show hidden entries as well
         (boolean)
     """
     super(E5DirCompleter, self).__init__(parent)
     self.__model = QFileSystemModel(self)
     if showHidden:
         self.__model.setFilter(
             QDir.Filters(QDir.Drives | QDir.AllDirs | QDir.Hidden))
     else:
         self.__model.setFilter(
             QDir.Filters(QDir.Drives | QDir.AllDirs))
     self.setModel(self.__model)
     self.setCompletionMode(completionMode)
     if isWindowsPlatform():
         self.setCaseSensitivity(Qt.CaseInsensitive)
     if parent:
         parent.setCompleter(self)
 def populateProjectDirectoryItem(self, parentItem, repopulate=False):
     """
     Public method to populate a directory item's subtree.
     
     @param parentItem reference to the directory item to be populated
     @param repopulate flag indicating a repopulation (boolean)
     """
     self._addWatchedItem(parentItem)
     
     qdir = QDir(parentItem.dirName())
     
     if Preferences.getUI("BrowsersListHiddenFiles"):
         fileFilter = QDir.Filters(
             QDir.AllEntries | QDir.Hidden | QDir.NoDotAndDotDot)
     else:
         fileFilter = QDir.Filters(
             QDir.AllEntries | QDir.NoDot | QDir.NoDotDot)
     entryInfoList = qdir.entryInfoList(fileFilter)
     
     if len(entryInfoList) > 0:
         if repopulate:
             self.beginInsertRows(self.createIndex(
                 parentItem.row(), 0, parentItem),
                 0, len(entryInfoList) - 1)
         states = {}
         if self.project.vcs is not None:
             for f in entryInfoList:
                 fname = f.absoluteFilePath()
                 states[os.path.normcase(fname)] = 0
             dname = parentItem.dirName()
             self.project.vcs.clearStatusCache()
             states = self.project.vcs.vcsAllRegisteredStates(states, dname)
         
         for f in entryInfoList:
             if f.isDir():
                 node = ProjectBrowserDirectoryItem(
                     parentItem,
                     Utilities.toNativeSeparators(f.absoluteFilePath()),
                     parentItem.getProjectTypes()[0], False)
             else:
                 node = ProjectBrowserFileItem(
                     parentItem,
                     Utilities.toNativeSeparators(f.absoluteFilePath()),
                     parentItem.getProjectTypes()[0])
             if self.project.vcs is not None:
                 fname = f.absoluteFilePath()
                 if (
                     states[os.path.normcase(fname)] ==
                         self.project.vcs.canBeCommitted
                 ):
                     node.addVcsStatus(self.project.vcs.vcsName())
                     self.project.clearStatusMonitorCachedState(
                         f.absoluteFilePath())
                 else:
                     node.addVcsStatus(self.tr("local"))
             else:
                 node.addVcsStatus("")
             self._addItem(node, parentItem)
         if repopulate:
             self.endInsertRows()
 def initUI(self):
     self.setWindowTitle("userFirefox - userChrome tweak manager")
     self.setGeometry(300, 300, 640, 640)
     self.layoutBox = LayoutBox()
     self.setLayout(self.layoutBox)
     currentDir = QDir().current()
     logging.info("Current application dir: %s", currentDir.path())
     currentDir.setFilter(
         QDir.Filters(24577)
     )  #filter only dirs 0x001 and no dots 0x2000 and 0x4000 results to 0d24577
     tweakCats = currentDir.entryList()
     tweaksAvail = {}
     tweaksTree = {}
     logging.debug("List of tweak categoriess: %s", tweakCats)
     for tCat in tweakCats:
         categoryDir = QDir()
         categoryDir.setPath(currentDir.path())
         categoryDir.cd(tCat)
         categoryDir.setFilter(
             QDir.Filters(2))  #filter files 0x002 results to 0d2
         logging.debug("Tweaks in category %s are %s", tCat,
                       categoryDir.entryList())
         tweaksAvail[tCat] = categoryDir.entryList()
     logging.info("Dictionary of all available tweaks: %s", tweaksAvail)
     for tCat in tweaksAvail:
         logging.debug(tCat)
         tweaksTree["_uFFTree"] = {}
         tweaksTree[tCat] = QTreeWidgetItem(
             self.layoutBox.filesBox.availableTweaks)
         tweaksTree[tCat].setText(0, tCat)
         for tName in tweaksAvail[tCat]:
             tweaksTree["_uFFTree"][tName] = QTreeWidgetItem(
                 tweaksTree[tCat])
             tweaksTree["_uFFTree"][tName].setText(0, tName)
     #qtreetop = QTreeWidgetItem(self.layoutBox.filesBox.availableTweaks)
     #qtreetop.setText(0, "baf")
     self.show()
    def directoryChanged(self, path):
        """
        Public slot to handle the directoryChanged signal of the watcher.
        
        @param path path of the directory (string)
        """
        if path not in self.watchedItems:
            # just ignore the situation we don't have a reference to the item
            return

        if Preferences.getUI("BrowsersListHiddenFiles"):
            filter = QDir.Filters(QDir.AllEntries | QDir.Hidden
                                  | QDir.NoDotAndDotDot)
        else:
            filter = QDir.Filters(QDir.AllEntries | QDir.NoDot | QDir.NoDotDot)

        for itm in self.watchedItems[path]:
            oldCnt = itm.childCount()

            qdir = QDir(itm.dirName())

            entryInfoList = qdir.entryInfoList(filter)

            # step 1: check for new entries
            children = itm.children()
            for f in entryInfoList:
                fpath = Utilities.toNativeSeparators(f.absoluteFilePath())
                childFound = False
                for child in children:
                    if child.name() == fpath:
                        childFound = True
                        children.remove(child)
                        break
                if childFound:
                    continue

                cnt = itm.childCount()
                self.beginInsertRows(self.createIndex(itm.row(), 0, itm), cnt,
                                     cnt)
                if f.isDir():
                    node = ProjectBrowserDirectoryItem(
                        itm,
                        Utilities.toNativeSeparators(f.absoluteFilePath()),
                        itm.getProjectTypes()[0], False)
                else:
                    node = ProjectBrowserFileItem(
                        itm,
                        Utilities.toNativeSeparators(f.absoluteFilePath()),
                        itm.getProjectTypes()[0])
                self._addItem(node, itm)
                if self.project.vcs is not None:
                    self.project.vcs.clearStatusCache()
                    state = self.project.vcs.vcsRegisteredState(node.name())
                    if state == self.project.vcs.canBeCommitted:
                        node.addVcsStatus(self.project.vcs.vcsName())
                    else:
                        node.addVcsStatus(self.tr("local"))
                self.endInsertRows()

            # step 2: check for removed entries
            if len(entryInfoList) != itm.childCount():
                for row in range(oldCnt - 1, -1, -1):
                    child = itm.child(row)
                    childname = Utilities.fromNativeSeparators(child.name())
                    entryFound = False
                    for f in entryInfoList:
                        if f.absoluteFilePath() == childname:
                            entryFound = True
                            entryInfoList.remove(f)
                            break
                    if entryFound:
                        continue

                    self._removeWatchedItem(child)
                    self.beginRemoveRows(self.createIndex(itm.row(), 0, itm),
                                         row, row)
                    itm.removeChild(child)
                    self.endRemoveRows()