mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-07 02:24:16 +02:00
gem selector sketch
This commit is contained in:
@@ -7,8 +7,8 @@ from PyQt5.QtGui import QPixmap, QIcon, QCursor
|
||||
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
|
||||
from PyQt5.QtWidgets import QTableWidget, QTableView, QMenu, QAction, QTableWidgetItem, QToolButton, QWidget, \
|
||||
QHeaderView, QLabel, QHBoxLayout, QPushButton, QToolBar
|
||||
from bauh_api.abstract.cache import MemoryCache
|
||||
from bauh_api.abstract.model import PackageStatus
|
||||
from bauh.api.abstract.cache import MemoryCache
|
||||
from bauh.api.abstract.model import PackageStatus
|
||||
|
||||
from bauh.util import resource
|
||||
from bauh.util.html import strip_html
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
from PyQt5.QtCore import QEvent, Qt
|
||||
from PyQt5.QtGui import QIcon
|
||||
from PyQt5.QtWidgets import QRadioButton, QGroupBox, QCheckBox, QComboBox, QGridLayout, QWidget, \
|
||||
QLabel, QSizePolicy, QLineEdit
|
||||
from bauh_api.abstract.view import SingleSelectComponent, InputOption, MultipleSelectComponent, SelectViewType
|
||||
|
||||
from bauh import ROOT_DIR
|
||||
from bauh.api.abstract.view import SingleSelectComponent, InputOption, MultipleSelectComponent, SelectViewType
|
||||
from bauh.commons import resource
|
||||
|
||||
|
||||
class RadioButtonQt(QRadioButton):
|
||||
@@ -19,19 +22,30 @@ class RadioButtonQt(QRadioButton):
|
||||
|
||||
class CheckboxQt(QCheckBox):
|
||||
|
||||
def __init__(self, model: InputOption, model_parent: MultipleSelectComponent):
|
||||
def __init__(self, model: InputOption, model_parent: MultipleSelectComponent, callback):
|
||||
super(CheckboxQt, self).__init__()
|
||||
self.model = model
|
||||
self.model_parent = model_parent
|
||||
self.stateChanged.connect(self._set_checked)
|
||||
self.callback = callback
|
||||
self.setText(model.label)
|
||||
self.setToolTip(model.tooltip)
|
||||
|
||||
if model.icon_path:
|
||||
self.setIcon(QIcon(model.icon_path))
|
||||
|
||||
def _set_checked(self, state):
|
||||
if state == 2:
|
||||
checked = state == 2
|
||||
|
||||
if checked:
|
||||
self.model_parent.values.add(self.model)
|
||||
else:
|
||||
if self.model in self.model_parent.values:
|
||||
self.model_parent.values.remove(self.model)
|
||||
|
||||
if self.callback:
|
||||
self.callback(self.model, checked)
|
||||
|
||||
|
||||
class ComboBoxQt(QComboBox):
|
||||
|
||||
@@ -101,8 +115,8 @@ class ComboSelectQt(QGroupBox):
|
||||
|
||||
class MultipleSelectQt(QGroupBox):
|
||||
|
||||
def __init__(self, model: MultipleSelectComponent):
|
||||
super(MultipleSelectQt, self).__init__(model.label + ' :' if model.label else None)
|
||||
def __init__(self, model: MultipleSelectComponent, callback):
|
||||
super(MultipleSelectQt, self).__init__(model.label if model.label else None)
|
||||
self.setStyleSheet("QGroupBox { font-weight: bold }")
|
||||
self.model = model
|
||||
self._layout = QGridLayout()
|
||||
@@ -110,9 +124,7 @@ class MultipleSelectQt(QGroupBox):
|
||||
|
||||
line, col = 0, 0
|
||||
for op in model.options:
|
||||
comp = CheckboxQt(op, model)
|
||||
comp.setText(op.label)
|
||||
comp.setToolTip(op.tooltip)
|
||||
comp = CheckboxQt(op, model, callback)
|
||||
|
||||
if model.values and op in model.values:
|
||||
self.value = comp
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from typing import List
|
||||
|
||||
from PyQt5.QtWidgets import QMessageBox, QVBoxLayout, QLabel, QWidget
|
||||
from bauh_api.abstract.view import ViewComponent, SingleSelectComponent, MultipleSelectComponent
|
||||
from bauh.api.abstract.view import ViewComponent, SingleSelectComponent, MultipleSelectComponent
|
||||
|
||||
from bauh.view.qt.components import MultipleSelectQt, new_single_select
|
||||
|
||||
@@ -29,7 +29,7 @@ class ConfirmationDialog(QMessageBox):
|
||||
if isinstance(comp, SingleSelectComponent):
|
||||
inst = new_single_select(comp)
|
||||
elif isinstance(comp, MultipleSelectComponent):
|
||||
inst = MultipleSelectQt(comp)
|
||||
inst = MultipleSelectQt(comp, None)
|
||||
else:
|
||||
raise Exception("Cannot render instances of " + comp.__class__.__name__)
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ from typing import List
|
||||
|
||||
from PyQt5.QtGui import QIcon
|
||||
from PyQt5.QtWidgets import QMessageBox, QLabel, QWidget, QHBoxLayout
|
||||
from bauh_api.abstract.view import MessageType
|
||||
from bauh.api.abstract.view import MessageType
|
||||
|
||||
from bauh.util import resource
|
||||
|
||||
|
||||
69
bauh/view/qt/gem_selector.py
Normal file
69
bauh/view/qt/gem_selector.py
Normal file
@@ -0,0 +1,69 @@
|
||||
import subprocess
|
||||
import sys
|
||||
from typing import List
|
||||
|
||||
from PyQt5.QtCore import Qt, QCoreApplication
|
||||
from PyQt5.QtGui import QIcon
|
||||
from PyQt5.QtWidgets import QWidget, QLabel, QGridLayout, QPushButton
|
||||
|
||||
from bauh import ROOT_DIR
|
||||
from bauh.api.abstract.controller import SoftwareManager
|
||||
from bauh.api.abstract.view import MultipleSelectComponent, InputOption
|
||||
from bauh.commons import resource
|
||||
from bauh.core.config import Configuration, save
|
||||
from bauh.view.qt.components import MultipleSelectQt, CheckboxQt, new_spacer
|
||||
|
||||
|
||||
class GemSelectorPanel(QWidget):
|
||||
|
||||
def __init__(self, managers: List[SoftwareManager], i18n: dict, boot: bool):
|
||||
super(GemSelectorPanel, self).__init__()
|
||||
self.managers = managers
|
||||
self.setLayout(QGridLayout())
|
||||
self.setWindowIcon(QIcon(resource.get_path('img/logo.svg', ROOT_DIR)))
|
||||
self.setWindowTitle('Welcome' if boot else 'Supported types')
|
||||
self.resize(400, 400)
|
||||
|
||||
self.label_question = QLabel('What types of applications do you want to find here ?')
|
||||
self.label_question.setStyleSheet('QLabel { font-weight: bold}')
|
||||
self.layout().addWidget(self.label_question, 0, 1, Qt.AlignHCenter)
|
||||
|
||||
self.bt_proceed = QPushButton('Proceed')
|
||||
self.bt_proceed.setStyleSheet('QPushButton { background: green; color: white; font-weight: bold}')
|
||||
self.bt_proceed.setEnabled(True)
|
||||
self.bt_proceed.clicked.connect(self.save)
|
||||
|
||||
self.bt_exit = QPushButton('Exit')
|
||||
self.bt_exit.setStyleSheet('QPushButton { background: red; color: white; font-weight: bold}')
|
||||
self.bt_exit.clicked.connect(lambda: QCoreApplication.exit())
|
||||
|
||||
gem_options = []
|
||||
|
||||
for m in managers:
|
||||
modname = m.__module__.split('.')[-2]
|
||||
gem_options.append(InputOption(label=i18n.get('gem.{}.label'.format(modname), modname.capitalize()),
|
||||
value=modname,
|
||||
icon_path='{r}/gems/{n}/resources/img/{n}.png'.format(r=ROOT_DIR, n=modname)))
|
||||
|
||||
self.gem_select_model = MultipleSelectComponent(label='', options=gem_options, default_options=set(gem_options), max_per_line=3)
|
||||
|
||||
self.gem_select = MultipleSelectQt(self.gem_select_model, self.check_state)
|
||||
self.layout().addWidget(self.gem_select, 1, 1)
|
||||
|
||||
self.layout().addWidget(new_spacer(), 2, 1)
|
||||
|
||||
self.layout().addWidget(self.bt_proceed, 3, 1, Qt.AlignRight)
|
||||
self.layout().addWidget(self.bt_exit, 3, 1, Qt.AlignLeft)
|
||||
|
||||
self.adjustSize()
|
||||
self.setFixedSize(self.size())
|
||||
|
||||
def check_state(self, model: CheckboxQt, checked: bool):
|
||||
self.bt_proceed.setEnabled(bool(self.gem_select_model.values))
|
||||
|
||||
def save(self):
|
||||
config = Configuration(gems=[o.value for o in self.gem_select_model.values])
|
||||
save(config)
|
||||
subprocess.Popen([sys.executable, *sys.argv])
|
||||
self.close()
|
||||
|
||||
@@ -4,8 +4,8 @@ from functools import reduce
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtGui import QColor
|
||||
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QTableWidget, QTableWidgetItem, QHeaderView
|
||||
from bauh_api.abstract.cache import MemoryCache
|
||||
from bauh_api.abstract.model import PackageHistory
|
||||
from bauh.api.abstract.cache import MemoryCache
|
||||
from bauh.api.abstract.model import PackageHistory
|
||||
|
||||
|
||||
class HistoryDialog(QDialog):
|
||||
|
||||
@@ -2,7 +2,7 @@ from PyQt5.QtCore import QSize
|
||||
from PyQt5.QtGui import QIcon
|
||||
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QGroupBox, \
|
||||
QLineEdit, QLabel, QGridLayout, QPushButton, QPlainTextEdit, QToolBar
|
||||
from bauh_api.abstract.cache import MemoryCache
|
||||
from bauh.api.abstract.cache import MemoryCache
|
||||
|
||||
from bauh.util.html import strip_html
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import os
|
||||
import subprocess
|
||||
|
||||
from PyQt5.QtWidgets import QInputDialog, QLineEdit
|
||||
from bauh_api.abstract.view import MessageType
|
||||
from bauh.api.abstract.view import MessageType
|
||||
|
||||
from bauh.view.qt.dialog import show_message
|
||||
|
||||
|
||||
@@ -5,10 +5,10 @@ from typing import List
|
||||
from PyQt5.QtCore import QThread, pyqtSignal, QCoreApplication, Qt
|
||||
from PyQt5.QtGui import QIcon
|
||||
from PyQt5.QtWidgets import QSystemTrayIcon, QMenu
|
||||
from bauh_api.abstract.model import PackageUpdate
|
||||
from bauh.api.abstract.model import PackageUpdate
|
||||
|
||||
from bauh import __app_name__
|
||||
from bauh_api.abstract.controller import SoftwareManager
|
||||
from bauh.api.abstract.controller import SoftwareManager
|
||||
from bauh.util import util, resource
|
||||
from bauh.view.qt.about import AboutDialog
|
||||
from bauh.view.qt.window import ManageWindow
|
||||
|
||||
@@ -5,12 +5,12 @@ from typing import List, Type, Set
|
||||
|
||||
import requests
|
||||
from PyQt5.QtCore import QThread, pyqtSignal
|
||||
from bauh_api.abstract.cache import MemoryCache
|
||||
from bauh_api.abstract.controller import SoftwareManager
|
||||
from bauh_api.abstract.handler import ProcessWatcher
|
||||
from bauh_api.abstract.model import PackageStatus, SoftwarePackage, PackageAction
|
||||
from bauh_api.abstract.view import InputViewComponent, MessageType
|
||||
from bauh_api.exception import NoInternetException
|
||||
from bauh.api.abstract.cache import MemoryCache
|
||||
from bauh.api.abstract.controller import SoftwareManager
|
||||
from bauh.api.abstract.handler import ProcessWatcher
|
||||
from bauh.api.abstract.model import PackageStatus, SoftwarePackage, PackageAction
|
||||
from bauh.api.abstract.view import InputViewComponent, MessageType
|
||||
from bauh.api.exception import NoInternetException
|
||||
|
||||
from bauh.view.qt import commons
|
||||
from bauh.view.qt.view_model import PackageView
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from enum import Enum
|
||||
|
||||
from bauh_api.abstract.model import SoftwarePackage
|
||||
from bauh.api.abstract.model import SoftwarePackage
|
||||
|
||||
|
||||
class PackageViewStatus(Enum):
|
||||
|
||||
@@ -6,10 +6,10 @@ from PyQt5.QtCore import QEvent, Qt, QSize, pyqtSignal
|
||||
from PyQt5.QtGui import QIcon, QWindowStateChangeEvent, QPixmap
|
||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QApplication, QCheckBox, QHeaderView, QToolButton, QToolBar, \
|
||||
QLabel, QPlainTextEdit, QLineEdit, QProgressBar, QPushButton, QComboBox
|
||||
from bauh_api.abstract.cache import MemoryCache
|
||||
from bauh_api.abstract.controller import SoftwareManager
|
||||
from bauh_api.abstract.model import SoftwarePackage, PackageAction
|
||||
from bauh_api.abstract.view import MessageType
|
||||
from bauh.api.abstract.cache import MemoryCache
|
||||
from bauh.api.abstract.controller import SoftwareManager
|
||||
from bauh.api.abstract.model import SoftwarePackage, PackageAction
|
||||
from bauh.api.abstract.view import MessageType
|
||||
|
||||
from bauh.util import util, resource
|
||||
from bauh.view.qt import dialog, commons
|
||||
|
||||
Reference in New Issue
Block a user