dark theme yay (#3)
* add basic dark theme implementation and change the layer buttons to actual pushbuttons * change default theme * add theme selection menu and persistent theme storage * add system theme option * remove redundand functions * add suggestionsmain
parent
7540ef6af9
commit
0cd150afb7
|
|
@ -1,7 +1,8 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
from PyQt5.QtCore import pyqtSignal, Qt
|
||||
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QLabel, QVBoxLayout
|
||||
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QLabel, QVBoxLayout, QPushButton, QApplication
|
||||
from PyQt5.QtGui import QPalette
|
||||
|
||||
from clickable_label import ClickableLabel
|
||||
from keyboard_widget import KeyboardWidget, EncoderWidget
|
||||
|
|
@ -36,7 +37,7 @@ class KeyboardContainer(QWidget):
|
|||
layout.setAlignment(self.container, Qt.AlignHCenter)
|
||||
self.setLayout(layout)
|
||||
|
||||
self.layer_labels = []
|
||||
self.layer_buttons = []
|
||||
self.keyboard = None
|
||||
self.current_layer = 0
|
||||
|
||||
|
|
@ -46,18 +47,19 @@ class KeyboardContainer(QWidget):
|
|||
|
||||
def rebuild_layers(self):
|
||||
# delete old layer labels
|
||||
for label in self.layer_labels:
|
||||
for label in self.layer_buttons:
|
||||
label.hide()
|
||||
label.deleteLater()
|
||||
self.layer_labels = []
|
||||
self.layer_buttons = []
|
||||
|
||||
# create new layer labels
|
||||
for x in range(self.keyboard.layers):
|
||||
label = ClickableLabel(str(x))
|
||||
label.setAlignment(Qt.AlignCenter)
|
||||
label.clicked.connect(lambda idx=x: self.switch_layer(idx))
|
||||
self.layout_layers.addWidget(label)
|
||||
self.layer_labels.append(label)
|
||||
btn = QPushButton(str(x))
|
||||
btn.setFixedSize(25, 25)
|
||||
btn.setCheckable(True)
|
||||
btn.clicked.connect(lambda state, idx=x: self.switch_layer(idx))
|
||||
self.layout_layers.addWidget(btn)
|
||||
self.layer_buttons.append(btn)
|
||||
|
||||
def rebuild(self, keyboard):
|
||||
self.keyboard = keyboard
|
||||
|
|
@ -86,9 +88,11 @@ class KeyboardContainer(QWidget):
|
|||
|
||||
self.container.update_layout()
|
||||
|
||||
for label in self.layer_labels:
|
||||
label.setStyleSheet(LAYER_BTN_STYLE)
|
||||
self.layer_labels[self.current_layer].setStyleSheet(ACTIVE_LAYER_BTN_STYLE)
|
||||
for btn in self.layer_buttons:
|
||||
btn.setEnabled(True)
|
||||
btn.setChecked(False)
|
||||
self.layer_buttons[self.current_layer].setEnabled(False)
|
||||
self.layer_buttons[self.current_layer].setChecked(True)
|
||||
|
||||
for widget in self.container.widgets:
|
||||
if widget.desc.row is not None:
|
||||
|
|
@ -107,7 +111,7 @@ class KeyboardContainer(QWidget):
|
|||
widget.setMaskText(mask_text)
|
||||
widget.setToolTip(tooltip)
|
||||
if self.code_is_overriden(code):
|
||||
widget.setColor(Qt.blue)
|
||||
widget.setColor(QApplication.palette().color(QPalette.Link))
|
||||
else:
|
||||
widget.setColor(None)
|
||||
self.container.update()
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
from collections import defaultdict
|
||||
|
||||
from PyQt5.QtGui import QPainter, QColor, QPainterPath, QTransform, QBrush, QPolygonF
|
||||
from PyQt5.QtWidgets import QWidget, QToolTip
|
||||
from PyQt5.QtGui import QPainter, QColor, QPainterPath, QTransform, QBrush, QPolygonF, QPalette
|
||||
from PyQt5.QtWidgets import QWidget, QToolTip, QApplication
|
||||
from PyQt5.QtCore import Qt, QSize, QRect, QPointF, pyqtSignal, QEvent, QRectF
|
||||
|
||||
from constants import KEY_WIDTH, KEY_SPACING, KEY_HEIGHT, KEYBOARD_WIDGET_PADDING, KEYBOARD_WIDGET_MASK_PADDING
|
||||
|
|
@ -226,20 +226,20 @@ class KeyboardWidget(QWidget):
|
|||
|
||||
# for regular keycaps
|
||||
regular_pen = qp.pen()
|
||||
regular_pen.setColor(QColor("black"))
|
||||
regular_pen.setColor(QApplication.palette().color(QPalette.ButtonText))
|
||||
qp.setPen(regular_pen)
|
||||
|
||||
regular_brush = QBrush()
|
||||
regular_brush.setColor(QColor("white"))
|
||||
regular_brush.setColor(QApplication.palette().color(QPalette.Button))
|
||||
regular_brush.setStyle(Qt.SolidPattern)
|
||||
qp.setBrush(regular_brush)
|
||||
|
||||
# for currently selected keycap
|
||||
active_pen = qp.pen()
|
||||
active_pen.setColor(QColor("white"))
|
||||
active_pen.setColor(QApplication.palette().color(QPalette.Button))
|
||||
|
||||
active_brush = QBrush()
|
||||
active_brush.setColor(QColor("black"))
|
||||
active_brush.setColor(QApplication.palette().color(QPalette.ButtonText))
|
||||
active_brush.setStyle(Qt.SolidPattern)
|
||||
|
||||
mask_font = qp.font()
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtCore import Qt, QSettings
|
||||
from PyQt5.QtWidgets import QWidget, QComboBox, QToolButton, QHBoxLayout, QVBoxLayout, QMainWindow, QAction, qApp, \
|
||||
QFileDialog, QDialog, QTabWidget, QActionGroup
|
||||
|
||||
|
|
@ -15,12 +15,17 @@ from unlocker import Unlocker
|
|||
from util import tr, find_vial_devices
|
||||
from vial_device import VialKeyboard
|
||||
|
||||
import themes
|
||||
|
||||
|
||||
class MainWindow(QMainWindow):
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
self.settings = QSettings("Vial", "Vial")
|
||||
themes.set_theme(self.settings.value("theme"))
|
||||
|
||||
self.current_device = None
|
||||
self.devices = []
|
||||
self.sideload_json = None
|
||||
|
|
@ -112,6 +117,24 @@ class MainWindow(QMainWindow):
|
|||
self.security_menu.addSeparator()
|
||||
self.security_menu.addAction(keyboard_reset_act)
|
||||
|
||||
theme_set_default = QAction(tr("MenuTheme", "System"), self)
|
||||
theme_set_default.triggered.connect(lambda: self.set_theme("default"))
|
||||
|
||||
theme_set_light = QAction(tr("MenuTheme", "Light"), self)
|
||||
theme_set_light.triggered.connect(lambda: self.set_theme("light"))
|
||||
|
||||
theme_set_dark = QAction(tr("MenuTheme", "Dark"), self)
|
||||
theme_set_dark.triggered.connect(lambda: self.set_theme("dark"))
|
||||
|
||||
theme_set_arc = QAction(tr("MenuTheme", "Arc"), self)
|
||||
theme_set_arc.triggered.connect(lambda: self.set_theme("arc"))
|
||||
|
||||
self.theme_menu = self.menuBar().addMenu(tr("Menu", "Theme"))
|
||||
self.theme_menu.addAction(theme_set_default)
|
||||
self.theme_menu.addAction(theme_set_light)
|
||||
self.theme_menu.addAction(theme_set_dark)
|
||||
self.theme_menu.addAction(theme_set_arc)
|
||||
|
||||
def on_layout_load(self):
|
||||
dialog = QFileDialog()
|
||||
dialog.setDefaultSuffix("vil")
|
||||
|
|
@ -214,3 +237,7 @@ class MainWindow(QMainWindow):
|
|||
|
||||
def change_keyboard_layout(self, index):
|
||||
self.keymap_editor.set_keymap_override(KEYMAPS[index][1])
|
||||
|
||||
def set_theme(self, theme):
|
||||
themes.set_theme(theme)
|
||||
self.settings.setValue("theme", theme)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
from PyQt5.QtCore import Qt, pyqtSignal
|
||||
from PyQt5.QtWidgets import QTabWidget, QWidget, QPushButton, QScrollArea
|
||||
from PyQt5.QtWidgets import QTabWidget, QWidget, QPushButton, QScrollArea, QApplication
|
||||
from PyQt5.QtGui import QPalette
|
||||
|
||||
from constants import KEYCODE_BTN_WIDTH, KEYCODE_BTN_HEIGHT
|
||||
from flowlayout import FlowLayout
|
||||
|
|
@ -93,7 +94,8 @@ class TabbedKeycodes(QTabWidget):
|
|||
qmk_id = widget.keycode.qmk_id
|
||||
if qmk_id in self.keymap_override:
|
||||
label = self.keymap_override[qmk_id]
|
||||
widget.setStyleSheet("QPushButton {color: blue;}")
|
||||
highlight_color = QApplication.palette().color(QPalette.Link).getRgb()
|
||||
widget.setStyleSheet("QPushButton {color: rgb"+str(highlight_color)+";}")
|
||||
else:
|
||||
label = widget.keycode.label
|
||||
widget.setStyleSheet("QPushButton {}")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,60 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
from PyQt5.QtCore import Qt, QSettings
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
from PyQt5.QtGui import QPalette, QColor
|
||||
|
||||
dark_palette = QPalette()
|
||||
dark_palette.setColor(QPalette.Window, QColor(53, 53, 53))
|
||||
dark_palette.setColor(QPalette.WindowText, Qt.white)
|
||||
dark_palette.setColor(QPalette.Base, QColor(35, 35, 35))
|
||||
dark_palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53))
|
||||
dark_palette.setColor(QPalette.ToolTipBase, QColor(25, 25, 25))
|
||||
dark_palette.setColor(QPalette.ToolTipText, Qt.white)
|
||||
dark_palette.setColor(QPalette.Text, Qt.white)
|
||||
dark_palette.setColor(QPalette.Button, QColor(53, 53, 53))
|
||||
dark_palette.setColor(QPalette.ButtonText, Qt.white)
|
||||
dark_palette.setColor(QPalette.BrightText, Qt.red)
|
||||
dark_palette.setColor(QPalette.Link, QColor(247, 169, 72))
|
||||
dark_palette.setColor(QPalette.Highlight, QColor(186, 186, 186))
|
||||
dark_palette.setColor(QPalette.HighlightedText, QColor(35, 35, 35))
|
||||
dark_palette.setColor(QPalette.Active, QPalette.Button, QColor(53, 53, 53))
|
||||
dark_palette.setColor(QPalette.Disabled, QPalette.ButtonText, Qt.darkGray)
|
||||
dark_palette.setColor(QPalette.Disabled, QPalette.WindowText, Qt.darkGray)
|
||||
dark_palette.setColor(QPalette.Disabled, QPalette.Text, Qt.darkGray)
|
||||
dark_palette.setColor(QPalette.Disabled, QPalette.Light, QColor(53, 53, 53))
|
||||
|
||||
arc_palette = QPalette()
|
||||
arc_palette.setColor(QPalette.Window, QColor("#353945"))
|
||||
arc_palette.setColor(QPalette.WindowText, QColor("#d3dae3"))
|
||||
arc_palette.setColor(QPalette.Base, QColor("#353945"))
|
||||
arc_palette.setColor(QPalette.AlternateBase, QColor("#404552"))
|
||||
arc_palette.setColor(QPalette.ToolTipBase, QColor("#4B5162"))
|
||||
arc_palette.setColor(QPalette.ToolTipText, QColor("#d3dae3"))
|
||||
arc_palette.setColor(QPalette.Text, QColor("#d3dae3"))
|
||||
arc_palette.setColor(QPalette.Button, QColor("#353945"))
|
||||
arc_palette.setColor(QPalette.ButtonText, QColor("#d3dae3"))
|
||||
arc_palette.setColor(QPalette.BrightText, QColor("#5294e2"))
|
||||
arc_palette.setColor(QPalette.Link, QColor("#89b1e0"))
|
||||
arc_palette.setColor(QPalette.Highlight, QColor("#5294e2"))
|
||||
arc_palette.setColor(QPalette.HighlightedText, QColor("#d3dae3"))
|
||||
arc_palette.setColor(QPalette.Active, QPalette.Button, QColor("#353945"))
|
||||
arc_palette.setColor(QPalette.Disabled, QPalette.ButtonText, QColor("#d3dae3"))
|
||||
arc_palette.setColor(QPalette.Disabled, QPalette.WindowText, QColor("#d3dae3"))
|
||||
arc_palette.setColor(QPalette.Disabled, QPalette.Text, QColor("#d3dae3"))
|
||||
arc_palette.setColor(QPalette.Disabled, QPalette.Light, QColor("#404552"))
|
||||
|
||||
|
||||
def set_theme(theme):
|
||||
if theme == "light":
|
||||
QApplication.setPalette(QApplication.style().standardPalette())
|
||||
QApplication.setStyle("Fusion")
|
||||
elif theme == "dark":
|
||||
QApplication.setPalette(dark_palette)
|
||||
QApplication.setStyle("Fusion")
|
||||
elif theme == "arc":
|
||||
QApplication.setPalette(arc_palette)
|
||||
QApplication.setStyle("Fusion")
|
||||
else:
|
||||
QApplication.setPalette(QApplication.style().standardPalette())
|
||||
QApplication.setStyle(None)
|
||||
Loading…
Reference in New Issue