diff --git a/nw/gui/projload.py b/nw/gui/projload.py index 39714cbb..d8d72c7e 100644 --- a/nw/gui/projload.py +++ b/nw/gui/projload.py @@ -257,40 +257,31 @@ class GuiProjectLoad(QDialog): def _populateList(self): """Populate the list box with recent project data. """ - listOrder = [] - listData = {} - for projPath in self.mainConf.recentProj.keys(): + dataList = [] + for projPath in self.mainConf.recentProj: theEntry = self.mainConf.recentProj[projPath] - theTitle = "" - theTime = 0 - theWords = 0 - if "title" in theEntry.keys(): - theTitle = theEntry["title"] - if "time" in theEntry.keys(): - theTime = theEntry["time"] - if "words" in theEntry.keys(): - theWords = theEntry["words"] - if theTime > 0: - listOrder.append(theTime) - listData[theTime] = [theTitle, theWords, projPath] + theTitle = theEntry.get("title", "") + theTime = theEntry.get("time", 0) + theWords = theEntry.get("words", 0) + dataList.append([theTitle, theTime, theWords, projPath]) self.listBox.clear() - hasSelection = False - for timeStamp in sorted(listOrder, reverse=True): + sortList = sorted(dataList, key=lambda x: x[1], reverse=True) + for theTitle, theTime, theWords, projPath in sortList: newItem = QTreeWidgetItem([""]*4) newItem.setIcon(self.C_NAME, self.theParent.theTheme.getIcon("proj_nwx")) - newItem.setText(self.C_NAME, listData[timeStamp][0]) - newItem.setData(self.C_NAME, Qt.UserRole, listData[timeStamp][2]) - newItem.setText(self.C_COUNT, formatInt(listData[timeStamp][1])) - newItem.setText(self.C_TIME, datetime.fromtimestamp(timeStamp).strftime("%x %X")) + newItem.setText(self.C_NAME, theTitle) + newItem.setData(self.C_NAME, Qt.UserRole, projPath) + newItem.setText(self.C_COUNT, formatInt(theWords)) + newItem.setText(self.C_TIME, datetime.fromtimestamp(theTime).strftime("%x %X")) newItem.setTextAlignment(self.C_NAME, Qt.AlignLeft | Qt.AlignVCenter) newItem.setTextAlignment(self.C_COUNT, Qt.AlignRight | Qt.AlignVCenter) newItem.setTextAlignment(self.C_TIME, Qt.AlignRight | Qt.AlignVCenter) newItem.setFont(self.C_TIME, self.theTheme.guiFontFixed) self.listBox.addTopLevelItem(newItem) - if not hasSelection: - newItem.setSelected(True) - hasSelection = True + + if self.listBox.topLevelItemCount() > 0: + self.listBox.topLevelItem(0).setSelected(True) projColWidth = self.mainConf.getProjColWidths() if len(projColWidth) == 3: diff --git a/nw/gui/projtree.py b/nw/gui/projtree.py index ca4c11de..b48b938b 100644 --- a/nw/gui/projtree.py +++ b/nw/gui/projtree.py @@ -434,6 +434,9 @@ class GuiProjectTree(QTreeWidget): logger.error("No project open") return False + if not self.hasFocus(): + return False + if tHandle is None: tHandle = self.getSelectedHandle() diff --git a/tests/test_gui/test_gui_doceditor.py b/tests/test_gui/test_gui_doceditor.py index 6d0034c7..ba435ad0 100644 --- a/tests/test_gui/test_gui_doceditor.py +++ b/tests/test_gui/test_gui_doceditor.py @@ -30,6 +30,7 @@ from PyQt5.QtCore import Qt from PyQt5.QtGui import QTextCursor from PyQt5.QtWidgets import QAction, QMessageBox +from nw.gui.projtree import GuiProjectTree from nw.constants import nwItemType, nwDocAction keyDelay = 2 @@ -42,6 +43,7 @@ def testGuiEditor_Main(qtbot, monkeypatch, nwGUI, fncDir, fncProj, refDir, outDi """ # Block message box monkeypatch.setattr(QMessageBox, "question", lambda *args: QMessageBox.Yes) + monkeypatch.setattr(GuiProjectTree, "hasFocus", lambda *args: True) # Create new, save, close project nwGUI.theProject.projTree.setSeed(42) diff --git a/tests/test_gui/test_gui_projtree.py b/tests/test_gui/test_gui_projtree.py index 395fb4ab..317b8c58 100644 --- a/tests/test_gui/test_gui_projtree.py +++ b/tests/test_gui/test_gui_projtree.py @@ -28,6 +28,8 @@ from tools import writeFile from PyQt5.QtCore import QItemSelectionModel from PyQt5.QtWidgets import QAction, QMessageBox +from nw.guimain import GuiMain +from nw.gui.projtree import GuiProjectTree from nw.constants import nwItemType, nwItemClass @pytest.mark.gui @@ -36,7 +38,8 @@ def testGuiProjTree_TreeItems(qtbot, caplog, monkeypatch, nwGUI, nwMinimal): """ # Block message box monkeypatch.setattr(QMessageBox, "question", lambda *args: QMessageBox.Yes) - monkeypatch.setattr("nw.guimain.GuiMain.editItem", lambda *args: None) + monkeypatch.setattr(GuiMain, "editItem", lambda *args: None) + monkeypatch.setattr(GuiProjectTree, "hasFocus", lambda *args: True) nwGUI.theProject.projTree.setSeed(42) nwTree = nwGUI.treeView