From 6bf8c14dda3a9f485fd355be19d8448e1924a0a5 Mon Sep 17 00:00:00 2001 From: BasioMeusPuga Date: Thu, 8 Mar 2018 11:21:42 +0530 Subject: [PATCH] Dialog background color Definition language Mouse cursor hiding --- __main__.py | 7 ++++++ definitionsdialog.py | 45 ++++++++++++++++++++++++------------- metadatadialog.py | 30 +++++++++++++++---------- resources/definitions.py | 9 ++++++++ resources/metadata.py | 14 ++++++------ resources/raw/definition.ui | 20 +++++++++++++++++ resources/raw/metadata.ui | 2 +- resources/raw/settings.ui | 30 +++++++++++++++++++------ resources/settingswindow.py | 24 +++++++++++++++----- settings.py | 12 ++++++++++ settingsdialog.py | 24 ++++++++++++++++++-- widgets.py | 18 ++++++++------- 12 files changed, 177 insertions(+), 58 deletions(-) diff --git a/__main__.py b/__main__.py index 2175807..e21f5bb 100755 --- a/__main__.py +++ b/__main__.py @@ -770,6 +770,7 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): signal_sender = self.sender().objectName() + # Special cases that don't affect (comic)book display if signal_sender == 'libraryBackground': current_color = self.settings['listview_background'] new_color = open_color_dialog(current_color) @@ -778,6 +779,12 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): self.settings['listview_background'] = new_color return + if signal_sender == 'dialogBackground': + current_color = self.settings['dialog_background'] + new_color = open_color_dialog(current_color) + self.settings['dialog_background'] = new_color + return new_color + profile_index = self.bookToolBar.profileBox.currentIndex() current_profile = self.bookToolBar.profileBox.itemData( profile_index, QtCore.Qt.UserRole) diff --git a/definitionsdialog.py b/definitionsdialog.py index c662e10..bd5b5d3 100644 --- a/definitionsdialog.py +++ b/definitionsdialog.py @@ -27,6 +27,8 @@ class DefinitionsUI(QtWidgets.QDialog, definitions.Ui_Dialog): super(DefinitionsUI, self).__init__() self.setupUi(self) + self.parent = parent + self.setWindowFlags( QtCore.Qt.Popup | QtCore.Qt.FramelessWindowHint) @@ -37,32 +39,20 @@ class DefinitionsUI(QtWidgets.QDialog, definitions.Ui_Dialog): mask = QtGui.QRegion(path.toFillPolygon().toPolygon()) self.setMask(mask) - foreground = QtGui.QColor().fromRgb(230, 230, 230) - background = QtGui.QColor().fromRgb(0, 0, 0) - - self.setStyleSheet( - "QDialog {{background-color: {0}}}".format(background.name())) - self.definitionView.setStyleSheet( - "QTextBrowser {{color: {0}; background-color: {1}}}".format( - foreground.name(), background.name())) - self.app_id = 'bb7a91f9' self.app_key = 'fefacdf6775c347b52e9efa2efe642ef' - self.language = 'en' self.root_url = 'https://od-api.oxforddictionaries.com:443/api/v1/inflections/' self.define_url = 'https://od-api.oxforddictionaries.com:443/api/v1/entries/' - self.root_url += self.language + '/' - self.define_url += self.language + '/' - self.pronunciation_mp3 = None self.okButton.clicked.connect(self.hide) self.pronounceButton.clicked.connect(self.play_pronunciation) def api_call(self, url, word): - url = url + word.lower() + language = self.parent.settings['dictionary_language'] + url = url + language + '/' + word.lower() r = requests.get( url, @@ -119,7 +109,8 @@ class DefinitionsUI(QtWidgets.QDialog, definitions.Ui_Dialog): html_string += f'

{word}

\n' if nothing_found: - html_string += f'

No definitions found

\n' + language = self.parent.settings['dictionary_language'].upper() + html_string += f'

