Beispiel #1
0
class FilterWidget(Ui_filterWidget, QWidget):
  def __init__(self, parent):
    QWidget.__init__(self, parent)
    self.setupUi(self)
    self.parent = parent
    self.edit = self.filterCombo.lineEdit()    
    self.filterMode = {0: "$",
                       1: "~",
                       2: "/",
                       3: "\""}
    self.query = ""
    self.createFilterThread()
    self.connect(self.filterTH, SIGNAL("match"), self.updateMatchedNodes)
    self.connect(self.filterTH, SIGNAL("finished"), self.searchStoped)
    self.connect(self.filterTH, SIGNAL("started"), self.searchStarted)
    self.connect(self.filterTH, SIGNAL("stoped"), self.searchStoped)
    self.connect(self.clear, SIGNAL("clicked(bool)"), self.resetFilter)
    self.connect(self.stop, SIGNAL("clicked(bool)"), self.stopFilter)
    self.connect(self.edit, SIGNAL("textChanged(QString)"), self.updateQuery)
    self.connect(self.mode, SIGNAL("currentIndexChanged(int)"), self.modeChanged)
    self.redstyle = QString("QWidget {color:red}")
    self.greenstyle = QString("QWidget {color:green}")
    self.blackstyle = QString("QWidget {color:black}")
    self.matched = 0
    self.stop.setEnabled(False)
    self.timer = QTimer(self)
    self.timer.setSingleShot(True)
    self.filtertagwidget = FilterTagWidget(self)
    self.filtertagwidget.hide()
    self.connect(self.timer, SIGNAL("timeout()"), self.quickFilter)

  def createFilterThread(self):
    self.filterTH = SearchThread(self)

  def updateQuery(self, query):
    self.timer.start(1000)
    if self.mode.currentIndex() in xrange(0,4):
      self.query = query
    else:
      f = Filter("completer")
      try:
        q = str(unicode(query).encode('utf-8'))
        f.compile(q)
        self.edit.setStyleSheet(self.greenstyle)
      except RuntimeError:
        self.edit.setStyleSheet(self.redstyle)

  def modeChanged(self, index):
    if index == 5:
      self.verticalLayout.addWidget(self.filtertagwidget)
      self.filtertagwidget.toolbar.refreshTags()
      self.filterCombo.setEnabled(False)
      self.filtertagwidget.show()
    else:
      self.verticalLayout.removeWidget(self.filtertagwidget)
      self.filterCombo.setEnabled(True)
      self.filtertagwidget.hide()
      

  def launchFilter(self, query=None):
    if not query:
      query = self.filterCombo.lineEdit().text()
    else:
      query = query
    nodelist = self.sourceModel().list()
    if len(nodelist) > 0:
      self.parent.filterview.model.clearList()
      q = str(unicode(query).encode('utf-8'))
      r = self.filterTH.setListContext(q, nodelist, self.parent.filterview.model)
      if r:
        self.filterTH.start()

  def quickFilter(self):
    self.timer.stop()
    index = self.mode.currentIndex()
    if index in xrange(0,4):
      self.filterTH.stopSearch()
      if self.query == "":
        self.resetFilter()
      else:
        self.resetFilter()
        q = "name matches " + self.filterMode[index] + self.query + self.filterMode[index]
        self.launchFilter(q)
    else:
      try:
        query = self.filterCombo.lineEdit().text()
        if query != "":
          f = Filter("test")
          q = str(unicode(query).encode('utf-8'))
          f.compile(q)
          self.edit.setStyleSheet(self.greenstyle)
          self.resetFilter()
          self.launchFilter()
        else:
          self.resetFilter()
      except RuntimeError:
        self.edit.setStyleSheet(self.redstyle)

  def stopFilter(self):
    self.filterTH.stopSearch

  def sourceModel(self):
    if self.parent.search.isChecked():
      return self.parent.searchview.model
    else:
      return self.parent.browserview.model

  def resetFilter(self):
    self.edit.setStyleSheet(self.blackstyle)
    self.parent.filterview.model.changeList(self.sourceModel().list())
    count = len(self.sourceModel().list())
    if count > 0:
      self.reslabel.setStyleSheet(self.greenstyle)
      self.countlabel.setStyleSheet(self.greenstyle)
    else:
      self.reslabel.setStyleSheet(self.redstyle)
      self.countlabel.setStyleSheet(self.redstyle)
    self.countlabel.setText(str(count))
    self.reslabel.setText(str(count))
    self.parent.filterview.refreshVisible()

  def updateMatchedNodes(self):
    if self.matched == 0:
      self.reslabel.setStyleSheet(self.greenstyle)
      self.countlabel.setStyleSheet(self.greenstyle)
    self.matched += 1
    self.countlabel.setText(str(self.matched))
    self.parent.filterview.refreshVisible()

  def searchStoped(self):
    QApplication.restoreOverrideCursor()
    self.stop.setEnabled(False)

  def searchStarted(self):
    QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
    self.stop.setEnabled(True)
    self.matched = 0
    self.reslabel.setStyleSheet(self.redstyle)
    self.countlabel.setStyleSheet(self.redstyle)
    self.countlabel.setText(str(self.matched))
    self.reslabel.show()
    self.countlabel.show()
