94 self.modeComboBox.addItem(self.tr("Filter"), "filter") |
94 self.modeComboBox.addItem(self.tr("Filter"), "filter") |
95 |
95 |
96 self.fieldCombo.addItem(self.tr("Revision"), "revision") |
96 self.fieldCombo.addItem(self.tr("Revision"), "revision") |
97 self.fieldCombo.addItem(self.tr("Author"), "author") |
97 self.fieldCombo.addItem(self.tr("Author"), "author") |
98 self.fieldCombo.addItem(self.tr("Message"), "message") |
98 self.fieldCombo.addItem(self.tr("Message"), "message") |
|
99 self.fieldCombo.addItem(self.tr("File"), "file") |
99 |
100 |
100 self.vcs = vcs |
101 self.vcs = vcs |
101 if mode in ("log", "incoming", "outgoing"): |
102 if mode in ("log", "incoming", "outgoing"): |
102 self.commandMode = mode |
103 self.commandMode = mode |
103 self.initialCommandMode = mode |
104 self.initialCommandMode = mode |
1426 if self.__filterLogsEnabled: |
1427 if self.__filterLogsEnabled: |
1427 from_ = self.fromDate.date().toString("yyyy-MM-dd") |
1428 from_ = self.fromDate.date().toString("yyyy-MM-dd") |
1428 to_ = self.toDate.date().addDays(1).toString("yyyy-MM-dd") |
1429 to_ = self.toDate.date().addDays(1).toString("yyyy-MM-dd") |
1429 branch = self.branchCombo.currentText() |
1430 branch = self.branchCombo.currentText() |
1430 closedBranch = branch + '--' |
1431 closedBranch = branch + '--' |
1431 fieldIndex, searchRx = self.__prepareFieldSearch() |
1432 fieldIndex, searchRx, indexIsRole = self.__prepareFieldSearch() |
1432 |
1433 |
1433 ## txt = self.fieldCombo.currentText() |
|
1434 ## if txt == self.tr("Author"): |
|
1435 ## fieldIndex = self.AuthorColumn |
|
1436 ## searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) |
|
1437 ## elif txt == self.tr("Revision"): |
|
1438 ## fieldIndex = self.RevisionColumn |
|
1439 ## txt = self.rxEdit.text() |
|
1440 ## if txt.startswith("^"): |
|
1441 ## searchRx = QRegExp("^\s*{0}".format(txt[1:]), |
|
1442 ## Qt.CaseInsensitive) |
|
1443 ## else: |
|
1444 ## searchRx = QRegExp(txt, Qt.CaseInsensitive) |
|
1445 ## else: |
|
1446 ## fieldIndex = self.MessageColumn |
|
1447 ## searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) |
|
1448 ## |
|
1449 visibleItemCount = self.logTree.topLevelItemCount() |
1434 visibleItemCount = self.logTree.topLevelItemCount() |
1450 currentItem = self.logTree.currentItem() |
1435 currentItem = self.logTree.currentItem() |
1451 for topIndex in range(self.logTree.topLevelItemCount()): |
1436 for topIndex in range(self.logTree.topLevelItemCount()): |
1452 topItem = self.logTree.topLevelItem(topIndex) |
1437 topItem = self.logTree.topLevelItem(topIndex) |
1453 if fieldIndex == self.MessageColumn: |
1438 if indexIsRole: |
1454 # Find based on complete message text |
1439 if fieldIndex == self.__changesRole: |
1455 txt = "\n".join(topItem.data(0, self.__messageRole)) |
1440 changes = topItem.data(0, self.__changesRole) |
|
1441 txt = "\n".join( |
|
1442 [c["path"] for c in changes] + |
|
1443 [c["copyfrom"] for c in changes] |
|
1444 ) |
|
1445 else: |
|
1446 # Find based on complete message text |
|
1447 txt = "\n".join(topItem.data(0, self.__messageRole)) |
1456 else: |
1448 else: |
1457 txt = topItem.text(fieldIndex) |
1449 txt = topItem.text(fieldIndex) |
1458 if topItem.text(self.DateColumn) <= to_ and \ |
1450 if topItem.text(self.DateColumn) <= to_ and \ |
1459 topItem.text(self.DateColumn) >= from_ and \ |
1451 topItem.text(self.DateColumn) >= from_ and \ |
1460 (branch == self.__allBranchesFilter or |
1452 (branch == self.__allBranchesFilter or |
1476 |
1468 |
1477 def __prepareFieldSearch(self): |
1469 def __prepareFieldSearch(self): |
1478 """ |
1470 """ |
1479 Private slot to prepare the filed search data. |
1471 Private slot to prepare the filed search data. |
1480 |
1472 |
1481 @return tuple of field index and search expression (integer, string) |
1473 @return tuple of field index, search expression and flag indicating |
1482 """ |
1474 that the field index is a data role (integer, string, boolean) |
|
1475 """ |
|
1476 indexIsRole = False |
1483 txt = self.fieldCombo.itemData(self.fieldCombo.currentIndex()) |
1477 txt = self.fieldCombo.itemData(self.fieldCombo.currentIndex()) |
1484 if txt == "author": |
1478 if txt == "author": |
1485 fieldIndex = self.AuthorColumn |
1479 fieldIndex = self.AuthorColumn |
1486 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) |
1480 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) |
1487 elif txt == "revision": |
1481 elif txt == "revision": |
1490 if txt.startswith("^"): |
1484 if txt.startswith("^"): |
1491 searchRx = QRegExp("^\s*{0}".format(txt[1:]), |
1485 searchRx = QRegExp("^\s*{0}".format(txt[1:]), |
1492 Qt.CaseInsensitive) |
1486 Qt.CaseInsensitive) |
1493 else: |
1487 else: |
1494 searchRx = QRegExp(txt, Qt.CaseInsensitive) |
1488 searchRx = QRegExp(txt, Qt.CaseInsensitive) |
1495 else: |
1489 elif txt == "file": |
1496 fieldIndex = self.MessageColumn |
1490 fieldIndex = self.__changesRole |
1497 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) |
1491 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) |
1498 |
1492 indexIsRole = True |
1499 return fieldIndex, searchRx |
1493 else: |
|
1494 fieldIndex = self.__messageRole |
|
1495 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) |
|
1496 indexIsRole = True |
|
1497 |
|
1498 return fieldIndex, searchRx, indexIsRole |
1500 |
1499 |
1501 @pyqtSlot(bool) |
1500 @pyqtSlot(bool) |
1502 def on_stopCheckBox_clicked(self, checked): |
1501 def on_stopCheckBox_clicked(self, checked): |
1503 """ |
1502 """ |
1504 Private slot called, when the stop on copy/move checkbox is clicked. |
1503 Private slot called, when the stop on copy/move checkbox is clicked. |
1749 @param backwards flag indicating to search backwards (boolean) |
1748 @param backwards flag indicating to search backwards (boolean) |
1750 @param interactive flag indicating an interactive search (boolean) |
1749 @param interactive flag indicating an interactive search (boolean) |
1751 """ |
1750 """ |
1752 self.__findBackwards = backwards |
1751 self.__findBackwards = backwards |
1753 |
1752 |
1754 fieldIndex, searchRx = self.__prepareFieldSearch() |
1753 fieldIndex, searchRx, indexIsRole = self.__prepareFieldSearch() |
1755 currentIndex = self.logTree.indexOfTopLevelItem( |
1754 currentIndex = self.logTree.indexOfTopLevelItem( |
1756 self.logTree.currentItem()) |
1755 self.logTree.currentItem()) |
1757 if backwards: |
1756 if backwards: |
1758 if interactive: |
1757 if interactive: |
1759 indexes = range(currentIndex, -1, -1) |
1758 indexes = range(currentIndex, -1, -1) |
1766 indexes = range(currentIndex + 1, |
1765 indexes = range(currentIndex + 1, |
1767 self.logTree.topLevelItemCount()) |
1766 self.logTree.topLevelItemCount()) |
1768 |
1767 |
1769 for index in indexes: |
1768 for index in indexes: |
1770 topItem = self.logTree.topLevelItem(index) |
1769 topItem = self.logTree.topLevelItem(index) |
1771 if fieldIndex == self.MessageColumn: |
1770 if indexIsRole: |
1772 # Find based on complete message text |
1771 if fieldIndex == self.__changesRole: |
1773 txt = "\n".join(topItem.data(0, self.__messageRole)) |
1772 changes = topItem.data(0, self.__changesRole) |
|
1773 txt = "\n".join( |
|
1774 [c["path"] for c in changes] + |
|
1775 [c["copyfrom"] for c in changes] |
|
1776 ) |
|
1777 else: |
|
1778 # Find based on complete message text |
|
1779 txt = "\n".join(topItem.data(0, self.__messageRole)) |
1774 else: |
1780 else: |
1775 txt = topItem.text(fieldIndex) |
1781 txt = topItem.text(fieldIndex) |
1776 if searchRx.indexIn(txt) > -1: |
1782 if searchRx.indexIn(txt) > -1: |
1777 self.logTree.setCurrentItem(self.logTree.topLevelItem(index)) |
1783 self.logTree.setCurrentItem(self.logTree.topLevelItem(index)) |
1778 break |
1784 break |