/* Copyright (C) 2015 The Android Open Source Project

  This software is licensed under the terms of the GNU General Public
  License version 2, as published by the Free Software Foundation, and
  may be copied, distributed, and modified under those terms.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
 */

*[ColorGroup="MajorTab"] {
    color: %%MAJOR_TAB_COLOR%%;
    padding: 0px 0px 0px 16px;
}
*[ColorGroup="MajorTabTitle"] {
    color: %%MAJOR_TITLE_COLOR%%;
    background-color: %%TAB_BKG_COLOR%%
}
*[ColorGroup="Title"] {
    color: %%TITLE_COLOR%%;
}
*::disabled[ColorGroup="Tool"] { color: %%DISABLED_TOOL_COLOR%%}
*[ColorGroup="Tool"] { color: %%TOOL_COLOR%%}
*[class="EditableValue"]  { color: %%TEXT_COLOR%% }
*[ColorGroup="SliderLabel"]  { color: %%TEXT_COLOR%% }
*[ColorGroup="SmsBox"] { border: 1px solid %%BOX_COLOR%% }
*[ColorGroup="HorizDivider"] {
    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0  %%LARGE_DIVIDER_COLOR%%, stop: 1 %%TAB_SELECTED_COLOR%%);
    border: 0px;
}
*[ColorGroup="GradientDivider"] {
    background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 %%LARGE_DIVIDER_COLOR%%, stop: 1 %%BKG_COLOR%%);
    border: 0px;
}
*{
    color: %%TEXT_COLOR%%;
    background-color: %%BKG_COLOR%%;
}
QGroupBox::title { margin-top: 4px; margin-left: 0px }
QTextEdit:disabled, QLineEdit:disabled { border: 0px }
QTextEdit, QLineEdit {
    border-top: 0px;
    border-bottom: 1px solid %%EDIT_COLOR%%;
}
QLineEdit:focus {
    border-bottom: 2px solid %%TOOL_COLOR%%;
}
QPlainTextEdit:disabled, QPlainTextEdit[readOnly=true] {
    border: 0px;
    background: transparent
}
QPlainTextEdit {
    background: %%TAB_BKG_COLOR%%;
    border: 1px solid %%EDIT_COLOR%%;
}
QCheckBox::indicator:checked[ColorGroup="Toggle"] {
    image: url(:/%%PATH%%/toggle_on);
    width: 36; height: 24;
}
QCheckBox::indicator:unchecked[ColorGroup="Toggle"] {
    image: url(:/%%PATH%%/toggle_off);
    width: 36; height: 24;
}
QCheckBox::indicator:checked {
    image: url(:/%%PATH%%/check_yes)
}
QCheckBox::indicator:unchecked {
    image: url(:/%%PATH%%/check_no)
}
QPushButton:pressed[ToolWindowButton=true], QPushButton:checked[ToolWindowButton=true] {
    border: none;
    background: %%TAB_DARKENED_COLOR%%;
    border-radius: 4px;
}
QPushButton:pressed[helpButton=true] {
    border: none;
    background: %%TAB_DARKENED_COLOR%%;
}
QPushButton[ColorGroup="MajorTab"] {
    border: none;
    text-align: left;
    color: %%MAJOR_TAB_COLOR%%;
    background: %%TAB_BKG_COLOR%%;
}
QPushButton[ColorGroup="MajorTabTitle"] {
    border: none;
    text-align: left;
    color: %%MAJOR_TAB_COLOR%%;
    background: %%TAB_BKG_COLOR%%;
}
QPushButton:pressed[ColorGroup="MajorTab"] {
    border: none;
    background: %%TAB_DARKENED_COLOR%%;
}
QPushButton:checked[ColorGroup="MajorTab"] {
    border: none;
    background: %%TAB_SELECTED_COLOR%%;
}
QPushButton:pressed[ColorGroup="Tool"] {
    border: none;
}
QRadioButton::indicator:unchecked {
    image: url(:/%%PATH%%/radio_off);
    width: 24; height: 24;
}
QRadioButton::indicator:checked {
    image: url(:/%%PATH%%/radio_on);
    width: 24; height: 24;
}
QSlider::groove {border: 1px ;height: 2px;}
QSlider::handle {
    background: solid %%TOOL_COLOR%%;
    border: 1px solid %%TOOL_COLOR%%;
    width: 12px;
    margin: -6px 0;
    border-radius: 7px;
}
QSlider::sub-page:horizontal {
    background: %%TOOL_COLOR%%;
    border-radius: 1px;
}
QSlider::add-page:horizontal {
    background: %%BOX_COLOR%%;
    border-radius: 1px;
}
QTextBrowser, QTableWidget {
    gridline-color: %%TAB_BKG_COLOR%%;
    background: %%TAB_BKG_COLOR%%;
    border: 1px solid %%EDIT_COLOR%%;
}
QTableView::item {
    padding-left: 16;
    padding-right: 16;
    border: 0;
    border-bottom: 1 solid %%TABLE_BOTTOM_COLOR%%;
}
QTableView::item:focus{}
QHeaderView::section {
    color: %%TITLE_COLOR%%;
    background: %%TAB_BKG_COLOR%%;
    border: 0px; padding: 16;
    border-bottom: 1 solid %%DIVIDER_COLOR%%;
}
QScrollBar::vertical {
    background: %%SCROLL_BKG_COLOR%%;
    width: 8px;
    margin 21px 0 21 px 0;
}
QScrollBar::handle:vertical {
    background: %%SCROLL_HANDLE_COLOR%%;
    min-height: 25px;
}
QScrollBar::add-line:vertical { border: none; background: none }
QScrollBar::sub-line:vertical { border: none; background: none }
QComboBox {
    border-top: 0px;
    border-bottom: 1px solid %%BOX_COLOR%%;
    selection-background-color: %%TAB_BKG_COLOR%%;
}
QComboBox::drop-down { border-left-style: solid; }
QComboBox::down-arrow {
    image:url(:/%%PATH%%/drop_down);
    border: none;
    width: 24;
    height: 24;
}
QListView { min-height: 4em }
QTabWidget::pane {border: none;}
QTabWidget::tab-bar {left: 0px;}
QTabBar::tab {
    background: %%BKG_COLOR%%;
    padding-bottom:8px;
    text-align: left;
    margin-left: 8
}
QTabBar::tab:selected {
    color: %%TEXT_COLOR%%;
    border-bottom: 2px solid %%TOOL_COLOR%%;
}
QTabBar::tab:!selected{
    color: %%TITLE_COLOR%%;
    border-bottom: 2px solid %%BKG_COLOR%%;
}
QTabBar::tab:disabled {
    color: transparent;
    border-bottom: 2px solid transparent
}
RaisedMaterialButton {
    border-radius: 2px;
    color: %%TOOL_COLOR%%;
}
RaisedMaterialButton:pressed {
    background: %%TAB_DARKENED_COLOR%%;
}
QAbstractSpinBox {
    border-top: 0px;
    border-bottom: 1px solid %%EDIT_COLOR%%;
    padding-bottom: 4;
}
QAbstractSpinBox:focus {
    border-top: 0px;
    border-bottom: 2px solid %%TOOL_COLOR%%;
}
QAbstractSpinBox:up-button {
    border-image: url(:/%%PATH%%/arrow_drop_up);
    width: 12;
}
QAbstractSpinBox:down-button {
    border-image: url(:/%%PATH%%/arrow_drop_down);
    width: 12;
}
QLineEdit[ColorGroup="InvalidInput"] {
    color: #ff0000;
}
