diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3dbdc92
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+.ropeproject/
+__pycache__/*
+*.py[cod]
+Session.vim
+.idea/
diff --git a/CustomMessageBox.py b/CustomMessageBox.py
new file mode 100644
index 0000000..60e85ba
--- /dev/null
+++ b/CustomMessageBox.py
@@ -0,0 +1,151 @@
+import os
+import re
+from qgis.PyQt.QtWidgets import (
+ QWidget, QWidgetAction, QCalendarWidget, QMenu, QToolButton, QPushButton,
+ QApplication, QAbstractItemView, QStyleOptionViewItem, QDataWidgetMapper,
+ QMessageBox, QCheckBox, QHeaderView, QGridLayout, QItemDelegate, QStyle,
+ QLabel, QDialogButtonBox, QProgressDialog, QScrollArea, QCompleter,
+ QFileDialog,
+ QComboBox, QFontComboBox, QFrame, QDialog)
+from qgis.PyQt.QtGui import (
+ QRegExpValidator, QColor, QIcon, QPen, QStandardItemModel, QStandardItem,
+ QTextDocument, QPixmap, QDesktopServices
+)
+from PyQt5.QtCore import Qt
+
+
+def normalize_path(path):
+ return os.path.normpath(os.sep.join(re.split(r'\\|/', path)))
+
+
+class CustomMessageBox(QMessageBox):
+ stylesheet = """
+ * {
+ background-color: rgb(53, 85, 109, 220);
+ color: rgb(255, 255, 255);
+ font: 10pt "Segoe UI";
+ border: 0px;
+ }
+
+ QAbstractItemView {
+ selection-background-color: rgb(87, 131, 167);
+ }
+
+ QPushButton {
+ border: none;
+ border-width: 2px;
+ border-radius: 6px;
+ background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
+ padding: 5px 15px;
+ }
+
+ QPushButton:checked {
+ background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
+ border: solid;
+ border-width: 2px;
+ border-color: rgb(65, 97, 124);
+ }
+
+ QPushButton:pressed {
+ background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
+ border: solid;
+ border-width: 2px;
+ border-color: rgb(65, 97, 124);
+ }
+ """
+
+ def __init__(self, parent=None, text='', image=''):
+ super(CustomMessageBox, self).__init__(parent)
+ self.text = text
+
+ self.rebuild_layout(text, image)
+
+ def rebuild_layout(self, text, image):
+ self.setStyleSheet(self.stylesheet)
+
+ scrll = QScrollArea(self)
+ scrll.setWidgetResizable(True)
+ self.qwdt = QWidget()
+ self.qwdt.setLayout(QGridLayout(self))
+ grd = self.findChild(QGridLayout)
+ if text:
+ lbl = QLabel(text, self)
+ lbl.setStyleSheet(self.stylesheet)
+ lbl.setAlignment(Qt.AlignCenter)
+ lbl.setWordWrap(False)
+ lbl.setTextInteractionFlags(
+ Qt.TextSelectableByMouse)
+ self.qwdt.layout().addWidget(lbl, 1, 0)
+ if image:
+ px_lbl = QLabel(self)
+ img_path = normalize_path(image)
+ pixmap = QPixmap(img_path)
+ px_lbl.setPixmap(pixmap)
+ px_lbl.setMinimumSize(pixmap.width(), pixmap.height())
+ px_lbl.setAlignment(Qt.AlignCenter)
+ px_lbl.setWordWrap(False)
+ self.qwdt.layout().addWidget(px_lbl, 0, 0)
+
+ scrll.setWidget(self.qwdt)
+ scrll.setContentsMargins(15, 5, 15, 10)
+ scrll.setStyleSheet(self.stylesheet)
+ grd.addWidget(scrll, 0, 1)
+ self.layout().removeItem(self.layout().itemAt(0))
+ self.layout().removeItem(self.layout().itemAt(0))
+ self.setWindowTitle('GIAP-PolaMap')
+ self.setWindowIcon(QIcon(':/plugins/GIAP-PolaMap/icons/giap_logo.png'))
+
+ def button_ok(self):
+ self.setStandardButtons(QMessageBox.Ok)
+ self.setDefaultButton(QMessageBox.Ok)
+ self.set_proper_size()
+ QMessageBox.exec_(self)
+
+ def button_yes_no(self):
+ self.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
+ self.setDefaultButton(QMessageBox.No)
+ self.set_proper_size()
+ return QMessageBox.exec_(self)
+
+ def button_yes_no_open(self):
+ self.setStandardButtons(
+ QMessageBox.Yes | QMessageBox.No | QMessageBox.Open)
+ self.setDefaultButton(QMessageBox.No)
+ self.set_proper_size()
+ return QMessageBox.exec_(self)
+
+ def button_ok_open(self):
+ self.setStandardButtons(QMessageBox.Ok | QMessageBox.Open)
+ self.setDefaultButton(QMessageBox.Open)
+ self.set_proper_size()
+ return QMessageBox.exec_(self)
+
+ def button_editr_close(self):
+ self.setStandardButtons(
+ QMessageBox.Save | QMessageBox.Cancel | QMessageBox.Discard)
+ self.setDefaultButton(QMessageBox.Discard)
+ self.set_proper_size()
+ return QMessageBox.exec_(self)
+
+ def set_proper_size(self):
+ scrll = self.findChild(QScrollArea)
+ new_size = self.qwdt.sizeHint()
+ if self.qwdt.sizeHint().height() > 600:
+ new_size.setHeight(600)
+ else:
+ new_size.setHeight(self.qwdt.sizeHint().height())
+ if self.qwdt.sizeHint().width() > 800:
+ new_size.setWidth(800)
+ new_size.setHeight(new_size.height() + 20)
+ else:
+ btn_box_width = self.findChild(QDialogButtonBox).sizeHint().width()
+ if self.qwdt.sizeHint().width() > btn_box_width:
+ new_size.setWidth(self.qwdt.sizeHint().width())
+ else:
+ new_size.setWidth(btn_box_width)
+ scrll.setFixedSize(new_size)
+ scrll.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
+ scrll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
+ self.show()
+ scrll.horizontalScrollBar().setValue(
+ int(scrll.horizontalScrollBar().maximum() / 2))
diff --git a/Kompozycje/DefaultCompositions.py b/Kompozycje/DefaultCompositions.py
index 99e500d..4860d0f 100644
--- a/Kompozycje/DefaultCompositions.py
+++ b/Kompozycje/DefaultCompositions.py
@@ -1,314 +1,71 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import
-import os
-import qgis
-from qgis.core import QgsProject
-from .CompositionsLib import get_all_groups_layers, LayersPanel, get_checked_layers_ids_from_composition, \
- get_layers_ids_from_composition
-from GIAP_funkcje import (identify_layer_in_group, get_project_config)
+from .CompositionsLib import get_all_groups_layers, LayersPanel, \
+ get_checked_layers_ids_from_composition, get_layers_ids_from_composition,\
+ get_map_layer
+from ..utils import (identify_layer_in_group, get_project_config)
default_compositions = {}
-# 'Adresat': [('ADRESAT', 'AD_PunktAdresowy', True),
-# ('GRANICE', 'DZIAŁKI EWIDENCYJNE', True)],
-# 'PRZEZNACZENIE MPZP STANDARD': [],
-# 'PRZEZNACZENIE MPZP ORYGINAŁ': [],
-# 'PLIKI RASTROWE': [('DOKUMENTY PLANISTYCZNE', 'PLIKI RASTROWE', True)],
-# 'PLIKI RASTROWE PRZYCIĘTE': [('', 'PLIKI RASTROWE PRZYCIĘTE', True)],
-# }
def update_wszystkie_default_compositions():
- wszystkie_layer_list = [
- 'DZIAŁKI EWIDENCYJNE',
- 'PRZEZNACZENIE MPZP',
- ]
- all_layers = get_all_groups_layers()
- n = []
- for layer_path in all_layers:
- splitted_layer = layer_path.rsplit(':')
- group = ':'.join(splitted_layer[:-1]) if len(
- splitted_layer) > 1 else ''
- layer = splitted_layer[-1]
- if layer in wszystkie_layer_list:
- n.append((group, layer, True))
+ all_layers_list = []
+ sel_list = LayersPanel().start_getting_visible_layers()
+ for group_layer in get_all_groups_layers():
+ colon_index = group_layer.rfind(':')
+ if colon_index == -1:
+ layer_group = ''
else:
- n.append((group, layer, False))
- default_compositions['Wszystkie warstwy'] = n
+ layer_group = group_layer[:colon_index]
+ layer_name = group_layer[colon_index + 1:]
+ map_layer, layer_group, layer_name = get_map_layer(
+ layer_group, layer_name)
+ active = True if map_layer.id() in sel_list else False
+ n = [layer_group, layer_name, active]
+ all_layers_list.append(tuple(n))
-def update_mpzp_default_compositions():
- mpzp_groups = [
- 'DOKUMENTY PLANISTYCZNE',
- 'PLIKI RASTROWE PRZYCIĘTE',
- ]
- mpzp_layers = [
- 'PRZEZNACZENIE MPZP'
- ]
- all_layers = get_all_groups_layers()
- n = []
- for layer_path in all_layers:
- splitted_layer = layer_path.rsplit(':')
- group = ':'.join(splitted_layer[:-1]) if len(
- splitted_layer) > 1 else ''
- for mg in mpzp_groups:
- if mg in group:
- layer = splitted_layer[-1]
- if layer in mpzp_layers:
- n.append((group, layer, True))
- else:
- n.append((group, layer, False))
- default_compositions['PRZEZNACZENIE MPZP ORYGINAŁ'] = n
- default_compositions['PRZEZNACZENIE MPZP STANDARD'] = n
-
-
-def update_pliki_rastrowe_compositions():
- all_layers = get_all_groups_layers()
- n = []
- for layer_path in all_layers:
- splitted_layer = layer_path.rsplit(':')
- group = ':'.join(splitted_layer[:-1]) if len(
- splitted_layer) > 1 else ''
- if 'DOKUMENTY PLANISTYCZNE:PLIKI RASTROWE' in group:
- layer = splitted_layer[-1]
- n.append((group, layer, True))
- default_compositions['PLIKI RASTROWE'] = n
-
-
-def update_pliki_rastrowe_przyciete_compositions():
- all_layers = get_all_groups_layers()
- n = []
- for layer_path in all_layers:
- splitted_layer = layer_path.rsplit(':')
- group = ':'.join(splitted_layer[:-1]) if len(
- splitted_layer) > 1 else ''
- if 'PLIKI RASTROWE PRZYCIĘTE' in group:
- layer = splitted_layer[-1]
- n.append((group, layer, True))
- default_compositions['PLIKI RASTROWE PRZYCIĘTE'] = n
-
-
-def update_default_compositions():
- update_wszystkie_default_compositions()
-
-
-def __show_specified_groups(groups=['DOKUMENTY PLANISTYCZNE',
- 'PLIKI RASTROWE PRZYCIĘTE']):
- # dokumenty planistyczne i rastry przyciete do widoku
- panel = LayersPanel()
- panel.uncheckAll()
- panel.hideUncheckedNodes()
- for group_name in groups:
- group = panel.root.findGroup(group_name)
- panel.hideNode(group, False)
- panel.showHiddenNodes(group)
-
-
-def load_qml_to_layer(layer, qml_name):
- qml_path = ''
- prjpath = QgsProject.instance().fileName()
- proj_dir = os.path.dirname(os.path.abspath(prjpath))
- up_dir = os.path.dirname(proj_dir)
- for file in os.listdir(os.path.join(up_dir, 'PLIKI_WEKTOROWE', "MPZP")):
- if file.endswith(qml_name):
- qml_path = os.path.join(up_dir, 'PLIKI_WEKTOROWE', "MPZP", file)
- if os.path.exists(qml_path):
- layer.loadNamedStyle(qml_path)
- layer.triggerRepaint()
-
-
-def set_mpzp_strefy_linie():
- __show_specified_groups()
- map_layer = identify_layer_in_group('MPZP', 'STREFY LINIE')
- if map_layer:
- LayersPanel().checkLayersByIds([map_layer.id()])
-
-def set_mpzp_wymiarowanie():
- __show_specified_groups()
- map_layer = identify_layer_in_group('MPZP', 'WYMIAROWANIE')
- if map_layer:
- LayersPanel().checkLayersByIds([map_layer.id()])
-
-def set_punktowe_standard():
- __show_specified_groups()
- map_layer = identify_layer_in_group('MPZP',
- 'DODATKOWE INFORMACJE PUNKTOWE')
- if map_layer:
- LayersPanel().checkLayersByIds([map_layer.id()])
- load_qml_to_layer(
- map_layer,
- 'mpzp_dodatkowe_punktowe_S_STANDARD.qml'
- )
-
-
-def set_punktowe_oryginal():
- __show_specified_groups()
- map_layer = identify_layer_in_group('MPZP',
- 'DODATKOWE INFORMACJE PUNKTOWE')
- if map_layer:
- LayersPanel().checkLayersByIds([map_layer.id()])
- load_qml_to_layer(
- map_layer,
- 'mpzp_dodatkowe_punktowe_S_ORYGINAL.qml'
- )
-
-
-def set_liniowe_standard():
- __show_specified_groups()
- map_layer = identify_layer_in_group('MPZP',
- 'DODATKOWE INFORMACJE LINIOWE')
- if map_layer:
- LayersPanel().checkLayersByIds([map_layer.id()])
- load_qml_to_layer(
- map_layer,
- 'mpzp_dodatkowe_liniowe_S_STANDARD.qml'
- )
-
-
-def set_liniowe_oryginal():
- __show_specified_groups()
- map_layer = identify_layer_in_group('MPZP',
- 'DODATKOWE INFORMACJE LINIOWE')
- if map_layer:
- LayersPanel().checkLayersByIds([map_layer.id()])
- load_qml_to_layer(
- map_layer,
- 'mpzp_dodatkowe_liniowe_S_ORYGINAL.qml'
- )
-
-
-def set_mpzp_standard():
- __show_specified_groups()
- map_layer = identify_layer_in_group('MPZP',
- 'PRZEZNACZENIE MPZP')
- if map_layer:
- LayersPanel().checkLayersByIds([map_layer.id()])
- load_qml_to_layer(
- map_layer,
- 'mpzp_przeznaczenie_S_STANDARD.qml'
- )
-
-
-def set_mpzp_oryginal():
- __show_specified_groups()
- map_layer = identify_layer_in_group('MPZP',
- 'PRZEZNACZENIE MPZP')
- if map_layer:
- LayersPanel().checkLayersByIds([map_layer.id()])
- load_qml_to_layer(
- map_layer,
- 'mpzp_przeznaczenie_S_ORYGINAL.qml'
- )
-
-
-def set_pliki_rastrowe():
- update_default_compositions()
- comp = get_compositions()
- rastry = ['DOKUMENTY PLANISTYCZNE:PLIKI RASTROWE']
- LayersPanel().checkGroupsByName(rastry)
- LayersPanel().hideUncheckedNodes()
- if not comp['PLIKI RASTROWE'][0][2]:
- LayersPanel().uncheckGroupsByName(rastry)
- set_default_styles()
-
-
-def set_pliki_rastrowe_przyciete():
- comp = get_compositions()
- rastry_przyciete = ['PLIKI RASTROWE PRZYCIĘTE']
- LayersPanel().checkGroupsByName(rastry_przyciete)
- LayersPanel().hideUncheckedNodes()
- if not comp['PLIKI RASTROWE PRZYCIĘTE'][0][2]:
- LayersPanel().uncheckGroupsByName(rastry_przyciete)
- set_default_styles()
+ default_compositions['Wszystkie warstwy'] = all_layers_list
def set_wszystkie_warstwy():
comp = get_compositions()
- checked_layers_ids, groups = get_checked_layers_ids_from_composition(comp['Wszystkie warstwy']['layers']
+ checked_layers_ids, groups = get_checked_layers_ids_from_composition(
+ comp['Wszystkie warstwy']['layers']
)
LayersPanel().checkLayersByIds(checked_layers_ids)
LayersPanel().checkGroupsByName(groups)
compositons_special = {
- # 'MPZP STREFY LINIE': set_mpzp_strefy_linie,
- # 'DODATKOWE PUNKTOWE STANDARD': set_punktowe_standard,
- # 'DODATKOWE PUNKTOWE ORYGINAŁ': set_punktowe_oryginal,
- # 'DODATKOWE LINIOWE STANDARD': set_liniowe_standard,
- # 'DODATKOWE LINIOWE ORYGINAŁ': set_liniowe_oryginal,
- 'PRZEZNACZENIE MPZP STANDARD': set_mpzp_standard,
- 'PRZEZNACZENIE MPZP ORYGINAŁ': set_mpzp_oryginal,
- # 'PLIKI RASTROWE': set_pliki_rastrowe,
- # 'PLIKI RASTROWE PRZYCIĘTE': set_pliki_rastrowe_przyciete,
'Wszystkie warstwy': set_wszystkie_warstwy,
}
def get_compositions():
- update_default_compositions()
+ update_wszystkie_default_compositions()
comp = eval(
get_project_config('Kompozycje',
'domyslne_kompozycje',
str(default_compositions)
)
)
+
for name in default_compositions:
if name not in comp:
comp[name] = default_compositions[name]
return comp
-def compositions_names():
- compositions_dict = get_compositions()
- sorted_comps = sorted(list(compositions_dict.items()), key=lambda x: x[1]['order'])
- sorted_comps_names = [y[0] for y in sorted_comps]
- return sorted_comps_names
-
-
-def set_simple_composition(name):
- compositions = get_compositions()
- layers_ids = get_layers_ids_from_composition(
- compositions[name]['layers'])
- checked_layers_ids = get_checked_layers_ids_from_composition(
- compositions[name]['layers'])
- LayersPanel().checkLayersByIds(layers_ids)
- # ukryj wszystkie warstwy i grupy ktore nie sa zaznaczone
- LayersPanel().hideUncheckedNodes()
- LayersPanel().uncheckAll()
- LayersPanel().checkLayersByIds(checked_layers_ids)
- set_default_styles()
-
-
def set_composition(name):
if name in compositons_special:
compositons_special[name]()
- else:
- set_simple_composition(name)
-
-
-def set_default_styles_decorator(func):
- def set_default_styles_wrapper():
- giap_layout = 'giap_layout'
- if giap_layout in qgis.utils.plugins:
- spdp = qgis.utils.plugins[giap_layout]
- combo = giap_layout.main_widget.styleComboBox
- text = u'MPZP ORYGINAŁ'
- text_id = combo.findText(text)
- if text_id == -1:
- func()
- else:
- func()
- return set_default_styles_wrapper
-@set_default_styles_decorator
-def set_default_styles():
- layers_qml = {
- 'DODATKOWE INFORMACJE PUNKTOWE': 'mpzp_dodatkowe_punktowe_S_ORYGINAL.qml',
- 'DODATKOWE INFORMACJE LINIOWE': "mpzp_dodatkowe_liniowe_S_ORYGINAL.qml",
- 'PRZEZNACZENIE MPZP': 'mpzp_przeznaczenie_S_ORYGINAL.qml',
- }
- for layer, qml in list(layers_qml.items()):
- map_layer = identify_layer_in_group('MPZP', layer)
- if map_layer:
- load_qml_to_layer(map_layer, qml)
+def compositions_names():
+ compositions_dict = get_compositions()
+ sorted_comps = sorted(list(compositions_dict.items()),
+ key=lambda x: x[1]['order'])
+ sorted_comps_names = [y[0] for y in sorted_comps]
+ return sorted_comps_names
diff --git a/Kompozycje/Kompozycje.py b/Kompozycje/Kompozycje.py
index 373eb5d..3707faf 100644
--- a/Kompozycje/Kompozycje.py
+++ b/Kompozycje/Kompozycje.py
@@ -1,24 +1,26 @@
# -*- coding: utf-8 -*-
+import os
from collections import OrderedDict
+from time import sleep
import uuid
-from PyQt5.QtCore import QObject, pyqtSignal, QItemSelectionModel, Qt
-from PyQt5.QtWidgets import QMessageBox, QApplication, QItemDelegate, QCheckBox
+from PyQt5.QtCore import QObject, pyqtSignal, QItemSelectionModel, \
+ Qt
+from PyQt5.QtWidgets import QMessageBox, QApplication, QItemDelegate, \
+ QCheckBox, QFileDialog, QProgressDialog
-from qgis.PyQt.QtGui import QStandardItemModel, QStandardItem
+from qgis.PyQt.QtGui import QStandardItemModel, QStandardItem, QIcon
from qgis.core import QgsProject, QgsLayerTreeNode
-from GIAPSettings import write_user_compositions_gui, get_user_compositions_gui
from .CompositionsSaverDialog import CompositionsSaverDialog
from .dodajKompozycje import DodajKompozycjeDialog
from .nowa_kompozycja import NowaKompozycjaDialog
-from GIAP_funkcje import (
- set_project_config,
- ConfigSaveProgressDialog,
- CustomMessageBox,
- identify_layer_by_id)
+from ..CustomMessageBox import CustomMessageBox
+
+from ..utils import get_project_config, SingletonModel,\
+ set_project_config, identify_layer_by_id, ConfigSaveProgressDialog
from .CompositionsLib import (
LayersPanel as lsp,
@@ -31,9 +33,81 @@
from . import UserCompositions
from . import DefaultCompositions
+
LayersPanel = lsp
wszystkie_warstwy_visible_groups = ['GRANICE', 'DOKUMENTY PLANISTYCZNE:MPZP']
+CODING_TYPE = 'utf-8'
+
+CONFIG_SEPARATOR = '::&*&::'
+CONFIG_LINES_SEPARATOR = ';;@@\n@@;;'
+
+FILE_CONFIG_EXTENSION = '.giapconfig'
+USER_COMPOSITIONS_EXTENSION = '.giapcomp'
+
+# COMPOSITIONS_SCOPE = "Kompozycje"
+
+
+def write_user_compositions(comp, filename):
+ text = comp
+ with open(filename, 'wb') as f:
+ f.write(text.encode(CODING_TYPE))
+
+
+def write_user_compositions_gui(comp_list):
+ save_path = get_project_config('Sciezka', 'sciezka_do_zapisu', '')
+ filename, __ = QFileDialog.getSaveFileName(
+ None,
+ "Zachowaj jako",
+ save_path,
+ f'*{USER_COMPOSITIONS_EXTENSION}'
+ )
+ if filename:
+ progress = ProgressDialog(None, 'Trwa zapisywanie')
+ progress.start()
+ new_dirname = os.path.dirname(save_path)
+ QApplication.processEvents()
+ set_project_config('Sciezka', 'sciezka_do_zapisu', new_dirname)
+ QApplication.processEvents()
+ if not filename.endswith(USER_COMPOSITIONS_EXTENSION):
+ filename += USER_COMPOSITIONS_EXTENSION
+ write_user_compositions(comp_list, filename)
+ QApplication.processEvents()
+ progress.stop()
+ CustomMessageBox(None, f'Zapisano plik {filename}.').button_ok()
+
+
+def get_user_compositions(filename):
+ with open(filename, 'rb') as f:
+ text = f.read().decode(CODING_TYPE)
+ comp_dict = eval(str(text))
+ return comp_dict
+
+
+def get_user_compositions_gui():
+ save_path = get_project_config('Sciezka', 'sciezka_do_zapisu', '')
+ filename, __ = QFileDialog.getOpenFileName(
+ None,
+ "Otwórz",
+ save_path,
+ f'*{USER_COMPOSITIONS_EXTENSION}'
+ )
+ user_comp = {}
+ if filename:
+ progress = ProgressDialog(None, "Trwa wczytywanie")
+ progress.start()
+ new_dirname = os.path.dirname(save_path)
+ QApplication.processEvents()
+ set_project_config('Sciezka', 'sciezka_do_zapisu', new_dirname)
+ QApplication.processEvents()
+ try:
+ QApplication.processEvents()
+ user_comp = get_user_compositions(filename)
+ except Exception:
+ CustomMessageBox(None, 'Nie udało się wczytać ustawień!').button_ok()
+ progress.stop()
+ return user_comp
+
class CompositionsTool(object):
def __init__(self, iface, parent=None):
@@ -44,7 +118,8 @@ def __init__(self, iface, parent=None):
self.domyslne_kompozycje = dict()
self.stworzone_kompozycje = dict()
self.combo_box = None
- self.dock.kompozycje_config.clicked.connect(self.config)
+
+ self.dock.toolButton_compositions.clicked.connect(self.config)
def start(self):
prjpath = QgsProject.instance().fileName()
@@ -54,18 +129,28 @@ def start(self):
self.modify_tool = CompositionsConfig(self)
self.domyslne_kompozycje = DefaultCompositions.get_compositions()
self.stworzone_kompozycje = UserCompositions.get_compositions()
- self.modify_tool.check_comps_schema(self.domyslne_kompozycje, 'domyślnych')
- self.modify_tool.check_comps_schema(self.stworzone_kompozycje, 'użytkownika')
+ self.modify_tool.check_comps_schema(
+ self.domyslne_kompozycje, 'domyślnych')
+ self.modify_tool.check_comps_schema(
+ self.stworzone_kompozycje, 'użytkownika')
self.combo_box = CompositionsComboBox(self)
connect_nodes(QgsProject.instance().layerTreeRoot())
- self.modify_tool.compositionsSaved.connect(self.combo_box.fill_with_kompozycje)
+ self.modify_tool.compositionsSaved.connect(
+ self.combo_box.fill_with_kompozycje)
def config(self):
"""
Metoda służąca do otworzenia okna ustawian kompozycji.
"""
+ if self.modify_tool is None:
+ CustomMessageBox(
+ self.dock,
+ 'Kompozycje są dostępne tylko w projekatach zapisanych'
+ 'na dysku!'
+ ).button_ok()
+ return
self.modify_tool.run()
def unload(self):
@@ -86,12 +171,6 @@ def __init__(self, parent):
self.model_kompozycji = QStandardItemModel()
self.order_changed = False
- def reset_default(self):
- QgsProject.instance().writeEntry("Kompozycje", "domyslne_kompozycje", "{}")
- QgsProject.instance().write()
- self.dlg.close()
- self.run()
-
def save_to_project_file(self):
self.save(False)
QgsProject.instance().write()
@@ -110,19 +189,15 @@ def create_table_model(self):
self.model_kompozycji.clear()
if self.dlg.radioButton_1.isChecked():
self.load_compositions(self.kompozycje.stworzone_kompozycje)
- else:
- self.load_compositions(self.kompozycje.domyslne_kompozycje)
self.order_changed = False
def run(self):
self.dlg = DodajKompozycjeDialog()
self.dlg.radioButton_1.clicked.connect(self.create_table_model)
- self.dlg.radioButton_2.clicked.connect(self.create_table_model)
self.dlg.dodaj_kompozycje.clicked.connect(self.dodaj)
self.dlg.edytuj_kompozycje.clicked.connect(self.edytuj)
self.dlg.usun_kompozycje.clicked.connect(self.usun)
- self.dlg.reset.clicked.connect(self.reset_default)
self.dlg.zapisz.clicked.connect(self.write_file)
self.dlg.wczytaj.clicked.connect(self.read_file)
self.dlg.komp_dol.clicked.connect(self.move_comp_down)
@@ -189,7 +264,8 @@ def usun(self):
self.order_changed = True
def load_compositions(self, compositions):
- sorted_comps = sorted(list(compositions.items()), key=lambda x: x[1]['order'])
+ sorted_comps = sorted(list(compositions.items()),
+ key=lambda x: x[1]['order'])
sorted_comps_names = [y[0] for y in sorted_comps]
for comp_name in sorted_comps_names:
item = QStandardItem(str(comp_name))
@@ -316,8 +392,10 @@ def check_update_comps(self, compositions):
def check_all_layers_comp(self):
layertree_changed = False
all_groups_layers = get_all_groups_layers()
- def_layers = [':'.join([tup[0], tup[1]]) if tup[0] else tup[1]
- for tup in self.kompozycje.domyslne_kompozycje['Wszystkie warstwy']['layers']]
+ def_layers = [
+ ':'.join([tup[0], tup[1]]) if tup[0] else tup[1] for tup in
+ self.kompozycje.domyslne_kompozycje['Wszystkie warstwy']['layers']
+ ]
if sorted(all_groups_layers) != sorted(def_layers):
self.update_all_layers_comp(all_groups_layers)
layertree_changed = True
@@ -722,12 +800,12 @@ def set_filter(self):
LayersPanel().runShow()
LayersPanel().uncheckAllGroup()
LayersPanel().uncheckAll()
- DefaultCompositions.set_default_styles()
if comp_name in DefaultCompositions.compositions_names():
DefaultCompositions.set_composition(comp_name)
elif comp_name in UserCompositions.compositions_names():
UserCompositions.set_composition(comp_name)
QApplication.processEvents()
+ QApplication.processEvents()
self.canvas.refresh()
def unload(self):
@@ -744,3 +822,60 @@ def paint(self, painter, option, index):
self.check_box.setChecked(True)
if not self.parent().indexWidget(index):
self.parent().setIndexWidget(index, self.check_box)
+
+
+class ProgressDialog(QProgressDialog, SingletonModel):
+ stylesheet = """
+ * {
+ background-color: rgb(53, 85, 109, 220);
+ color: rgb(255, 255, 255);
+ font: 10pt "Segoe UI";
+ }
+ """
+
+ def __init__(self, parent=None, title='GIAP-Layout'):
+ super(ProgressDialog, self).__init__(parent)
+ self.setWindowTitle(title)
+ self.setWindowIcon(QIcon(':/plugins/giap_layout/icons/giap_logo.png'))
+ self.setLabelText('Proszę czekać...')
+ self.setFixedWidth(300)
+ self.setFixedHeight(100)
+ self.setMaximum(100)
+ self.setCancelButton(None)
+ # self.setStyleSheet(self.stylesheet)
+ self.setWindowFlags(Qt.Dialog | Qt.WindowCloseButtonHint)
+ self.rejected.connect(self.stop)
+ self.setWindowModality(Qt.WindowModal)
+
+ def make_percent_step(self, step=100, new_text=None):
+ if new_text:
+ self.setLabelText(new_text)
+ if "wczytywanie" in new_text:
+ for pos in range(100 - self.value()):
+ sleep(0.0005)
+ self.setValue(self.value() + 1)
+ return
+ for pos in range(step):
+ sleep(0.0005)
+ self.setValue(self.value() + 1)
+ QApplication.sendPostedEvents()
+ QApplication.processEvents()
+
+ def start_steped(self, title='Trwa ładowanie danych.\n Proszę czekać...'):
+ self.setLabelText(title)
+ self.setValue(1)
+ self.show()
+ QApplication.sendPostedEvents()
+ QApplication.processEvents()
+
+ def start(self):
+ self.setFixedWidth(250)
+ self.setMaximum(0)
+ self.setCancelButton(None)
+ self.show()
+ QApplication.sendPostedEvents()
+ QApplication.processEvents()
+
+ def stop(self):
+ self.setValue(100)
+ self.close()
diff --git a/Kompozycje/UserCompositions.py b/Kompozycje/UserCompositions.py
index 3dba937..5554b1f 100644
--- a/Kompozycje/UserCompositions.py
+++ b/Kompozycje/UserCompositions.py
@@ -5,7 +5,7 @@
get_layers_ids_from_composition,
get_checked_layers_ids_from_composition,
)
-from GIAP_funkcje import get_project_config
+from ..utils import get_project_config
"""
Kompozycje użytkownika.
diff --git a/Kompozycje/compositions_saver.ui b/Kompozycje/compositions_saver.ui
index 4598633..d77ba82 100644
--- a/Kompozycje/compositions_saver.ui
+++ b/Kompozycje/compositions_saver.ui
@@ -9,7 +9,7 @@
0
0
- 944
+ 923
428
@@ -41,7 +41,40 @@
font: 10pt "Segoe UI";
}
-
+
+QAbstractItemView
+{
+ alternate-background-color: #e7e7e7;
+ color: black;
+ border: 1px solid #1a2936;
+ border-radius: 3px;
+ padding: 1px;
+}
+
+QPushButton {
+ color: black;
+}
+
+QPushButton:disabled
+{
+ color: gray;
+}
+
+QToolButton {
+ color: black;
+}
+
+QPushButton:disabled
+{
+ color: gray;
+}
+
+QHeaderView::section
+{
+ background-color: #cfcfcf;
+ color: black;
+ padding-left: 4px;
+}
false
diff --git a/Kompozycje/dodajKompozycje.py b/Kompozycje/dodajKompozycje.py
index b783627..c5abb5e 100644
--- a/Kompozycje/dodajKompozycje.py
+++ b/Kompozycje/dodajKompozycje.py
@@ -14,23 +14,12 @@ def __init__(self, parent=None):
"""Constructor."""
super(DodajKompozycjeDialog, self).__init__(parent)
self.setupUi(self)
-
self.radioButton_1.clicked.connect(self.radio_changed)
- self.radioButton_2.clicked.connect(self.radio_changed)
- self.reset.hide()
def radio_changed(self):
if self.radioButton_1.isChecked():
self.groupBox_35.setTitle(u"Kompozycje użytkownika")
- self.reset.hide()
self.dodaj_kompozycje.show()
self.usun_kompozycje.show()
self.wczytaj.show()
self.zapisz.show()
- elif self.radioButton_2.isChecked():
- self.groupBox_35.setTitle(u"Kompozycje domyślne")
- self.reset.show()
- self.dodaj_kompozycje.hide()
- self.usun_kompozycje.hide()
- self.wczytaj.hide()
- self.zapisz.hide()
diff --git a/Kompozycje/dodaj_kompozycje.ui b/Kompozycje/dodaj_kompozycje.ui
index f4f058f..90382a4 100644
--- a/Kompozycje/dodaj_kompozycje.ui
+++ b/Kompozycje/dodaj_kompozycje.ui
@@ -12,8 +12,8 @@
0
0
- 1011
- 493
+ 984
+ 518
@@ -41,10 +41,44 @@
* {
background-color: rgb(255, 255, 255);
+ color: black;
font: 10pt "Segoe UI";
}
-
+
+QAbstractItemView
+{
+ alternate-background-color: #e7e7e7;
+ color: black;
+ border: 1px solid #1a2936;
+ border-radius: 3px;
+ padding: 1px;
+}
+
+QPushButton {
+ color: black;
+}
+
+QPushButton:disabled
+{
+ color: gray;
+}
+
+QToolButton {
+ color: black;
+}
+
+QPushButton:disabled
+{
+ color: gray;
+}
+
+QHeaderView::section
+{
+ background-color: #cfcfcf;
+ color: black;
+ padding-left: 4px;
+}
false
@@ -319,222 +353,6 @@ QRadioButton {
- -
-
-
- true
-
-
-
- 0
- 20
-
-
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
-
- QRadioButton::indicator::checked {
- border: 2px solid black;
- border-radius: 9px;
- background-color: rgb(252, 67, 73);
- width: 15px;
- height: 15px;
-}
-
-QRadioButton::indicator::unchecked {
- border: 2px solid black;
- border-radius: 9px;
- background-color: rgb(255, 255, 255);
- width: 15px;
- height: 15px;
-}
-
-QRadioButton {
- color : white;
- font-weight: bold;
-}
-
-
- Kompozycje domyślne
-
-
- true
-
-
- false
-
-
-
-
@@ -571,7 +389,6 @@ QRadioButton {
radioButton_1
verticalSpacer_3
- radioButton_2
zapisz
wczytaj
@@ -588,7 +405,9 @@ QRadioButton {
-
+ * {
+color: black;
+}
QFrame::NoFrame
@@ -846,13 +665,6 @@ QRadioButton {
- -
-
-
- Resetuj kompozycje domyślne
-
-
-
@@ -932,7 +744,6 @@ QRadioButton {
tableView
komp_dol
komp_gora
- reset
dodaj_kompozycje
edytuj_kompozycje
usun_kompozycje
@@ -941,7 +752,6 @@ QRadioButton {
zapisz
wczytaj
radioButton_1
- radioButton_2
diff --git a/Kompozycje/nowa_kompozycja.py b/Kompozycje/nowa_kompozycja.py
index d1e119c..48903c0 100644
--- a/Kompozycje/nowa_kompozycja.py
+++ b/Kompozycje/nowa_kompozycja.py
@@ -1 +1,55 @@
-# -*- coding: utf-8 -*-
import os
from qgis.PyQt import QtWidgets, uic, QtCore, QtGui
FORM_CLASS, _ = uic.loadUiType(os.path.join(
os.path.dirname(__file__), 'nowa_kompozycja.ui'))
class NowaKompozycjaDialog(QtWidgets.QDialog, FORM_CLASS):
def __init__(self, parent=None):
super(NowaKompozycjaDialog, self).__init__(parent)
self.setupUi(self)
self.setWindowFlags(QtCore.Qt.Window)
# żeby nie dało się upuszczać na elementach (inaczej "drop" zastępuje elementy na liście!)
standard_item_flags = int(QtGui.QStandardItem().flags())
self.new_flags = QtCore.Qt.ItemFlags(standard_item_flags - 8)
self.checkPushButton.clicked.connect(self.check)
self.uncheckPushButton.clicked.connect(self.uncheck)
self.checkAllPushButton.clicked.connect(self.check_all)
self.uncheckAllPushButton.clicked.connect(self.uncheck_all)
def check(self):
table = self.warstwy_table
sel_model = table.selectionModel()
model = table.model()
rows = sel_model.selectedRows()
for row in rows:
item = model.itemFromIndex(row)
item.setCheckState(QtCore.Qt.Checked)
def uncheck(self):
table = self.warstwy_table
sel_model = table.selectionModel()
model = table.model()
rows = sel_model.selectedRows()
for row in rows:
item = model.itemFromIndex(row)
item.setCheckState(QtCore.Qt.Unchecked)
def check_all(self):
table = self.warstwy_table
model = table.model()
for row in range(model.rowCount()):
item = model.itemFromIndex(model.index(row, 0))
item.setCheckState(QtCore.Qt.Checked)
def uncheck_all(self):
table = self.warstwy_table
model = table.model()
for row in range(model.rowCount()):
item = model.itemFromIndex(model.index(row, 0))
item.setCheckState(QtCore.Qt.Unchecked)
\ No newline at end of file
+# -*- coding: utf-8 -*-
+
+import os
+from qgis.PyQt import QtWidgets, uic, QtCore, QtGui
+
+FORM_CLASS, _ = uic.loadUiType(os.path.join(
+ os.path.dirname(__file__), 'nowa_kompozycja.ui'))
+
+
+class NowaKompozycjaDialog(QtWidgets.QDialog, FORM_CLASS):
+ def __init__(self, parent=None):
+ super(NowaKompozycjaDialog, self).__init__(parent)
+ self.setupUi(self)
+ self.setWindowFlags(QtCore.Qt.Window)
+
+ # żeby nie dało się upuszczać na elementach (inaczej "drop" zastępuje elementy na liście!)
+ standard_item_flags = int(QtGui.QStandardItem().flags())
+ self.new_flags = QtCore.Qt.ItemFlags(standard_item_flags - 8)
+
+ self.checkPushButton.clicked.connect(self.check)
+ self.uncheckPushButton.clicked.connect(self.uncheck)
+ self.checkAllPushButton.clicked.connect(self.check_all)
+ self.uncheckAllPushButton.clicked.connect(self.uncheck_all)
+
+ def check(self):
+ table = self.warstwy_table
+ sel_model = table.selectionModel()
+ model = table.model()
+ rows = sel_model.selectedRows()
+ for row in rows:
+ item = model.itemFromIndex(row)
+ item.setCheckState(QtCore.Qt.Checked)
+
+ def uncheck(self):
+ table = self.warstwy_table
+ sel_model = table.selectionModel()
+ model = table.model()
+ rows = sel_model.selectedRows()
+ for row in rows:
+ item = model.itemFromIndex(row)
+ item.setCheckState(QtCore.Qt.Unchecked)
+
+ def check_all(self):
+ table = self.warstwy_table
+ model = table.model()
+ for row in range(model.rowCount()):
+ item = model.itemFromIndex(model.index(row, 0))
+ item.setCheckState(QtCore.Qt.Checked)
+
+ def uncheck_all(self):
+ table = self.warstwy_table
+ model = table.model()
+ for row in range(model.rowCount()):
+ item = model.itemFromIndex(model.index(row, 0))
+ item.setCheckState(QtCore.Qt.Unchecked)
diff --git a/Kompozycje/nowa_kompozycja.ui b/Kompozycje/nowa_kompozycja.ui
index 332652a..0b678fc 100644
--- a/Kompozycje/nowa_kompozycja.ui
+++ b/Kompozycje/nowa_kompozycja.ui
@@ -12,8 +12,8 @@
0
0
- 1233
- 688
+ 1210
+ 678
@@ -46,10 +46,45 @@
* {
-background-color: rgb(255, 255, 255);
-font: 10pt "Segoe UI";
+ background-color: rgb(255, 255, 255);
+ color: black;
+ font: 10pt "Segoe UI";
}
-
+
+
+QAbstractItemView
+{
+ alternate-background-color: #e7e7e7;
+ color: black;
+ border: 1px solid #1a2936;
+ border-radius: 3px;
+ padding: 1px;
+}
+
+QPushButton {
+ color: black;
+}
+
+QPushButton:disabled
+{
+ color: gray;
+}
+
+QToolButton {
+ color: black;
+}
+
+QPushButton:disabled
+{
+ color: gray;
+}
+
+QHeaderView::section
+{
+ background-color: #cfcfcf;
+ color: black;
+ padding-left: 4px;
+}
diff --git a/OrtoTools.py b/OrtoTools.py
new file mode 100644
index 0000000..5fccd19
--- /dev/null
+++ b/OrtoTools.py
@@ -0,0 +1,161 @@
+# -*- coding: utf-8 -*-
+
+from __future__ import absolute_import
+from qgis.PyQt.QtCore import QObject, pyqtSignal
+from qgis.PyQt.QtWidgets import QToolButton, QMenu, QAction
+from qgis.core import QgsProject, QgsRasterLayer, QgsMessageLog
+from qgis.utils import iface
+from .utils import WMS_SERVERS, WMS_SERVERS_GROUPS
+from .CustomMessageBox import CustomMessageBox
+
+
+class OrtoAddingTool(object):
+ def __init__(self, parent, button, group_names=("ORTOFOTOMAPA", "DANE DODATKOWE")):
+ self.parent = parent
+ self.button = button
+ self.group_names = group_names
+ self.layer_actions_dict = {}
+
+ self.button.setToolTip("Dodaj zdefiniowane adresy WMS/WMTS")
+ self.button.setPopupMode(QToolButton.InstantPopup)
+ self.name_service = WMS_SERVERS
+ self.groups_for_names = WMS_SERVERS_GROUPS
+ self.services = []
+ self.create_menu()
+ self.connect_ortofotomapa_group()
+
+ def connect_ortofotomapa_group(self):
+ """
+ Łączy sygnał wywoływany podczas zmiany widoczności w grupie o nazwie
+ self.group_name z funkcją self.create_menu.
+ """
+ for group_name in self.group_names:
+ root = QgsProject.instance().layerTreeRoot()
+ group = root.findGroup(group_name)
+ if group:
+ group.visibilityChanged.connect(self.create_menu)
+ group.addedChildren.connect(self.create_menu)
+ group.removedChildren.connect(self.create_menu)
+
+ def disconnect_ortofotomapa_group(self):
+ """
+ Odłącza sygnał wywoływany podczas zmiany widoczności w grupie o nazwie
+ self.group_name z funkcją self.create_menu.
+ """
+ for group_name in self.group_names:
+ group = QgsProject.instance().layerTreeRoot().findGroup(
+ group_name)
+ if group:
+ try:
+ group.visibilityChanged.disconnect(self.create_menu)
+ group.addedChildren.disconnect(self.create_menu)
+ group.removedChildren.disconnect(self.create_menu)
+ except Exception:
+ QgsMessageLog.logMessage(
+ 'Błąd przy rozłączaniu sygnałów z grup '
+ 'warstw pomocniczych',
+ tag="GIAP Layout"
+ )
+
+ def action_clicked(self, item):
+ """
+ Uaktualnia widoczność warstw na podstawie akcji z menu przycisku.
+ """
+ layer_name = self.layer_name_dict[item]
+ if QgsProject.instance().mapLayersByName(layer_name):
+ try:
+ for layer, action in self.layer_actions_dict.items():
+ if QgsProject.instance().layerTreeRoot().findLayer(layer):
+ QgsProject.instance().layerTreeRoot().findLayer(
+ layer).parent().setItemVisibilityChecked(True)
+ checked = action.isChecked()
+ QgsProject.instance().layerTreeRoot().findLayer(
+ layer).setItemVisibilityChecked(checked)
+ except RuntimeError:
+ item.setChecked(False)
+ else:
+ self.add_to_map(layer_name)
+ self.create_menu()
+
+ def add_to_map(self, name):
+ if not QgsProject.instance().mapLayersByName(name):
+ url = self.name_service[name]
+ rlayer = QgsRasterLayer(url, name, 'wms')
+ root = QgsProject.instance().layerTreeRoot()
+ group_name = self.groups_for_names[name]
+ if rlayer.isValid():
+ group = root.findGroup(group_name)
+ if not group:
+ root.addGroup(group_name)
+ group = root.findGroup(group_name)
+ QgsProject.instance().addMapLayer(rlayer)
+ node_layer = root.findLayer(rlayer.id())
+ node_parent = node_layer.parent()
+ clone_node_layer = node_layer.clone()
+ group.insertChildNode(0, clone_node_layer)
+ clone_node_layer.setItemVisibilityCheckedParentRecursive(True)
+ node_parent.removeChildNode(node_layer)
+ else:
+ CustomMessageBox(None, f'Nie można dodać {name}').button_ok()
+ else:
+ CustomMessageBox(None, f'Istnieje już warstwa {name}').button_ok()
+
+ def create_menu(self):
+ layers_names = []
+ self.layer_name_dict = {}
+ self.layer_actions_dict = {}
+ menu = QMenu(self.parent)
+ for group_name in self.group_names:
+ group = QgsProject.instance().layerTreeRoot().findGroup(group_name)
+ if group:
+ for lr in group.findLayers():
+ layer = lr.layer()
+ layers_names.append(layer.name())
+ action = QAction(layer.name(), self.parent)
+ action.setCheckable(True)
+ layer_visible = iface.layerTreeView().layerTreeModel().rootGroup().findLayer(layer).itemVisibilityChecked()
+ action.setChecked(layer_visible)
+ action.triggered.connect(
+ lambda checked, item=action: self.action_clicked(item))
+ self.layer_name_dict[action] = layer.name()
+ self.layer_actions_dict[layer] = action
+ values = list(self.layer_actions_dict.values())
+ values.sort(key=lambda x: x.text())
+ list(map(menu.addAction, values))
+
+ self.services = []
+
+ for name, service in self.name_service.items():
+ if name not in layers_names:
+ action = QAction(name, self.parent)
+ action.setCheckable(True)
+ group_name = self.groups_for_names[name]
+ self.layer_name_dict[action] = name
+ self.services.append(
+ OrtoActionService(
+ action,
+ service,
+ name,
+ group_name,
+ parent=self
+ )
+ )
+ menu.addAction(action)
+
+ self.button.setMenu(menu)
+
+
+class OrtoActionService(QObject):
+ orto_added = pyqtSignal()
+ orto_group_added = pyqtSignal()
+
+ def __init__(self, action, url, name, default_group="DANE DODATKOWE", parent=None):
+ QObject.__init__(self)
+ self.parent = parent
+ self.button = action
+ self.url = url
+ self.name = name
+ self.group_name = default_group
+
+ self.button.triggered.connect(
+ lambda checked, item=self.button: self.parent.action_clicked(item))
diff --git a/StyleManager/stylemanager.py b/StyleManager/stylemanager.py
new file mode 100644
index 0000000..993849f
--- /dev/null
+++ b/StyleManager/stylemanager.py
@@ -0,0 +1,73 @@
+import os
+from qgis.PyQt import uic
+from qgis.PyQt.QtWidgets import QDialog, QFileDialog, QInputDialog, QMessageBox
+from qgis.PyQt.QtCore import Qt, QCoreApplication
+
+FORM_CLASS, _ = uic.loadUiType(os.path.join(
+ os.path.dirname(__file__), 'ui_stylemanager.ui'))
+
+
+class StyleManagerDialog(QDialog, FORM_CLASS):
+ def __init__(self, style_mn):
+ super(StyleManagerDialog, self).__init__()
+
+ self.setupUi(self)
+ self.setWindowFlag(Qt.Window)
+
+ self.mn = style_mn
+
+ self.listWidget.blockSignals(True)
+ self.listWidget.addItems(self.mn.config.get_style_list())
+ self.listWidget.blockSignals(False)
+
+ # self.pushButton_add.clicked.connect(self.add_style)
+ # self.pushButton_delete.clicked.connect(self.delete_style)
+ self.pushButton_default.clicked.connect(self.set_default)
+ self.pushButton_activate.clicked.connect(self.change_style)
+
+ def add_style(self):
+ """ add new style"""
+ filename, _ = QFileDialog.getOpenFileName(
+ self, "Open qss", '', "*.qss"
+ )
+ text, ok = QInputDialog.getText(
+ self, 'Style Name', 'Enter name for Style:',
+ )
+
+ if ok:
+ if str(text) in ['', 'None', 'False']:
+ msg = QMessageBox()
+ msg.setText('Not valid name, try again')
+ msg.exec_()
+ return
+ self.mn.set_style(text, filename)
+ self.listWidget.addItem(text)
+
+ def delete_style(self):
+ """ Delete selected style"""
+ try:
+ name = self.listWidget.selectedItems()[0].text()
+ except Exception:
+ return
+
+ res = self.mn.remove_style(name)
+ if res:
+ self.listWidget.takeItem(self.listWidget.currentRow())
+
+ def set_default(self):
+ """Set default qgis style"""
+ res, msg = self.mn.activate_style('default')
+
+ def change_style(self):
+ """Change style to user selected"""
+
+ try:
+ name = self.listWidget.currentItem().text()
+ except Exception:
+ return
+
+ res, msg = self.mn.activate_style(name)
+
+ def hide(self):
+ """unload dialog"""
+ self.hide()
diff --git a/StyleManager/ui_stylemanager.ui b/StyleManager/ui_stylemanager.ui
new file mode 100644
index 0000000..cae78ba
--- /dev/null
+++ b/StyleManager/ui_stylemanager.ui
@@ -0,0 +1,616 @@
+
+
+ StyleSelectionDialog
+
+
+ true
+
+
+
+ 0
+ 0
+ 558
+ 403
+
+
+
+
+ 1
+ 1
+
+
+
+
+ Segoe UI
+ 10
+ 50
+ false
+ false
+
+
+
+ Style
+
+
+
+ :/plugins/GIAP-giap_layout/icons/giap_logo.png:/plugins/GIAP-giap_layout/icons/giap_logo.png
+
+
+ * {
+ background-color: rgb(255, 255, 255);
+ font: 10pt "Segoe UI";
+}
+
+
+QAbstractItemView
+{
+ alternate-background-color: #e7e7e7;
+ color: black;
+ border: 1px solid #1a2936;
+ border-radius: 3px;
+ padding: 1px;
+}
+
+QPushButton {
+ color: black;
+ border: 1px solid black;
+ padding: 4px;
+}
+
+QPushButton:disabled
+{
+ color: gray;
+}
+
+QToolButton {
+ color: black;
+}
+
+QPushButton:disabled
+{
+ color: gray;
+}
+
+QHeaderView::section
+{
+ background-color: #cfcfcf;
+ color: black;
+ padding-left: 4px;
+}
+
+
+
+
+
+ false
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+ -
+
+
+
+ 120
+ 0
+
+
+
+
+ Segoe UI Light
+ 8
+ 9
+ false
+ false
+
+
+
+ background-color: rgb(53, 85, 109);
+font: 75 8pt "Segoe UI Light";
+
+
+
+
+ 20
+
+
+ 5
+
+
+ 5
+
+
+ 5
+
+
+ 5
+
+
-
+
+
+ false
+
+
+
+ 0
+ 20
+
+
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+
+ QRadioButton::indicator::checked {
+ border: 2px solid black;
+ border-radius: 9px;
+ background-color: rgb(252, 67, 73);
+ width: 15px;
+ height: 15px;
+}
+
+QRadioButton::indicator::unchecked {
+ border: 2px solid black;
+ border-radius: 9px;
+ background-color: rgb(255, 255, 255);
+ width: 15px;
+ height: 15px;
+}
+
+QRadioButton {
+ color : white;
+ font-weight: bold;
+}
+
+
+ Change style
+
+
+ true
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+ verticalSpacer_3
+ obszar_radio
+
+
+ -
+
+
+
+ Segoe UI
+ 10
+ 50
+ false
+ false
+
+
+
+
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Plain
+
+
+ 0
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+
+ 200
+ 20
+
+
+
+
+ 16777215
+ 20
+
+
+
+ background-color: rgb(252, 67, 73);
+
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Plain
+
+
+
+
+ 1
+ 1
+ 231
+ 16
+
+
+
+
+ Segoe UI
+ 10
+ 75
+ false
+ true
+
+
+
+ color : white; font-weight: bold;
+
+
+ Change style
+
+
+
+
+ -
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
+
-
+
+
+
+
+
+
-
+
+
+ false
+
+
+ QAbstractItemView::SingleSelection
+
+
+ QAbstractItemView::SelectRows
+
+
+
+ -
+
+
+ 6
+
+
+ 6
+
+
-
+
+
+ Activate
+
+
+
+ -
+
+
+ Default
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ Segoe UI
+ 10
+ 50
+ false
+ false
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+ pushButton_cancel
+ clicked()
+ StyleSelectionDialog
+ reject()
+
+
+ 710
+ 419
+
+
+ 461
+ 408
+
+
+
+
+
diff --git a/config.json b/config.json
new file mode 100644
index 0000000..34d9dad
--- /dev/null
+++ b/config.json
@@ -0,0 +1 @@
+[{"org_toolbars": ["mFileToolBar", "mLayerToolBar", "mDigitizeToolBar", "mMapNavToolBar", "mAttributesToolBar", "mPluginToolBar", "mLabelToolBar", "mSnappingToolBar", "mSelectionToolBar"], "styles": {"giap": "giap.qss", "wombat": "wombat.qss", "blueglass": "blueglass.qss", "coffee": "coffee.qss", "darbklue": "darkblue.qss", "darkorange": "darkorange.qss", "lightblue": "lightblue.qss"}, "ribbons_config": [{"tab_name": "Main", "sections": [{"label": "Project", "btn_size": 30, "btns": [["mActionNewProject", 0, 0], ["mActionOpenProject", 0, 1], ["mActionSaveProject", 1, 0], ["mActionSaveProjectAs", 1, 1]]}, {"label": "Prints", "btn_size": 30, "btns": [["mActionNewPrintLayout", 0, 0], ["giapMyPrints", 0, 1], ["mActionShowLayoutManager", 1, 0], ["giapQuickPrint", 1, 1]]}, {"label": "Navigation", "btn_size": 30, "btns": [["mActionPan", 0, 0], ["mActionZoomIn", 0, 1], ["mActionZoomOut", 0, 2], ["mActionZoomFullExtent", 0, 3], ["mActionZoomToLayer", 1, 0], ["mActionZoomToSelected", 1, 1], ["mActionZoomLast", 1, 2], ["mActionZoomNext", 1, 3]]}, {"label": "Attributes", "btn_size": 30, "btns": [["mActionIdentify", 0, 0], ["mActionSelectFeatures", 0, 1], ["mActionDeselectAll", 1, 0], ["mActionOpenTable", 1, 1]]}, {"label": "Measures", "btn_size": 60, "btns": [["mActionMeasure", 0, 0], ["mActionMeasureArea", 0, 1], ["mActionMeasureAngle", 0, 2]]}, {"label": "Layers", "btn_size": 30, "btns": [["mActionAddOgrLayer", 0, 0], ["mActionAddWmsLayer", 0, 1], ["mActionAddPgLayer", 0, 2], ["mActionAddMeshLayer", 0, 3], ["mActionAddWcsLayer", 0, 4], ["mActionAddDelimitedText", 0, 5], ["mActionAddRasterLayer", 1, 0], ["mActionAddWfsLayer", 1, 1], ["mActionAddSpatiaLiteLayer", 1, 2], ["mActionAddVirtualLayer", 1, 3], ["mActionNewMemoryLayer", 1, 4]]}]}, {"tab_name": "Tools", "sections": [{"label": "Adv. Attributes", "btn_size": 30, "btns": [["mActionIdentify", 0, 0], ["mActionSelectFeatures", 0, 1], ["mActionSelectPolygon", 0, 2], ["mActionSelectByExpression", 0, 3], ["mActionInvertSelection", 0, 4], ["mActionDeselectAll", 0, 5], ["mActionOpenTable", 1, 0], ["mActionStatisticalSummary", 1, 1], ["mActionOpenFieldCalc", 1, 2], ["mActionMapTips", 1, 3], ["mActionNewBookmark", 1, 4], ["mActionShowBookmarks", 1, 5]]}, {"label": "Labels", "btn_size": 30, "btns": [["mActionLabeling", 0, 0], ["mActionChangeLabelProperties", 0, 1], ["mActionPinLabels", 0, 2], ["mActionShowPinnedLabels", 0, 3], ["mActionShowHideLabels", 0, 4], ["mActionMoveLabel", 1, 0], ["mActionRotateLabel", 1, 1], ["mActionDiagramProperties", 1, 2], ["mActionShowUnplacedLabels", 1, 3]]}, {"label": "Vector", "btn_size": 30, "btns": [["mActionToggleEditing", 0, 0], ["mActionSaveLayerEdits", 0, 1], ["mActionVertexTool", 0, 2], ["mActionUndo", 0, 3], ["mActionRedo", 0, 4], ["mActionAddFeature", 1, 0], ["mActionMoveFeature", 1, 1], ["mActionDeleteSelected", 1, 2], ["mActionCutFeatures", 1, 3], ["mActionCopyFeatures", 1, 4], ["mActionPasteFeatures", 1, 5]]}, {"label": "Digitalization", "btn_size": 30, "btns": [["EnableSnappingAction", 0, 0], ["EnableTracingAction", 0, 1], ["mActionRotateFeature", 0, 2], ["mActionSimplifyFeature", 0, 3], ["mActionAddRing", 0, 4], ["mActionAddPart", 0, 5], ["mActionFillRing", 0, 6], ["mActionOffsetCurve", 0, 7], ["mActionCircularStringCurvePoint", 0, 8], ["mActionDeleteRing", 1, 0], ["mActionDeletePart", 1, 1], ["mActionReshapeFeatures", 1, 2], ["mActionSplitParts", 1, 3], ["mActionSplitFeatures", 1, 4], ["mActionMergeFeatureAttributes", 1, 5], ["mActionMergeFeatures", 1, 6], ["mActionReverseLine", 1, 7], ["mActionTrimExtendFeature", 1, 8]]}]}], "active_style": "giap"}]
\ No newline at end of file
diff --git a/config.py b/config.py
new file mode 100644
index 0000000..48c9c69
--- /dev/null
+++ b/config.py
@@ -0,0 +1,167 @@
+import os
+import json
+
+
+class Config:
+ def __init__(self):
+ """Constructor"""
+ # load config from file
+ self.conf_dir = os.path.dirname(__file__)
+ fl = open(os.path.join(self.conf_dir, 'config.json'), 'r')
+ conf = fl.read()
+ fl.close()
+ self.setts = json.loads(conf)[0]
+
+ def save_config(self):
+ """
+ Saves config to json file
+ """
+
+ save_file = open(os.path.join(self.conf_dir, 'config.json'), 'w')
+ json.dump([self.setts], save_file)
+ save_file.close()
+
+ def save_original_toolbars(self, tbrs):
+ """ Save toolbars to reinstitute them after unload
+ :tbrs: [str, str, str]
+ """
+ # save only if don't have anything in storage
+ if 'org_toolbars' in self.setts:
+ # if we have something in storage, dont change it
+ if len(self.setts['org_toolbars']) > 0:
+ return
+
+ self.setts['org_toolbars'] = tbrs
+ self.save_config()
+
+ def save_user_ribbon_setup(self, val):
+ """ Saves user setup to config qgis file
+ {'ribbons': {
+ 'tab_name': 'name',
+ 'sections': [
+ {
+ 'label': 'lab_name',
+ 'btn_size': 30,
+ 'btns': [
+ [action, row, col],
+ ], ...
+ }
+ ],
+ }, ... },
+ 'fast_access': [ action, action, ... ]
+ }
+ """
+ if not isinstance(val, list):
+ return False
+
+ self.setts['ribbons_config'] = val
+ self.save_config()
+
+ def load_user_ribbon_setup(self):
+ if 'ribbons_config' not in self.setts:
+ return False
+
+ lay = self.setts['ribbons_config']
+ if not lay:
+ return False
+
+ return self.setts['ribbons_config']
+
+ def get_original_toolbars(self):
+ """ Return list of objectnames toolbars originally opened before first
+ run
+ :return: [str, str, str]
+ """
+ try:
+ org_tbrs = self.setts['org_toolbars']
+ if 'GiapToolBar' in org_tbrs: # insurance
+ org_tbrs.remove('GiapToolBar')
+ except Exception:
+ # something goes wrong, we don't have previous version of user
+ # layout in this case, recover main toolbars
+ org_tbrs = []
+
+ if len(org_tbrs) == 0:
+ org_tbrs = [
+ 'mFileToolBar',
+ 'mLayerToolBar',
+ 'mDigitizeToolBar',
+ 'mMapNavToolBar',
+ 'mAttributesToolBar',
+ 'mPluginToolBar',
+ 'mLabelToolBar',
+ 'mSnappingToolBar',
+ 'mSelectionToolBar',
+ ]
+ return org_tbrs
+
+ def set_value(self, key, val):
+ """ Sets value under key in settings, value if exists will be
+ overwritten
+ :key: str
+ :val: object
+ """
+ self.setts[key] = val
+ self.save_config()
+
+ def get_value(self, key):
+ """read value saved in config
+ :key: str (full path ie 'giap/test')
+ """
+ return self.setts[key]
+
+ def delete_value(self, key):
+ """delete key from config
+ :key: str
+ """
+ try:
+ del self.setts[key]
+ except Exception:
+ pass
+
+ def get_style_path(self, style):
+ """ read path o style from config
+ :return: str
+ """
+
+ try:
+ return self.setts['styles'][style]
+ except KeyError:
+ return ''
+
+ def get_style_list(self):
+ """ return list of available styles
+ :return: list
+ """
+ try:
+ return list(self.setts['styles'].keys())
+ except Exception:
+ return []
+
+ def get_active_style(self):
+ """ return name of active style from settings
+ :return: str
+ """
+ try:
+ return self.setts['active_style']
+ except KeyError:
+ return ''
+
+ def set_style(self, style, path):
+ """ Set style in config, for user to choose it
+ :style: style name
+ :path: style name (style.qss)
+ """
+ self.setts['styles'][style] = path
+
+ def set_active_style(self, style):
+ """
+ set name of active style in config
+ """
+ self.setts['active_style'] = style
+ self.save_config()
+
+ def remove_style(self, style):
+ if style in self.setts['style']:
+ del self.setts['style'][style]
+ self.save_config()
diff --git a/giap.ico b/giap.ico
new file mode 100644
index 0000000..0fe5aaf
Binary files /dev/null and b/giap.ico differ
diff --git a/giap_dynamic_layout.py b/giap_dynamic_layout.py
new file mode 100644
index 0000000..766cc8b
--- /dev/null
+++ b/giap_dynamic_layout.py
@@ -0,0 +1,814 @@
+import os
+
+from qgis.PyQt.QtCore import Qt, QSize, QEvent, pyqtSignal, QMimeData, QRect
+from qgis.PyQt import uic
+from qgis.PyQt.QtGui import QDrag, QPainter, QPixmap, QCursor
+from qgis.PyQt.QtWidgets import QWidget, QApplication, QHBoxLayout,\
+ QFrame, QLabel, QPushButton, QTabBar, QToolButton, QVBoxLayout, \
+ QGridLayout, QSpacerItem, QLineEdit, QWidgetItem, QAction, \
+ QBoxLayout
+
+from .utils import STANDARD_TOOLS
+
+from .select_section import SelectSection
+FORM_CLASS, _ = uic.loadUiType(os.path.join(
+ os.path.dirname(__file__), 'giap_dynamic_layout.ui'))
+
+
+class Widget(QWidget, FORM_CLASS):
+ editChanged = pyqtSignal(bool)
+ printsAdded = pyqtSignal()
+ deletePressSignal = pyqtSignal()
+
+ def __init__(self, parent=None):
+ super(Widget, self).__init__(parent)
+ self.setAttribute(Qt.WA_DeleteOnClose)
+
+ self.setupUi(self)
+ self.parent = parent # mainWindow()
+ self.tabs = [] # list w tabwidgets
+ self.edit_session = False
+
+ self.custom_tabbar = CustomTabBar('New Tab', self.tabWidget)
+ self.tabWidget.setTabBar(self.custom_tabbar)
+ self.tabWidget.tabBar().tabBarClicked.connect(self.tab_clicked)
+ self.tabWidget.tabBar().tabBarDoubleClicked.connect(
+ self.tab_doubleclicked)
+
+ def add_tab(self, label=None):
+ """Adds new tab at the end
+ :return: tab widget
+ """
+ if not label:
+ label = 'New Tab'
+
+ tab = CustomTab(label, self.tabWidget)
+ self.tabs.append(tab)
+
+ # prevent flickering
+ self.tabWidget.setUpdatesEnabled(False)
+
+ tab_ind = self.tabWidget.insertTab(
+ self.tabWidget.count()-1, tab, label
+ )
+ if self.edit_session:
+ self._section_control(tab_ind)
+
+ self.tabWidget.setCurrentIndex(tab_ind)
+
+ # add button to delete, its edit session so should be visible
+ right = self.tabWidget.tabBar().RightSide
+ cbutton = QToolButton(self.tabWidget)
+ cbutton.setObjectName('giapCloseTab')
+ cbutton.setText('x')
+ cbutton.setMinimumSize(QSize(16, 16))
+ cbutton.setMaximumSize(QSize(16, 16))
+
+ self.tabWidget.tabBar().setTabButton(tab_ind, right, cbutton)
+ cbutton.clicked.connect(lambda: self.remove_tab(tab_ind))
+ self.tabWidget.setUpdatesEnabled(True)
+
+ return tab_ind, tab
+
+ def remove_tab(self, tind):
+ """Removes tab with given tab index"""
+
+ self.tabWidget.removeTab(tind)
+ if tind > 0:
+ self.tabWidget.setCurrentIndex(tind-1)
+
+ def add_section(self, itab, lab, size=30):
+ """Adds new section on tab with label and place for icons
+ :itab: int
+ :lab: label for section
+ :size: int size of button
+ :return: section widget
+ """
+ if itab > -1:
+ itab = self.tabWidget.currentIndex()
+
+ cwidget = self.tabWidget.widget(itab)
+ if str(lab) in ['', 'False', 'None']:
+ lab = 'New section'
+ section = CustomSection(str(lab), self.tabWidget)
+ section.installEventFilter(self)
+ if size > 30:
+ section.set_size(size)
+
+ self._section_control_remove(itab)
+ cwidget.lay.addWidget(section)
+
+ # sep = QFrame()
+ # sep.setFrameShape(QFrame.VLine)
+ # sep.setFrameShadow(QFrame.Raised)
+ # sep.setObjectName('giapLine')
+ # sep.setMinimumSize(QSize(6, 100))
+ # cwidget.lay.addWidget(sep)
+ self._section_control(itab)
+
+ return section
+
+ def edit_session_toggle(self):
+ """Show controls for edti session"""
+
+ self.edit_session = not self.edit_session
+ self.editChanged.emit(self.edit_session)
+ self._tab_controls()
+
+ def _tab_controls(self):
+ """ show tab controls"""
+ right = self.tabWidget.tabBar().RightSide
+
+ if self.edit_session:
+ for i in range(self.tabWidget.count()):
+ self.tabWidget.tabBar().tabButton(i, right).show()
+ self._section_control(i)
+ self._new_tab_tab_control() # show add tab option
+ else:
+ self._new_tab_tab_control() # hide add tab option
+ for i in range(self.tabWidget.count()):
+ self.tabWidget.tabBar().tabButton(i, right).hide()
+ self._section_control(i)
+
+ def _section_control(self, tabind):
+ """add buttons to every tab for adding new section"""
+ if self.edit_session:
+ self.frm = QFrame()
+ self.frm.setObjectName('giapSectionAdd')
+ self.frmlay = QVBoxLayout(self.frm)
+
+ self.secadd = CustomSectionAdd()
+
+ self.secadd.clicked.connect(self.add_user_selected_section)
+ self.frmlay.addWidget(self.secadd)
+
+ lay = self.tabWidget.widget(tabind).lay
+ cnt = lay.count()
+ # there should always be something in layout, (controls)
+
+ for i in range(cnt, -1, -1):
+ if isinstance(lay.itemAt(i), QSpacerItem):
+ lay.removeItem(lay.itemAt(i))
+
+ self.tabWidget.widget(tabind).lay.addWidget(self.frm)
+ self.tabWidget.widget(tabind).lay.addStretch()
+
+ else:
+ self.tabWidget.widget(tabind).setUpdatesEnabled(False)
+ self._section_control_remove(tabind)
+ self.tabWidget.widget(tabind).lay.addStretch()
+ self.tabWidget.widget(tabind).setUpdatesEnabled(True)
+
+ def add_user_selected_section(self):
+ """Show dialog to user and adds selected section to current ribbon
+ if there should be more cutom tools, here is the place to put them
+ """
+ self.dlg = SelectSection()
+ responce = self.dlg.exec_()
+
+ if not responce:
+ return
+
+ ind = self.tabWidget.currentIndex()
+ # selected tools
+ selected = [x.text() for x in self.dlg.toolList.selectedItems()]
+ self.tabWidget.setUpdatesEnabled(False)
+ for sel in selected:
+
+ secdef = [x for x in STANDARD_TOOLS if x['label'] == sel][0]
+ sec = self.add_section(ind, sel, secdef['btn_size'])
+ for btn in secdef['btns']:
+ child = self.parent.findChild(QAction, btn[0])
+ if child is None:
+ sec.add_action(*btn)
+ else:
+ sec.add_action(child, *btn[1:])
+
+ if sel == 'Prints':
+ self.printsAdded.emit()
+
+ self.tabWidget.setUpdatesEnabled(True)
+
+ def _section_control_remove(self, tabind):
+ lay = self.tabWidget.widget(tabind).lay
+ self.tabWidget.setUpdatesEnabled(False)
+ for ind in range(lay.count()-1, -1, -1):
+ if isinstance(lay.itemAt(ind), QSpacerItem):
+ lay.removeItem(lay.itemAt(ind))
+ continue
+ it = lay.itemAt(ind)
+ if it.widget() is not None:
+ if it.widget().objectName() == 'giapSectionAdd':
+ it.widget().hide()
+ lay.removeItem(it)
+ QApplication.processEvents()
+ self.tabWidget.setUpdatesEnabled(True)
+
+ def _new_tab_tab_control(self):
+ """Pseudo tab to control adding fully feature tab"""
+
+ self.tabWidget.setUpdatesEnabled(False)
+ if self.edit_session:
+ tab = QWidget()
+ tab.setObjectName('giapAddNewTabControl')
+ self.tabWidget.addTab(tab, '+')
+ else:
+ last_tab = self.tabWidget.tabBar().count() - 1
+ if self.tabWidget.widget(last_tab).objectName() == \
+ 'giapAddNewTabControl':
+ self.tabWidget.removeTab(last_tab)
+ self.tabWidget.setUpdatesEnabled(True)
+
+ def tab_doubleclicked(self, ind):
+ if not self.edit_session:
+ return
+ self.tabWidget.tabBar().editTab(ind)
+
+ def tab_clicked(self, ind):
+ if self.edit_session:
+ if ind == self.tabWidget.tabBar().count() - 1:
+ self.add_tab()
+
+ def eventFilter(self, watched, ev):
+ # turn off dragging while not in edit session
+ if isinstance(watched, CustomSection) and not self.edit_session:
+ if ev.type() == QEvent.MouseMove:
+ return True
+ return super().eventFilter(watched, ev)
+
+ def keyPressEvent(self, e):
+ if self.edit_session:
+ self.deletePressSignal.emit()
+
+ def generate_ribbon_config(self):
+ """ return ribbon setup to save in user config
+ (for detail structure look in config file)
+ return: list
+ """
+ riblist = []
+ active_ind = self.tabWidget.currentIndex()
+ for ind in range(self.tabWidget.count()):
+ self.tabWidget.setCurrentIndex(ind)
+ wid = self.tabWidget.widget(ind)
+ if not isinstance(wid, CustomTab):
+ continue
+ tdict = wid.return_tab_config()
+ tdict['tab_name'] = self.tabWidget.tabText(ind)
+ riblist.append(tdict)
+ self.tabWidget.setCurrentIndex(active_ind)
+ return riblist
+
+
+class CustomTabBar(QTabBar):
+ def __init__(self, label='New Tab', parent=None):
+ super().__init__(parent)
+ self.setAttribute(Qt.WA_DeleteOnClose)
+
+ self._editor = QLineEdit(self)
+ self._editor.setWindowFlags(Qt.Popup)
+ self._editor.setFocusProxy(self)
+ self._editor.editingFinished.connect(self.handleEditingFinished)
+ self._editor.installEventFilter(self)
+ self.tabBarDoubleClicked.connect(self.editTab)
+
+ def eventFilter(self, widget, event):
+ if ((event.type() == QEvent.MouseButtonPress and
+ not self._editor.geometry().contains(event.globalPos())) or
+ (event.type() == QEvent.KeyPress and
+ event.key() == Qt.Key_Escape)):
+ self._editor.hide()
+ return super().eventFilter(widget, event)
+
+ def editTab(self, index):
+ rect = self.parent().tabBar().tabRect(index)
+ self._editor.setFixedSize(rect.size())
+ self._editor.move(self.parent().mapToGlobal(rect.topLeft()))
+ self._editor.setText(self.parent().tabText(index))
+ if not self._editor.isVisible():
+ self._editor.show()
+
+ def handleEditingFinished(self):
+ index = self.parent().currentIndex()
+ if index >= 0:
+ self._editor.hide()
+ self.parent().setTabText(index, self._editor.text())
+
+
+class CustomTab(QWidget):
+ def __init__(self, lab, parent=None):
+ super(CustomTab, self).__init__(parent)
+ self.setAttribute(Qt.WA_DeleteOnClose)
+
+ self.lab = lab
+ self.lay = QHBoxLayout()
+ self.lay.setSpacing(2)
+ self.lay.setMargin(0)
+ self.lay.setContentsMargins(1, 1, 1, 1)
+ self.setLayout(self.lay)
+ self.setObjectName('giapTab')
+
+ self.lay.addStretch()
+ self.lay.setDirection(QBoxLayout.LeftToRight)
+
+ self.setAcceptDrops(True)
+
+ def dragEnterEvent(self, e):
+ e.accept()
+
+ def dragMoveEvent(self, e):
+ e.accept()
+
+ def dropEvent(self, e):
+ # accept only Custom Sections
+ if not isinstance(e.source(), CustomSection):
+ return True
+
+ try:
+ lay = e.source().parent().lay
+ except AttributeError:
+ return True
+
+ source = None
+ for i in range(lay.count()):
+ if not isinstance(lay.itemAt(i).widget(), CustomSection):
+ continue
+
+ it = lay.itemAt(i)
+ if it.widget() is e.source():
+ source = i
+ break
+
+ if source is None:
+ return True
+ lay.takeAt(lay.count()-1)
+ addsec = lay.takeAt(lay.count()-1)
+ item = lay.takeAt(i)
+ lay.addItem(item)
+ lay.addItem(addsec)
+ lay.addStretch()
+ e.setAccepted(True)
+
+ def return_tab_config(self):
+ """Returns config for current tab with all sections,
+ (description in config file)
+ :return: dict
+ """
+ sec_conf = []
+ for ind in range(self.lay.count()):
+ it = self.lay.itemAt(ind)
+ if it is None:
+ continue
+ wid = it.widget()
+ if not isinstance(wid, CustomSection):
+ continue
+ if wid.isVisible():
+ sec_conf.append(wid.return_section_config())
+
+ return {
+ 'tab_name': self.lab,
+ 'sections': sec_conf,
+ }
+
+
+class CustomSection(QWidget):
+ def __init__(self, name='New Section', parent=None):
+ super(CustomSection, self).__init__(parent)
+ self.setAttribute(Qt.WA_DeleteOnClose)
+ self.edit = True
+ self.setAcceptDrops(True)
+ self.setMaximumSize(QSize(99999, 100))
+ self.setMinimumSize(QSize(60, 100))
+
+ if parent is not None:
+ parent.parent().editChanged.connect(self.edit_toggle)
+ parent.parent().deletePressSignal.connect(self.key_pressed)
+
+ self.setObjectName('giapSection')
+
+ # target of drop
+ self.target = None
+
+ self.verticalLayout = QVBoxLayout()
+ self.verticalLayout.setSpacing(5)
+ self.verticalLayout.setMargin(3)
+ self.verticalLayout.setContentsMargins(5, 0, 5, 0)
+ self.button_size = 30
+
+ self.horizontalLayout_2 = QHBoxLayout()
+ self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
+ self.horizontalLayout_2.setSpacing(0)
+
+ self.clabel = CustomLabel(name, self)
+ self.clabel.setObjectName(u"giapSectionLabel")
+ self.clabel.setMaximumSize(QSize(100000, 25))
+ self.clabel.setMinimumSize(QSize(50, 25))
+
+ self.pushButton_close_sec = QPushButton(self)
+ self.pushButton_close_sec.setObjectName(u"giapSectionClose")
+ self.pushButton_close_sec.setText('x')
+ self.pushButton_close_sec.setStyleSheet(
+ 'border-radius: 3px; font: 7pt;'
+ )
+ self.pushButton_close_sec.show()
+ self.pushButton_close_sec.setMaximumSize(QSize(18, 18))
+
+ self.horizontalLayout_2.addWidget(self.clabel)
+ self.horizontalLayout_2.addWidget(self.pushButton_close_sec)
+ self.verticalLayout.addLayout(self.horizontalLayout_2)
+
+ self.gridLayout = QGridLayout()
+ self.gridLayout.setSpacing(4)
+ self.gridLayout.setObjectName(u"gridLayout")
+
+ self.verticalLayout.addLayout(self.gridLayout)
+
+ self.update()
+
+ self.setLayout(self.verticalLayout)
+ self.pushButton_close_sec.clicked.connect(self.unload)
+
+ def unload(self):
+ self.hide()
+ self.deleteLater()
+ QApplication.processEvents()
+
+ def return_section_config(self):
+ """return config for current section
+ :return: {}
+ """
+ blist = []
+ for row in range(self.gridLayout.rowCount()):
+ for col in range(self.gridLayout.columnCount()):
+ it = self.gridLayout.itemAtPosition(row, col)
+ if it is None:
+ continue
+ itw = it.widget()
+ ind = self.gridLayout.indexOf(itw)
+ wid = self.gridLayout.itemAt(ind).widget()
+ if wid.objectName()[:4].lower() == 'giap':
+ act = wid.objectName()
+ else:
+ act = wid.actions()[0].objectName()
+ blist.append([act, row, col])
+
+ return {
+ 'label': self.clabel.text(),
+ 'btn_size': self.button_size,
+ 'btns': blist,
+ }
+
+ def edit_toggle(self, state):
+ if state:
+ self.show_edit_options()
+ else:
+ self.hide_edit_options()
+
+ def key_pressed(self):
+ """user pressed delete, and we are in edit session"""
+ if not self.edit:
+ return
+
+ # remove selected buttons
+ for col in range(self.gridLayout.columnCount()):
+ for row in [0, 1]:
+ it = self.gridLayout.itemAtPosition(row, col)
+ if it is None:
+ continue
+ if not it.widget().selected:
+ continue
+
+ ind = self.gridLayout.indexOf(it)
+ wid = self.gridLayout.takeAt(ind)
+ wid.widget().turn_off_edit()
+ wid.widget().deleteLater()
+
+ self.clean_grid_layout()
+
+ def clean_grid_layout(self):
+ """ move all icons to left, after some where deleted"""
+ items = [[], []] # both rows
+ for col in range(self.gridLayout.columnCount()):
+ for row in [0, 1]:
+ itl = self.gridLayout.itemAtPosition(row, col)
+ if itl is None:
+ continue
+ it = itl.widget()
+ ind = self.gridLayout.indexOf(it)
+ it = self.gridLayout.takeAt(ind)
+ if it is not None:
+ items[row].append(it)
+
+ for irow, row in enumerate(items):
+ for icol, it in enumerate(row):
+ if isinstance(it, QWidgetItem):
+ self.gridLayout.addItem(it, irow, icol, 1, 1)
+ else:
+ self.gridLayout.addWidget(it, irow, icol, 1, 1)
+ self.gridLayout.update()
+ # self.gridLayoutWidget.adjustSize()
+
+ def add_action(self, action, row, col):
+ self.tbut = CustomToolButton(self)
+ if isinstance(action, QAction):
+ self.tbut.setObjectName('gp_'+action.objectName())
+ self.tbut.setDefaultAction(action)
+ self.tbut.org_state = action.isEnabled()
+ elif isinstance(action, str):
+ self.tbut.setObjectName(action)
+
+ self.tbut.setMaximumSize(QSize(self.button_size, self.button_size))
+ self.tbut.setMinimumSize(QSize(self.button_size, self.button_size))
+ if self.button_size > 45:
+ self.tbut.setIconSize(
+ QSize(self.button_size-15, self.button_size-15)
+ )
+ self.tbut.setEnabled(True)
+ self.tbut.installEventFilter(self)
+
+ self.gridLayout.addWidget(self.tbut, row, col, 1, 1)
+
+ return self.tbut
+
+ def change_label(self, lab):
+ """Changes label
+ :lab: str
+ """
+ if isinstance(lab, str) and lab not in ['', 'None', 'False']:
+ self.label.setText(lab)
+
+ def set_size(self, sz):
+ """change size of button
+ :sz: int
+ """
+ self.button_size = sz
+
+ def _get_items(self):
+ """return list with item stored in gridlayout
+ :return: [[tool, tool], [tool, tool]]
+ """
+ items = [[], []] # both rows
+ for col in range(self.gridLayout.columnCount()):
+ for row in [0, 1]:
+ it = self.gridLayout.itemAtPosition(row, col)
+ if it is not None:
+ items[row].append(it.widget())
+ return items
+
+ def get_toolbutton_layout_index_from_pos(self, pos):
+ for i in range(self.gridLayout.count()):
+ rect = self.gridLayout.itemAt(i).widget()
+ # recalculate rect to compatible coord system
+ rect_ok = QRect(0, 0, rect.width(), rect.height())
+ if rect_ok.contains(rect.mapFromGlobal(pos)) and \
+ i != self.target:
+ return i
+
+ def eventFilter(self, watched, event):
+ if event.type() == QEvent.MouseButtonPress:
+ self.mousePressEvent(event)
+ elif event.type() == QEvent.MouseMove and \
+ isinstance(watched, CustomSection):
+ self.mouseMoveEvent(event)
+ elif event.type() == QEvent.MouseButtonRelease:
+ self.mouseReleaseEvent(event)
+
+ # prevent default action from qtoolbutton
+ if isinstance(watched, CustomToolButton) and self.edit:
+ if event.type() == QEvent.MouseButtonPress:
+ watched.setDown(False)
+
+ return super().eventFilter(watched, event)
+
+ def mouseReleaseEvent(self, event):
+ event.accept()
+
+ def mouseMoveEvent(self, e):
+ print('mouse event')
+ if not self.edit:
+ return
+
+ drag = QDrag(self)
+ drag.setDragCursor(QPixmap("images/drag.png"), Qt.MoveAction)
+ mimedata = QMimeData()
+
+ pixmap = QPixmap(self.size()) # Get the size of the object
+ painter = QPainter(pixmap) # Set the painter’s pixmap
+ painter.drawPixmap(self.rect(), self.grab())
+ painter.end()
+
+ drag.setMimeData(mimedata)
+ drag.setHotSpot(e.pos())
+ drag.setPixmap(pixmap)
+ drag.exec_(Qt.MoveAction)
+ e.accept()
+
+ def dragEnterEvent(self, event):
+ event.accept()
+
+ def dropEvent(self, event): # noqa
+ gpos = QCursor().pos()
+
+ if isinstance(event.source(), CustomToolButton):
+ # check if source and target are in the same gridlayout
+ if event.source().parent() is not self:
+ return
+
+ # swap toolbuttons
+ # get origin button
+ source = self.get_toolbutton_layout_index_from_pos(gpos)
+ glay = event.source().parent().gridLayout
+ self.target = None
+ for i in range(glay.count()):
+ it = glay.itemAt(i)
+ if it.widget() is event.source():
+ self.target = i
+ break
+
+ if source == self.target:
+ return
+
+ if None not in [source, self.target]:
+ # swap qtoolbuttons
+ i, j = max(self.target, source), min(self.target, source)
+ p1 = self.gridLayout.getItemPosition(i)
+ p2 = self.gridLayout.getItemPosition(j)
+ it1 = self.gridLayout.takeAt(i)
+ it2 = self.gridLayout.takeAt(j)
+ it1.widget().setDown(False)
+ it2.widget().setDown(False)
+ self.gridLayout.addItem(it1, *p2)
+ self.gridLayout.addItem(it2, *p1)
+
+ if isinstance(event.source(), CustomSection):
+ lay = self.parent().lay
+
+ target = None
+ source = None
+ for i in range(lay.count()):
+ if not isinstance(lay.itemAt(i).widget(), CustomSection):
+ continue
+
+ it = lay.itemAt(i)
+ if it.widget() is event.source():
+ source = i
+ if it.widget().geometry().contains(
+ it.widget().parent().mapFromGlobal(gpos)):
+ target = i
+
+ if source == target or None in [source, target]:
+ return
+
+ item = lay.takeAt(source)
+ if target > source:
+ target -= 1
+
+ it_list = []
+ for i in range(lay.count()-1, target-1, -1):
+ it_list.append(lay.takeAt(i))
+ it_list.reverse()
+ lay.addItem(item)
+ for it in it_list:
+ lay.addItem(it)
+ self.target = target
+
+ def show_edit_options(self):
+ self.pushButton_close_sec.show()
+ self.edit = True
+ self.clean_grid_layout()
+ itms = self._get_items()
+ for row in [0, 1]:
+ for it in itms[row]:
+ it.turn_on_edit()
+ it.edit = True
+
+ def hide_edit_options(self):
+ self.pushButton_close_sec.hide()
+ self.edit = False
+ self.clean_grid_layout()
+ itms = self._get_items()
+ for row in [0, 1]:
+ for it in itms[row]:
+ it.turn_off_edit()
+
+
+class CustomToolButton(QToolButton):
+ def __init__(self, parent):
+ super(CustomToolButton, self).__init__(parent)
+ self.setAttribute(Qt.WA_DeleteOnClose)
+ self.edit = True
+ self.selected = False
+ self.selected_style = '*{border: 3px solid red}'
+ self.org_state = True # True - enabled for click outside edit sesion
+
+ def eventFilter(self, widget, event):
+ if event.type() == QEvent.MouseButtonRelease and self.edit:
+ return True
+ if self.edit and event.type() == QEvent.MouseButtonPress:
+ if event.button() == Qt.LeftButton:
+ return True
+ return super().eventFilter(widget, event)
+
+ def turn_on_edit(self):
+ """ toggle standard behaviour, from clicking to select"""
+ self.org_state = self.isEnabled()
+ self.setEnabled(True)
+ self.blockSignals(True)
+ self.setDown(False)
+
+ def turn_off_edit(self):
+ """ toggle standard behaviour, from clicking to select"""
+ self.setStyleSheet('')
+ self.selected = False
+ self.setEnabled(self.org_state)
+ self.blockSignals(False)
+ self.edit = False
+
+ def mouseClickEvent(self, event):
+ if self.edit:
+ event.accept()
+ event.source.setDown(False)
+ else:
+ super(CustomToolButton, self).mouseClickEvent(event)
+
+ def mouseDoubleClickEvent(self, event):
+ if self.edit:
+ if self.selected:
+ self.selected = False
+ self.setStyleSheet('')
+ else:
+ self.setStyleSheet(self.selected_style)
+ self.selected = True
+
+ def mouseMoveEvent(self, e):
+ if not self.edit:
+ return
+ drag = QDrag(self)
+ drag.setDragCursor(QPixmap("images/drag.png"), Qt.MoveAction)
+ mimedata = QMimeData()
+
+ pixmap = QPixmap(self.size()) # Get the size of the object
+ painter = QPainter(pixmap) # Set the painter’s pixmap
+ painter.drawPixmap(self.rect(), self.grab())
+ painter.end()
+
+ drag.setMimeData(mimedata)
+ drag.setPixmap(pixmap)
+ drag.setHotSpot(e.pos())
+ drag.exec_(Qt.MoveAction)
+
+ def mousePressEvent(self, event):
+ if self.edit:
+ event.accept()
+ self.setDown(False)
+ return
+ else:
+ super(CustomToolButton, self).mousePressEvent(event)
+
+ def dragEnterEvent(self, event):
+ event.accept()
+
+
+class CustomSectionAdd(QToolButton):
+ def __init__(self, parent=None):
+ super(CustomSectionAdd, self).__init__(parent)
+ self.setAttribute(Qt.WA_DeleteOnClose)
+ self.setObjectName('giapSectionAddButton')
+ self.setMinimumSize(QSize(30, 30))
+ self.setMaximumSize(QSize(30, 30))
+ self.setText('+')
+
+ self.button_size = 30
+
+ def bigButtons(self):
+ """Set size of tools button to big"""
+ self.button_size = 60
+
+
+class CustomLabel(QLabel):
+ def __init__(self, lab, parent=None):
+ super(CustomLabel, self).__init__(parent)
+ self.setAttribute(Qt.WA_DeleteOnClose)
+ self.setText(lab)
+ self.setStyleSheet(
+ 'font: 9pt "Segoe UI"; font-weight: bold; '
+ )
+ self.cinput = QLineEdit(self)
+ self.cinput.setWindowFlags(Qt.Popup)
+ self.cinput.setFocusProxy(self)
+ self.cinput.editingFinished.connect(self.handleEditingFinished)
+ self.setAlignment(Qt.AlignCenter | Qt.AlignVCenter)
+
+ def mousePressEvent(self, event):
+ if not self.parent().edit:
+ return
+
+ rect = self.rect()
+ self.cinput.setFixedSize(rect.size())
+ self.cinput.move(self.mapToGlobal(rect.topLeft()))
+ self.cinput.setText(self.text())
+ if not self.cinput.isVisible():
+ self.cinput.show()
+
+ def handleEditingFinished(self):
+ self.cinput.hide()
+ self.setText(self.cinput.text())
diff --git a/giap_dynamic_layout.ui b/giap_dynamic_layout.ui
new file mode 100644
index 0000000..36dee82
--- /dev/null
+++ b/giap_dynamic_layout.ui
@@ -0,0 +1,154 @@
+
+
+ Form
+
+
+
+ 0
+ 0
+ 1291
+ 167
+
+
+
+
+ 1291
+ 167
+
+
+
+
+ 1291000
+ 178
+
+
+
+ Form
+
+
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+ -
+
+
+
+ 0
+ 140
+
+
+
+
+ 16777215
+ 140
+
+
+
+
+
+
+
+
+
+
+ -1
+
+
+
+ -
+
+
+ 0
+
+
-
+
+
+
+ 60
+ 20
+
+
+
+
+ 90
+ 20
+
+
+
+ Layers
+
+
+ true
+
+
+ true
+
+
+
+ -
+
+
+
+ 70
+ 0
+
+
+
+
+ 16777215
+ 20
+
+
+
+ orto
+
+
+
+ -
+
+
+
+ 16777215
+ 20
+
+
+
+ Compositions
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+
+
+
+
+
diff --git a/giap_layout.py b/giap_layout.py
index 0818f8e..4989638 100644
--- a/giap_layout.py
+++ b/giap_layout.py
@@ -1,22 +1,34 @@
# -*- coding: utf-8 -*-
-import qgis
-from PIL import Image
-from qgis.PyQt.QtCore import QSettings, QTranslator, QCoreApplication, QSize, \
- Qt, QRect, QPropertyAnimation, QEasingCurve
-from qgis.PyQt.QtGui import QIcon, QPixmap
+import os.path
+
+from qgis.PyQt.QtCore import QTranslator, QCoreApplication, QSize, \
+ Qt, QRect, QPropertyAnimation, QEasingCurve, QEvent
+from qgis.PyQt.QtGui import QIcon
from qgis.PyQt.QtWidgets import QAction, QToolBar, QToolButton, QWidget, \
- QHBoxLayout, QStyleFactory, QDockWidget, QMenu
+ QHBoxLayout, QDockWidget, QMenu, QVBoxLayout
# Initialize Qt resources from file resources.py
-from qgis._core import QgsProject
+from qgis._core import QgsProject, Qgis
from .QuickPrint import PrintMapTool
-from .utils import OBJECT_ACTION_DICT
-from .resources import *
+
+from .Kompozycje.Kompozycje import CompositionsTool
+from .kompozycje_widget import kompozycjeWidget
+# from .resources import *
# Import the code for the dialog
-from .giap_layout_dialog import MainTabQgsWidgetDialog
-import os.path
+# from .giap_layout_dialog import MainTabQgsWidgetDialog
+from .config import Config
+from .tools import StyleManager
+
+from .StyleManager.stylemanager import StyleManagerDialog
+from .OrtoTools import OrtoAddingTool
+
+from .giap_dynamic_layout import Widget
+from .ribbon_config import RIBBON_DEFAULT
+
project = QgsProject.instance()
+
+
class MainTabQgsWidget:
"""QGIS Plugin Implementation."""
@@ -33,7 +45,19 @@ def __init__(self, iface):
# initialize plugin directory
self.plugin_dir = os.path.dirname(__file__)
# initialize locale
- self.main_widget = MainTabQgsWidgetDialog()
+ self.main_widget = Widget(self.iface.mainWindow())
+ self.kompozycje_widget = kompozycjeWidget()
+
+ # list with hidden left docs, to reinstitute on user click
+ self.left_docks = []
+ # setup config structure for maintainning, toolbar and user interface
+ # customization
+ self.config = Config()
+
+ # initialize StyleManager for styling handling
+ self.style_manager = StyleManager(self)
+
+ self.iface.projectRead.connect(self.projekt_wczytany)
def initGui(self):
style = self.main_widget.styleSheet()
@@ -42,32 +66,38 @@ def initGui(self):
height: 25px;
}
""")
- self.iface.mainWindow().menuBar().hide()
- for child in self.iface.mainWindow().children():
- if type(child) == QToolBar:
- child.hide()
- # Zaawansowana digitalizacja
- if child.objectName() == 'mSnappingToolBar':
- for child2 in child.children():
- if isinstance(child2, QToolButton) and \
- child2.defaultAction() and \
- child2.defaultAction().objectName() == 'EnableTracingAction':
- self.main_widget.btn_dig_2.setDefaultAction(child2.defaultAction())
- child2.defaultAction().menu().setStyleSheet(style + """
- QMenu {
- background-color: rgb(53, 85, 109);
- color: rgb(255, 255, 255);
- font: 10pt "Segoe UI";
- }
- """)
-
- for dlg_object, standard_tool in OBJECT_ACTION_DICT.items():
- if child.objectName() == standard_tool:
- self.main_widget.__getattribute__(dlg_object).setDefaultAction(child)
-
-
- if child.objectName() == 'Layers':
- child.hide()
+ self.save_default_user_layout()
+ self.style_manager.run_last_style()
+
+ self.kompozycje = CompositionsTool(self.iface, self)
+
+ # turn on ribbon editing
+ self.main_widget.edit_session_toggle()
+
+ ribbon_conf = self.config.load_user_ribbon_setup()
+ if not ribbon_conf:
+ ribbon_conf = RIBBON_DEFAULT
+
+ for dtab in ribbon_conf:
+ itab, tab = self.main_widget.add_tab(dtab['tab_name'])
+ for dsec in dtab['sections']:
+ sec = self.main_widget.add_section(
+ itab, dsec['label'], dsec['btn_size']
+ )
+ for btn in dsec['btns']:
+ child = self.iface.mainWindow().findChild(QAction, btn[0])
+ if child is None:
+ sec.add_action(*btn)
+ else:
+ sec.add_action(child, *btn[1:])
+
+ if dsec['label'] == 'Prints':
+ self.custom_prints()
+
+ self.setup_orto()
+ self.main_widget.tabWidget.setCurrentIndex(0)
+ # turn off ribbon editing
+ self.main_widget.edit_session_toggle()
self.toolbar = QToolBar('GiapToolBar', self.iface.mainWindow())
self.toolbar.setObjectName('GiapToolBar')
@@ -75,161 +105,302 @@ def initGui(self):
self.toolbar.setMovable(False)
self.toolbar.setFloatable(False)
self.toolbar.addWidget(self.main_widget)
- self.ustaw_legende(style)
+
+ self.ustaw_legende()
self.menuButton = QToolButton()
- self.menuButton.setText("Pokaż menu")
+ self.menuButton.setText("Show menu")
self.menuButton.setCheckable(True)
self.menuButton.setBaseSize(QSize(80, 25))
self.menuButton.toggled.connect(self.menu_show)
- corner_widget = QWidget(self.main_widget)
+
+ self.editButton = QToolButton()
+ self.editButton.setText("Edit menu")
+ self.editButton.setCheckable(True)
+ self.editButton.setBaseSize(QSize(25, 25))
+ self.editButton.toggled.connect(self.main_widget.edit_session_toggle)
+ self.menu_show()
+
+ self.styleButton = QToolButton()
+ self.styleButton.setText("Theme")
+ self.styleButton.setBaseSize(QSize(25, 25))
+ self.styleButton.clicked.connect(self.show_style_manager_dialog)
+ self.styleButton.setObjectName('ThemeButton')
+
+ corner_widget = QWidget(self.main_widget.tabWidget)
corner_layout = QHBoxLayout()
corner_layout.setContentsMargins(0, 0, 0, 0)
corner_layout.addWidget(self.menuButton)
+ corner_layout.addWidget(self.editButton)
+ corner_layout.addWidget(self.styleButton)
corner_widget.setLayout(corner_layout)
self.main_widget.tabWidget.setCornerWidget(corner_widget)
self.iface.mapCanvas().refresh()
+ # signals
+ self.main_widget.editChanged.connect(self.save_user_ribbon_config)
+ self.main_widget.printsAdded.connect(self.custom_prints)
+
+ self.project_path = os.path.dirname(
+ os.path.abspath(project.fileName()))
+ self.toolbar.show()
+
+ # set strong focus to get keypressevent
+ self.main_widget.setFocusPolicy(Qt.StrongFocus)
+
+ def custom_prints(self):
+ """Load custom tools to qgis"""
self.quick_print = PrintMapTool(self.iface, self.main_widget)
- self.main_widget.btn_szybki_wydruk.clicked.connect(
- self.quick_print.run)
- self.main_widget.btn_szybki_wydruk.setToolTip(
- "Szybki wydruk widoku mapy")
+
+ b_qprints = self.main_widget.findChildren(
+ QToolButton, 'giapQuickPrint')
+ for b_qprint in b_qprints:
+ b_qprint.clicked.connect(self.quick_print.run)
+ b_qprint.setToolTip("Szybki wydruk widoku mapy")
+ b_qprint.setIcon(QIcon(f'{self.plugin_dir}/icons/quick_print.png'))
+
+ b_mprints = self.main_widget.findChildren(QToolButton, 'giapMyPrints')
+ for b_mprint in b_mprints:
+ b_mprint.setIcon(QIcon(f'{self.plugin_dir}/icons/my_prints.png'))
+
self.my_prints_setup()
- self.main_widget.btn_dig_18.actions()[0].setIcon(QIcon(f'{self.plugin_dir}/icons/magnet_tool.png'))
- self.main_widget.btn_moje_wydruki.setIcon(QIcon(f'{self.plugin_dir}/icons/my_prints.png'))
- self.main_widget.btn_szybki_wydruk.setIcon(QIcon(f'{self.plugin_dir}/icons/quick_print.png'))
- self.project_path = os.path.dirname(os.path.abspath(project.fileName()))
- self.toolbar.show()
+ def save_default_user_layout(self):
+ """ Saves active user toolbars in qgis user settings. Saves as string
+ under flag org_toolbars in json config file (user scope).
+ Assumes that all toolbars have specified name if not, we can't find
+ them, and therefore will not be loaded again
+ :return:
+ """
+ # select all active toolbars from mainwindow
+ active_toolbars = []
+ for x in self.iface.mainWindow().findChildren(QToolBar):
+ try:
+ if x.parent().windowTitle() == \
+ self.iface.mainWindow().windowTitle() and \
+ x.isVisible():
+ active_toolbars.append(x)
+ except Exception:
+ pass
+
+ # hide toolbars
+ for x in active_toolbars:
+ x.hide()
+
+ # unique and not empty objects name from toolbars
+ tbars_names = [
+ x.objectName() for x in active_toolbars
+ if x.objectName() not in ['', None, 'NULL', 'GiapToolBar']
+ ]
+
+ self.config.save_original_toolbars(tbars_names)
+
+ def save_user_ribbon_config(self, opt):
+ """Saves user ribbon setup to config on exit
+ :opt: bool for edit session, False will save config
+ :return: None
+ """
+ if not opt:
+ conf = self.main_widget.generate_ribbon_config()
+ self.config.save_user_ribbon_setup(conf)
+
+ def load_default_user_layout(self):
+ """Restores original user toolbars to qgis window from settings
+ :return:
+ """
+ toolbars_name = self.config.get_original_toolbars()
+
+ # find toolbars and swich their visiblity on
+ for tname in toolbars_name:
+ tbar = self.iface.mainWindow().findChild(QToolBar, tname)
+ if tbar is not None:
+ tbar.show()
+
+ # show menu bar
+ self.iface.mainWindow().menuBar().show()
def my_prints_setup(self):
- btn = self.main_widget.btn_moje_wydruki
- btn.setToolTip("Moje wydruki")
- btn.setPopupMode(QToolButton.InstantPopup)
- self.action_my_prints_menu()
- self.projectLayoutManager.layoutAdded.connect(self.action_my_prints_menu)
- self.projectLayoutManager.layoutRemoved.connect(self.action_my_prints_menu)
+ btns = self.iface.mainWindow().findChildren(
+ QToolButton, 'giapMyPrints')
+ for btn in btns:
+ btn.setToolTip("Moje wydruki")
+ btn.setPopupMode(QToolButton.InstantPopup)
+ self.action_my_prints_menu()
+ self.projectLayoutManager.layoutAdded.connect(
+ self.action_my_prints_menu
+ )
+ self.projectLayoutManager.layoutRemoved.connect(
+ self.action_my_prints_menu
+ )
def action_my_prints_menu(self):
- if 'giap_layout' in qgis.utils.plugins:
- qgis.utils.plugins['giap_layout'].unload()
- main_widget = self.main_widget
- btn = main_widget.btn_moje_wydruki
- menu = QMenu(main_widget)
- actions = []
- projectInstance = QgsProject.instance()
- self.projectLayoutManager = projectInstance.layoutManager()
- for layout in self.projectLayoutManager.layouts():
- title = layout.name()
- action = QAction(title, main_widget)
- action.triggered.connect(lambda checked, item=action: self.open_layout_by_name(item.text()))
- actions.append(action)
- actions.sort(key=lambda x: x.text())
- list(map(menu.addAction, actions))
- btn.setMenu(menu)
+ btns = self.iface.mainWindow().findChildren(
+ QToolButton, 'giapMyPrints')
+ for btn in btns:
+ main_widget = self.main_widget
+ menu = QMenu(main_widget)
+ actions = []
+ projectInstance = QgsProject.instance()
+ self.projectLayoutManager = projectInstance.layoutManager()
+ for layout in self.projectLayoutManager.layouts():
+ title = layout.name()
+ action = QAction(title, main_widget)
+ action.triggered.connect(
+ lambda checked, item=action:
+ self.open_layout_by_name(item.text()))
+ actions.append(action)
+ actions.sort(key=lambda x: x.text())
+ list(map(menu.addAction, actions))
+ btn.setMenu(menu)
def open_layout_by_name(self, action_name):
layout = self.projectLayoutManager.layoutByName(action_name)
self.iface.openLayoutDesigner(layout)
def unload(self):
- for child in self.iface.mainWindow().children():
- if type(child) == QToolBar and child.objectName() == 'GiapToolBar':
- child.hide()
+ self.iface.mainWindow().menuBar().show()
+ self.style_manager.activate_style('')
+ self.save_user_ribbon_config(False)
+ self.kompozycje.unload()
+ self.toolbar.hide()
+ self.orto_add.disconnect_ortofotomapa_group()
+
+ # reinstitute original qgis layout
+ self.load_default_user_layout()
+
+ self.iface.messageBar().pushMessage(
+ 'GIAP Layout',
+ # QApplication.translate('giap_pl', 'Please, restart QGIS!'),
+ 'Please, restart QGIS!',
+ Qgis.Info,
+ 0
+ )
def menu_show(self):
+ """Toggle visiblity of menubar"""
if self.menuButton.isChecked():
self.iface.mainWindow().menuBar().show()
else:
self.iface.mainWindow().menuBar().hide()
- def ustaw_legende(self, style):
- qt_style = QStyleFactory.create('Cleanlooks')
- self.layer_panel = self.iface.mainWindow().findChildren(QDockWidget, 'Layers')[0]
+ def ustaw_legende(self):
+ self.layer_panel = self.iface.mainWindow().findChild(
+ QDockWidget, 'Layers')
self.layer_panel.setTitleBarWidget(QWidget())
- self.layer_panel.setStyle(qt_style)
- self.layer_panel.setStyleSheet(style + """
- QToolBar {
- spacing: 7px;
- margin: 7px;
- border: none;
- }
- QToolButton {
- padding: 3px 3px 3px 3px;
- }
- QMenu {
- background-color: rgb(53, 85, 109);
- color: rgb(255, 255, 255);
- font: 10pt "Segoe UI";
- }
- QMenu::item:disabled {
- color: rgb(200, 200, 200);
- }
- * {
- background-color: rgb(53, 85, 109);
- color: rgb(255, 255, 255);
- font: 10pt "Segoe UI";
- }
- """)
+
self.layer_view = self.iface.layerTreeView()
self.layer_view.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
- self.layer_view.setStyle(qt_style)
- self.layer_view.setStyleSheet(style + """
- QTreeView::item, QTreeView::branch {
- color: rgb(255, 255, 255);
- }
- QTreeView {
- border: 2px solid;
- border-top-color: rgb(79, 118, 150);
- border-left: none;
- border-bottom-color: rgb(79, 118, 150);
- border-right: none;
- padding-top: 5px;
- }
- * {
- background-color: rgb(53, 85, 109);
- color: rgb(255, 255, 255);
- font: 10pt "Segoe UI";
- }
- """)
+
layer_toolbar = self.layer_view.parent().children()[1]
- layer_toolbar.children()[6].menu().setStyleSheet(style + """
- QMenu {
- background-color: rgb(53, 85, 109);
- color: rgb(255, 255, 255);
- font: 10pt "Segoe UI";
- }
- QMenu::item:disabled {
- color: rgb(200, 200, 200);
- }
- """)
+
layer_toolbar.children()[9].setPopupMode(2)
+ widget_w_warstwach = QWidget()
+ layout_widgetu = QVBoxLayout()
+ layout_widgetu.addWidget(layer_toolbar)
+ layout_widgetu.addWidget(self.kompozycje_widget)
+ layout_widgetu.addWidget(self.layer_view)
+ layout_widgetu.setContentsMargins(0, 7, 0, 4)
+ widget_w_warstwach.setLayout(layout_widgetu)
+ self.layer_panel.setWidget(widget_w_warstwach)
+ self.layer_panel.setTitleBarWidget(QWidget())
self.main_widget.pokaz_warstwy.toggled.connect(self.warstwy_show)
- self.main_widget.pokaz_warstwy.toggle()
+
+ def get_left_docks(self):
+ docks = [x for x in self.iface.mainWindow().findChildren(QDockWidget)
+ if x.isVisible()
+ ]
+ left_docks = [
+ x for x in docks if
+ self.iface.mainWindow().dockWidgetArea(x) == Qt.LeftDockWidgetArea
+ ]
+ return left_docks
def warstwy_show(self):
- splitter_start = QRect(-self.layer_panel.width(), self.layer_panel.y(),
- self.layer_panel.width(), self.layer_panel.height())
- splitter_end = QRect(0, self.layer_panel.y(),
- self.layer_panel.width(), self.layer_panel.height())
if self.main_widget.pokaz_warstwy.isChecked():
- self.layer_panel.show()
- self.set_animation(self.layer_panel, splitter_start, splitter_end, 200)
- self.layer_view.resizeColumnToContents(0)
+ left_docks = self.left_docks
+ # there shoulde be docks if there is none add default from qgis.
+ # (User turned off qgis with hidden docks)
+ if len(self.left_docks) == 0:
+ for dock in ['Layers', 'Browser']:
+ child = self.iface.mainWindow().findChild(QDockWidget,
+ dock)
+ if child:
+ left_docks.append(child)
else:
- self.set_animation(self.layer_panel, splitter_end, splitter_start, 200, 'out')
+ left_docks = self.get_left_docks()
+
+ for ldock in left_docks:
+ splitter_start = QRect(
+ -ldock.width(), ldock.y(),
+ ldock.width(), ldock.height())
+ splitter_end = QRect(
+ 0, ldock.y(),
+ ldock.width(), ldock.height())
+ if self.main_widget.pokaz_warstwy.isChecked():
+ ldock.show()
+ self.set_animation(
+ ldock, splitter_start, splitter_end, 200
+ )
+ self.layer_view.resizeColumnToContents(0)
+ else:
+ self.set_animation(
+ ldock, splitter_end, splitter_start, 200, 'out'
+ )
- def set_animation(self, widget, qrect_start, qrect_end, duration, mode='in'):
+ self.left_docks = []
+ if not self.main_widget.pokaz_warstwy.isChecked():
+ self.left_docks = left_docks
+
+ def set_animation(
+ self, widget, qrect_start, qrect_end, duration, mode='in'):
animation_in = QPropertyAnimation(widget, b"geometry")
animation_in.setStartValue(qrect_start)
animation_in.setEndValue(qrect_end)
animation_in.setDuration(duration)
animation_in.setEasingCurve(QEasingCurve.InOutQuad)
animation_in.start()
- animation_in.finished.connect(lambda: self.delete_animation(animation_in, widget, mode))
+ animation_in.finished.connect(
+ lambda: self.delete_animation(animation_in, widget, mode)
+ )
+
+ def repair_layers_names_for_compositions(self):
+ for layer in list(project.mapLayers().values()):
+ layer.setName(layer.name().replace(':', '_'))
+
+ def projekt_wczytany(self):
+ """ setup after loading new project
+ """
+ if not project.fileName():
+ return
+
+ self.repair_layers_names_for_compositions()
+ self.kompozycje.start()
+ # self.main_widget.btn_projekt_3.clicked.connect(
+ # self.kompozycje.modify_tool.check_for_changes_in_comps)
+ self.kompozycje.modify_tool.check_for_changes_in_comps()
+
+ def setup_orto(self):
+ """Setup qtoolbutton with menu, adds wms/wmts services to map
+ """
+ parent = self.main_widget
+ btn = self.main_widget.btn_orto_2
+
+ # przycisk dodawania ortofotomap
+ self.orto_add = OrtoAddingTool(parent, btn)
+
+ connect_orto = self.orto_add.connect_ortofotomapa_group
+ for service in self.orto_add.services:
+ service.orto_group_added.connect(connect_orto)
def delete_animation(self, animation, widget, mode):
del animation
if mode == 'out':
- widget.hide()
\ No newline at end of file
+ widget.hide()
+
+ def show_style_manager_dialog(self):
+ """Show dialog to manage qgis styles"""
+ self.style_manager_dlg = StyleManagerDialog(self.style_manager)
+ self.style_manager_dlg.setWindowFlags(
+ Qt.Window | Qt.WindowCloseButtonHint
+ )
+ self.style_manager_dlg.exec_()
diff --git a/giap_layout_dialog.py b/giap_layout_dialog.py
deleted file mode 100644
index 75375d6..0000000
--- a/giap_layout_dialog.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import os
-
-from PyQt5.QtWidgets import QWidget
-from qgis.PyQt import uic
-from qgis.PyQt import QtWidgets
-
-# This loads your .ui file so that PyQt can populate your plugin with the elements from Qt Designer
-FORM_CLASS, _ = uic.loadUiType(os.path.join(
- os.path.dirname(__file__), 'giap_layout_dialog_base.ui'))
-
-
-class MainTabQgsWidgetDialog(QWidget, FORM_CLASS):
-
- def __init__(self, parent=None):
- super(MainTabQgsWidgetDialog, self).__init__(parent)
- self.setupUi(self)
diff --git a/giap_layout_dialog_base.ui b/giap_layout_dialog_base.ui
deleted file mode 100644
index 863f96a..0000000
--- a/giap_layout_dialog_base.ui
+++ /dev/null
@@ -1,3464 +0,0 @@
-
-
- Form
-
-
-
- 0
- 0
- 1282
- 185
-
-
-
-
- 16777215
- 185
-
-
-
- Form
-
-
- * {
-background-color: rgb(53, 85, 109);
-color: rgb(255, 255, 255);
-font: 10pt "Segoe UI";
-}
-
-QPushButton {
-padding: 5px;
-}
-
-QLineEdit, QTextEdit{
-border: 2px solid;
-border-radius: 4px;
-border-color: rgba(38, 60, 78, 255);
-border-top-color: qlineargradient(spread:pad, x1:1, y1:0, x2:1, y2:1, stop:0 rgba(26, 44, 60, 255), stop:1 rgba(38, 60, 78, 255));
-background-color: rgba(38, 60, 78, 255);
-}
-QPushButton {
-border: none;
-border-width: 2px;
-border-radius: 6px;
-background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-}
-QPushButton:checked {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-border: solid;
-border-width: 2px;
-border-color: rgb(65, 97, 124);
-}
-
-QPushButton:pressed {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-border: solid;
-border-width: 2px;
-border-color: rgb(65, 97, 124);
-}
-
-QToolButton {
-border: none;
-border-width: 2px;
-border-radius: 6px;
-background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-}
-
-QToolButton:checked {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-border: solid;
-border-width: 2px;
-border-color: rgb(65, 97, 124);
-}
-
-QMenu {
-background-color: rgb(53, 85, 109);
-color: rgb(255, 255, 255);
-font: 10pt "Segoe UI";
-}
-
-QToolButton:pressed {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-border: solid;
-border-width: 2px;
-border-color: rgb(65, 97, 124);
-}
-
-QToolButton::menu, QToolButton::menu-button {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-border: solid;
-border-width: 2px;
-border-color: rgb(65, 97, 124);
-}
-
-QMenu::item:selected {
-background-color: rgb(87, 131, 167);
-}
-
-QComboBox QListView{
-selection-background-color: rgb(87, 131, 167);
-}
-
-QComboBox:editable {
-border: none;
-border-radius: 4px;
-background-color: qlineargradient(spread:pad, x1:1, y1:0, x2:1, y2:0.1, stop:0 rgba(26, 44, 60, 255), stop:1 rgba(38, 60, 78, 255));
-padding: 0px 0px 0px 3px;
-}
-
-QComboBox:!editable {
-border: none;
-border-width: 2px;
-border-radius: 4px;
-background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-padding:0px 3px 0px 3px;
-}
-
-QComboBox:!editable:on {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-border: solid;
-border-width: 2px;
-border-color: rgb(65, 97, 124);
-padding:0px 5px 0px 3px;
-}
-
-QComboBox::drop-down {
-width: 15px;
-border-left: solid;
-border-width: 1px;
-border-color: rgb(26, 44, 60);
-background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-border-top-right-radius: 4px;
-border-bottom-right-radius: 4px;
-}
-QComboBox::drop-down:editable:on {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-border: solid;
-border-width: 2px;
-border-color: rgb(65, 97, 124);
-}
-
-QComboBox::drop-down:!editable:on {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-}
-
-QComboBox::down-arrow {
- image: url(:/plugins/giap_layout/icons/down_arrow.png);
- width: 15px;
-}
-
-QToolTip {
-color:black;
-background-color: rgb(255, 255, 185);
-border-color: rgb(215, 215, 215);
-font: 9pt "Segoe UI";
-/*font-weight: bold;*/
-}
-
-Line {
-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-}
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
- -
-
-
- QFrame::NoFrame
-
-
- QFrame::Plain
-
-
- 0
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
- Qt::Vertical
-
-
- QSizePolicy::Fixed
-
-
-
- 20
- 5
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 140
-
-
-
-
- 16777215
- 140
-
-
-
- QTabBar::tab {
-border-top-left-radius: 8px;
-border-top-right-radius: 8px;
-margin-right: -1px;
-padding:2px;
-padding-left: 5px;
-padding-right: 5px;
-height: 20px;
-font-weight: bold;
-}
-
-QTabBar::tab:selected {
-border: 1px solid;
-border-color: rgb(79, 118, 150);
-background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(79, 118, 150, 255), stop:1 rgba(105, 157, 200, 255));
-}
-
-QTabBar::tab:!selected {
-border: 1px solid rgb(90, 135, 172);
-border-left-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-border-right-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-border-bottom: 1px solid;
-border-bottom-color: rgb(65, 97, 124);
-background-color: rgb(65, 97, 124);
-color: rgb(203, 212, 220);
-}
-
-QTabBar::tab:last:!selected {
-margin-right: 1px;
-}
-QTabWidget::pane {
-border-top: 2px solid rgb(79, 118, 150);
-border-bottom: 2px solid rgb(79, 118, 150);
-}
-QTabWidget::tab-bar {
-left: 5px;
-right: 5px;
-}
-
-
-
- 0
-
-
- true
-
-
- false
-
-
-
- QAbstractButton {
-border-radius: 4px;
-}
-
-
- Narzędzia podstawowe
-
-
-
- QLayout::SetDefaultConstraint
-
-
- 5
-
-
- 3
-
-
- 5
-
-
- 3
-
-
- 8
-
-
- 5
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 0
- 20
-
-
-
-
- 16777215
- 13
-
-
-
-
- Segoe UI
- 10
- 75
- false
- true
-
-
-
- color: rgb(203, 212, 220);
-font: 10pt "Segoe UI" ;
-font-weight: bold;
-
-
- Pomiar
-
-
- Qt::AlignHCenter|Qt::AlignTop
-
-
- -4
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- :/plugins/giap_layout/icons/panmap.png:/plugins/giap_layout/icons/panmap.png
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
-
- 10
- 0
-
-
-
- color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-
-
- QFrame::Plain
-
-
- Qt::Vertical
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 10
- 0
-
-
-
- color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-
-
- QFrame::Plain
-
-
- Qt::Vertical
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 20
-
-
-
-
- 16777215
- 13
-
-
-
-
- Segoe UI
- 10
- 75
- false
- true
-
-
-
- color: rgb(203, 212, 220);
-font: 10pt "Segoe UI" ;
-font-weight: bold;
-
-
- Nawigacja
-
-
- Qt::AlignHCenter|Qt::AlignTop
-
-
- -4
-
-
- -1
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 10
- 0
-
-
-
- color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-
-
- QFrame::Plain
-
-
- Qt::Vertical
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 20
-
-
-
-
- 16777215
- 13
-
-
-
-
- Segoe UI
- 10
- 75
- false
- true
-
-
-
- color: rgb(203, 212, 220);
-font: 10pt "Segoe UI" ;
-font-weight: bold;
-
-
- Projekt
-
-
- Qt::AlignHCenter|Qt::AlignTop
-
-
- -4
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 20
-
-
-
-
- 16777215
- 13
-
-
-
-
- Segoe UI
- 10
- 75
- false
- true
-
-
-
- color: rgb(203, 212, 220);
-font: 10pt "Segoe UI" ;
-font-weight: bold;
-
-
- Atrybuty
-
-
- Qt::AlignHCenter|Qt::AlignTop
-
-
- -4
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 10
- 0
-
-
-
- color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-
-
- QFrame::Plain
-
-
- Qt::Vertical
-
-
-
- -
-
-
- 0
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 8
-
-
- 5
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 104
- 104
-
-
-
- background-color: none;
-
-
-
-
-
-
- :/plugins/giap_layout/icons/giap_logo_big.png:/plugins/giap_layout/icons/giap_logo_big.png
-
-
-
- 90
- 90
-
-
-
-
-
-
-
-
- Narzędzia zaawansowane
-
-
-
- 5
-
-
- 3
-
-
- 5
-
-
- 3
-
-
- 8
-
-
- 5
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- :/plugins/giap_layout/icons/my_prints.png:/plugins/giap_layout/icons/my_prints.png
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- :/plugins/giap_layout/icons/magnet_tool.png:/plugins/giap_layout/icons/magnet_tool.png
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 8
- 0
-
-
-
- color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-
-
- QFrame::Plain
-
-
- Qt::Vertical
-
-
-
- -
-
-
-
- 8
- 0
-
-
-
- color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-
-
- QFrame::Plain
-
-
- Qt::Vertical
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 20
-
-
-
-
- 16777215
- 13
-
-
-
-
- Segoe UI
- 10
- 75
- false
- true
-
-
-
- color: rgb(203, 212, 220);
-font: 10pt "Segoe UI" ;
-font-weight: bold;
-
-
- Atrybuty
-
-
- Qt::AlignHCenter|Qt::AlignTop
-
-
- -4
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 8
- 0
-
-
-
- color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-
-
- QFrame::Plain
-
-
- Qt::Vertical
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 20
-
-
-
-
- 16777215
- 13
-
-
-
-
- Segoe UI
- 10
- 75
- false
- true
-
-
-
- color: rgb(203, 212, 220);
-font: 10pt "Segoe UI" ;
-font-weight: bold;
-
-
- Warstwy
-
-
- Qt::AlignHCenter|Qt::AlignTop
-
-
- -4
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 20
-
-
-
-
- 16777215
- 13
-
-
-
-
- Segoe UI
- 10
- 75
- false
- true
-
-
-
- color: rgb(203, 212, 220);
-font: 10pt "Segoe UI" ;
-font-weight: bold;
-
-
- Zaawansowana digitalizacja
-
-
- Qt::AlignHCenter|Qt::AlignTop
-
-
- -4
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 20
-
-
-
-
- 16777215
- 13
-
-
-
-
- Segoe UI
- 10
- 75
- false
- true
-
-
-
- color: rgb(203, 212, 220);
-font: 10pt "Segoe UI" ;
-font-weight: bold;
-
-
- Wektor
-
-
- Qt::AlignHCenter|Qt::AlignTop
-
-
- -4
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 8
- 0
-
-
-
- color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-
-
- QFrame::Plain
-
-
- Qt::Vertical
-
-
-
- -
-
-
-
- 8
- 0
-
-
-
- color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-
-
- QFrame::Plain
-
-
- Qt::Vertical
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 20
-
-
-
-
- 16777215
- 13
-
-
-
-
- Segoe UI
- 10
- 75
- false
- true
-
-
-
- color: rgb(203, 212, 220);
-font: 10pt "Segoe UI" ;
-font-weight: bold;
-
-
- Etykiety
-
-
- Qt::AlignHCenter|Qt::AlignTop
-
-
- -4
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 1434
- 75
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 20
-
-
-
-
- 16777215
- 13
-
-
-
-
- Segoe UI
- 10
- 75
- false
- true
-
-
-
- color: rgb(203, 212, 220);
-font: 10pt "Segoe UI" ;
-font-weight: bold;
-
-
- Wydruki
-
-
- Qt::AlignHCenter|Qt::AlignTop
-
-
- -4
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- 24
- 24
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 104
- 104
-
-
-
- background-color: none;
-
-
-
-
-
-
- :/plugins/giap_layout/icons/giap_logo_big.png:/plugins/giap_layout/icons/giap_logo_big.png
-
-
-
- 90
- 90
-
-
-
-
- -
-
-
-
- 30
- 30
-
-
-
-
- 30
- 30
-
-
-
-
-
-
-
- :/plugins/giap_layout/icons/quick_print.png:/plugins/giap_layout/icons/quick_print.png
-
-
-
- 25
- 25
-
-
-
-
-
-
-
-
- Ustawienia
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 65
- 65
-
-
-
-
- 65
- 65
-
-
-
-
- Segoe UI
- 10
- 50
- false
- false
-
-
-
- Kompozycje
-
-
-
-
-
-
- :/plugins/GIAP-PolaMap/icons/wyrys.png:/plugins/GIAP-PolaMap/icons/wyrys.png
-
-
-
- 60
- 60
-
-
-
- false
-
-
- false
-
-
- Qt::ToolButtonIconOnly
-
-
-
- -
-
-
- Kompozycje
-
-
- Qt::AlignHCenter|Qt::AlignTop
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 40
-
-
-
- QAbstractButton {
-border-radius: 4px;
-}
-
-
- QFrame::NoFrame
-
-
- QFrame::Plain
-
-
- 0
-
-
-
- 5
-
-
- 5
-
-
- 5
-
-
- 5
-
-
- 5
-
-
-
-
-
- Qt::Vertical
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 0
-
-
-
-
- 30
- 30
-
-
-
-
- Segoe UI
- 10
- 50
- false
- false
-
-
-
- Pokaż informacje o działce
-
-
-
-
-
-
- :/plugins/giap_layout/icons/info.png:/plugins/giap_layout/icons/info.png
-
-
-
- 24
- 24
-
-
-
- true
-
-
- false
-
-
- Qt::ToolButtonIconOnly
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
-
- true
-
-
- QComboBox::NoInsert
-
-
- QComboBox::AdjustToContents
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- Segoe UI
- 10
- 50
- false
- false
-
-
-
- Pokaż panel warstw
-
-
- Warstwy
-
-
- true
-
-
- QToolButton::InstantPopup
-
-
- Qt::NoArrow
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 0
-
-
-
-
- 30
- 30
-
-
-
-
- Segoe UI
- 10
- 50
- false
- false
-
-
-
- Pokaż informacje o działce
-
-
-
-
-
-
- :/plugins/giap_layout/icons/info.png:/plugins/giap_layout/icons/info.png
-
-
-
- 24
- 24
-
-
-
- true
-
-
- false
-
-
- 300
-
-
- 100
-
-
- Qt::ToolButtonIconOnly
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 130
- 0
-
-
-
-
- 16777215
- 16777215
-
-
-
-
-
-
- Wpisz numer działki
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 130
- 29
-
-
-
-
-
-
- true
-
-
- QComboBox::NoInsert
-
-
- QComboBox::AdjustToContents
-
-
-
- -
-
-
-
- 0
- 30
-
-
-
- Qt::Vertical
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 250
- 0
-
-
-
-
-
-
- Wpisz adres punktu lub nazwę ulicy
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- wyszukaj działkę
-
-
- QAbstractButton {
-border-radius: 4px;
-}
-
-
- Wyszukaj
-
-
-
- -
-
-
- QFrame::NoFrame
-
-
- QFrame::Raised
-
-
- 0
-
-
-
- 0
-
-
- 0
-
-
- 3
-
-
- 0
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- Wyszukaj punkt adresowy
-
-
- QAbstractButton {
-border-radius: 4px;
-}
-
-
- Wyszukaj
-
-
-
-
-
-
-
-
-
-
-
-
-
- 5
-
-
- 5
-
-
- true
-
-
- true
-
-
- true
-
-
-
diff --git a/i18n/giap_pl.ts b/i18n/giap_pl.ts
new file mode 100644
index 0000000..dfcf78c
--- /dev/null
+++ b/i18n/giap_pl.ts
@@ -0,0 +1,116 @@
+
+
+
+ Form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/i18n/pl.ts b/i18n/pl.ts
new file mode 100644
index 0000000..442cc9a
--- /dev/null
+++ b/i18n/pl.ts
@@ -0,0 +1,11 @@
+
+
+
+ @default
+
+
+
+ Dzień dobry
+
+
+
diff --git a/i18n/test.pro b/i18n/test.pro
new file mode 100644
index 0000000..d405553
--- /dev/null
+++ b/i18n/test.pro
@@ -0,0 +1,5 @@
+FORMS = ../giap_layout_dialog_base.ui
+
+SOURCES = ../giap_layout_dialog.py
+
+TRANSLATIONS = giap_pl.ts
diff --git a/kompozycje_widget.py b/kompozycje_widget.py
index b76787f..0a65e72 100644
--- a/kompozycje_widget.py
+++ b/kompozycje_widget.py
@@ -2,7 +2,6 @@
import os
-from qgis.PyQt.QtGui import QIcon
from qgis.PyQt.QtWidgets import QWidget
from qgis.PyQt.uic import loadUiType
@@ -16,11 +15,3 @@ class kompozycjeWidget(QWidget, FORM_CLASS):
def __init__(self, parent=None):
super(kompozycjeWidget, self).__init__(parent)
self.setupUi(self)
- self.setup_dialog()
-
-
- def setup_dialog(self):
- self.frame.hide()
- self.frame_3.hide()
- self.kompozycjeComboBox.hide()
- self.label_92.hide()
diff --git a/kompozycje_widget.ui b/kompozycje_widget.ui
index d927bdb..36ab537 100644
--- a/kompozycje_widget.ui
+++ b/kompozycje_widget.ui
@@ -1,726 +1,259 @@
-
-
- Form
-
-
-
- 0
- 0
- 446
- 185
-
-
-
-
- 0
- 37
-
-
-
-
- 16777215
- 185
-
-
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 255
- 255
- 255
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
-
- Form
-
-
- * {
-background-color: rgb(53, 85, 109);
-color: rgb(255, 255, 255);
-font: 10pt "Segoe UI";
-}
-
-QPushButton {
-padding: 5px;
-}
-
-QLineEdit, QTextEdit{
-border: 2px solid;
-border-radius: 4px;
-border-color: rgba(38, 60, 78, 255);
-border-top-color: qlineargradient(spread:pad, x1:1, y1:0, x2:1, y2:1, stop:0 rgba(26, 44, 60, 255), stop:1 rgba(38, 60, 78, 255));
-background-color: rgba(38, 60, 78, 255);
-}
-QPushButton {
-border: none;
-border-width: 2px;
-border-radius: 6px;
-background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-}
-QPushButton:checked {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-border: solid;
-border-width: 2px;
-border-color: rgb(65, 97, 124);
-}
-
-QPushButton:pressed {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-border: solid;
-border-width: 2px;
-border-color: rgb(65, 97, 124);
-}
-
-QToolButton {
-border: none;
-border-width: 2px;
-border-radius: 6px;
-background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-}
-
-QToolButton:checked {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-border: solid;
-border-width: 2px;
-border-color: rgb(65, 97, 124);
-}
-
-QMenu {
-background-color: rgb(53, 85, 109);
-color: rgb(255, 255, 255);
-font: 10pt "Segoe UI";
-}
-
-QToolButton:pressed {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-border: solid;
-border-width: 2px;
-border-color: rgb(65, 97, 124);
-}
-
-QToolButton::menu, QToolButton::menu-button {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-border: solid;
-border-width: 2px;
-border-color: rgb(65, 97, 124);
-}
-
-QMenu::item:selected {
-background-color: rgb(87, 131, 167);
-}
-
-QComboBox QListView{
-selection-background-color: rgb(87, 131, 167);
-}
-
-QComboBox:editable {
-border: none;
-border-radius: 4px;
-background-color: qlineargradient(spread:pad, x1:1, y1:0, x2:1, y2:0.1, stop:0 rgba(26, 44, 60, 255), stop:1 rgba(38, 60, 78, 255));
-padding: 0px 0px 0px 3px;
-}
-
-QComboBox:!editable {
-border: none;
-border-width: 2px;
-border-radius: 4px;
-background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-padding:0px 3px 0px 3px;
-}
-
-QComboBox:!editable:on {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-border: solid;
-border-width: 2px;
-border-color: rgb(65, 97, 124);
-padding:0px 5px 0px 3px;
-}
-
-QComboBox::drop-down {
-width: 15px;
-border-left: solid;
-border-width: 1px;
-border-color: rgb(26, 44, 60);
-background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
-border-top-right-radius: 4px;
-border-bottom-right-radius: 4px;
-}
-QComboBox::drop-down:editable:on {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-border: solid;
-border-width: 2px;
-border-color: rgb(65, 97, 124);
-}
-
-QComboBox::drop-down:!editable:on {
-background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
-}
-
-QComboBox::down-arrow {
- image: url(:/plugins/GIAP-giap_layout/icons/down_arrow.png);
- width: 15px;
-}
-
-QToolTip {
-color:black;
-background-color: rgb(255, 255, 185);
-border-color: rgb(215, 215, 215);
-font: 9pt "Segoe UI";
-/*font-weight: bold;*/
-}
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 5
-
-
-
-
- 16777215
- 16
-
-
-
- QFrame::NoFrame
-
-
- QFrame::Raised
-
-
- 0
-
-
-
-
- 0
- 0
- 51500
- 3
-
-
-
-
-
-
-
-
- 79
- 118
- 150
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 79
- 118
- 150
-
-
-
-
-
-
- 79
- 118
- 150
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
-
-
- 79
- 118
- 150
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 79
- 118
- 150
-
-
-
-
-
-
- 79
- 118
- 150
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
-
-
- 79
- 118
- 150
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 79
- 118
- 150
-
-
-
-
-
-
- 79
- 118
- 150
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
- 53
- 85
- 109
-
-
-
-
-
-
-
-
- Segoe UI
- 10
- 50
- false
- false
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- false
-
-
- *{
-color: rgb(79,118,150) !important;
-}
-
-
- QFrame::Plain
-
-
- 2
-
-
- Qt::Horizontal
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 37
-
-
-
- QAbstractButton {
-border-radius: 4px;
-}
-
-
- QFrame::NoFrame
-
-
- QFrame::Plain
-
-
- 0
-
-
-
- 7
-
-
- 4
-
-
-
-
-
-
- 0
- 30
-
-
-
-
- 80
- 30
-
-
-
- Kompozycje:
-
-
-
- -
-
-
- true
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 30
-
-
-
-
-
-
- false
-
-
- QComboBox::NoInsert
-
-
- QComboBox::AdjustToContents
-
-
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
- 5
-
-
- 5
-
-
- true
-
-
- true
-
-
- true
-
-
-
+
+
+ Form
+
+
+
+ 0
+ 0
+ 409
+ 117
+
+
+
+ Form
+
+
+ * {
+font: 8pt "Segoe UI";
+}
+
+QLabel
+{
+font: 8pt "Segoe UI";
+}
+
+QPushButton {
+padding: 5px;
+}
+
+QLineEdit, QTextEdit{
+border: 2px solid;
+border-radius: 4px;
+border-color: rgba(38, 60, 78, 255);
+border-top-color: qlineargradient(spread:pad, x1:1, y1:0, x2:1, y2:1, stop:0 rgba(26, 44, 60, 255), stop:1 rgba(38, 60, 78, 255));
+}
+QPushButton {
+border: none;
+border-width: 2px;
+border-radius: 6px;
+}
+QPushButton:checked {
+border: solid;
+border-width: 2px;
+border-color: rgb(65, 97, 124);
+}
+
+QPushButton:pressed {
+border: solid;
+border-width: 2px;
+border-color: rgb(65, 97, 124);
+}
+
+QToolButton {
+border: none;
+border-width: 2px;
+border-radius: 6px;
+
+}
+
+QToolButton:checked {
+
+border: solid;
+border-width: 2px;
+border-color: rgb(65, 97, 124);
+}
+
+QMenu {
+
+font: 10pt "Segoe UI";
+}
+
+QToolButton:pressed {
+
+border: solid;
+border-width: 2px;
+border-color: rgb(65, 97, 124);
+}
+
+QToolButton::menu, QToolButton::menu-button {
+
+border: solid;
+border-width: 2px;
+border-color: rgb(65, 97, 124);
+}
+
+
+
+QToolTip {
+color:black;
+background-color: rgb(255, 255, 185);
+border-color: rgb(215, 215, 215);
+font: 9pt "Segoe UI";
+/*font-weight: bold;*/
+}
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 5
+
+
+
+
+ 16777215
+ 16
+
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Raised
+
+
+ 0
+
+
+
-
+
+
+
+ 0
+ 5
+
+
+
+ Qt::Horizontal
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 37
+
+
+
+ QAbstractButton {
+border-radius: 4px;
+}
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Plain
+
+
+ 0
+
+
+
+ 7
+
+
+ 4
+
+
-
+
+
+
+ 0
+ 30
+
+
+
+
+ 80
+ 30
+
+
+
+ Kompozycje:
+
+
+
+ -
+
+
+ true
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 30
+
+
+
+
+ 16777215
+ 30
+
+
+
+
+
+
+ false
+
+
+ QComboBox::NoInsert
+
+
+ QComboBox::AdjustToContents
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
diff --git a/metadata.txt b/metadata.txt
index d05a9a1..038965c 100644
--- a/metadata.txt
+++ b/metadata.txt
@@ -28,7 +28,7 @@ tags=
homepage=
category=Plugins
-icon=icon.png
+icon=giap.ico
# experimental flag
experimental=True
diff --git a/ribbon_config.py b/ribbon_config.py
new file mode 100644
index 0000000..f1ea09c
--- /dev/null
+++ b/ribbon_config.py
@@ -0,0 +1,162 @@
+RIBBON_DEFAULT = [
+ {
+ "tab_name": "Main",
+ "sections": [
+ {
+ "label": "Project",
+ "btn_size": 30,
+ "btns": [
+ ["mActionOpenProject", 0, 0],
+ ["mActionNewProject", 0, 1],
+ ["mActionSaveProject", 1, 0],
+ ["mActionSaveProjectAs", 1, 1]
+ ]
+ },
+
+ {
+ "label": "Navigation",
+ "btn_size": 30,
+ "btns": [
+ ["mActionPan", 0, 0],
+ ["mActionZoomIn", 0, 1],
+ ["mActionZoomOut", 0, 2],
+ ["mActionZoomFullExtent", 0, 3],
+
+ ["mActionZoomToLayer", 1, 0],
+ ["mActionZoomToSelected", 1, 1],
+ ["mActionZoomLast", 1, 2],
+ ["mActionZoomNext", 1, 3]
+ ]
+ },
+
+ {
+ 'label': 'Attributes',
+ 'btn_size': 30,
+ 'btns': [
+ ['mActionIdentify', 0, 0],
+ ['mActionSelectFeatures', 0, 1],
+ ['mActionDeselectAll', 1, 0],
+ ['mActionOpenTable', 1, 1],
+ ],
+ },
+
+ {
+ 'label': 'Measures',
+ 'btn_size': 60,
+ 'btns': [
+ ['mActionMeasure', 0, 0],
+ ['mActionMeasureArea', 0, 1],
+ ['mActionMeasureAngle', 0, 2],
+ ],
+ },
+
+ {
+ 'label': 'Layers',
+ 'btn_size': 30,
+ 'btns': [
+ ['mActionAddOgrLayer', 0, 0],
+ ['mActionAddWmsLayer', 0, 1],
+ ['mActionAddPgLayer', 0, 2],
+ ['mActionAddMeshLayer', 0, 3],
+ ['mActionAddWcsLayer', 0, 4],
+ ['mActionAddDelimitedText', 0, 5],
+
+ ['mActionAddRasterLayer', 1, 0],
+ ['mActionAddWfsLayer', 1, 1],
+ ['mActionAddSpatiaLiteLayer', 1, 2],
+ ['mActionAddVirtualLayer', 1, 3],
+ ['mActionNewMemoryLayer', 1, 4],
+ ],
+ },
+
+ ]
+ },
+
+ {
+ "tab_name": "Tools",
+ "sections": [
+ {
+ 'label': 'Attributes',
+ 'btn_size': 30,
+ 'btns': [
+ ['mActionIdentify', 0, 0],
+ ['mActionSelectFeatures', 0, 1],
+ ['mActionSelectPolygon', 0, 2],
+ ['mActionSelectByExpression', 0, 3],
+ ['mActionInvertSelection', 0, 4],
+ ['mActionDeselectAll', 0, 5],
+
+ ['mActionOpenTable', 1, 0],
+ ['mActionStatisticalSummary', 1, 1],
+ ['mActionOpenFieldCalc', 1, 2],
+ ['mActionMapTips', 1, 3],
+ ['mActionNewBookmark', 1, 4],
+ ['mActionShowBookmarks', 1, 5],
+ ],
+ },
+
+ {
+ 'label': 'Labels',
+ 'btn_size': 30,
+ 'btns': [
+ ['mActionLabeling', 0, 0],
+ ['mActionChangeLabelProperties', 0, 1],
+ ['mActionPinLabels', 0, 2],
+ ['mActionShowPinnedLabels', 0, 3],
+ ['mActionShowHideLabels', 0, 4],
+ ['mActionMoveLabel', 1, 0],
+ ['mActionRotateLabel', 1, 1],
+ ['mActionDiagramProperties', 1, 2],
+ ['mActionShowUnplacedLabels', 1, 3],
+ ]
+ },
+
+ {
+ 'label': 'Vector',
+ 'btn_size': 30,
+ 'btns': [
+ ['mActionToggleEditing', 0, 0],
+ ['mActionSaveLayerEdits', 0, 1],
+ ['mActionVertexTool', 0, 2],
+ ['mActionUndo', 0, 3],
+ ['mActionRedo', 0, 4],
+
+ ['mActionAddFeature', 1, 0],
+ ['mActionMoveFeature', 1, 1],
+ ['mActionDeleteSelected', 1, 2],
+ ['mActionCutFeatures', 1, 3],
+ ['mActionCopyFeatures', 1, 4],
+ ['mActionPasteFeatures', 1, 5],
+ ],
+ },
+
+ {
+ 'label': 'Digitalization',
+ 'btn_size': 30,
+ 'btns': [
+ ['EnableSnappingAction', 0, 0],
+ ['EnableTracingAction', 0, 1],
+ ['mActionRotateFeature', 0, 2],
+ ['mActionSimplifyFeature', 0, 3],
+ ['mActionAddRing', 0, 4],
+ ['mActionAddPart', 0, 5],
+ ['mActionFillRing', 0, 6],
+ ['mActionOffsetCurve', 0, 7],
+ ['mActionCircularStringCurvePoint', 0, 8],
+
+
+ ['mActionDeleteRing', 1, 0],
+ ['mActionDeletePart', 1, 1],
+ ['mActionReshapeFeatures', 1, 2],
+ ['mActionSplitParts', 1, 3],
+ ['mActionSplitFeatures', 1, 4],
+ ['mActionMergeFeatureAttributes', 1, 5],
+ ['mActionMergeFeatures', 1, 6],
+ ['mActionReverseLine', 1, 7],
+ ['mActionTrimExtendFeature', 1, 8],
+ ]
+ },
+ ]
+ },
+
+]
diff --git a/select_section.py b/select_section.py
new file mode 100644
index 0000000..1576848
--- /dev/null
+++ b/select_section.py
@@ -0,0 +1,16 @@
+import os
+from qgis.PyQt import uic
+from qgis.PyQt.QtWidgets import QDialog
+from .utils import STANDARD_TOOLS
+
+FORM_CLASS, _ = uic.loadUiType(os.path.join(
+ os.path.dirname(__file__), 'select_section_dialog.ui'))
+
+
+class SelectSection(QDialog, FORM_CLASS):
+ def __init__(self, parent=None):
+ super(SelectSection, self).__init__(parent)
+ self.setupUi(self)
+
+ tools = [x['label'] for x in STANDARD_TOOLS]
+ self.toolList.addItems(tools)
diff --git a/select_section_dialog.ui b/select_section_dialog.ui
new file mode 100644
index 0000000..c74f13d
--- /dev/null
+++ b/select_section_dialog.ui
@@ -0,0 +1,619 @@
+
+
+ SectionSelecterDialog
+
+
+ true
+
+
+
+ 0
+ 0
+ 462
+ 426
+
+
+
+
+ 1
+ 1
+
+
+
+
+ Segoe UI
+ 10
+ 50
+ false
+ false
+
+
+
+ Sections
+
+
+
+ :/plugins/GIAP-giap_layout/icons/giap_logo.png:/plugins/GIAP-giap_layout/icons/giap_logo.png
+
+
+ * {
+ background-color: rgb(255, 255, 255);
+ font: 10pt "Segoe UI";
+}
+
+QListWidget {
+ alternate-background-color: #e7e7e7;
+}
+QListWidget:item:selected {
+ background: rgb(38, 60, 78);
+ color: white;
+}
+
+QAbstractItemView
+{
+ alternate-background-color: #e7e7e7;
+ color: black;
+ border: 1px solid #1a2936;
+ border-radius: 3px;
+ padding: 1px;
+}
+
+QAbstractItemView:selected
+{
+ color: white;
+ backgroud-color: rgb(38, 60, 78);
+}
+
+QPushButton {
+ color: black;
+ border: 1px solid black;
+ padding: 4px;
+}
+
+QPushButton:disabled
+{
+ color: gray;
+}
+
+QToolButton {
+ color: black;
+}
+
+QPushButton:disabled
+{
+ color: gray;
+}
+
+QHeaderView::section
+{
+ background-color: #cfcfcf;
+ color: black;
+ padding-left: 4px;
+}
+
+
+
+
+
+ false
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+ -
+
+
+
+ 120
+ 0
+
+
+
+
+ Segoe UI Light
+ 8
+ 9
+ false
+ false
+
+
+
+ background-color: rgb(53, 85, 109);
+font: 75 8pt "Segoe UI Light";
+
+
+
+
+ 20
+
+
+ 5
+
+
+ 5
+
+
+ 5
+
+
+ 5
+
+
-
+
+
+ false
+
+
+
+ 0
+ 20
+
+
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 255
+ 255
+ 255
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+ 53
+ 85
+ 109
+
+
+
+
+
+
+
+ QRadioButton::indicator::checked {
+ border: 2px solid black;
+ border-radius: 9px;
+ background-color: rgb(252, 67, 73);
+ width: 15px;
+ height: 15px;
+}
+
+QRadioButton::indicator::unchecked {
+ border: 2px solid black;
+ border-radius: 9px;
+ background-color: rgb(255, 255, 255);
+ width: 15px;
+ height: 15px;
+}
+
+QRadioButton {
+ color : white;
+ font-weight: bold;
+}
+
+
+ Add section
+
+
+ true
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+ verticalSpacer_3
+ obszar_radio
+
+
+ -
+
+
+
+ Segoe UI
+ 10
+ 50
+ false
+ false
+
+
+
+
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Plain
+
+
+ 0
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+
+ 200
+ 20
+
+
+
+
+ 16777215
+ 20
+
+
+
+ background-color: rgb(252, 67, 73);
+
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Plain
+
+
+
+
+ 1
+ 1
+ 231
+ 16
+
+
+
+
+ Segoe UI
+ 10
+ 75
+ false
+ true
+
+
+
+ color : white; font-weight: bold;
+
+
+ Add section
+
+
+
+
+ -
+
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
+
+
+
-
+
+
+
+
+
+
-
+
+
+ Add selected
+
+
+
+ -
+
+
+ QListWidget {
+ alternate-background-color: rgb(87, 131, 167);
+}
+
+
+
+
+ QAbstractItemView::MultiSelection
+
+
+ QAbstractItemView::SelectRows
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ Segoe UI
+ 10
+ 50
+ false
+ false
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+ pushButton_cancel
+ clicked()
+ SectionSelecterDialog
+ reject()
+
+
+ 710
+ 419
+
+
+ 461
+ 408
+
+
+
+
+ pushButton_add
+ clicked()
+ SectionSelecterDialog
+ accept()
+
+
+ 290
+ 585
+
+
+ 230
+ 325
+
+
+
+
+
diff --git a/styles/blueglass/blueglass.qss b/styles/blueglass/blueglass.qss
new file mode 100644
index 0000000..1bd79dc
--- /dev/null
+++ b/styles/blueglass/blueglass.qss
@@ -0,0 +1,344 @@
+/**
+QGIS Blue Glass Theme
+
+based on Minimalist theme
+
+by Steven Kay www.stevefaeembra.com @stevefaeembra
+
+changes made relative to original minimalist theme...
+
+- gave toolbar icons a bit more breathing room
+- added borders to combo/spinboxes
+- made separators easier to find when you hover over them (they turn red)
+- glassy look gradient buttons
+- disabled buttons more distinct from enabled buttons
+- hover over toolbar buttons gives gradient effect
+- currently enabled tools get a border to show they're active (e.g. pan, identify)
+- scrollbar thumbs get minimum size to make it easier to scroll through long lists such as the attribute table
+
+tested under GTK+, YMMV with other qt window styles.
+
+*/
+
+QWidget{border: 0px; background-color: rgba(250, 250, 250, 255); selection-background-color: rgba(0,0,255,75);background-clip: border;outline: 0; }
+QDialog { border-radius: 3px; border: 1px;background-color: rgba(250, 250, 250, 255)}
+QMenuBar{ background-color: white; border-bottom: 0px solid black; }
+QMenuBar::item:selected {background:rgba(0,0,255,75) }
+QMenuBar::item:pressed {background: rgba(0,0,255,100) }
+QToolBar{ background-color: #fafafa; border: 0px solid #fafafa; }
+QToolBar::handle{
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #fafafa, stop: 1.0 #cbcbff);
+ border: 0px solid #fafafa;
+}
+QLabel{color: rgba(0, 0, 0, 225) }
+
+/** separator goes red on hover, makes it easier to find/move */
+
+QMainWindow::separator {
+ background: #fafafa;
+ width: 4px; /* when vertical */
+ height: 4px; /* when horizontal */
+}
+QMainWindow::separator:hover {
+ background: red;
+}
+
+/** Dock Widgets e.g. Time Manager */
+
+QDockWidget {border: 0px solid;background :white; }
+QDockWidget::close-button, QDockWidget::float-button {border: 0px solid transparent;padding: 0px;}
+QDockWidget::close-button:hover, QDockWidget::float-button:hover {background: #CC0000;}
+QDockWidget::close-button:pressed, QDockWidget::float-button:pressed {padding: 1px -1px -1px 1px;}
+QDockWidget::title {
+ text-align: left; /* align the text to the left */
+ background: #9b9bff;
+ padding-left: 5px;
+}
+/** Menus */
+
+QMenu::icon{ margin-left: 5px; margin-right: 5px; }
+QMenu::item:pressed{background-color:rgba(0,0,255,75); }
+QMenu::item:hover{background-color:rgba(0,0,255,50); }
+
+QLineEdit {
+ border: 1px solid gray;
+ border-radius: 1px;
+ padding: 0 8px;
+ background: white;
+ selection-background-color: darkgray;
+ border-color: darkgray
+}
+
+QLineEdit:read-only {
+ background: lightblue;
+}
+
+QTextEdit, QListView {
+ background-color: white;
+ border: 1px solid gray;
+ background-attachment: scroll;
+}
+
+QProgressBar {border: 1px solid grey;border-radius: 3px;}
+QProgressBar::chunk {background-color: rgba(0,0,255,50);width: 5px;height:10px;}
+
+/** Scroll bars */
+
+QScrollBar:horizontal{
+ height: 15px;
+ margin: 0px 11px 0px 11px;
+ border: 0px solid #3A3939;
+ border-radius: 6px;
+ background-color: #3A3939;
+}
+QScrollBar::handle:horizontal{
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #fafafa, stop: 1.0 #9b9bff);
+ min-width: 5px;
+ border-radius: 3px;
+}
+QScrollBar::down-arrow:horizontal{background: none;display:none;}
+QScrollBar::up-arrow:horizontal{background: none;display:none;}
+QScrollBar::add-page:horizontal{background: none;display:none;}
+QScrollBar::sub-page:horizontal{background: none;display:none;}
+QScrollBar:vertical{
+ background-color: #3A3939;
+ width: 15px;
+ margin: 11px 0 11px 0;
+ border: 0px solid #3A3939;
+ border-radius: 6px;
+}
+QScrollBar::handle:vertical{
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #fafafa, stop: 1.0 #9b9bff);
+ min-height: 25px;border-radius: 5px;
+}
+
+QScrollBar::up-arrow:vertical{background: none;display:none;}
+QScrollBar::down-arrow:vertical{background: none;display:none;}
+QScrollBar::add-page:vertical{background: none;display:none;}
+QScrollBar::sub-page:vertical{background: none;display:none;}
+
+/**
+Aim of this is to increase default height of QgsMessageBar. This is not directly stylable for now, so this hack is commented out for now; leaving in here
+in the hope I remember to style this when it's stylable :)
+
+QFrame QFrame {
+ background-color: #fafafa;
+ min-height: 100px;
+ margin:0px;
+ padding:0px;
+}
+*/
+
+/**
+Checkboxes & Radio Buttons
+*/
+
+QRadioButton::indicator:checked {
+ background-color:#9b9bff;
+ border:1px solid black;
+ border-radius: 8px;
+}
+
+QRadioButton::indicator:unchecked {
+ background-color:#fafafa;
+ border:1px solid black;
+ border-radius: 8px;
+}
+
+QCheckBox::indicator:checked {
+ background-color:#9b9bff;
+ border:1px solid black;
+}
+
+QCheckBox::indicator:unchecked {
+ background-color:#fafafa;
+ border:1px solid black;
+}
+
+/**
+Toolbuttons
+*/
+
+QToolButton { /* all types of tool button */
+ border: 6px solid #fafafa;
+ border-radius: 15px;
+}
+
+QToolButton[popupMode="1"] {
+ padding-right: 20px;
+}
+
+QToolButton:hover {
+ border: 2px solid #9b9bff;
+ /*background-color: #9b9bff;*/
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #fafafa, stop: 1.0 #9b9bff);
+ padding:0px;
+}
+
+QToolButton:pressed {
+ border: 6px solid #fafafa;
+ border-radius: 15px;
+}
+
+QToolButton:checked {
+ border: 3px solid black;
+ border-radius: 15px;
+ background-color: #9b9bff;
+ padding:0px;
+}
+
+QToolButton::menu-button {
+ border: 0px solid black;
+ border-top-right-radius: 0px;
+ border-bottom-right-radius: 0px;
+ width: 16px;
+}
+
+QToolButton::menu-arrow:open {
+ top: 1px; left: 1px;
+ border: 0px solid gray;
+}
+
+/** PushButtons **/
+
+QPushButton {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #fafafa, stop: 1.0 #9b9bff);
+ border-style: outset;
+ border-width: 1px;
+ border-radius: 5px;
+ border-color: black;
+ min-width: 2em;
+ padding: 6px;
+}
+
+QPushButton::hover {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #9b9bff, stop: 1.0 #fafafa);
+ border-style: outset;
+ border-width: 1px;
+ border-radius: 5px;
+ border-color: black;
+ min-width: 2em;
+ padding: 6px;
+}
+
+QPushButton::disabled {
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #ffffff22, stop: 1.0 #9b9bff22);
+ border-style: dotted;
+ border-width: 1px;
+ border-radius: 5px;
+ border-color: #99999933;
+ min-width: 2em;
+ padding: 6px;
+ color:#33333;
+}
+
+/** Other widgets */
+
+QTableWidget {
+ border: 1px solid #E6E6E6;
+ selection-background-color: rgba(0,0,255,50);
+}
+
+QTableWidget QTableCornerButton::section {
+ border: 1px solid #E6E6E6;;
+}
+
+
+QListView {
+ show-decoration-selected: 1; /* make the selection span the entire width of the view */
+ border: 1px solid #E6E6E6;
+}
+
+QListView::item:alternate {
+ background: #EEEEEE;
+ border: 1px solid #E6E6E6;
+}
+
+QListView::item:selected {
+ border: 0px solid #6a6ea9;
+}
+
+QListView::item:selected:!active {
+ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #ABAFE5, stop: 1 #8588B2);
+}
+
+QListView::item:selected:active {
+ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #6a6ea9, stop: 1 #888dd9);
+}
+
+QListView::item:hover {
+ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #FAFBFE, stop: 1 #DCDEF1);
+}
+
+/** Combo boxes */
+
+QComboBox {
+ border: 1px solid ;
+ border-color: darkgray ;
+ border-radius: 3px;
+ padding: 1px 18px 1px 3px;
+ min-width: 6em;
+}
+
+QTabBar::tab {
+ background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #cccccc, stop: 1.0 #fafafa);;
+ border:1px solid grey;
+ border-top-left-radius:12px;
+ border-top-right-radius:12px;
+ padding:4px;
+}
+
+QTabBar::tab:selected {
+ border-bottom:none;
+ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #9b9bff, stop: 1.0 #fafafa);
+}
+
+/** checkbox inside of a drop-down section XXX*/
+
+QGroupBox::indicator {
+ width: 23px;
+ height: 23px;
+}
+
+QGroupBox::indicator:checked {
+ background-color:#9b9bff;
+ border:1px solid black;
+}
+
+QGroupBox::indicator:unchecked {
+ background-color:#fafafa;
+ border:1px solid black;
+}
+
+/** group boxes */
+
+QGroupBox {
+ background-color: rgba(250, 250, 250, 255);
+ border: 1px solid gray;
+ border-top-style: solid;
+ border-right-style: solid;
+ border-bottom-style: solid;
+ border-left-style: solid;
+ border-radius: 3px;
+ margin-top: 4ex;
+}
+
+QGroupBox::title {
+ subcontrol-origin: margin;
+ subcontrol-position: top left;
+ padding: 0 6px;
+ background-color:rgba(250, 250, 250, 255);
+}
+
+/**
+spinbox - need to style QAbstractSpinbox or some spinboxes aren't styled...
+*/
+QAbstractSpinBox {
+ border:1px solid darkgray;
+ padding-bottom:4px;
+ padding-top:2px;
+ padding-right:8px;
+}
\ No newline at end of file
diff --git a/styles/coffee/coffee.qss b/styles/coffee/coffee.qss
new file mode 100644
index 0000000..114d104
--- /dev/null
+++ b/styles/coffee/coffee.qss
@@ -0,0 +1,110 @@
+.QWidget {
+ background-color: beige;
+}
+
+/* Nice Windows-XP-style password character. */
+QLineEdit[echoMode="2"] {
+ lineedit-password-character: 9679;
+}
+
+/* We provide a min-width and min-height for push buttons
+ so that they look elegant regardless of the width of the text. */
+QPushButton {
+ background-color: palegoldenrod;
+ border-width: 2px;
+ border-color: darkkhaki;
+ border-style: solid;
+ border-radius: 5;
+ padding: 3px;
+ min-width: 9ex;
+ min-height: 2.5ex;
+}
+
+QPushButton:hover {
+ background-color: khaki;
+}
+
+/* Increase the padding, so the text is shifted when the button is
+ pressed. */
+QPushButton:pressed {
+ padding-left: 5px;
+ padding-top: 5px;
+ background-color: #d0d67c;
+}
+
+QLabel, QAbstractButton {
+ font: bold;
+}
+
+/* Mark mandatory fields with a brownish color. */
+.mandatory {
+ color: brown;
+}
+
+/* Bold text on status bar looks awful. */
+QStatusBar QLabel {
+ font: normal;
+}
+
+QStatusBar::item {
+ border-width: 1;
+ border-color: darkkhaki;
+ border-style: solid;
+ border-radius: 2;
+}
+
+QComboBox, QLineEdit, QSpinBox, QTextEdit, QListView {
+ background-color: cornsilk;
+ selection-color: #0a214c;
+ selection-background-color: #C19A6B;
+}
+
+QListView {
+ show-decoration-selected: 1;
+}
+
+QListView::item:hover {
+ background-color: wheat;
+}
+
+/* We reserve 1 pixel space in padding. When we get the focus,
+ we kill the padding and enlarge the border. This makes the items
+ glow. */
+QLineEdit, QFrame {
+ border-width: 2px;
+ padding: 1px;
+ border-style: solid;
+ border-color: darkkhaki;
+ border-radius: 5px;
+}
+
+/* As mentioned above, eliminate the padding and increase the border. */
+QLineEdit:focus, QFrame:focus {
+ border-width: 3px;
+ padding: 0px;
+}
+
+/* A QLabel is a QFrame ... */
+QLabel {
+ border: none;
+ padding: 0;
+ background: none;
+}
+
+/* A QToolTip is a QLabel ... */
+QToolTip {
+ border: 2px solid darkkhaki;
+ padding: 5px;
+ border-radius: 3px;
+ opacity: 200;
+}
+
+/* Nice to have the background color change when hovered. */
+QRadioButton:hover, QCheckBox:hover {
+ background-color: wheat;
+}
+
+/* Force the dialog's buttons to follow the Windows guidelines. */
+QDialogButtonBox {
+ button-layout: 0;
+}
diff --git a/styles/darkblue/darkblue.qss b/styles/darkblue/darkblue.qss
new file mode 100644
index 0000000..042b9de
--- /dev/null
+++ b/styles/darkblue/darkblue.qss
@@ -0,0 +1,1795 @@
+/*
+ABOUT
+===========================================================
+version 1.7a
+QT theme (stylesheet) specially developed for FreeCAD (http://www.freecadweb.org/).
+It might work with other software that uses QT styling.
+
+
+LICENSE
+===========================================================
+Copyright (c) 2015 Pablo Gil Fernández
+The stylesheet barely uses code from Colin Duquesnoy "generic QT stylesheet"
+
+This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License.
+To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/.
+
+
+
+CUSTOMIZATION
+===========================================================
+If you would like to change the overall look/style of the theme, just find and replace following colors in the whole file:
+ background darker = #4d4e51
+ background dark and slighly darker = #5d5e61
+ background dark = #6d6e71
+ background normal and slighly darker = #797b7f
+ background normal = #85878a
+ background light = #9a9b9e
+ background lighter = #c7c7c9
+
+ lists background = #bdc1c9
+ lists background (alternate) = #b3b8bf
+ lists backgrounds selection = #abb0b7
+
+ foreground = white
+
+ selection darker = #1b3774
+ selection dark = #3874f2
+ selection normal = #5e90fa
+ selection inbetween normal and light = #6f9efa (used to build SpinBoxes)
+ selection light = #7cabf9
+ selection lighter = #adc5ed
+
+*/
+
+/* RESET EVERYTHING */
+QAbstractScrollArea,QCheckBox,QColumnView,QComboBox,QDateEdit,QDateTimeEdit,QDialog,QDialogButtonBox,QDockWidget,QDoubleSpinBox,QFrame,QGroupBox,QHeaderView,QLabel,QLineEdit,QListView,QListWidget,QMainWindow,QMenu,QMenuBar,QMessageBox,QProgressBar,QPushButton,QRadioButton,QScrollBar,QSizeGrip,QSlider,QSpinBox,QSplitter,QStatusBar,QTabBar,QTabWidget,QTableView,QTableWidget,QTextEdit,QTimeEdit,QToolBar,QToolButton,QToolBox,QToolTip,QTreeView,QTreeWidget,QWidget {
+ padding: 0px;
+ margin: 0px;
+ border: 0px;
+ border-style: none;
+ background-color: #85878a; /* set with default background color */
+}
+
+QMdiArea[showImage="true"] {
+ background-image: url(icons/background_freecad.png);
+ background-position: center;
+ background-repeat: no-repeat;
+}
+
+QProgressBar,
+QProgressBar:horizontal {
+ background: #bdc1c9;
+ border: 1px solid #6d6e71;
+ text-align: center;
+ padding: 1px;
+ border-radius: 4px;
+}
+QProgressBar::chunk,
+QProgressBar::chunk:horizontal {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+ border-radius: 3px;
+}
+
+QToolTip {
+ background-color: #4d4e51;
+ color: white;
+ padding: 4px;
+ border-radius: 4px;
+}
+
+QWidget {
+ color: #4d4e51;
+ background-color: #85878a;
+ background-clip: border;
+ border-image: none;
+ outline: 0;
+}
+
+QWidget:focus {
+ border: 1px solid #4d4e51;
+}
+
+QWidget:disabled {
+ color: #9a9b9e;
+ background-color: #4d4e51; /* same as QMenu background-color */
+}
+
+QMenuBar {
+ color: #c7c7c9;
+ background-color: #797b7f;
+}
+
+QMenuBar::item {
+ background-color: #797b7f;
+}
+
+QMenuBar::item:selected {
+ color: #1b3774;
+ border: 1px solid #5e90fa;
+ background-color: #5e90fa;
+}
+
+QMenuBar::item:pressed {
+ color: #1b3774;
+ border: 1px solid #7cabf9;
+ background-color: #7cabf9;
+ margin-bottom:-1px;
+ padding-bottom:1px;
+}
+
+QMenu {
+ color: #c7c7c9;
+ background-color: #4d4e51;
+ margin: 2px;
+ border: 1px solid transparent;
+}
+
+QMenu::icon {
+ margin: 5px;
+ border-style: none;
+}
+
+QMenu::right-arrow {
+ image:url(icons/right_arrow_light.png);
+}
+
+QMenu::item {
+ color: #c7c7c9;
+ background-color: #4d4e51;
+ padding: 2px 30px 2px 30px;
+ border: 1px solid #4d4e51; /* reserve space for selection border */
+}
+
+QMenu::item:selected {
+ color: #1b3774;
+ background-color: #7cabf9;
+}
+
+QMenu::separator {
+ height: 1px;
+ background-color: #6d6e71;
+ margin-top: 2px;
+ margin-bottom: 2px;
+ margin-left: 6px;
+ margin-right: 6px;
+}
+
+QMenu::indicator:non-exclusive {
+ color: #c7c7c9;
+ background-color: #9a9b9e;
+ border: 1px solid #4d4e51;
+ width: 11px;
+ height: 11px;
+ border-radius:2px;
+}
+
+QMenu::indicator:non-exclusive:checked {
+ background-color: #3874f2;
+ border: 1px solid #1b3774;
+ image:url(icons/checkbox_light.png);
+}
+
+QGroupBox {
+ color: #4d4e51;
+ font-weight: bold;
+ border:1px solid blue;
+ border-radius: 4px;
+ margin-top: 20px;
+ border-color: rgba(0, 0, 0, 20); /* lighter than "QGroupBox" border-color */
+ background-color: rgba(255, 255, 255, 15);
+}
+
+QGroupBox::title {
+ subcontrol-origin: margin;
+ subcontrol-position: top left;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-top: 10px;
+ background-color: transparent;
+}
+
+QAbstractScrollArea {
+ border-radius: 2px;
+ border: 1px solid #3A3939;
+ background-color: transparent;
+}
+
+QAbstractScrollArea::corner {
+ border: none;
+ background-color: #85878a;
+}
+
+QScrollBar:horizontal {
+ height: 15px;
+ margin: 3px 15px 3px 15px;
+ border: 1px transparent #4d4e51;
+ border-radius: 4px;
+ background-color: #4d4e51;
+}
+
+QScrollBar::handle:horizontal {
+ background-color: #6d6e71;
+ min-width: 5px;
+ border-radius: 4px;
+}
+
+QScrollBar::add-line:horizontal {
+ margin: 1px 3px 0px 3px; /* 1px to correctly fit the 10px width image */
+ border-image: url(icons/right_arrow_light.png);
+ width: 6px;
+ height: 10px;
+ subcontrol-position: right;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:horizontal {
+ margin: 1px 3px 0px 3px; /* 1px to correctly fit the 10px width image */
+ border-image: url(icons/left_arrow_light.png);
+ height: 10px;
+ width: 6px;
+ subcontrol-position: left;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::add-line:horizontal:hover,
+QScrollBar::add-line:horizontal:on {
+ border-image: url(icons/right_arrow_lighter.png);
+}
+
+
+QScrollBar::sub-line:horizontal:hover,
+QScrollBar::sub-line:horizontal:on {
+ border-image: url(icons/left_arrow_lighter.png);
+}
+
+QScrollBar::up-arrow:horizontal,
+QScrollBar::down-arrow:horizontal {
+ background: none;
+}
+
+
+QScrollBar::add-page:horizontal,
+QScrollBar::sub-page:horizontal {
+ background: none;
+}
+
+QScrollBar:vertical {
+ background-color: #4d4e51;
+ width: 15px;
+ margin: 15px 3px 15px 3px;
+ border: 1px transparent #4d4e51;
+ border-radius: 4px;
+}
+
+QScrollBar::handle:vertical {
+ background-color: #6d6e71;
+ min-height: 5px;
+ border-radius: 4px;
+}
+
+QScrollBar::sub-line:vertical {
+ margin: 3px 0px 3px 1px; /* 1px to correctly fit the 10px width image */
+ border-image: url(icons/up_arrow_light.png);
+ height: 6px;
+ width: 10px;
+ subcontrol-position: top;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::add-line:vertical {
+ margin: 3px 0px 3px 1px; /* 1px to correctly fit the 10px width image */
+ border-image: url(icons/down_arrow_light.png);
+ height: 6px;
+ width: 10px;
+ subcontrol-position: bottom;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:vertical:hover,
+QScrollBar::sub-line:vertical:on {
+ border-image: url(icons/up_arrow_lighter.png);
+}
+
+QScrollBar::add-line:vertical:hover,
+QScrollBar::add-line:vertical:on {
+ border-image: url(icons/down_arrow_lighter.png);
+}
+
+QScrollBar::up-arrow:vertical,
+QScrollBar::down-arrow:vertical {
+ background: none;
+}
+
+
+QScrollBar::add-page:vertical,
+QScrollBar::sub-page:vertical {
+ background: none;
+}
+
+QTextEdit {
+ color: #4d4e51;
+ background-color: #bdc1c9;
+ border: 1px solid #6d6e71;
+ padding: 0px;
+ margin: 0px;
+}
+
+QPlainTextEdit {
+ color: #4d4e51;
+ background-color: #bdc1c9;
+ border-radius: 2px;
+ border: 1px solid #6d6e71;
+ padding: 0px;
+ margin: 0px;
+}
+
+QSizeGrip {
+ image: url(icons/sizegrip_light.png);
+ width: 16px;
+ height: 16px;
+ background-color: transparent;
+}
+
+QRadioButton::indicator:unchecked{
+ color: #4d4e51;
+ background-color: #9a9b9e;
+ border: 1px solid #4d4e51;
+}
+
+QRadioButton::indicator:checked {
+ background-color: #3874f2;
+ border: 1px solid #1b3774;
+ image:url(icons/radiobutton_light.png);
+}
+
+QCheckBox,
+QRadioButton,
+QCheckBox:disabled,
+QRadioButton:disabled {
+ color: #4d4e51;
+ padding: 3px;
+ outline: none;
+ background-color: transparent;
+}
+
+QCheckBox::indicator,
+QGroupBox::indicator {
+ color: #c7c7c9;
+ background-color: #9a9b9e;
+ border: 1px solid #4d4e51;
+}
+
+QCheckBox::indicator {
+ width: 11px;
+ height: 11px;
+ border-radius:2px;
+}
+
+QRadioButton::indicator {
+ width: 11px;
+ height: 11px;
+ border-radius: 6px;
+}
+
+QRadioButton::indicator:pressed,
+QCheckBox::indicator:pressed,
+QCheckBox::indicator:non-exclusive:checked:pressed,
+QCheckBox::indicator:indeterminate:pressed,
+QCheckBox::indicator:checked:pressed {
+ border-color: #adc5ed;
+}
+
+QCheckBox::indicator:checked,
+QGroupBox::indicator:checked {
+ background-color: #3874f2;
+ border: 1px solid #1b3774;
+ image:url(icons/checkbox_light.png);
+}
+
+QCheckBox::indicator:disabled,
+QRadioButton::indicator:disabled {
+ border: 1px solid #6d6e71;
+}
+
+QCheckBox:disabled,
+QRadioButton::indicator:disabled {
+ color: #6d6e71;
+ background-color: transparent;
+}
+
+QCheckBox::indicator:disabled,
+QGroupBox::indicator:disabled,
+QMenu::indicator:non-exclusive:disabled {
+ background-color: #85878a;
+}
+
+QCheckBox::indicator:indeterminate {
+ background-color: #3874f2;
+ border: 1px solid #1b3774;
+ image: url(icons/checkbox_indeterminate_light.png);
+}
+
+QCheckBox:focus,
+QRadioButton:focus {
+ border: none;
+}
+
+QFrame,
+QFrame:pressed,
+QFrame:focus,
+QFrame:on {
+ border: 1px solid #85878a;
+ border-radius: 3px;
+ padding: 0px;
+}
+
+/* border and background of QComboBox drop-down */
+QComboBox QFrame,
+QComboBox QFrame:pressed,
+QComboBox QFrame:focus,
+QComboBox QFrame:on {
+ border: 1px solid #4d4e51;
+ background-color: #4d4e51;
+ padding: 0px;
+ margin: 0px;
+}
+
+QFrame[frameShape="0"] {
+ border-radius: 3px;
+}
+
+QFrame[height="3"],
+QFrame[width="3"] {
+ border-color: transparent;
+ background-color: transparent;
+}
+
+QFrame[height="3"] {
+ border-top-color: #6d6e71;
+}
+
+QFrame[width="3"] {
+ border-left-color: #6d6e71;
+}
+
+QPushButton {
+ color: #c7c7c9;
+ text-align: center;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #6d6e71, stop:1 #85878a);
+ border: 1px solid #4d4e51;
+ padding: 5px 12px 5px 12px;
+ margin: 4px 8px 4px 8px;
+ border-radius: 3px;
+ min-width: 14px;
+ min-height: 14px;
+}
+
+QPushButton:hover,
+QPushButton:focus {
+ color: white;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+ border-color: #3874f2;
+}
+
+QPushButton:disabled,
+QPushButton:disabled:checked {
+ color: #6d6e71;
+ background-color: #85878a;
+ border-color: #6d6e71;
+}
+
+QPushButton:pressed {
+ background-color: #3874f2;
+}
+
+QPushButton:checked {
+ background-color: #5e90fa;
+ border-color: #3874f2;
+}
+
+/* Color Buttons */
+Gui--ColorButton,
+Gui--ColorButton:disabled {
+ border-color: transparent;
+ background-color: transparent;
+ height: 24px;
+ padding: 0px;
+ margin: 0px;
+}
+
+Gui--ColorButton:hover {
+ border-color: #797b7f;
+ background-color: #797b7f;
+}
+
+/* Buttons inside the toolbar */
+QToolBar QPushButton {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #797b7f, stop:1 #85878a);
+ border: 1px solid #6d6e71;
+ min-width: 22px;
+ min-height: 22px;
+ margin-left: 2px;
+ margin-right: 2px;
+ margin-bottom: 3px; /*bigger margin to correctly separate buttons inside a vertical toolbar */
+ margin-top: 1px;
+ padding: 1px;
+}
+
+QToolBar QPushButton:hover,
+QToolBar QPushButton:focus {
+ color: #c7c7c9;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #797b7f, stop:1 #85878a);
+ border: 1px solid #4d4e51;
+}
+
+QToolBar QPushButton:disabled,
+QToolBar QPushButton:disabled:checked {
+ background-color: #85878a;
+ border-color: #797b7f;
+}
+
+QToolBar QPushButton:pressed {
+ background-color: #6d6e71;
+ border-color: #6d6e71;
+}
+
+QToolBar QPushButton:checked {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.8, x2:1, y2:0, stop:0 #5e90fa, stop:1 #7cabf9);
+ border-color: #5e90fa;
+}
+
+QToolBar QPushButton:checked:hover,
+QToolBar QPushButton:checked:focus {
+ color: #c7c7c9;
+ border: 1px solid #3874f2;
+}
+
+QToolBar {
+ border: 1px transparent #393838;
+ background-color: #85878a;
+ font-weight: bold;
+ margin: 0px;
+ padding: 0px;
+}
+
+QToolBar::handle:horizontal {
+ background-image: url(icons/Hmovetoolbar_dark.png);
+ width: 10px;
+ margin: 6px 2px 6px 2px;
+ background-position: top right;
+ background-repeat: repeat-y;
+}
+
+QToolBar::handle:vertical {
+ background-image: url(icons/Vmovetoolbar_dark.png);
+ height: 10px;
+ margin: 2px 6px 2px 6px;
+ background-position: left bottom;
+ background-repeat: repeat-x;
+}
+
+QToolBar::separator:horizontal {
+ background-image: url(icons/separtoolbar_dark.png);
+ width: 10px;
+ margin: 6px 2px 6px 2px;
+ background-position: center center;
+ background-repeat: repeat-y;
+}
+
+QToolBar::separator:vertical {
+ background-image: url(icons/separtoolbar_dark.png);
+ height: 10px;
+ margin: 2px 6px 2px 6px;
+ background-position: center center;
+ background-repeat: repeat-x;
+}
+
+QStackedWidget {
+ background-color: #85878a;
+ border: 1px transparent #85878a;
+}
+
+QAbstractSpinBox {
+ color: #c7c7c9;
+ border: 1px solid #6d6e71; /* border top color defined after QAbstractSpinBox, QLineEdit and QComboBox */
+ background-color: #6d6e71;
+ selection-color: white;
+ selection-background-color: #5e90fa;
+}
+
+QAbstractSpinBox:disabled {
+ color: #9a9b9e;
+ background-color: #797b7f;
+ border-color: #797b7f;
+}
+
+QAbstractSpinBox:up-button {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.8, x2:1, y2:0, stop:0 #6f9efa, stop:1 #7cabf9);
+ subcontrol-origin: border;
+ subcontrol-position: top right;
+ border-top-right-radius: 3px;
+ height: 13px;
+ width: 20px;
+}
+
+QAbstractSpinBox:down-button {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.8, x2:1, y2:0, stop:0 #5e90fa, stop:1 #6f9efa);
+ subcontrol-origin: border;
+ subcontrol-position: bottom right;
+ border-bottom-right-radius: 3px;
+ height: 13px;
+ width: 20px;
+}
+
+QAbstractSpinBox:up-button:disabled,
+QAbstractSpinBox:down-button:disabled {
+ background-color: transparent;
+}
+
+QAbstractSpinBox::up-arrow {
+ image: url(icons/up_arrow_light.png);
+ top: 0px; /* fix simetry between up and down images */
+}
+
+QAbstractSpinBox::up-arrow:hover {
+ image: url(icons/up_arrow_lighter.png);
+}
+
+QAbstractSpinBox::up-arrow:off {
+ image: url(icons/up_arrow_disabled_dark.png);
+}
+
+QAbstractSpinBox::up-arrow:disabled {
+ image: none;
+}
+
+QAbstractSpinBox::down-arrow {
+ image: url(icons/down_arrow_light.png);
+ bottom: -2px; /* fix simetry between up and down images */
+}
+QAbstractSpinBox::down-arrow:hover {
+ image: url(icons/down_arrow_lighter.png);
+}
+
+QAbstractSpinBox::down-arrow:off {
+ image: url(icons/down_arrow_disabled_dark.png);
+}
+
+QAbstractSpinBox::down-arrow:disabled {
+ image: none;
+}
+
+QToolBar QAbstractSpinBox {
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+QLineEdit {
+ color: #c7c7c9;
+ background-color: #6d6e71;
+ selection-color: white;
+ selection-background-color: #5e90fa;
+ /* Padding and margin defined */
+ border-style: solid;
+ border: 1px solid #6d6e71; /* border top color defined after QAbstractSpinBox, QLineEdit and QComboBox */
+ border-radius: 3px;
+}
+
+QAbstractSpinBox:focus,
+QLineEdit:focus,
+QComboBox:focus {
+ border-color: #7cabf9;
+}
+
+QComboBox {
+ color: #c7c7c9;
+ background-color: #6d6e71;
+ selection-color: white;
+ selection-background-color: #5e90fa;
+ border: 1px solid #6d6e71; /* border top color defined after QAbstractSpinBox, QLineEdit and QComboBox */
+ border-radius: 3px;
+}
+
+QComboBox:on {
+ color: white;
+ background-color: #6d6e71;
+ border-color: #7cabf9;
+}
+
+QComboBox::drop-down {
+ subcontrol-origin: margin;
+ subcontrol-position: top right;
+ width: 20px;
+ border-left-width: 1px;
+ border-left-color: transparent;
+ border-left-style: solid;
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.8, x2:1, y2:0, stop:0 #5e90fa, stop:1 #7cabf9);
+}
+
+QComboBox::down-arrow {
+ image: url(icons/down_arrow_light.png);
+}
+
+QComboBox::down-arrow:on,
+QComboBox::down-arrow:hover,
+QComboBox::down-arrow:focus {
+ image: url(icons/down_arrow_lighter.png);
+}
+
+QComboBox QAbstractItemView {
+ color: #c7c7c9;
+ background-color: #4d4e51;
+ border-radius: 3px;
+ margin: 0px;
+ padding: 0px;
+ border: none;
+}
+
+/* Common parameters for QAbstractSpinBox, QLineEdit and QComboBox */
+QSpinBox,
+QDoubleSpinBox,
+QAbstractSpinBox,
+QLineEdit,
+QComboBox {
+ border-top-color: #5d5e61; /* Creates an inset effect inside the elements */
+ padding: 2px 6px 2px 6px; /* This makes text colour work on QComboBox */
+ margin: 0px 2px 0px 2px;
+ min-width: 70px; /* it was 120 because of QCombobox... */
+ border-radius: 3px;
+}
+/* end Common parameters */
+
+QAbstractItemView {
+ color: #4d4e51;
+ alternate-background-color: #b3b8bf; /* related with QListView background */
+ border: 1px solid #4d4e51;
+ border-radius: 3px;
+ padding: 0px;
+}
+
+/* hack to deactivate changing background color when focus (due to QFrame generic transparent color) */
+QAbstractItemView:selected,
+QAbstractItemView:on,
+QAbstractItemView:focus {
+ background-color: #bdc1c9; /* same as QTable background color */
+}
+
+/* hack to hide weird redundant information inside the value of a Placement cell */
+QTreeView QLabel,
+QTreeView QLabel:disabled {
+ color: transparent;
+ background-color: transparent;
+ border: none;
+ border-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+}
+
+QTreeView QLineEdit {
+ color: #c7c7c9;
+ border-color: #6d6e71;
+ background-color: #6d6e71;
+ selection-color: white;
+ selection-background-color: #5e90fa;
+}
+
+/* hack to hide non editable cells inside Property values */
+QTreeView QLineEdit:read-only,
+QTreeView QLineEdit:disabled,
+QTreeView QAbstractSpinBox:read-only,
+QTreeView QAbstractSpinBox:disabled {
+ color: transparent;
+ border-color: transparent;
+ background-color: transparent;
+ selection-color: transparent;
+ selection-background-color: transparent;
+}
+
+/* hack to disable margin inside Property values to following elements */
+QTreeView QSpinBox,
+QTreeView QDoubleSpinBox,
+QTreeView QAbstractSpinBox,
+QTreeView QLineEdit,
+QTreeView QComboBox {
+ margin-left: 0px;
+ margin-right: 0px;
+}
+
+/* Pushbutton style for "..." inside Placement cell which launches Placement tool */
+QTreeView QPushButton {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #6d6e71, stop:1 #85878a);
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+ border-left: 1px solid #6d6e71;
+ border-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+ height: 24px;
+}
+
+/* Color Buttons inside the "Properties window" */
+QAbstractItemView Gui--ColorButton {
+ padding: 0px;
+ margin: 0px;
+ height: 10px;
+}
+
+QAbstractItemView QPushButton:hover {
+ color: white;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+ border-color: #3874f2;
+}
+
+QAbstractItemView QPushButton:disabled {
+ color: transparent;
+ background-color: transparent;
+ border-color: transparent;
+}
+
+QLabel {
+ border: 0px solid #4d4e51;
+}
+
+QTabWidget{
+ border: none;
+}
+
+QTabWidget:focus {
+ border: none;
+}
+
+QTabWidget::pane {
+ border: none;
+ padding: 0px;
+ background-color: #85878a;
+ position: absolute;
+ top: -15px;
+ padding-top: 15px;
+}
+
+QTabWidget::tab-bar {
+ alignment: center;
+}
+
+QTabBar {
+ qproperty-drawBase: 0;
+ left: 5px;
+ background-color: transparent;
+}
+
+QTabBar:focus {
+ border: 0px transparent black;
+}
+
+QTabBar::close-button {
+ padding: 0px;
+ margin: 0px;
+ border-radius: 2px;
+ background-image: url(icons/close_dark.png);
+ background-position: center center;
+ background-repeat: none;
+}
+
+QTabBar::close-button:hover {
+ background-color: #7cabf9;
+}
+
+QTabBar::close-button:pressed {
+ background-color: #adc5ed;
+}
+
+QTabBar::scroller { /* the width of the scroll buttons */
+ width: 20px;
+}
+
+/* the scroll buttons are tool buttons */
+QTabBar QToolButton,
+QTabBar QToolButton:hover {
+ margin-top: 4px;
+ margin-bottom: 4px;
+ margin-left: 0px;
+ margin-right: 0px;
+ padding: 0px;
+ border: none;
+ background-color: #85878a;
+ border-radius: 0px;
+}
+
+QTabBar QToolButton::right-arrow:enabled {
+ image: url(icons/right_arrow_light.png);
+}
+
+QTabBar QToolButton::right-arrow:disabled,
+QTabBar QToolButton::right-arrow:off {
+ image: url(icons/right_arrow_disabled_dark.png);
+}
+
+QTabBar QToolButton::right-arrow:hover {
+ image: url(icons/right_arrow_lighter.png);
+}
+
+ QTabBar QToolButton::left-arrow:enabled {
+ image: url(icons/left_arrow_light.png);
+}
+
+ QTabBar QToolButton::left-arrow:disabled,
+ QTabBar QToolButton::left-arrow:off {
+ image: url(icons/left_arrow_disabled_dark.png);
+}
+
+ QTabBar QToolButton::left-arrow:hover {
+ image: url(icons/left_arrow_lighter.png);
+}
+
+ QTabBar QToolButton::up-arrow:enabled {
+ image: url(icons/up_arrow_light.png);
+}
+
+ QTabBar QToolButton::up-arrow:disabled,
+ QTabBar QToolButton::up-arrow:off {
+ image: url(icons/up_arrow_disabled_dark.png);
+}
+
+ QTabBar QToolButton::up-arrow:hover {
+ image: url(icons/up_arrow_lighter.png);
+}
+
+ QTabBar QToolButton::down-arrow:enabled {
+ image: url(icons/down_arrow_light.png);
+}
+
+ QTabBar QToolButton::down-arrow:disabled,
+ QTabBar QToolButton::down-arrow:off {
+ image: url(icons/down_arrow_disabled_dark.png);
+}
+
+ QTabBar QToolButton::down-arrow:hover {
+ image: url(icons/down_arrow_lighter.png);
+}
+
+/* TOP and BOTTOM TABS */
+QTabBar::tab:top,
+QTabBar::tab:bottom {
+ color: #c7c7c9;
+ border: 1px solid #6d6e71;
+ border-left-color: #85878a;
+ border-right-width: 0px;
+ background-color: #6d6e71;
+ padding:5px 15px;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ position: center;
+}
+
+QTabBar::tab:top:first,
+QTabBar::tab:bottom:first {
+ border-top-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+}
+
+QTabBar::tab:top:last,
+QTabBar::tab:bottom:last {
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+ border-right-width: 1px;
+}
+
+QTabBar::tab:top:selected,
+QTabBar::tab:bottom:selected {
+ color: white;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+ border-color: #3874f2;
+}
+
+QTabBar::tab:top:!selected:hover,
+QTabBar::tab:bottom:!selected:hover {
+ color: white;
+}
+
+QTabBar::tab:top:only-one ,
+QTabBar::tab:bottom:only-one {
+ border: 1px solid #1b3774;
+ border-radius: 6px;
+}
+
+/* LEFT and RIGHT TABS */
+QTabBar::tab:left,
+QTabBar::tab:right {
+ color: #c7c7c9;
+ border: 1px solid #6d6e71;
+ border-top-color: #85878a;
+ border-bottom-width: 0px;
+ background-color: #6d6e71;
+ padding: 15px 5px;
+ margin-left: 4px;
+ margin-right: 4px;
+ position: center;
+}
+
+QTabBar::tab:left:first,
+QTabBar::tab:right:first {
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+}
+
+QTabBar::tab:left:last,
+QTabBar::tab:right:last {
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+ border-bottom-width: 1px;
+}
+
+QTabBar::tab:left:selected,
+QTabBar::tab:right:selected {
+ color: white;
+ background-color: qlineargradient(spread:pad, x1:0.545, y1:1, x2:0, y2:1, stop:0 #3874f2, stop:1 #5e90fa);
+ border-color: #3874f2;
+}
+
+QTabBar::tab:left:!selected:hover,
+QTabBar::tab:right:!selected:hover {
+ color: white;
+}
+
+QTabBar::tab:left:only-one ,
+QTabBar::tab:right:only-one {
+ border: 1px solid #1b3774;
+ border-radius: 6px;
+}
+
+QDockWidget {
+ color: #4d4e51;
+ border: 1px solid #85878a;
+ titlebar-close-icon: url(icons/close_dark.png);
+ titlebar-normal-icon: url(icons/undock_dark.png);
+}
+
+QDockWidget::title {
+ text-align: center;
+ background-color: #797b7f;
+ padding: 4px;
+ border-radius: 4px;
+}
+
+QDockWidget::close-button,
+QDockWidget::float-button {
+ border: 1px transparent #85878a;
+ border-radius: 2px;
+ background: transparent;
+ subcontrol-origin: padding;
+ subcontrol-position: right center;
+}
+
+QDockWidget::close-button {
+ right: 4px;
+}
+
+QDockWidget::float-button {
+ right: 22px;
+}
+
+QDockWidget::close-button:hover,
+QDockWidget::float-button:hover {
+ background: #9a9b9e;
+}
+
+QDockWidget::close-button:pressed,
+QDockWidget::float-button:pressed {
+ /*padding: 1px -1px -1px 1px;*/
+ background-color: #797b7f;
+}
+
+QTreeView,
+QListView {
+ color: #4d4e51;
+ border: 1px solid #85878a;
+ border-radius: 4px;
+ background-color: #bdc1c9; /* related with alternate-background-color*/
+ selection-color: white;
+ selection-background-color: #5e90fa; /* should be similar to QListView::item selected background-color */
+ show-decoration-selected: 1; /* make the selection span the entire width of the view */
+ padding: 0px;
+ margin: 0px 4px 0px 4px;
+ min-width: 130px; /* hack to correctly align Preferences icon list */
+}
+
+QListView,
+QListView::item,
+QListView QAbstractItemView {
+ margin: 0px;
+ icon-size: 20px; /* temporal */
+ paint-alternating-row-colors-for-empty-area: 1;
+ position: absolute;
+ subcontrol-origin: margin;
+ subcontrol-position: left top;
+}
+
+/* Control dropdown list margins of QComboBox */
+QComboBox QTreeView,
+QComboBox QListView {
+ margin: 0px;
+ padding: 0px;
+}
+
+QListView::item {
+ border: 0px transparent #85878a;
+ border-radius: 4px;
+ background-color: transparent;
+ padding: 0px;
+ margin: 0px;
+ display: inline-block;
+ position: relative;
+}
+
+QListView::item:selected,
+QTreeView::item:selected {
+ color: white;
+ background-color: #5e90fa; /* should be similar to QListView selection-background-color */
+}
+
+/* Branch system */
+QTreeView::branch {
+ background: transparent;
+}
+
+QTreeView::branch:has-siblings:!adjoins-item {
+ border-image: url(icons/branch_vline.png) 0;
+}
+
+QTreeView::branch:has-siblings:adjoins-item {
+ border-image: url(icons/branch_more.png) 0;
+}
+
+QTreeView::branch:!has-children:!has-siblings:adjoins-item {
+ border-image: url(icons/branch_end.png) 0;
+}
+
+QTreeView::branch:closed:has-children:has-siblings {
+ image: url(icons/branch_closed_dark.png);
+}
+
+QTreeView::branch:has-children:!has-siblings:closed {
+ image: url(icons/branch_closed_dark.png);
+ border-image: url(icons/branch_end.png) 0;
+}
+
+QTreeView::branch:open:has-children:has-siblings {
+ image: url(icons/branch_open_dark.png);
+ border-image: url(icons/branch_more.png) 0;
+}
+
+QTreeView::branch:open:has-children:!has-siblings {
+ image: url(icons/branch_open_dark.png);
+ border-image: url(icons/branch_end.png) 0;
+}
+
+QSlider,
+QSlider:active,
+QSlider:!active {
+ border: none;
+ background-color: transparent;
+}
+
+QSlider:horizontal {
+ padding: 0px 10px;
+}
+
+QSlider:vertical {
+ padding: 10px 0px;
+}
+
+QSlider::groove:horizontal {
+ border: 1px solid #6d6e71;
+ background-color: #6d6e71;
+ height: 8px;
+ border-radius: 5px;
+ margin: 4px 0;
+}
+
+QSlider::groove:vertical {
+ border: 1px solid #6d6e71;
+ background-color: #6d6e71;
+ width: 8px;
+ border-radius: 5px;
+ margin: 4px 0;
+}
+
+QSlider::groove:horizontal:disabled,
+QSlider::groove:vertical:disabled {
+ border-color: #797b7f;
+ background-color: #797b7f;
+}
+
+QSlider::handle:horizontal,
+QSlider::handle:vertical {
+ background-color: #4d4e51;
+ border: 1px solid #4d4e51;
+ width: 14px;
+ height: 14px;
+ border-radius: 8px;
+}
+
+QSlider::handle:horizontal {
+ margin: -4px 0;
+}
+
+QSlider::handle:vertical {
+ margin: 0 -4px;
+}
+
+QSlider::handle:horizontal:hover,
+QSlider::handle:vertical:hover {
+ border-color: #3874f2;
+ background-color: #3874f2;
+}
+
+QSlider::handle:horizontal:pressed,
+QSlider::handle:vertical:pressed {
+ border-color: #1b3774;
+ background-color: #1b3774;
+}
+
+QSlider::handle:horizontal:disabled,
+QSlider::handle:vertical:disabled {
+ border-color: #6d6e71;
+ background-color: #85878a;
+}
+
+QToolButton {
+ color: #c7c7c9;
+ text-align: center;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #6d6e71, stop:1 #85878a);
+ border: 1px solid #4d4e51;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-left: 15px;
+ padding-right: 15px;
+ margin-top: 5px;
+ margin-bottom: 5px;
+ margin-left: 10px;
+ margin-right: 10px;
+ border-radius: 3px;
+ outline: none;
+}
+
+QToolButton:hover,
+QToolButton:focus {
+ color: white;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+ border-color: #3874f2;
+}
+
+QToolButton:disabled,
+QToolButton:disabled:checked {
+ color: #6d6e71;
+ background-color: #85878a;
+ border-color: #6d6e71;
+}
+
+QToolButton:pressed {
+ border-color: #7cabf9;
+}
+
+QToolButton:checked {
+ background-color: #5e90fa;
+ border-color: #3874f2;
+}
+
+QToolButton::menu-indicator {
+ subcontrol-origin: padding;
+ subcontrol-position: center right;
+ right: 4px;
+}
+
+/*The "show more" button (it can also be stylable with "QToolBarExtension" */
+QToolButton#qt_toolbar_ext_button {
+ border-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+ /*background-image: url(icons/more_dark.png);*/
+ image: transparent;
+ background-repeat: none;
+ background-position: center left;
+}
+
+QToolButton#qt_toolbar_ext_button:hover {
+ /*background-image: url(icons/more_light.png);*/
+ border-color: #797b7f;
+ background-color: #797b7f;
+}
+
+QToolButton#qt_toolbar_ext_button:on {
+ /*background-image: url(icons/more_light.png);*/
+ border-color: #797b7f;
+ background-color: #797b7f;
+}
+
+/*Buttons inside the Toolbar*/
+QToolBar QToolButton {
+ color: #4d4e51;
+ background-color: #85878a;
+ border: 1px transparent #85878a;
+ border-radius: 3px;
+ margin: 0px;
+ padding: 2px;
+}
+
+QToolBar QToolButton:disabled {
+ background-color: #85878a;
+}
+
+QToolBar QToolButton:checked {
+ color: #1b3774;
+ background-color: #5e90fa;
+ border: 1px solid #5e90fa;
+}
+
+QToolBar QToolButton:hover {
+ background-color: #85878a;
+}
+
+QToolBar QToolButton:pressed,
+QToolBar QToolButton::menu-button:pressed {
+ background-color: #797b7f;
+ border: 1px solid #797b7f;
+}
+
+
+QToolBar QToolButton::menu-indicator:hover,
+QToolBar QToolButton::menu-indicator:pressed {
+ background-color: transparent;
+}
+
+/* the subcontrols below are used only in the MenuButtonPopup mode */
+QToolBar QToolButton::menu-button {
+ border: 1px transparent #4A4949;
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+ width: 16px; /* 16px width + 4px for border = 20px allocated above */
+ outline: none;
+ background-color: transparent;
+}
+
+QToolBar QToolButton::menu-button:hover,
+QToolBar QToolButton::menu-button:active,
+QToolBar QToolButton::menu-button:disabled {
+ border-color: transparent;
+ background-color: transparent;
+}
+
+QToolBar QToolButton::menu-arrow {
+ background-image: url(icons/down_arrow_light.png);
+ background-position: center center;
+ background-repeat: none;
+ subcontrol-origin: padding;
+ subcontrol-position: bottom right;
+ height: 10px; /* same as arrow image */
+}
+
+QToolBar QToolButton::menu-arrow:open {
+ background-image: url(icons/down_arrow_lighter.png);
+}
+
+QToolBar:tear {
+ color: blue;
+ background-color: red;
+}
+
+QTableView {
+ color: #4d4e51;
+ border: 1px solid #6d6e71;
+ gridline-color: #9a9b9e;
+ background-color: #bdc1c9;
+ selection-color: #4d4e51;
+ selection-background-color: #adc5ed;
+ border-radius: 3px;
+ padding: 0px;
+ margin: 0px;
+}
+
+QTableView::item:hover {
+ background: #abb0b7;
+}
+
+QTableView::item:disabled {
+ color: #85878a;
+}
+
+QTableView::item:selected {
+ color: #1b3774;
+ background-color: #7cabf9;
+}
+
+/* when editing a cell: */
+QTableView QLineEdit {
+ color: #4d4e51;
+ background-color: #b3b8bf;
+ border-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+}
+
+QHeaderView {
+ border: none;
+ background-color: #4d4e51;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+ border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+}
+
+QHeaderView::section {
+ background-color: transparent;
+ color: #c7c7c9;
+ border: 1px solid transparent;
+ border-radius: 0px;
+ text-align: center;
+}
+
+QHeaderView::section::vertical {
+ padding: 0px 6px 0px 6px;
+ border-bottom: 1px solid #6d6e71;
+}
+
+QHeaderView::section::vertical:first {
+ border-top: 1px solid #6d6e71;
+}
+
+QHeaderView::section::vertical:last {
+ border-bottom: none;
+}
+
+QHeaderView::section::vertical:only-one {
+ border: none;
+}
+
+QHeaderView::section::horizontal {
+ padding: 0px 0px 0px 6px;
+ border-right: 1px solid #6d6e71;
+}
+
+QHeaderView::section::horizontal:first {
+ border-left: 1px solid #6d6e71;
+}
+
+QHeaderView::section::horizontal:last {
+ border-left: none;
+}
+
+QHeaderView::section::horizontal:only-one {
+ border: none;
+}
+
+QDockWidget QHeaderView::section {
+ border-width: 6px 1px 6px 1px; /* hack to bigger margin for Model Panel table headers */
+}
+
+QHeaderView::section:checked {
+ color: #1b3774;
+ background-color: #7cabf9;
+}
+
+ /* style the sort indicator */
+QHeaderView::down-arrow {
+ image: url(icons/down_arrow_light.png);
+}
+
+QHeaderView::up-arrow {
+ image: url(icons/up_arrow_light.png);
+}
+
+QTableCornerButton::section {
+ background-color: #4d4e51;
+ border: 1px solid #4d4e51;
+ border-radius: 0px;
+}
+
+QToolBox {
+ padding: 3px;
+ color: #1b3774;
+ border: none;
+}
+
+QToolBox::tab { /* TODO */
+ color: #c7c7c9;
+ background-color: #6d6e71;
+ border: 1px transparent #4d4e51;
+ border-bottom: 1px transparent #6d6e71;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ padding: 5px;
+}
+
+QToolBox::tab:selected { /* italicize selected tabs */
+ color: #1b3774;
+ font: italic;
+ background-color: #5e90fa;
+ border-color: #5e90fa;
+ }
+
+QStatusBar::item {
+ color: #c7c7c9;
+ background-color: #85878a;
+ border: 1px solid #85878a;
+ border-radius: 2px;
+}
+
+QSplitter::handle {
+ background-color: #85878a;
+ margin: 0px 11px;
+ padding: 0px;
+ border-radius: 3px;
+}
+
+QSplitter::handle:vertical {
+ background-image: url(icons/splitter_horizontal_dark.png);
+ background-position: center center;
+ background-repeat: none;
+ margin: 2px 10px 2px 10px;
+ height: 2px;
+}
+
+QSplitter::handle:horizontal {
+ background-image: url(icons/splitter_horizontal_dark.png);
+ background-position: center center;
+ background-repeat: none;
+ margin: 10px 2px 10px 2px;
+ width: 2px;
+}
+
+QSplitter::handle:horizontal:hover,
+QSplitter::handle:vertical:hover {
+ background-color: #85878a;
+}
+
+/* Similar to the splitter is the following window separator: */
+QMainWindow::separator {
+ border: 1px solid #85878a;
+ background-color: #85878a;
+ background-position: center center;
+ background-repeat: none;
+}
+
+QMainWindow::separator:hover {
+ background-color: #85878a;
+}
+
+QMainWindow::separator:horizontal {
+ height: 4px;
+ background-image: url(icons/splitter_horizontal_dark.png);
+}
+
+QMainWindow::separator:vertical {
+ width: 4px;
+ background-image: url(icons/splitter_vertical_dark.png);
+}
+
+QLabel {
+ padding-top: 3px;
+ padding-bottom: 3px;
+ background-color: transparent;
+}
+
+QLabel:disabled {
+ color: #6d6e71;
+ background-color: transparent;
+}
+
+/* Action group */
+QFrame[class="panel"] {
+ border: none;
+ background-color: #85878a;
+}
+
+QSint--ActionGroup QFrame[class="header"] {
+ border: none;
+ background-color: #4d4e51;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+ border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+}
+
+QSint--ActionGroup QFrame[class="header"]:hover {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+}
+
+QSint--ActionGroup QToolButton[class="header"] {
+ text-align: left;
+ font-weight: bold;
+ color: #c7c7c9;
+ background-color: transparent;
+ border: none;
+ margin: 0px;
+ padding: 0px;
+}
+
+QSint--ActionGroup QToolButton[class="header"]:hover {
+ color: white;
+}
+
+QSint--ActionGroup QFrame[class="header"] QLabel {
+ background-color: transparent;
+ background-image: url(icons/down_arrow_light.png);
+ background-repeat: none;
+ background-position: center center;
+ padding: 0px;
+ margin: 0px;
+}
+
+QSint--ActionGroup QFrame[class="header"] QLabel:hover {
+ background-color: transparent;
+ background-image: url(icons/down_arrow_lighter.png);
+}
+
+QSint--ActionGroup QFrame[class="header"] QLabel[fold="true"] {
+ background-color: transparent;
+ background-image: url(icons/up_arrow_light.png);
+ background-repeat: none;
+ background-position: center center;
+ padding: 0px;
+ margin: 0px;
+}
+
+QSint--ActionGroup QFrame[class="header"] QLabel[fold="true"]:hover {
+ background-color: transparent;
+ background-image: url(icons/up_arrow_lighter.png);
+}
+
+QSint--ActionGroup QFrame[class="content"] {
+ background-color: #bdc1c9;
+ margin: 0px;
+ padding: 0px;
+ border: none;
+ border-top-left-radius: 0px;
+ border-top-right-radius: 0px;
+ border-bottom-left-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+
+/* HACK
+This might not be the best way to reset the background color: */
+QSint--ActionGroup QFrame[class="content"] QWidget {
+ background-color: transparent;
+}
+
+QSint--ActionGroup QFrame[class="content"] QPushButton {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #6d6e71, stop:1 #85878a);
+}
+
+QSint--ActionGroup QFrame[class="content"] QPushButton:hover,
+QSint--ActionGroup QFrame[class="content"] QPushButton:focus {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+}
+
+QSint--ActionGroup QFrame[class="content"] QPushButton:disabled,
+QSint--ActionGroup QFrame[class="content"] QPushButton:disabled:checked {
+ color: #bdc1c9;
+ border-color: #9a9b9e;
+ background-color: #9a9b9e;
+}
+QSint--ActionGroup QFrame[class="content"] QPushButton:checked {
+ background-color: #5e90fa;
+}
+
+QSint--ActionGroup QFrame[class="content"] QComboBox {
+ background-color: #6d6e71;
+}
+
+QSint--ActionGroup QFrame[class="content"] QComboBox:on {
+ background-color: #6d6e71;
+}
+
+QSint--ActionGroup QFrame[class="content"] QComboBox QAbstractItemView {
+ border-color: #4d4e51;
+ background-color: #4d4e51;
+}
+
+QSint--ActionGroup QFrame[class="content"] QListView {
+ border-color: #abb0b7;
+ background-color: #abb0b7;
+}
+
+QSint--ActionGroup QFrame[class="content"] QAbstractSpinBox {
+ background-color: #6d6e71;
+}
+
+QSint--ActionGroup QFrame[class="content"] QLineEdit {
+ background-color: #6d6e71;
+}
+
+QSint--ActionGroup QFrame[class="content"] QComboBox:disabled,
+QSint--ActionGroup QFrame[class="content"] QAbstractSpinBox:disabled,
+QSint--ActionGroup QFrame[class="content"] QLineEdit:disabled {
+ color: #bdc1c9;
+ border-color: #9a9b9e;
+ background-color: #9a9b9e;
+}
+
+QSint--ActionGroup QFrame[class="content"] QCheckBox:disabled,
+QSint--ActionGroup QFrame[class="content"] QRadioButton:disabled {
+ color: #9a9b9e;
+ border-color: #9a9b9e;
+}
+
+QSint--ActionGroup QFrame[class="content"] QCheckBox::indicator:disabled,
+QSint--ActionGroup QFrame[class="content"] QRadioButton::indicator:disabled {
+ border-color: #9a9b9e;
+ background-color: transparent;
+}
+
+QSint--ActionGroup QFrame[class="content"] QHeaderView {
+ border: none;
+ background-color: #4d4e51;
+ border-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+}
+
+QSint--ActionGroup QFrame[class="content"] QHeaderView::section {
+ background-color: transparent;
+ color: #c7c7c9;
+ border: 1px solid transparent;
+ border-radius: 0px;
+ text-align: center;
+}
+
+QSint--ActionGroup QFrame[class="content"] QHeaderView::section::horizontal {
+ padding: 6px 0px 6px 6px;
+ border-right: 1px solid #6d6e71;
+}
+
+QSint--ActionGroup QFrame[class="content"] QHeaderView::section::horizontal:first {
+ border-left: 1px solid #85878a;
+}
+
+QSint--ActionGroup QFrame[class="content"] QHeaderView::section::horizontal:last {
+ border-left: none;
+}
+
+QSint--ActionGroup QFrame[class="content"] QHeaderView::section::horizontal:only-one {
+ border: none;
+}
+/* enf of HACK */
+
+QSint--ActionGroup QToolButton[class="action"],
+QSint--ActionGroup QToolButton[class="action"]:enabled {
+ font-weight: bold;
+ color: #6d6e71;
+}
+
+QSint--ActionGroup QToolButton[class="action"]:hover,
+QSint--ActionGroup QToolButton[class="action"]:enabled:hover {
+ text-decoration: none;
+ color: #4d4e51;
+ background-color: #abb0b7;
+ border-color: #abb0b7;
+}
+
+QSint--ActionGroup QToolButton[class="action"]:disabled {
+ color: #85878a;
+ background-color: #abb0b7;
+ border-color: #abb0b7;
+}
+
+QSint--ActionGroup QToolButton[class="action"]:focus,
+QSint--ActionGroup QToolButton[class="action"]:pressed
+QSint--ActionGroup QToolButton[class="action"]:enabled:focus,
+QSint--ActionGroup QToolButton[class="action"]:enabled:pressed {
+ color: white;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+ border-color: #3874f2;
+}
+
+QSint--ActionGroup QToolButton[class="action"]:on {
+ background-color: red;
+ color: red;
+}
\ No newline at end of file
diff --git a/styles/darkblue/icons/Hmovetoolbar_dark.png b/styles/darkblue/icons/Hmovetoolbar_dark.png
new file mode 100644
index 0000000..a408e85
Binary files /dev/null and b/styles/darkblue/icons/Hmovetoolbar_dark.png differ
diff --git a/styles/darkblue/icons/Hmovetoolbar_light.png b/styles/darkblue/icons/Hmovetoolbar_light.png
new file mode 100644
index 0000000..663b643
Binary files /dev/null and b/styles/darkblue/icons/Hmovetoolbar_light.png differ
diff --git a/styles/darkblue/icons/Hsepartoolbar_dark.png b/styles/darkblue/icons/Hsepartoolbar_dark.png
new file mode 100644
index 0000000..002fad0
Binary files /dev/null and b/styles/darkblue/icons/Hsepartoolbar_dark.png differ
diff --git a/styles/darkblue/icons/Hsepartoolbar_light.png b/styles/darkblue/icons/Hsepartoolbar_light.png
new file mode 100644
index 0000000..841f467
Binary files /dev/null and b/styles/darkblue/icons/Hsepartoolbar_light.png differ
diff --git a/styles/darkblue/icons/Vmovetoolbar_dark.png b/styles/darkblue/icons/Vmovetoolbar_dark.png
new file mode 100644
index 0000000..a73ced8
Binary files /dev/null and b/styles/darkblue/icons/Vmovetoolbar_dark.png differ
diff --git a/styles/darkblue/icons/Vmovetoolbar_light.png b/styles/darkblue/icons/Vmovetoolbar_light.png
new file mode 100644
index 0000000..7b5130a
Binary files /dev/null and b/styles/darkblue/icons/Vmovetoolbar_light.png differ
diff --git a/styles/darkblue/icons/Vsepartoolbar_dark.png b/styles/darkblue/icons/Vsepartoolbar_dark.png
new file mode 100644
index 0000000..18806c5
Binary files /dev/null and b/styles/darkblue/icons/Vsepartoolbar_dark.png differ
diff --git a/styles/darkblue/icons/Vsepartoolbar_light.png b/styles/darkblue/icons/Vsepartoolbar_light.png
new file mode 100644
index 0000000..4b62f79
Binary files /dev/null and b/styles/darkblue/icons/Vsepartoolbar_light.png differ
diff --git a/styles/darkblue/icons/background_freecad.png b/styles/darkblue/icons/background_freecad.png
new file mode 100644
index 0000000..f2c085a
Binary files /dev/null and b/styles/darkblue/icons/background_freecad.png differ
diff --git a/styles/darkblue/icons/branch_closed_dark.png b/styles/darkblue/icons/branch_closed_dark.png
new file mode 100644
index 0000000..c399923
Binary files /dev/null and b/styles/darkblue/icons/branch_closed_dark.png differ
diff --git a/styles/darkblue/icons/branch_closed_darker.png b/styles/darkblue/icons/branch_closed_darker.png
new file mode 100644
index 0000000..ff8af8b
Binary files /dev/null and b/styles/darkblue/icons/branch_closed_darker.png differ
diff --git a/styles/darkblue/icons/branch_end.png b/styles/darkblue/icons/branch_end.png
new file mode 100644
index 0000000..963a7cb
Binary files /dev/null and b/styles/darkblue/icons/branch_end.png differ
diff --git a/styles/darkblue/icons/branch_more.png b/styles/darkblue/icons/branch_more.png
new file mode 100644
index 0000000..7c534f1
Binary files /dev/null and b/styles/darkblue/icons/branch_more.png differ
diff --git a/styles/darkblue/icons/branch_open_dark.png b/styles/darkblue/icons/branch_open_dark.png
new file mode 100644
index 0000000..4d04a22
Binary files /dev/null and b/styles/darkblue/icons/branch_open_dark.png differ
diff --git a/styles/darkblue/icons/branch_open_darker.png b/styles/darkblue/icons/branch_open_darker.png
new file mode 100644
index 0000000..cdbc89e
Binary files /dev/null and b/styles/darkblue/icons/branch_open_darker.png differ
diff --git a/styles/darkblue/icons/branch_vline.png b/styles/darkblue/icons/branch_vline.png
new file mode 100644
index 0000000..b4c9826
Binary files /dev/null and b/styles/darkblue/icons/branch_vline.png differ
diff --git a/styles/darkblue/icons/checkbox_indeterminate_light.png b/styles/darkblue/icons/checkbox_indeterminate_light.png
new file mode 100644
index 0000000..9d79911
Binary files /dev/null and b/styles/darkblue/icons/checkbox_indeterminate_light.png differ
diff --git a/styles/darkblue/icons/checkbox_light.png b/styles/darkblue/icons/checkbox_light.png
new file mode 100644
index 0000000..0e8882c
Binary files /dev/null and b/styles/darkblue/icons/checkbox_light.png differ
diff --git a/styles/darkblue/icons/close_dark.png b/styles/darkblue/icons/close_dark.png
new file mode 100644
index 0000000..8771a0b
Binary files /dev/null and b/styles/darkblue/icons/close_dark.png differ
diff --git a/styles/darkblue/icons/close_light.png b/styles/darkblue/icons/close_light.png
new file mode 100644
index 0000000..3e6b9d8
Binary files /dev/null and b/styles/darkblue/icons/close_light.png differ
diff --git a/styles/darkblue/icons/down_arrow_dark.png b/styles/darkblue/icons/down_arrow_dark.png
new file mode 100644
index 0000000..9fed1f7
Binary files /dev/null and b/styles/darkblue/icons/down_arrow_dark.png differ
diff --git a/styles/darkblue/icons/down_arrow_disabled_dark.png b/styles/darkblue/icons/down_arrow_disabled_dark.png
new file mode 100644
index 0000000..9be5446
Binary files /dev/null and b/styles/darkblue/icons/down_arrow_disabled_dark.png differ
diff --git a/styles/darkblue/icons/down_arrow_disabled_light.png b/styles/darkblue/icons/down_arrow_disabled_light.png
new file mode 100644
index 0000000..b5e881a
Binary files /dev/null and b/styles/darkblue/icons/down_arrow_disabled_light.png differ
diff --git a/styles/darkblue/icons/down_arrow_light.png b/styles/darkblue/icons/down_arrow_light.png
new file mode 100644
index 0000000..2168d71
Binary files /dev/null and b/styles/darkblue/icons/down_arrow_light.png differ
diff --git a/styles/darkblue/icons/down_arrow_lighter.png b/styles/darkblue/icons/down_arrow_lighter.png
new file mode 100644
index 0000000..db46661
Binary files /dev/null and b/styles/darkblue/icons/down_arrow_lighter.png differ
diff --git a/styles/darkblue/icons/left_arrow_dark.png b/styles/darkblue/icons/left_arrow_dark.png
new file mode 100644
index 0000000..af678ad
Binary files /dev/null and b/styles/darkblue/icons/left_arrow_dark.png differ
diff --git a/styles/darkblue/icons/left_arrow_disabled_dark.png b/styles/darkblue/icons/left_arrow_disabled_dark.png
new file mode 100644
index 0000000..db9da5d
Binary files /dev/null and b/styles/darkblue/icons/left_arrow_disabled_dark.png differ
diff --git a/styles/darkblue/icons/left_arrow_disabled_light.png b/styles/darkblue/icons/left_arrow_disabled_light.png
new file mode 100644
index 0000000..a1b787f
Binary files /dev/null and b/styles/darkblue/icons/left_arrow_disabled_light.png differ
diff --git a/styles/darkblue/icons/left_arrow_light.png b/styles/darkblue/icons/left_arrow_light.png
new file mode 100644
index 0000000..ef222b4
Binary files /dev/null and b/styles/darkblue/icons/left_arrow_light.png differ
diff --git a/styles/darkblue/icons/left_arrow_lighter.png b/styles/darkblue/icons/left_arrow_lighter.png
new file mode 100644
index 0000000..6bca3a5
Binary files /dev/null and b/styles/darkblue/icons/left_arrow_lighter.png differ
diff --git a/styles/darkblue/icons/more_dark.png b/styles/darkblue/icons/more_dark.png
new file mode 100644
index 0000000..9bc9002
Binary files /dev/null and b/styles/darkblue/icons/more_dark.png differ
diff --git a/styles/darkblue/icons/more_light.png b/styles/darkblue/icons/more_light.png
new file mode 100644
index 0000000..6a958cb
Binary files /dev/null and b/styles/darkblue/icons/more_light.png differ
diff --git a/styles/darkblue/icons/radiobutton_light.png b/styles/darkblue/icons/radiobutton_light.png
new file mode 100644
index 0000000..e9a7e24
Binary files /dev/null and b/styles/darkblue/icons/radiobutton_light.png differ
diff --git a/styles/darkblue/icons/right_arrow_dark.png b/styles/darkblue/icons/right_arrow_dark.png
new file mode 100644
index 0000000..f24e996
Binary files /dev/null and b/styles/darkblue/icons/right_arrow_dark.png differ
diff --git a/styles/darkblue/icons/right_arrow_disabled_dark.png b/styles/darkblue/icons/right_arrow_disabled_dark.png
new file mode 100644
index 0000000..8972887
Binary files /dev/null and b/styles/darkblue/icons/right_arrow_disabled_dark.png differ
diff --git a/styles/darkblue/icons/right_arrow_disabled_light.png b/styles/darkblue/icons/right_arrow_disabled_light.png
new file mode 100644
index 0000000..711cf0f
Binary files /dev/null and b/styles/darkblue/icons/right_arrow_disabled_light.png differ
diff --git a/styles/darkblue/icons/right_arrow_light.png b/styles/darkblue/icons/right_arrow_light.png
new file mode 100644
index 0000000..128b9a5
Binary files /dev/null and b/styles/darkblue/icons/right_arrow_light.png differ
diff --git a/styles/darkblue/icons/right_arrow_lighter.png b/styles/darkblue/icons/right_arrow_lighter.png
new file mode 100644
index 0000000..3d6bcdb
Binary files /dev/null and b/styles/darkblue/icons/right_arrow_lighter.png differ
diff --git a/styles/darkblue/icons/separtoolbar_dark.png b/styles/darkblue/icons/separtoolbar_dark.png
new file mode 100644
index 0000000..cef2199
Binary files /dev/null and b/styles/darkblue/icons/separtoolbar_dark.png differ
diff --git a/styles/darkblue/icons/separtoolbar_light.png b/styles/darkblue/icons/separtoolbar_light.png
new file mode 100644
index 0000000..0a4d923
Binary files /dev/null and b/styles/darkblue/icons/separtoolbar_light.png differ
diff --git a/styles/darkblue/icons/sizegrip_dark.png b/styles/darkblue/icons/sizegrip_dark.png
new file mode 100644
index 0000000..0c3de41
Binary files /dev/null and b/styles/darkblue/icons/sizegrip_dark.png differ
diff --git a/styles/darkblue/icons/sizegrip_light.png b/styles/darkblue/icons/sizegrip_light.png
new file mode 100644
index 0000000..14fd813
Binary files /dev/null and b/styles/darkblue/icons/sizegrip_light.png differ
diff --git a/styles/darkblue/icons/splitter_horizontal_dark.png b/styles/darkblue/icons/splitter_horizontal_dark.png
new file mode 100644
index 0000000..9d8e673
Binary files /dev/null and b/styles/darkblue/icons/splitter_horizontal_dark.png differ
diff --git a/styles/darkblue/icons/splitter_horizontal_light.png b/styles/darkblue/icons/splitter_horizontal_light.png
new file mode 100644
index 0000000..217271b
Binary files /dev/null and b/styles/darkblue/icons/splitter_horizontal_light.png differ
diff --git a/styles/darkblue/icons/splitter_vertical_dark.png b/styles/darkblue/icons/splitter_vertical_dark.png
new file mode 100644
index 0000000..b4c30d6
Binary files /dev/null and b/styles/darkblue/icons/splitter_vertical_dark.png differ
diff --git a/styles/darkblue/icons/splitter_vertical_light.png b/styles/darkblue/icons/splitter_vertical_light.png
new file mode 100644
index 0000000..1473e2b
Binary files /dev/null and b/styles/darkblue/icons/splitter_vertical_light.png differ
diff --git a/styles/darkblue/icons/transparent.png b/styles/darkblue/icons/transparent.png
new file mode 100644
index 0000000..483df25
Binary files /dev/null and b/styles/darkblue/icons/transparent.png differ
diff --git a/styles/darkblue/icons/undock_dark.png b/styles/darkblue/icons/undock_dark.png
new file mode 100644
index 0000000..01b6785
Binary files /dev/null and b/styles/darkblue/icons/undock_dark.png differ
diff --git a/styles/darkblue/icons/undock_light.png b/styles/darkblue/icons/undock_light.png
new file mode 100644
index 0000000..36881f6
Binary files /dev/null and b/styles/darkblue/icons/undock_light.png differ
diff --git a/styles/darkblue/icons/up_arrow_dark.png b/styles/darkblue/icons/up_arrow_dark.png
new file mode 100644
index 0000000..6943e82
Binary files /dev/null and b/styles/darkblue/icons/up_arrow_dark.png differ
diff --git a/styles/darkblue/icons/up_arrow_disabled_dark.png b/styles/darkblue/icons/up_arrow_disabled_dark.png
new file mode 100644
index 0000000..d21f24c
Binary files /dev/null and b/styles/darkblue/icons/up_arrow_disabled_dark.png differ
diff --git a/styles/darkblue/icons/up_arrow_disabled_light.png b/styles/darkblue/icons/up_arrow_disabled_light.png
new file mode 100644
index 0000000..6a56e89
Binary files /dev/null and b/styles/darkblue/icons/up_arrow_disabled_light.png differ
diff --git a/styles/darkblue/icons/up_arrow_light.png b/styles/darkblue/icons/up_arrow_light.png
new file mode 100644
index 0000000..4c32b8a
Binary files /dev/null and b/styles/darkblue/icons/up_arrow_light.png differ
diff --git a/styles/darkblue/icons/up_arrow_lighter.png b/styles/darkblue/icons/up_arrow_lighter.png
new file mode 100644
index 0000000..c687416
Binary files /dev/null and b/styles/darkblue/icons/up_arrow_lighter.png differ
diff --git a/styles/darkorange/darkorange.qss b/styles/darkorange/darkorange.qss
new file mode 100644
index 0000000..c25c1db
--- /dev/null
+++ b/styles/darkorange/darkorange.qss
@@ -0,0 +1,459 @@
+QToolTip
+{
+ border: 1px solid black;
+ background-color: #ffa02f;
+ padding: 1px;
+ border-radius: 3px;
+ opacity: 100;
+}
+
+QWidget
+{
+ color: #b1b1b1;
+ background-color: #323232;
+}
+
+QWidget:item:hover
+{
+ background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #ca0619);
+ color: #000000;
+}
+
+QWidget:item:selected
+{
+ background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);
+}
+
+QMenuBar::item
+{
+ background: transparent;
+}
+
+QMenuBar::item:selected
+{
+ background: transparent;
+ border: 1px solid #ffaa00;
+}
+
+QMenuBar::item:pressed
+{
+ background: #444;
+ border: 1px solid #000;
+ background-color: QLinearGradient(
+ x1:0, y1:0,
+ x2:0, y2:1,
+ stop:1 #212121,
+ stop:0.4 #343434/*,
+ stop:0.2 #343434,
+ stop:0.1 #ffaa00*/
+ );
+ margin-bottom:-1px;
+ padding-bottom:1px;
+}
+
+QMenu
+{
+ border: 1px solid #000;
+}
+
+QMenu::item
+{
+ padding: 2px 20px 2px 20px;
+}
+
+QMenu::item:selected
+{
+ color: #000000;
+}
+
+QWidget:disabled
+{
+ color: #404040;
+ background-color: #323232;
+}
+
+QAbstractItemView
+{
+ background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #4d4d4d, stop: 0.1 #646464, stop: 1 #5d5d5d);
+}
+
+QWidget:focus
+{
+ /*border: 2px solid QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);*/
+}
+
+QLineEdit
+{
+ background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #4d4d4d, stop: 0 #646464, stop: 1 #5d5d5d);
+ padding: 1px;
+ border-style: solid;
+ border: 1px solid #1e1e1e;
+ border-radius: 5;
+}
+
+QPushButton
+{
+ color: #b1b1b1;
+ background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #565656, stop: 0.1 #525252, stop: 0.5 #4e4e4e, stop: 0.9 #4a4a4a, stop: 1 #464646);
+ border-width: 1px;
+ border-color: #1e1e1e;
+ border-style: solid;
+ border-radius: 6;
+ padding: 3px;
+ font-size: 12px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+QPushButton:pressed
+{
+ background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #2d2d2d, stop: 0.1 #2b2b2b, stop: 0.5 #292929, stop: 0.9 #282828, stop: 1 #252525);
+}
+
+QComboBox
+{
+ selection-background-color: #ffaa00;
+ background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #565656, stop: 0.1 #525252, stop: 0.5 #4e4e4e, stop: 0.9 #4a4a4a, stop: 1 #464646);
+ border-style: solid;
+ border: 1px solid #1e1e1e;
+ border-radius: 5;
+}
+
+QComboBox:hover,QPushButton:hover
+{
+ border: 2px solid QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);
+}
+
+
+QComboBox:on
+{
+ padding-top: 3px;
+ padding-left: 4px;
+ background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #2d2d2d, stop: 0.1 #2b2b2b, stop: 0.5 #292929, stop: 0.9 #282828, stop: 1 #252525);
+ selection-background-color: #ffaa00;
+}
+
+QComboBox QAbstractItemView
+{
+ border: 2px solid darkgray;
+ selection-background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);
+}
+
+QComboBox::drop-down
+{
+ subcontrol-origin: padding;
+ subcontrol-position: top right;
+ width: 15px;
+
+ border-left-width: 0px;
+ border-left-color: darkgray;
+ border-left-style: solid; /* just a single line */
+ border-top-right-radius: 3px; /* same radius as the QComboBox */
+ border-bottom-right-radius: 3px;
+ }
+
+QComboBox::down-arrow
+{
+ image: url(:/down_arrow.png);
+}
+
+QGroupBox:focus
+{
+border: 2px solid QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);
+}
+
+QTextEdit:focus
+{
+ border: 2px solid QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);
+}
+
+QScrollBar:horizontal {
+ border: 1px solid #222222;
+ background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0.0 #121212, stop: 0.2 #282828, stop: 1 #484848);
+ height: 7px;
+ margin: 0px 16px 0 16px;
+}
+
+QScrollBar::handle:horizontal
+{
+ background: QLinearGradient( x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #ffa02f, stop: 0.5 #d7801a, stop: 1 #ffa02f);
+ min-height: 20px;
+ border-radius: 2px;
+}
+
+QScrollBar::add-line:horizontal {
+ border: 1px solid #1b1b19;
+ border-radius: 2px;
+ background: QLinearGradient( x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #ffa02f, stop: 1 #d7801a);
+ width: 14px;
+ subcontrol-position: right;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:horizontal {
+ border: 1px solid #1b1b19;
+ border-radius: 2px;
+ background: QLinearGradient( x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #ffa02f, stop: 1 #d7801a);
+ width: 14px;
+ subcontrol-position: left;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::right-arrow:horizontal, QScrollBar::left-arrow:horizontal
+{
+ border: 1px solid black;
+ width: 1px;
+ height: 1px;
+ background: white;
+}
+
+QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal
+{
+ background: none;
+}
+
+QScrollBar:vertical
+{
+ background: QLinearGradient( x1: 0, y1: 0, x2: 1, y2: 0, stop: 0.0 #121212, stop: 0.2 #282828, stop: 1 #484848);
+ width: 7px;
+ margin: 16px 0 16px 0;
+ border: 1px solid #222222;
+}
+
+QScrollBar::handle:vertical
+{
+ background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 0.5 #d7801a, stop: 1 #ffa02f);
+ min-height: 20px;
+ border-radius: 2px;
+}
+
+QScrollBar::add-line:vertical
+{
+ border: 1px solid #1b1b19;
+ border-radius: 2px;
+ background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);
+ height: 14px;
+ subcontrol-position: bottom;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:vertical
+{
+ border: 1px solid #1b1b19;
+ border-radius: 2px;
+ background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #d7801a, stop: 1 #ffa02f);
+ height: 14px;
+ subcontrol-position: top;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical
+{
+ border: 1px solid black;
+ width: 1px;
+ height: 1px;
+ background: white;
+}
+
+
+QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical
+{
+ background: none;
+}
+
+QTextEdit
+{
+ background-color: #242424;
+}
+
+QPlainTextEdit
+{
+ background-color: #242424;
+}
+
+QHeaderView::section
+{
+ background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #616161, stop: 0.5 #505050, stop: 0.6 #434343, stop:1 #656565);
+ color: white;
+ padding-left: 4px;
+ border: 1px solid #6c6c6c;
+}
+
+QCheckBox:disabled
+{
+color: #414141;
+}
+
+QDockWidget::title
+{
+ text-align: center;
+ spacing: 3px; /* spacing between items in the tool bar */
+ background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #323232, stop: 0.5 #242424, stop:1 #323232);
+}
+
+QDockWidget::close-button, QDockWidget::float-button
+{
+ text-align: center;
+ spacing: 1px; /* spacing between items in the tool bar */
+ background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #323232, stop: 0.5 #242424, stop:1 #323232);
+}
+
+QDockWidget::close-button:hover, QDockWidget::float-button:hover
+{
+ background: #242424;
+}
+
+QDockWidget::close-button:pressed, QDockWidget::float-button:pressed
+{
+ padding: 1px -1px -1px 1px;
+}
+
+QMainWindow::separator
+{
+ background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #161616, stop: 0.5 #151515, stop: 0.6 #212121, stop:1 #343434);
+ color: white;
+ padding-left: 4px;
+ border: 1px solid #4c4c4c;
+ spacing: 3px; /* spacing between items in the tool bar */
+}
+
+QMainWindow::separator:hover
+{
+
+ background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #d7801a, stop:0.5 #b56c17 stop:1 #ffa02f);
+ color: white;
+ padding-left: 4px;
+ border: 1px solid #6c6c6c;
+ spacing: 3px; /* spacing between items in the tool bar */
+}
+
+QToolBar::handle
+{
+ spacing: 3px; /* spacing between items in the tool bar */
+ background: url(:/images/handle.png);
+}
+
+QMenu::separator
+{
+ height: 2px;
+ background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #161616, stop: 0.5 #151515, stop: 0.6 #212121, stop:1 #343434);
+ color: white;
+ padding-left: 4px;
+ margin-left: 10px;
+ margin-right: 5px;
+}
+
+QProgressBar
+{
+ border: 2px solid grey;
+ border-radius: 5px;
+ text-align: center;
+}
+
+QProgressBar::chunk
+{
+ background-color: #d7801a;
+ width: 2.15px;
+ margin: 0.5px;
+}
+
+QTabBar::tab {
+ color: #b1b1b1;
+ border: 1px solid #444;
+ border-bottom-style: none;
+ background-color: #323232;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-top: 3px;
+ padding-bottom: 2px;
+ margin-right: -1px;
+}
+
+QTabWidget::pane {
+ border: 1px solid #444;
+ top: 1px;
+}
+
+QTabBar::tab:last
+{
+ margin-right: 0; /* the last selected tab has nothing to overlap with on the right */
+ border-top-right-radius: 3px;
+}
+
+QTabBar::tab:first:!selected
+{
+ margin-left: 0px; /* the last selected tab has nothing to overlap with on the right */
+
+
+ border-top-left-radius: 3px;
+}
+
+QTabBar::tab:!selected
+{
+ color: #b1b1b1;
+ border-bottom-style: solid;
+ margin-top: 3px;
+ background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:1 #212121, stop:.4 #343434);
+}
+
+QTabBar::tab:selected
+{
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+ margin-bottom: 0px;
+}
+
+QTabBar::tab:!selected:hover
+{
+ /*border-top: 2px solid #ffaa00;
+ padding-bottom: 3px;*/
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+ background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:1 #212121, stop:0.4 #343434, stop:0.2 #343434, stop:0.1 #ffaa00);
+}
+
+QRadioButton::indicator:checked, QRadioButton::indicator:unchecked{
+ color: #b1b1b1;
+ background-color: #323232;
+ border: 1px solid #b1b1b1;
+ border-radius: 6px;
+}
+
+QRadioButton::indicator:checked
+{
+ background-color: qradialgradient(
+ cx: 0.5, cy: 0.5,
+ fx: 0.5, fy: 0.5,
+ radius: 1.0,
+ stop: 0.25 #ffaa00,
+ stop: 0.3 #323232
+ );
+}
+
+QCheckBox::indicator{
+ color: #b1b1b1;
+ background-color: #323232;
+ border: 1px solid #b1b1b1;
+ width: 9px;
+ height: 9px;
+}
+
+QRadioButton::indicator
+{
+ border-radius: 6px;
+}
+
+QRadioButton::indicator:hover, QCheckBox::indicator:hover
+{
+ border: 1px solid #ffaa00;
+}
+
+QCheckBox::indicator:checked
+{
+ image:url(:/images/checkbox.png);
+}
+
+QCheckBox::indicator:disabled, QRadioButton::indicator:disabled
+{
+ border: 1px solid #444;
+}
\ No newline at end of file
diff --git a/styles/giap/giap.qss b/styles/giap/giap.qss
new file mode 100644
index 0000000..e5e653a
--- /dev/null
+++ b/styles/giap/giap.qss
@@ -0,0 +1,598 @@
+
+QToolTip
+{
+ color: black;
+ background-color: rgb(255, 255, 185);
+ border-color: rgb(215, 215, 215);
+ font: 9pt "Segoe UI";
+}
+
+QWidget
+{
+ color: white;
+ background-color: rgb(53, 85, 109);
+ selection-background-color: white;
+ selection-color: black;
+ font: 9pt "Segoe UI";
+}
+
+QWidget:item:selected
+{
+ background-color: QLinearGradient(
+ x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 white, stop: 1 white
+ );
+}
+
+QMenuBar
+{
+ background-color: rgb(53, 85, 109);
+ color: white;
+ font: 9pt "Segoe UI";
+}
+
+QMenuBar::item
+{
+ background: transparent;
+ font: 9pt "Segoe UI";
+}
+
+QMenuBar::item:selected
+{
+ background: transparent;
+ color: white;
+ font: bold;
+}
+
+QMenuBar::item:pressed
+{
+ /* border: 1px solid #1a2936; */
+ background-color: white;
+ color: black;
+ margin-bottom:-1px;
+ padding-bottom:1px;
+}
+
+QMenu
+{
+ border: 1px solid #1a2936;
+ color: white;
+ font: 8pt "Segoe UI";
+}
+
+QMenu::item
+{
+ padding: 3px 20px 3px 30px;
+}
+
+QMenu::item:selected
+{
+ color: black;
+}
+
+QWidget:disabled
+{
+ color: #8b8b8b;
+ background-color: rgb(53, 85, 109);
+}
+QAbstractItemView
+{
+ alternate-background-color: #5783a7;
+ color: white;
+ border: 1px solid #1a2936;
+ border-radius: 3px;
+ padding: 1px;
+ font: 9pt "Segoe UI";
+}
+QWidget:focus, QMenuBar:focus
+{
+ border: 1px solid rgba(48, 86, 111);
+}
+
+QTabWidget:focus, QCheckBox:focus
+{
+ border: none;
+}
+
+QLineEdit
+{
+ border: 2px solid;
+ border-radius: 4px;
+ border-color: rgba(38, 60, 78, 255);
+ border-top-color: qlineargradient(spread:pad, x1:1, y1:0, x2:1, y2:1, stop:0 rgba(26, 44, 60, 255), stop:1 rgba(38, 60, 78, 255));
+ background-color: rgba(38, 60, 78, 255);
+}
+
+QGroupBox {
+ border:1px solid #1a2936;
+ border-radius: 7px;
+ margin-top: 2ex;
+}
+
+QGroupBox::title {
+ subcontrol-origin: margin;
+ subcontrol-position: top left;
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+QScrollBar:horizontal {
+ background-color: rgb(38, 60, 78);
+ height: 0.5em;
+ margin: 0px;
+ padding: 0px;
+}
+
+QScrollBar::handle:horizontal {
+ border: 1px solid rgb(38, 60, 78);
+ background: rgb(53, 85, 109);
+ min-width: 0.8em;
+}
+
+QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal,
+QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
+ width: 0px;
+ background: transparent;
+}
+
+QScrollBar:vertical {
+ background-color: rgb(38, 60, 78);
+ width: 0.5em;
+ margin: 0;
+}
+
+QScrollBar::handle:vertical {
+ border: 1px solid rgb(38, 60, 78);
+ background: rgb(53, 85, 109);
+ min-height: 0.8em;
+}
+
+QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical,
+QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
+ height: 0px;
+ background: transparent;
+}
+
+
+QTabBar::tab {
+border-top-left-radius: 8px;
+border-top-right-radius: 8px;
+margin-right: -1px;
+padding:2px;
+padding-left: 25px;
+padding-right: 25px;
+height: 20px;
+font-weight: bold;
+}
+
+QTabBar::tab:selected {
+border-top-left-radius: 8px;
+border-top-right-radius: 8px;
+border: 1px solid;
+border-color: rgb(79, 118, 150);
+}
+
+QTabBar::tab:!selected {
+border: 1px solid rgb(90, 135, 172);
+border-top-left-radius: 8px;
+border-top-right-radius: 8px;
+border-left-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
+border-right-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
+border-bottom: 1px solid;
+border-bottom-color: rgb(65, 97, 124);
+color: rgb(203, 212, 220);
+}
+
+QTabBar::tab:last:!selected {
+margin-right: 1px;
+border-top-left-radius: 8px;
+border-top-right-radius: 8px;
+}
+QTabWidget::pane {
+border-top: 2px solid rgb(79, 118, 150);
+border-bottom: 2px solid rgb(79, 118, 150);
+}
+QTabWidget::tab-bar {
+left: 5px;
+right: 5px;
+}
+
+QPushButton
+{
+ color: white;
+ background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
+ border-radius: 5px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-left: 5px;
+ padding-right: 5px;
+ font: 9pt "Segoe UI";
+}
+
+QPushButton:disabled
+{
+ background-color: QLinearGradient(x1: 0, y1: 1, x2: 0, y2: 0, stop: 0 rgb(53, 85, 109), stop: 1 #243a4c);
+ border: 1px solid #243a4c;
+ border-style: solid;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-left: 10px;
+ padding-right: 10px;
+ border-radius: 5px;
+ color: #1a2936;
+}
+
+QPushButton:checked {
+ background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
+ border: solid;
+ border-width: 2px;
+ border-color: rgb(65, 97, 124);
+}
+
+QPushButton:pressed
+{
+ background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
+ border: solid;
+ border-width: 2px;
+ border-color: rgb(65, 97, 124);
+}
+
+
+QComboBox
+{
+ selection-background-color: white;
+ background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
+ border-style: solid;
+ border: 1px solid #1a2936;
+ border-radius: 3px;
+ padding: 2px;
+ font: 9pt "Segoe UI";
+}
+
+QComboBox:on
+{
+ background-color: #626873;
+ padding-top: 3px;
+ padding-left: 4px;
+ selection-background-color: #4a4a4a;
+}
+
+QComboBox QAbstractItemView
+{
+ background-color: #243a4c;
+ border-radius: 4px;
+ border: 1px solid #1a2936;
+ selection-background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 white, stop: 1 white);
+ padding: 4px 10px 4px 10px;
+ width: 1.9em;
+}
+
+QComboBox::drop-down
+{
+ subcontrol-origin: padding;
+ subcontrol-position: top right;
+ width: 15px;
+ border-left-width: 1px;
+ border-left-color: #1a2936;
+ border-left-style: solid;
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+
+QComboBox::down-arrow
+{
+ image: url(icons/down_arrow_disabled.png);
+}
+
+QComboBox::down-arrow:on,
+QComboBox::down-arrow:hover,
+QComboBox::down-arrow:focus
+{
+ image: url(icons/down_arrow.png);
+}
+
+
+QAbstractSpinBox {
+ padding-top: 2px;
+ padding-bottom: 2px;
+ border: 1px solid #1a2936;
+ background-color: #243a4c;
+ color: white;
+ border-radius: 3px;
+}
+
+QAbstractSpinBox:up-button
+{
+ background-color: transparent;
+ subcontrol-origin: border;
+ subcontrol-position: top right;
+ width: 11px;
+ background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
+ border-top-right-radius: 3px
+}
+
+QAbstractSpinBox:down-button
+{
+ background-color: transparent;
+ subcontrol-origin: border;
+ subcontrol-position: bottom right;
+ width: 11px;
+ background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
+ border-bottom-right-radius: 3px
+}
+QHeaderView::section
+{
+ background-color: #1a2936;
+ color: white;
+ padding-left: 4px;
+ border: 1px solid black;
+}
+
+QCheckBox:disabled
+{
+ color: #5d5d5d;
+}
+
+QHeaderView::down-arrow,
+QAbstractSpinBox::up-arrow,
+QAbstractSpinBox::up-arrow:disabled,
+QAbstractSpinBox::up-arrow:off
+{
+ image: url(icons/up_arrow_disabled.png);
+ width: 6px;
+ height: 6px;
+}
+
+QHeaderView::down-arrow:hover,
+QAbstractSpinBox::up-arrow:hover
+
+{
+ image: url(icons/up_arrow.png);
+}
+
+QHeaderView::down-arrow,
+QAbstractSpinBox::down-arrow,
+QAbstractSpinBox::down-arrow:disabled,
+QAbstractSpinBox::down-arrow:off
+{
+ image: url(icons/down_arrow_disabled.png);
+ width: 6px;
+ height: 6px;
+}
+
+QHeaderView::up-arrow:hover,
+QAbstractSpinBox::down-arrow:hover
+{
+ image: url(icons/down_arrow.png);
+}
+
+QLabel,
+QDateEdit::drop-down
+{
+ border: 0px solid black;
+}
+
+
+QDockWidget
+{
+ color: white;
+ titlebar-close-icon: url(icons/close.png);
+ titlebar-normal-icon: url(icons/undock.png);
+}
+
+QDockWidget::title
+{
+ border: 1px solid #1a2936;
+ border-bottom: rgb(53, 85, 109);
+ text-align: left;
+ spacing: 2px;
+ background-color: #1a2936;
+ background-image: none;
+ padding-left: 10px;
+}
+
+QDockWidget {
+ border: 1px solid lightgray;
+ titlebar-close-icon: url(icons/close.png);
+ titlebar-normal-icon: url(icons/undock.png);
+}
+
+QDockWidget::close-button,
+QDockWidget::float-button {
+ border: 1px solid transparent;
+ border-radius: 5px;
+ background: transparent;
+ icon-size: 10px;
+}
+
+QDockWidget::close-button:hover,
+QDockWidget::float-button:hover {
+ background: #1a2936;
+ color: white
+}
+
+QDockWidget::close-button:pressed,
+QDockWidget::float-button:pressed {
+ padding: 1px -1px -1px 1px;
+}
+
+QTreeView,
+QListView,
+QTableView
+{
+ border: 1px solid #1a2936;
+ background-color: rgb(53, 85, 109);
+ color: white;
+}
+
+QTreeView:item
+{
+ color: white;
+}
+
+QTreeView:item:selected
+{
+ color: black;
+}
+
+
+QTreeView:branch:selected,
+QTreeView:branch:hover
+{
+ background: url(icons/transparent.png);
+}
+
+QTreeView::branch:has-siblings:!adjoins-item
+{
+ border-image: url(icons/transparent.png);
+}
+
+QTreeView::branch:has-siblings:adjoins-item
+{
+ border-image: url(icons/transparent.png);
+}
+
+QTreeView::branch:!has-children:!has-siblings:adjoins-item
+{
+ border-image: url(icons/transparent.png);
+}
+
+QTreeView::branch:has-children:!has-siblings:closed,
+QTreeView::branch:closed:has-children:has-siblings
+{
+ image: url(icons/branch_closed.png);
+}
+
+QTreeView::branch:open:has-children:!has-siblings,
+QTreeView::branch:open:has-children:has-siblings
+{
+ image: url(icons/branch_open.png);
+}
+
+QTreeView::branch:has-children:!has-siblings:closed:hover,
+QTreeView::branch:closed:has-children:has-siblings:hover
+{
+ image: url(icons/branch_closed-on.png);
+}
+
+QTreeView::branch:open:has-children:!has-siblings:hover,
+QTreeView::branch:open:has-children:has-siblings:hover
+{
+ image: url(icons/branch_open-on.png);
+}
+QSlider::groove:horizontal
+{
+ border: 1px solid #1a2936;
+ height: 8px;
+ background: #243a4c;
+ margin: 2px 0;
+ border-radius: 4px;
+}
+
+QSlider::handle:horizontal
+{
+ background: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0.0 #1a2936, stop: 1 rgb(53, 85, 109));
+ border: 1px solid #1a2936;
+ width: 14px;
+ height: 14px;
+ margin: -4px 0;
+ border-radius: 7px;
+}
+
+QSlider::groove:vertical
+{
+ border: 1px solid #1a2936;
+ width: 8px;
+ background: #243a4c;
+ margin: 0 0px;
+ border-radius: 4px;
+}
+
+QSlider::handle:vertical
+{
+ background: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0.0 #1a2936, stop: 1 rgb(53, 85, 109));
+ border: 1px solid #1a2936;
+ width: 14px;
+ height: 14px;
+ margin: 0 -4px;
+ border-radius: 7px;
+}
+
+QToolBar QToolButton
+{
+ font: 8pt "Segoe UI";
+ font-weight: bold;
+ background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(90, 135, 172, 255));
+ border-radius: 5px;
+ border: 1px solid rgba(0,0,0,0);
+}
+QToolBar QToolButton::menu-arrow {
+ background-image: url(icons/down_arrow_light.png);
+ background-position: center center;
+ background-repeat: none;
+ subcontrol-origin: padding;
+ subcontrol-position: bottom right;
+ height: 10px;
+ border: none;
+}
+
+QToolButton[popupMode="1"] { /* only for MenuButtonPopup */
+ padding-right: 10px; /* make way for the popup button */
+}
+
+QToolBar QToolButton::menu-button {
+ background-color: transparent;
+}
+
+QToolButton:pressed
+{
+ background-color: #243a4c;
+}
+QToolButton:hover
+{
+ background-color: #243a4c;
+}
+
+QToolButton:checked {
+ background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(65, 97, 124, 255), stop:1 rgba(31, 65, 90, 255));
+ border: solid;
+ border-width: 2px;
+ border-color: rgb(65, 97, 124);
+}
+
+QTableView#tagView
+{
+ background-color: transparent;
+}
+
+QLabel#inTotalLabel, QLabel#outTotalLabel, QLabel#recordCountLabel
+{
+ font: bold;
+ background-color: #243a4c;
+}
+
+QProgressBar:horizontal {
+ border: 1px solid #1a2936;
+ text-align: center;
+ padding: 1px;
+ background: #243a4c;
+}
+
+
+QTextEdit
+{
+ background-color: rgb(53, 85, 109);
+ color: white;
+ border: 1px solid #1a2936;
+}
+
+QPlainTextEdit
+{
+ background-color: #243a4c;
+ color: white;
+ border-radius: 3px;
+ border: 1px solid #1a2936;
+}
+
+QProgressBar::chunk:horizontal {
+ background-color: qlineargradient(spread:reflect, x1:1, y1:0.545, x2:1, y2:0, stop:0 rgba(28, 66, 111, 255), stop:1 rgba(37, 87, 146, 255));
+}
\ No newline at end of file
diff --git a/styles/giap/icons/Hmovetoolbar.png b/styles/giap/icons/Hmovetoolbar.png
new file mode 100644
index 0000000..520c3aa
Binary files /dev/null and b/styles/giap/icons/Hmovetoolbar.png differ
diff --git a/styles/giap/icons/Hsepartoolbar.png b/styles/giap/icons/Hsepartoolbar.png
new file mode 100644
index 0000000..401bfb4
Binary files /dev/null and b/styles/giap/icons/Hsepartoolbar.png differ
diff --git a/styles/giap/icons/Vmovetoolbar.png b/styles/giap/icons/Vmovetoolbar.png
new file mode 100644
index 0000000..512edce
Binary files /dev/null and b/styles/giap/icons/Vmovetoolbar.png differ
diff --git a/styles/giap/icons/Vsepartoolbar.png b/styles/giap/icons/Vsepartoolbar.png
new file mode 100644
index 0000000..d9dc156
Binary files /dev/null and b/styles/giap/icons/Vsepartoolbar.png differ
diff --git a/styles/giap/icons/branch_closed-on.png b/styles/giap/icons/branch_closed-on.png
new file mode 100644
index 0000000..d081e9b
Binary files /dev/null and b/styles/giap/icons/branch_closed-on.png differ
diff --git a/styles/giap/icons/branch_closed.png b/styles/giap/icons/branch_closed.png
new file mode 100644
index 0000000..d652159
Binary files /dev/null and b/styles/giap/icons/branch_closed.png differ
diff --git a/styles/giap/icons/branch_open-on.png b/styles/giap/icons/branch_open-on.png
new file mode 100644
index 0000000..ec372b2
Binary files /dev/null and b/styles/giap/icons/branch_open-on.png differ
diff --git a/styles/giap/icons/branch_open.png b/styles/giap/icons/branch_open.png
new file mode 100644
index 0000000..66f8e1a
Binary files /dev/null and b/styles/giap/icons/branch_open.png differ
diff --git a/styles/giap/icons/checkbox.png b/styles/giap/icons/checkbox.png
new file mode 100644
index 0000000..b4a9aa3
Binary files /dev/null and b/styles/giap/icons/checkbox.png differ
diff --git a/styles/giap/icons/close.png b/styles/giap/icons/close.png
new file mode 100644
index 0000000..ffdec9a
Binary files /dev/null and b/styles/giap/icons/close.png differ
diff --git a/styles/giap/icons/down_arrow.png b/styles/giap/icons/down_arrow.png
new file mode 100644
index 0000000..e271f7f
Binary files /dev/null and b/styles/giap/icons/down_arrow.png differ
diff --git a/styles/giap/icons/down_arrow_disabled.png b/styles/giap/icons/down_arrow_disabled.png
new file mode 100644
index 0000000..5805d98
Binary files /dev/null and b/styles/giap/icons/down_arrow_disabled.png differ
diff --git a/styles/giap/icons/down_arrow_light.png b/styles/giap/icons/down_arrow_light.png
new file mode 100644
index 0000000..2168d71
Binary files /dev/null and b/styles/giap/icons/down_arrow_light.png differ
diff --git a/styles/giap/icons/down_arrow_lighter.png b/styles/giap/icons/down_arrow_lighter.png
new file mode 100644
index 0000000..db46661
Binary files /dev/null and b/styles/giap/icons/down_arrow_lighter.png differ
diff --git a/styles/giap/icons/left_arrow.png b/styles/giap/icons/left_arrow.png
new file mode 100644
index 0000000..f808d2d
Binary files /dev/null and b/styles/giap/icons/left_arrow.png differ
diff --git a/styles/giap/icons/left_arrow_disabled.png b/styles/giap/icons/left_arrow_disabled.png
new file mode 100644
index 0000000..f5b9af8
Binary files /dev/null and b/styles/giap/icons/left_arrow_disabled.png differ
diff --git a/styles/giap/icons/right_arrow.png b/styles/giap/icons/right_arrow.png
new file mode 100644
index 0000000..9b0a4e6
Binary files /dev/null and b/styles/giap/icons/right_arrow.png differ
diff --git a/styles/giap/icons/right_arrow_disabled.png b/styles/giap/icons/right_arrow_disabled.png
new file mode 100644
index 0000000..5c0bee4
Binary files /dev/null and b/styles/giap/icons/right_arrow_disabled.png differ
diff --git a/styles/giap/icons/sizegrip.png b/styles/giap/icons/sizegrip.png
new file mode 100644
index 0000000..350583a
Binary files /dev/null and b/styles/giap/icons/sizegrip.png differ
diff --git a/styles/giap/icons/stylesheet-branch-end.png b/styles/giap/icons/stylesheet-branch-end.png
new file mode 100644
index 0000000..cb5d3b5
Binary files /dev/null and b/styles/giap/icons/stylesheet-branch-end.png differ
diff --git a/styles/giap/icons/stylesheet-branch-more.png b/styles/giap/icons/stylesheet-branch-more.png
new file mode 100644
index 0000000..6271140
Binary files /dev/null and b/styles/giap/icons/stylesheet-branch-more.png differ
diff --git a/styles/giap/icons/stylesheet-vline.png b/styles/giap/icons/stylesheet-vline.png
new file mode 100644
index 0000000..87536cc
Binary files /dev/null and b/styles/giap/icons/stylesheet-vline.png differ
diff --git a/styles/giap/icons/transparent.png b/styles/giap/icons/transparent.png
new file mode 100644
index 0000000..483df25
Binary files /dev/null and b/styles/giap/icons/transparent.png differ
diff --git a/styles/giap/icons/undock.png b/styles/giap/icons/undock.png
new file mode 100644
index 0000000..804547a
Binary files /dev/null and b/styles/giap/icons/undock.png differ
diff --git a/styles/giap/icons/up_arrow.png b/styles/giap/icons/up_arrow.png
new file mode 100644
index 0000000..abcc724
Binary files /dev/null and b/styles/giap/icons/up_arrow.png differ
diff --git a/styles/giap/icons/up_arrow_disabled.png b/styles/giap/icons/up_arrow_disabled.png
new file mode 100644
index 0000000..b9c8e3b
Binary files /dev/null and b/styles/giap/icons/up_arrow_disabled.png differ
diff --git a/styles/lightblue/icons/Hmovetoolbar_dark.png b/styles/lightblue/icons/Hmovetoolbar_dark.png
new file mode 100644
index 0000000..a408e85
Binary files /dev/null and b/styles/lightblue/icons/Hmovetoolbar_dark.png differ
diff --git a/styles/lightblue/icons/Hmovetoolbar_light.png b/styles/lightblue/icons/Hmovetoolbar_light.png
new file mode 100644
index 0000000..663b643
Binary files /dev/null and b/styles/lightblue/icons/Hmovetoolbar_light.png differ
diff --git a/styles/lightblue/icons/Hsepartoolbar_dark.png b/styles/lightblue/icons/Hsepartoolbar_dark.png
new file mode 100644
index 0000000..002fad0
Binary files /dev/null and b/styles/lightblue/icons/Hsepartoolbar_dark.png differ
diff --git a/styles/lightblue/icons/Hsepartoolbar_light.png b/styles/lightblue/icons/Hsepartoolbar_light.png
new file mode 100644
index 0000000..841f467
Binary files /dev/null and b/styles/lightblue/icons/Hsepartoolbar_light.png differ
diff --git a/styles/lightblue/icons/Vmovetoolbar_dark.png b/styles/lightblue/icons/Vmovetoolbar_dark.png
new file mode 100644
index 0000000..a73ced8
Binary files /dev/null and b/styles/lightblue/icons/Vmovetoolbar_dark.png differ
diff --git a/styles/lightblue/icons/Vmovetoolbar_light.png b/styles/lightblue/icons/Vmovetoolbar_light.png
new file mode 100644
index 0000000..7b5130a
Binary files /dev/null and b/styles/lightblue/icons/Vmovetoolbar_light.png differ
diff --git a/styles/lightblue/icons/Vsepartoolbar_dark.png b/styles/lightblue/icons/Vsepartoolbar_dark.png
new file mode 100644
index 0000000..18806c5
Binary files /dev/null and b/styles/lightblue/icons/Vsepartoolbar_dark.png differ
diff --git a/styles/lightblue/icons/Vsepartoolbar_light.png b/styles/lightblue/icons/Vsepartoolbar_light.png
new file mode 100644
index 0000000..4b62f79
Binary files /dev/null and b/styles/lightblue/icons/Vsepartoolbar_light.png differ
diff --git a/styles/lightblue/icons/background_freecad.png b/styles/lightblue/icons/background_freecad.png
new file mode 100644
index 0000000..f2c085a
Binary files /dev/null and b/styles/lightblue/icons/background_freecad.png differ
diff --git a/styles/lightblue/icons/branch_closed_dark.png b/styles/lightblue/icons/branch_closed_dark.png
new file mode 100644
index 0000000..c399923
Binary files /dev/null and b/styles/lightblue/icons/branch_closed_dark.png differ
diff --git a/styles/lightblue/icons/branch_closed_darker.png b/styles/lightblue/icons/branch_closed_darker.png
new file mode 100644
index 0000000..ff8af8b
Binary files /dev/null and b/styles/lightblue/icons/branch_closed_darker.png differ
diff --git a/styles/lightblue/icons/branch_end.png b/styles/lightblue/icons/branch_end.png
new file mode 100644
index 0000000..963a7cb
Binary files /dev/null and b/styles/lightblue/icons/branch_end.png differ
diff --git a/styles/lightblue/icons/branch_more.png b/styles/lightblue/icons/branch_more.png
new file mode 100644
index 0000000..7c534f1
Binary files /dev/null and b/styles/lightblue/icons/branch_more.png differ
diff --git a/styles/lightblue/icons/branch_open_dark.png b/styles/lightblue/icons/branch_open_dark.png
new file mode 100644
index 0000000..4d04a22
Binary files /dev/null and b/styles/lightblue/icons/branch_open_dark.png differ
diff --git a/styles/lightblue/icons/branch_open_darker.png b/styles/lightblue/icons/branch_open_darker.png
new file mode 100644
index 0000000..cdbc89e
Binary files /dev/null and b/styles/lightblue/icons/branch_open_darker.png differ
diff --git a/styles/lightblue/icons/branch_vline.png b/styles/lightblue/icons/branch_vline.png
new file mode 100644
index 0000000..b4c9826
Binary files /dev/null and b/styles/lightblue/icons/branch_vline.png differ
diff --git a/styles/lightblue/icons/checkbox_indeterminate_light.png b/styles/lightblue/icons/checkbox_indeterminate_light.png
new file mode 100644
index 0000000..9d79911
Binary files /dev/null and b/styles/lightblue/icons/checkbox_indeterminate_light.png differ
diff --git a/styles/lightblue/icons/checkbox_light.png b/styles/lightblue/icons/checkbox_light.png
new file mode 100644
index 0000000..0e8882c
Binary files /dev/null and b/styles/lightblue/icons/checkbox_light.png differ
diff --git a/styles/lightblue/icons/close_dark.png b/styles/lightblue/icons/close_dark.png
new file mode 100644
index 0000000..8771a0b
Binary files /dev/null and b/styles/lightblue/icons/close_dark.png differ
diff --git a/styles/lightblue/icons/close_light.png b/styles/lightblue/icons/close_light.png
new file mode 100644
index 0000000..3e6b9d8
Binary files /dev/null and b/styles/lightblue/icons/close_light.png differ
diff --git a/styles/lightblue/icons/down_arrow_dark.png b/styles/lightblue/icons/down_arrow_dark.png
new file mode 100644
index 0000000..9fed1f7
Binary files /dev/null and b/styles/lightblue/icons/down_arrow_dark.png differ
diff --git a/styles/lightblue/icons/down_arrow_disabled_dark.png b/styles/lightblue/icons/down_arrow_disabled_dark.png
new file mode 100644
index 0000000..9be5446
Binary files /dev/null and b/styles/lightblue/icons/down_arrow_disabled_dark.png differ
diff --git a/styles/lightblue/icons/down_arrow_disabled_light.png b/styles/lightblue/icons/down_arrow_disabled_light.png
new file mode 100644
index 0000000..b5e881a
Binary files /dev/null and b/styles/lightblue/icons/down_arrow_disabled_light.png differ
diff --git a/styles/lightblue/icons/down_arrow_light.png b/styles/lightblue/icons/down_arrow_light.png
new file mode 100644
index 0000000..2168d71
Binary files /dev/null and b/styles/lightblue/icons/down_arrow_light.png differ
diff --git a/styles/lightblue/icons/down_arrow_lighter.png b/styles/lightblue/icons/down_arrow_lighter.png
new file mode 100644
index 0000000..db46661
Binary files /dev/null and b/styles/lightblue/icons/down_arrow_lighter.png differ
diff --git a/styles/lightblue/icons/left_arrow_dark.png b/styles/lightblue/icons/left_arrow_dark.png
new file mode 100644
index 0000000..af678ad
Binary files /dev/null and b/styles/lightblue/icons/left_arrow_dark.png differ
diff --git a/styles/lightblue/icons/left_arrow_disabled_dark.png b/styles/lightblue/icons/left_arrow_disabled_dark.png
new file mode 100644
index 0000000..db9da5d
Binary files /dev/null and b/styles/lightblue/icons/left_arrow_disabled_dark.png differ
diff --git a/styles/lightblue/icons/left_arrow_disabled_light.png b/styles/lightblue/icons/left_arrow_disabled_light.png
new file mode 100644
index 0000000..a1b787f
Binary files /dev/null and b/styles/lightblue/icons/left_arrow_disabled_light.png differ
diff --git a/styles/lightblue/icons/left_arrow_light.png b/styles/lightblue/icons/left_arrow_light.png
new file mode 100644
index 0000000..ef222b4
Binary files /dev/null and b/styles/lightblue/icons/left_arrow_light.png differ
diff --git a/styles/lightblue/icons/left_arrow_lighter.png b/styles/lightblue/icons/left_arrow_lighter.png
new file mode 100644
index 0000000..6bca3a5
Binary files /dev/null and b/styles/lightblue/icons/left_arrow_lighter.png differ
diff --git a/styles/lightblue/icons/more_dark.png b/styles/lightblue/icons/more_dark.png
new file mode 100644
index 0000000..9bc9002
Binary files /dev/null and b/styles/lightblue/icons/more_dark.png differ
diff --git a/styles/lightblue/icons/more_light.png b/styles/lightblue/icons/more_light.png
new file mode 100644
index 0000000..6a958cb
Binary files /dev/null and b/styles/lightblue/icons/more_light.png differ
diff --git a/styles/lightblue/icons/radiobutton_light.png b/styles/lightblue/icons/radiobutton_light.png
new file mode 100644
index 0000000..e9a7e24
Binary files /dev/null and b/styles/lightblue/icons/radiobutton_light.png differ
diff --git a/styles/lightblue/icons/right_arrow_dark.png b/styles/lightblue/icons/right_arrow_dark.png
new file mode 100644
index 0000000..f24e996
Binary files /dev/null and b/styles/lightblue/icons/right_arrow_dark.png differ
diff --git a/styles/lightblue/icons/right_arrow_disabled_dark.png b/styles/lightblue/icons/right_arrow_disabled_dark.png
new file mode 100644
index 0000000..8972887
Binary files /dev/null and b/styles/lightblue/icons/right_arrow_disabled_dark.png differ
diff --git a/styles/lightblue/icons/right_arrow_disabled_light.png b/styles/lightblue/icons/right_arrow_disabled_light.png
new file mode 100644
index 0000000..711cf0f
Binary files /dev/null and b/styles/lightblue/icons/right_arrow_disabled_light.png differ
diff --git a/styles/lightblue/icons/right_arrow_light.png b/styles/lightblue/icons/right_arrow_light.png
new file mode 100644
index 0000000..128b9a5
Binary files /dev/null and b/styles/lightblue/icons/right_arrow_light.png differ
diff --git a/styles/lightblue/icons/right_arrow_lighter.png b/styles/lightblue/icons/right_arrow_lighter.png
new file mode 100644
index 0000000..3d6bcdb
Binary files /dev/null and b/styles/lightblue/icons/right_arrow_lighter.png differ
diff --git a/styles/lightblue/icons/separtoolbar_dark.png b/styles/lightblue/icons/separtoolbar_dark.png
new file mode 100644
index 0000000..cef2199
Binary files /dev/null and b/styles/lightblue/icons/separtoolbar_dark.png differ
diff --git a/styles/lightblue/icons/separtoolbar_light.png b/styles/lightblue/icons/separtoolbar_light.png
new file mode 100644
index 0000000..0a4d923
Binary files /dev/null and b/styles/lightblue/icons/separtoolbar_light.png differ
diff --git a/styles/lightblue/icons/sizegrip_dark.png b/styles/lightblue/icons/sizegrip_dark.png
new file mode 100644
index 0000000..0c3de41
Binary files /dev/null and b/styles/lightblue/icons/sizegrip_dark.png differ
diff --git a/styles/lightblue/icons/sizegrip_light.png b/styles/lightblue/icons/sizegrip_light.png
new file mode 100644
index 0000000..14fd813
Binary files /dev/null and b/styles/lightblue/icons/sizegrip_light.png differ
diff --git a/styles/lightblue/icons/splitter_horizontal_dark.png b/styles/lightblue/icons/splitter_horizontal_dark.png
new file mode 100644
index 0000000..9d8e673
Binary files /dev/null and b/styles/lightblue/icons/splitter_horizontal_dark.png differ
diff --git a/styles/lightblue/icons/splitter_horizontal_light.png b/styles/lightblue/icons/splitter_horizontal_light.png
new file mode 100644
index 0000000..217271b
Binary files /dev/null and b/styles/lightblue/icons/splitter_horizontal_light.png differ
diff --git a/styles/lightblue/icons/splitter_vertical_dark.png b/styles/lightblue/icons/splitter_vertical_dark.png
new file mode 100644
index 0000000..b4c30d6
Binary files /dev/null and b/styles/lightblue/icons/splitter_vertical_dark.png differ
diff --git a/styles/lightblue/icons/splitter_vertical_light.png b/styles/lightblue/icons/splitter_vertical_light.png
new file mode 100644
index 0000000..1473e2b
Binary files /dev/null and b/styles/lightblue/icons/splitter_vertical_light.png differ
diff --git a/styles/lightblue/icons/transparent.png b/styles/lightblue/icons/transparent.png
new file mode 100644
index 0000000..483df25
Binary files /dev/null and b/styles/lightblue/icons/transparent.png differ
diff --git a/styles/lightblue/icons/undock_dark.png b/styles/lightblue/icons/undock_dark.png
new file mode 100644
index 0000000..01b6785
Binary files /dev/null and b/styles/lightblue/icons/undock_dark.png differ
diff --git a/styles/lightblue/icons/undock_light.png b/styles/lightblue/icons/undock_light.png
new file mode 100644
index 0000000..36881f6
Binary files /dev/null and b/styles/lightblue/icons/undock_light.png differ
diff --git a/styles/lightblue/icons/up_arrow_dark.png b/styles/lightblue/icons/up_arrow_dark.png
new file mode 100644
index 0000000..6943e82
Binary files /dev/null and b/styles/lightblue/icons/up_arrow_dark.png differ
diff --git a/styles/lightblue/icons/up_arrow_disabled_dark.png b/styles/lightblue/icons/up_arrow_disabled_dark.png
new file mode 100644
index 0000000..d21f24c
Binary files /dev/null and b/styles/lightblue/icons/up_arrow_disabled_dark.png differ
diff --git a/styles/lightblue/icons/up_arrow_disabled_light.png b/styles/lightblue/icons/up_arrow_disabled_light.png
new file mode 100644
index 0000000..6a56e89
Binary files /dev/null and b/styles/lightblue/icons/up_arrow_disabled_light.png differ
diff --git a/styles/lightblue/icons/up_arrow_light.png b/styles/lightblue/icons/up_arrow_light.png
new file mode 100644
index 0000000..4c32b8a
Binary files /dev/null and b/styles/lightblue/icons/up_arrow_light.png differ
diff --git a/styles/lightblue/icons/up_arrow_lighter.png b/styles/lightblue/icons/up_arrow_lighter.png
new file mode 100644
index 0000000..c687416
Binary files /dev/null and b/styles/lightblue/icons/up_arrow_lighter.png differ
diff --git a/styles/lightblue/ligthtblue b/styles/lightblue/ligthtblue
new file mode 100644
index 0000000..85cae15
--- /dev/null
+++ b/styles/lightblue/ligthtblue
@@ -0,0 +1,1795 @@
+/*
+ABOUT
+===========================================================
+version 1.7a
+QT theme (stylesheet) specially developed for FreeCAD (http://www.freecadweb.org/).
+It might work with other software that uses QT styling.
+
+
+LICENSE
+===========================================================
+Copyright (c) 2015 Pablo Gil Fernández
+The stylesheet barely uses code from Colin Duquesnoy "generic QT stylesheet"
+
+This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License.
+To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/.
+
+
+
+CUSTOMIZATION
+===========================================================
+If you would like to change the overall look/style of the theme, just find and replace following colors in the whole file:
+ background darker = #828282
+ background dark and slighly darker = #a2a2a0
+ background dark = #b6b6b6
+ background normal and slighly darker = #e0e0e0
+ background normal = #e6e6e6
+ background light = #f5f5f5
+ background lighter = #ffffff
+
+ lists background = #bdc1c9
+ lists background (alternate) = #b3b8bf
+ lists backgrounds selection = #abb0b7
+
+ foreground = black
+
+ selection darker = #1b3774
+ selection dark = #3874f2
+ selection normal = #5e90fa
+ selection inbetween normal and light = #6f9efa (used to build SpinBoxes)
+ selection light = #7cabf9
+ selection lighter = #adc5ed
+
+*/
+
+/* RESET EVERYTHING */
+QAbstractScrollArea,QCheckBox,QColumnView,QComboBox,QDateEdit,QDateTimeEdit,QDialog,QDialogButtonBox,QDockWidget,QDoubleSpinBox,QFrame,QGroupBox,QHeaderView,QLabel,QLineEdit,QListView,QListWidget,QMainWindow,QMenu,QMenuBar,QMessageBox,QProgressBar,QPushButton,QRadioButton,QScrollBar,QSizeGrip,QSlider,QSpinBox,QSplitter,QStatusBar,QTabBar,QTabWidget,QTableView,QTableWidget,QTextEdit,QTimeEdit,QToolBar,QToolButton,QToolBox,QToolTip,QTreeView,QTreeWidget,QWidget {
+ padding: 0px;
+ margin: 0px;
+ border: 0px;
+ border-style: none;
+ background-color: #e6e6e6; /* set with default background color */
+}
+
+QMdiArea[showImage="true"] {
+ background-image: url(icons/background_freecad.png);
+ background-position: center;
+ background-repeat: no-repeat;
+}
+
+QProgressBar,
+QProgressBar:horizontal {
+ background: #bdc1c9;
+ border: 1px solid #b6b6b6;
+ text-align: center;
+ padding: 1px;
+ border-radius: 4px;
+}
+QProgressBar::chunk,
+QProgressBar::chunk:horizontal {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+ border-radius: 3px;
+}
+
+QToolTip {
+ background-color: #828282;
+ color: black;
+ padding: 4px;
+ border-radius: 4px;
+}
+
+QWidget {
+ color: #828282;
+ background-color: #e6e6e6;
+ background-clip: border;
+ border-image: none;
+ outline: 0;
+}
+
+QWidget:focus {
+ border: 1px solid #828282;
+}
+
+QWidget:disabled {
+ color: #f5f5f5;
+ background-color: #828282; /* same as QMenu background-color */
+}
+
+QMenuBar {
+ color: #ffffff;
+ background-color: #e0e0e0;
+}
+
+QMenuBar::item {
+ background-color: #e0e0e0;
+}
+
+QMenuBar::item:selected {
+ color: #1b3774;
+ border: 1px solid #5e90fa;
+ background-color: #5e90fa;
+}
+
+QMenuBar::item:pressed {
+ color: #1b3774;
+ border: 1px solid #7cabf9;
+ background-color: #7cabf9;
+ margin-bottom:-1px;
+ padding-bottom:1px;
+}
+
+QMenu {
+ color: #ffffff;
+ background-color: #828282;
+ margin: 2px;
+ border: 1px solid transparent;
+}
+
+QMenu::icon {
+ margin: 5px;
+ border-style: none;
+}
+
+QMenu::right-arrow {
+ image:url(icons/right_arrow_light.png);
+}
+
+QMenu::item {
+ color: #ffffff;
+ background-color: #828282;
+ padding: 2px 30px 2px 30px;
+ border: 1px solid #828282; /* reserve space for selection border */
+}
+
+QMenu::item:selected {
+ color: #1b3774;
+ background-color: #7cabf9;
+}
+
+QMenu::separator {
+ height: 1px;
+ background-color: #b6b6b6;
+ margin-top: 2px;
+ margin-bottom: 2px;
+ margin-left: 6px;
+ margin-right: 6px;
+}
+
+QMenu::indicator:non-exclusive {
+ color: #ffffff;
+ background-color: #f5f5f5;
+ border: 1px solid #828282;
+ width: 11px;
+ height: 11px;
+ border-radius:2px;
+}
+
+QMenu::indicator:non-exclusive:checked {
+ background-color: #3874f2;
+ border: 1px solid #1b3774;
+ image:url(icons/checkbox_light.png);
+}
+
+QGroupBox {
+ color: #828282;
+ font-weight: bold;
+ border:1px solid blue;
+ border-radius: 4px;
+ margin-top: 20px;
+ border-color: rgba(0, 0, 0, 20); /* lighter than "QGroupBox" border-color */
+ background-color: rgba(255, 255, 255, 15);
+}
+
+QGroupBox::title {
+ subcontrol-origin: margin;
+ subcontrol-position: top left;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-top: 10px;
+ background-color: transparent;
+}
+
+QAbstractScrollArea {
+ border-radius: 2px;
+ border: 1px solid #3A3939;
+ background-color: transparent;
+}
+
+QAbstractScrollArea::corner {
+ border: none;
+ background-color: #e6e6e6;
+}
+
+QScrollBar:horizontal {
+ height: 15px;
+ margin: 3px 15px 3px 15px;
+ border: 1px transparent #828282;
+ border-radius: 4px;
+ background-color: #828282;
+}
+
+QScrollBar::handle:horizontal {
+ background-color: #b6b6b6;
+ min-width: 5px;
+ border-radius: 4px;
+}
+
+QScrollBar::add-line:horizontal {
+ margin: 1px 3px 0px 3px; /* 1px to correctly fit the 10px width image */
+ border-image: url(icons/right_arrow_light.png);
+ width: 6px;
+ height: 10px;
+ subcontrol-position: right;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:horizontal {
+ margin: 1px 3px 0px 3px; /* 1px to correctly fit the 10px width image */
+ border-image: url(icons/left_arrow_light.png);
+ height: 10px;
+ width: 6px;
+ subcontrol-position: left;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::add-line:horizontal:hover,
+QScrollBar::add-line:horizontal:on {
+ border-image: url(icons/right_arrow_lighter.png);
+}
+
+
+QScrollBar::sub-line:horizontal:hover,
+QScrollBar::sub-line:horizontal:on {
+ border-image: url(icons/left_arrow_lighter.png);
+}
+
+QScrollBar::up-arrow:horizontal,
+QScrollBar::down-arrow:horizontal {
+ background: none;
+}
+
+
+QScrollBar::add-page:horizontal,
+QScrollBar::sub-page:horizontal {
+ background: none;
+}
+
+QScrollBar:vertical {
+ background-color: #828282;
+ width: 15px;
+ margin: 15px 3px 15px 3px;
+ border: 1px transparent #828282;
+ border-radius: 4px;
+}
+
+QScrollBar::handle:vertical {
+ background-color: #b6b6b6;
+ min-height: 5px;
+ border-radius: 4px;
+}
+
+QScrollBar::sub-line:vertical {
+ margin: 3px 0px 3px 1px; /* 1px to correctly fit the 10px width image */
+ border-image: url(icons/up_arrow_light.png);
+ height: 6px;
+ width: 10px;
+ subcontrol-position: top;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::add-line:vertical {
+ margin: 3px 0px 3px 1px; /* 1px to correctly fit the 10px width image */
+ border-image: url(icons/down_arrow_light.png);
+ height: 6px;
+ width: 10px;
+ subcontrol-position: bottom;
+ subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:vertical:hover,
+QScrollBar::sub-line:vertical:on {
+ border-image: url(icons/up_arrow_lighter.png);
+}
+
+QScrollBar::add-line:vertical:hover,
+QScrollBar::add-line:vertical:on {
+ border-image: url(icons/down_arrow_lighter.png);
+}
+
+QScrollBar::up-arrow:vertical,
+QScrollBar::down-arrow:vertical {
+ background: none;
+}
+
+
+QScrollBar::add-page:vertical,
+QScrollBar::sub-page:vertical {
+ background: none;
+}
+
+QTextEdit {
+ color: #828282;
+ background-color: #bdc1c9;
+ border: 1px solid #b6b6b6;
+ padding: 0px;
+ margin: 0px;
+}
+
+QPlainTextEdit {
+ color: #828282;
+ background-color: #bdc1c9;
+ border-radius: 2px;
+ border: 1px solid #b6b6b6;
+ padding: 0px;
+ margin: 0px;
+}
+
+QSizeGrip {
+ image: url(icons/sizegrip_light.png);
+ width: 16px;
+ height: 16px;
+ background-color: transparent;
+}
+
+QRadioButton::indicator:unchecked{
+ color: #828282;
+ background-color: #f5f5f5;
+ border: 1px solid #828282;
+}
+
+QRadioButton::indicator:checked {
+ background-color: #3874f2;
+ border: 1px solid #1b3774;
+ image:url(icons/radiobutton_light.png);
+}
+
+QCheckBox,
+QRadioButton,
+QCheckBox:disabled,
+QRadioButton:disabled {
+ color: #828282;
+ padding: 3px;
+ outline: none;
+ background-color: transparent;
+}
+
+QCheckBox::indicator,
+QGroupBox::indicator {
+ color: #ffffff;
+ background-color: #f5f5f5;
+ border: 1px solid #828282;
+}
+
+QCheckBox::indicator {
+ width: 11px;
+ height: 11px;
+ border-radius:2px;
+}
+
+QRadioButton::indicator {
+ width: 11px;
+ height: 11px;
+ border-radius: 6px;
+}
+
+QRadioButton::indicator:pressed,
+QCheckBox::indicator:pressed,
+QCheckBox::indicator:non-exclusive:checked:pressed,
+QCheckBox::indicator:indeterminate:pressed,
+QCheckBox::indicator:checked:pressed {
+ border-color: #adc5ed;
+}
+
+QCheckBox::indicator:checked,
+QGroupBox::indicator:checked {
+ background-color: #3874f2;
+ border: 1px solid #1b3774;
+ image:url(icons/checkbox_light.png);
+}
+
+QCheckBox::indicator:disabled,
+QRadioButton::indicator:disabled {
+ border: 1px solid #b6b6b6;
+}
+
+QCheckBox:disabled,
+QRadioButton::indicator:disabled {
+ color: #b6b6b6;
+ background-color: transparent;
+}
+
+QCheckBox::indicator:disabled,
+QGroupBox::indicator:disabled,
+QMenu::indicator:non-exclusive:disabled {
+ background-color: #e6e6e6;
+}
+
+QCheckBox::indicator:indeterminate {
+ background-color: #3874f2;
+ border: 1px solid #1b3774;
+ image: url(icons/checkbox_indeterminate_light.png);
+}
+
+QCheckBox:focus,
+QRadioButton:focus {
+ border: none;
+}
+
+QFrame,
+QFrame:pressed,
+QFrame:focus,
+QFrame:on {
+ border: 1px solid #e6e6e6;
+ border-radius: 3px;
+ padding: 0px;
+}
+
+/* border and background of QComboBox drop-down */
+QComboBox QFrame,
+QComboBox QFrame:pressed,
+QComboBox QFrame:focus,
+QComboBox QFrame:on {
+ border: 1px solid #828282;
+ background-color: #828282;
+ padding: 0px;
+ margin: 0px;
+}
+
+QFrame[frameShape="0"] {
+ border-radius: 3px;
+}
+
+QFrame[height="3"],
+QFrame[width="3"] {
+ border-color: transparent;
+ background-color: transparent;
+}
+
+QFrame[height="3"] {
+ border-top-color: #b6b6b6;
+}
+
+QFrame[width="3"] {
+ border-left-color: #b6b6b6;
+}
+
+QPushButton {
+ color: #ffffff;
+ text-align: center;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #b6b6b6, stop:1 #e6e6e6);
+ border: 1px solid #828282;
+ padding: 5px 12px 5px 12px;
+ margin: 4px 8px 4px 8px;
+ border-radius: 3px;
+ min-width: 14px;
+ min-height: 14px;
+}
+
+QPushButton:hover,
+QPushButton:focus {
+ color: black;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+ border-color: #3874f2;
+}
+
+QPushButton:disabled,
+QPushButton:disabled:checked {
+ color: #b6b6b6;
+ background-color: #e6e6e6;
+ border-color: #b6b6b6;
+}
+
+QPushButton:pressed {
+ background-color: #3874f2;
+}
+
+QPushButton:checked {
+ background-color: #5e90fa;
+ border-color: #3874f2;
+}
+
+/* Color Buttons */
+Gui--ColorButton,
+Gui--ColorButton:disabled {
+ border-color: transparent;
+ background-color: transparent;
+ height: 24px;
+ padding: 0px;
+ margin: 0px;
+}
+
+Gui--ColorButton:hover {
+ border-color: #e0e0e0;
+ background-color: #e0e0e0;
+}
+
+/* Buttons inside the toolbar */
+QToolBar QPushButton {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #e0e0e0, stop:1 #e6e6e6);
+ border: 1px solid #b6b6b6;
+ min-width: 22px;
+ min-height: 22px;
+ margin-left: 2px;
+ margin-right: 2px;
+ margin-bottom: 3px; /*bigger margin to correctly separate buttons inside a vertical toolbar */
+ margin-top: 1px;
+ padding: 1px;
+}
+
+QToolBar QPushButton:hover,
+QToolBar QPushButton:focus {
+ color: #ffffff;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #e0e0e0, stop:1 #e6e6e6);
+ border: 1px solid #828282;
+}
+
+QToolBar QPushButton:disabled,
+QToolBar QPushButton:disabled:checked {
+ background-color: #e6e6e6;
+ border-color: #e0e0e0;
+}
+
+QToolBar QPushButton:pressed {
+ background-color: #b6b6b6;
+ border-color: #b6b6b6;
+}
+
+QToolBar QPushButton:checked {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.8, x2:1, y2:0, stop:0 #5e90fa, stop:1 #7cabf9);
+ border-color: #5e90fa;
+}
+
+QToolBar QPushButton:checked:hover,
+QToolBar QPushButton:checked:focus {
+ color: #ffffff;
+ border: 1px solid #3874f2;
+}
+
+QToolBar {
+ border: 1px transparent #393838;
+ background-color: #e6e6e6;
+ font-weight: bold;
+ margin: 0px;
+ padding: 0px;
+}
+
+QToolBar::handle:horizontal {
+ background-image: url(icons/Hmovetoolbar_dark.png);
+ width: 10px;
+ margin: 6px 2px 6px 2px;
+ background-position: top right;
+ background-repeat: repeat-y;
+}
+
+QToolBar::handle:vertical {
+ background-image: url(icons/Vmovetoolbar_dark.png);
+ height: 10px;
+ margin: 2px 6px 2px 6px;
+ background-position: left bottom;
+ background-repeat: repeat-x;
+}
+
+QToolBar::separator:horizontal {
+ background-image: url(icons/separtoolbar_dark.png);
+ width: 10px;
+ margin: 6px 2px 6px 2px;
+ background-position: center center;
+ background-repeat: repeat-y;
+}
+
+QToolBar::separator:vertical {
+ background-image: url(icons/separtoolbar_dark.png);
+ height: 10px;
+ margin: 2px 6px 2px 6px;
+ background-position: center center;
+ background-repeat: repeat-x;
+}
+
+QStackedWidget {
+ background-color: #e6e6e6;
+ border: 1px transparent #e6e6e6;
+}
+
+QAbstractSpinBox {
+ color: #ffffff;
+ border: 1px solid #b6b6b6; /* border top color defined after QAbstractSpinBox, QLineEdit and QComboBox */
+ background-color: #b6b6b6;
+ selection-color: black;
+ selection-background-color: #5e90fa;
+}
+
+QAbstractSpinBox:disabled {
+ color: #f5f5f5;
+ background-color: #e0e0e0;
+ border-color: #e0e0e0;
+}
+
+QAbstractSpinBox:up-button {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.8, x2:1, y2:0, stop:0 #6f9efa, stop:1 #7cabf9);
+ subcontrol-origin: border;
+ subcontrol-position: top right;
+ border-top-right-radius: 3px;
+ height: 13px;
+ width: 20px;
+}
+
+QAbstractSpinBox:down-button {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.8, x2:1, y2:0, stop:0 #5e90fa, stop:1 #6f9efa);
+ subcontrol-origin: border;
+ subcontrol-position: bottom right;
+ border-bottom-right-radius: 3px;
+ height: 13px;
+ width: 20px;
+}
+
+QAbstractSpinBox:up-button:disabled,
+QAbstractSpinBox:down-button:disabled {
+ background-color: transparent;
+}
+
+QAbstractSpinBox::up-arrow {
+ image: url(icons/up_arrow_light.png);
+ top: 0px; /* fix simetry between up and down images */
+}
+
+QAbstractSpinBox::up-arrow:hover {
+ image: url(icons/up_arrow_lighter.png);
+}
+
+QAbstractSpinBox::up-arrow:off {
+ image: url(icons/up_arrow_disabled_dark.png);
+}
+
+QAbstractSpinBox::up-arrow:disabled {
+ image: none;
+}
+
+QAbstractSpinBox::down-arrow {
+ image: url(icons/down_arrow_light.png);
+ bottom: -2px; /* fix simetry between up and down images */
+}
+QAbstractSpinBox::down-arrow:hover {
+ image: url(icons/down_arrow_lighter.png);
+}
+
+QAbstractSpinBox::down-arrow:off {
+ image: url(icons/down_arrow_disabled_dark.png);
+}
+
+QAbstractSpinBox::down-arrow:disabled {
+ image: none;
+}
+
+QToolBar QAbstractSpinBox {
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+QLineEdit {
+ color: #ffffff;
+ background-color: #b6b6b6;
+ selection-color: black;
+ selection-background-color: #5e90fa;
+ /* Padding and margin defined */
+ border-style: solid;
+ border: 1px solid #b6b6b6; /* border top color defined after QAbstractSpinBox, QLineEdit and QComboBox */
+ border-radius: 3px;
+}
+
+QAbstractSpinBox:focus,
+QLineEdit:focus,
+QComboBox:focus {
+ border-color: #7cabf9;
+}
+
+QComboBox {
+ color: #ffffff;
+ background-color: #b6b6b6;
+ selection-color: black;
+ selection-background-color: #5e90fa;
+ border: 1px solid #b6b6b6; /* border top color defined after QAbstractSpinBox, QLineEdit and QComboBox */
+ border-radius: 3px;
+}
+
+QComboBox:on {
+ color: black;
+ background-color: #b6b6b6;
+ border-color: #7cabf9;
+}
+
+QComboBox::drop-down {
+ subcontrol-origin: margin;
+ subcontrol-position: top right;
+ width: 20px;
+ border-left-width: 1px;
+ border-left-color: transparent;
+ border-left-style: solid;
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.8, x2:1, y2:0, stop:0 #5e90fa, stop:1 #7cabf9);
+}
+
+QComboBox::down-arrow {
+ image: url(icons/down_arrow_light.png);
+}
+
+QComboBox::down-arrow:on,
+QComboBox::down-arrow:hover,
+QComboBox::down-arrow:focus {
+ image: url(icons/down_arrow_lighter.png);
+}
+
+QComboBox QAbstractItemView {
+ color: #ffffff;
+ background-color: #828282;
+ border-radius: 3px;
+ margin: 0px;
+ padding: 0px;
+ border: none;
+}
+
+/* Common parameters for QAbstractSpinBox, QLineEdit and QComboBox */
+QSpinBox,
+QDoubleSpinBox,
+QAbstractSpinBox,
+QLineEdit,
+QComboBox {
+ border-top-color: #a2a2a0; /* Creates an inset effect inside the elements */
+ padding: 2px 6px 2px 6px; /* This makes text colour work on QComboBox */
+ margin: 0px 2px 0px 2px;
+ min-width: 70px; /* it was 120 because of QCombobox... */
+ border-radius: 3px;
+}
+/* end Common parameters */
+
+QAbstractItemView {
+ color: #828282;
+ alternate-background-color: #b3b8bf; /* related with QListView background */
+ border: 1px solid #828282;
+ border-radius: 3px;
+ padding: 0px;
+}
+
+/* hack to deactivate changing background color when focus (due to QFrame generic transparent color) */
+QAbstractItemView:selected,
+QAbstractItemView:on,
+QAbstractItemView:focus {
+ background-color: #bdc1c9; /* same as QTable background color */
+}
+
+/* hack to hide weird redundant information inside the value of a Placement cell */
+QTreeView QLabel,
+QTreeView QLabel:disabled {
+ color: transparent;
+ background-color: transparent;
+ border: none;
+ border-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+}
+
+QTreeView QLineEdit {
+ color: #ffffff;
+ border-color: #b6b6b6;
+ background-color: #b6b6b6;
+ selection-color: black;
+ selection-background-color: #5e90fa;
+}
+
+/* hack to hide non editable cells inside Property values */
+QTreeView QLineEdit:read-only,
+QTreeView QLineEdit:disabled,
+QTreeView QAbstractSpinBox:read-only,
+QTreeView QAbstractSpinBox:disabled {
+ color: transparent;
+ border-color: transparent;
+ background-color: transparent;
+ selection-color: transparent;
+ selection-background-color: transparent;
+}
+
+/* hack to disable margin inside Property values to following elements */
+QTreeView QSpinBox,
+QTreeView QDoubleSpinBox,
+QTreeView QAbstractSpinBox,
+QTreeView QLineEdit,
+QTreeView QComboBox {
+ margin-left: 0px;
+ margin-right: 0px;
+}
+
+/* Pushbutton style for "..." inside Placement cell which launches Placement tool */
+QTreeView QPushButton {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #b6b6b6, stop:1 #e6e6e6);
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+ border-left: 1px solid #b6b6b6;
+ border-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+ height: 24px;
+}
+
+/* Color Buttons inside the "Properties window" */
+QAbstractItemView Gui--ColorButton {
+ padding: 0px;
+ margin: 0px;
+ height: 10px;
+}
+
+QAbstractItemView QPushButton:hover {
+ color: black;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+ border-color: #3874f2;
+}
+
+QAbstractItemView QPushButton:disabled {
+ color: transparent;
+ background-color: transparent;
+ border-color: transparent;
+}
+
+QLabel {
+ border: 0px solid #828282;
+}
+
+QTabWidget{
+ border: none;
+}
+
+QTabWidget:focus {
+ border: none;
+}
+
+QTabWidget::pane {
+ border: none;
+ padding: 0px;
+ background-color: #e6e6e6;
+ position: absolute;
+ top: -15px;
+ padding-top: 15px;
+}
+
+QTabWidget::tab-bar {
+ alignment: center;
+}
+
+QTabBar {
+ qproperty-drawBase: 0;
+ left: 5px;
+ background-color: transparent;
+}
+
+QTabBar:focus {
+ border: 0px transparent black;
+}
+
+QTabBar::close-button {
+ padding: 0px;
+ margin: 0px;
+ border-radius: 2px;
+ background-image: url(icons/close_dark.png);
+ background-position: center center;
+ background-repeat: none;
+}
+
+QTabBar::close-button:hover {
+ background-color: #7cabf9;
+}
+
+QTabBar::close-button:pressed {
+ background-color: #adc5ed;
+}
+
+QTabBar::scroller { /* the width of the scroll buttons */
+ width: 20px;
+}
+
+/* the scroll buttons are tool buttons */
+QTabBar QToolButton,
+QTabBar QToolButton:hover {
+ margin-top: 4px;
+ margin-bottom: 4px;
+ margin-left: 0px;
+ margin-right: 0px;
+ padding: 0px;
+ border: none;
+ background-color: #e6e6e6;
+ border-radius: 0px;
+}
+
+QTabBar QToolButton::right-arrow:enabled {
+ image: url(icons/right_arrow_light.png);
+}
+
+QTabBar QToolButton::right-arrow:disabled,
+QTabBar QToolButton::right-arrow:off {
+ image: url(icons/right_arrow_disabled_dark.png);
+}
+
+QTabBar QToolButton::right-arrow:hover {
+ image: url(icons/right_arrow_lighter.png);
+}
+
+ QTabBar QToolButton::left-arrow:enabled {
+ image: url(icons/left_arrow_light.png);
+}
+
+ QTabBar QToolButton::left-arrow:disabled,
+ QTabBar QToolButton::left-arrow:off {
+ image: url(icons/left_arrow_disabled_dark.png);
+}
+
+ QTabBar QToolButton::left-arrow:hover {
+ image: url(icons/left_arrow_lighter.png);
+}
+
+ QTabBar QToolButton::up-arrow:enabled {
+ image: url(icons/up_arrow_light.png);
+}
+
+ QTabBar QToolButton::up-arrow:disabled,
+ QTabBar QToolButton::up-arrow:off {
+ image: url(icons/up_arrow_disabled_dark.png);
+}
+
+ QTabBar QToolButton::up-arrow:hover {
+ image: url(icons/up_arrow_lighter.png);
+}
+
+ QTabBar QToolButton::down-arrow:enabled {
+ image: url(icons/down_arrow_light.png);
+}
+
+ QTabBar QToolButton::down-arrow:disabled,
+ QTabBar QToolButton::down-arrow:off {
+ image: url(icons/down_arrow_disabled_dark.png);
+}
+
+ QTabBar QToolButton::down-arrow:hover {
+ image: url(icons/down_arrow_lighter.png);
+}
+
+/* TOP and BOTTOM TABS */
+QTabBar::tab:top,
+QTabBar::tab:bottom {
+ color: #ffffff;
+ border: 1px solid #b6b6b6;
+ border-left-color: #e6e6e6;
+ border-right-width: 0px;
+ background-color: #b6b6b6;
+ padding:5px 15px;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ position: center;
+}
+
+QTabBar::tab:top:first,
+QTabBar::tab:bottom:first {
+ border-top-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+}
+
+QTabBar::tab:top:last,
+QTabBar::tab:bottom:last {
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+ border-right-width: 1px;
+}
+
+QTabBar::tab:top:selected,
+QTabBar::tab:bottom:selected {
+ color: black;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+ border-color: #3874f2;
+}
+
+QTabBar::tab:top:!selected:hover,
+QTabBar::tab:bottom:!selected:hover {
+ color: black;
+}
+
+QTabBar::tab:top:only-one ,
+QTabBar::tab:bottom:only-one {
+ border: 1px solid #1b3774;
+ border-radius: 6px;
+}
+
+/* LEFT and RIGHT TABS */
+QTabBar::tab:left,
+QTabBar::tab:right {
+ color: #ffffff;
+ border: 1px solid #b6b6b6;
+ border-top-color: #e6e6e6;
+ border-bottom-width: 0px;
+ background-color: #b6b6b6;
+ padding: 15px 5px;
+ margin-left: 4px;
+ margin-right: 4px;
+ position: center;
+}
+
+QTabBar::tab:left:first,
+QTabBar::tab:right:first {
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+}
+
+QTabBar::tab:left:last,
+QTabBar::tab:right:last {
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+ border-bottom-width: 1px;
+}
+
+QTabBar::tab:left:selected,
+QTabBar::tab:right:selected {
+ color: black;
+ background-color: qlineargradient(spread:pad, x1:0.545, y1:1, x2:0, y2:1, stop:0 #3874f2, stop:1 #5e90fa);
+ border-color: #3874f2;
+}
+
+QTabBar::tab:left:!selected:hover,
+QTabBar::tab:right:!selected:hover {
+ color: black;
+}
+
+QTabBar::tab:left:only-one ,
+QTabBar::tab:right:only-one {
+ border: 1px solid #1b3774;
+ border-radius: 6px;
+}
+
+QDockWidget {
+ color: #828282;
+ border: 1px solid #e6e6e6;
+ titlebar-close-icon: url(icons/close_dark.png);
+ titlebar-normal-icon: url(icons/undock_dark.png);
+}
+
+QDockWidget::title {
+ text-align: center;
+ background-color: #e0e0e0;
+ padding: 4px;
+ border-radius: 4px;
+}
+
+QDockWidget::close-button,
+QDockWidget::float-button {
+ border: 1px transparent #e6e6e6;
+ border-radius: 2px;
+ background: transparent;
+ subcontrol-origin: padding;
+ subcontrol-position: right center;
+}
+
+QDockWidget::close-button {
+ right: 4px;
+}
+
+QDockWidget::float-button {
+ right: 22px;
+}
+
+QDockWidget::close-button:hover,
+QDockWidget::float-button:hover {
+ background: #f5f5f5;
+}
+
+QDockWidget::close-button:pressed,
+QDockWidget::float-button:pressed {
+ /*padding: 1px -1px -1px 1px;*/
+ background-color: #e0e0e0;
+}
+
+QTreeView,
+QListView {
+ color: #828282;
+ border: 1px solid #e6e6e6;
+ border-radius: 4px;
+ background-color: #bdc1c9; /* related with alternate-background-color*/
+ selection-color: black;
+ selection-background-color: #5e90fa; /* should be similar to QListView::item selected background-color */
+ show-decoration-selected: 1; /* make the selection span the entire width of the view */
+ padding: 0px;
+ margin: 0px 4px 0px 4px;
+ min-width: 130px; /* hack to correctly align Preferences icon list */
+}
+
+QListView,
+QListView::item,
+QListView QAbstractItemView {
+ margin: 0px;
+ icon-size: 20px; /* temporal */
+ paint-alternating-row-colors-for-empty-area: 1;
+ position: absolute;
+ subcontrol-origin: margin;
+ subcontrol-position: left top;
+}
+
+/* Control dropdown list margins of QComboBox */
+QComboBox QTreeView,
+QComboBox QListView {
+ margin: 0px;
+ padding: 0px;
+}
+
+QListView::item {
+ border: 0px transparent #e6e6e6;
+ border-radius: 4px;
+ background-color: transparent;
+ padding: 0px;
+ margin: 0px;
+ display: inline-block;
+ position: relative;
+}
+
+QListView::item:selected,
+QTreeView::item:selected {
+ color: black;
+ background-color: #5e90fa; /* should be similar to QListView selection-background-color */
+}
+
+/* Branch system */
+QTreeView::branch {
+ background: transparent;
+}
+
+QTreeView::branch:has-siblings:!adjoins-item {
+ border-image: url(icons/branch_vline.png) 0;
+}
+
+QTreeView::branch:has-siblings:adjoins-item {
+ border-image: url(icons/branch_more.png) 0;
+}
+
+QTreeView::branch:!has-children:!has-siblings:adjoins-item {
+ border-image: url(icons/branch_end.png) 0;
+}
+
+QTreeView::branch:closed:has-children:has-siblings {
+ image: url(icons/branch_closed_dark.png);
+}
+
+QTreeView::branch:has-children:!has-siblings:closed {
+ image: url(icons/branch_closed_dark.png);
+ border-image: url(icons/branch_end.png) 0;
+}
+
+QTreeView::branch:open:has-children:has-siblings {
+ image: url(icons/branch_open_dark.png);
+ border-image: url(icons/branch_more.png) 0;
+}
+
+QTreeView::branch:open:has-children:!has-siblings {
+ image: url(icons/branch_open_dark.png);
+ border-image: url(icons/branch_end.png) 0;
+}
+
+QSlider,
+QSlider:active,
+QSlider:!active {
+ border: none;
+ background-color: transparent;
+}
+
+QSlider:horizontal {
+ padding: 0px 10px;
+}
+
+QSlider:vertical {
+ padding: 10px 0px;
+}
+
+QSlider::groove:horizontal {
+ border: 1px solid #b6b6b6;
+ background-color: #b6b6b6;
+ height: 8px;
+ border-radius: 5px;
+ margin: 4px 0;
+}
+
+QSlider::groove:vertical {
+ border: 1px solid #b6b6b6;
+ background-color: #b6b6b6;
+ width: 8px;
+ border-radius: 5px;
+ margin: 4px 0;
+}
+
+QSlider::groove:horizontal:disabled,
+QSlider::groove:vertical:disabled {
+ border-color: #e0e0e0;
+ background-color: #e0e0e0;
+}
+
+QSlider::handle:horizontal,
+QSlider::handle:vertical {
+ background-color: #828282;
+ border: 1px solid #828282;
+ width: 14px;
+ height: 14px;
+ border-radius: 8px;
+}
+
+QSlider::handle:horizontal {
+ margin: -4px 0;
+}
+
+QSlider::handle:vertical {
+ margin: 0 -4px;
+}
+
+QSlider::handle:horizontal:hover,
+QSlider::handle:vertical:hover {
+ border-color: #3874f2;
+ background-color: #3874f2;
+}
+
+QSlider::handle:horizontal:pressed,
+QSlider::handle:vertical:pressed {
+ border-color: #1b3774;
+ background-color: #1b3774;
+}
+
+QSlider::handle:horizontal:disabled,
+QSlider::handle:vertical:disabled {
+ border-color: #b6b6b6;
+ background-color: #e6e6e6;
+}
+
+QToolButton {
+ color: #ffffff;
+ text-align: center;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #b6b6b6, stop:1 #e6e6e6);
+ border: 1px solid #828282;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-left: 15px;
+ padding-right: 15px;
+ margin-top: 5px;
+ margin-bottom: 5px;
+ margin-left: 10px;
+ margin-right: 10px;
+ border-radius: 3px;
+ outline: none;
+}
+
+QToolButton:hover,
+QToolButton:focus {
+ color: black;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+ border-color: #3874f2;
+}
+
+QToolButton:disabled,
+QToolButton:disabled:checked {
+ color: #b6b6b6;
+ background-color: #e6e6e6;
+ border-color: #b6b6b6;
+}
+
+QToolButton:pressed {
+ border-color: #7cabf9;
+}
+
+QToolButton:checked {
+ background-color: #5e90fa;
+ border-color: #3874f2;
+}
+
+QToolButton::menu-indicator {
+ subcontrol-origin: padding;
+ subcontrol-position: center right;
+ right: 4px;
+}
+
+/*The "show more" button (it can also be stylable with "QToolBarExtension" */
+QToolButton#qt_toolbar_ext_button {
+ border-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+ /*background-image: url(icons/more_dark.png);*/
+ image: transparent;
+ background-repeat: none;
+ background-position: center left;
+}
+
+QToolButton#qt_toolbar_ext_button:hover {
+ /*background-image: url(icons/more_light.png);*/
+ border-color: #e0e0e0;
+ background-color: #e0e0e0;
+}
+
+QToolButton#qt_toolbar_ext_button:on {
+ /*background-image: url(icons/more_light.png);*/
+ border-color: #e0e0e0;
+ background-color: #e0e0e0;
+}
+
+/*Buttons inside the Toolbar*/
+QToolBar QToolButton {
+ color: #828282;
+ background-color: #e6e6e6;
+ border: 1px transparent #e6e6e6;
+ border-radius: 3px;
+ margin: 0px;
+ padding: 2px;
+}
+
+QToolBar QToolButton:disabled {
+ background-color: #e6e6e6;
+}
+
+QToolBar QToolButton:checked {
+ color: #1b3774;
+ background-color: #5e90fa;
+ border: 1px solid #5e90fa;
+}
+
+QToolBar QToolButton:hover {
+ background-color: #e6e6e6;
+}
+
+QToolBar QToolButton:pressed,
+QToolBar QToolButton::menu-button:pressed {
+ background-color: #e0e0e0;
+ border: 1px solid #e0e0e0;
+}
+
+
+QToolBar QToolButton::menu-indicator:hover,
+QToolBar QToolButton::menu-indicator:pressed {
+ background-color: transparent;
+}
+
+/* the subcontrols below are used only in the MenuButtonPopup mode */
+QToolBar QToolButton::menu-button {
+ border: 1px transparent #4A4949;
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+ width: 16px; /* 16px width + 4px for border = 20px allocated above */
+ outline: none;
+ background-color: transparent;
+}
+
+QToolBar QToolButton::menu-button:hover,
+QToolBar QToolButton::menu-button:active,
+QToolBar QToolButton::menu-button:disabled {
+ border-color: transparent;
+ background-color: transparent;
+}
+
+QToolBar QToolButton::menu-arrow {
+ background-image: url(icons/down_arrow_light.png);
+ background-position: center center;
+ background-repeat: none;
+ subcontrol-origin: padding;
+ subcontrol-position: bottom right;
+ height: 10px; /* same as arrow image */
+}
+
+QToolBar QToolButton::menu-arrow:open {
+ background-image: url(icons/down_arrow_lighter.png);
+}
+
+QToolBar:tear {
+ color: blue;
+ background-color: red;
+}
+
+QTableView {
+ color: #828282;
+ border: 1px solid #b6b6b6;
+ gridline-color: #f5f5f5;
+ background-color: #bdc1c9;
+ selection-color: #828282;
+ selection-background-color: #adc5ed;
+ border-radius: 3px;
+ padding: 0px;
+ margin: 0px;
+}
+
+QTableView::item:hover {
+ background: #abb0b7;
+}
+
+QTableView::item:disabled {
+ color: #e6e6e6;
+}
+
+QTableView::item:selected {
+ color: #1b3774;
+ background-color: #7cabf9;
+}
+
+/* when editing a cell: */
+QTableView QLineEdit {
+ color: #828282;
+ background-color: #b3b8bf;
+ border-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+}
+
+QHeaderView {
+ border: none;
+ background-color: #828282;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+ border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+}
+
+QHeaderView::section {
+ background-color: transparent;
+ color: #ffffff;
+ border: 1px solid transparent;
+ border-radius: 0px;
+ text-align: center;
+}
+
+QHeaderView::section::vertical {
+ padding: 0px 6px 0px 6px;
+ border-bottom: 1px solid #b6b6b6;
+}
+
+QHeaderView::section::vertical:first {
+ border-top: 1px solid #b6b6b6;
+}
+
+QHeaderView::section::vertical:last {
+ border-bottom: none;
+}
+
+QHeaderView::section::vertical:only-one {
+ border: none;
+}
+
+QHeaderView::section::horizontal {
+ padding: 0px 0px 0px 6px;
+ border-right: 1px solid #b6b6b6;
+}
+
+QHeaderView::section::horizontal:first {
+ border-left: 1px solid #b6b6b6;
+}
+
+QHeaderView::section::horizontal:last {
+ border-left: none;
+}
+
+QHeaderView::section::horizontal:only-one {
+ border: none;
+}
+
+QDockWidget QHeaderView::section {
+ border-width: 6px 1px 6px 1px; /* hack to bigger margin for Model Panel table headers */
+}
+
+QHeaderView::section:checked {
+ color: #1b3774;
+ background-color: #7cabf9;
+}
+
+ /* style the sort indicator */
+QHeaderView::down-arrow {
+ image: url(icons/down_arrow_light.png);
+}
+
+QHeaderView::up-arrow {
+ image: url(icons/up_arrow_light.png);
+}
+
+QTableCornerButton::section {
+ background-color: #828282;
+ border: 1px solid #828282;
+ border-radius: 0px;
+}
+
+QToolBox {
+ padding: 3px;
+ color: #1b3774;
+ border: none;
+}
+
+QToolBox::tab { /* TODO */
+ color: #ffffff;
+ background-color: #b6b6b6;
+ border: 1px transparent #828282;
+ border-bottom: 1px transparent #b6b6b6;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ padding: 5px;
+}
+
+QToolBox::tab:selected { /* italicize selected tabs */
+ color: #1b3774;
+ font: italic;
+ background-color: #5e90fa;
+ border-color: #5e90fa;
+ }
+
+QStatusBar::item {
+ color: #ffffff;
+ background-color: #e6e6e6;
+ border: 1px solid #e6e6e6;
+ border-radius: 2px;
+}
+
+QSplitter::handle {
+ background-color: #e6e6e6;
+ margin: 0px 11px;
+ padding: 0px;
+ border-radius: 3px;
+}
+
+QSplitter::handle:vertical {
+ background-image: url(icons/splitter_horizontal_dark.png);
+ background-position: center center;
+ background-repeat: none;
+ margin: 2px 10px 2px 10px;
+ height: 2px;
+}
+
+QSplitter::handle:horizontal {
+ background-image: url(icons/splitter_horizontal_dark.png);
+ background-position: center center;
+ background-repeat: none;
+ margin: 10px 2px 10px 2px;
+ width: 2px;
+}
+
+QSplitter::handle:horizontal:hover,
+QSplitter::handle:vertical:hover {
+ background-color: #e6e6e6;
+}
+
+/* Similar to the splitter is the following window separator: */
+QMainWindow::separator {
+ border: 1px solid #e6e6e6;
+ background-color: #e6e6e6;
+ background-position: center center;
+ background-repeat: none;
+}
+
+QMainWindow::separator:hover {
+ background-color: #e6e6e6;
+}
+
+QMainWindow::separator:horizontal {
+ height: 4px;
+ background-image: url(icons/splitter_horizontal_dark.png);
+}
+
+QMainWindow::separator:vertical {
+ width: 4px;
+ background-image: url(icons/splitter_vertical_dark.png);
+}
+
+QLabel {
+ padding-top: 3px;
+ padding-bottom: 3px;
+ background-color: transparent;
+}
+
+QLabel:disabled {
+ color: #b6b6b6;
+ background-color: transparent;
+}
+
+/* Action group */
+QFrame[class="panel"] {
+ border: none;
+ background-color: #e6e6e6;
+}
+
+QSint--ActionGroup QFrame[class="header"] {
+ border: none;
+ background-color: #828282;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+ border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+}
+
+QSint--ActionGroup QFrame[class="header"]:hover {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+}
+
+QSint--ActionGroup QToolButton[class="header"] {
+ text-align: left;
+ font-weight: bold;
+ color: #ffffff;
+ background-color: transparent;
+ border: none;
+ margin: 0px;
+ padding: 0px;
+}
+
+QSint--ActionGroup QToolButton[class="header"]:hover {
+ color: black;
+}
+
+QSint--ActionGroup QFrame[class="header"] QLabel {
+ background-color: transparent;
+ background-image: url(icons/down_arrow_light.png);
+ background-repeat: none;
+ background-position: center center;
+ padding: 0px;
+ margin: 0px;
+}
+
+QSint--ActionGroup QFrame[class="header"] QLabel:hover {
+ background-color: transparent;
+ background-image: url(icons/down_arrow_lighter.png);
+}
+
+QSint--ActionGroup QFrame[class="header"] QLabel[fold="true"] {
+ background-color: transparent;
+ background-image: url(icons/up_arrow_light.png);
+ background-repeat: none;
+ background-position: center center;
+ padding: 0px;
+ margin: 0px;
+}
+
+QSint--ActionGroup QFrame[class="header"] QLabel[fold="true"]:hover {
+ background-color: transparent;
+ background-image: url(icons/up_arrow_lighter.png);
+}
+
+QSint--ActionGroup QFrame[class="content"] {
+ background-color: #bdc1c9;
+ margin: 0px;
+ padding: 0px;
+ border: none;
+ border-top-left-radius: 0px;
+ border-top-right-radius: 0px;
+ border-bottom-left-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+
+/* HACK
+This might not be the best way to reset the background color: */
+QSint--ActionGroup QFrame[class="content"] QWidget {
+ background-color: transparent;
+}
+
+QSint--ActionGroup QFrame[class="content"] QPushButton {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #b6b6b6, stop:1 #e6e6e6);
+}
+
+QSint--ActionGroup QFrame[class="content"] QPushButton:hover,
+QSint--ActionGroup QFrame[class="content"] QPushButton:focus {
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+}
+
+QSint--ActionGroup QFrame[class="content"] QPushButton:disabled,
+QSint--ActionGroup QFrame[class="content"] QPushButton:disabled:checked {
+ color: #bdc1c9;
+ border-color: #f5f5f5;
+ background-color: #f5f5f5;
+}
+QSint--ActionGroup QFrame[class="content"] QPushButton:checked {
+ background-color: #5e90fa;
+}
+
+QSint--ActionGroup QFrame[class="content"] QComboBox {
+ background-color: #b6b6b6;
+}
+
+QSint--ActionGroup QFrame[class="content"] QComboBox:on {
+ background-color: #b6b6b6;
+}
+
+QSint--ActionGroup QFrame[class="content"] QComboBox QAbstractItemView {
+ border-color: #828282;
+ background-color: #828282;
+}
+
+QSint--ActionGroup QFrame[class="content"] QListView {
+ border-color: #abb0b7;
+ background-color: #abb0b7;
+}
+
+QSint--ActionGroup QFrame[class="content"] QAbstractSpinBox {
+ background-color: #b6b6b6;
+}
+
+QSint--ActionGroup QFrame[class="content"] QLineEdit {
+ background-color: #b6b6b6;
+}
+
+QSint--ActionGroup QFrame[class="content"] QComboBox:disabled,
+QSint--ActionGroup QFrame[class="content"] QAbstractSpinBox:disabled,
+QSint--ActionGroup QFrame[class="content"] QLineEdit:disabled {
+ color: #bdc1c9;
+ border-color: #f5f5f5;
+ background-color: #f5f5f5;
+}
+
+QSint--ActionGroup QFrame[class="content"] QCheckBox:disabled,
+QSint--ActionGroup QFrame[class="content"] QRadioButton:disabled {
+ color: #f5f5f5;
+ border-color: #f5f5f5;
+}
+
+QSint--ActionGroup QFrame[class="content"] QCheckBox::indicator:disabled,
+QSint--ActionGroup QFrame[class="content"] QRadioButton::indicator:disabled {
+ border-color: #f5f5f5;
+ background-color: transparent;
+}
+
+QSint--ActionGroup QFrame[class="content"] QHeaderView {
+ border: none;
+ background-color: #828282;
+ border-radius: 0px;
+ margin: 0px;
+ padding: 0px;
+}
+
+QSint--ActionGroup QFrame[class="content"] QHeaderView::section {
+ background-color: transparent;
+ color: #ffffff;
+ border: 1px solid transparent;
+ border-radius: 0px;
+ text-align: center;
+}
+
+QSint--ActionGroup QFrame[class="content"] QHeaderView::section::horizontal {
+ padding: 6px 0px 6px 6px;
+ border-right: 1px solid #b6b6b6;
+}
+
+QSint--ActionGroup QFrame[class="content"] QHeaderView::section::horizontal:first {
+ border-left: 1px solid #e6e6e6;
+}
+
+QSint--ActionGroup QFrame[class="content"] QHeaderView::section::horizontal:last {
+ border-left: none;
+}
+
+QSint--ActionGroup QFrame[class="content"] QHeaderView::section::horizontal:only-one {
+ border: none;
+}
+/* enf of HACK */
+
+QSint--ActionGroup QToolButton[class="action"],
+QSint--ActionGroup QToolButton[class="action"]:enabled {
+ font-weight: bold;
+ color: #b6b6b6;
+}
+
+QSint--ActionGroup QToolButton[class="action"]:hover,
+QSint--ActionGroup QToolButton[class="action"]:enabled:hover {
+ text-decoration: none;
+ color: #828282;
+ background-color: #abb0b7;
+ border-color: #abb0b7;
+}
+
+QSint--ActionGroup QToolButton[class="action"]:disabled {
+ color: #e6e6e6;
+ background-color: #abb0b7;
+ border-color: #abb0b7;
+}
+
+QSint--ActionGroup QToolButton[class="action"]:focus,
+QSint--ActionGroup QToolButton[class="action"]:pressed
+QSint--ActionGroup QToolButton[class="action"]:enabled:focus,
+QSint--ActionGroup QToolButton[class="action"]:enabled:pressed {
+ color: black;
+ background-color: qlineargradient(spread:pad, x1:1, y1:0.545, x2:1, y2:0, stop:0 #3874f2, stop:1 #5e90fa);
+ border-color: #3874f2;
+}
+
+QSint--ActionGroup QToolButton[class="action"]:on {
+ background-color: red;
+ color: red;
+}
\ No newline at end of file
diff --git a/styles/machinery/icons/checkbox_inter_disabled.png b/styles/machinery/icons/checkbox_inter_disabled.png
new file mode 100644
index 0000000..59b558f
Binary files /dev/null and b/styles/machinery/icons/checkbox_inter_disabled.png differ
diff --git a/styles/machinery/icons/checkbox_inter_enabled.png b/styles/machinery/icons/checkbox_inter_enabled.png
new file mode 100644
index 0000000..7c3832a
Binary files /dev/null and b/styles/machinery/icons/checkbox_inter_enabled.png differ
diff --git a/styles/machinery/icons/checkbox_inter_enabled_hover.png b/styles/machinery/icons/checkbox_inter_enabled_hover.png
new file mode 100644
index 0000000..0fdae22
Binary files /dev/null and b/styles/machinery/icons/checkbox_inter_enabled_hover.png differ
diff --git a/styles/machinery/icons/checkbox_inter_enabled_pressed - copia.png b/styles/machinery/icons/checkbox_inter_enabled_pressed - copia.png
new file mode 100644
index 0000000..d74bfb5
Binary files /dev/null and b/styles/machinery/icons/checkbox_inter_enabled_pressed - copia.png differ
diff --git a/styles/machinery/icons/checkbox_inter_enabled_pressed.png b/styles/machinery/icons/checkbox_inter_enabled_pressed.png
new file mode 100644
index 0000000..d74bfb5
Binary files /dev/null and b/styles/machinery/icons/checkbox_inter_enabled_pressed.png differ
diff --git a/styles/machinery/icons/checkbox_off_disabled - copia.png b/styles/machinery/icons/checkbox_off_disabled - copia.png
new file mode 100644
index 0000000..40d3d3e
Binary files /dev/null and b/styles/machinery/icons/checkbox_off_disabled - copia.png differ
diff --git a/styles/machinery/icons/checkbox_off_disabled.png b/styles/machinery/icons/checkbox_off_disabled.png
new file mode 100644
index 0000000..40d3d3e
Binary files /dev/null and b/styles/machinery/icons/checkbox_off_disabled.png differ
diff --git a/styles/machinery/icons/checkbox_off_enabled - copia.png b/styles/machinery/icons/checkbox_off_enabled - copia.png
new file mode 100644
index 0000000..33d7c00
Binary files /dev/null and b/styles/machinery/icons/checkbox_off_enabled - copia.png differ
diff --git a/styles/machinery/icons/checkbox_off_enabled.png b/styles/machinery/icons/checkbox_off_enabled.png
new file mode 100644
index 0000000..33d7c00
Binary files /dev/null and b/styles/machinery/icons/checkbox_off_enabled.png differ
diff --git a/styles/machinery/icons/checkbox_off_enabled_hover - copia.png b/styles/machinery/icons/checkbox_off_enabled_hover - copia.png
new file mode 100644
index 0000000..0426ceb
Binary files /dev/null and b/styles/machinery/icons/checkbox_off_enabled_hover - copia.png differ
diff --git a/styles/machinery/icons/checkbox_off_enabled_hover.png b/styles/machinery/icons/checkbox_off_enabled_hover.png
new file mode 100644
index 0000000..0426ceb
Binary files /dev/null and b/styles/machinery/icons/checkbox_off_enabled_hover.png differ
diff --git a/styles/machinery/icons/checkbox_off_enabled_pressed.png b/styles/machinery/icons/checkbox_off_enabled_pressed.png
new file mode 100644
index 0000000..2cbebd9
Binary files /dev/null and b/styles/machinery/icons/checkbox_off_enabled_pressed.png differ
diff --git a/styles/machinery/icons/checkbox_on_disabled.png b/styles/machinery/icons/checkbox_on_disabled.png
new file mode 100644
index 0000000..f24110a
Binary files /dev/null and b/styles/machinery/icons/checkbox_on_disabled.png differ
diff --git a/styles/machinery/icons/checkbox_on_enabled.png b/styles/machinery/icons/checkbox_on_enabled.png
new file mode 100644
index 0000000..2c35819
Binary files /dev/null and b/styles/machinery/icons/checkbox_on_enabled.png differ
diff --git a/styles/machinery/icons/checkbox_on_enabled_hover - copia.png b/styles/machinery/icons/checkbox_on_enabled_hover - copia.png
new file mode 100644
index 0000000..1f123be
Binary files /dev/null and b/styles/machinery/icons/checkbox_on_enabled_hover - copia.png differ
diff --git a/styles/machinery/icons/checkbox_on_enabled_hover.png b/styles/machinery/icons/checkbox_on_enabled_hover.png
new file mode 100644
index 0000000..1f123be
Binary files /dev/null and b/styles/machinery/icons/checkbox_on_enabled_hover.png differ
diff --git a/styles/machinery/icons/checkbox_on_enabled_pressed - copia.png b/styles/machinery/icons/checkbox_on_enabled_pressed - copia.png
new file mode 100644
index 0000000..fb19bdc
Binary files /dev/null and b/styles/machinery/icons/checkbox_on_enabled_pressed - copia.png differ
diff --git a/styles/machinery/icons/checkbox_on_enabled_pressed.png b/styles/machinery/icons/checkbox_on_enabled_pressed.png
new file mode 100644
index 0000000..fb19bdc
Binary files /dev/null and b/styles/machinery/icons/checkbox_on_enabled_pressed.png differ
diff --git a/styles/machinery/icons/gamelist-bg - copia.png b/styles/machinery/icons/gamelist-bg - copia.png
new file mode 100644
index 0000000..8ef8c2e
Binary files /dev/null and b/styles/machinery/icons/gamelist-bg - copia.png differ
diff --git a/styles/machinery/icons/gamelist-bg.png b/styles/machinery/icons/gamelist-bg.png
new file mode 100644
index 0000000..8ef8c2e
Binary files /dev/null and b/styles/machinery/icons/gamelist-bg.png differ
diff --git a/styles/machinery/icons/menu_indicator.png b/styles/machinery/icons/menu_indicator.png
new file mode 100644
index 0000000..3b35b6f
Binary files /dev/null and b/styles/machinery/icons/menu_indicator.png differ
diff --git a/styles/machinery/icons/menu_indicator_disabled.png b/styles/machinery/icons/menu_indicator_disabled.png
new file mode 100644
index 0000000..4bbe21b
Binary files /dev/null and b/styles/machinery/icons/menu_indicator_disabled.png differ
diff --git a/styles/machinery/icons/radiobutton_off_disabled.png b/styles/machinery/icons/radiobutton_off_disabled.png
new file mode 100644
index 0000000..fd8c6a1
Binary files /dev/null and b/styles/machinery/icons/radiobutton_off_disabled.png differ
diff --git a/styles/machinery/icons/radiobutton_off_enabled.png b/styles/machinery/icons/radiobutton_off_enabled.png
new file mode 100644
index 0000000..a78fc23
Binary files /dev/null and b/styles/machinery/icons/radiobutton_off_enabled.png differ
diff --git a/styles/machinery/icons/radiobutton_off_enabled_hover.png b/styles/machinery/icons/radiobutton_off_enabled_hover.png
new file mode 100644
index 0000000..3e3a10c
Binary files /dev/null and b/styles/machinery/icons/radiobutton_off_enabled_hover.png differ
diff --git a/styles/machinery/icons/radiobutton_off_enabled_pressed.png b/styles/machinery/icons/radiobutton_off_enabled_pressed.png
new file mode 100644
index 0000000..1874fce
Binary files /dev/null and b/styles/machinery/icons/radiobutton_off_enabled_pressed.png differ
diff --git a/styles/machinery/icons/radiobutton_on_disabled.png b/styles/machinery/icons/radiobutton_on_disabled.png
new file mode 100644
index 0000000..3238c95
Binary files /dev/null and b/styles/machinery/icons/radiobutton_on_disabled.png differ
diff --git a/styles/machinery/icons/radiobutton_on_enabled.png b/styles/machinery/icons/radiobutton_on_enabled.png
new file mode 100644
index 0000000..4a5ab10
Binary files /dev/null and b/styles/machinery/icons/radiobutton_on_enabled.png differ
diff --git a/styles/machinery/icons/radiobutton_on_enabled_hover.png b/styles/machinery/icons/radiobutton_on_enabled_hover.png
new file mode 100644
index 0000000..6255d11
Binary files /dev/null and b/styles/machinery/icons/radiobutton_on_enabled_hover.png differ
diff --git a/styles/machinery/icons/radiobutton_on_enabled_pressed.png b/styles/machinery/icons/radiobutton_on_enabled_pressed.png
new file mode 100644
index 0000000..90b8d62
Binary files /dev/null and b/styles/machinery/icons/radiobutton_on_enabled_pressed.png differ
diff --git a/styles/machinery/icons/spin_down_disabled.png b/styles/machinery/icons/spin_down_disabled.png
new file mode 100644
index 0000000..0002c1c
Binary files /dev/null and b/styles/machinery/icons/spin_down_disabled.png differ
diff --git a/styles/machinery/icons/spin_down_enabled.png b/styles/machinery/icons/spin_down_enabled.png
new file mode 100644
index 0000000..0cbd35f
Binary files /dev/null and b/styles/machinery/icons/spin_down_enabled.png differ
diff --git a/styles/machinery/icons/spin_down_enabled_hover.png b/styles/machinery/icons/spin_down_enabled_hover.png
new file mode 100644
index 0000000..cb67385
Binary files /dev/null and b/styles/machinery/icons/spin_down_enabled_hover.png differ
diff --git a/styles/machinery/icons/spin_down_enabled_pressed.png b/styles/machinery/icons/spin_down_enabled_pressed.png
new file mode 100644
index 0000000..a47a62f
Binary files /dev/null and b/styles/machinery/icons/spin_down_enabled_pressed.png differ
diff --git a/styles/machinery/icons/spin_up_disabled.png b/styles/machinery/icons/spin_up_disabled.png
new file mode 100644
index 0000000..b004098
Binary files /dev/null and b/styles/machinery/icons/spin_up_disabled.png differ
diff --git a/styles/machinery/icons/spin_up_enabled.png b/styles/machinery/icons/spin_up_enabled.png
new file mode 100644
index 0000000..416607b
Binary files /dev/null and b/styles/machinery/icons/spin_up_enabled.png differ
diff --git a/styles/machinery/icons/spin_up_enabled_hover.png b/styles/machinery/icons/spin_up_enabled_hover.png
new file mode 100644
index 0000000..cf70faf
Binary files /dev/null and b/styles/machinery/icons/spin_up_enabled_hover.png differ
diff --git a/styles/machinery/icons/spin_up_enabled_pressed.png b/styles/machinery/icons/spin_up_enabled_pressed.png
new file mode 100644
index 0000000..52d04aa
Binary files /dev/null and b/styles/machinery/icons/spin_up_enabled_pressed.png differ
diff --git a/styles/machinery/machinery.qss b/styles/machinery/machinery.qss
new file mode 100644
index 0000000..034d2b6
--- /dev/null
+++ b/styles/machinery/machinery.qss
@@ -0,0 +1,366 @@
+/*
+ qmc2-machinery: v0.3, 10-SEP-2010, rene.reucher@batcom-it.net
+
+ Qt style sheet compatible with QMC2 0.2.b13+
+
+ http://qmc2.arcadehits.net/wordpress/style-sheets/
+
+ This style sheet is based on the work of an unknown author from ii-system.com:
+
+ http://ii-system.com/soft/devzone/Qt%20Vista%20Style%20test.2007.12.24.zip
+ http://ii-system.com/soft/devzone/devzone_en.htm
+
+ Changes:
+
+ v0.3 - updated to 0.2.b17
+ v0.2 - updated to 0.2.b15
+ v0.1 - initial version
+*/
+
+QMenuBar {
+ background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #fcfdfe, stop:0.5 #cfd7eb stop:1 #e9ecfa);
+}
+
+QMenuBar::item {
+ background: transparent;
+}
+
+QMenuBar::item:selected {
+ border: 1px solid #f5f6fa;
+ border-radius: 3px;
+ background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #f0f0f0 stop:0.5 #ffffff stop:1 #e9ecfa);
+}
+
+QMenuBar::item:pressed {
+ border: 1px solid grey;
+ border-radius: 3px;
+}
+
+QMenu {
+ background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #fcfdfe, stop:0.5 #cfd7eb stop:1 #e9ecfa);
+ border: 1px solid #979797;
+}
+
+QMenu::item {
+ margin-left: 2px;
+ margin-right: 2px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ padding-left: 20px;
+ padding-right: 10px;
+}
+
+QMenu::item:selected {
+ border: 1px solid #a7dbff;
+ border-radius: 3px;
+ background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #f1f1f1 stop:1 #e4f0f5);
+ margin-left: 2px;
+ margin-right: 2px;
+ padding-left: 20px;
+ padding-right: 10px;
+}
+
+QMenu::indicator:unchecked {
+ border-radius: 3px;
+}
+
+QMenu::indicator:checked:enabled {
+ border: 1px solid #a7dbff;
+ border-radius: 3px;
+ background-color: #e6eff4;
+ image: url(icons/menu_indicator.png)
+}
+
+QMenu::indicator:checked:!enabled {
+ image: url(icons/menu_indicator_disabled.png)
+}
+
+QMenu::separator {
+ height: 1px;
+ margin-left: 2px;
+ margin-right: 2px;
+ margin-top: 2px;
+ margin-bottom: 2px;
+ background-color: #a0a0a0;
+}
+
+QToolBar {
+ background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #9fc6df, stop:0.5 #256894 stop:1 #77c5cb);
+}
+
+QToolBar QToolButton {
+ background: transparent;
+ color: white;
+}
+
+QToolBar QToolButton:hover:enabled {
+ border: 1px solid grey;
+ border-radius: 3px;
+ background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #f0f0f0 stop:0.5 #054874 stop:1 #6fc9ca);
+}
+
+QToolBar QToolButton:pressed {
+ border: 1px solid grey;
+ border-radius: 3px;
+ background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #c0c0d0 stop:0.5 #054874 stop:1 #377277);
+}
+
+QToolBar QToolButton:on {
+ border: 1px solid grey;
+ border-radius: 3px;
+ background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #c0c0d0 stop:0.5 #054874 stop:1 #377277);
+}
+
+QGroupBox {
+ border-top: 1px solid gray;
+ margin-top: 6px;
+}
+
+QGroupBox::title {
+ subcontrol-origin: margin;
+ subcontrol-position: top left;
+ padding: 0 3px;
+}
+
+QGroupBox::indicator {
+ width: 13px;
+ height: 13px;
+}
+
+QGroupBox::indicator:unchecked {
+ image: url(icons/checkbox_off_enabled.png);
+}
+
+QGroupBox::indicator:unchecked:!enabled {
+ image: url(icons/checkbox_off_disabled.png);
+}
+
+QGroupBox::indicator:unchecked:hover {
+ image: url(icons/checkbox_off_enabled_hover.png);
+}
+
+QGroupBox::indicator:unchecked:pressed {
+ image: url(icons/checkbox_off_enabled_pressed.png);
+}
+
+QGroupBox::indicator:checked {
+ image: url(icons/checkbox_on_enabled.png);
+}
+
+QGroupBox::indicator:checked:!enabled {
+ image: url(icons/checkbox_on_disabled.png);
+}
+
+QGroupBox::indicator:checked:hover {
+ image: url(icons/checkbox_on_enabled_hover.png);
+}
+
+QGroupBox::indicator:checked:pressed {
+ image: url(icons/checkbox_on_enabled_pressed.png);
+}
+
+QGroupBox::indicator:indeterminate:hover {
+ image: url(icons/checkbox_inter_enabled_hover.png);
+}
+
+QGroupBox::indicator:indeterminate {
+ image: url(icons/checkbox_inter_enabled.png);
+}
+
+QGroupBox::indicator:indeterminate:!enabled {
+ image: url(icons/checkbox_inter_disabled.png);
+}
+
+QCheckBox {
+ spacing: 5px;
+}
+
+QCheckBox::indicator {
+ width: 13px;
+ height: 13px;
+}
+
+QCheckBox::indicator:unchecked {
+ image: url(icons/checkbox_off_enabled.png);
+}
+
+QCheckBox::indicator:unchecked:!enabled {
+ image: url(icons/checkbox_off_disabled.png);
+}
+
+QCheckBox::indicator:unchecked:hover {
+ image: url(icons/checkbox_off_enabled_hover.png);
+}
+
+QCheckBox::indicator:unchecked:pressed {
+ image: url(icons/checkbox_off_enabled_pressed.png);
+}
+
+QCheckBox::indicator:checked {
+ image: url(icons/checkbox_on_enabled.png);
+}
+
+QCheckBox::indicator:checked:!enabled {
+ image: url(icons/checkbox_on_disabled.png);
+}
+
+QCheckBox::indicator:checked:hover {
+ image: url(icons/checkbox_on_enabled_hover.png);
+}
+
+QCheckBox::indicator:checked:pressed {
+ image: url(icons/checkbox_on_enabled_pressed.png);
+}
+
+QCheckBox::indicator:indeterminate:hover {
+ image: url(icons/checkbox_inter_enabled_hover.png);
+}
+
+QCheckBox::indicator:indeterminate {
+ image: url(icons/checkbox_inter_enabled.png);
+}
+
+QCheckBox::indicator:indeterminate:!enabled {
+ image: url(icons/checkbox_inter_disabled.png);
+}
+
+QRadioButton {
+ spacing: 5px;
+}
+
+QRadioButton::indicator {
+ width: 12px;
+ height: 12px;
+}
+
+QRadioButton::indicator:unchecked {
+ image: url(icons/radiobutton_off_enabled.png);
+}
+
+QRadioButton::indicator:checked {
+ image: url(icons/radiobutton_on_enabled.png);
+}
+
+QRadioButton::indicator:checked:hover {
+ image: url(icons/radiobutton_on_enabled_hover.png);
+}
+
+QRadioButton::indicator:checked:pressed {
+ image: url(icons/radiobutton_on_enabled_pressed.png);
+}
+
+QRadioButton::indicator:unchecked:!enabled {
+ image: url(icons/radiobutton_off_disabled.png);
+}
+
+QRadioButton::indicator:checked:!enabled {
+ image: url(icons/radiobutton_on_disabled.png);
+}
+
+QRadioButton::indicator:unchecked:hover {
+ image: url(icons/radiobutton_off_enabled_hover.png);
+}
+
+QRadioButton::indicator:unchecked:pressed {
+ image: url(icons/radiobutton_off_enabled_pressed.png);
+}
+
+QLineEdit, QTextEdit, QSpinBox, QDoubleSpinBox {
+ border-top: 1px solid #abadb3;
+ border-right: 1px solid #abadb3;
+ border-left: 1px solid #e3e9ef;
+ border-bottom: 1px solid #e3e9ef;
+ border-radius: 2px;
+ background: white;
+ selection-background-color: #3399ff;
+ min-height: 23 px;
+}
+
+QLineEdit:!enabled, QTextEdit:!enabled, QSpinBox:!enabled, QDoubleSpinBox:!enabled {
+ border: 1px solid #afafaf;
+ border-radius: 2px;
+ background: white;
+ color: #afafaf;
+ selection-background-color: #3399ff;
+}
+
+QLineEdit:hover:enabled, QTextEdit:hover:enabled, QSpinBox:hover:enabled, QDoubleSpinBox:hover:enabled {
+ border-top: 1px solid #3d7bad;
+ border-right: 1px solid #3d7bad;
+ border-left: 1px solid #b7d9ed;
+ border-bottom: 1px solid #b7d9ed;
+}
+
+QSpinBox, QDoubleSpinBox {
+ padding-right: 18px;
+}
+
+QSpinBox::up-button:!enabled, QDoubleSpinBox::up-button:!enabled,
+QSpinBox::up-arrow:off, QDoubleSpinBox::up-arrow:off {
+ border-image: url(icons/spin_up_disabled.png) 1;
+}
+
+QSpinBox::down-button:!enabled, QDoubleSpinBox::down-button:!enabled,
+QSpinBox::down-arrow:off, QDoubleSpinBox::down-arrow:off {
+ border-image: url(icons/spin_down_disabled.png) 1;
+}
+
+QSpinBox::up-button:hover:enabled, QDoubleSpinBox::up-button:hover:enabled {
+ border-image: url(icons/spin_up_enabled_hover.png) 1;
+}
+
+QSpinBox::up-button:pressed:enabled, QDoubleSpinBox::up-button:pressed:enabled {
+ border-image: url(icons/spin_up_enabled_pressed.png) 1;
+}
+
+QSpinBox::down-button:hover:enabled, QDoubleSpinBox::down-button:hover:enabled {
+ border-image: url(icons/spin_down_enabled_hover.png) 1;
+}
+
+QSpinBox::down-button:pressed:enabled, QDoubleSpinBox::down-button:pressed:enabled {
+ border-image: url(icons/spin_down_enabled_pressed.png) 1;
+}
+
+QSpinBox::up-button, QDoubleSpinBox::up-button {
+ subcontrol-origin: border;
+ subcontrol-position: top right;
+ width: 16px;
+ border-width: 2px;
+ border-bottom-width: 0;
+ border-image: url(icons/spin_up_enabled.png) 1;
+}
+
+QSpinBox::down-button, QDoubleSpinBox::down-button {
+ subcontrol-origin: border;
+ subcontrol-position: bottom right;
+ width: 16px;
+ border-width: 2px;
+ border-top-width: 0;
+ border-image: url(icons/spin_down_enabled.png) 1;
+}
+
+QFrame {
+ border: 1px solid #828790;
+}
+
+QLabel {
+ border: 0px
+}
+
+QLabel#labelLogoPixmap {
+ background: black;
+}
+
+QLabel#labelLoadingGamelist,
+QLabel#labelLoadingHierarchy,
+QLabel#labelCreatingCategoryView,
+QLabel#labelCreatingVersionView,
+QListWidget#listWidgetFavorites,
+QListWidget#listWidgetPlayed,
+QListWidget#listWidgetSearch,
+QTreeWidget#treeWidgetCategoryView,
+QTreeWidget#treeWidgetVersionView,
+QTreeWidget#treeWidgetGamelist,
+QTreeWidget#treeWidgetHierarchy {
+ border-image: url(icons/gamelist-bg.png) repeat;
+}
diff --git a/styles/macos/macos.qss b/styles/macos/macos.qss
new file mode 100644
index 0000000..9a98622
--- /dev/null
+++ b/styles/macos/macos.qss
@@ -0,0 +1,434 @@
+/*
+ * MacOS Style Sheet for QT Applications
+ * Author: Jaime A. Quiroga P.
+ * Company: GTRONICK
+ * Last updated: 25/12/2020, 23:10.
+ * Available at: https://github.com/GTRONICK/QSS/blob/master/MacOS.qss
+ */
+QMainWindow {
+ background-color:#ececec;
+}
+QPushButton, QToolButton, QCommandLinkButton{
+ padding: 0 5px 0 5px;
+ border-style: solid;
+ border-top-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #c1c9cf, stop:1 #d2d8dd);
+ border-right-color: qlineargradient(spread:pad, x1:1, y1:0, x2:0, y2:0, stop:0 #c1c9cf, stop:1 #d2d8dd);
+ border-bottom-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 #c1c9cf, stop:1 #d2d8dd);
+ border-left-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 #c1c9cf, stop:1 #d2d8dd);
+ border-width: 2px;
+ border-radius: 8px;
+ color: #616161;
+ font-weight: bold;
+ background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #fbfdfd, stop:0.5 #ffffff, stop:1 #fbfdfd);
+}
+QPushButton::default, QToolButton::default, QCommandLinkButton::default{
+ border: 2px solid transparent;
+ color: #FFFFFF;
+ background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #84afe5, stop:1 #1168e4);
+}
+QPushButton:hover, QToolButton:hover, QCommandLinkButton:hover{
+ color: #3d3d3d;
+}
+QPushButton:pressed, QToolButton:pressed, QCommandLinkButton:pressed{
+ color: #aeaeae;
+ background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #ffffff, stop:0.5 #fbfdfd, stop:1 #ffffff);
+}
+QPushButton:disabled, QToolButton:disabled, QCommandLinkButton:disabled{
+ color: #616161;
+ background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #dce7eb, stop:0.5 #e0e8eb, stop:1 #dee7ec);
+}
+QLineEdit, QTextEdit, QPlainTextEdit, QSpinBox, QDoubleSpinBox, QTimeEdit, QDateEdit, QDateTimeEdit {
+ border-width: 2px;
+ border-radius: 8px;
+ border-style: solid;
+ border-top-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 #c1c9cf, stop:1 #d2d8dd);
+ border-right-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 #c1c9cf, stop:1 #d2d8dd);
+ border-bottom-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #c1c9cf, stop:1 #d2d8dd);
+ border-left-color: qlineargradient(spread:pad, x1:1, y1:0, x2:0, y2:0, stop:0 #c1c9cf, stop:1 #d2d8dd);
+ background-color: #f4f4f4;
+ color: #3d3d3d;
+}
+QLineEdit:focus, QTextEdit:focus, QPlainTextEdit:focus, QSpinBox:focus, QDoubleSpinBox:focus, QTimeEdit:focus, QDateEdit:focus, QDateTimeEdit:focus {
+ border-width: 2px;
+ border-radius: 8px;
+ border-style: solid;
+ border-top-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 #85b7e3, stop:1 #9ec1db);
+ border-right-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 #85b7e3, stop:1 #9ec1db);
+ border-bottom-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #85b7e3, stop:1 #9ec1db);
+ border-left-color: qlineargradient(spread:pad, x1:1, y1:0, x2:0, y2:0, stop:0 #85b7e3, stop:1 #9ec1db);
+ background-color: #f4f4f4;
+ color: #3d3d3d;
+}
+QLineEdit:disabled, QTextEdit:disabled, QPlainTextEdit:disabled, QSpinBox:disabled, QDoubleSpinBox:disabled, QTimeEdit:disabled, QDateEdit:disabled, QDateTimeEdit:disabled {
+ color: #b9b9b9;
+}
+QSpinBox::up-button, QDoubleSpinBox::up-button, QTimeEdit::up-button, QDateEdit::up-button, QDateTimeEdit::up-button {
+ subcontrol-origin: padding;
+ subcontrol-position: top right;
+ width: 15px;
+ color: #272727;
+ border-left-width: 1px;
+ border-left-color: darkgray;
+ border-left-style: solid;
+ border-top-right-radius: 3px;
+ padding: 3px;
+}
+QSpinBox::down-button, QDoubleSpinBox::down-button, QTimeEdit::down-button, QDateEdit::down-button, QDateTimeEdit::down-button {
+ subcontrol-origin: padding;
+ subcontrol-position: bottom right;
+ width: 15px;
+ color: #272727;
+ border-left-width: 1px;
+ border-left-color: darkgray;
+ border-left-style: solid;
+ border-bottom-right-radius: 3px;
+ padding: 3px;
+}
+QSpinBox::up-button:pressed, QDoubleSpinBox::up-button:pressed, QTimeEdit::up-button:pressed, QDateEdit::up-button:pressed, QDateTimeEdit::up-button:pressed {
+ color: #aeaeae;
+ background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #ffffff, stop:0.5 #fbfdfd, stop:1 #ffffff);
+}
+QSpinBox::down-button:pressed, QDoubleSpinBox::down-button:pressed, QTimeEdit::down-button:pressed, QDateEdit::down-button:pressed, QDateTimeEdit::down-button:pressed {
+ color: #aeaeae;
+ background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #ffffff, stop:0.5 #fbfdfd, stop:1 #ffffff);
+}
+QSpinBox::up-button:hover, QDoubleSpinBox::up-button:hover, QTimeEdit::up-button:hover, QDateEdit::up-button:hover, QDateTimeEdit::up-button:hover {
+ color: #FFFFFF;
+ border-top-right-radius: 5px;
+ background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #84afe5, stop:1 #1168e4);
+
+}
+QSpinBox::down-button:hover, QDoubleSpinBox::down-button:hover, QTimeEdit::down-button:hover, QDateEdit::down-button:hover, QDateTimeEdit::down-button:hover {
+ color: #FFFFFF;
+ border-bottom-right-radius: 5px;
+ background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #84afe5, stop:1 #1168e4);
+}
+QSpinBox::up-arrow, QDoubleSpinBox::up-arrow, QTimeEdit::up-arrow, QDateEdit::up-arrow, QDateTimeEdit::up-arrow {
+ image: url(/usr/share/icons/Adwaita/16x16/actions/go-up-symbolic.symbolic.png);
+}
+QSpinBox::down-arrow, QDoubleSpinBox::down-arrow, QTimeEdit::down-arrow, QDateEdit::down-arrow, QDateTimeEdit::down-arrow {
+ image: url(/usr/share/icons/Adwaita/16x16/actions/go-down-symbolic.symbolic.png);
+}
+QProgressBar {
+ max-height: 8px;
+ text-align: center;
+ font: italic bold 11px;
+ color: #3d3d3d;
+ border: 1px solid transparent;
+ border-radius:4px;
+ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #ddd5d5, stop:0.5 #dad3d3, stop:1 #ddd5d5);
+}
+QProgressBar::chunk {
+ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #467dd1, stop:0.5 #3b88fc, stop:1 #467dd1);
+ border-radius: 4px;
+}
+QProgressBar:disabled {
+ color: #616161;
+}
+QProgressBar::chunk:disabled {
+ background-color: #aeaeae;
+}
+QSlider::groove {
+ border: 1px solid #bbbbbb;
+ background-color: #52595d;
+ border-radius: 4px;
+}
+QSlider::groove:horizontal {
+ height: 6px;
+}
+QSlider::groove:vertical {
+ width: 6px;
+}
+QSlider::handle:horizontal {
+ background: #ffffff;
+ border-style: solid;
+ border-width: 1px;
+ border-color: rgb(207,207,207);
+ width: 12px;
+ margin: -5px 0;
+ border-radius: 7px;
+}
+QSlider::handle:vertical {
+ background: #ffffff;
+ border-style: solid;
+ border-width: 1px;
+ border-color: rgb(207,207,207);
+ height: 12px;
+ margin: 0 -5px;
+ border-radius: 7px;
+}
+QSlider::add-page, QSlider::sub-page {
+ border: 1px transparent;
+ background-color: #52595d;
+ border-radius: 4px;
+}
+QSlider::add-page:horizontal {
+ background: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #ddd5d5, stop:0.5 #dad3d3, stop:1 #ddd5d5);
+}
+QSlider::sub-page:horizontal {
+ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 #467dd1, stop:0.5 #3b88fc, stop:1 #467dd1);
+}
+QSlider::add-page:vertical {
+ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #467dd1, stop:0.5 #3b88fc, stop:1 #467dd1);
+}
+QSlider::sub-page:vertical {
+ background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 #ddd5d5, stop:0.5 #dad3d3, stop:1 #ddd5d5);
+}
+QSlider::add-page:horizontal:disabled, QSlider::sub-page:horizontal:disabled, QSlider::add-page:vertical:disabled, QSlider::sub-page:vertical:disabled {
+ background: #b9b9b9;
+}
+QComboBox, QFontComboBox {
+ border-width: 2px;
+ border-radius: 8px;
+ border-style: solid;
+ border-top-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0, stop:0 #c1c9cf, stop:1 #d2d8dd);
+ border-right-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 #c1c9cf, stop:1 #d2d8dd);
+ border-bottom-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #c1c9cf, stop:1 #d2d8dd);
+ border-left-color: qlineargradient(spread:pad, x1:1, y1:0, x2:0, y2:0, stop:0 #c1c9cf, stop:1 #d2d8dd);
+ background-color: #f4f4f4;
+ color: #272727;
+ padding-left: 5px;
+}
+QComboBox:editable, QComboBox:!editable, QComboBox::drop-down:editable, QComboBox:!editable:on, QComboBox::drop-down:editable:on {
+ background: #ffffff;
+}
+QComboBox::drop-down {
+ subcontrol-origin: padding;
+ subcontrol-position: top right;
+ width: 15px;
+ color: #272727;
+ border-left-width: 1px;
+ border-left-color: darkgray;
+ border-left-style: solid;
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+QComboBox::down-arrow {
+ image: url(/usr/share/icons/Adwaita/16x16/actions/go-down-symbolic.symbolic.png); /*Adawaita icon thene*/
+}
+
+QComboBox::down-arrow:on {
+ top: 1px;
+ left: 1px;
+}
+QComboBox QAbstractItemView {
+ border: 1px solid darkgray;
+ border-radius: 8px;
+ selection-background-color: #dadada;
+ selection-color: #272727;
+ color: #272727;
+ background: white;
+}
+QLabel, QCheckBox, QRadioButton {
+ color: #272727;
+}
+QCheckBox {
+ padding: 2px;
+}
+QCheckBox:disabled, QRadioButton:disabled {
+ color: #808086;
+ padding: 2px;
+}
+
+QCheckBox:hover {
+ border-radius:4px;
+ border-style:solid;
+ padding-left: 1px;
+ padding-right: 1px;
+ padding-bottom: 1px;
+ padding-top: 1px;
+ border-width:1px;
+ border-color: transparent;
+}
+QCheckBox::indicator:checked {
+ image: url(/usr/share/icons/Adwaita/16x16/actions/object-select-symbolic.symbolic.png);
+ height: 15px;
+ width: 15px;
+ border-style:solid;
+ border-width: 1px;
+ border-color: #48a5fd;
+ color: #ffffff;
+ border-radius: 3px;
+ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #48a5fd, stop:0.5 #329cfb, stop:1 #48a5fd);
+}
+QCheckBox::indicator:unchecked {
+
+ height: 15px;
+ width: 15px;
+ border-style:solid;
+ border-width: 1px;
+ border-color: #48a5fd;
+ border-radius: 3px;
+ background-color: #fbfdfa;
+}
+QLCDNumber {
+ color: #616161;;
+}
+QMenuBar {
+ background-color: #ececec;
+}
+QMenuBar::item {
+ color: #616161;
+ spacing: 3px;
+ padding: 1px 4px;
+ background-color: #ececec;
+}
+
+QMenuBar::item:selected {
+ background-color: #dadada;
+ color: #3d3d3d;
+}
+QMenu {
+ background-color: #ececec;
+}
+QMenu::item:selected {
+ background-color: #dadada;
+ color: #3d3d3d;
+}
+QMenu::item {
+ color: #616161;;
+ background-color: #e0e0e0;
+}
+QTabWidget {
+ color:rgb(0,0,0);
+ background-color:#000000;
+}
+QTabWidget::pane {
+ border-color: #050a0e;
+ background-color: #e0e0e0;
+ border-width: 1px;
+ border-radius: 4px;
+ position: absolute;
+ top: -0.5em;
+ padding-top: 0.5em;
+}
+
+QTabWidget::tab-bar {
+ alignment: center;
+}
+
+QTabBar::tab {
+ border-bottom: 1px solid #c0c0c0;
+ padding: 3px;
+ color: #272727;
+ background-color: #fefefc;
+ margin-left:0px;
+}
+QTabBar::tab:!last {
+ border-right: 1px solid;
+ border-right-color: #c0c0c0;
+ border-bottom-color: #c0c0c0;
+}
+QTabBar::tab:first {
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+QTabBar::tab:last {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+QTabBar::tab:selected, QTabBar::tab:last:selected, QTabBar::tab:hover {
+ color: #FFFFFF;
+ background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.5, y2:1, stop:0 #84afe5, stop:1 #1168e4);
+}
+QRadioButton::indicator {
+ height: 14px;
+ width: 14px;
+ border-style:solid;
+ border-radius:7px;
+ border-width: 1px;
+}
+QRadioButton::indicator:checked {
+ border-color: #48a5fd;
+ background-color: qradialgradient(cx:0.5, cy:0.5, radius:0.4,fx:0.5, fy:0.5, stop:0 #ffffff, stop:0.5 #ffffff, stop:0.6 #48a5fd, stop:1 #48a5fd);
+}
+QRadioButton::indicator:!checked {
+ border-color: #a9b7c6;
+ background-color: #fbfdfa;
+}
+QStatusBar {
+ color:#027f7f;
+}
+
+QDial {
+ background: #16a085;
+}
+
+QToolBox {
+ color: #a9b7c6;
+ background-color: #222b2e;
+}
+QToolBox::tab {
+ color: #a9b7c6;
+ background-color:#222b2e;
+}
+QToolBox::tab:selected {
+ color: #FFFFFF;
+ background-color:#222b2e;
+}
+QScrollArea {
+ color: #FFFFFF;
+ background-color:#222b2e;
+}
+
+QScrollBar:horizontal {
+ max-height: 10px;
+ border: 1px transparent grey;
+ margin: 0px 20px 0px 20px;
+ background: transparent;
+}
+QScrollBar:vertical {
+ max-width: 10px;
+ border: 1px transparent grey;
+ margin: 20px 0px 20px 0px;
+ background: transparent;
+}
+QScrollBar::handle:vertical, QScrollBar::handle:horizontal {
+ background: #52595d;
+ border-style: transparent;
+ border-radius: 4px;
+ min-height: 25px;
+}
+QScrollBar::handle:horizontal:hover, QScrollBar::handle:vertical:hover {
+ background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 #467dd1, stop:0.5 #3b88fc, stop:1 #467dd1);
+}
+QScrollBar::add-line, QScrollBar::sub-line {
+ border: 2px transparent grey;
+ border-radius: 4px;
+ subcontrol-origin: margin;
+ background: #b9b9b9;
+}
+QScrollBar::add-line:horizontal {
+ width: 20px;
+ subcontrol-position: right;
+}
+QScrollBar::add-line:vertical {
+ height: 20px;
+ subcontrol-position: bottom;
+}
+QScrollBar::sub-line:horizontal {
+ width: 20px;
+ subcontrol-position: left;
+}
+QScrollBar::sub-line:vertical {
+ height: 20px;
+ subcontrol-position: top;
+}
+QScrollBar::add-line:vertical:pressed, QScrollBar::add-line:horizontal:pressed, QScrollBar::sub-line:horizontal:pressed, QScrollBar::sub-line:vertical:pressed {
+ background: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 #467dd1, stop:0.5 #3b88fc, stop:1 #467dd1);
+}
+QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal, QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
+ background: none;
+}
+QScrollBar::up-arrow:vertical {
+ image: url(/usr/share/icons/Adwaita/16x16/actions/go-up-symbolic.symbolic.png);
+}
+QScrollBar::down-arrow:vertical {
+ image: url(/usr/share/icons/Adwaita/16x16/actions/go-down-symbolic.symbolic.png);
+}
+QScrollBar::left-arrow:horizontal {
+ image: url(/usr/share/icons/Adwaita/16x16/actions/go-previous-symbolic.symbolic.png);
+}
+QScrollBar::right-arrow:horizontal {
+ image: url(/usr/share/icons/Adwaita/16x16/actions/go-next-symbolic.symbolic.png);
+}
diff --git a/styles/wombat/icons/caret-down_ffffff_14.png b/styles/wombat/icons/caret-down_ffffff_14.png
new file mode 100644
index 0000000..6add5a4
Binary files /dev/null and b/styles/wombat/icons/caret-down_ffffff_14.png differ
diff --git a/styles/wombat/icons/caret-right_ffffff_14.png b/styles/wombat/icons/caret-right_ffffff_14.png
new file mode 100644
index 0000000..3c46502
Binary files /dev/null and b/styles/wombat/icons/caret-right_ffffff_14.png differ
diff --git a/styles/wombat/icons/check.png b/styles/wombat/icons/check.png
new file mode 100644
index 0000000..0726b78
Binary files /dev/null and b/styles/wombat/icons/check.png differ
diff --git a/styles/wombat/icons/cross.svg b/styles/wombat/icons/cross.svg
new file mode 100644
index 0000000..ee86af6
--- /dev/null
+++ b/styles/wombat/icons/cross.svg
@@ -0,0 +1,59 @@
+
+
+
+
diff --git a/styles/wombat/icons/down_arrow.png b/styles/wombat/icons/down_arrow.png
new file mode 100644
index 0000000..db581cb
Binary files /dev/null and b/styles/wombat/icons/down_arrow.png differ
diff --git a/styles/wombat/icons/eye-blocked.svg b/styles/wombat/icons/eye-blocked.svg
new file mode 100644
index 0000000..2d87d53
--- /dev/null
+++ b/styles/wombat/icons/eye-blocked.svg
@@ -0,0 +1,67 @@
+
+
+
+
diff --git a/styles/wombat/icons/eye.svg b/styles/wombat/icons/eye.svg
new file mode 100644
index 0000000..5a10d73
--- /dev/null
+++ b/styles/wombat/icons/eye.svg
@@ -0,0 +1,56 @@
+
+
+
+
diff --git a/styles/wombat/wombat.qss b/styles/wombat/wombat.qss
new file mode 100644
index 0000000..53d2e79
--- /dev/null
+++ b/styles/wombat/wombat.qss
@@ -0,0 +1,516 @@
+/* author = Nathan Woodrow */
+
+QToolTip
+{
+ border: 1px solid #222;
+ background-color: #333;
+ color: #aaa;
+}
+
+QWidget
+{
+ color: #aaa;
+ background-color: #323232;
+}
+
+
+QWidget:item:hover
+{
+ background-color: #507098;
+ color: #aaa;
+}
+
+QWidget:item:selected
+{
+ background-color: #507098;
+}
+
+QMenuBar {
+ background-color: #323232;
+}
+
+QMenuBar::item
+{
+ background: transparent;
+}
+
+QMenuBar::item:selected
+{
+ /*
+ background: transparent;
+ border: 1px solid #ffaa00;
+ */
+ background: #444;
+}
+
+QMenuBar::item:pressed
+{
+ border: 1px solid #000;
+ background-color: #444;
+ margin-bottom:-1px;
+ padding-bottom:1px;
+}
+
+/* ==================================================================================== */
+/* MENU */
+/* ==================================================================================== */
+
+QMenu
+{
+ background: #444;
+ border: 1px solid #222;
+ padding: 4px;
+ padding-right: 0px;
+}
+
+QMenu::item
+{
+ background: transparent;
+ padding: 2px 20px 2px 20px;
+}
+
+QMenu::item:disabled
+{
+ color: #555;
+ background: transparent;
+ padding: 2px 20px 2px 20px;
+}
+
+
+QMenu::item:selected
+{
+ background-color: #507098;
+ color: #aaa;
+}
+
+QWidget:disabled
+{
+ color: #404040;
+ background-color: #323232;
+}
+
+QLineEdit
+{
+ padding: 1px;
+ border: 1px solid #111;
+ background-color: #888;
+ color: #111;
+}
+
+QPushButton
+{
+ color: #b1b1b1;
+/* background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #565656, stop: 0.1 #525252, stop: 0.5 #4e4e4e, stop: 0.9 #4a4a4a, stop: 1 #464646);*/
+ border-width: 1px;
+ border-color: #1e1e1e;
+ border-style: solid;
+ padding: 3px;
+ font-size: 12px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+QPushButton:pressed
+{
+/* background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #2d2d2d, stop: 0.1 #2b2b2b, stop: 0.5 #292929, stop: 0.9 #282828, stop: 1 #252525);*/
+}
+
+/* ==================================================================================== */
+/* COMBO BOX */
+/* ==================================================================================== */
+
+QComboBox {
+ selection-background-color: #ffaa00;
+ background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #565656, stop: 0.1 #525252, stop: 0.5 #4e4e4e, stop: 0.9 #4a4a4a, stop: 1 #464646);
+ border-style: solid;
+ border: 1px solid #1e1e1e;
+}
+
+QComboBox:hover,QPushButton:hover {
+ background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #565656,
+ stop: 0.1 #525252,
+ stop: 0.5 #4e4e4e,
+ stop: 0.9 #4a4a4a,
+ stop: 1 #464646);
+}
+
+
+QComboBox:on {
+ padding-top: 1px;
+ padding-left: 3px;
+ background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1,
+ stop: 0 #555,
+ stop: 0.1 #4C4C4C,
+ stop: 0.5 #464646,
+ stop: 0.9 #414141,
+ stop: 1 #444);
+ selection-background-color: #ffaa00;
+}
+
+QComboBox QAbstractItemView {
+ border: 1px solid #222;
+ selection-background-color: #507098;
+}
+
+QComboBox::drop-down {
+ subcontrol-origin: padding;
+ subcontrol-position: top right;
+ width: 15px;
+ border: 0px;
+ }
+
+QComboBox::down-arrow
+{
+ image: url(icons/down_arrow.png);
+}
+QLineEdit:focus
+{
+ border: 2px solid QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);
+}
+
+
+QTextEdit:focus
+{
+ border: 2px solid QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);
+}
+
+/* ==================================================================================== */
+/* SCROLL BAR */
+/* ==================================================================================== */
+
+QScrollBar:horizontal {
+ background-color: #333;
+ height: 8px;
+ margin: 0px;
+ padding: 0px;
+}
+
+QScrollBar::handle:horizontal {
+ border: 1px solid #111;
+ background: #535353;
+}
+
+QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal,
+QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
+ width: 0px;
+ background: transparent;
+}
+
+QScrollBar:vertical {
+ background-color: #333;
+ width: 8px;
+ margin: 0;
+}
+
+QScrollBar::handle:vertical {
+ border: 1px solid #111;
+ background: #535353;
+}
+
+QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical,
+QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
+ height: 0px;
+ background: transparent;
+}
+
+
+QTextEdit
+{
+ background-color: #242424;
+}
+
+QPlainTextEdit
+{
+ background-color: #242424;
+}
+
+QSizeGrip
+{
+ width: 1px;
+}
+
+QHeaderView::section
+{
+ /*background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #616161, stop: 0.5 #505050, stop: 0.6 #434343, stop:1 #656565);*/
+ color: white;
+ padding-left: 4px;
+ border: 1px solid #6c6c6c;
+}
+QDockWidget
+{
+ titlebar-close-icon: url(icons/cross.svg);
+}
+
+QDockWidget::separator
+{
+ border: 1px solid red;
+}
+
+QDockWidget::title
+{
+ text-align: center;
+ spacing: 3px; /* spacing between items in the tool bar */
+ background-color: #323232;
+ font-weight: bold;
+}
+
+QDockWidget::close-button, QDockWidget::float-button
+{
+ text-align: center;
+ spacing: 1px; /* spacing between items in the tool bar */
+}
+
+QDockWidget::close-button:hover, QDockWidget::float-button:hover
+{
+ background: #242424;
+}
+
+QDockWidget::close-button:pressed, QDockWidget::float-button:pressed
+{
+ padding: 1px -1px -1px 1px;
+}
+
+QMainWindow::separator
+{
+ /*background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #161616, stop: 0.5 #151515, stop: 0.6 #212121, stop:1 #343434);*/
+ color: white;
+ padding-left: 4px;
+ border: 0px solid #4c4c4c;
+ spacing: 3px; /* spacing between items in the tool bar */
+}
+
+QMainWindow::separator:hover
+{
+
+ /*background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #d7801a, stop:0.5 #b56c17 stop:1 #ffa02f);*/
+ color: white;
+ padding-left: 4px;
+ border: 1px solid #6c6c6c;
+ spacing: 3px; /* spacing between items in the tool bar */
+}
+
+QToolBar {
+ background: #323232;
+ border: 1px solid #323232;
+ font-weight: bold;
+}
+
+QToolBar::handle:horizontal
+{
+ image: url(:/qss_icons/rc/Hmovetoolbar.png);
+}
+
+QToolBar::handle:vertical
+{
+ image: url(:/qss_icons/rc/Vmovetoolbar.png);
+}
+
+QToolBar::separator:horizontal
+{
+ image: url(:/qss_icons/rc/Hsepartoolbar.png);
+}
+
+QToolBar::separator:vertical
+{
+ image: url(:/qss_icons/rc/Vsepartoolbars.png);
+}
+
+QMenu::separator
+{
+ height: 2px;
+ /*
+ background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #161616, stop: 0.5 #151515, stop: 0.6 #212121, stop:1 #343434);
+ */
+ color: white;
+ padding-left: 4px;
+ margin-left: 10px;
+ margin-right: 5px;
+}
+
+QProgressBar
+{
+ border: 2px solid grey;
+ text-align: center;
+}
+
+QProgressBar::chunk
+{
+ background-color: #d7801a;
+ width: 2.15px;
+ margin: 0.5px;
+}
+
+QTabBar::tab {
+ color: #b1b1b1;
+ border: 1px solid #444;
+ border-bottom-style: none;
+ background-color: #323232;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-top: 3px;
+ padding-bottom: 2px;
+ margin-right: -1px;
+}
+
+QTabWidget::pane {
+ border: 1px solid #444;
+ top: 1px;
+}
+
+QTabBar::tab:last
+{
+ margin-right: 0; /* the last selected tab has nothing to overlap with on the right */
+}
+
+QTabBar::tab:first:!selected
+{
+ margin-left: 0px; /* the last selected tab has nothing to overlap with on the right */
+}
+
+QTabBar::tab:!selected
+{
+ color: #b1b1b1;
+ border-bottom-style: solid;
+ margin-top: 3px;
+ /*background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:1 #212121, stop:.4 #343434);*/
+}
+
+QTabBar::tab:selected
+{
+ margin-bottom: 0px;
+}
+
+QTabBar::tab:!selected:hover
+{
+ /*border-top: 2px solid #ffaa00;
+ padding-bottom: 3px;*/
+ /*background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:1 #212121, stop:0.4 #343434, stop:0.2 #343434, stop:0.1 #ffaa00);*/
+}
+
+/* ==================================================================================== */
+/* RADIO BUTTON */
+/* ==================================================================================== */
+
+QGroupBox::indicator:unchecked,
+QGroupBox::indicator:checked,
+QCheckBox::indicator:checked,
+QCheckBox::indicator:unchecked,
+QRadioButton::indicator:checked,
+QRadioButton::indicator:unchecked{
+ color: #b1b1b1;
+ background-color: #323232;
+ border: 1px solid #b1b1b1;
+}
+
+QGroupBox::indicator:checked,
+QCheckBox::indicator:checked,
+QRadioButton::indicator:checked {
+ background-color: qradialgradient(
+ cx: 0.5, cy: 0.5,
+ fx: 0.5, fy: 0.5,
+ radius: 1.0,
+ stop: 0.25 #ffaa00,
+ stop: 0.3 #323232
+ );
+}
+
+QRadioButton::indicator
+{
+}
+
+QGroupBox::indicator:hover,
+QCheckBox::indicator:hover,
+QRadioButton::indicator:hover
+{
+ border: 1px solid #ffaa00;
+}
+
+/* ==================================================================================== */
+/* CHECKBOX */
+/* ==================================================================================== */
+
+QAbstractItemView
+{
+ background-color: #222;
+ alternate-background-color: #323232;
+ color: silver;
+ border: none;
+ border-radius: 3px;
+ padding: 1px;
+}
+
+QAbstractItemView::selected {
+ border: 0px;
+ outline: none;
+}
+
+/* ==================================================================================== */
+/* TREE VIEW */
+/* ==================================================================================== */
+
+QTreeView {
+ border: 0.5px solid rgba(108,108,108,75);
+}
+
+QTreeView::item, QTreeView::branch {
+ background: transparent;
+ color: #DDD;
+}
+
+QTreeView::item:hover, QTreeView::branch:hover {
+ background-color: #507098;
+ color: #DDD;
+}
+
+QTreeView::item:selected, QTreeView::branch:selected {
+ background-color: #507098;
+ color: #DDD;
+}
+
+QTreeView::branch:has-children:!has-siblings:closed,
+QTreeView::branch:closed:has-children:has-siblings {
+ border-image: none;
+ image: url(icons/caret-right_ffffff_14.png);
+}
+
+QTreeView::branch:open:has-children:!has-siblings,
+QTreeView::branch:open:has-children:has-siblings {
+ border-image: none;
+ image: url(icons/caret-down_ffffff_14.png);
+}
+
+QgsLayerTreeView
+{
+}
+
+QgsLayerTreeView::item
+{
+ border-top: 0.5px solid rgba(108,108,108,50);
+ border-bottom: 0.5px solid rgba(108,108,108,50);
+ padding: 3px;
+}
+
+QgsLayerTreeView::indicator:unchecked{
+ image: url(icons/eye-blocked.svg);
+}
+
+QgsLayerTreeView::indicator:checked {
+ image: url(icons/eye.svg);
+}
+
+/* ==================================================================================== */
+/* TABLE VIEW */
+/* ==================================================================================== */
+
+QHeaderView {
+}
+
+QHeaderView::section {
+ background: transparent;
+ background-color: #323232;
+ color: #777;
+ border-right: 0px solid #777;
+ border-top: 0px solid #777;
+ padding: 0 0 2px 3px
+}
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/qgis_interface.py b/tests/qgis_interface.py
new file mode 100644
index 0000000..3a65ed5
--- /dev/null
+++ b/tests/qgis_interface.py
@@ -0,0 +1,205 @@
+# coding=utf-8
+"""QGIS plugin implementation.
+
+.. note:: This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+.. note:: This source code was copied from the 'postgis viewer' application
+ with original authors:
+ Copyright (c) 2010 by Ivan Mincik, ivan.mincik@gista.sk
+ Copyright (c) 2011 German Carrillo, geotux_tuxman@linuxmail.org
+ Copyright (c) 2014 Tim Sutton, tim@linfiniti.com
+
+"""
+
+__author__ = 'tim@linfiniti.com'
+__revision__ = '$Format:%H$'
+__date__ = '10/01/2011'
+__copyright__ = (
+ 'Copyright (c) 2010 by Ivan Mincik, ivan.mincik@gista.sk and '
+ 'Copyright (c) 2011 German Carrillo, geotux_tuxman@linuxmail.org'
+ 'Copyright (c) 2014 Tim Sutton, tim@linfiniti.com'
+)
+
+import logging
+from PyQt5.QtCore import QObject, pyqtSlot, pyqtSignal
+from qgis.core import QgsMapLayerRegistry
+from qgis.gui import QgsMapCanvasLayer
+LOGGER = logging.getLogger('QGIS')
+
+
+#noinspection PyMethodMayBeStatic,PyPep8Naming
+class QgisInterface(QObject):
+ """Class to expose QGIS objects and functions to plugins.
+
+ This class is here for enabling us to run unit tests only,
+ so most methods are simply stubs.
+ """
+ currentLayerChanged = pyqtSignal(QgsMapCanvasLayer)
+
+ def __init__(self, canvas):
+ """Constructor
+ :param canvas:
+ """
+ QObject.__init__(self)
+ self.canvas = canvas
+ # Set up slots so we can mimic the behaviour of QGIS when layers
+ # are added.
+ LOGGER.debug('Initialising canvas...')
+ # noinspection PyArgumentList
+ QgsMapLayerRegistry.instance().layersAdded.connect(self.addLayers)
+ # noinspection PyArgumentList
+ QgsMapLayerRegistry.instance().layerWasAdded.connect(self.addLayer)
+ # noinspection PyArgumentList
+ QgsMapLayerRegistry.instance().removeAll.connect(self.removeAllLayers)
+
+ # For processing module
+ self.destCrs = None
+
+ @pyqtSlot('QStringList')
+ def addLayers(self, layers):
+ """Handle layers being added to the registry so they show up in canvas.
+
+ :param layers: list list of map layers that were added
+
+ .. note:: The QgsInterface api does not include this method,
+ it is added here as a helper to facilitate testing.
+ """
+ #LOGGER.debug('addLayers called on qgis_interface')
+ #LOGGER.debug('Number of layers being added: %s' % len(layers))
+ #LOGGER.debug('Layer Count Before: %s' % len(self.canvas.layers()))
+ current_layers = self.canvas.layers()
+ final_layers = []
+ for layer in current_layers:
+ final_layers.append(QgsMapCanvasLayer(layer))
+ for layer in layers:
+ final_layers.append(QgsMapCanvasLayer(layer))
+
+ self.canvas.setLayerSet(final_layers)
+ #LOGGER.debug('Layer Count After: %s' % len(self.canvas.layers()))
+
+ @pyqtSlot('QgsMapLayer')
+ def addLayer(self, layer):
+ """Handle a layer being added to the registry so it shows up in canvas.
+
+ :param layer: list list of map layers that were added
+
+ .. note: The QgsInterface api does not include this method, it is added
+ here as a helper to facilitate testing.
+
+ .. note: The addLayer method was deprecated in QGIS 1.8 so you should
+ not need this method much.
+ """
+ pass
+
+ @pyqtSlot()
+ def removeAllLayers(self):
+ """Remove layers from the canvas before they get deleted."""
+ self.canvas.setLayerSet([])
+
+ def newProject(self):
+ """Create new project."""
+ # noinspection PyArgumentList
+ QgsMapLayerRegistry.instance().removeAllMapLayers()
+
+ # ---------------- API Mock for QgsInterface follows -------------------
+
+ def zoomFull(self):
+ """Zoom to the map full extent."""
+ pass
+
+ def zoomToPrevious(self):
+ """Zoom to previous view extent."""
+ pass
+
+ def zoomToNext(self):
+ """Zoom to next view extent."""
+ pass
+
+ def zoomToActiveLayer(self):
+ """Zoom to extent of active layer."""
+ pass
+
+ def addVectorLayer(self, path, base_name, provider_key):
+ """Add a vector layer.
+
+ :param path: Path to layer.
+ :type path: str
+
+ :param base_name: Base name for layer.
+ :type base_name: str
+
+ :param provider_key: Provider key e.g. 'ogr'
+ :type provider_key: str
+ """
+ pass
+
+ def addRasterLayer(self, path, base_name):
+ """Add a raster layer given a raster layer file name
+
+ :param path: Path to layer.
+ :type path: str
+
+ :param base_name: Base name for layer.
+ :type base_name: str
+ """
+ pass
+
+ def activeLayer(self):
+ """Get pointer to the active layer (layer selected in the legend)."""
+ # noinspection PyArgumentList
+ layers = QgsMapLayerRegistry.instance().mapLayers()
+ for item in layers:
+ return layers[item]
+
+ def addToolBarIcon(self, action):
+ """Add an icon to the plugins toolbar.
+
+ :param action: Action to add to the toolbar.
+ :type action: QAction
+ """
+ pass
+
+ def removeToolBarIcon(self, action):
+ """Remove an action (icon) from the plugin toolbar.
+
+ :param action: Action to add to the toolbar.
+ :type action: QAction
+ """
+ pass
+
+ def addToolBar(self, name):
+ """Add toolbar with specified name.
+
+ :param name: Name for the toolbar.
+ :type name: str
+ """
+ pass
+
+ def mapCanvas(self):
+ """Return a pointer to the map canvas."""
+ return self.canvas
+
+ def mainWindow(self):
+ """Return a pointer to the main window.
+
+ In case of QGIS it returns an instance of QgisApp.
+ """
+ pass
+
+ def addDockWidget(self, area, dock_widget):
+ """Add a dock widget to the main window.
+
+ :param area: Where in the ui the dock should be placed.
+ :type area:
+
+ :param dock_widget: A dock widget to add to the UI.
+ :type dock_widget: QDockWidget
+ """
+ pass
+
+ def legendInterface(self):
+ """Get the legend."""
+ return self.canvas
diff --git a/tests/test_init.py b/tests/test_init.py
new file mode 100644
index 0000000..a11ca44
--- /dev/null
+++ b/tests/test_init.py
@@ -0,0 +1,64 @@
+# coding=utf-8
+"""Tests QGIS plugin init."""
+
+__author__ = 'Tim Sutton '
+__revision__ = '$Format:%H$'
+__date__ = '17/10/2010'
+__license__ = "GPL"
+__copyright__ = 'Copyright 2012, Australia Indonesia Facility for '
+__copyright__ += 'Disaster Reduction'
+
+import os
+import unittest
+import logging
+import configparser
+
+LOGGER = logging.getLogger('QGIS')
+
+
+class TestInit(unittest.TestCase):
+ """Test that the plugin init is usable for QGIS.
+
+ Based heavily on the validator class by Alessandro
+ Passoti available here:
+
+ http://github.com/qgis/qgis-django/blob/master/qgis-app/
+ plugins/validator.py
+
+ """
+
+ def test_read_init(self):
+ """Test that the plugin __init__ will validate on plugins.qgis.org."""
+
+ # You should update this list according to the latest in
+ # https://github.com/qgis/qgis-django/blob/master/qgis-app/
+ # plugins/validator.py
+
+ required_metadata = [
+ 'name',
+ 'description',
+ 'version',
+ 'qgisMinimumVersion',
+ 'email',
+ 'author']
+
+ file_path = os.path.abspath(os.path.join(
+ os.path.dirname(__file__), os.pardir,
+ 'metadata.txt'))
+ LOGGER.info(file_path)
+ metadata = []
+ parser = configparser.ConfigParser()
+ parser.optionxform = str
+ parser.read(file_path)
+ message = 'Cannot find a section named "general" in %s' % file_path
+ assert parser.has_section('general'), message
+ metadata.extend(parser.items('general'))
+
+ for expectation in required_metadata:
+ message = ('Cannot find metadata "%s" in metadata source (%s).' % (
+ expectation, file_path))
+
+ self.assertIn(expectation, dict(metadata), message)
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/tests/test_qgis_environment.py b/tests/test_qgis_environment.py
new file mode 100644
index 0000000..125ddee
--- /dev/null
+++ b/tests/test_qgis_environment.py
@@ -0,0 +1,54 @@
+# coding=utf-8
+"""Tests for QGIS functionality.
+
+
+.. note:: This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+"""
+__author__ = 'tim@linfiniti.com'
+__date__ = '20/01/2011'
+__copyright__ = ('Copyright 2012, Australia Indonesia Facility for '
+ 'Disaster Reduction')
+
+import os
+import unittest
+from qgis.core import (
+ QgsProviderRegistry,
+ QgsCoordinateReferenceSystem,
+ QgsRasterLayer)
+
+from qgis.testing import start_app
+QGIS_APP = start_app()
+
+
+class QGISTest(unittest.TestCase):
+ """Test the QGIS Environment"""
+
+ def test_qgis_environment(self):
+ """QGIS environment has the expected providers"""
+
+ r = QgsProviderRegistry.instance()
+ self.assertIn('gdal', r.providerList())
+ self.assertIn('ogr', r.providerList())
+ self.assertIn('postgres', r.providerList())
+
+ def test_projection(self):
+ """Test that QGIS properly parses a wkt string.
+ """
+ crs = QgsCoordinateReferenceSystem()
+ wkt = (
+ 'GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",'
+ 'SPHEROID["WGS_1984",6378137.0,298.257223563]],'
+ 'PRIMEM["Greenwich",0.0],UNIT["Degree",'
+ '0.0174532925199433]]')
+ crs.createFromWkt(wkt)
+ auth_id = crs.authid()
+ expected_auth_id = 'EPSG:4326'
+ self.assertEqual(auth_id, expected_auth_id)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/tests/test_styles_loading.py b/tests/test_styles_loading.py
new file mode 100644
index 0000000..9626a9b
--- /dev/null
+++ b/tests/test_styles_loading.py
@@ -0,0 +1,55 @@
+import pytest
+from qgis.testing import start_app
+from qgis.PyQt.QtCore import QSettings
+
+from ..tools import StyleManager
+
+QGIS_APP = start_app()
+
+
+def test_set_default_style(qtbot):
+ app = QGIS_APP
+
+ expected = 'foobar'
+ app.setStyleSheet(expected)
+ app.processEvents()
+
+ assert app.styleSheet() == expected
+
+
+def test_stylemanager_get_styles(qtbot):
+ sm = StyleManager()
+ styles = sm.get_styles()
+ assert styles == ['blueglass',
+ 'coffee',
+ 'darkblue',
+ 'darkorange',
+ 'giap',
+ 'lightblue',
+ 'wombat']
+
+
+def test_stylemanager_set_default_style():
+ app = QGIS_APP
+ sm = StyleManager()
+ sm.activate_style('default')
+
+ assert app.styleSheet() == ''
+
+
+def test_stylemanager_set_giap_style():
+ app = QGIS_APP
+ sm = StyleManager()
+ sm.activate_style('giap')
+
+ assert len(app.styleSheet()) > 2000
+
+
+def test_stylemanager_set_active_style():
+ app = QGIS_APP
+ sm = StyleManager()
+ sm.set_active_style('foobar')
+ sm.set_active_style('giap')
+
+ assert QSettings().value('giapStyle/active') == 'giap'
+
diff --git a/tests/utilities.py b/tests/utilities.py
new file mode 100644
index 0000000..9c7f1f4
--- /dev/null
+++ b/tests/utilities.py
@@ -0,0 +1,61 @@
+# coding=utf-8
+"""Common functionality used by regression tests."""
+
+import sys
+import logging
+
+
+LOGGER = logging.getLogger('QGIS')
+QGIS_APP = None # Static variable used to hold hand to running QGIS app
+CANVAS = None
+PARENT = None
+IFACE = None
+
+
+def get_qgis_app():
+ """ Start one QGIS application to test against.
+
+ :returns: Handle to QGIS app, canvas, iface and parent. If there are any
+ errors the tuple members will be returned as None.
+ :rtype: (QgsApplication, CANVAS, IFACE, PARENT)
+
+ If QGIS is already running the handle to that app will be returned.
+ """
+
+ try:
+ from PyQt5 import QtGui, QtCore
+ from qgis.core import QgsApplication
+ from qgis.gui import QgsMapCanvas
+ from .qgis_interface import QgisInterface
+ except ImportError:
+ return None, None, None, None
+
+ global QGIS_APP # pylint: disable=W0603
+
+ if QGIS_APP is None:
+ gui_flag = True # All test will run qgis in gui mode
+ #noinspection PyPep8Naming
+ QGIS_APP = QgsApplication(sys.argv, gui_flag)
+ # Make sure QGIS_PREFIX_PATH is set in your env if needed!
+ QGIS_APP.initQgis()
+ s = QGIS_APP.showSettings()
+ LOGGER.debug(s)
+
+ global PARENT # pylint: disable=W0603
+ if PARENT is None:
+ #noinspection PyPep8Naming
+ PARENT = QtGui.QWidget()
+
+ global CANVAS # pylint: disable=W0603
+ if CANVAS is None:
+ #noinspection PyPep8Naming
+ CANVAS = QgsMapCanvas(PARENT)
+ CANVAS.resize(QtCore.QSize(400, 400))
+
+ global IFACE # pylint: disable=W0603
+ if IFACE is None:
+ # QgisInterface is a stub implementation of the QGIS plugin interface
+ #noinspection PyPep8Naming
+ IFACE = QgisInterface(CANVAS)
+
+ return QGIS_APP, CANVAS, IFACE, PARENT
diff --git a/tools.py b/tools.py
new file mode 100644
index 0000000..01cfe7f
--- /dev/null
+++ b/tools.py
@@ -0,0 +1,105 @@
+import os
+import re
+
+from qgis.PyQt.QtWidgets import QApplication
+from qgis.PyQt.QtCore import QFileSystemWatcher
+
+
+class StyleManager:
+ def __init__(self, parent):
+ self.app = QApplication.instance()
+
+ self.config = parent.config
+ # keep watch on file, there are applications that change or remove a
+ # file
+ self.watch = QFileSystemWatcher()
+ self.watch.fileChanged.connect(self.reload_style)
+
+ self.style_dir = os.path.abspath(os.path.join(
+ os.path.dirname(os.path.abspath(__file__)), 'styles'
+ ))
+
+ # here add default styles, otherwise the will not be seen in qgis
+ self.styles = {
+ 'giap': 'giap.qss',
+ 'blueglass': 'blueglass.qss',
+ 'coffee': 'coffee.qss',
+ 'darkblue': 'darkblue.qss',
+ 'darkorange': 'darkorange.qss',
+ 'lightblue': 'lightblue.qss',
+ 'wombat': 'wombat.qss',
+ }
+
+ # add default styles to settings
+ # for style, path in styles.items():
+ # self.set_style(style, os.path.join(self.style_dir, style, path))
+
+ def get_style_list(self):
+ return [x for x in self.style.keys()]
+
+ def run_last_style(self):
+ """ load active style on stratup"""
+ try:
+ last = self.config.get_active_style()
+ if last not in [None, '', False]:
+ last_pth = os.path.join(
+ self.style_dir, last, self.config.get_style_path(last)
+ )
+ self.reload_style(last_pth)
+ except Exception:
+ return
+
+ def remove_style(self, name):
+ """Remove style from qgis config"""
+ if self.config.get_active_style() == name:
+ self.config.set_active_style('')
+ self.activate_style('')
+ self.config.delete_style(name)
+
+ def reload_style(self, path):
+ """ load style to qgis, and set watch on it to remain active
+ :path: str ( path to style)
+ :return: bool, str
+ """
+ self.watch.removePaths(self.watch.files())
+ self.watch.addPath(path)
+ with open(path, "r") as f:
+ stylesheet = f.read()
+ # Update the image paths to use full paths.
+ # Fixes image loading in styles
+ path = os.path.dirname(path).replace("\\", "/")
+ stylesheet = re.sub(r'url\((.*?)\)', r'url("{}/\1")'.format(path),
+ stylesheet)
+ self.app.setStyleSheet(stylesheet)
+ self.app.processEvents()
+
+ def activate_style(self, name):
+ """activate selected style, or set default if problem occured
+ :res: bool
+ :name: str (message for user)
+ """
+ self.watch.removePaths(self.watch.files())
+ pth = ''
+ styles = self.config.get_style_list()
+ if name in styles:
+ pth = os.path.join(
+ self.style_dir, name, self.config.get_style_path(name)
+ )
+
+ # if path to style not found set default style
+ if pth in ['', None]:
+ self.app.setStyleSheet('')
+ pth = ''
+
+ # check if file exist
+ if not os.path.exists(pth):
+ self.app.setStyleSheet('') # return do default, and save it in con
+ if name == 'default':
+ self.config.set_active_style('')
+ return False, 'Default style set'
+ else:
+ return False, 'Path to *.qss not found, load default style'
+
+ self.reload_style(pth)
+ self.config.set_active_style(name)
+ return True, 'Style activated!'
diff --git a/utils.py b/utils.py
index bb67223..1f33391 100644
--- a/utils.py
+++ b/utils.py
@@ -1,82 +1,294 @@
-OBJECT_ACTION_DICT = {
- 'btn_nav_1': 'mActionPan',
- 'btn_nav_2': 'mActionZoomIn',
- 'btn_nav_3': 'mActionZoomOut',
- 'btn_nav_4': 'mActionZoomFullExtent',
- 'btn_nav_5': 'mActionZoomToLayer',
- 'btn_nav_6': 'mActionZoomToSelected',
- 'btn_nav_7': 'mActionZoomLast',
- 'btn_nav_8': 'mActionZoomNext',
-
- 'btn_projekt_1': 'mActionOpenProject',
- 'btn_projekt_2': 'mActionNewProject',
- 'btn_projekt_3': 'mActionSaveProject',
- 'btn_projekt_4': 'mActionSaveProjectAs',
-
- 'btn_attr_1': 'mActionIdentify',
- 'btn_attr_2': 'mActionSelectFeatures',
- 'zaznacz_panelPushButton': 'mActionSelectFeatures',
- 'btn_attr_3': 'mActionDeselectAll',
- 'odznacz_panelPushButton': 'mActionDeselectAll',
- 'btn_attr_4': 'mActionOpenTable',
-
- 'btn_miary_1': 'mActionMeasure',
- 'btn_miary_2': 'mActionMeasureArea',
- 'btn_miary_3': 'mActionMeasureAngle',
-
- 'btn_lr_1': 'mActionAddOgrLayer',
- 'btn_lr_2': 'mActionAddWmsLayer',
- 'btn_lr_3': 'mActionAddPgLayer',
- 'btn_lr_4': 'mActionAddRasterLayer',
- 'btn_lr_5': 'mActionAddWfsLayer',
- 'btn_lr_6': 'mActionAddSpatiaLiteLayer',
- 'btn_nowy_wydruk': 'mActionNewPrintLayout',
- 'btn_zarzadzanie_wydr': 'mActionShowLayoutManager',
-
- 'btn_vec_1': 'mActionToggleEditing',
- 'btn_vec_2': 'mActionSaveLayerEdits',
- 'btn_vec_3': 'mActionVertexTool',
- 'btn_vec_4': 'mActionUndo',
- 'btn_vec_5': 'mActionRedo',
- 'btn_vec_6': 'mActionAddFeature',
- 'btn_vec_7': 'mActionMoveFeature',
- 'btn_vec_8': 'mActionDeleteSelected',
- 'btn_vec_9': 'mActionCopyFeatures',
- 'btn_vec_10': 'mActionPasteFeatures',
- 'btn_vec_12': 'mActionCutFeatures',
-
- 'btn_lab_1': 'mActionLabeling',
- 'btn_lab_2': 'mActionChangeLabelProperties',
- 'btn_lab_3': 'mActionShowHideLabels',
- 'btn_lab_4': 'mActionMoveLabel',
- 'btn_lab_5': 'mActionRotateLabel',
- 'btn_lab_6': 'mActionDiagramProperties',
-
- 'btn_attr_5': 'mActionMapTips',
- 'btn_attr_6': 'mActionNewBookmark',
- 'btn_attr_7': 'mActionShowBookmarks',
- 'btn_attr_8': 'mActionSelectByExpression',
- 'btn_attr_9': 'mActionIdentify',
- 'btn_attr_10': 'mActionSelectFeatures',
- 'btn_attr_11': 'mActionDeselectAll',
- 'btn_attr_12': 'mActionOpenTable',
- 'btn_attr_13': 'mActionOpenFieldCalc',
- 'btn_attr_14': 'mActionStatisticalSummary',
- 'btn_attr_15': 'mActionSelectPolygon',
- 'btn_attr_16': 'mActionInvertSelection',
-
- 'btn_dig_5': 'mActionRotateFeature',
- 'btn_dig_6': 'mActionSimplifyFeature',
- 'btn_dig_7': 'mActionAddRing',
- 'btn_dig_8': 'mActionAddPart',
- 'btn_dig_9': 'mActionFillRing',
- 'btn_dig_10': 'mActionDeleteRing',
- 'btn_dig_11': 'mActionDeletePart',
- 'btn_dig_12': 'mActionOffsetCurve',
- 'btn_dig_13': 'mActionReshapeFeatures',
- 'btn_dig_14': 'mActionSplitParts',
- 'btn_dig_15': 'mActionSplitFeatures',
- 'btn_dig_16': 'mActionMergeFeatureAttributes',
- 'btn_dig_17': 'mActionMergeFeatures',
- 'btn_dig_18': 'mActionSnappingOptions'
+from PyQt5.QtCore import QThread
+from PyQt5.QtWidgets import QApplication, QProgressDialog
+
+from qgis.core import QgsProject, QgsMessageLog, Qgis
+
+project = QgsProject.instance()
+
+
+class SingletonModel:
+ __instance = None
+
+ def __new__(cls, *args):
+ if SingletonModel.__instance is None:
+ QgsMessageLog.logMessage(f'CREATE OBJECT OF CLASS: {cls.__name__}',
+ "giap_layout",
+ Qgis.Info)
+ SingletonModel.__instance = object.__new__(cls, *args)
+ return SingletonModel.__instance
+
+
+def identify_layer(ls, layer_to_find):
+ for layer in list(ls.values()):
+ if layer.name() == layer_to_find:
+ return layer
+
+
+def identify_layer_by_id(layerid_to_find):
+ for layerid, layer in project.mapLayers().items():
+ if layerid == layerid_to_find:
+ return layer
+
+
+def identify_layer_in_group(group_name, layer_to_find):
+ for tree_layer in project.layerTreeRoot().findLayers():
+ if tree_layer.parent().name() == group_name and \
+ tree_layer.layer().name() == layer_to_find:
+ return tree_layer.layer()
+
+
+def identify_layer_in_group_by_parts(group_name, layer_to_find):
+ """
+ Identyfikuje warstwę gdy nie mamy jej pełnej nazwy.
+
+ :param group_name: string
+ :param layer_to_find: string, początek nazwy warstwy
+ :return: QgsVectorLayer
+ """
+ for lr in project.layerTreeRoot().findLayers():
+ if lr.parent().name() == group_name \
+ and lr.name().startswith(layer_to_find):
+ return lr.layer()
+
+
+def set_project_config(parameter, key, value):
+ if isinstance(project, QgsProject):
+ return project.writeEntry(parameter, key, value)
+
+
+class ConfigSaveThread(QThread):
+ def __init__(self, parent):
+ super(ConfigSaveThread, self).__init__(parent)
+
+ def run(self):
+ project.write()
+
+
+class ConfigSaveProgressDialog(QProgressDialog):
+ def __init__(self, parent=None):
+ super(ConfigSaveProgressDialog, self).__init__(parent)
+ self.setWindowTitle('Zapisywanie ustawień')
+ self.setLabelText('Proszę czekać...')
+ self.setMaximum(0)
+ self.setCancelButton(None)
+ self.children()[0].setStyleSheet('''
+ QLabel {
+ background-color: rgb(53, 85, 109);
+ color: rgb(255, 255, 255);
+ font: 10pt "Segoe UI";
+ }
+ ''')
+
+ QApplication.processEvents()
+
+ self.thread = ConfigSaveThread(self)
+ self.thread.finished.connect(self.finished)
+ self.thread.start()
+
+ def finished(self):
+ self.thread.quit()
+ self.thread.wait()
+ self.thread.deleteLater()
+ self.close()
+
+
+def get_project_config(parameter, key, default=''):
+ value = project.readEntry(parameter, key, default)[0]
+ return value
+
+
+# oba poniższe słowniki powinny być spójne
+WMS_SERVERS = {
+ 'ORTOFOTOMAPA - WMTS': 'contextualWMSLegend=0&crs=EPSG:2180&dpiMode=0&featureCount=10&format=image/jpeg&layers=ORTOFOTOMAPA&styles=default&tileMatrixSet=EPSG:2180&url=https://mapy.geoportal.gov.pl/wss/service/PZGIK/ORTO/WMTS/StandardResolution?service%3DWMTS%26request%3DgetCapabilities',
+ 'Wizualizacja BDOT10k - WMS': 'contextualWMSLegend=0&crs=EPSG:2180&dpiMode=7&featureCount=10&format=image/png8&layers=RZab&layers=TPrz&layers=SOd2&layers=SOd1&layers=GNu2&layers=GNu1&layers=TKa2&layers=TKa1&layers=TPi2&layers=TPi1&layers=UTrw&layers=TLes&layers=RKr&layers=RTr&layers=ku7&layers=ku6&layers=ku5&layers=ku4&layers=ku3&layers=ku2&layers=ku1&layers=Mo&layers=Szu&layers=Pl3&layers=Pl2&layers=Pl1&layers=kanOkr&layers=rzOk&layers=row&layers=kan&layers=rz&layers=RowEt&layers=kanEt&layers=rzEt&layers=WPow&layers=LBrzN&layers=LBrz&layers=WPowEt&layers=GrPol&layers=Rez&layers=GrPK&layers=GrPN&layers=GrDz&layers=GrGm&layers=GrPo&layers=GrWo&layers=GrPns&layers=PRur&layers=ZbTA&layers=BudCm&layers=TerCm&layers=BudSp&layers=Szkl&layers=Kap&layers=SwNch&layers=SwCh&layers=BudZr&layers=BudGo&layers=BudPWy&layers=BudP2&layers=BudP1&layers=BudUWy&layers=BudU&layers=BudMWy&layers=BudMJ&layers=BudMW&layers=Bzn&layers=BHydA&layers=BHydL&layers=wyk&layers=wa6&layers=wa5&layers=wa4&layers=wa3&layers=wa2&layers=wa1&layers=IUTA&layers=ObOrA&layers=ObPL&layers=Prom&layers=PomL&layers=MurH&layers=PerA&layers=PerL&layers=Tryb&layers=UTrL&layers=LTra&layers=LKNc&layers=LKBu&layers=LKWs&layers=TSt&layers=LKNelJ&layers=LKNelD&layers=LKNelW&layers=LKZelJ&layers=LKZelD&layers=LKZelW&layers=Scz&layers=Al&layers=AlEt&layers=Sch2&layers=Sch1&layers=DrDGr&layers=DrLGr&layers=JDrLNUt&layers=JDLNTw&layers=JDrZTw&layers=JDrG&layers=DrEk&layers=JDrEk&layers=AuBud&layers=JAu&layers=NazDr&layers=NrDr&layers=Umo&layers=PPdz&layers=Prze&layers=TunK&layers=TunD&layers=Klad&layers=MosK&layers=MosD&layers=UTrP&layers=ObKom&layers=InUTP&layers=ZbTP&layers=NazUl&layers=ObOrP&layers=WyBT&layers=LTel&layers=LEle&layers=ObPP&layers=DrzPomP&layers=e13&layers=e12&layers=e11&layers=e10&layers=e9&layers=e8&layers=e7&layers=e6&layers=e5&layers=e4&layers=e3&layers=e2&layers=e1&layers=s19&layers=s18&layers=s17&layers=s16&layers=s15&layers=s14&layers=s13&layers=s12&layers=s11&layers=s10&layers=s9&layers=s8&layers=s7&layers=s6&layers=s5&layers=s4&layers=s3&layers=s2&layers=s1&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&url=http://mapy.geoportal.gov.pl/wss/service/pub/guest/kompozycja_BDOT10k_WMS/MapServer/WMSServer',
+ 'Mapa topograficzna - WMTS': 'contextualWMSLegend=0&crs=EPSG:2180&dpiMode=7&featureCount=10&format=image/jpeg&layers=MAPA%20TOPOGRAFICZNA&styles=default&tileMatrixSet=EPSG:2180&url=http://mapy.geoportal.gov.pl/wss/service/WMTS/guest/wmts/TOPO?SERVICE%3DWMTS%26REQUEST%3DGetCapabilities',
+ 'Krajowa Integracja Ewidencji Gruntów - WMS': 'contextualWMSLegend=0&crs=EPSG:2180&dpiMode=7&featureCount=10&format=image/png&layers=dzialki&layers=geoportal&layers=powiaty&layers=ekw&layers=zsin&layers=obreby&layers=numery_dzialek&layers=budynki&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&url=http://integracja.gugik.gov.pl/cgi-bin/KrajowaIntegracjaEwidencjiGruntow',
+ 'Bank Danych o Lasach - WMS': 'contextualWMSLegend=0&crs=EPSG:2180&dpiMode=7&featureCount=10&format=image/jpeg&layers=0&layers=1&layers=2&layers=3&layers=4&layers=5&styles=&styles=&styles=&styles=&styles=&styles=&url=http://mapserver.bdl.lasy.gov.pl/ArcGIS/services/WMS_BDL/mapserver/WMSServer',
+ 'Wody Polskie - mapa zagrożenia powodziowego': 'contextualWMSLegend=0&crs=EPSG:2180&dpiMode=7&featureCount=10&format=image/png&layers=OSZP1m&layers=OSZP1&layers=OSZP10&styles=&styles=&styles=&url=http://integracja.gugik.gov.pl/cgi-bin/MapaZagrozeniaPowodziowego?',
+ 'Monitoring Warunków Glebowych': 'contextualWMSLegend=0&crs=EPSG:2180&dpiMode=7&featureCount=10&format=image/png&layers=smois_2019_10_28_12_00_00&layers=smois_2019_10_29_12_00_00&layers=smois_2019_10_30_12_00_00&layers=smois_2019_10_31_12_00_00&layers=smois_2019_11_01_12_00_00&layers=punkty&layers=wojewodztwa&styles=&styles=&styles=&styles=&styles=&styles=&styles=&url=http://integracja.gugik.gov.pl/cgi-bin/MonitoringWarunkowGlebowych?',
+ 'Uzbrojenie terenu': 'contextualWMSLegend=0&crs=EPSG:2180&dpiMode=7&featureCount=10&format=image/png&layers=gesut&layers=kgesut&layers=kgesut_dane&layers=przewod_elektroenergetyczny&layers=przewod_telekomunikacyjny&layers=przewod_wodociagowy&layers=przewod_kanalizacyjny&layers=przewod_gazowy&layers=przewod_cieplowniczy&layers=przewod_specjalny&layers=przewod_inny&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&styles=&url=http://integracja.gugik.gov.pl/cgi-bin/KrajowaIntegracjaUzbrojeniaTerenu?'
+}
+
+
+WMS_SERVERS_GROUPS = {
+ 'ORTOFOTOMAPA - WMTS': 'ORTOFOTOMAPA',
+ 'Wizualizacja BDOT10k - WMS': 'DANE DODATKOWE',
+ 'Mapa topograficzna - WMTS': 'DANE DODATKOWE',
+ 'Krajowa Integracja Ewidencji Gruntów - WMS': 'DANE DODATKOWE',
+ 'Bank Danych o Lasach - WMS': 'DANE DODATKOWE',
+ 'Wody Polskie - mapa zagrożenia powodziowego': 'DANE DODATKOWE',
+ 'Monitoring Warunków Glebowych': 'DANE DODATKOWE',
+ 'Uzbrojenie terenu': 'DANE DODATKOWE'
}
+
+STANDARD_TOOLS = [
+ {
+ "label": "Project",
+ "id": "Project",
+ "btn_size": 30,
+ "btns": [
+ ["mActionOpenProject", 0, 0],
+ ["mActionNewProject", 0, 1],
+ ["mActionSaveProject", 1, 0],
+ ["mActionSaveProjectAs", 1, 1]
+ ]
+ },
+
+ {
+ "label": "Navigation",
+ "id": "Navigation",
+ "btn_size": 30,
+ "btns": [
+ ["mActionPan", 0, 0],
+ ["mActionZoomIn", 0, 1],
+ ["mActionZoomOut", 0, 2],
+ ["mActionZoomFullExtent", 0, 3],
+
+ ["mActionZoomToLayer", 1, 0],
+ ["mActionZoomToSelected", 1, 1],
+ ["mActionZoomLast", 1, 2],
+ ["mActionZoomNext", 1, 3]
+ ]
+ },
+
+ {
+ 'label': 'Attributes',
+ 'id': 'Attributes',
+ 'btn_size': 30,
+ 'btns': [
+ ['mActionIdentify', 0, 0],
+ ['mActionSelectFeatures', 0, 1],
+ ['mActionDeselectAll', 1, 0],
+ ['mActionOpenTable', 1, 1],
+ ],
+ },
+
+ {
+ 'label': 'Measures',
+ 'id': 'Measures',
+ 'btn_size': 60,
+ 'btns': [
+ ['mActionMeasure', 0, 0],
+ ['mActionMeasureArea', 0, 1],
+ ['mActionMeasureAngle', 0, 2],
+ ],
+ },
+
+ {
+ 'label': 'Layers',
+ 'id': 'Layers',
+ 'btn_size': 30,
+ 'btns': [
+ ['mActionAddOgrLayer', 0, 0],
+ ['mActionAddWmsLayer', 0, 1],
+ ['mActionAddPgLayer', 0, 2],
+ ['mActionAddMeshLayer', 0, 3],
+ ['mActionAddWcsLayer', 0, 4],
+ ['mActionAddDelimitedText', 0, 5],
+
+ ['mActionAddRasterLayer', 1, 0],
+ ['mActionAddWfsLayer', 1, 1],
+ ['mActionAddSpatiaLiteLayer', 1, 2],
+ ['mActionAddVirtualLayer', 1, 3],
+ ['mActionNewMemoryLayer', 1, 4],
+ ],
+ },
+
+ {
+ 'label': 'Adv. Attributes',
+ 'id': 'Adv. Attributes',
+ 'btn_size': 30,
+ 'btns': [
+ ['mActionIdentify', 0, 0],
+ ['mActionSelectFeatures', 0, 1],
+ ['mActionSelectPolygon', 0, 2],
+ ['mActionSelectByExpression', 0, 3],
+ ['mActionInvertSelection', 0, 4],
+ ['mActionDeselectAll', 0, 5],
+
+ ['mActionOpenTable', 1, 0],
+ ['mActionStatisticalSummary', 1, 1],
+ ['mActionOpenFieldCalc', 1, 2],
+ ['mActionMapTips', 1, 3],
+ ['mActionNewBookmark', 1, 4],
+ ['mActionShowBookmarks', 1, 5],
+ ],
+ },
+
+ {
+ 'label': 'Labels',
+ 'id': 'Labels',
+ 'btn_size': 30,
+ 'btns': [
+ ['mActionLabeling', 0, 0],
+ ['mActionChangeLabelProperties', 0, 1],
+ ['mActionPinLabels', 0, 2],
+ ['mActionShowPinnedLabels', 0, 3],
+ ['mActionShowHideLabels', 0, 4],
+ ['mActionMoveLabel', 1, 0],
+ ['mActionRotateLabel', 1, 1],
+ ['mActionDiagramProperties', 1, 2],
+ ['mActionShowUnplacedLabels', 1, 3],
+ ]
+ },
+
+ {
+ 'label': 'Vector',
+ 'id': 'Vector',
+ 'btn_size': 30,
+ 'btns': [
+ ['mActionToggleEditing', 0, 0],
+ ['mActionSaveLayerEdits', 0, 1],
+ ['mActionVertexTool', 0, 2],
+ ['mActionUndo', 0, 3],
+ ['mActionRedo', 0, 4],
+
+ ['mActionAddFeature', 1, 0],
+ ['mActionMoveFeature', 1, 1],
+ ['mActionDeleteSelected', 1, 2],
+ ['mActionCutFeatures', 1, 3],
+ ['mActionCopyFeatures', 1, 4],
+ ['mActionPasteFeatures', 1, 5],
+ ],
+ },
+
+ {
+ 'label': 'Digitalization',
+ 'id': 'Digitalization',
+ 'btn_size': 30,
+ 'btns': [
+ ['EnableSnappingAction', 0, 0],
+ ['EnableTracingAction', 0, 1],
+ ['mActionRotateFeature', 0, 2],
+ ['mActionSimplifyFeature', 0, 3],
+ ['mActionAddRing', 0, 4],
+ ['mActionAddPart', 0, 5],
+ ['mActionFillRing', 0, 6],
+ ['mActionOffsetCurve', 0, 7],
+ ['mActionCircularStringCurvePoint', 0, 8],
+
+ ['mActionDeleteRing', 1, 0],
+ ['mActionDeletePart', 1, 1],
+ ['mActionReshapeFeatures', 1, 2],
+ ['mActionSplitParts', 1, 3],
+ ['mActionSplitFeatures', 1, 4],
+ ['mActionMergeFeatureAttributes', 1, 5],
+ ['mActionMergeFeatures', 1, 6],
+ ['mActionReverseLine', 1, 7],
+ ['mActionTrimExtendFeature', 1, 8],
+ ]
+ },
+
+ {
+ 'label': 'Prints',
+ 'id': 'Prints',
+ 'btn_size': 30,
+ 'btns': [
+ ['mActionNewPrintLayout', 0, 0],
+ ['giapMyPrints', 0, 1],
+ ['mActionShowLayoutManager', 1, 0],
+ ['giapQuickPrint', 1, 1],
+ ]
+ },
+
+]
diff --git a/wydruk_dialog.ui b/wydruk_dialog.ui
index 429bd0f..0c03d7e 100644
--- a/wydruk_dialog.ui
+++ b/wydruk_dialog.ui
@@ -13,7 +13,7 @@
0
0
550
- 518
+ 526
@@ -42,6 +42,7 @@
* {
background-color: rgb(255, 255, 255);
font: 10pt "Segoe UI";
+ color: black;
}