Ejemplo n.º 1
0
    def __init__(self, parentWidget):
        QWidget.__init__(self, parentWidget)

        self.editorWidget = parentWidget.editorWidget  # TODO: Review class structure

        self.searching = False
        self.ui = Ui_SearchWidget()
        self.ui.setupUi(self)
        self.resultListModel = QStandardItemModel(self.ui.resultList)
        self.ui.resultWidget.setCurrentIndex(0)
        self.ui.resultList.setModel(self.resultListModel)
        self.ui.resultList.selectionModel().selectionChanged.connect(
            self.doResultSelected)

        self.startIcon = QIcon(':/icons/search-global-start.png')
        self.stopIcon = QIcon(':/icons/search-global-stop.png')
        self.ui.startStopButton.setIcon(self.startIcon)

        self.ui.searchInput.returnPressed.connect(self.doReturnKey)
        self.ui.startStopButton.clicked.connect(self.doStartStopButton)

        self.workerThread = QThread()
        self.worker = SearchWorker()
        self.worker.moveToThread(self.workerThread)
        self.startWork.connect(self.worker.startSearch)
        self.worker.searchDone.connect(self.searchDone)
        self.worker.addMatch.connect(self.addMatch)
        # self.stopWork.connect(self.worker.stopSearch)
        self.workerThread.start()
Ejemplo n.º 2
0
    def __init__(self, parentWidget):
        QWidget.__init__(self, parentWidget)
        
        self.editorWidget = parentWidget.editorWidget   # TODO: Review class structure

        self.searching = False
        self.ui = Ui_SearchWidget()
        self.ui.setupUi(self)
        self.resultListModel = QStandardItemModel(self.ui.resultList)
        self.ui.resultWidget.setCurrentIndex(0)
        self.ui.resultList.setModel(self.resultListModel)
        self.ui.resultList.selectionModel().selectionChanged.connect(self.doResultSelected)

        self.startIcon = QIcon(':/icons/search-global-start.png')
        self.stopIcon = QIcon(':/icons/search-global-stop.png')
        self.ui.startStopButton.setIcon(self.startIcon)

        self.ui.searchInput.returnPressed.connect(self.doReturnKey)
        self.ui.startStopButton.clicked.connect(self.doStartStopButton)

        self.workerThread = QThread()
        self.worker = SearchWorker()
        self.worker.moveToThread(self.workerThread)
        self.startWork.connect(self.worker.startSearch)
        self.worker.searchDone.connect(self.searchDone)
        self.worker.addMatch.connect(self.addMatch)
        # self.stopWork.connect(self.worker.stopSearch)
        self.workerThread.start()
Ejemplo n.º 3
0
class SearchWidget(QWidget):

    startWork = pyqtSignal(str)
    resultSelected = pyqtSignal(str)

    def __init__(self, parentWidget):
        QWidget.__init__(self, parentWidget)
        
        self.editorWidget = parentWidget.editorWidget   # TODO: Review class structure

        self.searching = False
        self.ui = Ui_SearchWidget()
        self.ui.setupUi(self)
        self.resultListModel = QStandardItemModel(self.ui.resultList)
        self.ui.resultWidget.setCurrentIndex(0)
        self.ui.resultList.setModel(self.resultListModel)
        self.ui.resultList.selectionModel().selectionChanged.connect(self.doResultSelected)

        self.startIcon = QIcon(':/icons/search-global-start.png')
        self.stopIcon = QIcon(':/icons/search-global-stop.png')
        self.ui.startStopButton.setIcon(self.startIcon)

        self.ui.searchInput.returnPressed.connect(self.doReturnKey)
        self.ui.startStopButton.clicked.connect(self.doStartStopButton)

        self.workerThread = QThread()
        self.worker = SearchWorker()
        self.worker.moveToThread(self.workerThread)
        self.startWork.connect(self.worker.startSearch)
        self.worker.searchDone.connect(self.searchDone)
        self.worker.addMatch.connect(self.addMatch)
        # self.stopWork.connect(self.worker.stopSearch)
        self.workerThread.start()


    def doReturnKey(self):
        if self.searching:
            self.worker.stopSearch()        # must not call trough a slot since it would be queued
                                            # ATTENTION! Still a race condition!!! (At least when the search process just finished normally)
        self.startSearch()


    def doStartStopButton(self):
        if self.searching:
            self.worker.stopSearch()        # must not call trough a slot since it would be queued
            self.searchDone()
        else: 
            self.startSearch()


    def startSearch(self):
        self.searching = True
        self.ui.startStopButton.setIcon(self.stopIcon)
        self.resultListModel.clear()
        queryText = self.ui.searchInput.text()
        # rootPath = self.editorWidget.page.notepad.getRootpath()

        # Setup worker with required data
        self.worker.notepad = self.editorWidget.page.notepad
        # NOTE: we are querying the page list in this thread,
        # to avoid concurrency issues with SQLite.
        self.worker.pageList = self.editorWidget.page.notepad.getAllPages()
        self.startWork.emit(queryText)


    def searchDone(self):
        print("Search Done.")
        self.searching = False
        if self.resultListModel.rowCount() == 0:
            self.ui.resultWidget.setCurrentIndex(1)  # show error page
        self.ui.startStopButton.setIcon(self.startIcon)

    def addMatch(self, pageId):
        # print("    Adding: {}".format(pageId))
        self.ui.resultWidget.setCurrentIndex(0)     # make sure to show the list
        resultItem = QStandardItem(pageId)
        resultItem.setEditable(False)
        self.resultListModel.appendRow(resultItem)


    def doResultSelected(self, selectedtItem, idx2):
        indexes = selectedtItem.indexes()
        if len(indexes) == 1:
            item = self.resultListModel.itemFromIndex(indexes[0])
            pageId = item.text()
            self.resultSelected.emit(pageId)
