From c5fcc811d65f908275bec556c62bbf04eb127682 Mon Sep 17 00:00:00 2001 From: dustinface <35775977+xdustinface@users.noreply.github.com> Date: Fri, 26 Jun 2020 19:48:20 +0200 Subject: [PATCH 01/21] qt: Generalized css files, simple design changes, added scripts to keep track of color usage (#3508) * qt: Send tab - Generalized related CSS and some redesign - Removed grey boxes around labels of SendCoinEntry - Changed button styles for add/clear button - Removed padding for send button * qt: Overview tab - Generalized related CSS and some redesign - Removed grey boxes around balance labels * qt: Receive tab & QPushButton - Generalized related CSS and some redesign - Removed grey boxes around "Label", "Amount", "Message" and "Requested payment history" labels and increased their textsize - Changed the color of the "Requested payment history" label - Adjusted the style of the "Clear", "Remove" and "Show" buttons * qt: Transaction tab - Generalized related CSS and some redesign - Increased size of selected sum labels * qt: Masternode tab - Generalized related CSS and some redesign - Increased the size of the "Filter list" and "Node count" labels * qt: CoinControl dialog - Generalized related CSS and some redesign - Removed alternated coloring * qt: Sync overlay - Generalized related CSS and some redesign - Adjusted colors - Added rounded border * qt: About dialog - Generalized related CSS * qt: Edit address dialog - Generalized related CSS * qt: Help message dialog - Generalized related CSS * qt: RPC console - Generalized related CSS and some redesign - Changed colors for network activity legend (signal colors TBD in a code change commit) * qt: Options dialog - Generalized related CSS * qt: Ask passphrase dialog - Generalized related CSS * qt: Addressbook page - Generalized related CSS * qt: Sign/Verify dialog - Generalized related CSS * qt: Open URI dialog - Generalized related CSS * qt: Generalized remaining individual Qt classes * qt: Fixed indentation in css files * qt: Use newlines for multiple selector entries * qt: Formal cleanups in all css files * qt: Add copyright and file description to all css files * qt: Add update_colors.py, prepare css files for scripted color updates - update_colors.py is a python script which parses the css files and prints some details about their color usage into appropriate files in the css/colors directory. It also updates the section for each css file. - Added section to css files for automated color updates by update_colors.py * qt/contrib: Moved update_colors.py to update-css-files.py This also moves the file from src/qt/res/css to contrib/devtools * build: Remove files in src/qt/res/css/colors when running "make clean" * git: Add src/qt/res/css/colors/* to gitignore and remove the files from the repo * path -> css_folder_path * Resolve path and fail early * Create 'colors/' if it doesn't exist and fail if smth went wrong * Run git after all filesystem preparations are done * qt: Fix background-color of bgWidget in trad.css Its #AARRGGBB not #RRGGBBAA! Co-authored-by: UdjinM6 * qt: Run update_colors.py * contrib: Use case insensitive regex for color matching * qt: Update colors in css files * contrib: Remove obsolete import in update-css-files.py Co-authored-by: UdjinM6 --- .gitignore | 1 + contrib/devtools/update-css-files.py | 198 +++ src/Makefile.qt.include | 2 +- src/qt/res/css/dark.css | 1656 +++++--------------------- src/qt/res/css/general.css | 1516 +++++++++++++++++++++-- src/qt/res/css/light.css | 1585 +++++------------------- src/qt/res/css/scrollbars.css | 104 +- src/qt/res/css/trad.css | 61 +- 8 files changed, 2372 insertions(+), 2751 deletions(-) create mode 100755 contrib/devtools/update-css-files.py diff --git a/.gitignore b/.gitignore index 1aa74e7cea7e..f722641c4454 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ src/dash-tx src/test/test_dash src/test/test_dash_fuzzy src/qt/test/test_dash-qt +src/qt/res/css/colors/* src/bench/bench_dash # autoreconf diff --git a/contrib/devtools/update-css-files.py b/contrib/devtools/update-css-files.py new file mode 100755 index 000000000000..ceb48e00258e --- /dev/null +++ b/contrib/devtools/update-css-files.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python3 +# +# update-css-files.py creates color analyse files in css/colors and updates the +# `` section in all css files. +# +# Copyright (c) 2020 The Dash Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +from pathlib import Path +import re +import subprocess +import sys + +MATCH_REPLACE = '.+?' +MATCH_COLORS = '#(?:[0-9a-fA-F]{2}){2,4}|#(?:[0-9a-f]{1}){3}' + +def error(msg): + exit('\nERROR: {}\n'.format(msg)) + +def parse_css(file_css): + # Temporarily + state = 0 + selectors = [] + + # Results + by_attribute = {} + by_color = {} + + for line in file_css.read_text().splitlines(): + + if line == '': + continue + + # start of a comment + if state == 0 and line.startswith('/*'): + if '*/' in line: + state = 0 + else: + state = 1 + # we are in a comment section + elif state == 1: + # end of the comment + if '*/' in line: + state = 0 + else: + continue + # first line of multiple selector + elif (state == 0 or state == 2) and ',' in line: + state = 2 + # first line of single selector or end of multiple + elif (state == 0 or state == 2) and '{' in line: + state = 3 + # end of element + elif state == 4 and line == '}': + state = 0 + + if state == 0 and len(selectors): + selectors = [] + + if state == 2: + selector = line.split(",")[0].strip(' ') + selectors.append(selector) + + if state == 3: + selector = line.split("{")[0].strip(' ') + selectors.append(selector) + state = 4 + continue + + if state == 4: + matched_colors = re.findall(MATCH_COLORS, line) + + if len(matched_colors) > 1: + error("Multiple colors in a line.\n\n {}\n\nSeems to be an invalid file!".format(line)) + elif len(matched_colors) == 1: + matched_color = matched_colors[0] + element = line.split(":")[0].strip(' ') + + if not matched_color in by_color: + by_color[matched_color] = [] + + by_color[matched_color].append(element) + + entry = element + " " + matched_color + + if not entry in by_attribute: + by_attribute[entry] = [] + + by_attribute[entry].extend(selectors) + + def sort_color(color): + tmp = color[0].replace('#', '0x') + return int(tmp, 0) + + def remove_duplicates(l): + no_duplicates = [] + [no_duplicates.append(i) for i in l if not no_duplicates.count(i)] + return no_duplicates + + colors = [] + + # sort colors just by hex value + if len(by_color): + colors = sorted(by_color.items(), key=lambda x: sort_color(x)) + + for k, l in by_attribute.items(): + by_attribute[k] = remove_duplicates(l) + + for k, l in by_color.items(): + by_color[k] = remove_duplicates(l) + + return {'fileName': file_css.stem, 'byAttribute': by_attribute, 'byColor': by_color, 'colors': colors} + + +def create_color_file(content, commit): + + str_result = "Color analyse of " +\ + content['fileName'] + ".css " + \ + "by " + \ + Path(__file__).name + \ + " for commit " + \ + commit + \ + "\n\n" + + if not len(content['colors']): + return None + + str_result += "# Used colors\n\n" + for c in content['colors']: + str_result += c[0] + '\n' + + str_result += "\n# Grouped by attribute\n" + + for k, v in content['byAttribute'].items(): + str_result += '\n' + k + '\n' + for val in v: + str_result += ' ' + val + '\n' + + str_result += "\n# Grouped by color\n" + + for k, v in content['byColor'].items(): + str_result += '\n' + k + '\n' + for val in v: + str_result += ' ' + val + '\n' + + return str_result + +if __name__ == '__main__': + + if len(sys.argv) > 1: + error('No argument required!') + + try: + css_folder_path = Path(__file__).parent.absolute() / Path('../../src/qt/res/css/') + css_folder_path = css_folder_path.resolve(strict=True) + except Exception: + error("Path doesn't exist: {}".format(css_folder_path)) + + if not len(list(css_folder_path.glob('*.css'))): + error("No .css files found in {}".format(css_folder_path)) + + results = [parse_css(x) for x in css_folder_path.glob('*.css') if x.is_file()] + + colors_folder_path = css_folder_path / Path('colors/') + if not colors_folder_path.is_dir(): + try: + colors_folder_path.mkdir() + except Exception: + error("Can't create new folder: {}".format(colors_folder_path)) + + commit = subprocess.check_output(['git', '-C', css_folder_path, 'rev-parse', '--short', 'HEAD']).decode("utf-8") + + for r in results: + + # Update the css file + css_file = css_folder_path / Path(r['fileName'] + '.css') + css_content = css_file.read_text() + to_replace = re.findall(MATCH_REPLACE, css_content, re.DOTALL) + + str_result = "\n# Used colors in {}.css for commit {}\n".format(r['fileName'], commit) + for c in r['colors']: + str_result += c[0] + '\n' + + str_replace = "\n{}\n".format(str_result) + css_content = css_content.replace(to_replace[0], str_replace) + css_file.write_text(css_content) + + # Write the _color.txt files + str_result = create_color_file(r, commit) + + if str_result is not None: + color_file = colors_folder_path / Path(r['fileName'] + '_css_colors.txt') + color_file.write_text(str_result) + + print('\n{}.css -> {} created!'.format(r['fileName'], color_file)) + else: + print('\n{}.css -> No colors found..'.format(r['fileName'] + ".css")) diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index 287bb896e945..854257d03cf1 100644 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -435,7 +435,7 @@ $(QT_QRC_CPP): $(QT_QRC) $(QT_FORMS_H) $(RES_ICONS) $(RES_IMAGES) $(RES_CSS) $(R $(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(RCC) $(RCCFLAGS) -name dash $< | \ $(SED) -e '/^\*\*.*Created:/d' -e '/^\*\*.*by:/d' > $@ -CLEAN_QT = $(nodist_qt_libdashqt_a_SOURCES) $(QT_QM) $(QT_FORMS_H) qt/*.gcda qt/*.gcno qt/temp_dash_locale.qrc +CLEAN_QT = $(nodist_qt_libdashqt_a_SOURCES) $(QT_QM) $(QT_FORMS_H) qt/*.gcda qt/*.gcno qt/temp_dash_locale.qrc qt/res/css/colors/* CLEANFILES += $(CLEAN_QT) diff --git a/src/qt/res/css/dark.css b/src/qt/res/css/dark.css index 36c11200bec2..2769c999f27f 100644 --- a/src/qt/res/css/dark.css +++ b/src/qt/res/css/dark.css @@ -1,1512 +1,504 @@ -WalletFrame { -background-color: #444; -border-top:0px solid #000; -margin:0; -padding-top:20px; -padding-bottom: 20px; -} - -QStatusBar { -background-color: #555; -color: #ccc; -} - -.QFrame { -background-color:transparent; -border:0px solid #fff; -} - -QMenuBar { -background-color: #333; -} - -QMenuBar::item { -background-color: #333; -color: #ccc; -} - -QMenuBar::item:selected { -background-color: #333; -color: #1c75bc; /* aka Strong Blue */ -} - -QMenu { -background-color: #555; -} - -QMenu::item { -color: #ccc; -} - -QMenu::item:selected { -background-color: #666; -color: #ddd; -} - -QToolBar { -background-color: #1c75bc; -border: 0; -padding:0; -margin:0; -} - -QToolBar > QToolButton { -background-color: #1c75bc; -border: 0; -font-size: 14px; -min-width: 70px; -min-height: 48%; -max-height: 48%; -padding: 0 10px; -margin: 0; -color:#f5f5f5; -} +/** +Copyright (c) 2020 The Dash Core developers +Distributed under the MIT/X11 software license, see the accompanying +file COPYING or http://www.opensource.org/licenses/mit-license.php. + +--------------------------------------------------------------------- + +This file contains color changes for the dash theme "Dark". + +NOTE: This file gets appended to the general.css while its +getting loaded in GUIUtil::loadStyleSheet(). Thus changes made in +general.css may become overwritten by changes in this file. + +Loaded in GUIUtil::loadStyleSheet() in guitil.cpp. +**/ + +/* do not modify! section updated by update-css-files.py + + +# Used colors in dark.css for commit 3bebd1a5c + +#333 +#444 +#555 +#666 +#999 +#aaa +#ccc +#ddd +#1c75bc +#3e3e3e +#585858 +#616161 +#787878 +#cc323232 + + +*/ -QToolBar > QToolButton:checked { -border: 0; -font-weight: bold; -} +/****************************************************** +Common stuff +******************************************************/ -QToolBar > QToolButton:disabled { -color: #444; +WalletFrame, +QDialog { + background-color: #444; } -QToolBar > QLabel { -border: 0; -margin:10px 0 0 0; +QStatusBar { + background-color: #555; + color: #ccc; } QMessageBox { -background-color: #555; -} - -/*******************************************************/ - -QLabel, -QCheckBox, -QRadioButton { /* Base Text Size & Color */ -font-size:12px; -color: #ccc; -} - -.QValidatedLineEdit, .QLineEdit { /* Text Entry Fields */ -border: 1px solid #1c75bc; -font-size:11px; -min-height:31px; -outline:0; -padding: 0px 3px 0px 3px; -background-color: #333; -color: #aaa; -} - -.QLineEdit:!focus { -font-size:12px; -} - -.QValidatedLineEdit:disabled, .QLineEdit:disabled { -background-color: #3e3e3e; + background-color: #444; } QWidget { /* override text selection background color for all text widgets */ -selection-background-color: #999; + selection-background-color: #999; } -/*******************************************************/ - -QPushButton { /* Global Button Style */ -background-color: #1c75bc; -border: 0; -border-radius:8px; -color:#ffffff; -font-size:12px; -font-weight:normal; -height: 26px; -padding-left:25px; -padding-right:25px; -padding-top:5px; -padding-bottom:5px; -} - -QPushButton:hover { -background-color: #005c96; /* aka Dark Blue */ +QCheckBox, +QLabel, +QListView, +QRadioButton, +QTreeWidget { /* Base Text Size & Color */ + color: #ccc; } -QPushButton:focus { -border:none; -outline:none; -} +/****************************************************** +QAbstractSpinBox +******************************************************/ -QPushButton:pressed { -border: 1px solid #444; +QAbstractSpinBox, +QAbstractSpinBox::up-button, +QAbstractSpinBox::down-button { + background-color: #333; + border-color: #1c75bc; + color: #aaa; } -QPushButton:disabled { -background-color: #666; -} +/****************************************************** +QComboBox +******************************************************/ QComboBox { /* Dropdown Menus */ -border: 1px solid #1c75bc; -padding: 0px 5px 0px 5px; -background: #333; -min-height:31px; -color: #aaa; + background-color: #333; + border-color: #1c75bc; + color: #aaa; } QComboBox:checked { -background: #3e3e3e; + background-color: #3e3e3e; } QComboBox:editable { -background: #1c75bc; -color:#616161; -border:0px solid transparent; -} - -QComboBox::drop-down { -width:25px; -border:0px; + background-color: #1c75bc; + color: #616161; } QComboBox QListView { -color: #aaa; -background: #555; -padding: 3px; + background-color: #555; + color: #aaa; } -QComboBox QAbstractItemView::item { margin:4px; } - QComboBox::item { -color: #aaa; + color: #aaa; } QComboBox::item:alternate { -background:#444; + background-color: #444; } QComboBox::item:selected { -border:0px solid transparent; -background: #666; -color: #ccc; + background-color: #666; + color: #ccc; } -QComboBox::indicator { -background-color:transparent; -selection-background-color:transparent; -color:transparent; -selection-color:transparent; -} - -QAbstractSpinBox { -border: 1px solid #1c75bc; -padding: 0px 5px 0px 5px; -background: #333; -min-height:31px; -color: #aaa; -} - -QAbstractSpinBox::up-button { -subcontrol-origin: border; -subcontrol-position: top right; -width:21px; -background: #333; -border-left:0px; -border-right: 1px solid #1c75bc; -border-top: 1px solid #1c75bc; -border-bottom:0px; -padding-right:1px; -padding-left:5px; -padding-top:2px; -} - -QAbstractSpinBox::down-button { -subcontrol-origin: border; -subcontrol-position: bottom right; -width:21px; -background: #333; -border-top:0px; -border-left:0px; -border-right: 1px solid #1c75bc; -border-bottom: 1px solid #1c75bc; -padding-right:1px; -padding-left:5px; -padding-bottom:2px; -} - -/*******************************************************/ - -QHeaderView { /* Table Header */ -background-color:transparent; -} +/****************************************************** +QHeaderView +******************************************************/ QHeaderView::section { /* Table Header Sections */ -qproperty-alignment:center; -background-color: #1c75bc; -color: #ccc; -min-height:25px; -font-weight:bold; -font-size:11px; -outline:0; -border: 0px solid #ccc; -border-right: 1px solid #ccc; -padding-left:5px; -padding-right:5px; -padding-top:2px; -padding-bottom:2px; + background-color: #1c75bc; + border-color: #ccc; + color: #ccc; } -QHeaderView::section:last { -border-right: 0px solid #333; -} - -.QScrollArea { -background:transparent; -border:0px; -} +/****************************************************** +QLineEdit / QValidatedLineEdit / QPlainTextEdit +******************************************************/ -.QTableView { /* Table - has to be selected as a class otherwise it throws off QCalendarWidget */ -border: 0px solid #444; -background-color: #333; +.QValidatedLineEdit, +.QLineEdit, +QPlainTextEdit { /* Text Entry Fields */ + background-color: #333; + border-color: #1c75bc; + color: #aaa; } -QTableView::item { /* Table Item */ -background-color: #333; -/*color: #aaa;*/ /* Do not do this!!! This breaks tx format from transactiontablemodel.cpp, apply to individual tables instead */ -font-size:12px; -} - -QTableView::item:selected { /* Table Item Selected */ -background-color: #555; -color: #ccc; -} - -.QTableWidget { -border: 0px solid #444; -background-color: #333; +.QValidatedLineEdit:disabled, +.QLineEdit:disabled { + background-color: #3e3e3e; } -/* Do NOT apply any styles to QScrollBar here, - * it's OS dependent and should be handled via platform specific code. -*/ - -/*******************************************************/ - -.QTabWidget { -border-bottom: 1px solid #444; -} - -.QTabWidget::pane { -border: 1px solid #333; -background-color: #444; -} - -.QTabWidget QTabBar::tab { -background-color: #ccc; -color: #444; -padding-left:10px; -padding-right:10px; -padding-top:5px; -padding-bottom:5px; -border-top: 1px solid #333; -} - -.QTabWidget QTabBar::tab:first { -border-left: 1px solid #333; -} +/****************************************************** +QMenu +******************************************************/ -.QTabWidget QTabBar::tab:last { -border-right: 1px solid #333; -} - -.QTabWidget QTabBar::tab:selected{ -background-color: #444; -color: #ccc; -} - -.QTabWidget QTabBar::tab:hover { -background-color: #555; -color: #ccc; +QMenu { + background-color: #555; } -.QTabWidget .QWidget { -color: #444; +QMenu::item { + color: #ccc; } - -.QTabWidget .QWidget QAbstractSpinBox { +QMenu::item:selected { + background-color: #666; + color: #ddd; } -.QTabWidget .QWidget QAbstractSpinBox::down-button { -} +/****************************************************** +QMenuBar +******************************************************/ -.QTabWidget .QWidget QAbstractSpinBox::up-button { +QMenuBar { + background-color: #333; } -.QTabWidget .QWidget QComboBox { +QMenuBar::item:selected { + background-color: #333; + color: #1c75bc; } -/* DIALOG BOXES */ +/****************************************************** +QProgressDialog +******************************************************/ .QProgressDialog { -background-color: #444; -color: #ccc; + background-color: #444; + color: #ccc; } -QDialog QWidget { /* Remove Annoying Focus Rectangle */ -outline: 0; -} - -/* SHUTDOWN WINDOW */ +/****************************************************** +QPushButton - Special case, light buttons +******************************************************/ -QWidget#ShutdownWindow { -background-color: #444; +QWidget#AddressBookPage QPushButton#newAddress:disabled, +QWidget#AddressBookPage QPushButton#copyAddress:disabled, +QWidget#AddressBookPage QPushButton#showAddressQRCode:disabled, +QWidget#AddressBookPage QPushButton#deleteAddress:disabled, +QDialog#OpenURIDialog QPushButton#selectFileButton:disabled, +QDialog#SendCoinsDialog .QPushButton#addButton:disabled, +QDialog#SendCoinsDialog .QPushButton#clearButton:disabled, +QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:disabled, +QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:disabled, +QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:disabled, +QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:disabled, +QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:disabled { + background-color: #666; + border-color: #585858; + color: #787878; } -/*******************************************************/ -/* FILE MENU */ +/****************************************************** +QRadioButton +******************************************************/ -/* Dialog: Open URI */ -QDialog#OpenURIDialog { -background-color: #555; -} +/***** No dark.css specific coloring here yet *****/ -QDialog#OpenURIDialog QLabel#label { /* URI Label */ -font-weight:bold; -} +/****************************************************** +QScrollArea +******************************************************/ -QDialog#OpenURIDialog QPushButton#selectFileButton { /* ... Button */ -background-color: #ddd; -border: 0; -color: #444; -padding-left:10px; -padding-right:10px; -} +/***** No light.css specific coloring here yet *****/ -QDialog#OpenURIDialog QPushButton#selectFileButton:hover { -background-color: #aaa; -color: #333; -} +/****************************************************** +QScrollBar +******************************************************/ -QDialog#OpenURIDialog QPushButton#selectFileButton:pressed { -border:1px solid #9e9e9e; -} +/* Do NOT apply any styles to QScrollBar here, +* it's OS dependent and should be handled via platform specific code. +*/ -/* Dialog: Sign / Verify Message */ -QDialog#SignVerifyMessageDialog { -background-color: #555; -} +/****************************************************** +QTableView +******************************************************/ -QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_SM { /* Address Book Button */ -background-color:transparent; -padding-left:10px; -padding-right:10px; +.QTableView { /* Table - has to be selected as a class otherwise it throws off QCalendarWidget */ + background-color: #333; } -QDialog#SignVerifyMessageDialog QPlainTextEdit { /* Message Signing Text */ -border: 1px solid #1c75bc; -background-color: #444; -color: #ccc; +QTableView::item { /* Table Item */ + background-color: #333; } -QDialog#SignVerifyMessageDialog QPushButton#pasteButton_SM { /* Paste Button */ -background-color:transparent; -padding-left:15px; +QTableView::item:selected { /* Table Item Selected */ + background-color: #555; + color: #ccc; } -QDialog#SignVerifyMessageDialog QLineEdit:!focus { /* Font Hack */ -font-size:10px; -} +/****************************************************** +QTableWidget +******************************************************/ -QDialog#SignVerifyMessageDialog QPushButton#copySignatureButton_SM { /* Copy Button */ -background-color:transparent; -padding-left:10px; -padding-right:10px; +.QTableWidget { + background-color: #333; } -QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM { /* Clear Button */ -background-color: #ddd; -border: 0; -color: #444; -padding-left:10px; -padding-right:10px; -} +/****************************************************** +QTabWidget +******************************************************/ -QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:hover { -background-color: #aaa; -color: #333; +.QTabWidget { + border-color: #444; } -QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:pressed { -border:1px solid #9e9e9e; +.QTabWidget::pane { + background-color: #444; + border-color: #333; } -QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_VM { /* Verify Message - Address Book Button */ -background-color:transparent; -border: 0; -padding-left:10px; -padding-right:10px; +.QTabWidget QTabBar::tab { + background-color: #ccc; + border-color: #333; + color: #444; } -QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM { /* Verify Message - Clear Button */ -background-color: #ddd; -border: 0; -color: #444; -padding-left:10px; -padding-right:10px; +.QTabWidget QTabBar::tab:first, +.QTabWidget QTabBar::tab:last { + border-color: #333; } -QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:hover { -background-color: #aaa; -color: #333; +.QTabWidget QTabBar::tab:selected, +.QTabWidget QTabBar::tab:hover { + background-color: #555; + color: #ccc; } -QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:pressed { -border:1px solid #9e9e9e; +.QTabWidget .QWidget { + color: #444; } -/* Dialog: Send and Receive */ -QWidget#AddressBookPage { -background-color: #555; -} +/****************************************************** +QTextEdit +******************************************************/ -QWidget#AddressBookPage QPushButton#newAddress { /* New Address Button */ -background-color: #ddd; -border: 0; -color: #444; -padding-left:10px; -padding-right:10px; +QTextEdit { + border-color: #333; + background-color: #555; + color: #ccc; } -QWidget#AddressBookPage QPushButton#newAddress:hover { -background-color: #aaa; -color: #333; -} +/****************************************************** +QToolBar / QToolButton +******************************************************/ -QWidget#AddressBookPage QPushButton#newAddress:pressed { -border:1px solid #9e9e9e; -} +/***** No dark.css specific coloring here yet *****/ -QWidget#AddressBookPage QPushButton#copyAddress { /* Copy Address Button */ -background-color: #ddd; -border: 0; -color: #444; -padding-left:10px; -padding-right:10px; -} +/****************************************************** +QTreeWidget +******************************************************/ -QWidget#AddressBookPage QPushButton#copyAddress:hover { -background-color: #aaa; -color: #333; +QTreeWidget { + background-color: #333; } -QWidget#AddressBookPage QPushButton#copyAddress:pressed { -border:1px solid #9e9e9e; -} +/****************************************************** +QWidget +******************************************************/ -QWidget#AddressBookPage QPushButton#showAddressQRCode { /* Show Address QR code Button */ -background-color: #ddd; -border: 0; -color: #444; -padding-left:10px; -padding-right:10px; -} +/***** No dark.css specific coloring here yet *****/ -QWidget#AddressBookPage QPushButton#showAddressQRCode:hover { -background-color: #aaa; -color: #333; -} -QWidget#AddressBookPage QPushButton#showAddressQRCode:pressed { -border:1px solid #9e9e9e; -} +/****************************************************** +******************************************************* +STYLING OF SPECIFIC CUSTOM UI PARTS -QWidget#AddressBookPage QPushButton#deleteAddress { /* Delete Address Button */ -background-color: #ddd; -border: 0; -color: #444; -padding-left:10px; -padding-right:10px; -} +Below each section should be for a specific UI class/file +not only Qt standard elements +******************************************************* +******************************************************/ -QWidget#AddressBookPage QPushButton#deleteAddress:hover { -background-color: #aaa; -color: #333; -} +/****************************************************** +AboutDialog +******************************************************/ -QWidget#AddressBookPage QPushButton#deleteAddress:pressed { -border:1px solid #9e9e9e; -} +/***** No dark.css specific coloring here yet *****/ -QWidget#AddressBookPage QTableView { /* Address Listing */ -font-size:12px; -} +/****************************************************** +AddressBookPage +******************************************************/ -QWidget#AddressBookPage QTableView::item { -color: #aaa; +QWidget#AddressBookPage { + background-color: #555; } -QWidget#AddressBookPage QHeaderView::section { /* Min width for Windows fix */ -min-width:260px; +QWidget#AddressBookPage QTableView::item { + color: #aaa; } -/* SETTINGS MENU */ +/****************************************************** +AskPassphraseDialog +******************************************************/ -/* Encrypt Wallet and Change Passphrase Dialog */ QDialog#AskPassphraseDialog { -background-color: #555; -} - -QDialog#AskPassphraseDialog QLabel#passLabel1, QDialog#AskPassphraseDialog QLabel#passLabel2, QDialog#AskPassphraseDialog QLabel#passLabel3 { -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:170px; -min-height:33px; /* base width of 25px for QLineEdit, plus padding and border */ -} - -/* Options Dialog */ -QDialog#OptionsDialog { -background-color: #555; -} - -QDialog#OptionsDialog QValueComboBox, QDialog#OptionsDialog QSpinBox { -} - -QDialog#OptionsDialog QValidatedLineEdit, QDialog#OptionsDialog QValidatedLineEdit:disabled, QDialog#OptionsDialog QLineEdit, QDialog#OptionsDialog QLineEdit:disabled { -qproperty-alignment: 'AlignVCenter | AlignLeft'; -} - -QDialog#OptionsDialog > QLabel { -qproperty-alignment: 'AlignVCenter'; -min-height:20px; -} - -QDialog#OptionsDialog QWidget#tabDisplay QValueComboBox { -} - -QDialog#OptionsDialog QLabel#label_3 { /* Translations Missing? Label */ -qproperty-alignment: 'AlignVCenter | AlignCenter'; -color: #aaa; -padding-bottom:8px; -} - -QDialog#OptionsDialog QGroupBox { -color: #ccc; -} - -/* TOOLS MENU */ - -QWidget#RPCConsole { /* RPC Console Dialog Box */ -background-color: #333; -} - -QWidget#RPCConsole QWidget#tab_info QLabel#label_11, QWidget#RPCConsole QWidget#tab_info QLabel#label_10 { /* Margin between Network and Block Chain headers */ -qproperty-alignment: 'AlignBottom'; -min-height:25px; -min-width:180px; -} - -QWidget#RPCConsole QWidget#tab_info QPushButton#openDebugLogfileButton { -max-width:60px; -} - -QWidget#RPCConsole QWidget#tab_console QTextEdit#messagesWidget { /* Console Messages Window */ -background-color: transparent; -border: 0; -} - -QWidget#RPCConsole QWidget#tab_console QLineEdit#lineEdit { /* Console Input */ -} - -QWidget#RPCConsole QWidget#tab_console QPushButton#clearButton, -QWidget#RPCConsole QWidget#tab_console QPushButton#fontSmallerButton, -QWidget#RPCConsole QWidget#tab_console QPushButton#fontBiggerButton { /* Console Font and Clear Buttons */ -background-color:transparent; -padding-left:10px; -padding-right:10px; -} - -QWidget#RPCConsole QWidget#tab_console QPushButton#promptIcon { /* Prompt Icon */ -background-color:transparent; -} - -QWidget#RPCConsole QWidget#tab_nettraffic .QGroupBox#groupBox #line { /* Network In Line */ -background-color:#00ff00; -} - -QWidget#RPCConsole QWidget#tab_nettraffic .QGroupBox#groupBox #line_2 { /* Network Out Line */ -background-color:#ff0000; -} - -QWidget#RPCConsole QWidget#tab_peers QLabel#peerHeading { /* Peers Info Header */ -color: #1c75bc; -} - -QWidget#RPCConsole QWidget#tab_peers QTableView { /* Peers Tables */ -color: #aaa; -} - -/* HELP MENU */ - -/* Command Line Options Dialog */ -QDialog#HelpMessageDialog { -background-color: #555; -} - -QDialog#HelpMessageDialog QScrollArea * { -background-color: #444; -} - -QDialog#HelpMessageDialog QTextEdit { -background-color: #444; -border: 1px solid #333; -color: #ccc; -} - -/* About Dash Dialog */ -QDialog#AboutDialog { -background-color: #555; -} - -QDialog#AboutDialog QLabel#label, QDialog#AboutDialog QLabel#copyrightLabel, QDialog#AboutDialog QLabel#label_2 { /* About Dash Contents */ -margin-left:10px; -} - -QDialog#AboutDialog QLabel#label_2 { /* Margin for About Dash text */ -margin-right:10px; -} - -/* Edit Address Dialog */ -QDialog#EditAddressDialog { -background-color: #555; -} - -QDialog#EditAddressDialog QLabel { -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-height:27px; -font-weight:normal; -padding-right:5px; -} - -/* OVERVIEW SCREEN */ - -QWidget .QFrame#frame { /* Wallet Balance */ -min-width:490px; -} - -QWidget .QFrame#frame > .QLabel { -min-width:190px; -font-weight:normal; -min-height:30px; -} - -QWidget .QFrame#frame .QLabel#label_5 { /* Wallet Label */ -min-width:180px; -color:#008de4; -margin-top:0; -margin-right:5px; -padding-right:5px; -font-weight:bold; -font-size:18px; -min-height:30px; -} - -QWidget .QFrame#frame .QLabel#labelWalletStatus { /* Wallet Sync Status */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -color: #ff4500; -margin-left:3px; -} - -QWidget .QFrame#frame .QLabel#labelSpendable { /* Spendable Header */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:18px; -} - -QWidget .QFrame#frame .QLabel#labelWatchonly { /* Watch-only Header */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:16px; -} - -QWidget .QFrame#frame .QLabel#labelBalanceText { /* Available Balance Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -background-color: #555; -margin-right:5px; -padding-right:5px; -font-size:14px; -font-weight: bold; -min-height:35px; -} - -QWidget .QFrame#frame .QLabel#labelBalance { /* Available Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -color: #008de4; -font-size:16px; -font-weight: bold; -margin-left:0px; -} - -QWidget .QFrame#frame .QLabel#labelWatchAvailable { /* Watch-only Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:16px; -} - -QWidget .QFrame#frame .QLabel#labelPendingText { /* Pending Balance Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -font-size:12px; -background-color: #555; -margin-right:5px; -padding-right:5px; -} - -QWidget .QFrame#frame .QLabel#labelUnconfirmed { /* Pending Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:0px; -} - -QWidget .QFrame#frame .QLabel#labelWatchPending { /* Watch-only Pending Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:16px; -} - -QWidget .QFrame#frame .QLabel#labelImmatureText { /* Immature Balance Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -font-size:12px; -background-color: #555; -margin-right:5px; -padding-right:5px; + background-color: #555; } -QWidget .QFrame#frame .QLabel#labelImmature { /* Immature Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:0px; -} - -QWidget .QFrame#frame .QLabel#labelWatchImmature { /* Watch-only Immature Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:16px; -} - -QWidget .QFrame#frame .QLabel#labelTotalText { /* Total Balance Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -font-size:12px; -background-color: #555; -margin-right:5px; -padding-right:5px; -} - -QWidget .QFrame#frame .QLabel#labelTotal { /* Total Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:0px; -} - -QWidget .QFrame#frame .QLabel#labelWatchTotal { /* Watch-only Total Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:16px; -} - -/* PRIVATESEND WIDGET */ - -QWidget .QFrame#framePrivateSend { /* PrivateSend Widget */ -background-color:transparent; -max-width: 451px; -min-width: 451px; -max-height: 350px; -} - -QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetPrivateSendHeader { /* PrivateSend Header */ -background-color:transparent; -max-width: 421px; -min-width: 421px; -} - -QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendHeader { /* PrivateSend Header */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -min-width:180px; -color:#008de4; -margin-top:0; -margin-right:5px; -padding-right:5px; -font-weight: bold; -font-size:18px; -min-height:30px; -} -/******************************************************************/ -QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendSyncStatus { /* PrivateSend Sync Status */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -color: #ff4500; -margin-left:2px; -padding-right:5px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget { -max-width: 451px; -max-height: 175px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget > .QLabel { -min-width:175px; -font-weight:normal; -min-height:25px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabledText { /* PrivateSend Enabled Status Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -background-color: #555; -margin-right:5px; -padding-right:5px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabled { /* PrivateSend Enabled Status */ - -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelCompletitionText { /* PrivateSend Completion Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -background-color: #555; -margin-right:5px; -padding-right:5px; - -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress { /* PrivateSend Completion */ -border: 1px solid #aaa; -border-radius: 1px; -margin-right:43px; -text-align: right; -color: #aaa; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress::chunk { -background-color: #008de4; -width:1px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymizedText { /* PrivateSend Balance Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -background-color: #555; -margin-right:5px; -padding-right:5px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymized { /* PrivateSend Balance */ - -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountAndRoundsText { /* PrivateSend Amount and Rounds Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -background-color: #555; -margin-right:5px; -padding-right:5px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountRounds { /* PrivateSend Amount and Rounds */ - -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenomText { /* PrivateSend Submitted Denom Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -background-color: #555; -margin-right:5px; -padding-right:5px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenom { /* PrivateSend Submitted Denom */ - -} - -QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetLastMessageAndButtons { -max-width: 451px; -} - -QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendLastMessage { /* PrivateSend Status Notifications */ -qproperty-alignment: 'AlignVCenter | AlignCenter'; -min-width: 288px; -min-height: 43px; -font-size:11px; -color: #aaa; -} - -/* PRIVATESEND BUTTONS */ - -QWidget .QFrame#framePrivateSend .QPushButton { /* PrivateSend Buttons - General Attributes */ -border:0px solid #ffffff; -} - -QWidget .QFrame#framePrivateSend QPushButton:focus { -border:none; -outline:none; -} - -QWidget .QFrame#framePrivateSend .QPushButton#togglePrivateSend { /* Start PrivateSend Mixing */ -min-height: 40px; -font-size:15px; -font-weight:normal; -color:#ffffff; -padding-left:10px; -padding-right:10px; -padding-top:5px; -padding-bottom:6px; -} - -QWidget .QFrame#framePrivateSend .QPushButton#togglePrivateSend:hover { - -} - -/* RECENT TRANSACTIONS */ - -QWidget .QFrame#frame_2 { /* Transactions Widget */ -min-width:510px; -margin-right:20px; -margin-left:0; -margin-top:0; -} - -QWidget .QFrame#frame_2 .QLabel#label_4 { /* Recent Transactions Label */ -min-width:180px; -color: #008de4; -margin-left:67px; -margin-top:0; -margin-right:5px; -padding-right:5px; -font-weight:bold; -font-size:18px; -min-height:30px; -} - -QWidget .QFrame#frame_2 .QLabel#labelTransactionsStatus { /* Recent Transactions Sync Status */ -qproperty-alignment: 'AlignBottom | AlignRight'; -color: #ff4500; -min-width:93px; -margin-top:0; -margin-left:16px; -margin-right:5px; -min-height:16px; -} - -QWidget .QFrame#frame_2 QListView { /* Transaction List */ -color: #ccc; -font-weight:normal; -font-size:12px; -max-width:369px; -margin-top:12px; -margin-left:0px; /* CSS Voodoo - set to -66px to hide default transaction icons */ -} - -/* MODAL OVERLAY */ - -QWidget#bgWidget { /* The 'frame' overlaying the overview-page */ -background: rgba(0,0,0,220); -padding-left: 10px; -padding-right: 10px; -} - -QWidget#bgWidget .QPushButton#warningIcon { -width:64px; -height:64px; -padding:5px; -background-color:transparent; -} - -QWidget#contentWidget { /* The actual content with the text/buttons/etc... */ -background-color: #444; -border-top:0px solid #000; -margin:0; -padding-top:20px; -padding-bottom: 20px; -} - -QWidget#bgWidget .QPushButton#closeButton { - -} - -/* SEND DIALOG */ - -QDialog#SendCoinsDialog .QFrame#frameCoinControl { /* Coin Control Section */ - -} - -QDialog#SendCoinsDialog .QFrame#frameCoinControl > .QLabel { /* Default Font Color and Size */ -font-weight:normal; -color: #999; -} - -QDialog#SendCoinsDialog .QFrame#frameCoinControl .QPushButton#pushButtonCoinControl { /* Coin Control Inputs Button */ -padding-left:10px; -padding-right:10px; -min-height:25px; -} - -QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlFeatures { /* Coin Control Header */ -color:#999; -font-weight:normal; -font-size:14px; -} - -QDialog#SendCoinsDialog .QFrame#frameCoinControl .QWidget#widgetCoinControl { /* Coin Control Inputs */ -} - -QDialog#SendCoinsDialog .QFrame#frameCoinControl .QWidget#widgetCoinControl > .QLabel { /* Coin Control Inputs Labels */ -padding:2px; -} - -QDialog#SendCoinsDialog .QFrame#frameCoinControl .QValidatedLineEdit#lineEditCoinControlChange { /* Custom Change Address */ -} - -QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlChangeLabel { /* Custom Change Address Validation Label */ -font-weight:normal; -qproperty-margin:-6; -margin-right:112px; -} - -QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlInsuffFunds { /* Insufficient Funds Label */ -color: #ff4500; -} - -QDialog#SendCoinsDialog .QScrollArea#scrollArea .QWidget#scrollAreaWidgetContents { /* Send To Widget */ -background:transparent; -} - -QDialog#SendCoinsDialog .QPushButton#sendButton { /* Send Button */ -padding-left:10px; -padding-right:10px; -} - -QDialog#SendCoinsDialog .QPushButton#clearButton { /* Clear Button */ -background-color: #ddd; -border: 0; -color: #444; -padding-left:10px; -padding-right:10px; -} - -QDialog#SendCoinsDialog .QPushButton#clearButton:hover { -background-color: #aaa; -color: #333; -} - -QDialog#SendCoinsDialog .QPushButton#clearButton:pressed { -border:1px solid #9e9e9e; -} - -QDialog#SendCoinsDialog .QPushButton#addButton { /* Add Button */ -background-color: #ddd; -border: 0; -color: #444; -padding-left:10px; -padding-right:10px; -} - -QDialog#SendCoinsDialog .QPushButton#addButton:hover { -background-color: #aaa; -color: #333; -} - -QDialog#SendCoinsDialog .QPushButton#addButton:pressed { -border:1px solid #9e9e9e; -} - -/* This QLabel uses name = "label" which conflicts with Address Book -> New Address */ -/* To maximize backwards compatibility this formatting has been removed */ - -QDialog#SendCoinsDialog QLabel#label { -/*margin-left:20px; -margin-right:-2px; -padding-right:-2px; -color:#616161; -font-size:14px; -font-weight:bold; -border-radius:5px; -padding-top:20px; -padding-bottom:20px;*/ -min-height:27px; -} - -QDialog#SendCoinsDialog QLabel#labelBalance { -margin-left:0px; -padding-left:0px; -color: #ccc; -/* font-weight:bold; -border-radius:5px; -padding-top:20px; -padding-bottom:20px; */ -min-height:27px; -} - -#checkboxSubtractFeeFromAmount { -padding-left:10px; -} - - -/* SEND COINS ENTRY */ - -QStackedWidget#SendCoinsEntry .QFrame#SendCoins > .QLabel { /* Send Coin Entry Labels */ -background-color: #555; -min-width:102px; -font-weight:normal; -/*font-size:11px;*/ -color: #ccc; -min-height:25px; -margin-right:5px; -padding-right:5px; -} - -QStackedWidget#SendCoinsEntry .QFrame#SendCoins .QLabel#amountLabel { -color: #444; -background-color:#999; -} - -QStackedWidget#SendCoinsEntry .QValidatedLineEdit#payTo { /* Pay To Input Field */ -} - -QStackedWidget#SendCoinsEntry .QToolButton { /* General Settings for Pay To Icons */ -background-color:transparent; -padding-left:5px; -padding-right:5px; -border: 0; -outline: 0; -} - -QStackedWidget#SendCoinsEntry .QToolButton#addressBookButton { /* Address Book Button */ -padding-left:10px; -} - -QStackedWidget#SendCoinsEntry .QToolButton#addressBookButton { -} - -QStackedWidget#SendCoinsEntry .QToolButton#pasteButton { -} - -QStackedWidget#SendCoinsEntry .QToolButton#deleteButton { -} - -QStackedWidget#SendCoinsEntry .QLineEdit#addAsLabel { /* Pay To Input Field */ -} - -/* COIN CONTROL POPUP */ - -QDialog#CoinControlDialog { /* Coin Control Dialog Window */ -background-color: #555; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlQuantityText { /* Coin Control Quantity Label */ -min-height:30px; -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlQuantity { /* Coin Control Quantity */ -min-height:30px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlBytesText { /* Coin Control Bytes Label */ -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlBytes { /* Coin Control Bytes */ -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlAmountText { /* Coin Control Amount Label */ -min-height:30px; -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlAmount { /* Coin Control Amount */ -min-height:30px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlPriorityText { /* Coin Control Priority Label */ -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlPriority { /* Coin Control Priority */ -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlFeeText { /* Coin Control Fee Label */ -min-height:30px; -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlFee { /* Coin Control Fee */ -min-height:30px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutputText { /* Coin Control Low Output Label */ -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutput { /* Coin Control Low Output */ -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFeeText { /* Coin Control After Fee Label */ -min-height:30px; -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFee { /* Coin Control After Fee */ -min-height:30px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlChangeText { /* Coin Control Change Label */ -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlChange { /* Coin Control Change */ - -} - -QDialog#CoinControlDialog .QFrame#frame .QPushButton#pushButtonSelectAll { /* (un)select all button */ -padding-left:10px; -padding-right:10px; -min-height:25px; -} - -QDialog#CoinControlDialog .QFrame#frame .QPushButton#pushButtonToggleLock { /* Toggle lock state button */ -padding-left:10px; -padding-right:10px; -min-height:25px; -} - -QDialog#CoinControlDialog .QDialogButtonBox#buttonBox QPushButton { /* Coin Control 'OK' button */ -} - -QDialog#CoinControlDialog QHeaderView::section:first { /* Bug Fix: the number "1" displays in this table for some reason... */ -color:transparent; -} - -QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget { /* Coin Control Widget Container */ -outline:0; -background-color: #444; -alternate-background-color: #555; -color: #ccc; -border:0px solid #aaa; -} - -QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item { -} +/****************************************************** +CoinControlDialog +******************************************************/ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:selected { /* Coin Control Item (selected) */ -background-color: #666; -color: #ccc; + background-color: #666; + color: #ccc; } QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:checked { /* Coin Control Item (checked) */ -background-color: #333; -color: #ccc; + background-color: #333; + color: #ccc; } QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:selected { /* Coin Control Branch Icon */ -background-repeat:no-repeat; -background-position:center; -background-color: #666; -color: #ccc; + background-color: #666; + color: #ccc; } QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:checked { /* Coin Control Branch Icon */ -background-repeat:no-repeat; -background-position:center; -background-color: #333; -color: #ccc; -} - -QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::seperator { - + background-color: #333; + color: #ccc; } -QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::indicator { /* Coin Control Widget Checkbox */ +/****************************************************** +EditAddressDialog +******************************************************/ -} +/***** No dark.css specific coloring here yet *****/ -/* RECEIVE COINS */ +/****************************************************** +HelpMessageDialog +******************************************************/ -QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label_2 { /* Label Label */ -background-color: #555; -border: 1px solid #444; -min-width:102px; -color: #ccc; -/*font-weight:bold; -font-size:11px;*/ -padding-right:5px; +QDialog#HelpMessageDialog QScrollArea * { + background-color: #555; } -QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label { /* Amount Label */ -background-color:#999; -border: 1px solid #444; -min-width:102px; -color: #444; -/*font-weight:bold; -font-size:11px;*/ -padding-right:5px; -} +/****************************************************** +MasternodeList +******************************************************/ -QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label_3 { /* Message Label */ -background-color: #555; -border: 1px solid #444; -min-width:102px; -color: #ccc; -/*font-weight:bold; -font-size:11px;*/ -padding-right:5px; +QWidget#MasternodeList QTableWidget#tableWidgetMasternodesDIP3 { + color: #aaa; } -QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton { /* Clear Button */ -background-color: #ddd; -border: 0; -color: #444; -padding-left:10px; -padding-right:10px; -} +/****************************************************** +ModalOverlay +******************************************************/ -QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:hover { -background-color: #aaa; -color: #333; +QWidget#bgWidget { /* The frame overlaying the overview-page */ + background-color: #cc323232; + color: #616161; } -QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:pressed { -border:1px solid #9e9e9e; +QWidget#contentWidget { /* The actual content with the text/buttons/etc... */ + background-color: #444; + border-color: #555; } -QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton { /* Show Button */ -background-color: #ddd; -border: 0; -color: #444; -padding-left:10px; -padding-right:10px; -} +/****************************************************** +OpenURIDialog +******************************************************/ -QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:hover { -background-color: #aaa; -color: #333; +QDialog#OpenURIDialog { + background-color: #555; } -QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:pressed { -border:1px solid #9e9e9e; -} +/****************************************************** +OptionsDialog +******************************************************/ -QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:disabled { -background-color: #666; -color: #fff; +QDialog#OptionsDialog { + background-color: #555; } -QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton { /* Remove Button */ -background-color: #ddd; -border: 0; -color: #444; -padding-left:10px; -padding-right:10px; +QDialog#OptionsDialog QGroupBox { + color: #ccc; } -QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:hover { -background-color: #aaa; -color: #333; -} +/****************************************************** +OverviewPage Balances +******************************************************/ -QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:pressed { -border:1px solid #9e9e9e; -} +/***** No dark.css specific coloring here yet *****/ -QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:disabled { -background-color: #666; -color: #fff; -} +/****************************************************** +OverviewPage PrivateSend +******************************************************/ -QWidget#ReceiveCoinsDialog .QFrame#frame .QLabel#label_6 { /* Requested Payments History Label */ -color:#999; -font-weight:normal; -font-size:14px; -} +/***** No dark.css specific coloring here yet *****/ -QWidget#ReceiveCoinsDialog .QFrame#frame QTableView#recentRequestsView::item { /* Recent Requests Table */ -color: #aaa; -} +/****************************************************** +OverviewPage RecentTransactions +******************************************************/ -/* RECEIVE COINS DIALOG */ +/***** No dark.css specific coloring here yet *****/ -QDialog#ReceiveRequestDialog { -background-color: #555; -} +/****************************************************** +ReceiveCoinsDialog +******************************************************/ -QDialog#ReceiveRequestDialog QTextEdit { /* Contents of Receive Coin Dialog */ -border: 1px solid #333; -background-color: #555; -color: #ccc; +QWidget#ReceiveCoinsDialog .QFrame#frame QTableView#recentRequestsView::item { /* Recent Requests Table */ + color: #aaa; } -/* General QR-code DIALOG */ +/****************************************************** +RPCConsole +******************************************************/ -QDialog#QRDialog { -background-color: #555; +QWidget#RPCConsole { /* RPC Console Dialog Box */ + background-color: #333; } -QDialog#QRDialog QTextEdit { /* Contents of QR-code Dialog */ -border:1px solid #333; -background-color: #555; -color: #ccc; +QWidget#RPCConsole QWidget#tab_peers QTableView { /* Peers Tables */ + color: #aaa; } -/* TRANSACTIONS PAGE */ - -TransactionView QLineEdit { /* Filters */ -margin-bottom:2px; -margin-right:1px; -min-width:111px; -text-align:center; -} +/****************************************************** +SendCoinsDialog +******************************************************/ -TransactionView QLineEdit#addressWidget { /* Address Filter */ -margin-bottom:2px; -margin-right:1px; -min-width:405px; -text-align:center; +QDialog#SendCoinsDialog QLabel#labelBalance { + color: #ccc; } -TransactionView QLineEdit#amountWidget { /* Amount Filter */ -margin-bottom:2px; -margin-right:1px; -max-width:100px; -text-align:center; -} +/****************************************************** +SendCoinsEntry +******************************************************/ -TransactionView QComboBox { -margin-bottom:1px; -margin-right:1px; +QStackedWidget#SendCoinsEntry .QFrame#SendCoins > .QLabel { /* Send Coin Entry Labels */ + color: #ccc; } -QLabel#transactionSumLabel { /* Example of setObjectName for widgets without name */ -color: #ccc; -font-weight:bold; -} +/****************************************************** +SignVerifyMessageDialog +******************************************************/ -QLabel#transactionSum { /* Example of setObjectName for widgets without name */ -color: #ccc; +QDialog#SignVerifyMessageDialog { + background-color: #555; } -/* TRANSACTION DETAIL DIALOG */ - -QDialog#TransactionDescDialog { -background-color: #555; -} +/****************************************************** +ShutdownWindow +******************************************************/ -QDialog#TransactionDescDialog QTextEdit { /* Contents of Receive Coin Dialog */ -background-color: #444; -color: #ccc; -border:1px solid #333; +QWidget#ShutdownWindow { + background-color: #444; } -/* MASTERNODE LIST TAB */ +/****************************************************** +TransactionView +******************************************************/ -QWidget#MasternodeList QTableWidget#tableWidgetMasternodesDIP3 { -color: #aaa; -} +/***** No dark.css specific coloring here yet *****/ diff --git a/src/qt/res/css/general.css b/src/qt/res/css/general.css index 9bcdaec401b8..ca68b0fe1caa 100644 --- a/src/qt/res/css/general.css +++ b/src/qt/res/css/general.css @@ -1,188 +1,311 @@ /** - Copyright (c) 2020 The Dash Core developers - Distributed under the MIT/X11 software license, see the accompanying - file COPYING or http://www.opensource.org/licenses/mit-license.php. +Copyright (c) 2020 The Dash Core developers +Distributed under the MIT/X11 software license, see the accompanying +file COPYING or http://www.opensource.org/licenses/mit-license.php. - This file contains style changes used by both dash themes: "Light" and "Dark" +--------------------------------------------------------------------- + +A full theme is a combination of up to three css files. They are all getting +loaded and combined in `GUIUtil::loadStyleSheet()` in guitil.cpp. + +Hierarchy: + +* general.css - base layout: Loaded first if selected theme is not "Traditional" (trad.css) +* scrollbars.css - custom scrollbars: Loaded second only for windows/linux if general.css is loaded +* - theme css file: Always loaded and loaded last. + +To replace there are currently the following themes available: + +* Dark (dark.css) +* Light (light.css) +* Traditional (trad.css) + +NOTE: This file is only the base layout which is getting +shared between all full themes (e.g. Dark or Light). It may contain +color changes as long as they fit into all other themes. If an ui element +requires theme based coloring the appropriate css element can be picked +here to overwrite its colors (background-color, border-color, color) +in the file. **/ +/* do not modify! section updated by update-css-files.py + + +# Used colors in general.css for commit 3bebd1a5c + +#333 +#444 +#999 +#aaa +#005e98 +#008de4 +#096e03 +#1c75bc +#1f5383 +#616161 +#787878 +#9e9e9e +#d2d2d2 +#eb4034 +#f5f5f5 +#f6f6f6 +#ff4500 +#ffffff + + +*/ + +/****************************************************** +Common stuff +******************************************************/ + +WalletFrame, +QDialog { + border: 0px; + margin: 0; + padding-top: 20px; + padding-bottom: 20px; +} + +.QFrame { + background-color: transparent; + border: 0px; +} + +QStatusBar { +} + +QMessageBox { +} + +QCheckBox, +QLabel, +QListView, +QRadioButton, +QTreeWidget { /* Base Text Size & Color */ + font-size: 12px; +} /****************************************************** QAbstractSpinBox ******************************************************/ +QAbstractSpinBox { + border: 1px solid red; + padding: 0px 5px 0px 5px; + min-height: 31px; +} + +QAbstractSpinBox::up-button { + subcontrol-origin: border; + subcontrol-position: top right; + width: 21px; + border: 0px; + border-top: 1px solid; + border-right: 1px solid; + padding-right: 1px; + padding-left: 5px; + padding-top: 2px; +} + +QAbstractSpinBox::down-button { + subcontrol-origin: border; + subcontrol-position: bottom right; + width: 21px; + border: 0px; + border-right: 1px solid; + border-bottom: 1px solid; + padding-right: 1px; + padding-left: 5px; + padding-bottom: 2px; +} + QAbstractSpinBox::up-arrow { width: 20px; height: 20px; - image:url(':/images/arrow_up_normal'); + image: url(':/images/arrow_up_normal'); } QAbstractSpinBox::up-arrow:hover { width: 20px; height: 20px; - image:url(':/images/arrow_up_hover'); + image: url(':/images/arrow_up_hover'); } QAbstractSpinBox::up-arrow:pressed { width: 20px; height: 20px; - image:url(':/images/arrow_up_pressed'); + image: url(':/images/arrow_up_pressed'); } QAbstractSpinBox::up-arrow:disabled { width: 20px; height: 20px; - image:url(':/images/arrow_light_up_hover'); + image: url(':/images/arrow_light_up_hover'); } QAbstractSpinBox::down-arrow { width: 20px; height: 20px; - image:url(':/images/arrow_down_normal'); + image: url(':/images/arrow_down_normal'); } QAbstractSpinBox::down-arrow:hover { width: 20px; height: 20px; - image:url(':/images/arrow_down_hover'); + image: url(':/images/arrow_down_hover'); } QAbstractSpinBox::down-arrow:pressed { width: 20px; height: 20px; - image:url(':/images/arrow_down_pressed'); + image: url(':/images/arrow_down_pressed'); } QAbstractSpinBox::down-arrow:disabled { width: 20px; height: 20px; - image:url(':/images/arrow_light_down_hover'); -} - -/****************************************************** -QComboBox -******************************************************/ - -QComboBox::down-arrow { - width: 20px; - height: 20px; - border-image: url(':/images/arrow_down_normal') 0 0 0 0 stretch stretch; -} -QComboBox::down-arrow:hover { - width: 20px; - height: 20px; - border-image: url(':/images/arrow_down_hover') 0 0 0 0 stretch stretch; -} -QComboBox::down-arrow:pressed { - width: 20px; - height: 20px; - border-image: url(':/images/arrow_down_pressed') 0 0 0 0 stretch stretch; -} -QComboBox::down-arrow:disabled { - width: 20px; - height: 20px; - border-image: url(':/images/arrow_light_down_hover') 0 0 0 0 stretch stretch; -} - -/****************************************************** -QRadioButton -******************************************************/ - -QRadioButton { - background-color: transparent; -} -QRadioButton::indicator { - width: 15px; - height: 15px; - margin-right: 5px; -} -QRadioButton::indicator:unchecked { - image: url(':/images/radio_normal'); -} -QRadioButton::indicator:hover:unchecked { - image: url(':/images/radio_normal_hover'); -} -QRadioButton::indicator:unchecked:pressed { - image: url(':/images/radio_normal_pressed'); -} -QRadioButton::indicator:checked { - image: url(':/images/radio_checked'); -} -QRadioButton::indicator:checked:hover { - image: url(':/images/radio_checked_hover'); -} -QRadioButton::indicator:checked:pressed { - image: url(':/images/radio_checked_pressed'); -} -QRadioButton::indicator:checked:disabled { - image: url(':/images/radio_checked_disabled'); -} -QRadioButton::indicator:unchecked:disabled { - image: url(':/images/radio_normal_disabled'); + image: url(':/images/arrow_light_down_hover'); } /****************************************************** -QCheckBox & QTreeWidget::indicator checkboxes +QCheckBox ******************************************************/ QCheckBox{ background-color: transparent; - min-height:20px; + min-height: 20px; } -QTreeWidget::indicator, QCheckBox::indicator { width: 15px; height: 15px; margin-right: 5px; } -QTreeWidget::indicator:unchecked, QCheckBox::indicator:unchecked { image: url(':/images/checkbox_normal'); } -QTreeWidget::indicator:hover:unchecked, QCheckBox::indicator:hover:unchecked { image: url(':/images/checkbox_normal_hover'); } -QTreeWidget::indicator:unchecked:pressed, QCheckBox::indicator:unchecked:pressed { image: url(':/images/checkbox_normal_pressed'); } -QTreeWidget::indicator:unchecked:disabled, QCheckBox::indicator:unchecked:disabled { image: url(':/images/checkbox_normal_disabled'); } -QTreeWidget::indicator:checked, QCheckBox::indicator:checked { image: url(':/images/checkbox_checked'); } -QTreeWidget::indicator:checked:hover, QCheckBox::indicator:checked:hover { image: url(':/images/checkbox_checked_hover'); } -QTreeWidget::indicator:checked:pressed, QCheckBox::indicator:checked:pressed { image: url(':/images/checkbox_checked_pressed'); } -QTreeWidget::indicator:checked:disabled, QCheckBox::indicator:checked:disabled { image: url(':/images/checkbox_checked_disabled'); } -QTreeWidget::indicator:indeterminate, QCheckBox::indicator:indeterminate { image: url(':/images/checkbox_partly_checked'); } -QTreeWidget::indicator:indeterminate:hover, QCheckBox::indicator:indeterminate:hover { image: url(':/images/checkbox_partly_checked_hover'); } -QTreeWidget::indicator:indeterminate:pressed, QCheckBox::indicator:indeterminate:pressed { image: url(':/images/checkbox_partly_checked_pressed'); } -QTreeWidget::indicator:indeterminate:disabled, QCheckBox::indicator:indeterminate:disabled { image: url(':/images/checkbox_partly_checked_disabled'); } +/****************************************************** +QComboBox +******************************************************/ + +QComboBox { /* Dropdown Menus */ + border: 1px solid red; + padding: 0px 5px 0px 5px; + min-height: 31px; +} + +QComboBox:checked { +} + +QComboBox:editable { + border: 0px solid transparent; +} + +QComboBox::drop-down { + width: 25px; + border: 0px; +} + +QComboBox QListView { + padding: 3px; +} + +QComboBox QAbstractItemView::item { + margin: 4px; +} + +QComboBox::item { +} + +QComboBox::item:alternate { +} + +QComboBox::item:selected { + border: 0px solid transparent; +} + +QComboBox::indicator { + background-color: transparent; + selection-background-color: transparent; + color: transparent; + selection-color: transparent; +} + +QComboBox::down-arrow { + width: 20px; + height: 20px; + border-image: url(':/images/arrow_down_normal') 0 0 0 0 stretch stretch; +} +QComboBox::down-arrow:hover { + width: 20px; + height: 20px; + border-image: url(':/images/arrow_down_hover') 0 0 0 0 stretch stretch; +} +QComboBox::down-arrow:pressed { + width: 20px; + height: 20px; + border-image: url(':/images/arrow_down_pressed') 0 0 0 0 stretch stretch; +} +QComboBox::down-arrow:disabled { + width: 20px; + height: 20px; + border-image: url(':/images/arrow_light_down_hover') 0 0 0 0 stretch stretch; +} + /****************************************************** QHeaderView ******************************************************/ +QHeaderView { /* Table Header */ + background-color: transparent; +} + +QHeaderView::section { /* Table Header Sections */ + qproperty-alignment: center; + min-height: 25px; + font-weight: bold; + font-size: 11px; + outline: 0; + border: 0px solid; + border-right: 1px solid; + padding-left: 5px; + padding-right: 5px; + padding-top: 2px; + padding-bottom: 2px; +} +QHeaderView::section:last { + border-right: 0px; +} + QHeaderView::down-arrow { width: 20px; height: 20px; @@ -218,25 +341,1212 @@ QHeaderView::up-arrow:hover { } /****************************************************** -QTreeWidget +QLineEdit / QValidatedLineEdit / QPlainTextEdit ******************************************************/ +.QLineEdit, +QPlainTextEdit, +.QValidatedLineEdit { /* Text Entry Fields */ + border: 1px solid; + font-size: 11px; + min-height: 31px; + outline: 0; + padding: 0px 3px 0px 3px; +} -QTreeWidget { +.QLineEdit:!focus { + font-size: 12px; +} + +.QLineEdit:disabled, +.QValidatedLineEdit:disabled { +} + +/****************************************************** +QMenu +******************************************************/ + +QMenu { +} + +QMenu::item { +} + +QMenu::item:selected { +} + +/****************************************************** +QMenuBar +******************************************************/ + +QMenuBar { +} + +QMenuBar::item { +} + +QMenuBar::item:selected { +} + +/****************************************************** +QProgressDialog +******************************************************/ + +.QProgressDialog { +} + +/****************************************************** +QPushButton - General blue buttons +******************************************************/ + +QPushButton { /* Global Button Style */ + background-color: #008de4; + border: 0; + border-radius: 8px; + color: #ffffff; + font-size: 12px; + font-weight: normal; + height: 26px; + padding-left: 25px; + padding-right: 25px; + padding-top: 5px; + padding-bottom: 5px; +} + +QPushButton:hover { + background-color: #005e98; +} + +QPushButton:focus { + border: none; + outline: none; +} + +QPushButton:pressed { + background-color: #1f5383; + border: 1px solid #444; +} + +QPushButton:disabled { + background-color: #787878; +} + +/****************************************************** +QPushButton - Special case, light buttons +******************************************************/ + +QWidget#AddressBookPage QPushButton#newAddress, +QWidget#AddressBookPage QPushButton#copyAddress, +QWidget#AddressBookPage QPushButton#showAddressQRCode, +QWidget#AddressBookPage QPushButton#deleteAddress, +QDialog#OpenURIDialog QPushButton#selectFileButton, +QDialog#SendCoinsDialog .QPushButton#addButton, +QDialog#SendCoinsDialog .QPushButton#clearButton, +QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton, +QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton, +QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton, +QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM, +QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM { + background-color: #f6f6f6; + border: 1px solid #d2d2d2; + color: #616161; + padding-left: 10px; + padding-right: 10px; +} + +QWidget#AddressBookPage QPushButton#newAddress:hover, +QWidget#AddressBookPage QPushButton#copyAddress:hover, +QWidget#AddressBookPage QPushButton#showAddressQRCode:hover, +QWidget#AddressBookPage QPushButton#deleteAddress:hover, +QDialog#OpenURIDialog QPushButton#selectFileButton:hover, +QDialog#SendCoinsDialog .QPushButton#addButton:hover, +QDialog#SendCoinsDialog .QPushButton#clearButton:hover, +QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:hover, +QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:hover, +QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:hover, +QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:hover, +QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:hover { + background-color: #d2d2d2; + color: #333; +} + +QWidget#AddressBookPage QPushButton#newAddress:pressed, +QWidget#AddressBookPage QPushButton#copyAddress:pressed, +QWidget#AddressBookPage QPushButton#showAddressQRCode:pressed, +QWidget#AddressBookPage QPushButton#deleteAddress:pressed, +QDialog#OpenURIDialog QPushButton#selectFileButton:pressed, +QDialog#SendCoinsDialog .QPushButton#addButton:pressed, +QDialog#SendCoinsDialog .QPushButton#clearButton:pressed, +QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:pressed, +QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:pressed, +QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:pressed, +QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:pressed, +QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:pressed { + border: 1px solid #9e9e9e; +} + +QWidget#AddressBookPage QPushButton#newAddress:disabled, +QWidget#AddressBookPage QPushButton#copyAddress:disabled, +QWidget#AddressBookPage QPushButton#showAddressQRCode:disabled, +QWidget#AddressBookPage QPushButton#deleteAddress:disabled, +QDialog#OpenURIDialog QPushButton#selectFileButton:disabled, +QDialog#SendCoinsDialog .QPushButton#addButton:disabled, +QDialog#SendCoinsDialog .QPushButton#clearButton:disabled, +QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:disabled, +QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:disabled, +QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:disabled, +QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:disabled, +QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:disabled { + border: 1px solid; +} + +/****************************************************** +QRadioButton +******************************************************/ + +QRadioButton { background-color: transparent; } -QTreeWidget::branch::closed:has-children { - padding: 0 -2px 0 2px; - image: url(':/images/arrow_right_normal'); +QRadioButton::indicator { + width: 15px; + height: 15px; + margin-right: 5px; } -QTreeWidget::branch::closed:has-children:hover { - padding: 0 -2px 0 2px; - image: url(':/images/arrow_right_hover'); +QRadioButton::indicator:unchecked { + image: url(':/images/radio_normal'); } -QTreeWidget::branch::open { - padding: 0 -2px 0 2px; - image: url(':/images/arrow_down_normal'); +QRadioButton::indicator:hover:unchecked { + image: url(':/images/radio_normal_hover'); } -QTreeWidget::branch::open:hover { - padding: 0 -2px 0 2px; - image: url(':/images/arrow_down_hover'); +QRadioButton::indicator:unchecked:pressed { + image: url(':/images/radio_normal_pressed'); +} +QRadioButton::indicator:checked { + image: url(':/images/radio_checked'); +} +QRadioButton::indicator:checked:hover { + image: url(':/images/radio_checked_hover'); +} +QRadioButton::indicator:checked:pressed { + image: url(':/images/radio_checked_pressed'); +} +QRadioButton::indicator:checked:disabled { + image: url(':/images/radio_checked_disabled'); +} +QRadioButton::indicator:unchecked:disabled { + image: url(':/images/radio_normal_disabled'); +} + +/****************************************************** +QScrollArea +******************************************************/ + +.QScrollArea { + background-color: transparent; + border: 0px; +} + +/****************************************************** +QScrollBar +******************************************************/ + +/* Do NOT apply any styles to QScrollBar here, +* it's OS dependent and should be handled via platform specific code. +*/ + +/****************************************************** +QTableView +******************************************************/ + +.QTableView { /* Table - has to be selected as a class otherwise it throws off QCalendarWidget */ + border: 0px; + background-color: transparent; +} + +QTableView::item { /* Table Item */ + font-size: 12px; +} + +QTableView::item:selected { /* Table Item Selected */ +} + +/****************************************************** +QTableWidget +******************************************************/ + +.QTableWidget { + border: 0px; +} + +/****************************************************** +QTabWidget +******************************************************/ + +.QTabWidget { + border-bottom: 1px solid; +} + +.QTabWidget::pane { + border: 1px solid; +} + +.QTabWidget QTabBar::tab { + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + border-top: 1px solid; +} + +.QTabWidget QTabBar::tab:first { + border-left: 1px solid; +} + +.QTabWidget QTabBar::tab:last { + border-right: 1px solid; +} + +.QTabWidget QTabBar::tab:selected, +.QTabWidget QTabBar::tab:hover { +} + +.QTabWidget .QWidget { +} + +/****************************************************** +QTextEdit +******************************************************/ + +QTextEdit { + border: 1px solid red; +} + +/****************************************************** +QToolBar / QToolButton +******************************************************/ + +QToolBar { + background-color: #008de4; + border: 0; + padding: 0; + margin: 0; +} + +QToolBar > QToolButton { + background-color: #008de4; + border: 0; + font-size: 14px; + min-width: 70px; + min-height: 48%; + max-height: 48%; + padding: 0 10px; + margin: 0; + color: #f5f5f5; +} + +QToolBar > QToolButton:checked { + border: 0; + font-weight: bold; +} + +QToolBar > QToolButton:disabled { + color: #444; +} + +QToolBar > QLabel { + border: 0; + margin: 10px 0 0 0; +} + +/****************************************************** +QTreeWidget +******************************************************/ + +QTreeWidget { + background-color: transparent; + alternate-background-color: transparent; + outline: 0; + border: 0px; +} +QTreeWidget::branch::closed:has-children { + padding: 0 -2px 0 2px; + image: url(':/images/arrow_right_normal'); +} +QTreeWidget::branch::closed:has-children:hover { + padding: 0 -2px 0 2px; + image: url(':/images/arrow_right_hover'); +} +QTreeWidget::branch::open { + padding: 0 -2px 0 2px; + image: url(':/images/arrow_down_normal'); +} +QTreeWidget::branch::open:hover { + padding: 0 -2px 0 2px; + image: url(':/images/arrow_down_hover'); +} +QTreeWidget::indicator { + width: 15px; + height: 15px; + margin-right: 5px; +} +QTreeWidget::indicator:unchecked { + image: url(':/images/checkbox_normal'); +} +QTreeWidget::indicator:hover:unchecked { + image: url(':/images/checkbox_normal_hover'); +} +QTreeWidget::indicator:unchecked:pressed { + image: url(':/images/checkbox_normal_pressed'); +} +QTreeWidget::indicator:unchecked:disabled { + image: url(':/images/checkbox_normal_disabled'); +} +QTreeWidget::indicator:checked { + image: url(':/images/checkbox_checked'); +} +QTreeWidget::indicator:checked:hover { + image: url(':/images/checkbox_checked_hover'); +} +QTreeWidget::indicator:checked:pressed { + image: url(':/images/checkbox_checked_pressed'); +} +QTreeWidget::indicator:checked:disabled { + image: url(':/images/checkbox_checked_disabled'); +} +QTreeWidget::indicator:indeterminate { + image: url(':/images/checkbox_partly_checked'); +} +QTreeWidget::indicator:indeterminate:hover { + image: url(':/images/checkbox_partly_checked_hover'); +} +QTreeWidget::indicator:indeterminate:pressed { + image: url(':/images/checkbox_partly_checked_pressed'); +} +QTreeWidget::indicator:indeterminate:disabled { + image: url(':/images/checkbox_partly_checked_disabled'); +} + +/****************************************************** +QWidget +******************************************************/ + +QWidget { /* Remove Annoying Focus Rectangle */ + outline: 0; +} + + +/****************************************************** +******************************************************* +STYLING OF SPECIFIC CUSTOM UI PARTS + +Below each section should be for a specific UI class/file +not only Qt standard elements +******************************************************* +******************************************************/ + +/****************************************************** +AboutDialog +******************************************************/ + +QDialog#AboutDialog QLabel#label, +QDialog#AboutDialog QLabel#copyrightLabel, +QDialog#AboutDialog QLabel#label_2 { /* About Dash Contents */ + margin-left: auto10px; +} + +QDialog#AboutDialog QLabel#label_2 { /* Margin for About Dash text */ + margin-right: 10px; +} + +/****************************************************** +AddressBookPage +******************************************************/ + +QWidget#AddressBookPage { +} + +QWidget#AddressBookPage QTableView { /* Address Listing */ + font-size: 12px; +} + +QWidget#AddressBookPage QTableView::item { +} + +QWidget#AddressBookPage QHeaderView::section { /* Min width for Windows fix */ + min-width: 260px; +} + +/****************************************************** +AskPassphraseDialog +******************************************************/ + +QDialog#AskPassphraseDialog QLabel#passLabel1, +QDialog#AskPassphraseDialog QLabel#passLabel2, +QDialog#AskPassphraseDialog QLabel#passLabel3 { + qproperty-alignment: 'AlignVCenter | AlignRight'; + min-width: 170px; + min-height: 33px; /* base width of 25px for QLineEdit, plus padding and border */ +} + +/****************************************************** +CoinControlDialog +******************************************************/ + +QDialog#CoinControlDialog .QLabel#labelCoinControlQuantityText { /* Coin Control Quantity Label */ + min-height: 30px; + padding-left: 15px; +} +QDialog#CoinControlDialog .QLabel#labelCoinControlQuantity { /* Coin Control Quantity */ + min-height: 30px; +} +QDialog#CoinControlDialog .QLabel#labelCoinControlBytesText { /* Coin Control Bytes Label */ + padding-left: 15px; +} +QDialog#CoinControlDialog .QLabel#labelCoinControlBytes { /* Coin Control Bytes */ +} +QDialog#CoinControlDialog .QLabel#labelCoinControlAmountText { /* Coin Control Amount Label */ + min-height: 30px; + padding-left: 15px; +} +QDialog#CoinControlDialog .QLabel#labelCoinControlAmount { /* Coin Control Amount */ + min-height: 30px; +} +QDialog#CoinControlDialog .QLabel#labelCoinControlPriorityText { /* Coin Control Priority Label */ + padding-left: 15px; +} +QDialog#CoinControlDialog .QLabel#labelCoinControlPriority { /* Coin Control Priority */ +} +QDialog#CoinControlDialog .QLabel#labelCoinControlFeeText { /* Coin Control Fee Label */ + min-height: 30px; + padding-left: 15px; +} +QDialog#CoinControlDialog .QLabel#labelCoinControlFee { /* Coin Control Fee */ + min-height: 30px; +} +QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutputText { /* Coin Control Low Output Label */ + padding-left: 15px; +} +QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutput { /* Coin Control Low Output */ +} +QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFeeText { /* Coin Control After Fee Label */ + min-height: 30px; + padding-left: 15px; +} +QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFee { /* Coin Control After Fee */ + min-height: 30px; +} +QDialog#CoinControlDialog .QLabel#labelCoinControlChangeText { /* Coin Control Change Label */ + padding-left: 15px; +} +QDialog#CoinControlDialog .QLabel#labelCoinControlChange { /* Coin Control Change */ + +} + +QDialog#CoinControlDialog .QFrame#frame .QPushButton#pushButtonSelectAll { /* (un)select all button */ + padding-left: 10px; + padding-right: 10px; + min-height: 25px; +} +QDialog#CoinControlDialog .QFrame#frame .QPushButton#pushButtonToggleLock { /* Toggle lock state button */ + padding-left: 10px; + padding-right: 10px; + min-height: 25px; +} + +QDialog#CoinControlDialog .QDialogButtonBox#buttonBox QPushButton { /* Coin Control 'OK' button */ +} + +QDialog#CoinControlDialog QHeaderView::section:first { /* Bug Fix: the number 1 displays in this table for some reason... */ + color: transparent; +} + +QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item { +} +QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:selected { /* Coin Control Item (selected) */ +} +QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:checked { /* Coin Control Item (checked) */ +} + +QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:selected { /* Coin Control Branch Icon */ + background-repeat: no-repeat; + background-position: center; +} +QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:checked { /* Coin Control Branch Icon */ + background-repeat: no-repeat; + background-position: center; +} + +QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::seperator { + +} + +/****************************************************** +EditAddressDialog +******************************************************/ + +QDialog#EditAddressDialog { +} + +QDialog#EditAddressDialog QLabel { + qproperty-alignment: 'AlignVCenter | AlignRight'; + min-height: 27px; + font-weight: normal; + padding-right: 5px; +} + +/****************************************************** +HelpMessageDialog +******************************************************/ + +QDialog#HelpMessageDialog { +} + +QDialog#HelpMessageDialog QScrollArea { +} + +QDialog#HelpMessageDialog QTextEdit { +} + +/****************************************************** +MasternodeList +******************************************************/ + +MasternodeList QLabel#label_filter_2, +MasternodeList QLabel#label_count_2, +MasternodeList QLabel#countLabelDIP3 { + font-size: 15px; +} + +/****************************************************** +ModalOverlay +******************************************************/ + +QWidget#bgWidget { /* The frame overlaying the overview-page */ + padding-left: 10px; + padding-right: 10px; +} + +QWidget#bgWidget .QPushButton#warningIcon { + background-color: transparent; + width: 64px; + height: 64px; + padding: 5px; +} + +QWidget#contentWidget { /* The actual content with the text/buttons/etc... */ + margin: 0; + padding-top: 20px; + padding-bottom: 20px; + border: 1px solid; + border-radius: 10px; +} + +QWidget#bgWidget .QPushButton#closeButton { + margin-right: 50px; +} + +/****************************************************** +OpenURIDialog +******************************************************/ + +QDialog#OpenURIDialog { +} + +QDialog#OpenURIDialog QLabel#label { /* URI Label */ + font-weight: bold; +} + +/****************************************************** +OptionsDialog +******************************************************/ + +QDialog#OptionsDialog { +} + +QDialog#OptionsDialog QValueComboBox, +QDialog#OptionsDialog QSpinBox { +} + +QDialog#OptionsDialog QValidatedLineEdit, +QDialog#OptionsDialog QValidatedLineEdit:disabled, +QDialog#OptionsDialog QLineEdit, QDialog#OptionsDialog QLineEdit:disabled { + qproperty-alignment: 'AlignVCenter | AlignLeft'; +} + +QDialog#OptionsDialog > QLabel { + qproperty-alignment: 'AlignVCenter'; + min-height: 20px; +} + +QDialog#OptionsDialog QWidget#tabDisplay QValueComboBox { +} + +QDialog#OptionsDialog QLabel#label_3 { /* Translations Missing? Label */ + qproperty-alignment: 'AlignVCenter | AlignCenter'; + padding-bottom: 8px; +} + +QDialog#OptionsDialog QGroupBox { +} + +/****************************************************** +OverviewPage Balances +******************************************************/ + +QWidget .QFrame#frame { /* Wallet Balance */ + min-width: 490px; +} + +QWidget .QFrame#frame > .QLabel { + min-width: 100px; + font-weight: normal; + min-height: 30px; +} + +QWidget .QFrame#frame .QLabel#label_5 { /* Wallet Label */ + min-width: 180px; + color: #008de4; + margin-top: 0; + margin-right: 5px; + padding-right: 5px; + font-weight: bold; + font-size: 18px; + min-height: 30px; +} + +QWidget .QFrame#frame .QLabel#labelWalletStatus { /* Wallet Sync Status */ + qproperty-alignment: 'AlignVCenter | AlignLeft'; + color: #ff4500; + margin-left: 3px; +} + +QWidget .QFrame#frame .QLabel#labelSpendable { /* Spendable Header */ + qproperty-alignment: 'AlignVCenter | AlignLeft'; + font-size: 12px; + margin-left: 18px; +} + +QWidget .QFrame#frame .QLabel#labelWatchonly { /* Watch-only Header */ + qproperty-alignment: 'AlignVCenter | AlignLeft'; + font-size: 12px; + margin-left: 16px; +} + +QWidget .QFrame#frame .QLabel#labelBalanceText { /* Available Balance Label */ + qproperty-alignment: 'AlignVCenter | AlignRight'; + min-width: 100px; + margin-right: 5px; + padding-right: 5px; + font-size: 14px; + font-weight: bold; + min-height: 35px; +} + +QWidget .QFrame#frame .QLabel#labelBalance { /* Available Balance */ + qproperty-alignment: 'AlignVCenter | AlignLeft'; + color: #008de4; + font-size: 16px; + font-weight: bold; + margin-left: 0px; +} + +QWidget .QFrame#frame .QLabel#labelWatchAvailable { /* Watch-only Balance */ + qproperty-alignment: 'AlignVCenter | AlignLeft'; + font-size: 12px; + margin-left: 16px; +} + +QWidget .QFrame#frame .QLabel#labelPendingText { /* Pending Balance Label */ + qproperty-alignment: 'AlignVCenter | AlignRight'; + min-width: 100px; + font-size: 12px; + margin-right: 5px; + padding-right: 5px; +} + +QWidget .QFrame#frame .QLabel#labelUnconfirmed { /* Pending Balance */ + qproperty-alignment: 'AlignVCenter | AlignLeft'; + font-size: 12px; + margin-left: 0px; +} + +QWidget .QFrame#frame .QLabel#labelWatchPending { /* Watch-only Pending Balance */ + qproperty-alignment: 'AlignVCenter | AlignLeft'; + font-size: 12px; + margin-left: 16px; +} + +QWidget .QFrame#frame .QLabel#labelImmatureText { /* Immature Balance Label */ + qproperty-alignment: 'AlignVCenter | AlignRight'; + min-width: 100px; + font-size: 12px; + margin-right: 5px; + padding-right: 5px; +} + +QWidget .QFrame#frame .QLabel#labelImmature { /* Immature Balance */ + qproperty-alignment: 'AlignVCenter | AlignLeft'; + font-size: 12px; + margin-left: 0px; +} + +QWidget .QFrame#frame .QLabel#labelWatchImmature { /* Watch-only Immature Balance */ + qproperty-alignment: 'AlignVCenter | AlignLeft'; + font-size: 12px; + margin-left: 16px; +} + +QWidget .QFrame#frame .QLabel#labelTotalText { /* Total Balance Label */ + qproperty-alignment: 'AlignVCenter | AlignRight'; + min-width: 100px; + font-size: 12px; + margin-right: 5px; + padding-right: 5px; +} + +QWidget .QFrame#frame .QLabel#labelTotal { /* Total Balance */ + qproperty-alignment: 'AlignVCenter | AlignLeft'; + font-size: 12px; + margin-left: 0px; +} + +QWidget .QFrame#frame .QLabel#labelWatchTotal { /* Watch-only Total Balance */ + qproperty-alignment: 'AlignVCenter | AlignLeft'; + font-size: 12px; + margin-left: 16px; +} + +/****************************************************** +OverviewPage PrivateSend +******************************************************/ + +QWidget .QFrame#framePrivateSend { /* PrivateSend Widget */ + background-color: transparent; + max-width: 451px; + min-width: 451px; + max-height: 350px; +} + +QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetPrivateSendHeader { /* PrivateSend Header */ + background-color: transparent; + max-width: 421px; + min-width: 421px; +} + +QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendHeader { /* PrivateSend Header */ + qproperty-alignment: 'AlignVCenter | AlignLeft'; + min-width: 180px; + color: #008de4; + margin-top: 0; + margin-right: 5px; + padding-right: 5px; + font-weight: bold; + font-size: 18px; + min-height: 30px; +} + +QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendSyncStatus { /* PrivateSend Sync Status */ + qproperty-alignment: 'AlignVCenter | AlignLeft'; + color: #ff4500; + margin-left: 2px; + padding-right: 5px; +} + +QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget { + max-width: 451px; + max-height: 175px; +} + +QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget > .QLabel { + min-width: 175px; + font-weight: normal; + min-height: 25px; +} + +QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabledText { /* PrivateSend Enabled Status Label */ + qproperty-alignment: 'AlignVCenter | AlignRight'; + min-width: 160px; + margin-right: 5px; + padding-right: 5px; +} + +QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabled { /* PrivateSend Enabled Status */ + +} + +QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelCompletitionText { /* PrivateSend Completion Label */ + qproperty-alignment: 'AlignVCenter | AlignRight'; + min-width: 160px; + margin-right: 5px; + padding-right: 5px; +} + +QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress { /* PrivateSend Completion */ + border: 1px solid #aaa; + border-radius: 1px; + margin-right: 43px; + text-align: right; + color: #aaa; +} + +QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress::chunk { + background-color: #008de4; + width: 1px; +} + +QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymizedText { /* PrivateSend Balance Label */ + qproperty-alignment: 'AlignVCenter | AlignRight'; + min-width: 160px; + margin-right: 5px; + padding-right: 5px; +} + +QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymized { /* PrivateSend Balance */ + +} + +QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountAndRoundsText { /* PrivateSend Amount and Rounds Label */ + qproperty-alignment: 'AlignVCenter | AlignRight'; + min-width: 160px; + margin-right: 5px; + padding-right: 5px; +} + +QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountRounds { /* PrivateSend Amount and Rounds */ + +} + +QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenomText { /* PrivateSend Submitted Denom Label */ + qproperty-alignment: 'AlignVCenter | AlignRight'; + min-width: 160px; + margin-right: 5px; + padding-right: 5px; +} + +QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenom { /* PrivateSend Submitted Denom */ + +} + +QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetLastMessageAndButtons { + max-width: 451px; +} + +QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendLastMessage { /* PrivateSend Status Notifications */ + qproperty-alignment: 'AlignVCenter | AlignCenter'; + min-width: 288px; + min-height: 43px; + font-size: 11px; +} + +QWidget .QFrame#framePrivateSend QPushButton:focus { + border: none; + outline: none; +} + +QWidget .QFrame#framePrivateSend .QPushButton#togglePrivateSend { /* Start PrivateSend Mixing */ + min-height: 40px; + font-size: 15px; + font-weight: normal; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 6px; +} + +QWidget .QFrame#framePrivateSend .QPushButton#togglePrivateSend:hover { + +} + +/****************************************************** +OverviewPage RecentTransactions +******************************************************/ + +QWidget .QFrame#frame_2 { /* Transactions Widget */ + min-width: 510px; + margin-right: 20px; + margin-left: 0; + margin-top: 0; +} + +QWidget .QFrame#frame_2 .QLabel#label_4 { /* Recent Transactions Label */ + min-width: 180px; + color: #008de4; + margin-left: 67px; + margin-top: 0; + margin-right: 5px; + padding-right: 5px; + font-weight: bold; + font-size: 18px; + min-height: 30px; +} + +QWidget .QFrame#frame_2 .QLabel#labelTransactionsStatus { /* Recent Transactions Sync Status */ + qproperty-alignment: 'AlignBottom | AlignRight'; + color: #ff4500; + min-width: 93px; + margin-top: 0; + margin-left: 16px; + margin-right: 5px; + min-height: 16px; +} + +QWidget .QFrame#frame_2 QListView { /* Transaction List */ + font-weight: normal; + font-size: 12px; + max-width: 369px; + margin-top: 12px; + margin-left: 0px; /* CSS Voodoo - set to -66px to hide default transaction icons */ +} + +/****************************************************** +ReceiveCoinsDialog +******************************************************/ + + +QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label, +QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label_2, +QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label_3, +QWidget#ReceiveCoinsDialog .QFrame#frame .QLabel#label_6 { /* Label Label */ + min-width: 102px; + padding-right: 5px; + font-size: 15px; +} + +QWidget#ReceiveCoinsDialog .QFrame#frame QTableView#recentRequestsView::item { /* Recent Requests Table */ + +} + +/****************************************************** +RPCConsole +******************************************************/ + +QWidget#RPCConsole { /* RPC Console Dialog Box */ +} + +QWidget#RPCConsole QWidget#tab_info QLabel#label_11, +QWidget#RPCConsole QWidget#tab_info QLabel#label_10 { /* Margin between Network and Block Chain headers */ + qproperty-alignment: 'AlignBottom'; + min-height: 25px; + min-width: 180px; +} + +QWidget#RPCConsole QWidget#tab_peers QLabel#peerHeading { /* Peers Info Header */ + color: #1c75bc; +} + +QWidget#RPCConsole QPushButton#openDebugLogfileButton { + max-width: 60px; +} + +QWidget#RPCConsole QTextEdit#messagesWidget { /* Console Messages Window */ + background-color: transparent; + border: 0; +} + +QWidget#RPCConsole QLineEdit#lineEdit { /* Console Input */ +} + +QWidget#RPCConsole QPushButton#clearButton, +QWidget#RPCConsole QPushButton#fontSmallerButton, +QWidget#RPCConsole QPushButton#fontBiggerButton { /* Console Font and Clear Buttons */ + background-color: transparent; + padding-left: 10px; + padding-right: 10px; +} + +QWidget#RPCConsole QPushButton#promptIcon { /* Prompt Icon */ + background-color: transparent; +} + +QWidget#RPCConsole .QGroupBox #line { /* Network In Line */ + background-color: #096e03; +} + +QWidget#RPCConsole .QGroupBox #line_2 { /* Network Out Line */ + background-color: #eb4034; +} + +/****************************************************** +SendCoinsDialog +******************************************************/ + +QDialog#SendCoinsDialog .QFrame#frameCoinControl { /* Coin Control Section */ + +} + +QDialog#SendCoinsDialog .QFrame#frameCoinControl .QPushButton#pushButtonCoinControl { /* Coin Control Inputs Button */ + padding-left: 10px; + padding-right: 10px; + min-height: 25px; +} + +QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlFeatures { /* Coin Control Header */ + color: #999; + font-weight: normal; + font-size: 14px; +} + +QDialog#SendCoinsDialog .QFrame#frameCoinControl .QWidget#widgetCoinControl { /* Coin Control Inputs */ +} + +QDialog#SendCoinsDialog .QFrame#frameCoinControl .QWidget#widgetCoinControl > .QLabel { /* Coin Control Inputs Labels */ + padding: 2px; +} + +QDialog#SendCoinsDialog .QFrame#frameCoinControl .QValidatedLineEdit#lineEditCoinControlChange { /* Custom Change Address */ +} + +QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlChangeLabel { /* Custom Change Address Validation Label */ + font-weight: normal; + qproperty-margin: -6; + margin-right: 112px; +} + +QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlInsuffFunds { /* Insufficient Funds Label */ + color: red; +} + +QDialog#SendCoinsDialog .QScrollArea#scrollArea .QWidget#scrollAreaWidgetContents { /* Send To Widget */ + background-color: transparent; +} + +/* This QLabel uses name = "label" which conflicts with Address Book -> New Address */ +/* To maximize backwards compatibility this formatting has been removed */ + +QDialog#SendCoinsDialog QLabel#label { + min-height: 27px; +} + +QDialog#SendCoinsDialog QLabel#labelBalance { + margin-left: 0px; + padding-left: 0px; + min-height: 27px; +} + +#checkboxSubtractFeeFromAmount { + padding-left: 10px; +} + +/****************************************************** +SendCoinsEntry +******************************************************/ + +QStackedWidget#SendCoinsEntry .QFrame#SendCoins > .QLabel { /* Send Coin Entry Labels */ + background-color: transparent; + min-width: 50px; + font-weight: normal; + font-size: 15px; + min-height: 25px; + margin-right: 5px; + padding-right: 5px; +} + +QStackedWidget#SendCoinsEntry .QFrame#SendCoins .QLabel#amountLabel { +} + +QStackedWidget#SendCoinsEntry .QValidatedLineEdit#payTo { /* Pay To Input Field */ +} + +QStackedWidget#SendCoinsEntry .QToolButton { /* General Settings for Pay To Icons */ + background-color: transparent; + padding-left: 5px; + padding-right: 5px; + border: 0; + outline: 0; +} + +QStackedWidget#SendCoinsEntry .QToolButton#addressBookButton { /* Address Book Button */ + padding-left: 10px; +} + +QStackedWidget#SendCoinsEntry .QToolButton#addressBookButton { +} + +QStackedWidget#SendCoinsEntry .QToolButton#pasteButton { +} + +QStackedWidget#SendCoinsEntry .QToolButton#deleteButton { +} + +QStackedWidget#SendCoinsEntry .QLineEdit#addAsLabel { /* Pay To Input Field */ +} + +/****************************************************** +SignVerifyMessageDialog +******************************************************/ + +QDialog#SignVerifyMessageDialog { +} + +QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_SM { /* Address Book Button */ + background-color: transparent; + padding-left: 10px; + padding-right: 10px; +} + +QDialog#SignVerifyMessageDialog QPlainTextEdit { /* Message Signing Text */ + min-height: 50px; +} + +QDialog#SignVerifyMessageDialog QPushButton#pasteButton_SM { /* Paste Button */ + background-color: transparent; + padding-left: 15px; +} + +QDialog#SignVerifyMessageDialog QLineEdit:!focus { /* Font Hack */ + font-size: 10px; +} + +QDialog#SignVerifyMessageDialog QPushButton#copySignatureButton_SM { /* Copy Button */ + background-color: transparent; + padding-left: 10px; + padding-right: 10px; +} + +QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_VM { /* Verify Message - Address Book Button */ + background-color: transparent; + border: 0; + padding-left: 10px; + padding-right: 10px; +} + +/****************************************************** +ShutdownWindow +******************************************************/ + +QWidget#ShutdownWindow { +} + +/****************************************************** +TransactionView +******************************************************/ + +TransactionView QLineEdit { /* Filters */ + margin-bottom: 2px; + margin-right: 1px; + min-width: 111px; + text-align: center; +} + +TransactionView QLineEdit#addressWidget { /* Address Filter */ + margin-bottom: 2px; + margin-right: 1px; + min-width: 405px; + text-align: center; +} + +TransactionView QLineEdit#amountWidget { /* Amount Filter */ + margin-bottom: 2px; + margin-right: 1px; + max-width: 100px; + text-align: center; +} + +TransactionView QComboBox { + margin-bottom: 1px; + margin-right: 1px; +} + +#transactionSumLabel, +#transactionSum { + font-size: 15px; } diff --git a/src/qt/res/css/light.css b/src/qt/res/css/light.css index 97869ad61e89..882d68f1b98c 100644 --- a/src/qt/res/css/light.css +++ b/src/qt/res/css/light.css @@ -1,1444 +1,483 @@ -WalletFrame { -background-color: #fff; -border-top:0px solid #000; -margin:0; -padding-top:20px; -padding-bottom: 20px; -} - -QStatusBar { -background-color:#ffffff; -} - -.QFrame { -background-color:transparent; -border:0px solid #fff; -} - -QMenuBar { -background-color:#fff; -} - -QMenuBar::item { -background-color:#fff; -} - -QMenuBar::item:selected { -background-color: #ffffff; -color: #008de4; -} - -QMenu { -background-color:#f8f6f6; -} - -QMenu::item { -color:#333; -} - -QMenu::item:selected { -background-color: #ffffff; -color: #008de4; -} - -QToolBar { -background-color:#008de4; -border:0; -padding:0; -margin:0; -} - -QToolBar > QToolButton { -background-color:#008de4; -border:0; -font-size: 14px; -min-width: 70px; -min-height: 48%; -max-height: 48%; -padding: 0 10px; -margin: 0; -color:#f5f5f5; -} +/** +Copyright (c) 2020 The Dash Core developers +Distributed under the MIT/X11 software license, see the accompanying +file COPYING or http://www.opensource.org/licenses/mit-license.php. + +--------------------------------------------------------------------- + +This file contains color changes for the dash theme "Light". + +NOTE: This file gets appended to the general.css while its +getting loaded in GUIUtil::loadStyleSheet(). Thus changes made in +general.css may become overwritten by changes in this file. + +Loaded in GUIUtil::loadStyleSheet() in guitil.cpp. +**/ + +/* do not modify! section updated by update-css-files.py + + +# Used colors in light.css for commit 3bebd1a5c + +#333 +#999 +#ccc +#fff +#008de4 +#1c75bc +#333333 +#616161 +#818181 +#82C3E6 +#d2d2d2 +#d7d7d7 +#e2e2e2 +#f0f0f0 +#f2f0f0 +#f2f2f2 +#f6f6f6 +#f7f7f7 +#fcfcfc +#ffffff +#ccfafafa + + +*/ -QToolBar > QToolButton:checked { -border: 0; -font-weight: bold; -} +/****************************************************** +Common stuff +******************************************************/ -QToolBar > QToolButton:disabled { -color: #444; +WalletFrame, +QDialog { + background-color: #f6f6f6; } -QToolBar > QLabel { -border:0; -margin:10px 0 0 0; +QStatusBar { + background-color: #ffffff; } QMessageBox { -background-color:#F8F6F6; -} - -/*******************************************************/ - -QLabel, -QCheckBox, -QRadioButton { /* Base Text Size & Color */ -font-size:12px; -color:#333333; -} - -.QValidatedLineEdit, .QLineEdit { /* Text Entry Fields */ -border: 1px solid #82C3E6; -font-size:11px; -min-height:31px; -outline:0; -padding: 0px 3px 0px 3px; -background-color:#fcfcfc; -} - -.QLineEdit:!focus { -font-size:12px; -} - -.QValidatedLineEdit:disabled, .QLineEdit:disabled { -background-color:#f2f2f2; + background-color: #f6f6f6; } QWidget { /* override text selection background color for all text widgets */ -selection-background-color: #999; + selection-background-color: #999; } -/*******************************************************/ - -QPushButton { /* Global Button Style */ -background-color: #008DE4; -border:0; -border-radius:8px; -color:#ffffff; -font-size:12px; -font-weight:normal; -height: 26px; -padding-left:25px; -padding-right:25px; -padding-top:5px; -padding-bottom:5px; -} - -QPushButton:hover { -background-color: #262626; +QCheckBox, +QLabel, +QListView, +QRadioButton, +QTreeWidget { + color: #333333; } -QPushButton:focus { -border:none; -outline:none; -} +/****************************************************** +QAbstractSpinBox +******************************************************/ -QPushButton:pressed { -border:1px solid #333; +QAbstractSpinBox, +QAbstractSpinBox::up-button, +QAbstractSpinBox::down-button { + background-color: #fcfcfc; + border-color: #82C3E6; + color: #818181; } -QPushButton:disabled { -background-color: #666; -} +/****************************************************** +QComboBox +******************************************************/ QComboBox { /* Dropdown Menus */ -border:1px solid #82C3E6; -padding: 0px 5px 0px 5px; -background:#fcfcfc; -min-height:31px; -color:#818181; + background-color: #fcfcfc; + border-color: #82C3E6; + color: #818181; } QComboBox:checked { -background:#f2f2f2; + background-color: #f2f2f2; } QComboBox:editable { -background: #1c75bc; -color:#616161; -border:0px solid transparent; -} - -QComboBox::drop-down { -width:25px; -border:0px; + background-color: #1c75bc; + color: #616161; } QComboBox QListView { -background:#fff; -padding: 3px; + background-color: #fff; } -QComboBox QAbstractItemView::item { margin:4px; } - QComboBox::item { -color:#818181; + color: #818181; } QComboBox::item:alternate { -background:#fff; + background-color: #fff; } QComboBox::item:selected { -border:0px solid transparent; -background:#f2f2f2; -} - -QComboBox::indicator { -background-color:transparent; -selection-background-color:transparent; -color:transparent; -selection-color:transparent; -} - -QAbstractSpinBox { -border:1px solid #82C3E6; -padding: 0px 5px 0px 5px; -background:#fcfcfc; -min-height:31px; -color:#818181; + background-color: #f2f2f2; } -QAbstractSpinBox::up-button { -subcontrol-origin: border; -subcontrol-position: top right; -width:21px; -background:#fcfcfc; -border-left:0px; -border-right:1px solid #82C3E6; -border-top:1px solid #82C3E6; -border-bottom:0px; -padding-right:1px; -padding-left:5px; -padding-top:2px; -} - -QAbstractSpinBox::down-button { -subcontrol-origin: border; -subcontrol-position: bottom right; -width:21px; -background:#fcfcfc; -border-top:0px; -border-left:0px; -border-right:1px solid #82C3E6; -border-bottom:1px solid #82C3E6; -padding-right:1px; -padding-left:5px; -padding-bottom:2px; -} - -/*******************************************************/ - -QHeaderView { /* Table Header */ -background-color:transparent; -} +/****************************************************** +QHeaderView +******************************************************/ QHeaderView::section { /* Table Header Sections */ -qproperty-alignment:center; -background-color: #008de4; -color:#fff; -min-height:25px; -font-weight:bold; -font-size:11px; -outline:0; -border:0px solid #fff; -border-right:1px solid #fff; -padding-left:5px; -padding-right:5px; -padding-top:2px; -padding-bottom:2px; -} - -QHeaderView::section:last { -border-right: 0px solid #d7d7d7; -} - -.QScrollArea { -background:transparent; -border:0px; -} - -.QTableView { /* Table - has to be selected as a class otherwise it throws off QCalendarWidget */ -border:0px solid #fff; -} - -QTableView::item { /* Table Item */ -background-color:#fcfcfc; -font-size:12px; -} - -QTableView::item:selected { /* Table Item Selected */ -background-color:#f0f0f0; -color:#333; -} - -/* Do NOT apply any styles to QScrollBar here, - * it's OS dependent and should be handled via platform specific code. -*/ - -/*******************************************************/ - -.QTabWidget { -border-bottom:1px solid #333; + background-color: #008de4; + border-color: #fff; + color: #fff; } -.QTabWidget::pane { -border: 1px solid #d7d7d7; -background-color:#fff; -} +/****************************************************** +QLineEdit / QValidatedLineEdit / QPlainTextEdit +******************************************************/ -.QTabWidget QTabBar::tab { -background-color:#f2f0f0; -color:#333; -padding-left:10px; -padding-right:10px; -padding-top:5px; -padding-bottom:5px; -border-top: 1px solid #d7d7d7; +.QValidatedLineEdit, +.QLineEdit, +QPlainTextEdit { /* Text Entry Fields */ + background-color: #fcfcfc; + border-color: #82C3E6; } -.QTabWidget QTabBar::tab:first { -border-left: 1px solid #d7d7d7; +.QValidatedLineEdit:disabled, +.QLineEdit:disabled { + background-color: #f2f2f2; } -.QTabWidget QTabBar::tab:last { -border-right: 1px solid #d7d7d7; -} - -.QTabWidget QTabBar::tab:selected, .QTabWidget QTabBar::tab:hover { -background-color:#ffffff; -color:#333; -} +/****************************************************** +QMenu +******************************************************/ -.QTabWidget .QWidget { -color:#333; +QMenu { + background-color: #f6f6f6; } -.QTabWidget .QWidget QAbstractSpinBox { +QMenu::item { + color: #333; } -.QTabWidget .QWidget QAbstractSpinBox::down-button { +QMenu::item:selected { + background-color: #ffffff; + color: #008de4; } -.QTabWidget .QWidget QAbstractSpinBox::up-button { -} +/****************************************************** +QMenuBar +******************************************************/ -.QTabWidget .QWidget QComboBox { +QMenuBar { + background-color: #fff; } -/* DIALOG BOXES */ +/****************************************************** +QProgressDialog +******************************************************/ .QProgressDialog { -background-color: #F8F6F6; + background-color: #f6f6f6; } -QDialog QWidget { /* Remove Annoying Focus Rectangle */ -outline: 0; -} +/****************************************************** +QPushButton - Special case, light buttons +******************************************************/ -/* SHUTDOWN WINDOW */ - -QWidget#ShutdownWindow { -background-color: #F8F6F6; +QWidget#AddressBookPage QPushButton#newAddress:disabled, +QWidget#AddressBookPage QPushButton#copyAddress:disabled, +QWidget#AddressBookPage QPushButton#showAddressQRCode:disabled, +QWidget#AddressBookPage QPushButton#deleteAddress:disabled, +QDialog#OpenURIDialog QPushButton#selectFileButton:disabled, +QDialog#SendCoinsDialog .QPushButton#addButton:disabled, +QDialog#SendCoinsDialog .QPushButton#clearButton:disabled, +QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:disabled, +QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:disabled, +QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:disabled, +QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:disabled, +QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:disabled { + background-color: #e2e2e2; + border-color: #d2d2d2; + color: #d2d2d2; } -/*******************************************************/ -/* FILE MENU */ +/****************************************************** +QRadioButton +******************************************************/ -/* Dialog: Open URI */ -QDialog#OpenURIDialog { -background-color:#F8F6F6; -} +/***** No light.css specific coloring here yet *****/ -QDialog#OpenURIDialog QLabel#label { /* URI Label */ -font-weight:bold; -} +/****************************************************** +QScrollArea +******************************************************/ -QDialog#OpenURIDialog QPushButton#selectFileButton { /* ... Button */ -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb); -border:1px solid #d2d2d2; -color:#616161; -padding-left:10px; -padding-right:10px; -} +/***** No light.css specific coloring here yet *****/ -QDialog#OpenURIDialog QPushButton#selectFileButton:hover { -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb); -color:#333; -} +/****************************************************** +QScrollBar +******************************************************/ -QDialog#OpenURIDialog QPushButton#selectFileButton:pressed { -border:1px solid #9e9e9e; -} +/* Do NOT apply any styles to QScrollBar here, +* it's OS dependent and should be handled via platform specific code. +*/ -/* Dialog: Sign / Verify Message */ -QDialog#SignVerifyMessageDialog { -background-color:#F8F6F6; -} +/****************************************************** +QTableView +******************************************************/ -QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_SM { /* Address Book Button */ -background-color:transparent; -padding-left:10px; -padding-right:10px; +.QTableView { /* Table - has to be selected as a class otherwise it throws off QCalendarWidget */ + background-color: #fff; } -QDialog#SignVerifyMessageDialog QPlainTextEdit { /* Message Signing Text */ -border:1px solid #82C3E6; -background-color:#fff; +QTableView::item { /* Table Item */ + background-color: #fcfcfc; } -QDialog#SignVerifyMessageDialog QPushButton#pasteButton_SM { /* Paste Button */ -background-color:transparent; -padding-left:15px; +QTableView::item:selected { /* Table Item Selected */ + background-color: #f0f0f0; + color: #333; } -QDialog#SignVerifyMessageDialog QLineEdit:!focus { /* Font Hack */ -font-size:10px; -} +/****************************************************** +QTableWidget +******************************************************/ -QDialog#SignVerifyMessageDialog QPushButton#copySignatureButton_SM { /* Copy Button */ -background-color:transparent; -padding-left:10px; -padding-right:10px; +QTableWidget { + background-color: #fff; } -QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM { /* Clear Button */ -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb); -border:1px solid #d2d2d2; -color:#616161; -padding-left:10px; -padding-right:10px; -} +/****************************************************** +QTabWidget +******************************************************/ -QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:hover { -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb); -color:#333; +.QTabWidget { + border-color: #333; } -QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:pressed { -border:1px solid #9e9e9e; +.QTabWidget::pane { + background-color: #fff; + border-color: #d7d7d7; } -QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_VM { /* Verify Message - Address Book Button */ -background-color:transparent; -border:0; -padding-left:10px; -padding-right:10px; +.QTabWidget QTabBar::tab { + background-color: #f2f0f0; + border-color: #d7d7d7; + color: #333; } -QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM { /* Verify Message - Clear Button */ -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb); -border:1px solid #d2d2d2; -color:#616161; -padding-left:10px; -padding-right:10px; +.QTabWidget QTabBar::tab:first, +.QTabWidget QTabBar::tab:last { + border-color: #d7d7d7; } -QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:hover { -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb); -color:#333; +.QTabWidget QTabBar::tab:selected, +.QTabWidget QTabBar::tab:hover { + background-color: #ffffff; + color: #333; } -QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:pressed { -border:1px solid #9e9e9e; +.QTabWidget .QWidget { + color: #333; } -/* Dialog: Send and Receive */ -QWidget#AddressBookPage { -background-color:#F8F6F6; -} +/****************************************************** +QTextEdit +******************************************************/ -QWidget#AddressBookPage QPushButton#newAddress { /* New Address Button */ -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb); -border:1px solid #d2d2d2; -color:#616161; -padding-left:10px; -padding-right:10px; +QTextEdit { + border-color: #d7d7d7; } -QWidget#AddressBookPage QPushButton#newAddress:hover { -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb); -color:#333; -} +/****************************************************** +QToolBar / QToolButton +******************************************************/ -QWidget#AddressBookPage QPushButton#newAddress:pressed { -border:1px solid #9e9e9e; -} +/***** No light.css specific coloring here yet *****/ -QWidget#AddressBookPage QPushButton#copyAddress { /* Copy Address Button */ -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb); -border:1px solid #d2d2d2; -color:#616161; -padding-left:10px; -padding-right:10px; -} +/****************************************************** +QTreeWidget +******************************************************/ -QWidget#AddressBookPage QPushButton#copyAddress:hover { -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb); -color:#333; +QTreeWidget { + background-color: #fff; } -QWidget#AddressBookPage QPushButton#copyAddress:pressed { -border:1px solid #9e9e9e; -} +/****************************************************** +QWidget +******************************************************/ -QWidget#AddressBookPage QPushButton#showAddressQRCode { /* Show Address QR code Button */ -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb); -border:1px solid #d2d2d2; -color:#616161; -padding-left:10px; -padding-right:10px; -} +/***** No light.css specific coloring here yet *****/ -QWidget#AddressBookPage QPushButton#showAddressQRCode:hover { -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb); -color:#333; -} -QWidget#AddressBookPage QPushButton#showAddressQRCode:pressed { -border:1px solid #9e9e9e; -} +/****************************************************** +******************************************************* +STYLING OF SPECIFIC CUSTOM UI PARTS -QWidget#AddressBookPage QPushButton#deleteAddress { /* Delete Address Button */ -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb); -border:1px solid #d2d2d2; -color:#616161; -padding-left:10px; -padding-right:10px; -} +Below each section should be for a specific UI class/file +not only Qt standard elements +******************************************************* +******************************************************/ -QWidget#AddressBookPage QPushButton#deleteAddress:hover { -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb); -color:#333; -} +/****************************************************** +AboutDialog +******************************************************/ -QWidget#AddressBookPage QPushButton#deleteAddress:pressed { -border:1px solid #9e9e9e; -} +/***** No light.css specific coloring here yet *****/ -QWidget#AddressBookPage QTableView { /* Address Listing */ -font-size:12px; -} +/****************************************************** +AddressBookPage +******************************************************/ -QWidget#AddressBookPage QHeaderView::section { /* Min width for Windows fix */ -min-width:260px; +QWidget#AddressBookPage { + background-color: #f6f6f6; } -/* SETTINGS MENU */ +/****************************************************** +AskPassphraseDialog +******************************************************/ -/* Encrypt Wallet and Change Passphrase Dialog */ QDialog#AskPassphraseDialog { -background-color:#F8F6F6; -} - -QDialog#AskPassphraseDialog QLabel#passLabel1, QDialog#AskPassphraseDialog QLabel#passLabel2, QDialog#AskPassphraseDialog QLabel#passLabel3 { -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:170px; -min-height:33px; /* base width of 25px for QLineEdit, plus padding and border */ -} - -/* Options Dialog */ -QDialog#OptionsDialog { -background-color:#F8F6F6; -} - -QDialog#OptionsDialog QValueComboBox, QDialog#OptionsDialog QSpinBox { -} - -QDialog#OptionsDialog QValidatedLineEdit, QDialog#OptionsDialog QValidatedLineEdit:disabled, QDialog#OptionsDialog QLineEdit, QDialog#OptionsDialog QLineEdit:disabled { -qproperty-alignment: 'AlignVCenter | AlignLeft'; -} - -QDialog#OptionsDialog > QLabel { -qproperty-alignment: 'AlignVCenter'; -min-height:20px; + background-color: #f6f6f6; } -QDialog#OptionsDialog QWidget#tabDisplay QValueComboBox { -} - -QDialog#OptionsDialog QLabel#label_3 { /* Translations Missing? Label */ -qproperty-alignment: 'AlignVCenter | AlignCenter'; -color:#818181; -padding-bottom:8px; -} - -/* TOOLS MENU */ - -QWidget#RPCConsole { /* RPC Console Dialog Box */ -background-color:#F8F6F6; -} +/****************************************************** +CoinControlDialog +******************************************************/ -QWidget#RPCConsole QWidget#tab_info QLabel#label_11, QWidget#RPCConsole QWidget#tab_info QLabel#label_10 { /* Margin between Network and Block Chain headers */ -qproperty-alignment: 'AlignBottom'; -min-height:25px; -min-width:180px; -} - -QWidget#RPCConsole QWidget#tab_peers QLabel#peerHeading { /* Peers Info Header */ -color:#1c75bc; -} - -QWidget#RPCConsole QPushButton#openDebugLogfileButton { -max-width:60px; -} - -QWidget#RPCConsole QTextEdit#messagesWidget { /* Console Messages Window */ -border:0; -} - -QWidget#RPCConsole QLineEdit#lineEdit { /* Console Input */ +QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:selected { /* Coin Control Item (selected) */ + background-color: #f7f7f7; + color: #333; } -QWidget#RPCConsole QPushButton#clearButton, QWidget#RPCConsole QPushButton#fontSmallerButton, QWidget#RPCConsole QPushButton#fontBiggerButton { /* Console Font and Clear Buttons */ -background-color:transparent; -padding-left:10px; -padding-right:10px; +QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:checked { /* Coin Control Item (checked) */ + background-color: #f7f7f7; + color: #333; } -QWidget#RPCConsole QPushButton#promptIcon { /* Prompt Icon */ -background-color:transparent; +QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:selected { /* Coin Control Branch Icon */ + background-color: #f7f7f7; + color: #333; } -QWidget#RPCConsole .QGroupBox #line { /* Network In Line */ -background-color:#00ff00; +QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:checked { /* Coin Control Branch Icon */ + background-color: #f7f7f7; + color: #333; } -QWidget#RPCConsole .QGroupBox #line_2 { /* Network Out Line */ -background-color:#ff0000; -} +/****************************************************** +EditAddressDialog +******************************************************/ -/* HELP MENU */ +/***** No light.css specific coloring here yet *****/ -/* Command Line Options Dialog */ -QDialog#HelpMessageDialog { -background-color:#F8F6F6; -} +/****************************************************** +HelpMessageDialog +******************************************************/ QDialog#HelpMessageDialog QScrollArea * { -background-color:#ffffff; -} - -/* About Dash Dialog */ -QDialog#AboutDialog { -background-color:#F8F6F6; -} - -QDialog#AboutDialog QLabel#label, QDialog#AboutDialog QLabel#copyrightLabel, QDialog#AboutDialog QLabel#label_2 { /* About Dash Contents */ -margin-left:10px; -} - -QDialog#AboutDialog QLabel#label_2 { /* Margin for About Dash text */ -margin-right:10px; -} - -/* Edit Address Dialog */ -QDialog#EditAddressDialog { -background-color:#F8F6F6; -} - -QDialog#EditAddressDialog QLabel { -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-height:27px; -font-weight:normal; -padding-right:5px; -} - -/* OVERVIEW SCREEN */ - -QWidget .QFrame#frame { /* Wallet Balance */ -min-width:490px; -} - -QWidget .QFrame#frame > .QLabel { -min-width:190px; -font-weight:normal; -min-height:30px; -} - -QWidget .QFrame#frame .QLabel#label_5 { /* Wallet Label */ -min-width:180px; -color:#008de4; -margin-top:0; -margin-right:5px; -padding-right:5px; -font-weight:bold; -font-size:18px; -min-height:30px; -} - -QWidget .QFrame#frame .QLabel#labelWalletStatus { /* Wallet Sync Status */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -color: red; -margin-left:3px; -} - -QWidget .QFrame#frame .QLabel#labelSpendable { /* Spendable Header */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:18px; -} - -QWidget .QFrame#frame .QLabel#labelWatchonly { /* Watch-only Header */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:16px; -} - -QWidget .QFrame#frame .QLabel#labelBalanceText { /* Available Balance Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -background-color:#F8F6F6; -margin-right:5px; -padding-right:5px; -font-size:14px; -font-weight: bold; -min-height:35px; -} - -QWidget .QFrame#frame .QLabel#labelBalance { /* Available Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -color:#1c75bc; -font-size:16px; -font-weight: bold; -margin-left:0px; -} - -QWidget .QFrame#frame .QLabel#labelWatchAvailable { /* Watch-only Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:16px; -} - -QWidget .QFrame#frame .QLabel#labelPendingText { /* Pending Balance Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -font-size:12px; -background-color:#F8F6F6; -margin-right:5px; -padding-right:5px; -} - -QWidget .QFrame#frame .QLabel#labelUnconfirmed { /* Pending Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:0px; -} - -QWidget .QFrame#frame .QLabel#labelWatchPending { /* Watch-only Pending Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:16px; -} - -QWidget .QFrame#frame .QLabel#labelImmatureText { /* Immature Balance Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -font-size:12px; -background-color:#F8F6F6; -margin-right:5px; -padding-right:5px; -} - -QWidget .QFrame#frame .QLabel#labelImmature { /* Immature Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:0px; -} - -QWidget .QFrame#frame .QLabel#labelWatchImmature { /* Watch-only Immature Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:16px; -} - -QWidget .QFrame#frame .QLabel#labelTotalText { /* Total Balance Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -font-size:12px; -background-color:#F8F6F6; -margin-right:5px; -padding-right:5px; -} - -QWidget .QFrame#frame .QLabel#labelTotal { /* Total Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:0px; -} - -QWidget .QFrame#frame .QLabel#labelWatchTotal { /* Watch-only Total Balance */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -font-size:12px; -margin-left:16px; -} - -/* PRIVATESEND WIDGET */ - -QWidget .QFrame#framePrivateSend { /* PrivateSend Widget */ -background-color:transparent; -max-width: 451px; -min-width: 451px; -max-height: 350px; -} - -QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetPrivateSendHeader { /* PrivateSend Header */ -background-color:transparent; -max-width: 421px; -min-width: 421px; -} - -QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendHeader { /* PrivateSend Header */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -min-width:180px; -color:#008de4; -margin-top:0; -margin-right:5px; -padding-right:5px; -font-weight: bold; -font-size:18px; -min-height:30px; -} -/******************************************************************/ -QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendSyncStatus { /* PrivateSend Sync Status */ -qproperty-alignment: 'AlignVCenter | AlignLeft'; -color: red; -margin-left:2px; -padding-right:5px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget { -max-width: 451px; -max-height: 175px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget > .QLabel { -min-width:175px; -font-weight:normal; -min-height:25px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabledText { /* PrivateSend Enabled Status Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -background-color:#F8F6F6; -margin-right:5px; -padding-right:5px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabled { /* PrivateSend Enabled Status */ - -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelCompletitionText { /* PrivateSend Completion Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -background-color:#F8F6F6; -margin-right:5px; -padding-right:5px; - -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress { /* PrivateSend Completion */ -border: 1px solid #818181; -border-radius: 1px; -margin-right:43px; -text-align: right; -color:#818181; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress::chunk { -background-color: #008de4; -width:1px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymizedText { /* PrivateSend Balance Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -background-color:#F8F6F6; -margin-right:5px; -padding-right:5px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymized { /* PrivateSend Balance */ - -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountAndRoundsText { /* PrivateSend Amount and Rounds Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -background-color:#F8F6F6; -margin-right:5px; -padding-right:5px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountRounds { /* PrivateSend Amount and Rounds */ - -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenomText { /* PrivateSend Submitted Denom Label */ -qproperty-alignment: 'AlignVCenter | AlignRight'; -min-width:160px; -background-color:#F8F6F6; -margin-right:5px; -padding-right:5px; -} - -QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenom { /* PrivateSend Submitted Denom */ - -} - -QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetLastMessageAndButtons { -max-width: 451px; -} - -QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendLastMessage { /* PrivateSend Status Notifications */ -qproperty-alignment: 'AlignVCenter | AlignCenter'; -min-width: 288px; -min-height: 43px; -font-size:11px; -color:#818181; -} - -/* PRIVATESEND BUTTONS */ - -QWidget .QFrame#framePrivateSend .QPushButton { /* PrivateSend Buttons - General Attributes */ -border:0px solid #ffffff; -} - -QWidget .QFrame#framePrivateSend QPushButton:focus { -border:none; -outline:none; -} - -QWidget .QFrame#framePrivateSend .QPushButton#togglePrivateSend { /* Start PrivateSend Mixing */ -min-height: 40px; -font-size:15px; -font-weight:normal; -color:#ffffff; -padding-left:10px; -padding-right:10px; -padding-top:5px; -padding-bottom:6px; -} - -QWidget .QFrame#framePrivateSend .QPushButton#togglePrivateSend:hover { - -} - -/* RECENT TRANSACTIONS */ - -QWidget .QFrame#frame_2 { /* Transactions Widget */ -min-width:510px; -margin-right:20px; -margin-left:0; -margin-top:0; -} - -QWidget .QFrame#frame_2 .QLabel#label_4 { /* Recent Transactions Label */ -min-width:180px; -color: #008de4; -margin-left:67px; -margin-top:0; -margin-right:5px; -padding-right:5px; -font-weight:bold; -font-size:18px; -min-height:30px; -} - -QWidget .QFrame#frame_2 .QLabel#labelTransactionsStatus { /* Recent Transactions Sync Status */ -qproperty-alignment: 'AlignBottom | AlignRight'; -color: red; -min-width:93px; -margin-top:0; -margin-left:16px; -margin-right:5px; -min-height:16px; + background-color: #ffffff; } -QWidget .QFrame#frame_2 QListView { /* Transaction List */ -font-weight:normal; -font-size:12px; -max-width:369px; -margin-top:12px; -margin-left:0px; /* CSS Voodoo - set to -66px to hide default transaction icons */ -} +/****************************************************** +MasternodeList +******************************************************/ -/* MODAL OVERLAY */ +/***** No light.css specific coloring here yet *****/ -QWidget#bgWidget { /* The 'frame' overlaying the overview-page */ - background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb); - color:#616161; - padding-left:10px; - padding-right:10px; -} +/****************************************************** +ModalOverlay +******************************************************/ -QWidget#bgWidget .QPushButton#warningIcon { -width:64px; -height:64px; -padding:5px; -background-color:transparent; +QWidget#bgWidget { /* The frame overlaying the overview-page */ + background-color: #ccfafafa; } QWidget#contentWidget { /* The actual content with the text/buttons/etc... */ -background-color: #fff; -border-top:0px solid #000; -margin:0; -padding-top:20px; -padding-bottom: 20px; -} - -QWidget#bgWidget .QPushButton#closeButton { - -} - -/* SEND DIALOG */ - -QDialog#SendCoinsDialog .QFrame#frameCoinControl { /* Coin Control Section */ - -} - -QDialog#SendCoinsDialog .QFrame#frameCoinControl > .QLabel { /* Default Font Color and Size */ -font-weight:normal; -color: #999; + background-color: #fff; + border-color: #ccc; } -QDialog#SendCoinsDialog .QFrame#frameCoinControl .QPushButton#pushButtonCoinControl { /* Coin Control Inputs Button */ -padding-left:10px; -padding-right:10px; -min-height:25px; -} - -QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlFeatures { /* Coin Control Header */ -color:#999; -font-weight:normal; -font-size:14px; -} +/****************************************************** +OpenURIDialog +******************************************************/ -QDialog#SendCoinsDialog .QFrame#frameCoinControl .QWidget#widgetCoinControl { /* Coin Control Inputs */ +QDialog#OpenURIDialog { + background-color: #f6f6f6; } -QDialog#SendCoinsDialog .QFrame#frameCoinControl .QWidget#widgetCoinControl > .QLabel { /* Coin Control Inputs Labels */ -padding:2px; -} +/****************************************************** +OptionsDialog +******************************************************/ -QDialog#SendCoinsDialog .QFrame#frameCoinControl .QValidatedLineEdit#lineEditCoinControlChange { /* Custom Change Address */ +QDialog#OptionsDialog { + background-color: #f6f6f6; } -QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlChangeLabel { /* Custom Change Address Validation Label */ -font-weight:normal; -qproperty-margin:-6; -margin-right:112px; -} +/****************************************************** +OverviewPage Balances +******************************************************/ -QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlInsuffFunds { /* Insufficient Funds Label */ -color: red; -} +/***** No light.css specific coloring here yet *****/ -QDialog#SendCoinsDialog .QScrollArea#scrollArea .QWidget#scrollAreaWidgetContents { /* Send To Widget */ -background:transparent; -} +/****************************************************** +OverviewPage PrivateSend +******************************************************/ -QDialog#SendCoinsDialog .QPushButton#sendButton { /* Send Button */ -padding-left:10px; -padding-right:10px; -} +/***** No light.css specific coloring here yet *****/ -QDialog#SendCoinsDialog .QPushButton#clearButton { /* Clear Button */ -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb); -border:1px solid #d2d2d2; -color:#616161; -padding-left:10px; -padding-right:10px; -} +/****************************************************** +OverviewPage RecentTransactions +******************************************************/ -QDialog#SendCoinsDialog .QPushButton#clearButton:hover { -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb); -color:#333; -} +/***** No light.css specific coloring here yet *****/ -QDialog#SendCoinsDialog .QPushButton#clearButton:pressed { -border:1px solid #9e9e9e; -} +/****************************************************** +ReceiveCoinsDialog +******************************************************/ -QDialog#SendCoinsDialog .QPushButton#addButton { /* Add Button */ -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb); -border:1px solid #d2d2d2; -color:#616161; -padding-left:10px; -padding-right:10px; -} +/***** No light.css specific coloring here yet *****/ -QDialog#SendCoinsDialog .QPushButton#addButton:hover { -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb); -color:#333; -} +/****************************************************** +RPCConsole +******************************************************/ -QDialog#SendCoinsDialog .QPushButton#addButton:pressed { -border:1px solid #9e9e9e; +QWidget#RPCConsole { /* RPC Console Dialog Box */ + background-color: #f6f6f6; } -/* This QLabel uses name = "label" which conflicts with Address Book -> New Address */ -/* To maximize backwards compatibility this formatting has been removed */ - -QDialog#SendCoinsDialog QLabel#label { -/*margin-left:20px; -margin-right:-2px; -padding-right:-2px; -color:#616161; -font-size:14px; -font-weight:bold; -border-radius:5px; -padding-top:20px; -padding-bottom:20px;*/ -min-height:27px; -} +/****************************************************** +SendCoinsDialog +******************************************************/ QDialog#SendCoinsDialog QLabel#labelBalance { -margin-left:0px; -padding-left:0px; -color:#333333; -/* font-weight:bold; -border-radius:5px; -padding-top:20px; -padding-bottom:20px; */ -min-height:27px; -} - -#checkboxSubtractFeeFromAmount { -padding-left:10px; + color: #333333; } - -/* SEND COINS ENTRY */ +/****************************************************** +SendCoinsEntry +******************************************************/ QStackedWidget#SendCoinsEntry .QFrame#SendCoins > .QLabel { /* Send Coin Entry Labels */ -background-color:#F8F6F6; -min-width:102px; -font-weight:normal; -/*font-size:11px;*/ -color:#333; -min-height:25px; -margin-right:5px; -padding-right:5px; -} - -QStackedWidget#SendCoinsEntry .QFrame#SendCoins .QLabel#amountLabel { -color: #fff; -background-color:#999; -} - -QStackedWidget#SendCoinsEntry .QValidatedLineEdit#payTo { /* Pay To Input Field */ -} - -QStackedWidget#SendCoinsEntry .QToolButton { /* General Settings for Pay To Icons */ -background-color:transparent; -padding-left:5px; -padding-right:5px; -border: 0; -outline: 0; -} - -QStackedWidget#SendCoinsEntry .QToolButton#addressBookButton { /* Address Book Button */ -padding-left:10px; -} - -QStackedWidget#SendCoinsEntry .QToolButton#addressBookButton { -} - -QStackedWidget#SendCoinsEntry .QToolButton#pasteButton { -} - -QStackedWidget#SendCoinsEntry .QToolButton#deleteButton { -} - -QStackedWidget#SendCoinsEntry .QLineEdit#addAsLabel { /* Pay To Input Field */ -} - -/* COIN CONTROL POPUP */ - -QDialog#CoinControlDialog { /* Coin Control Dialog Window */ -background-color:#F8F6F6; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlQuantityText { /* Coin Control Quantity Label */ -min-height:30px; -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlQuantity { /* Coin Control Quantity */ -min-height:30px; + color: #333; } -QDialog#CoinControlDialog .QLabel#labelCoinControlBytesText { /* Coin Control Bytes Label */ -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlBytes { /* Coin Control Bytes */ -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlAmountText { /* Coin Control Amount Label */ -min-height:30px; -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlAmount { /* Coin Control Amount */ -min-height:30px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlPriorityText { /* Coin Control Priority Label */ -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlPriority { /* Coin Control Priority */ -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlFeeText { /* Coin Control Fee Label */ -min-height:30px; -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlFee { /* Coin Control Fee */ -min-height:30px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutputText { /* Coin Control Low Output Label */ -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutput { /* Coin Control Low Output */ -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFeeText { /* Coin Control After Fee Label */ -min-height:30px; -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFee { /* Coin Control After Fee */ -min-height:30px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlChangeText { /* Coin Control Change Label */ -padding-left:15px; -} - -QDialog#CoinControlDialog .QLabel#labelCoinControlChange { /* Coin Control Change */ - -} - -QDialog#CoinControlDialog .QFrame#frame .QPushButton#pushButtonSelectAll { /* (un)select all button */ -padding-left:10px; -padding-right:10px; -min-height:25px; -} - -QDialog#CoinControlDialog .QFrame#frame .QPushButton#pushButtonToggleLock { /* Toggle lock state button */ -padding-left:10px; -padding-right:10px; -min-height:25px; -} - -QDialog#CoinControlDialog .QDialogButtonBox#buttonBox QPushButton { /* Coin Control 'OK' button */ -} - -QDialog#CoinControlDialog QHeaderView::section:first { /* Bug Fix: the number "1" displays in this table for some reason... */ -color:transparent; -} - -QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget { /* Coin Control Widget Container */ -outline:0; -background-color:#ffffff; -border:0px solid #818181; -} - -QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item { -} - -QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:selected { /* Coin Control Item (selected) */ -background-color:#f7f7f7; -color:#333; -} - -QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:checked { /* Coin Control Item (checked) */ -background-color:#f7f7f7; -color:#333; -} - -QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:selected { /* Coin Control Branch Icon */ -background-repeat:no-repeat; -background-position:center; -background-color:#f7f7f7; -color:#333; -} - -QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:checked { /* Coin Control Branch Icon */ -background-repeat:no-repeat; -background-position:center; -background-color:#f7f7f7; -color:#333; -} - -QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::seperator { - -} - -QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::indicator { /* Coin Control Widget Checkbox */ - -} - -/* RECEIVE COINS */ - -QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label_2 { /* Label Label */ -background-color:#F8F6F6; -border: 1px solid #fff; -min-width:102px; -color:#333; -/*font-weight:bold; -font-size:11px;*/ -padding-right:5px; -} - -QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label { /* Amount Label */ -background-color:#999; -border: 1px solid #fff; -min-width:102px; -color:#ffffff; -/*font-weight:bold; -font-size:11px;*/ -padding-right:5px; -} - -QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label_3 { /* Message Label */ -background-color:#F8F6F6; -border: 1px solid #fff; -min-width:102px; -color:#333; -/*font-weight:bold; -font-size:11px;*/ -padding-right:5px; -} - -QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton { /* Clear Button */ -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb); -border:1px solid #d2d2d2; -color:#616161; -padding-left:10px; -padding-right:10px; -} - -QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:hover { -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb); -color:#333; -} - -QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:pressed { -border:1px solid #9e9e9e; -} - -QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton { /* Show Button */ -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb); -border:1px solid #d2d2d2; -color:#616161; -padding-left:10px; -padding-right:10px; -} - -QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:hover { -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb); -color:#333; -} - -QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:pressed { -border:1px solid #9e9e9e; -} - -QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton { /* Remove Button */ -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb); -border:1px solid #d2d2d2; -color:#616161; -padding-left:10px; -padding-right:10px; -} - -QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:hover { -background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb); -color:#333; -} +/****************************************************** +SignVerifyMessageDialog +******************************************************/ -QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:pressed { -border:1px solid #9e9e9e; -} - -QWidget#ReceiveCoinsDialog .QFrame#frame .QLabel#label_6 { /* Requested Payments History Label */ -color:#999; -font-weight:normal; -font-size:14px; -} - -/* RECEIVE COINS DIALOG */ - -QDialog#ReceiveRequestDialog { -background-color:#F8F6F6; -} - -QDialog#ReceiveRequestDialog QTextEdit { /* Contents of Receive Coin Dialog */ -border:1px solid #d7d7d7; -} - -/* General QR-code DIALOG */ - -QDialog#QRDialog { -background-color:#F8F6F6; -} - -QDialog#QRDialog QTextEdit { /* Contents of QR-code Dialog */ -border:1px solid #d7d7d7; -} - -/* TRANSACTIONS PAGE */ - -TransactionView QLineEdit { /* Filters */ -margin-bottom:2px; -margin-right:1px; -min-width:111px; -text-align:center; -} - -TransactionView QLineEdit#addressWidget { /* Address Filter */ -margin-bottom:2px; -margin-right:1px; -min-width:405px; -text-align:center; -} - -TransactionView QLineEdit#amountWidget { /* Amount Filter */ -margin-bottom:2px; -margin-right:1px; -max-width:100px; -text-align:center; -} - -TransactionView QComboBox { -margin-bottom:1px; -margin-right:1px; +QDialog#SignVerifyMessageDialog { + background-color: #f6f6f6; } -QLabel#transactionSumLabel { /* Example of setObjectName for widgets without name */ -color:#333333; -font-weight:bold; -} +/****************************************************** +ShutdownWindow +******************************************************/ -QLabel#transactionSum { /* Example of setObjectName for widgets without name */ -color:#333333; +QWidget#ShutdownWindow { + background-color: #f6f6f6; } -/* TRANSACTION DETAIL DIALOG */ +/****************************************************** +TransactionView +******************************************************/ -QDialog#TransactionDescDialog { -background-color:#F8F6F6; -} - -QDialog#TransactionDescDialog QTextEdit { /* Contents of Receive Coin Dialog */ -border:1px solid #d7d7d7; -} +/***** No light.css specific coloring here yet *****/ diff --git a/src/qt/res/css/scrollbars.css b/src/qt/res/css/scrollbars.css index dd4ef5a83ed0..8deb72bd725b 100644 --- a/src/qt/res/css/scrollbars.css +++ b/src/qt/res/css/scrollbars.css @@ -1,65 +1,110 @@ +/** +Copyright (c) 2020 The Dash Core developers +Distributed under the MIT/X11 software license, see the accompanying +file COPYING or http://www.opensource.org/licenses/mit-license.php. + +--------------------------------------------------------------------- + +This file contains style to customize the scrollbars. It's only loaded +for dash themes (dark/light) and also only by windwos and linux, +not by macOS clients. + +NOTE: This file is getting appended to the general.css while its +getting loaded in GUIUtil::loadStyleSheet(). Thus changes made in +general.css may become overwritten by changes in this file. + +Loaded in GUIUtil::loadStyleSheet() in guitil.cpp. +**/ + +/* do not modify! section updated by update-css-files.py + + +# Used colors in scrollbars.css for commit 3bebd1a5c + +#e0e0e0 +#f2f0f0 +#f6f6f6 +#ffffff + + +*/ + +/****************************************************** +QScrollBar +******************************************************/ + QScrollBar:vertical { /* Vertical Scroll Bar Attributes */ - border:0; - background:#ffffff; - width:18px; + border: 0; + background-color: #ffffff; + width: 18px; margin: 18px 0px 18px 0px; } QScrollBar:horizontal { /* Horizontal Scroll Bar Attributes */ - border:0; - background:#ffffff; - height:18px; + border: 0; + background-color: #ffffff; + height: 18px; margin: 0px 18px 0px 18px; } QScrollBar::handle:vertical { /* Scroll Bar Slider - vertical */ - background:#e0e0e0; - min-height:10px; + background-color: #e0e0e0; + min-height: 10px; } QScrollBar::handle:horizontal { /* Scroll Bar Slider - horizontal */ - background:#e0e0e0; - min-width:10px; + background-color: #e0e0e0; + min-width: 10px; } -QScrollBar::add-page, QScrollBar::sub-page { /* Scroll Bar Background */ - background:#F8F6F6; +QScrollBar::add-page, +QScrollBar::sub-page { /* Scroll Bar Background */ + background-color: #f6f6f6; } -QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical, QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { /* Define Arrow Button Dimensions */ - background-color:#F8F6F6; +QScrollBar::add-line:vertical, +QScrollBar::sub-line:vertical, +QScrollBar::add-line:horizontal, +QScrollBar::sub-line:horizontal { /* Define Arrow Button Dimensions */ + background-color: #f6f6f6; border: 1px solid #f2f0f0; - width:16px; - height:16px; + width: 16px; + height: 16px; } -QScrollBar::add-line:vertical:pressed, QScrollBar::sub-line:vertical:pressed, QScrollBar::add-line:horizontal:pressed, QScrollBar::sub-line:horizontal:pressed { - background-color:#e0e0e0; +QScrollBar::add-line:vertical:pressed, +QScrollBar::sub-line:vertical:pressed, +QScrollBar::add-line:horizontal:pressed, +QScrollBar::sub-line:horizontal:pressed { + background-color: #e0e0e0; } QScrollBar::sub-line:vertical { /* Vertical - top button position */ - subcontrol-position:top; + subcontrol-position: top; subcontrol-origin: margin; } QScrollBar::add-line:vertical { /* Vertical - bottom button position */ - subcontrol-position:bottom; + subcontrol-position: bottom; subcontrol-origin: margin; } QScrollBar::sub-line:horizontal { /* Vertical - left button position */ - subcontrol-position:left; + subcontrol-position: left; subcontrol-origin: margin; } QScrollBar::add-line:horizontal { /* Vertical - right button position */ - subcontrol-position:right; + subcontrol-position: right; subcontrol-origin: margin; } -QScrollBar:up-arrow, QScrollBar:down-arrow, QScrollBar:left-arrow, QScrollBar:right-arrow { /* Arrows Icon */ - width:18px; - height:18px; +QScrollBar:up-arrow, +QScrollBar:down-arrow, +QScrollBar:left-arrow, +QScrollBar:right-arrow { /* Arrows Icon */ + width: 18px; + height: 18px; } QScrollBar:up-arrow { @@ -114,10 +159,7 @@ QScrollBar:right-arrow:disabled { border-image: url(':/images/arrow_light_right_hover'); } -QDialog#HelpMessageDialog QScrollBar:vertical, QDialog#HelpMessageDialog QScrollBar:horizontal { - border:0; -} - -.QTableView { /* Table - has to be selected as a class otherwise it throws off QCalendarWidget */ - background:transparent; +QDialog#HelpMessageDialog QScrollBar:vertical, +QDialog#HelpMessageDialog QScrollBar:horizontal { + border: 0; } diff --git a/src/qt/res/css/trad.css b/src/qt/res/css/trad.css index 6ed15d9613bc..49c8152e072c 100644 --- a/src/qt/res/css/trad.css +++ b/src/qt/res/css/trad.css @@ -1,29 +1,68 @@ -/* MODAL OVERLAY */ +/** +Copyright (c) 2020 The Dash Core developers +Distributed under the MIT/X11 software license, see the accompanying +file COPYING or http://www.opensource.org/licenses/mit-license.php. -QWidget#bgWidget { /* The 'frame' overlaying the overview-page */ -background: rgba(0,0,0,220); +--------------------------------------------------------------------- + +This file contains all changes for the dash theme "Traditional". + +NOTE: This file gets not appended to the general.css. The Traditional +theme is a standalone theme which just fixes some bugs in the OS default +depiction of the Qt elements. + +Loaded in GUIUtil::loadStyleSheet() in guitil.cpp. +**/ + +/* do not modify! section updated by update-css-files.py + + +# Used colors in trad.css for commit 3bebd1a5c + +#fff +#ccfafafa + + +*/ + +/****************************************************** +ModalOverlay +******************************************************/ + +QWidget#bgWidget { /* The frame overlaying the overview-page */ + padding-left: 10px; + padding-right: 10px; + background-color: #ccfafafa; } QWidget#contentWidget { /* The actual content with the text/buttons/etc... */ -background: rgba(255,255,255,240); -border-radius: 6px; + background-color: #fff; + margin: 0; + padding-top: 20px; + padding-bottom: 20px; + border: 1px solid; + border-radius: 6px; } -/* OVERVIEW SCREEN */ +/****************************************************** +OverviewPage +******************************************************/ QWidget .QFrame#frame .QLabel#labelWalletStatus, /* Wallet Sync Status */ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendSyncStatus, /* PrivateSend Sync Status */ QWidget .QFrame#frame_2 .QLabel#labelTransactionsStatus { /* Recent Transactions Sync Status */ -color: red; + color: red; } -/* SEND DIALOG */ +/****************************************************** +SendCoinsDialog +******************************************************/ QDialog#SendCoinsDialog QLabel#labelBalance { -margin-left:0px; -padding-left:0px; + margin-left: 0px; + padding-left: 0px; } QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlInsuffFunds { /* Insufficient Funds Label */ -color: red; + color: red; } From b409254587025f3e0b909f31ecc27e6dd7f39047 Mon Sep 17 00:00:00 2001 From: dustinface <35775977+xdustinface@users.noreply.github.com> Date: Sun, 28 Jun 2020 14:40:09 +0200 Subject: [PATCH 02/21] qt: Redesign of the main toolbar (#3554) * qt: Replaced QAction with QToolButton for BitcoinGUI toolbar buttons. This allows setting a size policy for the toolbar buttons so that they are stretched over the toolbar and resize on window size changes. * qt: Give the BitcoinGUI's toolbar more style * qt: Give the toolbar logo a higher resolution This also removes the blue logo because its not longer used. * qt: Restore the traditional themes toolbar previous styles and logo --- src/qt/bitcoingui.cpp | 111 +++++++++++-------- src/qt/bitcoingui.h | 17 ++- src/qt/res/css/dark.css | 5 +- src/qt/res/css/general.css | 38 ++++--- src/qt/res/css/light.css | 5 +- src/qt/res/css/trad.css | 10 ++ src/qt/res/images/dash_logo_toolbar.png | Bin 1732 -> 9493 bytes src/qt/res/images/dash_logo_toolbar_blue.png | Bin 2479 -> 34912 bytes 8 files changed, 117 insertions(+), 69 deletions(-) diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 1dcd16873840..7822d1c563db 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -40,6 +40,7 @@ #include #include +#include #include #include #include @@ -55,6 +56,7 @@ #include #include #include +#include #include #if QT_VERSION < 0x050000 @@ -124,6 +126,7 @@ BitcoinGUI::BitcoinGUI(const PlatformStyle *_platformStyle, const NetworkStyle * rpcConsole(0), helpMessageDialog(0), modalOverlay(0), + tabGroup(0), prevBlocks(0), spinnerFrame(0), platformStyle(_platformStyle) @@ -291,13 +294,15 @@ BitcoinGUI::~BitcoinGUI() #endif delete rpcConsole; + delete tabGroup; } void BitcoinGUI::createActions() { - QActionGroup *tabGroup = new QActionGroup(this); + tabGroup = new QButtonGroup(this); - overviewAction = new QAction(tr("&Overview"), this); + overviewAction = new QToolButton(this); + overviewAction->setText(tr("&Overview")); overviewAction->setStatusTip(tr("Show general overview of wallet")); overviewAction->setToolTip(overviewAction->statusTip()); overviewAction->setCheckable(true); @@ -306,9 +311,10 @@ void BitcoinGUI::createActions() #else overviewAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_1)); #endif - tabGroup->addAction(overviewAction); + tabGroup->addButton(overviewAction); - sendCoinsAction = new QAction(tr("&Send"), this); + sendCoinsAction = new QToolButton(this); + sendCoinsAction->setText(tr("&Send")); sendCoinsAction->setStatusTip(tr("Send coins to a Dash address")); sendCoinsAction->setToolTip(sendCoinsAction->statusTip()); sendCoinsAction->setCheckable(true); @@ -317,13 +323,14 @@ void BitcoinGUI::createActions() #else sendCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_2)); #endif - tabGroup->addAction(sendCoinsAction); + tabGroup->addButton(sendCoinsAction); sendCoinsMenuAction = new QAction(QIcon(":/icons/send"), sendCoinsAction->text(), this); sendCoinsMenuAction->setStatusTip(sendCoinsAction->statusTip()); sendCoinsMenuAction->setToolTip(sendCoinsMenuAction->statusTip()); - privateSendCoinsAction = new QAction(tr("&PrivateSend"), this); + privateSendCoinsAction = new QToolButton(this); + privateSendCoinsAction->setText(tr("&PrivateSend")); privateSendCoinsAction->setStatusTip(tr("PrivateSend coins to a Dash address")); privateSendCoinsAction->setToolTip(privateSendCoinsAction->statusTip()); privateSendCoinsAction->setCheckable(true); @@ -332,13 +339,14 @@ void BitcoinGUI::createActions() #else privateSendCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_3)); #endif - tabGroup->addAction(privateSendCoinsAction); + tabGroup->addButton(privateSendCoinsAction); privateSendCoinsMenuAction = new QAction(QIcon(":/icons/send"), privateSendCoinsAction->text(), this); privateSendCoinsMenuAction->setStatusTip(privateSendCoinsAction->statusTip()); privateSendCoinsMenuAction->setToolTip(privateSendCoinsMenuAction->statusTip()); - receiveCoinsAction = new QAction(tr("&Receive"), this); + receiveCoinsAction = new QToolButton(this); + receiveCoinsAction->setText(tr("&Receive")); receiveCoinsAction->setStatusTip(tr("Request payments (generates QR codes and dash: URIs)")); receiveCoinsAction->setToolTip(receiveCoinsAction->statusTip()); receiveCoinsAction->setCheckable(true); @@ -347,13 +355,14 @@ void BitcoinGUI::createActions() #else receiveCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_4)); #endif - tabGroup->addAction(receiveCoinsAction); + tabGroup->addButton(receiveCoinsAction); receiveCoinsMenuAction = new QAction(QIcon(":/icons/receiving_addresses"), receiveCoinsAction->text(), this); receiveCoinsMenuAction->setStatusTip(receiveCoinsAction->statusTip()); receiveCoinsMenuAction->setToolTip(receiveCoinsMenuAction->statusTip()); - historyAction = new QAction(tr("&Transactions"), this); + historyAction = new QToolButton(this); + historyAction->setText(tr("&Transactions")); historyAction->setStatusTip(tr("Browse transaction history")); historyAction->setToolTip(historyAction->statusTip()); historyAction->setCheckable(true); @@ -362,12 +371,13 @@ void BitcoinGUI::createActions() #else historyAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_5)); #endif - tabGroup->addAction(historyAction); + tabGroup->addButton(historyAction); #ifdef ENABLE_WALLET QSettings settings; if (settings.value("fShowMasternodesTab").toBool()) { - masternodeAction = new QAction(tr("&Masternodes"), this); + masternodeAction = new QToolButton(this); + masternodeAction->setText(tr("&Masternodes")); masternodeAction->setStatusTip(tr("Browse masternodes")); masternodeAction->setToolTip(masternodeAction->statusTip()); masternodeAction->setCheckable(true); @@ -376,29 +386,32 @@ void BitcoinGUI::createActions() #else masternodeAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_6)); #endif - tabGroup->addAction(masternodeAction); - connect(masternodeAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); - connect(masternodeAction, SIGNAL(triggered()), this, SLOT(gotoMasternodePage())); + tabGroup->addButton(masternodeAction); + connect(masternodeAction, SIGNAL(clicked()), this, SLOT(showNormalIfMinimized())); + connect(masternodeAction, SIGNAL(clicked()), this, SLOT(gotoMasternodePage())); } // These showNormalIfMinimized are needed because Send Coins and Receive Coins // can be triggered from the tray menu, and need to show the GUI to be useful. - connect(overviewAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); - connect(overviewAction, SIGNAL(triggered()), this, SLOT(gotoOverviewPage())); - connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); - connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(gotoSendCoinsPage())); + connect(overviewAction, SIGNAL(clicked()), this, SLOT(showNormalIfMinimized())); + connect(overviewAction, SIGNAL(clicked()), this, SLOT(gotoOverviewPage())); + connect(sendCoinsAction, SIGNAL(clicked()), this, SLOT(showNormalIfMinimized())); + connect(sendCoinsAction, SIGNAL(clicked()), this, SLOT(gotoSendCoinsPage())); connect(sendCoinsMenuAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(sendCoinsMenuAction, SIGNAL(triggered()), this, SLOT(gotoSendCoinsPage())); - connect(privateSendCoinsAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); - connect(privateSendCoinsAction, SIGNAL(triggered()), this, SLOT(gotoPrivateSendCoinsPage())); + connect(privateSendCoinsAction, SIGNAL(clicked()), this, SLOT(showNormalIfMinimized())); + connect(privateSendCoinsAction, SIGNAL(clicked()), this, SLOT(gotoPrivateSendCoinsPage())); connect(privateSendCoinsMenuAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(privateSendCoinsMenuAction, SIGNAL(triggered()), this, SLOT(gotoPrivateSendCoinsPage())); - connect(receiveCoinsAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); - connect(receiveCoinsAction, SIGNAL(triggered()), this, SLOT(gotoReceiveCoinsPage())); + connect(receiveCoinsAction, SIGNAL(clicked()), this, SLOT(showNormalIfMinimized())); + connect(receiveCoinsAction, SIGNAL(clicked()), this, SLOT(gotoReceiveCoinsPage())); connect(receiveCoinsMenuAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(receiveCoinsMenuAction, SIGNAL(triggered()), this, SLOT(gotoReceiveCoinsPage())); - connect(historyAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); - connect(historyAction, SIGNAL(triggered()), this, SLOT(gotoHistoryPage())); + connect(historyAction, SIGNAL(clicked()), this, SLOT(showNormalIfMinimized())); + connect(historyAction, SIGNAL(clicked()), this, SLOT(gotoHistoryPage())); + + // Give the selected tab button a bolder font. + connect(tabGroup, SIGNAL(buttonToggled(QAbstractButton *, bool)), this, SLOT(highlightTabButton(QAbstractButton *, bool))); #endif // ENABLE_WALLET quitAction = new QAction(QIcon(":/icons/quit"), tr("E&xit"), this); @@ -587,32 +600,33 @@ void BitcoinGUI::createToolBars() { QToolBar *toolbar = new QToolBar(tr("Tabs toolbar")); toolbar->setContextMenuPolicy(Qt::PreventContextMenu); - toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - toolbar->addAction(overviewAction); - toolbar->addAction(sendCoinsAction); - toolbar->addAction(privateSendCoinsAction); - toolbar->addAction(receiveCoinsAction); - toolbar->addAction(historyAction); + toolbar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + toolbar->setToolButtonStyle(Qt::ToolButtonTextOnly); + + overviewAction->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + sendCoinsAction->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + privateSendCoinsAction->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + receiveCoinsAction->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + historyAction->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + + toolbar->addWidget(overviewAction); + toolbar->addWidget(sendCoinsAction); + toolbar->addWidget(privateSendCoinsAction); + toolbar->addWidget(receiveCoinsAction); + toolbar->addWidget(historyAction); + QSettings settings; if (settings.value("fShowMasternodesTab").toBool() && masternodeAction) { - toolbar->addAction(masternodeAction); + masternodeAction->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + toolbar->addWidget(masternodeAction); } toolbar->setMovable(false); // remove unused icon in upper left corner overviewAction->setChecked(true); - // Add Dash logo on the right side - QWidget* spacer = new QWidget(); - spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - toolbar->addWidget(spacer); - QLabel *logoLabel = new QLabel(); - QString logoImage = ":/images/dash_logo_toolbar"; - if (!GUIUtil::dashThemeActive()) { - logoImage = ":/images/dash_logo_toolbar_blue"; - } + logoLabel->setObjectName("lblToolbarLogo"); + logoLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - QPixmap logoPixmap(logoImage); - logoLabel->setPixmap(logoPixmap); toolbar->addWidget(logoLabel); /** Create additional container for toolbar and walletFrame and make it the central widget. @@ -687,13 +701,13 @@ void BitcoinGUI::setClientModel(ClientModel *_clientModel) } #endif // ENABLE_WALLET unitDisplayControl->setOptionsModel(_clientModel->getOptionsModel()); - + OptionsModel* optionsModel = _clientModel->getOptionsModel(); if(optionsModel) { // be aware of the tray icon disable state change reported by the OptionsModel object. connect(optionsModel,SIGNAL(hideTrayIconChanged(bool)),this,SLOT(setTrayIconVisible(bool))); - + // initialize the disable state of the tray icon with the current value in the model. setTrayIconVisible(optionsModel->getHideTrayIcon()); } @@ -921,6 +935,13 @@ void BitcoinGUI::openClicked() } } +void BitcoinGUI::highlightTabButton(QAbstractButton *button, bool checked) +{ + QFont font = button->font(); + font.setBold(checked); + button->setFont(font); +} + void BitcoinGUI::gotoOverviewPage() { overviewAction->setChecked(true); diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index e927210773ff..4083cf6a654d 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -40,6 +40,7 @@ QT_BEGIN_NAMESPACE class QAction; class QProgressBar; class QProgressDialog; +class QToolButton; QT_END_NAMESPACE /** @@ -95,20 +96,20 @@ class BitcoinGUI : public QMainWindow QProgressDialog *progressDialog; QMenuBar *appMenuBar; - QAction *overviewAction; - QAction *historyAction; - QAction *masternodeAction; + QToolButton *overviewAction; + QToolButton *historyAction; + QToolButton *masternodeAction; QAction *quitAction; - QAction *sendCoinsAction; + QToolButton *sendCoinsAction; QAction *sendCoinsMenuAction; - QAction *privateSendCoinsAction; + QToolButton *privateSendCoinsAction; QAction *privateSendCoinsMenuAction; QAction *usedSendingAddressesAction; QAction *usedReceivingAddressesAction; QAction *signMessageAction; QAction *verifyMessageAction; QAction *aboutAction; - QAction *receiveCoinsAction; + QToolButton *receiveCoinsAction; QAction *receiveCoinsMenuAction; QAction *optionsAction; QAction *toggleHideAction; @@ -136,6 +137,7 @@ class BitcoinGUI : public QMainWindow RPCConsole *rpcConsole; HelpMessageDialog *helpMessageDialog; ModalOverlay *modalOverlay; + QButtonGroup *tabGroup; #ifdef Q_OS_MAC CAppNapInhibitor* m_app_nap_inhibitor = nullptr; @@ -251,6 +253,9 @@ private Q_SLOTS: /** Show open dialog */ void openClicked(); + + /** Highlight checked tab button */ + void highlightTabButton(QAbstractButton *button, bool checked); #endif // ENABLE_WALLET /** Show configuration dialog */ void optionsClicked(); diff --git a/src/qt/res/css/dark.css b/src/qt/res/css/dark.css index 2769c999f27f..724d874b0265 100644 --- a/src/qt/res/css/dark.css +++ b/src/qt/res/css/dark.css @@ -295,7 +295,10 @@ QTextEdit { QToolBar / QToolButton ******************************************************/ -/***** No dark.css specific coloring here yet *****/ +QToolBar > QToolButton:checked { + background-color: #444; + color: #ccc; +} /****************************************************** QTreeWidget diff --git a/src/qt/res/css/general.css b/src/qt/res/css/general.css index ca68b0fe1caa..96492f481634 100644 --- a/src/qt/res/css/general.css +++ b/src/qt/res/css/general.css @@ -626,35 +626,41 @@ QToolBar / QToolButton QToolBar { background-color: #008de4; - border: 0; + border: none; + width: 100%; padding: 0; margin: 0; + spacing: 0; + min-height: 50px; + max-height: 50px; } QToolBar > QToolButton { - background-color: #008de4; - border: 0; - font-size: 14px; - min-width: 70px; - min-height: 48%; - max-height: 48%; - padding: 0 10px; - margin: 0; - color: #f5f5f5; + background-color: transparent; + border: none; + min-height: 50px; + max-height: 50px; + font-size: 16px; + letter-spacing: 3px; + color: #ffffff; + width: 100%; + padding: 1px; + text-align: center; } -QToolBar > QToolButton:checked { - border: 0; - font-weight: bold; +QToolBar > QToolButton:hover:!checked { + background-color: #005e98; + color: #DCDCDC; } QToolBar > QToolButton:disabled { color: #444; } -QToolBar > QLabel { - border: 0; - margin: 10px 0 0 0; +QToolBar QLabel#lblToolbarLogo { + padding: 12px; + image: url(':/images/dash_logo_toolbar'); + height: 2.5em; } /****************************************************** diff --git a/src/qt/res/css/light.css b/src/qt/res/css/light.css index 882d68f1b98c..b8e62b15c46f 100644 --- a/src/qt/res/css/light.css +++ b/src/qt/res/css/light.css @@ -291,7 +291,10 @@ QTextEdit { QToolBar / QToolButton ******************************************************/ -/***** No light.css specific coloring here yet *****/ +QToolBar > QToolButton:checked { + background-color: #f6f6f6; + color: #333333; +} /****************************************************** QTreeWidget diff --git a/src/qt/res/css/trad.css b/src/qt/res/css/trad.css index 49c8152e072c..23d618ff5013 100644 --- a/src/qt/res/css/trad.css +++ b/src/qt/res/css/trad.css @@ -25,6 +25,16 @@ Loaded in GUIUtil::loadStyleSheet() in guitil.cpp. */ +/****************************************************** +QToolBar / QToolButton +******************************************************/ + +QToolBar QLabel#lblToolbarLogo { + padding: 12px; + image: url(':/images/dash_logo_toolbar_blue'); + height: 2.5em; +} + /****************************************************** ModalOverlay ******************************************************/ diff --git a/src/qt/res/images/dash_logo_toolbar.png b/src/qt/res/images/dash_logo_toolbar.png index 2f58e83e7072372cd33929b658112749f191de51..46322307b75ce6db4db3b788e30f14c5cea28750 100644 GIT binary patch literal 9493 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 literal 1732 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 W9=r!C1$q1wJD8n~gLSPHCiy>M#t)$Y literal 2479 zcmV;g2~hTlP)EX>4Tx04R}tkv&MmKpe$i(@I4u3hf}`kfAzR5EXIMDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfa&%I3krMxx6k5c1aNLh~_a1le0HIN3niU!YG~G5c zsic_8uZZDSgb+m#{Rqg+GG-+y4d3x~j{slq5;;BvB z;Ji;9V`W(-J|`YE>4LKlt6PRh$_2k|If<>&0eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00)OjL_t(|+U=ZqXdOiy$3JUoj@m|hYR#xUysF|+ZxQhT zwcZCPg7<|7qO!$`s9@25)Imi>P%NmZXz@OvR;&l&eN^gEk6LlkL(>{flQe0Q^^cur z*KuaEc`vCi>F)!Nytl{f?Cy7d^PAuNCLjocAP9mW2!bF8f*=TjAPgqakgBaV5ikkZ z4oLcOW*5)_v;ymZE@G7o%Qvdc7JvfAJI^Qr+KAN;L;3bb46*u-1a1P32YSm8Y#Xo= z_zZ2{0TvUh?qMd`2H*zZ1YkpEdo8d4xJ(4Q>8Jb4Z`f!L}D9Wwy0EYyQ+#8q* z{7}Hs*8^MH=T|f|7y+HcYHgt0Iy+z*(U0=h1AqP#qD$*GA#nWLKrPyAW36pu8+HQp zkcRp?MX=Q&bcj_8+MEHr4(#hWa$2rnwW$XV295>}xBm1PE3%>ky*q)~PPwD3OLC5_ z*Te#@T4D#EZ`hur!)_l5>=!uaeBc5{@V(aRt_GH%%}c;@#A=NQwmMh^%menc7Sg3I zAl8F`%Yn0jQ59VO8>if{z|Fw5WsWC)1F~`C(WEhI9}PL%#{fG6Cj!Tz&2_}e$e`E=1S=gEbxU9lFsqESdw^#O99J8#Xx%_drY<$WeK}(N6Zp%%)ODFU>;mlIIsPd-NGjz- z%+7IJmSiFwz6LkK{$1?sn-M6pRL>;i`ivzFe?@^vLz4)$Z>9rhlzDD5@NpjvqQ<_6 z8qeM(j>WnaI5Hrdg}@EO>Qm1(<^=@%nsrIALOIEEOc!t}vHGaYXD~Ui{c&P-jZ@F* zz*~U^SsV1{MX>*|5K}Ag=lTkHH3A0)23*DtVoLtybzV0i9hsj_tU5em9Sh71T>B5l z*GvM|vo{mw%F;`$*7xB`sX&=4J^uW+X!AU9RiL+7CxXqlek1TFY!smtxU|4=4R$o_ zV>z+vvfqygjH+9K+r47lXqmPOSkBhW@A^PjTo24gn=WU61oWUy3ow^h-Rn7bjBSuE z9l(z{ZcV6h{Vsy-+qbL(=J%s@C)VeCtY8>sI9CH>X?w^MTB^3j>46c4DpOG9S9nWj$CkXf(C4O)dZj{uL6hT7cg_Sga7%N}dkLaa)@{eAd=s=-srb8c?tdKqxN&>t`_4InT@l#6OOAzIErKndi-B7PsqDLm)eDY*R-jEY z{#m0s;C|A{jYVkFZLMNEuzyZi>GzBPYk_lZ#3FA17g_OKMLEV>8N~GBszxKH?E%+85 zrn$jW1LwSJqXbn+bw>%(+=2-MTtbx16HO>Wr?v7w z+uxxXE=Y3?eDPid>>3d4qH6x14b^U8o2;)@DP6YPejB)hSbbjLobzn=copfSMok&l zO@O7&DuaoXw=ONQ!haBWAS0?q!Xd4v1LAAMzwRr~=M}*gV3f5e-%~uzu*X`J(m&2v z4SWf_W35NAWgzK`o`p8^t$VN=X@=9Neu#HN#uApOwLa}%1O{0&h`2#y=Rj Date: Tue, 7 Jul 2020 20:30:54 +0300 Subject: [PATCH 03/21] Merge pull request #3555 from xdustinface/pr-ui-2-fonts qt: Implement application wide font management --- src/Makefile.qt.include | 24 +- src/qt/addressbookpage.cpp | 2 + src/qt/askpassphrasedialog.cpp | 5 + src/qt/bitcoingui.cpp | 9 +- src/qt/coincontroldialog.cpp | 11 + src/qt/dash.cpp | 48 ++ src/qt/dash.qrc | 20 + src/qt/forms/askpassphrasedialog.ui | 6 - src/qt/forms/coincontroldialog.ui | 42 -- src/qt/forms/debugwindow.ui | 49 -- src/qt/forms/modaloverlay.ui | 36 -- src/qt/forms/optionsdialog.ui | 6 - src/qt/forms/overviewpage.ui | 72 --- src/qt/forms/qrdialog.ui | 6 - src/qt/forms/receivecoinsdialog.ui | 6 - src/qt/forms/sendcoinsdialog.ui | 75 --- src/qt/forms/signverifymessagedialog.ui | 17 - src/qt/guiutil.cpp | 439 +++++++++++++++++- src/qt/guiutil.h | 75 ++- src/qt/masternodelist.cpp | 5 + src/qt/modaloverlay.cpp | 9 + src/qt/openuridialog.cpp | 1 + src/qt/optionsdialog.cpp | 4 + src/qt/overviewpage.cpp | 17 + src/qt/qrdialog.cpp | 4 + src/qt/receivecoinsdialog.cpp | 7 +- src/qt/receiverequestdialog.cpp | 4 +- src/qt/res/css/general.css | 51 -- .../res/fonts/Montserrat/Montserrat-Black.otf | Bin 0 -> 230124 bytes .../Montserrat/Montserrat-BlackItalic.otf | Bin 0 -> 236868 bytes .../res/fonts/Montserrat/Montserrat-Bold.otf | Bin 0 -> 235192 bytes .../Montserrat/Montserrat-BoldItalic.otf | Bin 0 -> 243084 bytes .../fonts/Montserrat/Montserrat-ExtraBold.otf | Bin 0 -> 234432 bytes .../Montserrat/Montserrat-ExtraBoldItalic.otf | Bin 0 -> 242800 bytes .../Montserrat/Montserrat-ExtraLight.otf | Bin 0 -> 226772 bytes .../Montserrat-ExtraLightItalic.otf | Bin 0 -> 236444 bytes .../fonts/Montserrat/Montserrat-Italic.otf | Bin 0 -> 237828 bytes .../res/fonts/Montserrat/Montserrat-Light.otf | Bin 0 -> 228068 bytes .../Montserrat/Montserrat-LightItalic.otf | Bin 0 -> 237832 bytes .../fonts/Montserrat/Montserrat-Medium.otf | Bin 0 -> 230356 bytes .../Montserrat/Montserrat-MediumItalic.otf | Bin 0 -> 239660 bytes .../fonts/Montserrat/Montserrat-Regular.otf | Bin 0 -> 228620 bytes .../fonts/Montserrat/Montserrat-SemiBold.otf | Bin 0 -> 234056 bytes .../Montserrat/Montserrat-SemiBoldItalic.otf | Bin 0 -> 242672 bytes .../res/fonts/Montserrat/Montserrat-Thin.otf | Bin 0 -> 217636 bytes .../Montserrat/Montserrat-ThinItalic.otf | Bin 0 -> 227984 bytes src/qt/res/fonts/Montserrat/OFL.txt | 93 ++++ .../Montserrat/SIL_Open_Font_License.txt | 43 ++ src/qt/rpcconsole.cpp | 19 +- src/qt/sendcoinsdialog.cpp | 20 + src/qt/sendcoinsentry.cpp | 7 + src/qt/signverifymessagedialog.cpp | 9 +- src/qt/splashscreen.cpp | 20 +- src/qt/transactiondesc.cpp | 2 +- src/qt/utilitydialog.cpp | 6 + src/qt/walletview.cpp | 5 + 56 files changed, 875 insertions(+), 399 deletions(-) create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-Black.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-BlackItalic.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-Bold.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-BoldItalic.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-ExtraBold.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-ExtraBoldItalic.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-ExtraLight.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-ExtraLightItalic.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-Italic.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-Light.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-LightItalic.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-Medium.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-MediumItalic.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-Regular.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-SemiBold.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-SemiBoldItalic.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-Thin.otf create mode 100644 src/qt/res/fonts/Montserrat/Montserrat-ThinItalic.otf create mode 100644 src/qt/res/fonts/Montserrat/OFL.txt create mode 100644 src/qt/res/fonts/Montserrat/SIL_Open_Font_License.txt diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index 854257d03cf1..8561587c1fc1 100644 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -355,6 +355,26 @@ RES_CSS = \ qt/res/css/scrollbars.css \ qt/res/css/trad.css +RES_FONTS = \ + qt/res/fonts/Montserrat/Montserrat-Black.otf \ + qt/res/fonts/Montserrat/Montserrat-BlackItalic.otf \ + qt/res/fonts/Montserrat/Montserrat-Bold.otf \ + qt/res/fonts/Montserrat/Montserrat-BoldItalic.otf \ + qt/res/fonts/Montserrat/Montserrat-ExtraBold.otf \ + qt/res/fonts/Montserrat/Montserrat-ExtraBoldItalic.otf \ + qt/res/fonts/Montserrat/Montserrat-ExtraLight.otf \ + qt/res/fonts/Montserrat/Montserrat-ExtraLightItalic.otf \ + qt/res/fonts/Montserrat/Montserrat-Italic.otf \ + qt/res/fonts/Montserrat/Montserrat-Light.otf \ + qt/res/fonts/Montserrat/Montserrat-LightItalic.otf \ + qt/res/fonts/Montserrat/Montserrat-Medium.otf \ + qt/res/fonts/Montserrat/Montserrat-MediumItalic.otf \ + qt/res/fonts/Montserrat/Montserrat-Regular.otf \ + qt/res/fonts/Montserrat/Montserrat-SemiBold.otf \ + qt/res/fonts/Montserrat/Montserrat-SemiBoldItalic.otf \ + qt/res/fonts/Montserrat/Montserrat-Thin.otf \ + qt/res/fonts/Montserrat/Montserrat-ThinItalic.otf + RES_MOVIES = $(wildcard $(srcdir)/qt/res/movies/spinner-*.png) BITCOIN_RC = qt/res/dash-qt-res.rc @@ -367,7 +387,7 @@ qt_libdashqt_a_CXXFLAGS = $(AM_CXXFLAGS) $(QT_PIE_FLAGS) qt_libdashqt_a_OBJCXXFLAGS = $(AM_OBJCXXFLAGS) $(QT_PIE_FLAGS) qt_libdashqt_a_SOURCES = $(BITCOIN_QT_CPP) $(BITCOIN_QT_H) $(QT_FORMS_UI) \ - $(QT_QRC) $(QT_QRC_LOCALE) $(QT_TS) $(PROTOBUF_PROTO) $(RES_ICONS) $(RES_IMAGES) $(RES_CSS) $(RES_MOVIES) + $(QT_QRC) $(QT_QRC_LOCALE) $(QT_TS) $(PROTOBUF_PROTO) $(RES_ICONS) $(RES_IMAGES) $(RES_CSS) $(RES_FONTS) $(RES_MOVIES) nodist_qt_libdashqt_a_SOURCES = $(QT_MOC_CPP) $(QT_MOC) $(PROTOBUF_CC) \ $(PROTOBUF_H) $(QT_QRC_CPP) $(QT_QRC_LOCALE_CPP) @@ -430,7 +450,7 @@ $(QT_QRC_LOCALE_CPP): $(QT_QRC_LOCALE) $(QT_QM) $(SED) -e '/^\*\*.*Created:/d' -e '/^\*\*.*by:/d' > $@ @rm $(@D)/temp_$( $@ diff --git a/src/qt/addressbookpage.cpp b/src/qt/addressbookpage.cpp index b4c25b47145f..a576ce0708ca 100644 --- a/src/qt/addressbookpage.cpp +++ b/src/qt/addressbookpage.cpp @@ -106,6 +106,8 @@ AddressBookPage::AddressBookPage(const PlatformStyle *platformStyle, Mode _mode, connect(ui->tableView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextualMenu(QPoint))); connect(ui->closeButton, SIGNAL(clicked()), this, SLOT(accept())); + + GUIUtil::updateFonts(); } AddressBookPage::~AddressBookPage() diff --git a/src/qt/askpassphrasedialog.cpp b/src/qt/askpassphrasedialog.cpp index edad38b8e6a9..c0dcfb63e8c0 100644 --- a/src/qt/askpassphrasedialog.cpp +++ b/src/qt/askpassphrasedialog.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -28,6 +29,10 @@ AskPassphraseDialog::AskPassphraseDialog(Mode _mode, QWidget *parent) : { ui->setupUi(this); + GUIUtil::setFont({ui->capsLabel}, GUIUtil::FontWeight::Bold); + + GUIUtil::updateFonts(); + ui->passEdit1->setMinimumSize(ui->passEdit1->sizeHint()); ui->passEdit2->setMinimumSize(ui->passEdit2->sizeHint()); ui->passEdit3->setMinimumSize(ui->passEdit3->sizeHint()); diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 7822d1c563db..f57da5640894 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -410,6 +410,9 @@ void BitcoinGUI::createActions() connect(historyAction, SIGNAL(clicked()), this, SLOT(showNormalIfMinimized())); connect(historyAction, SIGNAL(clicked()), this, SLOT(gotoHistoryPage())); + for (auto button : tabGroup->buttons()) { + GUIUtil::setFont({button}, GUIUtil::FontWeight::Normal, 16); + } // Give the selected tab button a bolder font. connect(tabGroup, SIGNAL(buttonToggled(QAbstractButton *, bool)), this, SLOT(highlightTabButton(QAbstractButton *, bool))); #endif // ENABLE_WALLET @@ -937,9 +940,7 @@ void BitcoinGUI::openClicked() void BitcoinGUI::highlightTabButton(QAbstractButton *button, bool checked) { - QFont font = button->font(); - font.setBold(checked); - button->setFont(font); + GUIUtil::setFont({button}, checked ? GUIUtil::FontWeight::Bold : GUIUtil::FontWeight::Normal, 16); } void BitcoinGUI::gotoOverviewPage() @@ -1628,7 +1629,7 @@ UnitDisplayStatusBarControl::UnitDisplayStatusBarControl(const PlatformStyle *pl setToolTip(tr("Unit to show amounts in. Click to select another unit.")); QList units = BitcoinUnits::availableUnits(); int max_width = 0; - const QFontMetrics fm(font()); + const QFontMetrics fm(GUIUtil::getFontNormal()); for (const BitcoinUnits::Unit unit : units) { max_width = qMax(max_width, fm.width(BitcoinUnits::name(unit))); diff --git a/src/qt/coincontroldialog.cpp b/src/qt/coincontroldialog.cpp index 0b4b2e47c22c..59a94a08ea1a 100644 --- a/src/qt/coincontroldialog.cpp +++ b/src/qt/coincontroldialog.cpp @@ -54,6 +54,17 @@ CoinControlDialog::CoinControlDialog(const PlatformStyle *_platformStyle, QWidge /* Open CSS when configured */ this->setStyleSheet(GUIUtil::loadStyleSheet()); + GUIUtil::setFont({ui->labelCoinControlQuantityText, + ui->labelCoinControlBytesText, + ui->labelCoinControlAmountText, + ui->labelCoinControlLowOutputText, + ui->labelCoinControlFeeText, + ui->labelCoinControlAfterFeeText, + ui->labelCoinControlChangeText + }, GUIUtil::FontWeight::Bold); + + GUIUtil::updateFonts(); + // context menu actions QAction *copyAddressAction = new QAction(tr("Copy address"), this); QAction *copyLabelAction = new QAction(tr("Copy label"), this); diff --git a/src/qt/dash.cpp b/src/qt/dash.cpp index 342a950b7a69..50d9e87307dd 100644 --- a/src/qt/dash.cpp +++ b/src/qt/dash.cpp @@ -296,6 +296,9 @@ bool BitcoinCore::baseInitialize() { return false; } + if (!GUIUtil::loadFonts()) { + return false; + } return true; } @@ -728,6 +731,51 @@ int main(int argc, char *argv[]) // Load GUI settings from QSettings app.createOptionsModel(gArgs.GetBoolArg("-resetguisettings", false)); + // Validate/set font family + if (gArgs.IsArgSet("-font-family")) { + GUIUtil::FontFamily family; + QString strFamily = gArgs.GetArg("-font-family", GUIUtil::fontFamilyToString(GUIUtil::getFontFamilyDefault()).toStdString()).c_str(); + try { + family = GUIUtil::fontFamilyFromString(strFamily); + } catch (const std::exception& e) { + QMessageBox::critical(0, QObject::tr(PACKAGE_NAME), + QObject::tr("Error: Specified font-family invalid. Valid values: %1.").arg("SystemDefault, Montserrat")); + return EXIT_FAILURE; + } + GUIUtil::setFontFamily(family); + } + // Validate/set normal font weight + if (gArgs.IsArgSet("-font-weight-normal")) { + QFont::Weight weight; + if (!GUIUtil::weightFromArg(gArgs.GetArg("-font-weight-normal", GUIUtil::weightToArg(GUIUtil::getFontWeightNormal())), weight)) { + QMessageBox::critical(0, QObject::tr(PACKAGE_NAME), + QObject::tr("Error: Specified font-weight-normal invalid. Valid range %1 to %2.").arg(0).arg(8)); + return EXIT_FAILURE; + } + GUIUtil::setFontWeightNormal(weight); + } + // Validate/set bold font weight + if (gArgs.IsArgSet("-font-weight-bold")) { + QFont::Weight weight; + if (!GUIUtil::weightFromArg(gArgs.GetArg("-font-weight-bold", GUIUtil::weightToArg(GUIUtil::getFontWeightBold())), weight)) { + QMessageBox::critical(0, QObject::tr(PACKAGE_NAME), + QObject::tr("Error: Specified font-weight-bold invalid. Valid range %1 to %2.").arg(0).arg(8)); + return EXIT_FAILURE; + } + GUIUtil::setFontWeightBold(weight); + } + // Validate/set font scale + if (gArgs.IsArgSet("-font-scale")) { + const int nScaleMin = -100, nScaleMax = 100; + int nScale = gArgs.GetArg("-font-scale", GUIUtil::getFontScale()); + if (nScale < nScaleMin || nScale > nScaleMax) { + QMessageBox::critical(0, QObject::tr(PACKAGE_NAME), + QObject::tr("Error: Specified font-scale invalid. Valid range %1 to %2.").arg(nScaleMin).arg(nScaleMax)); + return EXIT_FAILURE; + } + GUIUtil::setFontScale(nScale); + } + // Subscribe to global signals from core uiInterface.InitMessage.connect(InitMessage); diff --git a/src/qt/dash.qrc b/src/qt/dash.qrc index b66c470d61ac..2d4ba4a8c4aa 100644 --- a/src/qt/dash.qrc +++ b/src/qt/dash.qrc @@ -58,6 +58,26 @@ res/css/general.css res/css/scrollbars.css + + res/fonts/Montserrat/Montserrat-Black.otf + res/fonts/Montserrat/Montserrat-BlackItalic.otf + res/fonts/Montserrat/Montserrat-Bold.otf + res/fonts/Montserrat/Montserrat-BoldItalic.otf + res/fonts/Montserrat/Montserrat-ExtraBold.otf + res/fonts/Montserrat/Montserrat-ExtraBoldItalic.otf + res/fonts/Montserrat/Montserrat-ExtraLight.otf + res/fonts/Montserrat/Montserrat-ExtraLightItalic.otf + res/fonts/Montserrat/Montserrat-Italic.otf + res/fonts/Montserrat/Montserrat-Light.otf + res/fonts/Montserrat/Montserrat-LightItalic.otf + res/fonts/Montserrat/Montserrat-Medium.otf + res/fonts/Montserrat/Montserrat-MediumItalic.otf + res/fonts/Montserrat/Montserrat-Regular.otf + res/fonts/Montserrat/Montserrat-SemiBold.otf + res/fonts/Montserrat/Montserrat-SemiBoldItalic.otf + res/fonts/Montserrat/Montserrat-Thin.otf + res/fonts/Montserrat/Montserrat-ThinItalic.otf + res/css/dark.css res/css/light.css diff --git a/src/qt/forms/askpassphrasedialog.ui b/src/qt/forms/askpassphrasedialog.ui index 69803989cd13..67fee3cd3dea 100644 --- a/src/qt/forms/askpassphrasedialog.ui +++ b/src/qt/forms/askpassphrasedialog.ui @@ -101,12 +101,6 @@ - - - 75 - true - - diff --git a/src/qt/forms/coincontroldialog.ui b/src/qt/forms/coincontroldialog.ui index e5cf02c62c41..7d226fd6a226 100644 --- a/src/qt/forms/coincontroldialog.ui +++ b/src/qt/forms/coincontroldialog.ui @@ -38,12 +38,6 @@ - - - 75 - true - - Quantity: @@ -67,12 +61,6 @@ - - - 75 - true - - Bytes: @@ -112,12 +100,6 @@ - - - 75 - true - - Amount: @@ -144,12 +126,6 @@ false - - - 75 - true - - Dust: @@ -192,12 +168,6 @@ - - - 75 - true - - Fee: @@ -237,12 +207,6 @@ - - - 75 - true - - After Fee: @@ -269,12 +233,6 @@ false - - - 75 - true - - Change: diff --git a/src/qt/forms/debugwindow.ui b/src/qt/forms/debugwindow.ui index ee3f74dbe159..704cc66ad99b 100644 --- a/src/qt/forms/debugwindow.ui +++ b/src/qt/forms/debugwindow.ui @@ -29,12 +29,6 @@ - - - 75 - true - - General @@ -166,12 +160,6 @@ - - - 75 - true - - Network @@ -248,12 +236,6 @@ - - - 75 - true - - Block chain @@ -307,12 +289,6 @@ - - - 75 - true - - Memory Pool @@ -936,11 +912,6 @@ 32 - - - 12 - - IBeamCursor @@ -996,13 +967,6 @@ 32 - - - 10 - 75 - true - - IBeamCursor @@ -1572,12 +1536,6 @@ 41 - - - 50 - false - - The buttons below will restart the wallet with command-line options to repair the wallet, fix issues with corrupt blockhain files or missing/obsolete transactions. @@ -1674,13 +1632,6 @@ 16 - - - 10 - 75 - true - - Wallet repair options. diff --git a/src/qt/forms/modaloverlay.ui b/src/qt/forms/modaloverlay.ui index 70743727de8e..4bf301e81a41 100644 --- a/src/qt/forms/modaloverlay.ui +++ b/src/qt/forms/modaloverlay.ui @@ -140,12 +140,6 @@ - - - 75 - true - - Attempting to spend Dash that are affected by not-yet-displayed transactions will not be accepted by the network. @@ -203,12 +197,6 @@ - - - 75 - true - - Number of blocks left @@ -223,12 +211,6 @@ - - - 75 - true - - Last block time @@ -249,12 +231,6 @@ - - - 75 - true - - Progress @@ -283,12 +259,6 @@ - - - 75 - true - - Progress increase per hour @@ -303,12 +273,6 @@ - - - 75 - true - - Estimated time left until synced diff --git a/src/qt/forms/optionsdialog.ui b/src/qt/forms/optionsdialog.ui index 03d446e415cc..4a2c81dba90d 100644 --- a/src/qt/forms/optionsdialog.ui +++ b/src/qt/forms/optionsdialog.ui @@ -908,12 +908,6 @@ https://www.transifex.com/projects/p/dash/ 0 - - - 75 - true - - diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui index af5626b88f56..3be30dad4a46 100644 --- a/src/qt/forms/overviewpage.ui +++ b/src/qt/forms/overviewpage.ui @@ -56,12 +56,6 @@ - - - 75 - true - - Balances @@ -102,12 +96,6 @@ - - - 75 - true - - IBeamCursor @@ -127,12 +115,6 @@ - - - 75 - true - - IBeamCursor @@ -152,12 +134,6 @@ - - - 75 - true - - IBeamCursor @@ -210,12 +186,6 @@ - - - 75 - true - - IBeamCursor @@ -255,12 +225,6 @@ - - - 75 - true - - IBeamCursor @@ -280,12 +244,6 @@ - - - 75 - true - - IBeamCursor @@ -322,12 +280,6 @@ - - - 75 - true - - IBeamCursor @@ -347,12 +299,6 @@ - - - 75 - true - - IBeamCursor @@ -408,12 +354,6 @@ - - - 75 - true - - PrivateSend @@ -501,12 +441,6 @@ - - - 75 - true - - 0 DASH @@ -608,12 +542,6 @@ - - - 75 - true - - Recent transactions diff --git a/src/qt/forms/qrdialog.ui b/src/qt/forms/qrdialog.ui index 8366b7c857a6..dae494ccc825 100644 --- a/src/qt/forms/qrdialog.ui +++ b/src/qt/forms/qrdialog.ui @@ -13,12 +13,6 @@ - - - 75 - true - - QR-Code Title diff --git a/src/qt/forms/receivecoinsdialog.ui b/src/qt/forms/receivecoinsdialog.ui index 5ee764446afc..fa6c1f182250 100644 --- a/src/qt/forms/receivecoinsdialog.ui +++ b/src/qt/forms/receivecoinsdialog.ui @@ -201,12 +201,6 @@ - - - 75 - true - - Requested payments history diff --git a/src/qt/forms/sendcoinsdialog.ui b/src/qt/forms/sendcoinsdialog.ui index 4f00c759ad94..b1e08ca05c93 100644 --- a/src/qt/forms/sendcoinsdialog.ui +++ b/src/qt/forms/sendcoinsdialog.ui @@ -77,15 +77,6 @@ 0 - - - 75 - true - - - - font-weight:bold; - Coin Control Features @@ -126,15 +117,6 @@ - - - 75 - true - - - - font-weight:bold; - Insufficient funds! @@ -218,12 +200,6 @@ - - - 75 - true - - Quantity: @@ -253,12 +229,6 @@ - - - 75 - true - - Bytes: @@ -301,12 +271,6 @@ - - - 75 - true - - Amount: @@ -333,12 +297,6 @@ - - - 75 - true - - Dust: @@ -381,12 +339,6 @@ - - - 75 - true - - Fee: @@ -432,12 +384,6 @@ - - - 75 - true - - After Fee: @@ -464,12 +410,6 @@ - - - 75 - true - - Change: @@ -714,15 +654,6 @@ 0 - - - 75 - true - - - - font-weight:bold; - Transaction Fee: @@ -762,12 +693,6 @@ Using the fallbackfee can result in sending a transaction that will take several hours or days (or never) to confirm. Consider choosing your fee manually or wait until you have validated the complete chain. - - - 75 - true - - Note: Not enough data for fee estimation, using the fallback fee instead. diff --git a/src/qt/forms/signverifymessagedialog.ui b/src/qt/forms/signverifymessagedialog.ui index 90446e553dca..c0fa1f717239 100644 --- a/src/qt/forms/signverifymessagedialog.ui +++ b/src/qt/forms/signverifymessagedialog.ui @@ -110,11 +110,6 @@ - - - true - - true @@ -178,12 +173,6 @@ - - - 75 - true - - @@ -309,12 +298,6 @@ - - - 75 - true - - diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index 12af1fa506eb..9652f67ad743 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -16,6 +16,7 @@ #include #include