Beispiel #2
0
class FilterWidget(Ui_filterWidget, QWidget):
    def __init__(self, parent):
        QWidget.__init__(self, parent)
        self.setupUi(self)
        self.parent = parent
        self.edit = self.filterCombo.lineEdit()
        self.filterMode = {0: "$", 1: "~", 2: "/", 3: "\""}
        self.query = ""
        self.createFilterThread()
        self.connect(self.filterTH, SIGNAL("match"), self.updateMatchedNodes)
        self.connect(self.filterTH, SIGNAL("finished"), self.searchStoped)
        self.connect(self.filterTH, SIGNAL("started"), self.searchStarted)
        self.connect(self.filterTH, SIGNAL("stoped"), self.searchStoped)
        self.connect(self.clear, SIGNAL("clicked(bool)"), self.resetFilter)
        self.connect(self.stop, SIGNAL("clicked(bool)"), self.stopFilter)
        self.connect(self.edit, SIGNAL("textChanged(QString)"),
                     self.updateQuery)
        self.connect(self.mode, SIGNAL("currentIndexChanged(int)"),
                     self.modeChanged)
        self.redstyle = QString("QWidget {color:red}")
        self.greenstyle = QString("QWidget {color:green}")
        self.blackstyle = QString("QWidget {color:black}")
        self.matched = 0
        self.stop.setEnabled(False)
        self.timer = QTimer(self)
        self.timer.setSingleShot(True)
        self.filtertagwidget = FilterTagWidget(self)
        self.filtertagwidget.hide()
        self.connect(self.timer, SIGNAL("timeout()"), self.quickFilter)

    def createFilterThread(self):
        self.filterTH = SearchThread(self)

    def updateQuery(self, query):
        self.timer.start(1000)
        if self.mode.currentIndex() in xrange(0, 4):
            self.query = query
        else:
            f = Filter("completer")
            try:
                q = str(unicode(query).encode('utf-8'))
                f.compile(q)
                self.edit.setStyleSheet(self.greenstyle)
            except RuntimeError:
                self.edit.setStyleSheet(self.redstyle)

    def modeChanged(self, index):
        if index == 5:
            self.verticalLayout.addWidget(self.filtertagwidget)
            self.filtertagwidget.toolbar.refreshTags()
            self.filterCombo.setEnabled(False)
            self.filtertagwidget.show()
        else:
            self.verticalLayout.removeWidget(self.filtertagwidget)
            self.filterCombo.setEnabled(True)
            self.filtertagwidget.hide()

    def launchFilter(self, query=None):
        if not query:
            query = self.filterCombo.lineEdit().text()
        else:
            query = query
        nodelist = self.sourceModel().list()
        if len(nodelist) > 0:
            self.parent.filterview.model.clearList()
            q = str(unicode(query).encode('utf-8'))
            r = self.filterTH.setListContext(q, nodelist,
                                             self.parent.filterview.model)
            if r:
                self.filterTH.start()

    def quickFilter(self):
        self.timer.stop()
        index = self.mode.currentIndex()
        if index in xrange(0, 4):
            self.filterTH.stopSearch()
            if self.query == "":
                self.resetFilter()
            else:
                self.resetFilter()
                q = "name matches " + self.filterMode[
                    index] + self.query + self.filterMode[index]
                self.launchFilter(q)
        else:
            try:
                query = self.filterCombo.lineEdit().text()
                if query != "":
                    f = Filter("test")
                    q = str(unicode(query).encode('utf-8'))
                    f.compile(q)
                    self.edit.setStyleSheet(self.greenstyle)
                    self.resetFilter()
                    self.launchFilter()
                else:
                    self.resetFilter()
            except RuntimeError:
                self.edit.setStyleSheet(self.redstyle)

    def stopFilter(self):
        self.filterTH.stopSearch

    def sourceModel(self):
        if self.parent.search.isChecked():
            return self.parent.searchview.model
        else:
            return self.parent.browserview.model

    def resetFilter(self):
        self.edit.setStyleSheet(self.blackstyle)
        self.parent.filterview.model.changeList(self.sourceModel().list())
        count = len(self.sourceModel().list())
        if count > 0:
            self.reslabel.setStyleSheet(self.greenstyle)
            self.countlabel.setStyleSheet(self.greenstyle)
        else:
            self.reslabel.setStyleSheet(self.redstyle)
            self.countlabel.setStyleSheet(self.redstyle)
        self.countlabel.setText(str(count))
        self.reslabel.setText(str(count))
        self.parent.filterview.refreshVisible()

    def updateMatchedNodes(self):
        if self.matched == 0:
            self.reslabel.setStyleSheet(self.greenstyle)
            self.countlabel.setStyleSheet(self.greenstyle)
        self.matched += 1
        self.countlabel.setText(str(self.matched))
        self.parent.filterview.refreshVisible()

    def searchStoped(self):
        QApplication.restoreOverrideCursor()
        self.stop.setEnabled(False)

    def searchStarted(self):
        QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
        self.stop.setEnabled(True)
        self.matched = 0
        self.reslabel.setStyleSheet(self.redstyle)
        self.countlabel.setStyleSheet(self.redstyle)
        self.countlabel.setText(str(self.matched))
        self.reslabel.show()
        self.countlabel.show()