Ejemplo n.º 4
0
class SearchWidget(QWidget):

    startWork = pyqtSignal(str)
    resultSelected = pyqtSignal(str)

    def __init__(self, parentWidget):
        QWidget.__init__(self, parentWidget)

        self.editorWidget = parentWidget.editorWidget  # TODO: Review class structure

        self.searching = False
        self.ui = Ui_SearchWidget()
        self.ui.setupUi(self)
        self.resultListModel = QStandardItemModel(self.ui.resultList)
        self.ui.resultWidget.setCurrentIndex(0)
        self.ui.resultList.setModel(self.resultListModel)
        self.ui.resultList.selectionModel().selectionChanged.connect(
            self.doResultSelected)

        self.startIcon = QIcon(':/icons/search-global-start.png')
        self.stopIcon = QIcon(':/icons/search-global-stop.png')
        self.ui.startStopButton.setIcon(self.startIcon)

        self.ui.searchInput.returnPressed.connect(self.doReturnKey)
        self.ui.startStopButton.clicked.connect(self.doStartStopButton)

        self.workerThread = QThread()
        self.worker = SearchWorker()
        self.worker.moveToThread(self.workerThread)
        self.startWork.connect(self.worker.startSearch)
        self.worker.searchDone.connect(self.searchDone)
        self.worker.addMatch.connect(self.addMatch)
        # self.stopWork.connect(self.worker.stopSearch)
        self.workerThread.start()

    def doReturnKey(self):
        if self.searching:
            self.worker.stopSearch(
            )  # must not call trough a slot since it would be queued
            # ATTENTION! Still a race condition!!! (At least when the search process just finished normally)
        self.startSearch()

    def doStartStopButton(self):
        if self.searching:
            self.worker.stopSearch(
            )  # must not call trough a slot since it would be queued
            self.searchDone()
        else:
            self.startSearch()

    def startSearch(self):
        self.searching = True
        self.ui.startStopButton.setIcon(self.stopIcon)
        self.resultListModel.clear()
        queryText = self.ui.searchInput.text()
        # rootPath = self.editorWidget.page.notepad.getRootpath()

        # Setup worker with required data
        self.worker.notepad = self.editorWidget.page.notepad
        # NOTE: we are querying the page list in this thread,
        # to avoid concurrency issues with SQLite.
        self.worker.pageList = self.editorWidget.page.notepad.getAllPages()
        self.startWork.emit(queryText)

    def searchDone(self):
        print("Search Done.")
        self.searching = False
        if self.resultListModel.rowCount() == 0:
            self.ui.resultWidget.setCurrentIndex(1)  # show error page
        self.ui.startStopButton.setIcon(self.startIcon)

    def addMatch(self, pageId):
        # print("    Adding: {}".format(pageId))
        self.ui.resultWidget.setCurrentIndex(0)  # make sure to show the list
        resultItem = QStandardItem(pageId)
        resultItem.setEditable(False)
        self.resultListModel.appendRow(resultItem)

    def doResultSelected(self, selectedtItem, idx2):
        indexes = selectedtItem.indexes()
        if len(indexes) == 1:
            item = self.resultListModel.itemFromIndex(indexes[0])
            pageId = item.text()
            self.resultSelected.emit(pageId)