--- a/QScintilla/MiniEditor.py Sat May 20 14:33:00 2017 +0200 +++ b/QScintilla/MiniEditor.py Sat May 20 16:13:23 2017 +0200 @@ -127,19 +127,19 @@ "replace": [] } from .SearchReplaceWidget import SearchReplaceWidget - self.searchDlg = SearchReplaceWidget(False, self, self) - self.replaceDlg = SearchReplaceWidget(True, self, self) + self.__searchWidget = SearchReplaceWidget(False, self, self) + self.__replaceWidget = SearchReplaceWidget(True, self, self) centralWidget = QWidget() layout = QVBoxLayout() layout.setContentsMargins(1, 1, 1, 1) layout.addWidget(self.__textEdit) - layout.addWidget(self.searchDlg) - layout.addWidget(self.replaceDlg) + layout.addWidget(self.__searchWidget) + layout.addWidget(self.__replaceWidget) centralWidget.setLayout(layout) self.setCentralWidget(centralWidget) - self.searchDlg.hide() - self.replaceDlg.hide() + self.__searchWidget.hide() + self.__replaceWidget.hide() self.lexer_ = None self.apiLanguage = "" @@ -180,9 +180,9 @@ self.__contextMenuRequested) self.__textEdit.selectionChanged.connect( - self.searchDlg.selectionChanged) + self.__searchWidget.selectionChanged) self.__textEdit.selectionChanged.connect( - self.replaceDlg.selectionChanged) + self.__replaceWidget.selectionChanged) self.__setCurrentFile("") if filename: @@ -1954,7 +1954,7 @@ """ dialog is shown to enter the searchtext and options""" """ for the search.</p>""" )) - self.searchAct.triggered.connect(self.__search) + self.searchAct.triggered.connect(self.showSearchWidget) self.searchActions.append(self.searchAct) self.searchNextAct = E5Action( @@ -1974,7 +1974,7 @@ """ editor. The previously entered searchtext and options are""" """ reused.</p>""" )) - self.searchNextAct.triggered.connect(self.searchDlg.findNext) + self.searchNextAct.triggered.connect(self.__searchNext) self.searchActions.append(self.searchNextAct) self.searchPrevAct = E5Action( @@ -1994,7 +1994,7 @@ """ current editor. The previously entered searchtext and""" """ options are reused.</p>""" )) - self.searchPrevAct.triggered.connect(self.searchDlg.findPrev) + self.searchPrevAct.triggered.connect(self.__searchPrev) self.searchActions.append(self.searchPrevAct) self.searchClearMarkersAct = E5Action( @@ -2033,8 +2033,76 @@ """ it. A dialog is shown to enter the searchtext, the""" """ replacement text and options for the search and replace.</p>""" )) - self.replaceAct.triggered.connect(self.__replace) + self.replaceAct.triggered.connect(self.showReplaceWidget) self.searchActions.append(self.replaceAct) + + self.replaceAndSearchAct = E5Action( + QCoreApplication.translate( + 'ViewManager', 'Replace and Search'), + UI.PixmapCache.getIcon("editReplaceSearch.png"), + QCoreApplication.translate( + 'ViewManager', 'Replace and Search'), + QKeySequence(QCoreApplication.translate( + 'ViewManager', "Meta+R", "Search|Replace and Search")), + 0, + self, 'vm_replace_search') + self.replaceAndSearchAct.setStatusTip(QCoreApplication.translate( + 'ViewManager', + 'Replace the found text and search the next occurrence')) + self.replaceAndSearchAct.setWhatsThis(QCoreApplication.translate( + 'ViewManager', + """<b>Replace and Search</b>""" + """<p>Replace the found occurrence of text in the current""" + """ editor and search for the next one. The previously entered""" + """ search text and options are reused.</p>""" + )) + self.replaceAndSearchAct.triggered.connect( + self.__replaceWidget.replaceSearch) + self.searchActions.append(self.replaceAndSearchAct) + + self.replaceSelectionAct = E5Action( + QCoreApplication.translate( + 'ViewManager', 'Replace Occurrence'), + UI.PixmapCache.getIcon("editReplace.png"), + QCoreApplication.translate( + 'ViewManager', 'Replace Occurrence'), + QKeySequence(QCoreApplication.translate( + 'ViewManager', "Ctrl+Meta+R", "Search|Replace Occurrence")), + 0, + self, 'vm_replace_occurrence') + self.replaceSelectionAct.setStatusTip(QCoreApplication.translate( + 'ViewManager', 'Replace the found text')) + self.replaceSelectionAct.setWhatsThis(QCoreApplication.translate( + 'ViewManager', + """<b>Replace Occurrence</b>""" + """<p>Replace the found occurrence of the search text in the""" + """ current editor.</p>""" + )) + self.replaceSelectionAct.triggered.connect( + self.__replaceWidget.replace) + self.searchActions.append(self.replaceSelectionAct) + + self.replaceAllAct = E5Action( + QCoreApplication.translate( + 'ViewManager', 'Replace All'), + UI.PixmapCache.getIcon("editReplaceAll.png"), + QCoreApplication.translate( + 'ViewManager', 'Replace All'), + QKeySequence(QCoreApplication.translate( + 'ViewManager', "Shift+Meta+R", "Search|Replace All")), + 0, + self, 'vm_replace_all') + self.replaceAllAct.setStatusTip(QCoreApplication.translate( + 'ViewManager', 'Replace search text occurrences')) + self.replaceAllAct.setWhatsThis(QCoreApplication.translate( + 'ViewManager', + """<b>Replace All</b>""" + """<p>Replace all occurrences of the search text in the current""" + """ editor.</p>""" + )) + self.replaceAllAct.triggered.connect( + self.__replaceWidget.replaceAll) + self.searchActions.append(self.replaceAllAct) def __createHelpActions(self): """ @@ -2114,6 +2182,9 @@ self.editMenu.addAction(self.searchPrevAct) self.editMenu.addAction(self.searchClearMarkersAct) self.editMenu.addAction(self.replaceAct) + self.editMenu.addAction(self.replaceAndSearchAct) + self.editMenu.addAction(self.replaceSelectionAct) + self.editMenu.addAction(self.replaceAllAct) self.menuBar().addSeparator() @@ -3043,13 +3114,39 @@ """ line, index = self.__textEdit.getCursorPosition() return self.__getWord(line, index) + + def showSearchWidget(self): + """ + Public method to show the search widget. + """ + self.__replaceWidget.hide() + self.__searchWidget.show() + self.__searchWidget.show(self.textForFind()) - def __search(self): + def __searchNext(self): + """ + Private slot to handle the search next action. """ - Private method to handle the search action. + if self.__replaceWidget.isVisible(): + self.__replaceWidget.findNext() + else: + self.__searchWidget.findNext() + + def __searchPrev(self): + """ + Private slot to handle the search previous action. """ - self.replaceDlg.close() - self.searchDlg.show(self.textForFind()) + if self.__replaceWidget.isVisible(): + self.__replaceWidget.findPrev() + else: + self.__searchWidget.findPrev() + + def showReplaceWidget(self): + """ + Public method to show the replace widget. + """ + self.__searchWidget.hide() + self.__replaceWidget.show(self.textForFind()) def __searchClearMarkers(self): """ @@ -3057,13 +3154,6 @@ """ self.clearSearchIndicators() - def __replace(self): - """ - Private method to handle the replace action. - """ - self.searchDlg.close() - self.replaceDlg.show(self.textForFind()) - def activeWindow(self): """ Public method to fulfill the ViewManager interface.