ItemTagsLoader::Tag ItemTagsLoader::tagFromTable(int row) { QTableWidget *t = ui->tableWidget; Tag tag; tag.name = t->item(row, tagsTableColumns::name)->text(); const QColor color = cellWidgetProperty(t, row, tagsTableColumns::color, propertyColor).value<QColor>(); tag.color = serializeColor(color); tag.icon = cellWidgetProperty(t, row, tagsTableColumns::icon, "currentIcon").toString(); tag.styleSheet = t->item(row, tagsTableColumns::styleSheet)->text(); tag.match = t->item(row, tagsTableColumns::match)->text(); return tag; }
void ConfigTabAppearance::colorButtonClicked(QObject *button) { QColor color = evalColor( button->property("VALUE").toString(), m_theme ); QColorDialog dialog(this); dialog.setOptions(dialog.options() | QColorDialog::ShowAlphaChannel); dialog.setCurrentColor(color); if ( dialog.exec() == QDialog::Accepted ) { color = dialog.selectedColor(); button->setProperty( "VALUE", serializeColor(color) ); decoratePreview(); const QSize iconSize = button->property("iconSize").toSize(); QPixmap pix(iconSize); pix.fill(color); button->setProperty("icon", QIcon(pix)); updateFontButtons(); } }
QString Theme::themeStyleSheet(const QString &name) const { QString css = value(name).toString(); int i = 0; forever { i = css.indexOf("${", i); if (i == -1) break; int j = css.indexOf('}', i + 2); if (j == -1) break; const QString var = css.mid(i + 2, j - i - 2); const QString colorName = serializeColor( evalColor(var, *this) ); css.replace(i, j - i + 1, colorName); i += colorName.size(); } return css; }
QString Theme::getNotificationStyleSheet() const { // Notification style sheet. QColor notificationBg = color("notification_bg"); // Notification opacity should be set with NotificationDaemon::setNotificationOpacity(). notificationBg.setAlpha(255); const QString fontString = value("notification_font").toString(); return "Notification, Notification QWidget{" "background:" + serializeColor(notificationBg) + ";" "}" "Notification QWidget{" "color:" + themeColorString("notification_fg") + ";" + getFontStyleSheet(fontString) + "}" "Notification #NotificationTitle{" + getFontStyleSheet(fontString, 1.2) + "}" "Notification #NotificationTip{" "font-style: italic" "}" ; }
QString Theme::themeColorString(const QString &name) const { return serializeColor( color(name) ); }
void Theme::decorateBrowser(QAbstractScrollArea *c) const { decorateScrollArea(c); const QColor bg = color("bg"); QColor unfocusedSelectedBg = color("sel_bg"); unfocusedSelectedBg.setRgb( (bg.red() + unfocusedSelectedBg.red()) / 2, (bg.green() + unfocusedSelectedBg.green()) / 2, (bg.blue() + unfocusedSelectedBg.blue()) / 2 ); Theme unfocusedTheme; for (auto it = m_theme.constBegin(); it != m_theme.constEnd(); ++it) unfocusedTheme.m_theme[it.key()] = Option(it.value().value()); unfocusedTheme.m_theme["sel_bg"].setValue( serializeColor(unfocusedSelectedBg) ); // colors and font c->setStyleSheet( "#ClipboardBrowser,#item,#item_child{" + getFontStyleSheet( value("font").toString() ) + "color:" + themeColorString("fg") + ";" "background:" + themeColorString("bg") + ";" "}" "#ClipboardBrowser::item:alternate{" "color:" + themeColorString("alt_fg") + ";" "background:" + themeColorString("alt_bg") + ";" "}" "#ClipboardBrowser::item:selected,#item[CopyQ_selected=\"true\"],#item[CopyQ_selected=\"true\"] #item_child{" "color:" + themeColorString("sel_fg") + ";" "background:" + themeColorString("sel_bg") + ";" "}" "#item #item_child{background:transparent}" "#item[CopyQ_selected=\"true\"] #item_child{background:transparent}" // Desaturate selected item background if item list is not focused. "#ClipboardBrowser::item:selected:!active{" "background:" + serializeColor( evalColor("sel_bg", unfocusedTheme) ) + ";" + unfocusedTheme.themeStyleSheet("sel_item_css") + "}" // Omit showing current item outline. "#ClipboardBrowser::focus{outline:0}" "#ClipboardBrowser::item:focus{" + themeStyleSheet("cur_item_css") + "}" + getToolTipStyleSheet() + // Allow user to change CSS. "#ClipboardBrowser{" + themeStyleSheet("item_css") + "}" "#ClipboardBrowser::item:alternate{" + themeStyleSheet("alt_item_css") + "}" "#ClipboardBrowser::item:selected{" + themeStyleSheet("sel_item_css") + "}" "#item_child[CopyQ_item_type=\"notes\"] {" + getFontStyleSheet( value("notes_font").toString() ) + "}" ); }
void Theme::resetTheme() { QString name; QPalette p; name = serializeColor( p.color(QPalette::Base) ); m_theme["bg"] = Option(name, "VALUE", ui ? ui->pushButtonColorBg : nullptr); m_theme["edit_bg"] = Option(name, "VALUE", ui ? ui->pushButtonColorEditorBg : nullptr); name = serializeColor( p.color(QPalette::Text) ); m_theme["fg"] = Option(name, "VALUE", ui ? ui->pushButtonColorFg : nullptr); m_theme["edit_fg"] = Option(name, "VALUE", ui ? ui->pushButtonColorEditorFg : nullptr); name = serializeColor( p.color(QPalette::Text).lighter(400) ); m_theme["num_fg"] = Option(name, "VALUE", ui ? ui->pushButtonColorNumberFg : nullptr); name = serializeColor( p.color(QPalette::AlternateBase) ); m_theme["alt_bg"] = Option(name, "VALUE", ui ? ui->pushButtonColorAltBg : nullptr); name = serializeColor( p.color(QPalette::Highlight) ); m_theme["sel_bg"] = Option(name, "VALUE", ui ? ui->pushButtonColorSelBg : nullptr); name = serializeColor( p.color(QPalette::HighlightedText) ); m_theme["sel_fg"] = Option(name, "VALUE", ui ? ui->pushButtonColorSelFg : nullptr); m_theme["find_bg"] = Option("#ff0", "VALUE", ui ? ui->pushButtonColorFoundBg : nullptr); m_theme["find_fg"] = Option("#000", "VALUE", ui ? ui->pushButtonColorFoundFg : nullptr); name = serializeColor( p.color(QPalette::ToolTipBase) ); m_theme["notes_bg"] = Option(name, "VALUE", ui ? ui->pushButtonColorNotesBg : nullptr); name = serializeColor( p.color(QPalette::ToolTipText) ); m_theme["notes_fg"] = Option(name, "VALUE", ui ? ui->pushButtonColorNotesFg : nullptr); m_theme["notification_bg"] = Option("#333", "VALUE", ui ? ui->pushButtonColorNotificationBg : nullptr); m_theme["notification_fg"] = Option("#ddd", "VALUE", ui ? ui->pushButtonColorNotificationFg : nullptr); m_theme["font"] = Option("", "VALUE", ui ? ui->pushButtonFont : nullptr); m_theme["edit_font"] = Option("", "VALUE", ui ? ui->pushButtonEditorFont : nullptr); m_theme["find_font"] = Option("", "VALUE", ui ? ui->pushButtonFoundFont : nullptr); m_theme["num_font"] = Option("", "VALUE", ui ? ui->pushButtonNumberFont : nullptr); m_theme["notes_font"] = Option("", "VALUE", ui ? ui->pushButtonNotesFont : nullptr); m_theme["notification_font"] = Option("", "VALUE", ui ? ui->pushButtonNotificationFont : nullptr); m_theme["show_number"] = Option(true, "checked", ui ? ui->checkBoxShowNumber : nullptr); m_theme["show_scrollbars"] = Option(true, "checked", ui ? ui->checkBoxScrollbars : nullptr); m_theme["css"] = Option(""); m_theme["menu_css"] = Option( "\n ;border: 1px solid ${sel_bg}" "\n ;background: ${bg}" "\n ;color: ${fg}" ); m_theme["menu_bar_css"] = Option( "\n ;background: ${bg}" "\n ;color: ${fg}" ); m_theme["menu_bar_selected_css"] = Option( "\n ;background: ${sel_bg}" "\n ;color: ${sel_fg}" ); m_theme["menu_bar_disabled_css"] = Option( "\n ;color: ${bg - #666}" ); m_theme["item_css"] = Option(""); m_theme["alt_item_css"] = Option(""); m_theme["sel_item_css"] = Option(""); m_theme["cur_item_css"] = Option( "\n ;border: 0.1em solid ${sel_bg}" ); m_theme["item_spacing"] = Option(""); m_theme["notes_css"] = Option(""); m_theme["tab_bar_css"] = Option( "\n ;background: ${bg - #222}" ); m_theme["tab_bar_tab_selected_css"] = Option( "\n ;padding: 0.5em" "\n ;background: ${bg}" "\n ;border: 0.05em solid ${bg}" "\n ;color: ${fg}" ); m_theme["tab_bar_tab_unselected_css"] = Option( "\n ;border: 0.05em solid ${bg}" "\n ;padding: 0.5em" "\n ;background: ${bg - #222}" "\n ;color: ${fg - #333}" ); m_theme["tab_bar_scroll_buttons_css"] = Option( "\n ;background: ${bg - #222}" "\n ;color: ${fg}" "\n ;border: 0" ); m_theme["tab_bar_item_counter"] = Option( "\n ;color: ${fg - #044 + #400}" "\n ;font-size: 6pt" ); m_theme["tab_bar_sel_item_counter"] = Option( "\n ;color: ${sel_bg - #044 + #400}" ); m_theme["tab_tree_css"] = Option( "\n ;color: ${fg}" "\n ;background-color: ${bg}" ); m_theme["tab_tree_sel_item_css"] = Option( "\n ;color: ${sel_fg}" "\n ;background-color: ${sel_bg}" "\n ;border-radius: 2px" ); m_theme["tab_tree_item_counter"] = Option( "\n ;color: ${fg - #044 + #400}" "\n ;font-size: 6pt" ); m_theme["tab_tree_sel_item_counter"] = Option( "\n ;color: ${sel_fg - #044 + #400}" ); m_theme["tool_bar_css"] = Option( "\n ;color: ${fg}" "\n ;background-color: ${bg}" "\n ;border: 0" ); m_theme["tool_button_css"] = Option( "\n ;color: ${fg}" "\n ;background: ${bg}" "\n ;border: 0" "\n ;border-radius: 2px" ); m_theme["tool_button_selected_css"] = Option( "\n ;background: ${sel_bg - #222}" "\n ;color: ${sel_fg}" "\n ;border: 1px solid ${sel_bg}" ); m_theme["tool_button_pressed_css"] = Option( "\n ;background: ${sel_bg}" ); m_theme["search_bar"] = Option( "\n ;background: ${edit_bg}" "\n ;color: ${edit_fg}" "\n ;border: 1px solid ${alt_bg}" "\n ;margin: 2px" ); m_theme["search_bar_focused"] = Option( "\n ;border: 1px solid ${sel_bg}" ); m_theme["use_system_icons"] = Option(false, "checked", ui ? ui->checkBoxSystemIcons : nullptr); m_theme["font_antialiasing"] = Option(true, "checked", ui ? ui->checkBoxAntialias : nullptr); m_theme["style_main_window"] = Option(false, "checked", ui ? ui->checkBoxStyleMainWindow : nullptr); }
void Theme::decorateMainWindow(QWidget *mainWindow) const { QPalette palette = QApplication::palette(); // This seems to properly reset icon colors. mainWindow->setPalette(palette); mainWindow->setStyleSheet(QString()); if ( !isMainWindowThemeEnabled() ) return; const auto bg = color("bg"); const auto fg = color("fg"); palette.setColor( QPalette::Base, bg ); palette.setColor( QPalette::AlternateBase, color("alt_bg") ); palette.setColor( QPalette::Text, fg ); palette.setColor( QPalette::Window, bg ); palette.setColor( QPalette::WindowText, fg ); palette.setColor( QPalette::Button, bg ); palette.setColor( QPalette::ButtonText, fg ); palette.setColor( QPalette::Highlight, color("sel_bg") ); palette.setColor( QPalette::HighlightedText, color("sel_fg") ); mainWindow->setPalette(palette); mainWindow->setStyleSheet( "#searchBar{" + themeStyleSheet("search_bar") + "}" "#searchBar:focus{" + themeStyleSheet("search_bar_focused") + "}" "#tab_bar{" + themeStyleSheet("tab_bar_css") + "}" "#tab_bar::tab:selected{" + themeStyleSheet("tab_bar_tab_selected_css") + "}" "#tab_bar::tab:!selected{" + themeStyleSheet("tab_bar_tab_unselected_css") + "}" "#tab_bar #tab_item_counter{" + themeStyleSheet("tab_bar_item_counter") + "}" "#tab_bar #tab_item_counter[CopyQ_selected=\"true\"]{" + themeStyleSheet("tab_bar_sel_item_counter") + "}" "#tab_bar QToolButton{" + themeStyleSheet("tab_bar_scroll_buttons_css") + "}" "#tab_tree, #tab_tree_item{" + themeStyleSheet("tab_tree_css") + "}" // GTK has incorrect background for branches "#tab_tree::branch:selected{background:" + serializeColor(bg) + "}" "#tab_tree::item:selected" ",#tab_tree_item[CopyQ_selected=\"true\"]" "{" + themeStyleSheet("tab_tree_sel_item_css") + "}" "#tab_tree_item[CopyQ_selected=\"false\"]" ",#tab_tree_item[CopyQ_selected=\"true\"]" "{background:transparent}" "#tab_tree #tab_item_counter{" + themeStyleSheet("tab_tree_item_counter") + "}" "#tab_tree #tab_item_counter[CopyQ_selected=\"true\"]{" + themeStyleSheet("tab_tree_sel_item_counter") + "}" // Remove border in toolbars. "QToolBar{" + themeStyleSheet("tool_bar_css") + "}" "QToolButton{" + themeStyleSheet("tool_button_css") + "}" "QToolButton:hover{" + themeStyleSheet("tool_button_selected_css") + "}" "QToolButton:pressed{" + themeStyleSheet("tool_button_pressed_css") + "}" "#menu_bar, #menu_bar::item {" + themeStyleSheet("menu_bar_css") + "}" "#menu_bar::item:selected {" + themeStyleSheet("menu_bar_selected_css") + "}" "#menu_bar::item:disabled {" + themeStyleSheet("menu_bar_disabled_css") + "}" + getMenuStyleSheet() + themeStyleSheet("css") ); }