Files
IfcOpenShell/src/interface/components/Style.cpp
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

433 lines
15 KiB
C++
Raw Normal View History

2026-05-06 10:47:03 +10:00
// This file was generated with the assistance of an AI coding tool.
/********************************************************************************
* *
* This file is part of IfcOpenShell. *
* *
* IfcOpenShell is free software: you can redistribute it and/or modify *
* it under the terms of the Lesser GNU General Public License as published by *
* the Free Software Foundation, either version 3.0 of the License, or *
* (at your option) any later version. *
* *
* IfcOpenShell is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* Lesser GNU General Public License for more details. *
* *
* You should have received a copy of the Lesser GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
********************************************************************************/
#include "Style.h"
namespace ifcinterface::components::style {
QString buildAppStyleSheet() {
2026-05-06 21:35:12 +10:00
QString stylesheet = QStringLiteral(R"(
2026-05-06 13:13:37 +10:00
QMainWindow#appWindow {
2026-05-06 21:35:12 +10:00
background: ${app_background};
color: ${primary_text};
selection-background-color: ${selection_background};
selection-color: ${selection_text};
}
QDialog#appDialog {
background: ${app_background};
color: ${primary_text};
2026-05-06 10:47:03 +10:00
}
2026-05-07 14:12:27 +10:00
QMessageBox,
QMessageBox QWidget,
QMessageBox QLabel {
background: ${app_background};
color: ${primary_text};
}
2026-05-07 12:21:55 +10:00
QFileDialog,
QFileDialog QWidget,
QFileDialog QStackedWidget,
QFileDialog QSplitter {
background: ${app_background};
color: ${primary_text};
}
2026-05-06 10:47:03 +10:00
QFrame#ribbonShell {
2026-05-06 21:35:12 +10:00
background: ${ribbon_shell_background};
border-bottom: 1px solid ${border};
2026-05-06 10:47:03 +10:00
}
2026-05-07 12:21:55 +10:00
QTabBar#appTabBar {
background: ${ribbon_shell_background};
}
QTabBar#appTabBar::tab {
2026-05-06 10:47:03 +10:00
background: transparent;
2026-05-06 21:35:12 +10:00
color: ${secondary_text};
2026-05-06 10:47:03 +10:00
padding: 8px 14px;
margin-right: 2px;
border-bottom: 2px solid transparent;
}
2026-05-07 12:21:55 +10:00
QTabBar#appTabBar::tab:selected {
2026-05-06 21:35:12 +10:00
color: ${primary_text};
border-bottom: 2px solid ${selection_background};
2026-05-06 10:47:03 +10:00
}
2026-05-07 12:21:55 +10:00
QTabBar#appTabBar::tab:hover {
2026-05-06 21:35:12 +10:00
color: ${ribbon_tab_hover_text};
2026-05-06 10:47:03 +10:00
}
QFrame#ribbonBand {
2026-05-06 21:35:12 +10:00
background: ${ribbon_band_background};
border-top: 1px solid ${border};
}
2026-05-07 12:21:55 +10:00
QTabWidget#appTabWidget::pane {
2026-05-06 21:35:12 +10:00
border: none;
background: transparent;
2026-05-06 10:47:03 +10:00
}
QFrame#ribbonPage {
background: transparent;
}
QFrame#ribbonGroup {
background: transparent;
2026-05-06 21:35:12 +10:00
border-right: 1px solid ${border};
2026-05-06 10:47:03 +10:00
}
2026-05-07 12:21:55 +10:00
QFrame#ribbonGroup[separator="false"] {
border-right: none;
}
2026-05-06 10:47:03 +10:00
QLabel#ribbonGroupLabel {
font-size: 9px;
font-weight: 600;
letter-spacing: 0.08em;
}
QToolButton#ribbonButton {
background: transparent;
border: none;
padding: 6px 4px 4px 4px;
font-size: 11px;
2026-05-06 21:35:12 +10:00
color: ${primary_text};
2026-05-06 10:47:03 +10:00
}
QToolButton#ribbonButton:hover {
2026-05-06 21:35:12 +10:00
background: ${ribbon_button_hover};
2026-05-06 10:47:03 +10:00
}
QToolButton#ribbonButton:pressed {
2026-05-06 21:35:12 +10:00
background: ${ribbon_button_pressed};
2026-05-06 10:47:03 +10:00
}
QFrame#viewportShell {
2026-05-06 21:35:12 +10:00
background: ${viewport_shell_background};
border-top: none;
2026-05-06 10:47:03 +10:00
}
QFrame#viewportFrame {
2026-05-06 21:35:12 +10:00
background: ${viewport_background};
border: 1px solid ${border};
2026-05-06 10:47:03 +10:00
}
QDockWidget {
2026-05-06 21:35:12 +10:00
color: ${primary_text};
2026-05-06 10:47:03 +10:00
}
2026-05-06 13:13:37 +10:00
QLabel {
2026-05-06 21:35:12 +10:00
color: ${primary_text};
2026-05-06 13:13:37 +10:00
background: transparent;
}
QAbstractItemView,
QTreeWidget,
QListWidget,
QTableWidget,
QLineEdit,
2026-05-07 12:21:55 +10:00
QComboBox,
2026-05-06 21:35:12 +10:00
QSpinBox,
QDoubleSpinBox,
QCheckBox,
QPushButton,
2026-05-06 13:13:37 +10:00
QToolButton {
2026-05-06 21:35:12 +10:00
color: ${primary_text};
2026-05-06 13:13:37 +10:00
}
QLabel[textRole="secondary"] {
2026-05-06 21:35:12 +10:00
color: ${secondary_text};
2026-05-06 13:13:37 +10:00
}
QLabel[textRole="disabled"] {
2026-05-06 21:35:12 +10:00
color: ${disabled_text};
2026-05-06 13:13:37 +10:00
}
QLabel[textRole="warning"] {
2026-05-06 21:35:12 +10:00
color: ${warning_text};
2026-05-06 13:13:37 +10:00
}
QLabel#panelTitleText {
2026-05-06 21:35:12 +10:00
color: ${primary_text};
2026-05-06 10:47:03 +10:00
font-size: 10px;
font-weight: 700;
letter-spacing: 0.08em;
}
2026-05-06 13:13:37 +10:00
QToolButton#panelTitleButton {
2026-05-06 21:35:12 +10:00
color: ${panel_title_button};
2026-05-06 10:47:03 +10:00
border: none;
background: transparent;
}
2026-05-06 13:13:37 +10:00
QToolButton#panelTitleButton:hover {
2026-05-06 21:35:12 +10:00
color: ${ribbon_tab_hover_text};
background: ${panel_title_button_hover};
2026-05-06 10:47:03 +10:00
}
QFrame#panel {
2026-05-06 21:35:12 +10:00
background: ${panel_background};
border: 1px solid ${border};
border-radius: ${panel_radius}px;
2026-05-06 10:47:03 +10:00
}
QTreeWidget, QListWidget, QTableWidget, QAbstractScrollArea {
2026-05-06 21:35:12 +10:00
background: ${panel_background};
2026-05-06 10:47:03 +10:00
border: none;
outline: none;
2026-05-06 21:35:12 +10:00
gridline-color: ${border};
2026-05-06 10:47:03 +10:00
}
QTreeWidget::viewport, QListWidget::viewport, QTableWidget::viewport {
2026-05-06 21:35:12 +10:00
background: ${panel_background};
2026-05-06 10:47:03 +10:00
}
QHeaderView::section {
2026-05-06 21:35:12 +10:00
background: ${control_background};
color: ${primary_text};
2026-05-06 10:47:03 +10:00
border: none;
2026-05-06 21:35:12 +10:00
border-bottom: 1px solid ${border};
2026-05-06 10:47:03 +10:00
padding: 7px 8px;
font-weight: 600;
}
QTableCornerButton::section {
2026-05-06 21:35:12 +10:00
background: ${control_background};
2026-05-06 10:47:03 +10:00
border: none;
}
QScrollArea {
2026-05-06 21:35:12 +10:00
background: ${panel_background};
2026-05-06 10:47:03 +10:00
border: none;
}
QScrollArea > QWidget > QWidget {
2026-05-06 21:35:12 +10:00
background: ${panel_background};
2026-05-06 10:47:03 +10:00
}
QLineEdit {
2026-05-06 21:35:12 +10:00
background: ${control_background};
border: 1px solid ${border};
border-radius: ${panel_radius}px;
padding: ${padding}px ${padding}px;
color: ${primary_text};
2026-05-06 10:47:03 +10:00
}
QLineEdit:focus {
2026-05-06 21:35:12 +10:00
border: 1px solid ${control_border_focus};
}
2026-05-07 12:21:55 +10:00
QComboBox {
background: ${control_background};
border: 1px solid ${border};
border-radius: ${panel_radius}px;
padding: ${padding}px ${padding}px;
}
QComboBox:focus {
border: 1px solid ${control_border_focus};
}
QComboBox QAbstractItemView {
background: ${panel_background};
border: 1px solid ${border};
selection-background-color: ${selection_background};
selection-color: ${selection_text};
}
2026-05-06 21:35:12 +10:00
QSpinBox, QDoubleSpinBox {
background: ${control_background};
border: 1px solid ${border};
border-radius: ${panel_radius}px;
padding: ${padding}px ${padding}px;
}
QSpinBox:focus, QDoubleSpinBox:focus {
border: 1px solid ${control_border_focus};
}
QCheckBox {
background: transparent;
spacing: 8px;
}
QCheckBox::indicator {
width: 16px;
height: 16px;
border: 1px solid ${border};
border-radius: ${panel_radius}px;
background: ${control_background};
}
QCheckBox::indicator:hover {
background: ${ribbon_button_hover};
2026-05-06 10:47:03 +10:00
}
2026-05-06 21:35:12 +10:00
QCheckBox::indicator:checked {
border: 1px solid ${selection_background};
background: ${selection_background};
}
QPushButton {
background: ${control_background};
border: 1px solid ${border};
border-radius: ${panel_radius}px;
padding: ${padding}px ${padding}px;
}
QPushButton:hover {
background: ${ribbon_button_hover};
}
QPushButton:pressed {
background: ${ribbon_button_pressed};
}
2026-05-07 17:10:04 +10:00
QMenu {
background: ${panel_background};
color: ${primary_text};
border: 1px solid ${border};
padding: 4px;
}
QMenu::item {
background: transparent;
color: ${primary_text};
padding: 6px 24px 6px 10px;
border-radius: ${panel_radius}px;
}
QMenu::item:selected {
background: ${selection_background};
color: ${selection_text};
}
QMenu::item:disabled {
color: ${disabled_text};
}
QMenu::separator {
height: 1px;
background: ${border};
margin: 4px 8px;
}
QMenu::icon {
padding-left: 2px;
}
2026-05-06 21:35:12 +10:00
QFrame#entityClassBox,
QGroupBox#propertySetBox {
background: ${box_background};
border: 1px solid ${border};
border-radius: ${panel_radius}px;
2026-05-06 10:47:03 +10:00
}
QLabel#entityClassLabel {
2026-05-06 21:35:12 +10:00
color: ${primary_text};
2026-05-06 10:47:03 +10:00
font-weight: 700;
background: transparent;
}
2026-05-06 12:36:28 +10:00
QWidget#keyValueTable {
2026-05-06 10:47:03 +10:00
background: transparent;
}
QTreeView::item, QListView::item, QTableView::item {
padding: 4px;
}
QScrollBar:vertical {
background: transparent;
width: 10px;
margin: 2px 2px 2px 0;
}
QScrollBar:horizontal {
background: transparent;
height: 10px;
margin: 0 2px 2px 2px;
}
QScrollBar::handle:vertical, QScrollBar::handle:horizontal {
2026-05-06 21:35:12 +10:00
background: ${scroll_handle};
border-radius: ${panel_radius}px;
2026-05-06 10:47:03 +10:00
min-height: 24px;
min-width: 24px;
}
QScrollBar::handle:vertical:hover, QScrollBar::handle:horizontal:hover {
2026-05-06 21:35:12 +10:00
background: ${scroll_handle_hover};
2026-05-06 10:47:03 +10:00
}
QScrollBar::add-line, QScrollBar::sub-line,
QScrollBar::add-page, QScrollBar::sub-page {
background: transparent;
border: none;
}
QStatusBar {
2026-05-06 21:35:12 +10:00
background: ${status_background};
2026-05-06 10:47:03 +10:00
}
QStatusBar QLabel {
2026-05-06 21:35:12 +10:00
color: ${secondary_text};
2026-05-06 10:47:03 +10:00
background: transparent;
border: none;
padding: 2px 8px;
}
QGroupBox {
background: transparent;
2026-05-06 21:35:12 +10:00
border: 1px solid ${border};
border-radius: ${panel_radius}px;
2026-05-06 10:47:03 +10:00
margin-top: 10px;
padding-top: 10px;
}
2026-05-06 21:35:12 +10:00
QGroupBox#propertySetBox::title {
2026-05-06 10:47:03 +10:00
subcontrol-origin: margin;
2026-05-06 21:35:12 +10:00
left: ${padding}px;
2026-05-06 10:47:03 +10:00
padding: 0 4px;
2026-05-06 21:35:12 +10:00
color: ${primary_text};
2026-05-06 10:47:03 +10:00
}
2026-05-06 21:35:12 +10:00
QGroupBox#propertySetBox > QWidget {
background: ${box_background};
2026-05-06 10:47:03 +10:00
}
QWidget#panelSection {
background: transparent;
}
QWidget#panelSectionFilterWrapper {
background: transparent;
}
2026-05-06 13:13:37 +10:00
QLabel#keyValueTrailingIconLabel {
2026-05-06 10:47:03 +10:00
background: transparent;
}
2026-05-06 12:36:28 +10:00
QWidget#panelScrollBody {
2026-05-06 21:35:12 +10:00
background: ${panel_background};
2026-05-06 10:47:03 +10:00
}
QFrame#panelSectionHeader {
2026-05-06 21:35:12 +10:00
background: ${section_header_background};
2026-05-06 10:47:03 +10:00
}
QToolButton#panelSectionHeaderButton {
background: transparent;
border: none;
2026-05-06 21:35:12 +10:00
color: ${primary_text};
2026-05-06 10:47:03 +10:00
font-weight: 700;
text-align: left;
2026-05-06 21:35:12 +10:00
padding: ${section_header_padding}px;
2026-05-06 10:47:03 +10:00
margin: 0;
}
QToolButton#panelSectionHeaderButton:hover {
2026-05-06 21:35:12 +10:00
color: ${ribbon_tab_hover_text};
2026-05-06 10:47:03 +10:00
}
QToolButton#panelSectionHeaderButton::menu-indicator {
image: none;
width: 0;
}
QToolButton#panelSectionFilterToggle {
background: transparent;
border: none;
2026-05-06 21:35:12 +10:00
padding: ${section_header_padding}px;
2026-05-06 10:47:03 +10:00
}
QToolButton#panelSectionFilterToggle:hover {
2026-05-06 21:35:12 +10:00
background: ${panel_title_button_hover};
2026-05-06 10:47:03 +10:00
}
QWidget#panelSectionBody {
background: transparent;
}
2026-05-06 12:36:28 +10:00
QLabel#keyValueValueLabel {
2026-05-06 21:35:12 +10:00
color: ${key_value_value_text};
2026-05-06 10:47:03 +10:00
background: transparent;
}
2026-05-06 21:35:12 +10:00
)");
stylesheet.replace("${panel_radius}", QString::number(metrics::panel_radius));
stylesheet.replace("${padding}", QString::number(metrics::padding));
stylesheet.replace("${section_header_padding}", QString::number(metrics::section_header_padding));
stylesheet.replace("${app_background}", palette::app_background);
stylesheet.replace("${border}", palette::border);
stylesheet.replace("${selection_background}", palette::selection_background);
stylesheet.replace("${selection_text}", palette::selection_text);
stylesheet.replace("${ribbon_shell_background}", palette::ribbon_shell_background);
stylesheet.replace("${ribbon_tab_hover_text}", palette::ribbon_tab_hover_text);
stylesheet.replace("${ribbon_band_background}", palette::ribbon_band_background);
stylesheet.replace("${ribbon_button_hover}", palette::ribbon_button_hover);
stylesheet.replace("${ribbon_button_pressed}", palette::ribbon_button_pressed);
stylesheet.replace("${viewport_shell_background}", palette::viewport_shell_background);
stylesheet.replace("${viewport_background}", palette::viewport_background);
stylesheet.replace("${panel_title_button}", palette::panel_title_button);
stylesheet.replace("${panel_title_button_hover}", palette::panel_title_button_hover);
stylesheet.replace("${panel_background}", palette::panel_background);
stylesheet.replace("${control_background}", palette::control_background);
stylesheet.replace("${control_border_focus}", palette::control_border_focus);
stylesheet.replace("${box_background}", palette::box_background);
stylesheet.replace("${scroll_handle}", palette::scroll_handle);
stylesheet.replace("${scroll_handle_hover}", palette::scroll_handle_hover);
stylesheet.replace("${status_background}", palette::status_background);
stylesheet.replace("${section_header_background}", palette::section_header_background);
stylesheet.replace("${key_value_value_text}", palette::key_value_value_text);
stylesheet.replace("${primary_text}", palette::primary_text);
stylesheet.replace("${secondary_text}", palette::secondary_text);
stylesheet.replace("${disabled_text}", palette::disabled_text);
stylesheet.replace("${warning_text}", palette::warning_text);
return stylesheet;
2026-05-06 10:47:03 +10:00
}
} // namespace ifcinterface::components::style