diff --git a/__main__.py b/__main__.py index 19dff20..a0b9444 100755 --- a/__main__.py +++ b/__main__.py @@ -25,7 +25,8 @@ import sorter import database from resources import mainwindow, resources -from widgets import LibraryToolBar, BookToolBar, Tab, LibraryDelegate +from toolbars import LibraryToolBar, BookToolBar +from widgets import Tab, LibraryDelegate from threaded import BackGroundTabUpdate, BackGroundBookAddition, BackGroundBookDeletion from library import Library from settings import Settings diff --git a/toolbars.py b/toolbars.py new file mode 100644 index 0000000..ad2d133 --- /dev/null +++ b/toolbars.py @@ -0,0 +1,370 @@ +#!usr/bin/env python3 + +# This file is a part of Lector, a Qt based ebook reader +# Copyright (C) 2018 BasioMeusPuga + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +from PyQt5 import QtWidgets, QtGui, QtCore + + +class BookToolBar(QtWidgets.QToolBar): + def __init__(self, parent=None): + super(BookToolBar, self).__init__(parent) + + # Spacer + spacer = QtWidgets.QWidget() + spacer.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) + + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + + self.setMovable(False) + self.setIconSize(QtCore.QSize(22, 22)) + self.setFloatable(False) + self.setContextMenuPolicy(QtCore.Qt.PreventContextMenu) + self.setObjectName("LibraryToolBar") + + # Buttons + self.fontButton = QtWidgets.QAction( + QtGui.QIcon.fromTheme('gtk-select-font'), + 'View settings', self) + self.fullscreenButton = QtWidgets.QAction( + QtGui.QIcon.fromTheme('view-fullscreen'), + 'Fullscreen', self) + self.addBookmarkButton = QtWidgets.QAction( + QtGui.QIcon.fromTheme('bookmark-new'), + 'Add bookmark', self) + self.bookmarkButton = QtWidgets.QAction( + QtGui.QIcon.fromTheme('bookmarks'), + 'Bookmarks', self) + self.bookmarkButton.setObjectName('bookmarkButton') + self.resetProfile = QtWidgets.QAction( + QtGui.QIcon.fromTheme('view-refresh'), + 'Reset profile', self) + + # Add buttons + self.addAction(self.fontButton) + self.fontButton.setCheckable(True) + self.fontButton.triggered.connect(self.toggle_font_settings) + self.addSeparator() + self.addAction(self.addBookmarkButton) + self.addAction(self.bookmarkButton) + self.bookmarkButton.setCheckable(True) + self.addSeparator() + self.addAction(self.fullscreenButton) + + # Font modification + font_sizes = [str(i) for i in range(8, 48, 2)] + font_sizes.extend(['56', '64', '72']) + self.fontSizeBox = QtWidgets.QComboBox(self) + self.fontSizeBox.setObjectName('fontSizeBox') + self.fontSizeBox.setToolTip('Font size') + self.fontSizeBox.addItems(font_sizes) + self.fontSizeBox.setEditable(True) + + self.paddingUp = QtWidgets.QAction( + QtGui.QIcon.fromTheme('format-indent-less'), + 'Increase padding', self) + self.paddingUp.setObjectName('paddingUp') + self.paddingDown = QtWidgets.QAction( + QtGui.QIcon.fromTheme('format-justify-fill'), + 'Decrease padding', self) + self.paddingDown.setObjectName('paddingDown') + + self.lineSpacingUp = QtWidgets.QAction( + QtGui.QIcon.fromTheme('format-line-spacing-triple'), + 'Increase line spacing', self) + self.lineSpacingUp.setObjectName('lineSpacingUp') + self.lineSpacingDown = QtWidgets.QAction( + QtGui.QIcon.fromTheme('format-line-spacing-double'), + 'Decrease line spacing', self) + self.lineSpacingDown.setObjectName('lineSpacingDown') + + self.fontBox = QtWidgets.QFontComboBox() + self.fontBox.setFontFilters(QtWidgets.QFontComboBox.ScalableFonts) + self.fontBox.setObjectName('fontBox') + + self.colorBoxFG = FixedPushButton(self) + self.colorBoxFG.setObjectName('fgColor') + self.colorBoxFG.setToolTip('Text color') + self.colorBoxBG = FixedPushButton(self) + self.colorBoxBG.setToolTip('Background color') + self.colorBoxBG.setObjectName('bgColor') + + profiles = ['Profile 1', 'Profile 2', 'Profile 3'] + self.profileBox = QtWidgets.QComboBox(self) + self.profileBox.addItems(profiles) + + self.profileAction = self.addWidget(self.profileBox) + self.fontSeparator1 = self.addSeparator() + self.fontBoxAction = self.addWidget(self.fontBox) + self.fontSizeBoxAction = self.addWidget(self.fontSizeBox) + self.fontSeparator2 = self.addSeparator() + self.fgColorAction = self.addWidget(self.colorBoxFG) + self.bgColorAction = self.addWidget(self.colorBoxBG) + self.fontSeparator3 = self.addSeparator() + self.addAction(self.lineSpacingUp) + self.addAction(self.lineSpacingDown) + self.fontSeparator4 = self.addSeparator() + self.addAction(self.paddingUp) + self.addAction(self.paddingDown) + + self.fontActions = [ + self.fontBoxAction, + self.fontSizeBoxAction, + self.fgColorAction, + self.bgColorAction, + self.lineSpacingUp, + self.lineSpacingDown, + self.paddingUp, + self.paddingDown, + self.profileAction, + self.fontSeparator1, + self.fontSeparator2, + self.fontSeparator3, + self.fontSeparator4, + self.resetProfile] + + for i in self.fontActions: + i.setVisible(False) + + # Comic view modification + self.zoomIn = QtWidgets.QAction( + QtGui.QIcon.fromTheme('zoom-in'), + 'Zoom in', self) + self.zoomIn.setObjectName('zoomIn') + self.zoomOut = QtWidgets.QAction( + QtGui.QIcon.fromTheme('zoom-out'), + 'Zoom Out', self) + self.zoomOut.setObjectName('zoomOut') + + self.fitWidth = QtWidgets.QAction( + QtGui.QIcon.fromTheme('zoom-fit-width'), + 'Fit Width', self) + self.fitWidth.setObjectName('fitWidth') + self.fitWidth.setCheckable(True) + self.bestFit = QtWidgets.QAction( + QtGui.QIcon.fromTheme('zoom-fit-best'), + 'Best Fit', self) + self.bestFit.setObjectName('bestFit') + self.bestFit.setCheckable(True) + self.originalSize = QtWidgets.QAction( + QtGui.QIcon.fromTheme('zoom-original'), + 'Original size', self) + self.originalSize.setObjectName('originalSize') + self.originalSize.setCheckable(True) + + self.comicBGColor = FixedPushButton(self) + self.comicBGColor.setToolTip('Background color') + self.comicBGColor.setObjectName('comicBGColor') + + self.comicSeparator1 = self.addSeparator() + self.addAction(self.zoomIn) + self.addAction(self.zoomOut) + self.addAction(self.fitWidth) + self.addAction(self.bestFit) + self.addAction(self.originalSize) + self.comicSeparator2 = self.addSeparator() + self.comicBGColorAction = self.addWidget(self.comicBGColor) + + self.comicActions = [ + self.comicBGColorAction, + self.zoomIn, + self.zoomOut, + self.fitWidth, + self.bestFit, + self.originalSize, + self.comicSeparator1, + self.comicSeparator2] + + for i in self.comicActions: + i.setVisible(False) + + # Other booktoolbar widgets + self.searchBar = FixedLineEdit(self) + self.searchBar.setPlaceholderText( + 'Search...') + self.searchBar.setSizePolicy(sizePolicy) + self.searchBar.setContentsMargins(10, 0, 0, 0) + self.searchBar.setObjectName('searchBar') + + # Sorter + self.tocBox = FixedComboBox(self) + self.tocBox.setObjectName('sortingBox') + self.tocBox.setToolTip('Table of Contents') + + # All of these will be put after the spacer + # This means that the buttons in the left side of + # the toolbar have to split up and added here + self.boxSpacer = self.addWidget(spacer) + + self.tocBoxAction = self.addWidget(self.tocBox) + self.searchBarAction = self.addWidget(self.searchBar) + + self.bookActions = [ + self.addBookmarkButton, + self.bookmarkButton, + self.fullscreenButton, + self.tocBoxAction, + self.searchBarAction] + + for i in self.bookActions: + i.setVisible(True) + + self.addAction(self.resetProfile) + + def toggle_font_settings(self): + if self.fontButton.isChecked(): + self.customize_view_on() + else: + self.customize_view_off() + + def customize_view_on(self): + if self.parent().tabWidget.widget( + self.parent().tabWidget.currentIndex()).metadata['images_only']: + + # The following might seem redundant, + # but it's necessary for tab switching + + for i in self.comicActions: + i.setVisible(True) + + for i in self.fontActions: + i.setVisible(False) + else: + for i in self.fontActions: + i.setVisible(True) + + for i in self.comicActions: + i.setVisible(False) + + for i in self.bookActions: + i.setVisible(False) + + def customize_view_off(self): + for i in self.fontActions: + i.setVisible(False) + + for i in self.comicActions: + i.setVisible(False) + + for i in self.bookActions: + i.setVisible(True) + + +class LibraryToolBar(QtWidgets.QToolBar): + def __init__(self, parent=None): + super(LibraryToolBar, self).__init__(parent) + + spacer = QtWidgets.QWidget() + spacer.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) + + self.setMovable(False) + self.setIconSize(QtCore.QSize(22, 22)) + self.setFloatable(False) + self.setContextMenuPolicy(QtCore.Qt.PreventContextMenu) + self.setObjectName("LibraryToolBar") + + # Buttons + self.addButton = QtWidgets.QAction( + QtGui.QIcon.fromTheme('add'), 'Add book', self) + self.deleteButton = QtWidgets.QAction( + QtGui.QIcon.fromTheme('remove'), 'Delete book', self) + self.settingsButton = QtWidgets.QAction( + QtGui.QIcon.fromTheme('settings'), 'Settings', self) + self.settingsButton.setCheckable(True) + + self.coverViewButton = QtWidgets.QAction( + QtGui.QIcon.fromTheme('view-grid'), 'View as covers', self) + self.coverViewButton.setCheckable(True) + self.tableViewButton = QtWidgets.QAction( + QtGui.QIcon.fromTheme('table'), 'View as table', self) + self.tableViewButton.setCheckable(True) + + self.libraryFilterButton = QtWidgets.QToolButton(self) + self.libraryFilterButton.setIcon(QtGui.QIcon.fromTheme('view-readermode')) + self.libraryFilterButton.setText('Filter library') + self.libraryFilterButton.setToolTip('Filter library') + + # Auto unchecks the other QToolButton in case of clicking + self.viewButtons = QtWidgets.QActionGroup(self) + self.viewButtons.setExclusive(True) + self.viewButtons.addAction(self.coverViewButton) + self.viewButtons.addAction(self.tableViewButton) + + # Add buttons + self.addAction(self.addButton) + self.addAction(self.deleteButton) + self.addSeparator() + self.addAction(self.coverViewButton) + self.addAction(self.tableViewButton) + self.addSeparator() + self.addWidget(self.libraryFilterButton) + self.addSeparator() + self.addAction(self.settingsButton) + + # Filter + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + + self.searchBar = FixedLineEdit(self) + self.searchBar.setClearButtonEnabled(True) + self.searchBar.setPlaceholderText( + 'Search for Title, Author, Tags...') + self.searchBar.setSizePolicy(sizePolicy) + self.searchBar.setContentsMargins(10, 0, 0, 0) + self.searchBar.setObjectName('searchBar') + + # Sorter + sorting_choices = ['Title', 'Author', 'Year', 'Newest', 'Last read'] + self.sortingBox = FixedComboBox(self) + self.sortingBox.addItems(sorting_choices) + self.sortingBox.setObjectName('sortingBox') + self.sortingBox.setSizePolicy(sizePolicy) + self.sortingBox.setMinimumContentsLength(10) + self.sortingBox.setToolTip('Sort by') + + # Add widgets + self.addWidget(spacer) + self.sortingBoxAction = self.addWidget(self.sortingBox) + self.addWidget(self.searchBar) + + +# Sublassing these widgets out prevents them from resizing +class FixedComboBox(QtWidgets.QComboBox): + def __init__(self, parent=None): + super(FixedComboBox, self).__init__(parent) + + def sizeHint(self): + return QtCore.QSize(400, 22) + + +class FixedLineEdit(QtWidgets.QLineEdit): + def __init__(self, parent=None): + super(FixedLineEdit, self).__init__(parent) + + def sizeHint(self): + return QtCore.QSize(400, 22) + + +class FixedPushButton(QtWidgets.QPushButton): + def __init__(self, parent=None): + super(FixedPushButton, self).__init__(parent) + + def sizeHint(self): + return QtCore.QSize(36, 30) diff --git a/widgets.py b/widgets.py index 91cf560..a8c2dbb 100644 --- a/widgets.py +++ b/widgets.py @@ -28,356 +28,6 @@ from PyQt5 import QtWidgets, QtGui, QtCore from resources import pie_chart -class BookToolBar(QtWidgets.QToolBar): - def __init__(self, parent=None): - super(BookToolBar, self).__init__(parent) - - # Spacer - spacer = QtWidgets.QWidget() - spacer.setSizePolicy( - QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) - - sizePolicy = QtWidgets.QSizePolicy( - QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - - self.setMovable(False) - self.setIconSize(QtCore.QSize(22, 22)) - self.setFloatable(False) - self.setContextMenuPolicy(QtCore.Qt.PreventContextMenu) - self.setObjectName("LibraryToolBar") - - # Buttons - self.fontButton = QtWidgets.QAction( - QtGui.QIcon.fromTheme('gtk-select-font'), - 'View settings', self) - self.fullscreenButton = QtWidgets.QAction( - QtGui.QIcon.fromTheme('view-fullscreen'), - 'Fullscreen', self) - self.addBookmarkButton = QtWidgets.QAction( - QtGui.QIcon.fromTheme('bookmark-new'), - 'Add bookmark', self) - self.bookmarkButton = QtWidgets.QAction( - QtGui.QIcon.fromTheme('bookmarks'), - 'Bookmarks', self) - self.bookmarkButton.setObjectName('bookmarkButton') - self.resetProfile = QtWidgets.QAction( - QtGui.QIcon.fromTheme('view-refresh'), - 'Reset profile', self) - - # Add buttons - self.addAction(self.fontButton) - self.fontButton.setCheckable(True) - self.fontButton.triggered.connect(self.toggle_font_settings) - self.addSeparator() - self.addAction(self.addBookmarkButton) - self.addAction(self.bookmarkButton) - self.bookmarkButton.setCheckable(True) - self.addSeparator() - self.addAction(self.fullscreenButton) - - # Font modification - font_sizes = [str(i) for i in range(8, 48, 2)] - font_sizes.extend(['56', '64', '72']) - self.fontSizeBox = QtWidgets.QComboBox(self) - self.fontSizeBox.setObjectName('fontSizeBox') - self.fontSizeBox.setToolTip('Font size') - self.fontSizeBox.addItems(font_sizes) - self.fontSizeBox.setEditable(True) - - self.paddingUp = QtWidgets.QAction( - QtGui.QIcon.fromTheme('format-indent-less'), - 'Increase padding', self) - self.paddingUp.setObjectName('paddingUp') - self.paddingDown = QtWidgets.QAction( - QtGui.QIcon.fromTheme('format-justify-fill'), - 'Decrease padding', self) - self.paddingDown.setObjectName('paddingDown') - - self.lineSpacingUp = QtWidgets.QAction( - QtGui.QIcon.fromTheme('format-line-spacing-triple'), - 'Increase line spacing', self) - self.lineSpacingUp.setObjectName('lineSpacingUp') - self.lineSpacingDown = QtWidgets.QAction( - QtGui.QIcon.fromTheme('format-line-spacing-double'), - 'Decrease line spacing', self) - self.lineSpacingDown.setObjectName('lineSpacingDown') - - self.fontBox = QtWidgets.QFontComboBox() - self.fontBox.setFontFilters(QtWidgets.QFontComboBox.ScalableFonts) - self.fontBox.setObjectName('fontBox') - - self.colorBoxFG = FixedPushButton(self) - self.colorBoxFG.setObjectName('fgColor') - self.colorBoxFG.setToolTip('Text color') - self.colorBoxBG = FixedPushButton(self) - self.colorBoxBG.setToolTip('Background color') - self.colorBoxBG.setObjectName('bgColor') - - profiles = ['Profile 1', 'Profile 2', 'Profile 3'] - self.profileBox = QtWidgets.QComboBox(self) - self.profileBox.addItems(profiles) - - self.profileAction = self.addWidget(self.profileBox) - self.fontSeparator1 = self.addSeparator() - self.fontBoxAction = self.addWidget(self.fontBox) - self.fontSizeBoxAction = self.addWidget(self.fontSizeBox) - self.fontSeparator2 = self.addSeparator() - self.fgColorAction = self.addWidget(self.colorBoxFG) - self.bgColorAction = self.addWidget(self.colorBoxBG) - self.fontSeparator3 = self.addSeparator() - self.addAction(self.lineSpacingUp) - self.addAction(self.lineSpacingDown) - self.fontSeparator4 = self.addSeparator() - self.addAction(self.paddingUp) - self.addAction(self.paddingDown) - - self.fontActions = [ - self.fontBoxAction, - self.fontSizeBoxAction, - self.fgColorAction, - self.bgColorAction, - self.lineSpacingUp, - self.lineSpacingDown, - self.paddingUp, - self.paddingDown, - self.profileAction, - self.fontSeparator1, - self.fontSeparator2, - self.fontSeparator3, - self.fontSeparator4, - self.resetProfile] - - for i in self.fontActions: - i.setVisible(False) - - # Comic view modification - self.zoomIn = QtWidgets.QAction( - QtGui.QIcon.fromTheme('zoom-in'), - 'Zoom in', self) - self.zoomIn.setObjectName('zoomIn') - self.zoomOut = QtWidgets.QAction( - QtGui.QIcon.fromTheme('zoom-out'), - 'Zoom Out', self) - self.zoomOut.setObjectName('zoomOut') - - self.fitWidth = QtWidgets.QAction( - QtGui.QIcon.fromTheme('zoom-fit-width'), - 'Fit Width', self) - self.fitWidth.setObjectName('fitWidth') - self.fitWidth.setCheckable(True) - self.bestFit = QtWidgets.QAction( - QtGui.QIcon.fromTheme('zoom-fit-best'), - 'Best Fit', self) - self.bestFit.setObjectName('bestFit') - self.bestFit.setCheckable(True) - self.originalSize = QtWidgets.QAction( - QtGui.QIcon.fromTheme('zoom-original'), - 'Original size', self) - self.originalSize.setObjectName('originalSize') - self.originalSize.setCheckable(True) - - self.comicBGColor = FixedPushButton(self) - self.comicBGColor.setToolTip('Background color') - self.comicBGColor.setObjectName('comicBGColor') - - self.comicSeparator1 = self.addSeparator() - self.addAction(self.zoomIn) - self.addAction(self.zoomOut) - self.addAction(self.fitWidth) - self.addAction(self.bestFit) - self.addAction(self.originalSize) - self.comicSeparator2 = self.addSeparator() - self.comicBGColorAction = self.addWidget(self.comicBGColor) - - self.comicActions = [ - self.comicBGColorAction, - self.zoomIn, - self.zoomOut, - self.fitWidth, - self.bestFit, - self.originalSize, - self.comicSeparator1, - self.comicSeparator2] - - for i in self.comicActions: - i.setVisible(False) - - # Other booktoolbar widgets - self.searchBar = FixedLineEdit(self) - self.searchBar.setPlaceholderText( - 'Search...') - self.searchBar.setSizePolicy(sizePolicy) - self.searchBar.setContentsMargins(10, 0, 0, 0) - self.searchBar.setObjectName('searchBar') - - # Sorter - self.tocBox = FixedComboBox(self) - self.tocBox.setObjectName('sortingBox') - self.tocBox.setToolTip('Table of Contents') - - # All of these will be put after the spacer - # This means that the buttons in the left side of - # the toolbar have to split up and added here - self.boxSpacer = self.addWidget(spacer) - - self.tocBoxAction = self.addWidget(self.tocBox) - self.searchBarAction = self.addWidget(self.searchBar) - - self.bookActions = [ - self.addBookmarkButton, - self.bookmarkButton, - self.fullscreenButton, - self.tocBoxAction, - self.searchBarAction] - - for i in self.bookActions: - i.setVisible(True) - - self.addAction(self.resetProfile) - - def toggle_font_settings(self): - if self.fontButton.isChecked(): - self.customize_view_on() - else: - self.customize_view_off() - - def customize_view_on(self): - if self.parent().tabWidget.widget( - self.parent().tabWidget.currentIndex()).metadata['images_only']: - - # The following might seem redundant, - # but it's necessary for tab switching - - for i in self.comicActions: - i.setVisible(True) - - for i in self.fontActions: - i.setVisible(False) - else: - for i in self.fontActions: - i.setVisible(True) - - for i in self.comicActions: - i.setVisible(False) - - for i in self.bookActions: - i.setVisible(False) - - def customize_view_off(self): - for i in self.fontActions: - i.setVisible(False) - - for i in self.comicActions: - i.setVisible(False) - - for i in self.bookActions: - i.setVisible(True) - - -class LibraryToolBar(QtWidgets.QToolBar): - def __init__(self, parent=None): - super(LibraryToolBar, self).__init__(parent) - - spacer = QtWidgets.QWidget() - spacer.setSizePolicy( - QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) - - self.setMovable(False) - self.setIconSize(QtCore.QSize(22, 22)) - self.setFloatable(False) - self.setContextMenuPolicy(QtCore.Qt.PreventContextMenu) - self.setObjectName("LibraryToolBar") - - # Buttons - self.addButton = QtWidgets.QAction( - QtGui.QIcon.fromTheme('add'), 'Add book', self) - self.deleteButton = QtWidgets.QAction( - QtGui.QIcon.fromTheme('remove'), 'Delete book', self) - self.settingsButton = QtWidgets.QAction( - QtGui.QIcon.fromTheme('settings'), 'Settings', self) - self.settingsButton.setCheckable(True) - - self.coverViewButton = QtWidgets.QAction( - QtGui.QIcon.fromTheme('view-grid'), 'View as covers', self) - self.coverViewButton.setCheckable(True) - self.tableViewButton = QtWidgets.QAction( - QtGui.QIcon.fromTheme('table'), 'View as table', self) - self.tableViewButton.setCheckable(True) - - self.libraryFilterButton = QtWidgets.QToolButton(self) - self.libraryFilterButton.setIcon(QtGui.QIcon.fromTheme('view-readermode')) - self.libraryFilterButton.setText('Filter library') - self.libraryFilterButton.setToolTip('Filter library') - - # Auto unchecks the other QToolButton in case of clicking - self.viewButtons = QtWidgets.QActionGroup(self) - self.viewButtons.setExclusive(True) - self.viewButtons.addAction(self.coverViewButton) - self.viewButtons.addAction(self.tableViewButton) - - # Add buttons - self.addAction(self.addButton) - self.addAction(self.deleteButton) - self.addSeparator() - self.addAction(self.coverViewButton) - self.addAction(self.tableViewButton) - self.addSeparator() - self.addWidget(self.libraryFilterButton) - self.addSeparator() - self.addAction(self.settingsButton) - - # Filter - sizePolicy = QtWidgets.QSizePolicy( - QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - - self.searchBar = FixedLineEdit(self) - self.searchBar.setClearButtonEnabled(True) - self.searchBar.setPlaceholderText( - 'Search for Title, Author, Tags...') - self.searchBar.setSizePolicy(sizePolicy) - self.searchBar.setContentsMargins(10, 0, 0, 0) - self.searchBar.setObjectName('searchBar') - - # Sorter - sorting_choices = ['Title', 'Author', 'Year', 'Newest', 'Last read'] - self.sortingBox = FixedComboBox(self) - self.sortingBox.addItems(sorting_choices) - self.sortingBox.setObjectName('sortingBox') - self.sortingBox.setSizePolicy(sizePolicy) - self.sortingBox.setMinimumContentsLength(10) - self.sortingBox.setToolTip('Sort by') - - # Add widgets - self.addWidget(spacer) - self.sortingBoxAction = self.addWidget(self.sortingBox) - self.addWidget(self.searchBar) - - -# Sublassing these widgets out prevents them from resizing -class FixedComboBox(QtWidgets.QComboBox): - def __init__(self, parent=None): - super(FixedComboBox, self).__init__(parent) - - def sizeHint(self): - return QtCore.QSize(400, 22) - - -class FixedLineEdit(QtWidgets.QLineEdit): - def __init__(self, parent=None): - super(FixedLineEdit, self).__init__(parent) - - def sizeHint(self): - return QtCore.QSize(400, 22) - - -class FixedPushButton(QtWidgets.QPushButton): - def __init__(self, parent=None): - super(FixedPushButton, self).__init__(parent) - - def sizeHint(self): - return QtCore.QSize(36, 30) - - class Tab(QtWidgets.QWidget): def __init__(self, metadata, parent=None): super(Tab, self).__init__(parent) @@ -523,6 +173,7 @@ class Tab(QtWidgets.QWidget): total_chapters = len(self.metadata['content'].keys()) # TODO # Calculate lines to incorporate into progress + self.metadata['position'] = { 'current_chapter': 1, 'total_chapters': total_chapters,