Beispiel #1
0
class SearchPanel(Ui_searchPanel, QWidget):
  def __init__(self, parent, searchview):
    super(QWidget, self).__init__(parent)
    self.setupUi(self)
    self.filters = CustomFiltersTable(self)
    self.searchFiltersLayout.addWidget(self.filters)
    self.browser = parent
    self.vfs = vfs.vfs()
    self.model = searchview.model
    self.searchview = searchview

    self.matched = 0
    self.searchTH = SearchThread(self)

    self.qmode = {0: "$",
                  1: "/",
                  2: "~",
                  3: "\""}
    self.configure()

  def configure(self):
    # Quick search
    self.connect(self.quickSearch, SIGNAL("clicked(bool)"), self.quickSearchMode)
    # Thread
    self.connect(self.startButton, SIGNAL("clicked(bool)"), self.startSearch)
    self.connect(self.stopButton, SIGNAL("clicked(bool)"), self.searchTH.stopSearch)
    self.connect(self.searchTH, SIGNAL("count"), self.updateProgressbar)
    self.connect(self.searchTH, SIGNAL("match"), self.updateMatchedNodes)
    self.connect(self.searchTH, SIGNAL("finished"), self.searchStoped)
    self.connect(self.searchTH, SIGNAL("started"), self.searchStarted)
    self.connect(self.searchTH, SIGNAL("stoped"), self.searchStoped)
    # Advanced search 
    self.connect(self.advancedSearch, SIGNAL("clicked(bool)"), self.advancedSearchMode)
    # Typebuttons
    self.connect(self.imageType, SIGNAL("clicked()"), self.buttonClicked)
    self.connect(self.videoType, SIGNAL("clicked()"), self.buttonClicked)
    self.connect(self.soundType, SIGNAL("clicked()"), self.buttonClicked)
    self.connect(self.documentType, SIGNAL("clicked()"), self.buttonClicked)
  
  def buttonClicked(self):
    if not self.buttonsChecked():
      self.quickEdit.setEnabled(True)
      self.quickMode.setEnabled(True)
    else:
      self.quickEdit.setEnabled(False)
      self.quickMode.setEnabled(False)
#    self.refreshQueryEdit()
  
  def buttonsChecked(self):
    self.quickEdit.clear()
    if self.imageType.isChecked() or self.videoType.isChecked() or self.soundType.isChecked() or self.documentType.isChecked():
      self.quickEdit.insert(self.generateButtonsClicked())
      return True
    return False

  def generateButtonsClicked(self):
    r = ""
    count = 0
    if self.imageType.isChecked():
      r += DEFAULT_FILTERS["Images"]
      count += 1
    if self.videoType.isChecked():
      if count != 0:
        r += " or "
      r += DEFAULT_FILTERS["Videos"]
      count += 1
    if self.soundType.isChecked():
      if count != 0:
        r += " or "
      r += DEFAULT_FILTERS["Audios"]
      count += 1
    if self.documentType.isChecked():
      if count != 0:
        r += " or "
      r += DEFAULT_FILTERS["Documents"]
      count += 1
    return r

  def startSearch(self):
    query = self.buildQuery()
    if query != None:
      if self.fromRoot.isChecked():
        rootnode = self.vfs.getnode("/")
      else:
        rootnode = self.browser.navigation.currentNode
      if self.browser.filter.isChecked():
        self.browser.viewpan.setCurrentWidget(self.browser.searchview)
      self.model.clearList()
      self.matchedNodeLabel.setText("0")
      self.matched = 0
      r = self.searchTH.setContext(query, rootnode, self.model)
      if r:
        self.searchTH.start()
    else:
      box = QMessageBox(QMessageBox.Critical, self.tr("Error"), self.tr("Please, specify your query"), \
                          QMessageBox.NoButton, self)
      box.exec_()

  def buildQuery(self):
    if self.quickSearch.isChecked():
      query = ""
      if self.quickEdit.text() != "":
        # Check if buttons are checked
        if not self.quickEdit.isEnabled():
          query += str(unicode(self.quickEdit.text()).encode('utf-8'))
        else:
          if self.quickMode.currentIndex() in xrange(0,4):
            pat = self.qmode[self.quickMode.currentIndex()]
            query += "name matches" + pat + str(unicode(self.quickEdit.text()).encode('utf-8')) + pat
          else:
            query += str(unicode(self.quickEdit.text()).encode('utf-8'))
      else:
        return None
      return query
    else:
      return self.filters.buildAllQueries()
      
  def updateProgressbar(self, count):
    self.searchProgress.setValue(count)

  def updateMatchedNodes(self):
    self.matched += 1
    self.matchedNodeLabel.setText(str(self.matched))
    self.searchview.refreshVisible()

  def searchStarted(self):
    QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
    self.searchProgress.setValue(0)
    self.matchedNodeLabel.setText(QString("0"))
    self.startButton.setEnabled(False)
    self.stopButton.setEnabled(True)

  def searchStoped(self):
    self.startButton.setEnabled(True)
    self.stopButton.setEnabled(False)
    if self.browser.filter.isChecked():
      self.browser.viewpan.setCurrentWidget(self.browser.filterview)
      self.browser.filterwidget.resetFilter()
    QApplication.restoreOverrideCursor()

  def quickSearchMode(self, state):
    if state:
      self.advancedSearch.setChecked(False)
    else:
      self.advancedSearch.setChecked(True)

  def advancedSearchMode(self, state):
    if state:
      self.quickSearch.setChecked(False)
    else:
      self.quickSearch.setChecked(True)
