From ee159ff9ecdda3f0296e7394503a1d250aa6b2eb Mon Sep 17 00:00:00 2001 From: DolphyWind Date: Sat, 15 Oct 2022 22:55:41 +0300 Subject: [PATCH] Up Down Buttons And Minor Improvements "Surf Words" menu is now sorted alphabetically Add up and down buttons to "Add Words" menu remove addNewDefinition() and addNewSentence() and add addToListWidget() remove removeNewDefinition() and removeNewSentence() and add removeFromListWidget() Improved searching Fixed a minor bug --- main.py | 172 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 112 insertions(+), 60 deletions(-) diff --git a/main.py b/main.py index 98ea139..6487481 100644 --- a/main.py +++ b/main.py @@ -174,49 +174,93 @@ def chooseImage(): self.addWord_ChooseImageHLayout.addWidget(self.addWord_ChooseImageText) # endregion + # region Manipulating List Widgets + + def addToListWidget(lWidget, wordName, textBox): + word = wordName + word = self.modifyWord(word) + if not word: + return + for i in range(lWidget.count()): + item = lWidget.item(i) + if item.text() == word: + return + lWidget.addItem(word) + textBox.clear() + + def removeFromListWidget(lWidget): + item = lWidget.currentItem() + if not item: + return + lWidget.takeItem(lWidget.row(item)) + + def moveSelectedToUp(lWidget): + items = lWidget.selectedIndexes() + + if not items or items[0].row() == 0: + return + index = items[0].row() + item = lWidget.takeItem(index) + lWidget.insertItem(index - 1, item) + lWidget.setCurrentRow(index - 1) + + def moveSelectedToDown(lWidget): + items = lWidget.selectedIndexes() + + if not items or items[0].row() == lWidget.count() - 1: + return + index = items[0].row() + item = lWidget.takeItem(index) + lWidget.insertItem(index + 1, item) + lWidget.setCurrentRow(index + 1) + + + # endregion + # region Add Definitions self.addWord_DefinitionsLineEdit = QtWidgets.QLineEdit() self.addWord_DefinitionsLineEdit.setPlaceholderText("New Definition") self.addWord_DefinitionsLineEdit.setFont(inapp_font) self.addWord_DefinitionsLineEdit.setMaximumWidth(175) + self.addWord_DefinitionsListWidget = QtWidgets.QListWidget() + self.addWord_DefinitionsListWidget.setFont(inapp_font) + self.addWord_AddDefButton = QtWidgets.QPushButton("Add") self.addWord_AddDefButton.setFont(inapp_font) + self.addWord_AddDefButton.clicked.connect( + lambda: addToListWidget(self.addWord_DefinitionsListWidget, self.addWord_DefinitionsLineEdit.text(), self.addWord_DefinitionsLineEdit) + ) self.addWord_RemoveDefButton = QtWidgets.QPushButton("Remove") self.addWord_RemoveDefButton.setFont(inapp_font) + self.addWord_RemoveDefButton.clicked.connect(lambda: removeFromListWidget(self.addWord_DefinitionsListWidget)) - self.addWord_DefinitionsListWidget = QtWidgets.QListWidget() - self.addWord_DefinitionsListWidget.setFont(inapp_font) + self.addWord_UpDefButton = QtWidgets.QPushButton("Up") + self.addWord_UpDefButton.setFont(inapp_font) + self.addWord_UpDefButton.clicked.connect(lambda: moveSelectedToUp(self.addWord_DefinitionsListWidget)) - def addNewDefinition(): - word = self.addWord_DefinitionsLineEdit.text() - word = self.modifyWord(word) - if not word: - return - for i in range(self.addWord_DefinitionsListWidget.count()): - item = self.addWord_DefinitionsListWidget.item(i) - if item.text() == word: - return - self.addWord_DefinitionsListWidget.addItem(word) - self.addWord_DefinitionsLineEdit.clear() + self.addWord_DownDefButton = QtWidgets.QPushButton("Down") + self.addWord_DownDefButton.setFont(inapp_font) + self.addWord_DownDefButton.clicked.connect(lambda: moveSelectedToDown(self.addWord_DefinitionsListWidget)) - def removeNewDefinition(): - item = self.addWord_DefinitionsListWidget.currentItem() - if not item: - return - self.addWord_DefinitionsListWidget.takeItem(self.addWord_DefinitionsListWidget.row(item)) - - self.addWord_AddDefButton.clicked.connect(addNewDefinition) - self.addWord_RemoveDefButton.clicked.connect(removeNewDefinition) # endregion # region Definition Layouts + + self.addWord_AddRemoveDefHLayout = QtWidgets.QHBoxLayout() + self.addWord_AddRemoveDefHLayout.addWidget(self.addWord_AddDefButton) + self.addWord_AddRemoveDefHLayout.addWidget(self.addWord_RemoveDefButton) + + self.addWord_UpDownDefHLayout = QtWidgets.QHBoxLayout() + self.addWord_UpDownDefHLayout.addWidget(self.addWord_UpDefButton) + self.addWord_UpDownDefHLayout.addWidget(self.addWord_DownDefButton) + self.addWord_DefinitionsVLayout = QtWidgets.QVBoxLayout() self.addWord_DefinitionsVLayout.addStretch() self.addWord_DefinitionsVLayout.addWidget(self.addWord_DefinitionsLineEdit) - self.addWord_DefinitionsVLayout.addWidget(self.addWord_AddDefButton) - self.addWord_DefinitionsVLayout.addWidget(self.addWord_RemoveDefButton) + self.addWord_DefinitionsVLayout.addLayout(self.addWord_AddRemoveDefHLayout) + self.addWord_DefinitionsVLayout.addLayout(self.addWord_UpDownDefHLayout) self.addWord_DefinitionsVLayout.addStretch() self.addWord_DefinitionsHLayout = QtWidgets.QHBoxLayout() @@ -232,35 +276,27 @@ def removeNewDefinition(): self.addWord_SentencesTextEdit.setMaximumHeight(80) self.addWord_SentencesTextEdit.setMinimumHeight(80) + self.addWord_SentencesListWidget = QtWidgets.QListWidget() + self.addWord_SentencesListWidget.setFont(inapp_font) + self.addWord_AddSentencesButton = QtWidgets.QPushButton("Add") self.addWord_AddSentencesButton.setFont(inapp_font) + self.addWord_AddSentencesButton.clicked.connect( + lambda: addToListWidget(self.addWord_SentencesListWidget, self.addWord_SentencesTextEdit.toPlainText(), self.addWord_SentencesTextEdit) + ) self.addWord_RemoveSentencesButton = QtWidgets.QPushButton("Remove") self.addWord_RemoveSentencesButton.setFont(inapp_font) + self.addWord_RemoveSentencesButton.clicked.connect(lambda: removeFromListWidget(self.addWord_SentencesListWidget)) - self.addWord_SentencesListWidget = QtWidgets.QListWidget() - self.addWord_SentencesListWidget.setFont(inapp_font) + self.addWord_UpSentenceButton = QtWidgets.QPushButton("Up") + self.addWord_UpSentenceButton.setFont(inapp_font) + self.addWord_UpSentenceButton.clicked.connect(lambda: moveSelectedToUp(self.addWord_SentencesListWidget)) - def addNewSentence(): - word = self.addWord_SentencesTextEdit.toPlainText() - word = self.modifyWord(word) - word = word.replace('\n', ' ') - if not word: - return - for i in range(self.addWord_SentencesListWidget.count()): - item = self.addWord_SentencesListWidget.item(i) - if item.text() == word: - return - self.addWord_SentencesListWidget.addItem(word) - self.addWord_SentencesTextEdit.clear() - def removeNewSentence(): - item = self.addWord_SentencesListWidget.currentItem() - if not item: - return - self.addWord_SentencesListWidget.takeItem(self.addWord_SentencesListWidget.row(item)) + self.addWord_DownSentenceButton = QtWidgets.QPushButton("Down") + self.addWord_DownSentenceButton.setFont(inapp_font) + self.addWord_DownSentenceButton.clicked.connect(lambda: moveSelectedToDown(self.addWord_SentencesListWidget)) - self.addWord_AddSentencesButton.clicked.connect(addNewSentence) - self.addWord_RemoveSentencesButton.clicked.connect(removeNewSentence) # endregion # region Check if has pre loaded word @@ -280,11 +316,20 @@ def removeNewSentence(): # endregion # region Example Sentence Layouts + + self.addWord_AddRemoveSentencesHLayout = QtWidgets.QHBoxLayout() + self.addWord_AddRemoveSentencesHLayout.addWidget(self.addWord_AddSentencesButton) + self.addWord_AddRemoveSentencesHLayout.addWidget(self.addWord_RemoveSentencesButton) + + self.addWord_UpDownSentencesHLayout = QtWidgets.QHBoxLayout() + self.addWord_UpDownSentencesHLayout.addWidget(self.addWord_UpSentenceButton) + self.addWord_UpDownSentencesHLayout.addWidget(self.addWord_DownSentenceButton) + self.addWord_SentencesVLayout = QtWidgets.QVBoxLayout() self.addWord_SentencesVLayout.addStretch() self.addWord_SentencesVLayout.addWidget(self.addWord_SentencesTextEdit) - self.addWord_SentencesVLayout.addWidget(self.addWord_AddSentencesButton) - self.addWord_SentencesVLayout.addWidget(self.addWord_RemoveSentencesButton) + self.addWord_SentencesVLayout.addLayout(self.addWord_AddRemoveSentencesHLayout) + self.addWord_SentencesVLayout.addLayout(self.addWord_UpDownSentencesHLayout) self.addWord_SentencesVLayout.addStretch() self.addWord_SentencesHLayout = QtWidgets.QHBoxLayout() @@ -338,7 +383,7 @@ def addWord(): if preloadedWord is None: self.switchMenu(self.currentMenu) else: - self.switchMenu(self.previousMenu, preloadedWord) + self.switchMenu(self.previousMenu, w) self.addWord_SaveButton.clicked.connect(addWord) # endregion @@ -378,14 +423,22 @@ def updateListWidget(word: str): self.searchWord_ListWidget.clear() searched = self.modifyWord(word) + searched = searched.lower() + + matchedWordsStartsWith = [] + matchedWordsIncludes = [] - matchedWords = [] for w in self.wordDataDict.keys(): - if w.startswith(searched): - matchedWords.append(w) + if w.lower().startswith(searched): + matchedWordsStartsWith.append(w) + elif searched in w.lower(): + matchedWordsIncludes.append(w) + + matchedWordsStartsWith = sorted(matchedWordsStartsWith) + matchedWordsIncludes = sorted(matchedWordsIncludes) + matchedWordsStartsWith += matchedWordsIncludes - matchedWords = sorted(matchedWords) - for w in matchedWords: + for w in matchedWordsStartsWith: self.searchWord_ListWidget.addItem(QtWidgets.QListWidgetItem(w)) self.searchWord_LineEdit = QtWidgets.QLineEdit() @@ -487,16 +540,17 @@ def removeSelected(): def createSurfWordsMenu(self, currentWord:word.Word = None): + keys_list = sorted(list(self.wordDataDict.keys())) + # region Initialize if currentWord is None: currentWord = word.Word() - keys_list = list(self.wordDataDict.keys()) randomWord = keys_list[0] currentWord.loadFromDict(randomWord, self.wordDataDict[randomWord]) index = 0 - for i in range(len(self.wordDataDict.keys())): - if list(self.wordDataDict.keys())[i] == currentWord.word: + for i in range(len(keys_list)): + if keys_list[i] == currentWord.word: index = i # endregion @@ -597,17 +651,15 @@ def createSurfWordsMenu(self, currentWord:word.Word = None): def changeWord(index, step): index += step if index < 0: - index = len(self.wordDataDict.keys()) - 1 - elif index > len(self.wordDataDict.keys()) - 1: + index = len(keys_list) - 1 + elif index > len(keys_list) - 1: index = 0 - key_list = list(self.wordDataDict.keys()) - currentStr = key_list[index] + currentStr = keys_list[index] currentWord.loadFromDict(currentStr, self.wordDataDict[currentStr]) self.switchMenu(Menu.SURF_WORDS, currentWord) def getRandomWord(): new_word = word.Word() - keys_list = list(self.wordDataDict.keys()) if len(keys_list) <= 1: return randomWord = random.choice(keys_list)