mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-07 20:54:15 +02:00
[view] fix: several issues related to resizing
This commit is contained in:
@@ -20,7 +20,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
- Packaging
|
- Packaging
|
||||||
- AppImage: download certificate issue [#280](https://github.com/vinifmor/bauh/issues/280)
|
- AppImage: download certificate issue [#280](https://github.com/vinifmor/bauh/issues/280)
|
||||||
- GUI
|
- GUI
|
||||||
- management panel not fully maximizing
|
- initialization panel size not based on the current display device size
|
||||||
|
- management panel:
|
||||||
|
- not fully maximizing
|
||||||
|
- not maximizing based on the current display device size (for multiple display setups)
|
||||||
|
- not respecting a minimal/maximum width based on the current display device size (for multiple display setup)
|
||||||
|
- dialogs not respecting the current display device width
|
||||||
|
- not readjusting size after maximizing/minimizing
|
||||||
|
|
||||||
### Localization (i18n)
|
### Localization (i18n)
|
||||||
- Italian ([@albanobattistella](https://github.com/albanobattistella), [@luca-digrazia](https://github.com/luca-digrazia))
|
- Italian ([@albanobattistella](https://github.com/albanobattistella), [@luca-digrazia](https://github.com/luca-digrazia))
|
||||||
|
|||||||
@@ -76,7 +76,6 @@ def new_manage_panel(app_args: Namespace, app_config: dict, logger: logging.Logg
|
|||||||
manage_window = ManageWindow(i18n=i18n,
|
manage_window = ManageWindow(i18n=i18n,
|
||||||
manager=manager,
|
manager=manager,
|
||||||
icon_cache=icon_cache,
|
icon_cache=icon_cache,
|
||||||
screen_size=screen_size,
|
|
||||||
config=app_config,
|
config=app_config,
|
||||||
context=context,
|
context=context,
|
||||||
http_client=http_client,
|
http_client=http_client,
|
||||||
@@ -84,8 +83,7 @@ def new_manage_panel(app_args: Namespace, app_config: dict, logger: logging.Logg
|
|||||||
force_suggestions=force_suggestions,
|
force_suggestions=force_suggestions,
|
||||||
logger=logger)
|
logger=logger)
|
||||||
|
|
||||||
prepare = PreparePanel(screen_size=screen_size,
|
prepare = PreparePanel(context=context,
|
||||||
context=context,
|
|
||||||
manager=manager,
|
manager=manager,
|
||||||
i18n=i18n,
|
i18n=i18n,
|
||||||
manage_window=manage_window,
|
manage_window=manage_window,
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ from bauh.api.abstract.model import PackageStatus, CustomSoftwareAction
|
|||||||
from bauh.commons.html import strip_html, bold
|
from bauh.commons.html import strip_html, bold
|
||||||
from bauh.view.qt.components import IconButton, QCustomMenuAction, QCustomToolbar
|
from bauh.view.qt.components import IconButton, QCustomMenuAction, QCustomToolbar
|
||||||
from bauh.view.qt.dialog import ConfirmationDialog
|
from bauh.view.qt.dialog import ConfirmationDialog
|
||||||
|
from bauh.view.qt.qt_utils import get_current_screen_geometry
|
||||||
from bauh.view.qt.view_model import PackageView
|
from bauh.view.qt.view_model import PackageView
|
||||||
from bauh.view.util.translation import I18n
|
from bauh.view.util.translation import I18n
|
||||||
|
|
||||||
@@ -68,9 +69,8 @@ class PackagesTable(QTableWidget):
|
|||||||
COL_NUMBER = 9
|
COL_NUMBER = 9
|
||||||
DEFAULT_ICON_SIZE = QSize(16, 16)
|
DEFAULT_ICON_SIZE = QSize(16, 16)
|
||||||
|
|
||||||
def __init__(self, parent: QWidget, icon_cache: MemoryCache, download_icons: bool, screen_width: int):
|
def __init__(self, parent: QWidget, icon_cache: MemoryCache, download_icons: bool):
|
||||||
super(PackagesTable, self).__init__()
|
super(PackagesTable, self).__init__()
|
||||||
self.screen_width = screen_width
|
|
||||||
self.setObjectName('table_packages')
|
self.setObjectName('table_packages')
|
||||||
self.setParent(parent)
|
self.setParent(parent)
|
||||||
self.window = parent
|
self.window = parent
|
||||||
@@ -180,15 +180,16 @@ class PackagesTable(QTableWidget):
|
|||||||
action=custom_action)
|
action=custom_action)
|
||||||
|
|
||||||
def refresh(self, pkg: PackageView):
|
def refresh(self, pkg: PackageView):
|
||||||
self._update_row(pkg, update_check_enabled=False, change_update_col=False)
|
screen_width = get_current_screen_geometry(self.parent()).width()
|
||||||
|
self._update_row(pkg, screen_width, update_check_enabled=False, change_update_col=False)
|
||||||
|
|
||||||
def update_package(self, pkg: PackageView, change_update_col: bool = False):
|
def update_package(self, pkg: PackageView, screen_width: int, change_update_col: bool = False):
|
||||||
if self.download_icons and pkg.model.icon_url:
|
if self.download_icons and pkg.model.icon_url:
|
||||||
icon_request = QNetworkRequest(QUrl(pkg.model.icon_url))
|
icon_request = QNetworkRequest(QUrl(pkg.model.icon_url))
|
||||||
icon_request.setAttribute(QNetworkRequest.FollowRedirectsAttribute, True)
|
icon_request.setAttribute(QNetworkRequest.FollowRedirectsAttribute, True)
|
||||||
self.network_man.get(icon_request)
|
self.network_man.get(icon_request)
|
||||||
|
|
||||||
self._update_row(pkg, change_update_col=change_update_col)
|
self._update_row(pkg, screen_width, change_update_col=change_update_col)
|
||||||
|
|
||||||
def _uninstall(self, pkg: PackageView):
|
def _uninstall(self, pkg: PackageView):
|
||||||
if ConfirmationDialog(title=self.i18n['manage_window.apps_table.row.actions.uninstall.popup.title'],
|
if ConfirmationDialog(title=self.i18n['manage_window.apps_table.row.actions.uninstall.popup.title'],
|
||||||
@@ -255,6 +256,7 @@ class PackagesTable(QTableWidget):
|
|||||||
self.setEnabled(True)
|
self.setEnabled(True)
|
||||||
|
|
||||||
if pkgs:
|
if pkgs:
|
||||||
|
screen_width = get_current_screen_geometry(self.parent()).width()
|
||||||
self.setColumnCount(self.COL_NUMBER if update_check_enabled else self.COL_NUMBER - 1)
|
self.setColumnCount(self.COL_NUMBER if update_check_enabled else self.COL_NUMBER - 1)
|
||||||
self.setRowCount(len(pkgs))
|
self.setRowCount(len(pkgs))
|
||||||
|
|
||||||
@@ -266,16 +268,17 @@ class PackagesTable(QTableWidget):
|
|||||||
icon_request.setAttribute(QNetworkRequest.FollowRedirectsAttribute, True)
|
icon_request.setAttribute(QNetworkRequest.FollowRedirectsAttribute, True)
|
||||||
self.network_man.get(icon_request)
|
self.network_man.get(icon_request)
|
||||||
|
|
||||||
self._update_row(pkg, update_check_enabled)
|
self._update_row(pkg, screen_width, update_check_enabled)
|
||||||
|
|
||||||
self.scrollToTop()
|
self.scrollToTop()
|
||||||
|
|
||||||
def _update_row(self, pkg: PackageView, update_check_enabled: bool = True, change_update_col: bool = True):
|
def _update_row(self, pkg: PackageView, screen_width: int,
|
||||||
|
update_check_enabled: bool = True, change_update_col: bool = True):
|
||||||
self._set_col_icon(0, pkg)
|
self._set_col_icon(0, pkg)
|
||||||
self._set_col_name(1, pkg)
|
self._set_col_name(1, pkg, screen_width)
|
||||||
self._set_col_version(2, pkg)
|
self._set_col_version(2, pkg, screen_width)
|
||||||
self._set_col_description(3, pkg)
|
self._set_col_description(3, pkg, screen_width)
|
||||||
self._set_col_publisher(4, pkg)
|
self._set_col_publisher(4, pkg, screen_width)
|
||||||
self._set_col_type(5, pkg)
|
self._set_col_type(5, pkg)
|
||||||
self._set_col_installed(6, pkg)
|
self._set_col_installed(6, pkg)
|
||||||
self._set_col_actions(7, pkg)
|
self._set_col_actions(7, pkg)
|
||||||
@@ -355,7 +358,7 @@ class PackagesTable(QTableWidget):
|
|||||||
col_type_icon.setToolTip(icon_data['tip'])
|
col_type_icon.setToolTip(icon_data['tip'])
|
||||||
self.setCellWidget(pkg.table_index, col, col_type_icon)
|
self.setCellWidget(pkg.table_index, col, col_type_icon)
|
||||||
|
|
||||||
def _set_col_version(self, col: int, pkg: PackageView):
|
def _set_col_version(self, col: int, pkg: PackageView, screen_width: int):
|
||||||
label_version = QLabel(str(pkg.model.version if pkg.model.version else '?'))
|
label_version = QLabel(str(pkg.model.version if pkg.model.version else '?'))
|
||||||
label_version.setObjectName('app_version')
|
label_version.setObjectName('app_version')
|
||||||
label_version.setAlignment(Qt.AlignCenter)
|
label_version.setAlignment(Qt.AlignCenter)
|
||||||
@@ -383,7 +386,7 @@ class PackagesTable(QTableWidget):
|
|||||||
f"{self.i18n['version.latest']}: {pkg.model.latest_version})"
|
f"{self.i18n['version.latest']}: {pkg.model.latest_version})"
|
||||||
label_version.setText(f"{label_version.text()} > {pkg.model.latest_version}")
|
label_version.setText(f"{label_version.text()} > {pkg.model.latest_version}")
|
||||||
|
|
||||||
if label_version.sizeHint().width() / self.screen_width > 0.22:
|
if label_version.sizeHint().width() / screen_width > 0.22:
|
||||||
label_version.setText(pkg.model.latest_version)
|
label_version.setText(pkg.model.latest_version)
|
||||||
|
|
||||||
item.setToolTip(tooltip)
|
item.setToolTip(tooltip)
|
||||||
@@ -426,7 +429,7 @@ class PackagesTable(QTableWidget):
|
|||||||
self._update_icon(col_icon, icon)
|
self._update_icon(col_icon, icon)
|
||||||
self.setCellWidget(pkg.table_index, col, col_icon)
|
self.setCellWidget(pkg.table_index, col, col_icon)
|
||||||
|
|
||||||
def _set_col_name(self, col: int, pkg: PackageView):
|
def _set_col_name(self, col: int, pkg: PackageView, screen_width: int):
|
||||||
col_name = QLabel()
|
col_name = QLabel()
|
||||||
col_name.setObjectName('app_name')
|
col_name.setObjectName('app_name')
|
||||||
col_name.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
|
col_name.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
|
||||||
@@ -439,7 +442,7 @@ class PackagesTable(QTableWidget):
|
|||||||
col_name.setToolTip(self.i18n['app.name'].lower())
|
col_name.setToolTip(self.i18n['app.name'].lower())
|
||||||
|
|
||||||
col_name.setText(name)
|
col_name.setText(name)
|
||||||
screen_perc = col_name.sizeHint().width() / self.screen_width
|
screen_perc = col_name.sizeHint().width() / screen_width
|
||||||
|
|
||||||
if screen_perc > 0.15:
|
if screen_perc > 0.15:
|
||||||
max_chars = int(len(name) * 0.15 / screen_perc) - 3
|
max_chars = int(len(name) * 0.15 / screen_perc) - 3
|
||||||
@@ -454,7 +457,7 @@ class PackagesTable(QTableWidget):
|
|||||||
sizes = icon.availableSizes()
|
sizes = icon.availableSizes()
|
||||||
return sizes[-1] if sizes else self.DEFAULT_ICON_SIZE
|
return sizes[-1] if sizes else self.DEFAULT_ICON_SIZE
|
||||||
|
|
||||||
def _set_col_description(self, col: int, pkg: PackageView):
|
def _set_col_description(self, col: int, pkg: PackageView, screen_width: int):
|
||||||
item = QLabel()
|
item = QLabel()
|
||||||
item.setObjectName('app_description')
|
item.setObjectName('app_description')
|
||||||
|
|
||||||
@@ -468,7 +471,7 @@ class PackagesTable(QTableWidget):
|
|||||||
|
|
||||||
item.setText(desc)
|
item.setText(desc)
|
||||||
|
|
||||||
current_width_perc = item.sizeHint().width() / self.screen_width
|
current_width_perc = item.sizeHint().width() / screen_width
|
||||||
if current_width_perc > 0.18:
|
if current_width_perc > 0.18:
|
||||||
max_width = int(len(desc) * 0.18 / current_width_perc) - 3
|
max_width = int(len(desc) * 0.18 / current_width_perc) - 3
|
||||||
desc = desc[0:max_width] + '...'
|
desc = desc[0:max_width] + '...'
|
||||||
@@ -479,7 +482,7 @@ class PackagesTable(QTableWidget):
|
|||||||
|
|
||||||
self.setCellWidget(pkg.table_index, col, item)
|
self.setCellWidget(pkg.table_index, col, item)
|
||||||
|
|
||||||
def _set_col_publisher(self, col: int, pkg: PackageView):
|
def _set_col_publisher(self, col: int, pkg: PackageView, screen_width: int):
|
||||||
item = QToolBar()
|
item = QToolBar()
|
||||||
|
|
||||||
publisher = pkg.model.get_publisher()
|
publisher = pkg.model.get_publisher()
|
||||||
@@ -494,7 +497,7 @@ class PackagesTable(QTableWidget):
|
|||||||
|
|
||||||
if publisher:
|
if publisher:
|
||||||
lb_name.setText(publisher)
|
lb_name.setText(publisher)
|
||||||
screen_perc = lb_name.sizeHint().width() / self.screen_width
|
screen_perc = lb_name.sizeHint().width() / screen_width
|
||||||
|
|
||||||
if screen_perc > 0.12:
|
if screen_perc > 0.12:
|
||||||
max_chars = int(len(publisher) * 0.12 / screen_perc) - 3
|
max_chars = int(len(publisher) * 0.12 / screen_perc) - 3
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from collections.abc import Iterable
|
from collections.abc import Iterable
|
||||||
|
|
||||||
from PyQt5.QtCore import QSize, Qt
|
from PyQt5.QtCore import Qt
|
||||||
from PyQt5.QtGui import QIcon, QCursor
|
from PyQt5.QtGui import QIcon, QCursor
|
||||||
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QGroupBox, \
|
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QGroupBox, \
|
||||||
QLineEdit, QLabel, QGridLayout, QPushButton, QPlainTextEdit, QScrollArea, QFrame, QWidget, QSizePolicy, \
|
QLineEdit, QLabel, QGridLayout, QPushButton, QPlainTextEdit, QScrollArea, QFrame, QWidget, QSizePolicy, \
|
||||||
@@ -8,6 +8,7 @@ from PyQt5.QtWidgets import QDialog, QVBoxLayout, QGroupBox, \
|
|||||||
|
|
||||||
from bauh.api.abstract.cache import MemoryCache
|
from bauh.api.abstract.cache import MemoryCache
|
||||||
from bauh.view.qt.components import new_spacer
|
from bauh.view.qt.components import new_spacer
|
||||||
|
from bauh.view.qt.qt_utils import get_current_screen_geometry
|
||||||
from bauh.view.util.translation import I18n
|
from bauh.view.util.translation import I18n
|
||||||
|
|
||||||
IGNORED_ATTRS = {'name', '__app__'}
|
IGNORED_ATTRS = {'name', '__app__'}
|
||||||
@@ -15,10 +16,9 @@ IGNORED_ATTRS = {'name', '__app__'}
|
|||||||
|
|
||||||
class InfoDialog(QDialog):
|
class InfoDialog(QDialog):
|
||||||
|
|
||||||
def __init__(self, pkg_info: dict, icon_cache: MemoryCache, i18n: I18n, screen_size: QSize):
|
def __init__(self, pkg_info: dict, icon_cache: MemoryCache, i18n: I18n):
|
||||||
super(InfoDialog, self).__init__()
|
super(InfoDialog, self).__init__()
|
||||||
self.setWindowTitle(str(pkg_info['__app__']))
|
self.setWindowTitle(str(pkg_info['__app__']))
|
||||||
self.screen_size = screen_size
|
|
||||||
self.i18n = i18n
|
self.i18n = i18n
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
self.setLayout(layout)
|
self.setLayout(layout)
|
||||||
@@ -108,7 +108,9 @@ class InfoDialog(QDialog):
|
|||||||
lower_container.layout().addWidget(self.bt_close)
|
lower_container.layout().addWidget(self.bt_close)
|
||||||
layout.addWidget(lower_container)
|
layout.addWidget(lower_container)
|
||||||
self.setMinimumWidth(int(self.gbox_info.sizeHint().width() * 1.2))
|
self.setMinimumWidth(int(self.gbox_info.sizeHint().width() * 1.2))
|
||||||
self.setMaximumHeight(int(screen_size.height() * 0.8))
|
|
||||||
|
screen_height = get_current_screen_geometry().height()
|
||||||
|
self.setMaximumHeight(int(screen_height * 0.8))
|
||||||
self.adjustSize()
|
self.adjustSize()
|
||||||
|
|
||||||
def _gen_show_button(self, idx: int, val):
|
def _gen_show_button(self, idx: int, val):
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ from bauh.api.abstract.controller import SoftwareManager, SoftwareAction
|
|||||||
from bauh.api.abstract.handler import TaskManager
|
from bauh.api.abstract.handler import TaskManager
|
||||||
from bauh.api import user
|
from bauh.api import user
|
||||||
from bauh.view.qt.components import new_spacer, QCustomToolbar
|
from bauh.view.qt.components import new_spacer, QCustomToolbar
|
||||||
from bauh.view.qt.qt_utils import centralize
|
from bauh.view.qt.qt_utils import centralize, get_current_screen_geometry
|
||||||
from bauh.view.qt.root import RootDialog
|
from bauh.view.qt.root import RootDialog
|
||||||
from bauh.view.qt.thread import AnimateProgress
|
from bauh.view.qt.thread import AnimateProgress
|
||||||
from bauh.view.util.translation import I18n
|
from bauh.view.util.translation import I18n
|
||||||
@@ -145,7 +145,7 @@ class PreparePanel(QWidget, TaskManager):
|
|||||||
signal_status = pyqtSignal(int)
|
signal_status = pyqtSignal(int)
|
||||||
signal_password_response = pyqtSignal(bool, str)
|
signal_password_response = pyqtSignal(bool, str)
|
||||||
|
|
||||||
def __init__(self, context: ApplicationContext, manager: SoftwareManager, screen_size: QSize,
|
def __init__(self, context: ApplicationContext, manager: SoftwareManager,
|
||||||
i18n: I18n, manage_window: QWidget, app_config: dict, force_suggestions: bool = False):
|
i18n: I18n, manage_window: QWidget, app_config: dict, force_suggestions: bool = False):
|
||||||
super(PreparePanel, self).__init__(flags=Qt.CustomizeWindowHint | Qt.WindowTitleHint)
|
super(PreparePanel, self).__init__(flags=Qt.CustomizeWindowHint | Qt.WindowTitleHint)
|
||||||
self.i18n = i18n
|
self.i18n = i18n
|
||||||
@@ -153,9 +153,7 @@ class PreparePanel(QWidget, TaskManager):
|
|||||||
self.app_config = app_config
|
self.app_config = app_config
|
||||||
self.manage_window = manage_window
|
self.manage_window = manage_window
|
||||||
self.setWindowTitle('{} ({})'.format(__app_name__, self.i18n['prepare_panel.title.start'].lower()))
|
self.setWindowTitle('{} ({})'.format(__app_name__, self.i18n['prepare_panel.title.start'].lower()))
|
||||||
self.setMinimumWidth(int(screen_size.width() * 0.5))
|
|
||||||
self.setMinimumHeight(int(screen_size.height() * 0.35))
|
|
||||||
self.setMaximumHeight(int(screen_size.height() * 0.95))
|
|
||||||
self.setLayout(QVBoxLayout())
|
self.setLayout(QVBoxLayout())
|
||||||
self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
|
self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
|
||||||
self.manager = manager
|
self.manager = manager
|
||||||
@@ -292,6 +290,10 @@ class PreparePanel(QWidget, TaskManager):
|
|||||||
super(PreparePanel, self).show()
|
super(PreparePanel, self).show()
|
||||||
self.prepare_thread.start()
|
self.prepare_thread.start()
|
||||||
centralize(self)
|
centralize(self)
|
||||||
|
screen_size = get_current_screen_geometry()
|
||||||
|
self.setMinimumWidth(int(screen_size.width() * 0.5))
|
||||||
|
self.setMinimumHeight(int(screen_size.height() * 0.35))
|
||||||
|
self.setMaximumHeight(int(screen_size.height() * 0.95))
|
||||||
|
|
||||||
def start(self, tasks: int):
|
def start(self, tasks: int):
|
||||||
self.started_at = time.time()
|
self.started_at = time.time()
|
||||||
|
|||||||
@@ -1,16 +1,18 @@
|
|||||||
from PyQt5.QtCore import Qt
|
from typing import Optional, Union
|
||||||
|
|
||||||
|
from PyQt5.QtCore import Qt, QRect, QPoint
|
||||||
from PyQt5.QtGui import QIcon, QPixmap
|
from PyQt5.QtGui import QIcon, QPixmap
|
||||||
from PyQt5.QtWidgets import QWidget, QApplication
|
from PyQt5.QtWidgets import QWidget, QApplication, QDesktopWidget
|
||||||
|
|
||||||
from bauh.view.util import resource
|
from bauh.view.util import resource
|
||||||
|
|
||||||
|
desktop: Optional[QDesktopWidget] = None
|
||||||
|
|
||||||
|
|
||||||
def centralize(widget: QWidget):
|
def centralize(widget: QWidget):
|
||||||
geo = widget.frameGeometry()
|
screen_geometry = get_current_screen_geometry()
|
||||||
screen = QApplication.desktop().screenNumber(QApplication.desktop().cursor().pos())
|
widget.frameGeometry().moveCenter(screen_geometry.center())
|
||||||
center_point = QApplication.desktop().screenGeometry(screen).center()
|
widget.move(widget.frameGeometry().topLeft())
|
||||||
geo.moveCenter(center_point)
|
|
||||||
widget.move(geo.topLeft())
|
|
||||||
|
|
||||||
|
|
||||||
def load_icon(path: str, width: int, height: int = None) -> QIcon:
|
def load_icon(path: str, width: int, height: int = None) -> QIcon:
|
||||||
@@ -27,3 +29,13 @@ def measure_based_on_width(percent: float) -> int:
|
|||||||
|
|
||||||
def measure_based_on_height(percent: float) -> int:
|
def measure_based_on_height(percent: float) -> int:
|
||||||
return round(percent * QApplication.primaryScreen().size().height())
|
return round(percent * QApplication.primaryScreen().size().height())
|
||||||
|
|
||||||
|
|
||||||
|
def get_current_screen_geometry(source_widget: Optional[Union[QWidget, QPoint]] = None) -> QRect:
|
||||||
|
global desktop
|
||||||
|
|
||||||
|
if not desktop:
|
||||||
|
desktop = QDesktopWidget()
|
||||||
|
|
||||||
|
current_screen_idx = desktop.screenNumber(source_widget if source_widget else desktop.cursor().pos())
|
||||||
|
return desktop.screen(current_screen_idx).geometry()
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ from bauh.view.core import timeshift
|
|||||||
from bauh.view.core.config import CoreConfigManager, BACKUP_REMOVE_METHODS, BACKUP_DEFAULT_REMOVE_METHOD
|
from bauh.view.core.config import CoreConfigManager, BACKUP_REMOVE_METHODS, BACKUP_DEFAULT_REMOVE_METHOD
|
||||||
from bauh.view.qt import commons
|
from bauh.view.qt import commons
|
||||||
from bauh.view.qt.commons import sort_packages
|
from bauh.view.qt.commons import sort_packages
|
||||||
|
from bauh.view.qt.qt_utils import get_current_screen_geometry
|
||||||
from bauh.view.qt.view_model import PackageView, PackageViewStatus
|
from bauh.view.qt.view_model import PackageView, PackageViewStatus
|
||||||
from bauh.view.util.translation import I18n
|
from bauh.view.util.translation import I18n
|
||||||
|
|
||||||
@@ -231,12 +232,12 @@ class UpgradeSelected(AsyncAction):
|
|||||||
SUMMARY_FILE = UPGRADE_LOGS_DIR + '/{}_summary.txt'
|
SUMMARY_FILE = UPGRADE_LOGS_DIR + '/{}_summary.txt'
|
||||||
|
|
||||||
def __init__(self, manager: SoftwareManager, internet_checker: InternetChecker, i18n: I18n,
|
def __init__(self, manager: SoftwareManager, internet_checker: InternetChecker, i18n: I18n,
|
||||||
screen_width: int, pkgs: List[PackageView] = None):
|
parent_widget: QWidget, pkgs: List[PackageView] = None):
|
||||||
super(UpgradeSelected, self).__init__(i18n=i18n)
|
super(UpgradeSelected, self).__init__(i18n=i18n)
|
||||||
self.pkgs = pkgs
|
self.pkgs = pkgs
|
||||||
self.manager = manager
|
self.manager = manager
|
||||||
self.internet_checker = internet_checker
|
self.internet_checker = internet_checker
|
||||||
self.screen_width = screen_width
|
self._parent_widget = parent_widget
|
||||||
|
|
||||||
def _req_as_option(self, req: UpgradeRequirement, tooltip: bool = True, custom_tooltip: str = None, required_size: bool = True, display_sizes: bool = True,
|
def _req_as_option(self, req: UpgradeRequirement, tooltip: bool = True, custom_tooltip: str = None, required_size: bool = True, display_sizes: bool = True,
|
||||||
positive_size_symbol: bool = False) -> InputOption:
|
positive_size_symbol: bool = False) -> InputOption:
|
||||||
@@ -495,9 +496,10 @@ class UpgradeSelected(AsyncAction):
|
|||||||
comps.insert(0, TextComponent(f'{disc_size_text} ({download_size_text})', size=14))
|
comps.insert(0, TextComponent(f'{disc_size_text} ({download_size_text})', size=14))
|
||||||
comps.insert(1, TextComponent(''))
|
comps.insert(1, TextComponent(''))
|
||||||
|
|
||||||
|
screen_width = get_current_screen_geometry(self._parent_widget).width()
|
||||||
if not self.request_confirmation(title=self.i18n['action.update.summary'].capitalize(), body='', components=comps,
|
if not self.request_confirmation(title=self.i18n['action.update.summary'].capitalize(), body='', components=comps,
|
||||||
confirmation_label=self.i18n['proceed'].capitalize(), deny_label=self.i18n['cancel'].capitalize(),
|
confirmation_label=self.i18n['proceed'].capitalize(), deny_label=self.i18n['cancel'].capitalize(),
|
||||||
confirmation_button=can_upgrade, min_width=int(0.45 * self.screen_width)):
|
confirmation_button=can_upgrade, min_width=int(0.45 * screen_width)):
|
||||||
self.notify_finished({'success': success, 'updated': updated, 'types': updated_types, 'id': None})
|
self.notify_finished({'success': success, 'updated': updated, 'types': updated_types, 'id': None})
|
||||||
self.pkgs = None
|
self.pkgs = None
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import time
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List, Type, Set, Tuple, Optional
|
from typing import List, Type, Set, Tuple, Optional
|
||||||
|
|
||||||
from PyQt5.QtCore import QEvent, Qt, pyqtSignal, QSize
|
from PyQt5.QtCore import QEvent, Qt, pyqtSignal, QRect
|
||||||
from PyQt5.QtGui import QIcon, QWindowStateChangeEvent, QCursor
|
from PyQt5.QtGui import QIcon, QWindowStateChangeEvent, QCursor, QMoveEvent
|
||||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QCheckBox, QHeaderView, QToolBar, \
|
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QCheckBox, QHeaderView, QToolBar, \
|
||||||
QLabel, QPlainTextEdit, QProgressBar, QPushButton, QComboBox, QApplication, QListView, QSizePolicy, \
|
QLabel, QPlainTextEdit, QProgressBar, QPushButton, QComboBox, QApplication, QListView, QSizePolicy, \
|
||||||
QMenu, QHBoxLayout
|
QMenu, QHBoxLayout
|
||||||
@@ -33,6 +33,7 @@ from bauh.view.qt.components import new_spacer, IconButton, QtComponentsManager,
|
|||||||
from bauh.view.qt.dialog import ConfirmationDialog
|
from bauh.view.qt.dialog import ConfirmationDialog
|
||||||
from bauh.view.qt.history import HistoryDialog
|
from bauh.view.qt.history import HistoryDialog
|
||||||
from bauh.view.qt.info import InfoDialog
|
from bauh.view.qt.info import InfoDialog
|
||||||
|
from bauh.view.qt.qt_utils import get_current_screen_geometry
|
||||||
from bauh.view.qt.root import RootDialog
|
from bauh.view.qt.root import RootDialog
|
||||||
from bauh.view.qt.screenshots import ScreenshotsDialog
|
from bauh.view.qt.screenshots import ScreenshotsDialog
|
||||||
from bauh.view.qt.settings import SettingsWindow
|
from bauh.view.qt.settings import SettingsWindow
|
||||||
@@ -95,7 +96,7 @@ class ManageWindow(QWidget):
|
|||||||
signal_table_update = pyqtSignal()
|
signal_table_update = pyqtSignal()
|
||||||
signal_stop_notifying = pyqtSignal()
|
signal_stop_notifying = pyqtSignal()
|
||||||
|
|
||||||
def __init__(self, i18n: I18n, icon_cache: MemoryCache, manager: SoftwareManager, screen_size: QSize, config: dict,
|
def __init__(self, i18n: I18n, icon_cache: MemoryCache, manager: SoftwareManager, config: dict,
|
||||||
context: ApplicationContext, http_client: HttpClient, logger: logging.Logger, icon: QIcon,
|
context: ApplicationContext, http_client: HttpClient, logger: logging.Logger, icon: QIcon,
|
||||||
force_suggestions: bool = False):
|
force_suggestions: bool = False):
|
||||||
super(ManageWindow, self).__init__()
|
super(ManageWindow, self).__init__()
|
||||||
@@ -111,7 +112,6 @@ class ManageWindow(QWidget):
|
|||||||
self.pkgs_installed = [] # cached installed packages
|
self.pkgs_installed = [] # cached installed packages
|
||||||
self.display_limit = config['ui']['table']['max_displayed']
|
self.display_limit = config['ui']['table']['max_displayed']
|
||||||
self.icon_cache = icon_cache
|
self.icon_cache = icon_cache
|
||||||
self.screen_size = screen_size
|
|
||||||
self.config = config
|
self.config = config
|
||||||
self.context = context
|
self.context = context
|
||||||
self.http_client = http_client
|
self.http_client = http_client
|
||||||
@@ -278,8 +278,7 @@ class ManageWindow(QWidget):
|
|||||||
self.table_container.layout().setContentsMargins(0, 0, 0, 0)
|
self.table_container.layout().setContentsMargins(0, 0, 0, 0)
|
||||||
|
|
||||||
self.table_apps = PackagesTable(self, self.icon_cache,
|
self.table_apps = PackagesTable(self, self.icon_cache,
|
||||||
download_icons=bool(self.config['download']['icons']),
|
download_icons=bool(self.config['download']['icons']))
|
||||||
screen_width=int(screen_size.width()))
|
|
||||||
self.table_apps.change_headers_policy()
|
self.table_apps.change_headers_policy()
|
||||||
self.table_container.layout().addWidget(self.table_apps)
|
self.table_container.layout().addWidget(self.table_apps)
|
||||||
|
|
||||||
@@ -332,7 +331,7 @@ class ManageWindow(QWidget):
|
|||||||
|
|
||||||
self.thread_update = self._bind_async_action(UpgradeSelected(manager=self.manager, i18n=self.i18n,
|
self.thread_update = self._bind_async_action(UpgradeSelected(manager=self.manager, i18n=self.i18n,
|
||||||
internet_checker=context.internet_checker,
|
internet_checker=context.internet_checker,
|
||||||
screen_width=screen_size.width()),
|
parent_widget=self),
|
||||||
finished_call=self._finish_upgrade_selected)
|
finished_call=self._finish_upgrade_selected)
|
||||||
self.thread_refresh = self._bind_async_action(RefreshApps(i18n, self.manager), finished_call=self._finish_refresh_packages, only_finished=True)
|
self.thread_refresh = self._bind_async_action(RefreshApps(i18n, self.manager), finished_call=self._finish_refresh_packages, only_finished=True)
|
||||||
self.thread_uninstall = self._bind_async_action(UninstallPackage(self.manager, self.icon_cache, self.i18n), finished_call=self._finish_uninstall)
|
self.thread_uninstall = self._bind_async_action(UninstallPackage(self.manager, self.icon_cache, self.i18n), finished_call=self._finish_uninstall)
|
||||||
@@ -432,8 +431,6 @@ class ManageWindow(QWidget):
|
|||||||
self.container_progress.add_space()
|
self.container_progress.add_space()
|
||||||
self.layout.addWidget(self.container_progress)
|
self.layout.addWidget(self.container_progress)
|
||||||
|
|
||||||
qt_utils.centralize(self)
|
|
||||||
|
|
||||||
self.filter_only_apps = True
|
self.filter_only_apps = True
|
||||||
self.type_filter = self.any_type_filter
|
self.type_filter = self.any_type_filter
|
||||||
self.category_filter = self.any_category_filter
|
self.category_filter = self.any_category_filter
|
||||||
@@ -456,9 +453,8 @@ class ManageWindow(QWidget):
|
|||||||
|
|
||||||
self.thread_load_installed = NotifyInstalledLoaded()
|
self.thread_load_installed = NotifyInstalledLoaded()
|
||||||
self.thread_load_installed.signal_loaded.connect(self._finish_loading_installed)
|
self.thread_load_installed.signal_loaded.connect(self._finish_loading_installed)
|
||||||
self.setMinimumHeight(int(screen_size.height() * 0.5))
|
|
||||||
self.setMinimumWidth(int(screen_size.width() * 0.5))
|
|
||||||
self._register_groups()
|
self._register_groups()
|
||||||
|
self._screen_geometry: Optional[QRect] = None
|
||||||
|
|
||||||
def _register_groups(self):
|
def _register_groups(self):
|
||||||
common_filters = (CHECK_APPS, CHECK_UPDATES, COMBO_CATEGORIES, COMBO_TYPES, INP_NAME)
|
common_filters = (CHECK_APPS, CHECK_UPDATES, COMBO_CATEGORIES, COMBO_TYPES, INP_NAME)
|
||||||
@@ -594,6 +590,8 @@ class ManageWindow(QWidget):
|
|||||||
self.thread_warnings.start()
|
self.thread_warnings.start()
|
||||||
|
|
||||||
qt_utils.centralize(self)
|
qt_utils.centralize(self)
|
||||||
|
self._screen_geometry = get_current_screen_geometry()
|
||||||
|
self._update_size_limits()
|
||||||
|
|
||||||
def verify_warnings(self):
|
def verify_warnings(self):
|
||||||
self.thread_warnings.start()
|
self.thread_warnings.start()
|
||||||
@@ -668,7 +666,8 @@ class ManageWindow(QWidget):
|
|||||||
if self.table_apps.isEnabled() and self.pkgs is not None and 0 <= idx < len(self.pkgs):
|
if self.table_apps.isEnabled() and self.pkgs is not None and 0 <= idx < len(self.pkgs):
|
||||||
pkg = self.pkgs[idx]
|
pkg = self.pkgs[idx]
|
||||||
pkg.status = PackageViewStatus.READY
|
pkg.status = PackageViewStatus.READY
|
||||||
self.table_apps.update_package(pkg)
|
screen_width = get_current_screen_geometry(self).width()
|
||||||
|
self.table_apps.update_package(pkg, screen_width=screen_width)
|
||||||
|
|
||||||
def _reload_categories(self):
|
def _reload_categories(self):
|
||||||
categories = set()
|
categories = set()
|
||||||
@@ -684,11 +683,33 @@ class ManageWindow(QWidget):
|
|||||||
if categories:
|
if categories:
|
||||||
self._update_categories(categories, keep_selected=True)
|
self._update_categories(categories, keep_selected=True)
|
||||||
|
|
||||||
|
def _update_size_limits(self):
|
||||||
|
self.setMinimumHeight(int(self._screen_geometry.height() * 0.5))
|
||||||
|
self.setMinimumWidth(int(self._screen_geometry.width() * 0.5))
|
||||||
|
self.setMaximumWidth(int(self._screen_geometry.width()))
|
||||||
|
|
||||||
def changeEvent(self, e: QEvent):
|
def changeEvent(self, e: QEvent):
|
||||||
if isinstance(e, QWindowStateChangeEvent):
|
if isinstance(e, QWindowStateChangeEvent):
|
||||||
self._maximized = self.isMaximized()
|
self._maximized = self.isMaximized()
|
||||||
self.table_apps.change_headers_policy(maximized=self._maximized)
|
self.table_apps.change_headers_policy(maximized=self._maximized)
|
||||||
|
|
||||||
|
if not self._maximized:
|
||||||
|
self._reorganize()
|
||||||
|
self.adjustSize()
|
||||||
|
|
||||||
|
def event(self, e: QEvent) -> bool:
|
||||||
|
res = super(ManageWindow, self).event(e)
|
||||||
|
|
||||||
|
if self.isVisible() and e.type() == 216: # drop event
|
||||||
|
current_geometry = get_current_screen_geometry()
|
||||||
|
if current_geometry != self._screen_geometry: # only if the display device has changed
|
||||||
|
self._screen_geometry = current_geometry
|
||||||
|
self._update_size_limits()
|
||||||
|
self._reorganize()
|
||||||
|
self.adjustSize()
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
def _handle_console(self, checked: bool):
|
def _handle_console(self, checked: bool):
|
||||||
if checked:
|
if checked:
|
||||||
self.textarea_details.show()
|
self.textarea_details.show()
|
||||||
@@ -777,6 +798,7 @@ class ManageWindow(QWidget):
|
|||||||
util.notify_user('{} ({}) {}'.format(src_pkg.model.name, src_pkg.model.get_type(), self.i18n['uninstalled']))
|
util.notify_user('{} ({}) {}'.format(src_pkg.model.name, src_pkg.model.get_type(), self.i18n['uninstalled']))
|
||||||
|
|
||||||
if res['removed']:
|
if res['removed']:
|
||||||
|
screen_width = get_current_screen_geometry(self).width()
|
||||||
for list_idx, pkg_list in enumerate((self.pkgs_available, self.pkgs, self.pkgs_installed)):
|
for list_idx, pkg_list in enumerate((self.pkgs_available, self.pkgs, self.pkgs_installed)):
|
||||||
if pkg_list:
|
if pkg_list:
|
||||||
removed_idxs = []
|
removed_idxs = []
|
||||||
@@ -793,7 +815,9 @@ class ManageWindow(QWidget):
|
|||||||
removed_idxs.append(pkgv_idx)
|
removed_idxs.append(pkgv_idx)
|
||||||
|
|
||||||
if self.search_performed and list_idx == 1: # only for displayed
|
if self.search_performed and list_idx == 1: # only for displayed
|
||||||
self.table_apps.update_package(pkgv, change_update_col=True)
|
self.table_apps.update_package(pkgv,
|
||||||
|
screen_width=screen_width,
|
||||||
|
change_update_col=True)
|
||||||
|
|
||||||
break # as the model has been found, stops the loop
|
break # as the model has been found, stops the loop
|
||||||
|
|
||||||
@@ -1283,8 +1307,7 @@ class ManageWindow(QWidget):
|
|||||||
|
|
||||||
if pkg_info:
|
if pkg_info:
|
||||||
if len(pkg_info) > 1:
|
if len(pkg_info) > 1:
|
||||||
dialog_info = InfoDialog(pkg_info=pkg_info, icon_cache=self.icon_cache,
|
dialog_info = InfoDialog(pkg_info=pkg_info, icon_cache=self.icon_cache, i18n=self.i18n)
|
||||||
i18n=self.i18n, screen_size=self.screen_size)
|
|
||||||
dialog_info.exec_()
|
dialog_info.exec_()
|
||||||
else:
|
else:
|
||||||
dialog.show_message(title=self.i18n['warning'].capitalize(),
|
dialog.show_message(title=self.i18n['warning'].capitalize(),
|
||||||
@@ -1459,10 +1482,11 @@ class ManageWindow(QWidget):
|
|||||||
self.pkgs_available.insert(new_idx, data[2])
|
self.pkgs_available.insert(new_idx, data[2])
|
||||||
|
|
||||||
# updating the respective table rows:
|
# updating the respective table rows:
|
||||||
|
screen_width = get_current_screen_geometry(self).width()
|
||||||
for displayed in self.pkgs:
|
for displayed in self.pkgs:
|
||||||
for model in models_updated:
|
for model in models_updated:
|
||||||
if displayed.model == model:
|
if displayed.model == model:
|
||||||
self.table_apps.update_package(displayed, change_update_col=True)
|
self.table_apps.update_package(displayed, screen_width=screen_width, change_update_col=True)
|
||||||
|
|
||||||
self.update_bt_upgrade()
|
self.update_bt_upgrade()
|
||||||
|
|
||||||
@@ -1562,7 +1586,8 @@ class ManageWindow(QWidget):
|
|||||||
self.settings_window.handle_display()
|
self.settings_window.handle_display()
|
||||||
else:
|
else:
|
||||||
self.settings_window = SettingsWindow(manager=self.manager, i18n=self.i18n, window=self)
|
self.settings_window = SettingsWindow(manager=self.manager, i18n=self.i18n, window=self)
|
||||||
self.settings_window.setMinimumWidth(int(self.screen_size.width() / 4))
|
screen_width = get_current_screen_geometry(self).width()
|
||||||
|
self.settings_window.setMinimumWidth(int(screen_width / 4))
|
||||||
self.settings_window.resize(self.size())
|
self.settings_window.resize(self.size())
|
||||||
self.settings_window.adjustSize()
|
self.settings_window.adjustSize()
|
||||||
qt_utils.centralize(self.settings_window)
|
qt_utils.centralize(self.settings_window)
|
||||||
@@ -1625,10 +1650,11 @@ class ManageWindow(QWidget):
|
|||||||
self._update_table_indexes()
|
self._update_table_indexes()
|
||||||
self.update_bt_upgrade()
|
self.update_bt_upgrade()
|
||||||
else:
|
else:
|
||||||
|
screen_width = get_current_screen_geometry(self).width()
|
||||||
for pkg in self.pkgs:
|
for pkg in self.pkgs:
|
||||||
if pkg == res['pkg']:
|
if pkg == res['pkg']:
|
||||||
pkg.update_model(res['pkg'].model)
|
pkg.update_model(res['pkg'].model)
|
||||||
self.table_apps.update_package(pkg, change_update_col=not any([self.search_performed, self.suggestions_requested]))
|
self.table_apps.update_package(pkg, screen_width=screen_width, change_update_col=not any([self.search_performed, self.suggestions_requested]))
|
||||||
self.update_bt_upgrade()
|
self.update_bt_upgrade()
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user