Beispiel #2
0
class SearchPanel(Ui_searchPanel, QWidget):
    def __init__(self, parent, searchview):
        super(QWidget, self).__init__(parent)
        self.setupUi(self)
        self.filters = CustomFiltersTable(self)
        self.searchFiltersLayout.addWidget(self.filters)
        self.browser = parent
        self.vfs = vfs.vfs()
        self.model = searchview.model
        self.searchview = searchview

        self.matched = 0
        self.searchTH = SearchThread(self)

        self.qmode = {0: "$", 1: "/", 2: "~", 3: "\""}
        self.configure()

    def configure(self):
        # Quick search
        self.connect(self.quickSearch, SIGNAL("clicked(bool)"),
                     self.quickSearchMode)
        # Thread
        self.connect(self.startButton, SIGNAL("clicked(bool)"),
                     self.startSearch)
        self.connect(self.stopButton, SIGNAL("clicked(bool)"),
                     self.searchTH.stopSearch)
        self.connect(self.searchTH, SIGNAL("count"), self.updateProgressbar)
        self.connect(self.searchTH, SIGNAL("match"), self.updateMatchedNodes)
        self.connect(self.searchTH, SIGNAL("finished"), self.searchStoped)
        self.connect(self.searchTH, SIGNAL("started"), self.searchStarted)
        self.connect(self.searchTH, SIGNAL("stoped"), self.searchStoped)
        # Advanced search
        self.connect(self.advancedSearch, SIGNAL("clicked(bool)"),
                     self.advancedSearchMode)
        # Typebuttons
        self.connect(self.imageType, SIGNAL("clicked()"), self.buttonClicked)
        self.connect(self.videoType, SIGNAL("clicked()"), self.buttonClicked)
        self.connect(self.soundType, SIGNAL("clicked()"), self.buttonClicked)
        self.connect(self.documentType, SIGNAL("clicked()"),
                     self.buttonClicked)

    def buttonClicked(self):
        if not self.buttonsChecked():
            self.quickEdit.setEnabled(True)
            self.quickMode.setEnabled(True)
        else:
            self.quickEdit.setEnabled(False)
            self.quickMode.setEnabled(False)
#    self.refreshQueryEdit()

    def buttonsChecked(self):
        self.quickEdit.clear()
        if self.imageType.isChecked() or self.videoType.isChecked(
        ) or self.soundType.isChecked() or self.documentType.isChecked():
            self.quickEdit.insert(self.generateButtonsClicked())
            return True
        return False

    def generateButtonsClicked(self):
        r = ""
        count = 0
        if self.imageType.isChecked():
            r += DEFAULT_FILTERS["Images"]
            count += 1
        if self.videoType.isChecked():
            if count != 0:
                r += " or "
            r += DEFAULT_FILTERS["Videos"]
            count += 1
        if self.soundType.isChecked():
            if count != 0:
                r += " or "
            r += DEFAULT_FILTERS["Audios"]
            count += 1
        if self.documentType.isChecked():
            if count != 0:
                r += " or "
            r += DEFAULT_FILTERS["Documents"]
            count += 1
        return r

    def startSearch(self):
        query = self.buildQuery()
        if query != None:
            if self.fromRoot.isChecked():
                rootnode = self.vfs.getnode("/")
            else:
                rootnode = self.browser.navigation.currentNode
            if self.browser.filter.isChecked():
                self.browser.viewpan.setCurrentWidget(self.browser.searchview)
            self.model.clearList()
            self.matchedNodeLabel.setText("0")
            self.matched = 0
            r = self.searchTH.setContext(query, rootnode, self.model)
            if r:
                self.searchTH.start()
        else:
            box = QMessageBox(QMessageBox.Critical, self.tr("Error"), self.tr("Please, specify your query"), \
                                QMessageBox.NoButton, self)
            box.exec_()

    def buildQuery(self):
        if self.quickSearch.isChecked():
            query = ""
            if self.quickEdit.text() != "":
                # Check if buttons are checked
                if not self.quickEdit.isEnabled():
                    query += str(
                        unicode(self.quickEdit.text()).encode('utf-8'))
                else:
                    if self.quickMode.currentIndex() in xrange(0, 4):
                        pat = self.qmode[self.quickMode.currentIndex()]
                        query += "name matches" + pat + str(
                            unicode(
                                self.quickEdit.text()).encode('utf-8')) + pat
                    else:
                        query += str(
                            unicode(self.quickEdit.text()).encode('utf-8'))
            else:
                return None
            return query
        else:
            return self.filters.buildAllQueries()

    def updateProgressbar(self, count):
        self.searchProgress.setValue(count)

    def updateMatchedNodes(self):
        self.matched += 1
        self.matchedNodeLabel.setText(str(self.matched))
        self.searchview.refreshVisible()

    def searchStarted(self):
        QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
        self.searchProgress.setValue(0)
        self.matchedNodeLabel.setText(QString("0"))
        self.startButton.setEnabled(False)
        self.stopButton.setEnabled(True)

    def searchStoped(self):
        self.startButton.setEnabled(True)
        self.stopButton.setEnabled(False)
        if self.browser.filter.isChecked():
            self.browser.viewpan.setCurrentWidget(self.browser.filterview)
            self.browser.filterwidget.resetFilter()
        QApplication.restoreOverrideCursor()

    def quickSearchMode(self, state):
        if state:
            self.advancedSearch.setChecked(False)
        else:
            self.advancedSearch.setChecked(True)

    def advancedSearchMode(self, state):
        if state:
            self.quickSearch.setChecked(False)
        else:
            self.quickSearch.setChecked(True)