mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-06 22:54:16 +02:00
[ui][settings] available as a tray action
This commit is contained in:
@@ -4,12 +4,14 @@ All notable changes to this project will be documented in this file.
|
|||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
|
|
||||||
## [0.8.3]
|
## [0.8.3] - 2020
|
||||||
### Improvements
|
### Improvements
|
||||||
- New update lifecycle:
|
- New update lifecycle:
|
||||||
- now every package manager must provide the best upgrade order for all the selected packages ( can be disabled through the settings file **~/.config/bauh/config.yml** or the UI )
|
- now every package manager must provide the best upgrade order for all the selected packages ( can be disabled through the settings file **~/.config/bauh/config.yml** or the UI )
|
||||||
- AUR
|
- AUR
|
||||||
- allowing the user to bypass checksum errors when installing / upgrading / downgrading packages
|
- allowing the user to bypass checksum errors when installing / upgrading / downgrading packages
|
||||||
|
- UI:
|
||||||
|
- **Settings** available as a tray action as well
|
||||||
|
|
||||||
## [0.8.2] - 2020-01-31
|
## [0.8.2] - 2020-01-31
|
||||||
### Features
|
### Features
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ def main():
|
|||||||
manager.prepare()
|
manager.prepare()
|
||||||
|
|
||||||
app = QApplication(sys.argv)
|
app = QApplication(sys.argv)
|
||||||
|
app.setQuitOnLastWindowClosed(False)
|
||||||
app.setApplicationName(__app_name__)
|
app.setApplicationName(__app_name__)
|
||||||
app.setApplicationVersion(__version__)
|
app.setApplicationVersion(__version__)
|
||||||
app_icon = util.get_default_icon()[1]
|
app_icon = util.get_default_icon()[1]
|
||||||
@@ -101,6 +102,7 @@ def main():
|
|||||||
tray_icon = TrayIcon(i18n=i18n,
|
tray_icon = TrayIcon(i18n=i18n,
|
||||||
manager=manager,
|
manager=manager,
|
||||||
manage_window=manage_window,
|
manage_window=manage_window,
|
||||||
|
screen_size=app.primaryScreen().size(),
|
||||||
config=local_config)
|
config=local_config)
|
||||||
manage_window.set_tray_icon(tray_icon)
|
manage_window.set_tray_icon(tray_icon)
|
||||||
tray_icon.show()
|
tray_icon.show()
|
||||||
|
|||||||
@@ -409,16 +409,14 @@ class GenericSoftwareManager(SoftwareManager):
|
|||||||
working_managers=self.working_managers,
|
working_managers=self.working_managers,
|
||||||
logger=self.logger,
|
logger=self.logger,
|
||||||
i18n=self.i18n)
|
i18n=self.i18n)
|
||||||
|
else:
|
||||||
|
self.settings_manager.managers = self.managers
|
||||||
|
self.settings_manager.working_managers = self.working_managers
|
||||||
|
|
||||||
return self.settings_manager.get_settings(screen_width=screen_width, screen_height=screen_height)
|
return self.settings_manager.get_settings(screen_width=screen_width, screen_height=screen_height)
|
||||||
|
|
||||||
def save_settings(self, component: TabGroupComponent) -> Tuple[bool, List[str]]:
|
def save_settings(self, component: TabGroupComponent) -> Tuple[bool, List[str]]:
|
||||||
res = self.settings_manager.save_settings(component)
|
return self.settings_manager.save_settings(component)
|
||||||
|
|
||||||
if res[0]:
|
|
||||||
self.settings_manager = None
|
|
||||||
|
|
||||||
return res
|
|
||||||
|
|
||||||
def sort_update_order(self, pkgs: List[SoftwarePackage]) -> List[SoftwarePackage]:
|
def sort_update_order(self, pkgs: List[SoftwarePackage]) -> List[SoftwarePackage]:
|
||||||
by_manager = {}
|
by_manager = {}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
|
import gc
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
|
||||||
from PyQt5.QtCore import QSize
|
from PyQt5 import sip
|
||||||
|
from PyQt5.QtCore import QSize, Qt
|
||||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QToolBar, QSizePolicy, QPushButton
|
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QToolBar, QSizePolicy, QPushButton
|
||||||
|
|
||||||
from bauh.api.abstract.controller import SoftwareManager
|
from bauh.api.abstract.controller import SoftwareManager
|
||||||
@@ -14,7 +16,7 @@ from bauh.view.util.translation import I18n
|
|||||||
|
|
||||||
class SettingsWindow(QWidget):
|
class SettingsWindow(QWidget):
|
||||||
|
|
||||||
def __init__(self, manager: SoftwareManager, i18n: I18n, screen_size: QSize, tray: bool, window: QWidget, parent: QWidget = None):
|
def __init__(self, manager: SoftwareManager, i18n: I18n, screen_size: QSize, tray, window: QWidget, parent: QWidget = None):
|
||||||
super(SettingsWindow, self).__init__(parent=parent)
|
super(SettingsWindow, self).__init__(parent=parent)
|
||||||
self.setWindowTitle(i18n['settings'].capitalize())
|
self.setWindowTitle(i18n['settings'].capitalize())
|
||||||
self.setLayout(QVBoxLayout())
|
self.setLayout(QVBoxLayout())
|
||||||
@@ -48,6 +50,25 @@ class SettingsWindow(QWidget):
|
|||||||
|
|
||||||
self.layout().addWidget(action_bar)
|
self.layout().addWidget(action_bar)
|
||||||
|
|
||||||
|
def closeEvent(self, event):
|
||||||
|
if self.window and self.window.settings_window == self:
|
||||||
|
sip.delete(self.window.settings_window)
|
||||||
|
self.window.settings_window = None
|
||||||
|
elif self.tray and self.tray.settings_window == self:
|
||||||
|
sip.delete(self.tray.settings_window)
|
||||||
|
self.tray.settings_window = None
|
||||||
|
|
||||||
|
gc.collect()
|
||||||
|
event.accept()
|
||||||
|
|
||||||
|
def handle_display(self):
|
||||||
|
if self.isMinimized():
|
||||||
|
self.setWindowState(Qt.WindowNoState)
|
||||||
|
elif self.isHidden():
|
||||||
|
self.show()
|
||||||
|
else:
|
||||||
|
self.setWindowState(self.windowState() and Qt.WindowMinimized or Qt.WindowActive)
|
||||||
|
|
||||||
def _save_settings(self):
|
def _save_settings(self):
|
||||||
success, warnings = self.manager.save_settings(self.settings_model)
|
success, warnings = self.manager.save_settings(self.settings_model)
|
||||||
|
|
||||||
@@ -58,15 +79,17 @@ class SettingsWindow(QWidget):
|
|||||||
body="<p>{}</p><p>{}</p>".format(self.i18n['settings.changed.success.warning'],
|
body="<p>{}</p><p>{}</p>".format(self.i18n['settings.changed.success.warning'],
|
||||||
self.i18n['settings.changed.success.reboot']),
|
self.i18n['settings.changed.success.reboot']),
|
||||||
i18n=self.i18n):
|
i18n=self.i18n):
|
||||||
util.restart_app(self.tray)
|
util.restart_app(self.window and self.window.isVisible())
|
||||||
else:
|
else:
|
||||||
if isinstance(self.manager, GenericSoftwareManager):
|
if isinstance(self.manager, GenericSoftwareManager):
|
||||||
self.manager.reset_cache()
|
self.manager.reset_cache()
|
||||||
|
|
||||||
self.manager.prepare()
|
self.manager.prepare()
|
||||||
self.window.verify_warnings()
|
|
||||||
self.window.types_changed = True
|
if self.window and self.window.isVisible():
|
||||||
self.window.refresh_apps()
|
self.window.verify_warnings()
|
||||||
|
self.window.types_changed = True
|
||||||
|
self.window.refresh_apps()
|
||||||
self.close()
|
self.close()
|
||||||
else:
|
else:
|
||||||
msg = StringIO()
|
msg = StringIO()
|
||||||
|
|||||||
@@ -1,20 +1,21 @@
|
|||||||
import os
|
|
||||||
import time
|
import time
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from threading import Lock, Thread
|
from threading import Lock, Thread
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from PyQt5.QtCore import QThread, pyqtSignal, QCoreApplication, Qt
|
from PyQt5.QtCore import QThread, pyqtSignal, QCoreApplication, Qt, QSize
|
||||||
from PyQt5.QtGui import QIcon
|
from PyQt5.QtGui import QIcon
|
||||||
from PyQt5.QtWidgets import QSystemTrayIcon, QMenu
|
from PyQt5.QtWidgets import QSystemTrayIcon, QMenu, QWidget, QSizePolicy
|
||||||
|
|
||||||
from bauh import __app_name__
|
from bauh import __app_name__
|
||||||
from bauh.api.abstract.controller import SoftwareManager
|
from bauh.api.abstract.controller import SoftwareManager
|
||||||
from bauh.api.abstract.model import PackageUpdate
|
from bauh.api.abstract.model import PackageUpdate
|
||||||
from bauh.view.qt.view_utils import load_resource_icon
|
from bauh.view.qt import qt_utils
|
||||||
from bauh.view.util import util, resource
|
|
||||||
from bauh.view.qt.about import AboutDialog
|
from bauh.view.qt.about import AboutDialog
|
||||||
|
from bauh.view.qt.settings import SettingsWindow
|
||||||
|
from bauh.view.qt.view_utils import load_resource_icon
|
||||||
from bauh.view.qt.window import ManageWindow
|
from bauh.view.qt.window import ManageWindow
|
||||||
|
from bauh.view.util import util
|
||||||
from bauh.view.util.translation import I18n
|
from bauh.view.util.translation import I18n
|
||||||
|
|
||||||
|
|
||||||
@@ -37,10 +38,11 @@ class UpdateCheck(QThread):
|
|||||||
|
|
||||||
class TrayIcon(QSystemTrayIcon):
|
class TrayIcon(QSystemTrayIcon):
|
||||||
|
|
||||||
def __init__(self, i18n: I18n, manager: SoftwareManager, manage_window: ManageWindow, config: dict):
|
def __init__(self, i18n: I18n, manager: SoftwareManager, manage_window: ManageWindow, config: dict, screen_size: QSize):
|
||||||
super(TrayIcon, self).__init__()
|
super(TrayIcon, self).__init__()
|
||||||
self.i18n = i18n
|
self.i18n = i18n
|
||||||
self.manager = manager
|
self.manager = manager
|
||||||
|
self.screen_size = screen_size
|
||||||
|
|
||||||
if config['ui']['tray']['default_icon']:
|
if config['ui']['tray']['default_icon']:
|
||||||
self.icon_default = QIcon(config['ui']['tray']['default_icon'])
|
self.icon_default = QIcon(config['ui']['tray']['default_icon'])
|
||||||
@@ -65,6 +67,9 @@ class TrayIcon(QSystemTrayIcon):
|
|||||||
self.action_manage = self.menu.addAction(self.i18n['tray.action.manage'])
|
self.action_manage = self.menu.addAction(self.i18n['tray.action.manage'])
|
||||||
self.action_manage.triggered.connect(self.show_manage_window)
|
self.action_manage.triggered.connect(self.show_manage_window)
|
||||||
|
|
||||||
|
self.action_settings = self.menu.addAction(self.i18n['settings'].capitalize())
|
||||||
|
self.action_settings.triggered.connect(self.show_settings_window)
|
||||||
|
|
||||||
self.action_about = self.menu.addAction(self.i18n['tray.action.about'])
|
self.action_about = self.menu.addAction(self.i18n['tray.action.about'])
|
||||||
self.action_about.triggered.connect(self.show_about)
|
self.action_about.triggered.connect(self.show_about)
|
||||||
|
|
||||||
@@ -75,6 +80,8 @@ class TrayIcon(QSystemTrayIcon):
|
|||||||
|
|
||||||
self.manage_window = None
|
self.manage_window = None
|
||||||
self.dialog_about = None
|
self.dialog_about = None
|
||||||
|
self.settings_window = None
|
||||||
|
|
||||||
self.check_thread = UpdateCheck(check_interval=int(config['updates']['check_interval']), manager=self.manager)
|
self.check_thread = UpdateCheck(check_interval=int(config['updates']['check_interval']), manager=self.manager)
|
||||||
self.check_thread.signal.connect(self.notify_updates)
|
self.check_thread.signal.connect(self.notify_updates)
|
||||||
self.check_thread.start()
|
self.check_thread.start()
|
||||||
@@ -154,8 +161,21 @@ class TrayIcon(QSystemTrayIcon):
|
|||||||
self.manage_window.refresh_apps()
|
self.manage_window.refresh_apps()
|
||||||
self.manage_window.show()
|
self.manage_window.show()
|
||||||
|
|
||||||
def show_about(self):
|
def show_settings_window(self):
|
||||||
|
if self.settings_window:
|
||||||
|
self.settings_window.handle_display()
|
||||||
|
else:
|
||||||
|
self.settings_window = SettingsWindow(manager=self.manager,
|
||||||
|
i18n=self.i18n,
|
||||||
|
screen_size=self.screen_size,
|
||||||
|
tray=self,
|
||||||
|
window=self.manage_window)
|
||||||
|
self.settings_window.setMinimumWidth(int(self.screen_size.width() / 4))
|
||||||
|
self.settings_window.adjustSize()
|
||||||
|
qt_utils.centralize(self.settings_window)
|
||||||
|
self.settings_window.show()
|
||||||
|
|
||||||
|
def show_about(self):
|
||||||
if self.dialog_about is None:
|
if self.dialog_about is None:
|
||||||
self.dialog_about = AboutDialog(self.i18n)
|
self.dialog_about = AboutDialog(self.i18n)
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ from bauh.view.qt.thread import UpdateSelectedApps, RefreshApps, UninstallApp, D
|
|||||||
GetAppHistory, SearchPackages, InstallPackage, AnimateProgress, VerifyModels, FindSuggestions, ListWarnings, \
|
GetAppHistory, SearchPackages, InstallPackage, AnimateProgress, VerifyModels, FindSuggestions, ListWarnings, \
|
||||||
AsyncAction, LaunchApp, ApplyFilters, CustomAction, GetScreenshots
|
AsyncAction, LaunchApp, ApplyFilters, CustomAction, GetScreenshots
|
||||||
from bauh.view.qt.view_model import PackageView
|
from bauh.view.qt.view_model import PackageView
|
||||||
from bauh.view.qt.view_utils import load_icon
|
|
||||||
from bauh.view.util import util, resource
|
from bauh.view.util import util, resource
|
||||||
from bauh.view.util.translation import I18n
|
from bauh.view.util.translation import I18n
|
||||||
|
|
||||||
@@ -316,7 +315,7 @@ class ManageWindow(QWidget):
|
|||||||
self.toolbar_bottom.addWidget(new_spacer())
|
self.toolbar_bottom.addWidget(new_spacer())
|
||||||
|
|
||||||
bt_settings = IconButton(QIcon(resource.get_path('img/app_settings.svg')),
|
bt_settings = IconButton(QIcon(resource.get_path('img/app_settings.svg')),
|
||||||
action=self._show_settings,
|
action=self.show_settings,
|
||||||
background='#12ABAB',
|
background='#12ABAB',
|
||||||
i18n=self.i18n,
|
i18n=self.i18n,
|
||||||
tooltip=self.i18n['manage_window.bt_settings.tooltip'])
|
tooltip=self.i18n['manage_window.bt_settings.tooltip'])
|
||||||
@@ -501,7 +500,6 @@ class ManageWindow(QWidget):
|
|||||||
self.table_apps.change_headers_policy(policy)
|
self.table_apps.change_headers_policy(policy)
|
||||||
|
|
||||||
def closeEvent(self, event):
|
def closeEvent(self, event):
|
||||||
|
|
||||||
if self.tray_icon:
|
if self.tray_icon:
|
||||||
event.ignore()
|
event.ignore()
|
||||||
self.hide()
|
self.hide()
|
||||||
@@ -1169,10 +1167,13 @@ class ManageWindow(QWidget):
|
|||||||
else:
|
else:
|
||||||
self.checkbox_console.setChecked(True)
|
self.checkbox_console.setChecked(True)
|
||||||
|
|
||||||
def _show_settings(self):
|
def show_settings(self):
|
||||||
self.settings_window = SettingsWindow(self.manager, self.i18n, self.screen_size, bool(self.tray_icon), self)
|
if self.settings_window:
|
||||||
self.settings_window.setMinimumWidth(int(self.screen_size.width() / 4))
|
self.settings_window.handle_display()
|
||||||
self.settings_window.resize(self.size())
|
else:
|
||||||
self.settings_window.adjustSize()
|
self.settings_window = SettingsWindow(self.manager, self.i18n, self.screen_size, self.tray_icon, self)
|
||||||
qt_utils.centralize(self.settings_window)
|
self.settings_window.setMinimumWidth(int(self.screen_size.width() / 4))
|
||||||
self.settings_window.show()
|
self.settings_window.resize(self.size())
|
||||||
|
self.settings_window.adjustSize()
|
||||||
|
qt_utils.centralize(self.settings_window)
|
||||||
|
self.settings_window.show()
|
||||||
|
|||||||
Reference in New Issue
Block a user