No definitions found in {language}

\n' else: # Word root html_string += f'

Word root: {word_root}

\n' @@ -137,6 +128,21 @@ class DefinitionsUI(QtWidgets.QDialog, definitions.Ui_Dialog): self.definitionView.setHtml(html_string) self.show() + def color_background(self, set_initial=False): + if set_initial: + background = self.parent.settings['dialog_background'] + else: + self.previous_position = self.pos() + background = self.parent.get_color() + + self.setStyleSheet( + "QDialog {{background-color: {0}}}".format(background.name())) + self.definitionView.setStyleSheet( + "QTextBrowser {{background-color: {0}}}".format(background.name())) + + if not set_initial: + self.show() + def play_pronunciation(self): if not self.pronunciation_mp3: return @@ -147,3 +153,12 @@ class DefinitionsUI(QtWidgets.QDialog, definitions.Ui_Dialog): player = QtMultimedia.QMediaPlayer(self) player.setMedia(media_content) player.play() + + def showEvent(self, event): + self.color_background(True) + + size = self.size() + desktop_size = QtWidgets.QDesktopWidget().screenGeometry() + top = (desktop_size.height() / 2) - (size.height() / 2) + left = (desktop_size.width() / 2) - (size.width() / 2) + self.move(left, top) diff --git a/metadatadialog.py b/metadatadialog.py index 37a4169..990defc 100644 --- a/metadatadialog.py +++ b/metadatadialog.py @@ -33,21 +33,14 @@ class MetadataUI(QtWidgets.QDialog, metadata.Ui_Dialog): QtCore.Qt.Popup | QtCore.Qt.FramelessWindowHint) + self.parent = parent + radius = 15 path = QtGui.QPainterPath() path.addRoundedRect(QtCore.QRectF(self.rect()), radius, radius) mask = QtGui.QRegion(path.toFillPolygon().toPolygon()) self.setMask(mask) - foreground = QtGui.QColor().fromRgb(230, 230, 230) - background = QtGui.QColor().fromRgb(0, 0, 0) - self.setStyleSheet( - "QDialog {{color: {0}; background-color: {1}}}".format( - foreground.name(), background.name())) - self.coverView.setStyleSheet( - "QGraphicsView {{color: {0}; background-color: {1}}}".format( - foreground.name(), background.name())) - self.parent = parent self.database_path = self.parent.database_path @@ -61,7 +54,7 @@ class MetadataUI(QtWidgets.QDialog, metadata.Ui_Dialog): self.okButton.clicked.connect(self.ok_pressed) self.cancelButton.clicked.connect(self.cancel_pressed) - self.colorButton.clicked.connect(self.color_background) + self.dialogBackground.clicked.connect(self.color_background) self.titleLine.returnPressed.connect(self.ok_pressed) self.authorLine.returnPressed.connect(self.ok_pressed) @@ -148,8 +141,20 @@ class MetadataUI(QtWidgets.QDialog, metadata.Ui_Dialog): return QtCore.QPoint(display_x, display_y) - def color_background(self): - pass + def color_background(self, set_initial=False): + if set_initial: + background = self.parent.settings['dialog_background'] + else: + self.previous_position = self.pos() + background = self.parent.get_color() + + self.setStyleSheet( + "QDialog {{background-color: {0}}}".format(background.name())) + self.coverView.setStyleSheet( + "QGraphicsView {{background-color: {0}}}".format(background.name())) + + if not set_initial: + self.show() def showEvent(self, event): if self.previous_position: @@ -159,3 +164,4 @@ class MetadataUI(QtWidgets.QDialog, metadata.Ui_Dialog): self.move(display_position) self.titleLine.setFocus() + self.color_background(True) diff --git a/resources/definitions.py b/resources/definitions.py index 7e1dd24..eddbf6e 100644 --- a/resources/definitions.py +++ b/resources/definitions.py @@ -45,6 +45,15 @@ class Ui_Dialog(object): self.horizontalLayout.addWidget(self.pronounceButton) spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) + self.dialogBackground = QtWidgets.QPushButton(Dialog) + self.dialogBackground.setText("") + icon2 = QtGui.QIcon() + icon2.addPixmap(QtGui.QPixmap(":/images/color.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.dialogBackground.setIcon(icon2) + self.dialogBackground.setIconSize(QtCore.QSize(27, 27)) + self.dialogBackground.setFlat(True) + self.dialogBackground.setObjectName("dialogBackground") + self.horizontalLayout.addWidget(self.dialogBackground) self.verticalLayout.addLayout(self.horizontalLayout) self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1) diff --git a/resources/metadata.py b/resources/metadata.py index f728e2e..6b55722 100644 --- a/resources/metadata.py +++ b/resources/metadata.py @@ -67,15 +67,15 @@ class Ui_Dialog(object): self.horizontalLayout_2.addWidget(self.cancelButton) spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem1) - self.colorButton = QtWidgets.QPushButton(Dialog) - self.colorButton.setText("") + self.dialogBackground = QtWidgets.QPushButton(Dialog) + self.dialogBackground.setText("") icon2 = QtGui.QIcon() icon2.addPixmap(QtGui.QPixmap(":/images/color.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.colorButton.setIcon(icon2) - self.colorButton.setIconSize(QtCore.QSize(27, 27)) - self.colorButton.setFlat(True) - self.colorButton.setObjectName("colorButton") - self.horizontalLayout_2.addWidget(self.colorButton) + self.dialogBackground.setIcon(icon2) + self.dialogBackground.setIconSize(QtCore.QSize(27, 27)) + self.dialogBackground.setFlat(True) + self.dialogBackground.setObjectName("dialogBackground") + self.horizontalLayout_2.addWidget(self.dialogBackground) self.verticalLayout.addLayout(self.horizontalLayout_2) self.horizontalLayout.addLayout(self.verticalLayout) self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1) diff --git a/resources/raw/definition.ui b/resources/raw/definition.ui index 74e762e..f2d3bf4 100644 --- a/resources/raw/definition.ui +++ b/resources/raw/definition.ui @@ -100,6 +100,26 @@ + + + + + + + + :/images/color.svg:/images/color.svg + + + + 27 + 27 + + + + true + + + diff --git a/resources/raw/metadata.ui b/resources/raw/metadata.ui index 7005e73..e0e62d5 100644 --- a/resources/raw/metadata.ui +++ b/resources/raw/metadata.ui @@ -170,7 +170,7 @@ - + diff --git a/resources/raw/settings.ui b/resources/raw/settings.ui index 592d72a..1b4621b 100644 --- a/resources/raw/settings.ui +++ b/resources/raw/settings.ui @@ -6,8 +6,8 @@ 0 0 - 929 - 638 + 1009 + 658 @@ -93,11 +93,27 @@ - - - OCPD - - + + + + + + 0 + 0 + + + + Dictionary: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + diff --git a/resources/settingswindow.py b/resources/settingswindow.py index c718e85..47118f7 100644 --- a/resources/settingswindow.py +++ b/resources/settingswindow.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'raw/settings.ui' # -# Created by: PyQt5 UI code generator 5.10 +# Created by: PyQt5 UI code generator 5.10.1 # # WARNING! All changes made in this file will be lost! @@ -11,7 +11,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") - Dialog.resize(929, 638) + Dialog.resize(1009, 658) self.gridLayout_3 = QtWidgets.QGridLayout(Dialog) self.gridLayout_3.setObjectName("gridLayout_3") self.verticalLayout_2 = QtWidgets.QVBoxLayout() @@ -56,9 +56,21 @@ class Ui_Dialog(object): self.performCulling = QtWidgets.QCheckBox(self.groupBox) self.performCulling.setObjectName("performCulling") self.horizontalLayout.addWidget(self.performCulling) - self.checkBox = QtWidgets.QCheckBox(self.groupBox) - self.checkBox.setObjectName("checkBox") - self.horizontalLayout.addWidget(self.checkBox) + self.horizontalLayout_3 = QtWidgets.QHBoxLayout() + self.horizontalLayout_3.setObjectName("horizontalLayout_3") + self.languageLabel = QtWidgets.QLabel(self.groupBox) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.languageLabel.sizePolicy().hasHeightForWidth()) + self.languageLabel.setSizePolicy(sizePolicy) + self.languageLabel.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) + self.languageLabel.setObjectName("languageLabel") + self.horizontalLayout_3.addWidget(self.languageLabel) + self.languageBox = QtWidgets.QComboBox(self.groupBox) + self.languageBox.setObjectName("languageBox") + self.horizontalLayout_3.addWidget(self.languageBox) + self.horizontalLayout.addLayout(self.horizontalLayout_3) self.gridLayout.addLayout(self.horizontalLayout, 1, 0, 1, 1) self.verticalLayout_2.addWidget(self.groupBox) self.gridLayout_3.addLayout(self.verticalLayout_2, 0, 0, 1, 1) @@ -90,7 +102,7 @@ class Ui_Dialog(object): self.coverShadows.setText(_translate("Dialog", "Cover shadows")) self.performCulling.setToolTip(_translate("Dialog", "Enabling reduces startup time and memory usage")) self.performCulling.setText(_translate("Dialog", "Load covers only when needed")) - self.checkBox.setText(_translate("Dialog", "OCPD")) + self.languageLabel.setText(_translate("Dialog", "Dictionary:")) self.okButton.setText(_translate("Dialog", "Scan Library")) self.cancelButton.setText(_translate("Dialog", "Close")) self.aboutButton.setText(_translate("Dialog", "About")) diff --git a/settings.py b/settings.py index eb0a61c..bf002a1 100644 --- a/settings.py +++ b/settings.py @@ -96,6 +96,13 @@ class Settings: 'rememberFiles', 'True').capitalize()) self.parent.settings['perform_culling'] = literal_eval(self.settings.value( 'performCulling', 'True').capitalize()) + self.parent.settings['dictionary_language'] = self.settings.value( + 'dictionaryLanguage', 'en') + self.settings.endGroup() + + self.settings.beginGroup('dialogSettings') + self.parent.settings['dialog_background'] = self.settings.value( + 'dialogBackground', QtGui.QColor().fromRgb(0, 0, 0)) self.settings.endGroup() def save_settings(self): @@ -157,4 +164,9 @@ class Settings: self.settings.setValue('autoTags', current_settings['auto_tags']) self.settings.setValue('scanLibraryAtStart', current_settings['scan_library']) self.settings.setValue('performCulling', current_settings['perform_culling']) + self.settings.setValue('dictionaryLanguage', current_settings['dictionary_language']) + self.settings.endGroup() + + self.settings.beginGroup('dialogSettings') + self.settings.setValue('dialogBackground', current_settings['dialog_background']) self.settings.endGroup() diff --git a/settingsdialog.py b/settingsdialog.py index e546dd3..7fa284c 100644 --- a/settingsdialog.py +++ b/settingsdialog.py @@ -41,7 +41,8 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog): self.move(self.parent.settings['settings_dialog_position']) self.aboutBox.setVisible(False) - with open('resources/about.html') as about_html: + aboutfile_path = os.path.join('resources', 'about.html') + with open(aboutfile_path) as about_html: self.aboutBox.setHtml(about_html.read()) self.paths = None @@ -49,6 +50,17 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog): self.filesystem_model = None self.tag_data_copy = None + languages = ['English', 'Spanish', 'Hindi'] + self.languageBox.addItems(languages) + current_language = self.parent.settings['dictionary_language'] + if current_language == 'en': + self.languageBox.setCurrentIndex(0) + elif current_language == 'es': + self.languageBox.setCurrentIndex(1) + else: + self.languageBox.setCurrentIndex(2) + self.languageBox.activated.connect(self.change_dictionary_language) + self.okButton.setToolTip('Save changes and start library scan') self.okButton.clicked.connect(self.start_library_scan) self.cancelButton.clicked.connect(self.cancel_pressed) @@ -101,7 +113,8 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog): # Check and see root_directory = QtCore.QDir().rootPath() - self.treeView.setRootIndex(self.filesystem_model.setRootPath(root_directory)) + self.treeView.setRootIndex( + self.filesystem_model.setRootPath(root_directory)) # Set the treeView and QFileSystemModel to its desired state selected_paths = [ @@ -230,6 +243,13 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog): table_headers.append(self.treeView.columnWidth(i)) self.parent.settings['settings_dialog_headers'] = table_headers + def change_dictionary_language(self, event): + language_dict = { + 0: 'en', + 1: 'es', + 2: 'hi'} + self.parent.settings['dictionary_language'] = language_dict[self.languageBox.currentIndex()] + def manage_checkboxes(self, event=None): sender = self.sender().objectName() diff --git a/widgets.py b/widgets.py index 16d9186..0fa0959 100644 --- a/widgets.py +++ b/widgets.py @@ -410,7 +410,7 @@ class Tab(QtWidgets.QWidget): self.bookmark_model.removeRow(index.row()) def hide_mouse(self): - self.contentView.setCursor(QtCore.Qt.BlankCursor) + self.contentView.viewport().setCursor(QtCore.Qt.BlankCursor) def sneaky_change(self): direction = -1 @@ -434,6 +434,7 @@ class PliantQGraphicsView(QtWidgets.QGraphicsView): self.ignore_wheel_event = False self.ignore_wheel_event_number = 0 self.setDragMode(QtWidgets.QGraphicsView.ScrollHandDrag) + self.viewport().setCursor(QtCore.Qt.ArrowCursor) self.common_functions = PliantWidgetsCommonFunctions( self, self.main_window) self.setMouseTracking(True) @@ -560,7 +561,7 @@ class PliantQGraphicsView(QtWidgets.QGraphicsView): self.verticalScrollBar().setValue(vertical + scroll_increment) def mouseMoveEvent(self, *args): - self.setCursor(QtCore.Qt.ArrowCursor) + self.viewport().setCursor(QtCore.Qt.ArrowCursor) self.parent.mouse_hide_timer.start(3000) def closeEvent(self, *args): @@ -582,6 +583,7 @@ class PliantQTextBrowser(QtWidgets.QTextBrowser): self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.customContextMenuRequested.connect( self.generate_textbrowser_context_menu) + self.viewport().setCursor(QtCore.Qt.IBeamCursor) def wheelEvent(self, event): self.record_scroll_position() @@ -600,6 +602,8 @@ class PliantQTextBrowser(QtWidgets.QTextBrowser): QtWidgets.QTextEdit.keyPressEvent(self, event) def record_scroll_position(self, return_as_bookmark=False): + self.parent.metadata['position']['is_read'] = False + vertical = self.verticalScrollBar().value() maximum = self.verticalScrollBar().maximum() @@ -648,12 +652,10 @@ class PliantQTextBrowser(QtWidgets.QTextBrowser): def closeEvent(self, *args): self.main_window.closeEvent() - # def mouseMoveEvent(self, event): - # TODO - # This does not work as expected - # event.accept() - # self.setCursor(QtCore.Qt.ArrowCursor) - # self.parent.mouse_hide_timer.start(3000) + def mouseMoveEvent(self, event): + event.accept() + self.viewport().setCursor(QtCore.Qt.IBeamCursor) + self.parent.mouse_hide_timer.start(3000) class PliantWidgetsCommonFunctions():