def showAll(self): unfillLayout(self.items.infoLayout) unfillLayout(self.items.layout) self.items.infoLayout = QHBoxLayout() self.items.backgroundFlag = self.options.isBackgroundOn() # self.items.scrollArea = QScrollArea(self.items) # self.items.groupItems = QGroupBox() # TODO: implement using group box: QScrollArea <- QGroupBox <- a layout () <- widgets ( created with the group box as parent and added to the layout ) studyItems = self.db.getAllItemsInFull() if len(studyItems) == 0: QMessageBox.information(self, "No items", "Currently no items in db") else: # progress = QProgressDialog('Loading items list...', 'Cancel', 0, len(studyItems), self) progress = QProgressDialog("Loading items list...", None, 0, len(studyItems), self) progress.setWindowModality(Qt.WindowModal) progress.show() count = 0 i = 0 j = 0 max_c = 20 # ; max_r =50 for item in studyItems: element = QLabel(item.item) element.setFont(QFont(self.options.getInfoFont(), 13)) # if item.active: element.setStyleSheet("QLabel { color:" + Leitner.correspondingColor(item.leitner_grade) + "}") # else: element.setStyleSheet("QLabel { color:gray }") if item.active: color = Leitner.correspondingColor(item.leitner_grade) else: color = "gray" if self.options.isBackgroundOn(): element.setStyleSheet( "QLabel { color: black; background-color:" + color + "; border: 1px solid white; }" ) # element.setStyleSheet("QLabel { color: blue; }") else: element.setStyleSheet("QLabel { color:" + color + "}") element.setAttribute(Qt.WA_Hover, True) element.installEventFilter(self.filter) # words = []; examples = {} # for el in item.word: # words.append(el.word) # for el in item.example: # examples[el.sentence] = el.translation element.params = { "color": color, "next": item.next_quiz.strftime("%d %b %H:%M:%S"), "inSession": item.been_in_session, "leitner": Leitner.grades[item.leitner_grade].key, } #'words': words, 'examples': examples, self.items.layout.addWidget(element, i, j) count = count + 1 progress.setValue(count) if progress.wasCanceled(): break if j > max_c: i = i + 1 j = 0 else: j = j + 1 separator_two = QFrame() separator_two.setFrameShape(QFrame.HLine) separator_two.setFrameShadow(QFrame.Sunken) self.items.layout.addWidget(separator_two, i + 1, 0, 1, self.items.layout.columnCount()) self.items.kanjiLarge = QLabel(u"") self.items.kanjiLarge.setFont(QFont(self.options.getSentenceFont(), 56)) self.items.words = QLabel(u"") self.items.words.setWordWrap(True) self.items.words.setFont(QFont(Fonts.MSMyoutyou, 14)) self.items.next = QLabel(u"") self.items.leitner = QLabel(u"") self.items.infoLayout.addWidget(self.items.kanjiLarge) self.items.infoLayout.addWidget(self.items.next) self.items.infoLayout.addWidget(self.items.leitner) self.items.infoLayout.addWidget(self.items.words) # self.items.infoLayout.setAlignment(Qt.AlignCenter) """ #NB: or, may be, add horizontal layout? self.items.layout.addWidget(self.items.kanjiLarge, i + 2, 0, 2, 2) self.items.layout.addWidget(self.items.next, i + 2, 3, 1, 1) self.items.layout.addWidget(self.items.leitner, i + 3, 3, 1, 1) #self.items.layout.addWidget(self.items.kanjiLarge, i + 2, 9, 1, 4) """ if self.options.isBackgroundOn(): self.items.layout.setSpacing(0) else: self.items.layout.setSpacing(6) # self.items.layout.addLayout(self.items.infoLayout, i + 2, 0, 1, self.items.layout.columnCount()) # self.items.layout.addLayout(self.items.infoLayout, i + 2, 0, 1, 8) self.items.layout.addLayout(self.items.infoLayout, i + 2, self.items.layout.columnCount() / 2, 1, 8) # self.items.scrollArea.setLayout(self.items.layout) # self.groupItems.setLayout(self.items.layout) # self.scrollArea.setWidget(self.groupItems) self.items.setLayout(self.items.layout) self.items.show()
def eventFilter(self, object, event): if event.type() == QEvent.HoverLeave: object.setStyleSheet("QLabel { color: rgb(0, 0, 0); }") object.parent().info.hide() object.parent().allInfo.hide() object.parent().kanjiInfo.hide() object.parent().kanjiGroups.hide() desktop = QApplication.desktop().screenGeometry() object.parent().info.setGeometry(QRect(desktop.width() - H_INDENT - I_WIDTH - I_INDENT, desktop.height() - V_INDENT, I_WIDTH, I_HEIGHT)) if event.type() == QEvent.HoverEnter: object.setStyleSheet("QLabel { color: rgb(0, 5, 255); }") object.parent().info.item.setText(object.text()) reading = object.parent().srs.getWordPronunciationFromExample(object.text()) if reading != object.text() : object.parent().info.reading.setText(reading) else: object.parent().info.reading.setText(u'') #parsing word script = scripts.script_boundaries(object.text()) components = [] for cluster in script: if scripts.script_type(cluster) == scripts.Script.Kanji: for kanji in cluster: components = components + list(object.parent().rdk[kanji]) + list('\n') #setting radikals if len(components) > 0: components.pop() #remove last '\n' object.parent().info.components.setText(' '.join(components)) object.parent().info.show() if event.type() == QEvent.MouseButtonPress: # item context menu # if event.button() == Qt.MiddleButton: object.parent().info.hide() object.parent().allInfo.hide() object.parent().kanjiInfo.hide() script = scripts.script_boundaries(object.text()) resulting_info = u'' # kanji_groups = {} kanji_groups = OrderedDict() for cluster in script: if scripts.script_type(cluster) == scripts.Script.Kanji: # for kanji in cluster[::-1]: for kanji in cluster: similar = object.parent().groups.findSimilarKanji(kanji) try: kanji_groups[kanji] = similar[:similar.index(kanji)] + similar[similar.index(kanji) + 1:] except Exception: kanji_groups[kanji] = object.parent().groups.findSimilarKanji(kanji) log.debug(u'Not in group: ' + kanji) for kanji in kanji_groups: # for kanji in list(reversed(sorted(kanji_groups.keys()))): resulting_info += kanji + u' ~\t' for item in kanji_groups[kanji]: lookup = object.parent().kjd[item] resulting_info += " " + item + " <font style='font-family: Calibri; font-size: 12pt'>(" + lookup.gloss[0] + ")</font> " resulting_info += '<br/>' if resulting_info == u'': resulting_info = u'No such groups in Kanji.Odyssey!' object.parent().kanjiGroups.info.setText(resulting_info) object.parent().kanjiGroups.show() # kanji info # if event.button() == Qt.RightButton: object.parent().info.hide() object.parent().allInfo.hide() object.parent().kanjiGroups.hide() object.parent().kanjiInfo.info.setText(u'') script = scripts.script_boundaries(object.text()) resulting_info = u'' for cluster in script: if scripts.script_type(cluster) == scripts.Script.Kanji: for kanji in cluster: try: lookup = object.parent().kjd[kanji] kun = lookup.kun_readings; on = lookup.on_readings; gloss = lookup.gloss resulting_info += "<font style='font-family: " + Fonts.HiragiNoMyoutyouProW3 + "; font-size: 16.5pt'>(" + kanji + ")</font>\t" if len(kun) > 0: resulting_info += '<b>kun: </b>' + ', '.join(kun) + '\t' if len(on) > 0: resulting_info += '<b>on:</b>' + ', '.join(on) + '<br/>' if len(gloss) > 0: resulting_info += "<font style='font-family: Calibri; font-size: 12pt'>" + ", ".join(gloss) + "</font><br/>" except: components += kanji + '<br/>' if resulting_info != '': if resulting_info.count('<br/>') > 7: object.parent().kanjiInfo.setStyleSheet('QLabel { font-size: 13pt }') object.parent().kanjiInfo.info.setText(resulting_info.rstrip('<br/>')) else: object.parent().kanjiInfo.info.setText(u'No such kanji in kanjidic!') object.parent().kanjiInfo.show() # translation and strokes info # if event.button() == Qt.LeftButton: object.parent().kanjiInfo.hide() object.parent().info.hide() object.parent().kanjiGroups.hide() unfillLayout(object.parent().allInfo.layout) object.parent().allInfo.layout.setMargin(1) kanjiList = [] script = scripts.script_boundaries(object.text()) for cluster in script: if scripts.script_type(cluster) == scripts.Script.Kanji: for kanji in cluster: kanjiList.append(kanji) i=0; j=0; # kanji strokes if len(kanjiList) > 0: infile = open(PATH_TO_RES + STROKES + KANJI_MANIFEST, 'r') text = infile.read() infile.close() for kanji in kanjiList: if( text.find(kanji.encode('utf-8').encode('hex')) != -1): gif = QLabel() gif.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) gif.setAlignment(Qt.AlignCenter) movie = QMovie(PATH_TO_RES + STROKES + kanji.encode('utf-8').encode('hex') + '.gif', QByteArray(), self) movie.setCacheMode(QMovie.CacheAll) movie.setSpeed(150) gif.setMovie(movie) object.parent().allInfo.layout.addWidget(gif, i, j); j = j + 1 movie.start() i = i + 1 # words translation translations = QLabel(u'') translations.setFont(QFont('Calibri', 11)) translations.setWordWrap(True) translations.setAlignment(Qt.AlignCenter) try: search = object.parent().edict[object.parent().srs.getWordNonInflectedForm(object.text())] translationText = u'' variants = search.senses_by_reading()[object.parent().srs.getWordPronounciation(object.parent().srs.getWordNonInflectedForm(object.text()))][:3] variants = filter (lambda e: e != '(P)', variants) translationText += '<b>' + object.parent().srs.getWordPronunciationFromExample(object.text()) + '</b>:\t' + ', '.join(variants) translations.setText(translationText.rstrip('\n')) except: ### by reading search = object.parent().jmdict.lookupTranslationByReadingJoin(object.parent().srs.getWordPronounciation(object.parent().srs.getWordNonInflectedForm(object.text())), object.parent().options.getLookupLang()) if len(search) > 0: if len(search) > 5: search = search[:5] translations.setText('<b>' + object.parent().srs.getWordPronunciationFromExample(object.text())+ '</b>:\t' + ', '.join(search)) ### by kanji else: search = object.parent().jmdict.lookupItemByReading(object.parent().srs.getWordPronounciation(object.parent().srs.getWordNonInflectedForm(object.text()))) if len(search) > 0: lookup = object.parent().jmdict.lookupItemTranslationJoin(search[0], object.parent().options.getLookupLang()) if len(lookup) > 5: lookup = lookup[:5] translations.setText('<b>' + object.parent().srs.getWordPronunciationFromExample(object.text())+ '</b>:\t' + ', '.join(lookup)) ### nothing found if len(search) == 0: translations.setText(u'Alas, no translation in edict or jmdict!') if i > 0: separator = QFrame() separator.setFrameShape(QFrame.HLine) separator.setFrameShadow(QFrame.Sunken) object.parent().allInfo.layout.addWidget(separator, i, 0, 1, j); i = i + 1 object.parent().allInfo.layout.addWidget(translations, i, 0, 1, j) object.parent().allInfo.update() object.parent().allInfo.show() elif object.parent().allInfo.isVisible(): object.parent().allInfo.hide() object.parent().info.show() return False
def showAll(self): unfillLayout(self.items.infoLayout) unfillLayout(self.items.layout) self.items.infoLayout = QHBoxLayout() self.items.backgroundFlag = self.options.isBackgroundOn() #self.items.scrollArea = QScrollArea(self.items) #self.items.groupItems = QGroupBox() #TODO: implement using group box: QScrollArea <- QGroupBox <- a layout () <- widgets ( created with the group box as parent and added to the layout ) studyItems = self.db.getAllItemsInFull() if len(studyItems) == 0: QMessageBox.information(self, 'No items', 'Currently no items in db') else: #progress = QProgressDialog('Loading items list...', 'Cancel', 0, len(studyItems), self) progress = QProgressDialog('Loading items list...', None, 0, len(studyItems), self) progress.setWindowModality(Qt.WindowModal) progress.show() count = 0 i = 0 j = 0 max_c = 20 #; max_r =50 for item in studyItems: element = QLabel(item.item) element.setFont(QFont(self.options.getInfoFont(), 13)) #if item.active: element.setStyleSheet("QLabel { color:" + Leitner.correspondingColor(item.leitner_grade) + "}") #else: element.setStyleSheet("QLabel { color:gray }") if item.active: color = Leitner.correspondingColor(item.leitner_grade) else: color = 'gray' if self.options.isBackgroundOn(): element.setStyleSheet( "QLabel { color: black; background-color:" + color + "; border: 1px solid white; }") #element.setStyleSheet("QLabel { color: blue; }") else: element.setStyleSheet("QLabel { color:" + color + "}") element.setAttribute(Qt.WA_Hover, True) element.installEventFilter(self.filter) # words = []; examples = {} # for el in item.word: # words.append(el.word) # for el in item.example: # examples[el.sentence] = el.translation element.params = { 'color': color, 'next': item.next_quiz.strftime('%d %b %H:%M:%S'), 'inSession': item.been_in_session, 'leitner': Leitner.grades[item.leitner_grade].key } #'words': words, 'examples': examples, self.items.layout.addWidget(element, i, j) count = count + 1 progress.setValue(count) if progress.wasCanceled(): break if j > max_c: i = i + 1 j = 0 else: j = j + 1 separator_two = QFrame() separator_two.setFrameShape(QFrame.HLine) separator_two.setFrameShadow(QFrame.Sunken) self.items.layout.addWidget(separator_two, i + 1, 0, 1, self.items.layout.columnCount()) self.items.kanjiLarge = QLabel(u'') self.items.kanjiLarge.setFont( QFont(self.options.getSentenceFont(), 56)) self.items.words = QLabel(u'') self.items.words.setWordWrap(True) self.items.words.setFont(QFont(Fonts.MSMyoutyou, 14)) self.items.next = QLabel(u'') self.items.leitner = QLabel(u'') self.items.infoLayout.addWidget(self.items.kanjiLarge) self.items.infoLayout.addWidget(self.items.next) self.items.infoLayout.addWidget(self.items.leitner) self.items.infoLayout.addWidget(self.items.words) #self.items.infoLayout.setAlignment(Qt.AlignCenter) ''' #NB: or, may be, add horizontal layout? self.items.layout.addWidget(self.items.kanjiLarge, i + 2, 0, 2, 2) self.items.layout.addWidget(self.items.next, i + 2, 3, 1, 1) self.items.layout.addWidget(self.items.leitner, i + 3, 3, 1, 1) #self.items.layout.addWidget(self.items.kanjiLarge, i + 2, 9, 1, 4) ''' if self.options.isBackgroundOn(): self.items.layout.setSpacing(0) else: self.items.layout.setSpacing(6) #self.items.layout.addLayout(self.items.infoLayout, i + 2, 0, 1, self.items.layout.columnCount()) #self.items.layout.addLayout(self.items.infoLayout, i + 2, 0, 1, 8) self.items.layout.addLayout(self.items.infoLayout, i + 2, self.items.layout.columnCount() / 2, 1, 8) #self.items.scrollArea.setLayout(self.items.layout) #self.groupItems.setLayout(self.items.layout) #self.scrollArea.setWidget(self.groupItems) self.items.setLayout(self.items.layout) self.items.show()