| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include "lc_widgetoptionsdialog.h" |
| |
|
| | #include <QColorDialog> |
| | #include <QDir> |
| | #include <QFile> |
| | #include <QFileDialog> |
| | #include <QMessageBox> |
| | #include <QPixmapCache> |
| | #include <QStatusBar> |
| | #include <QStyleFactory> |
| |
|
| | #include "lc_dlgiconssetup.h" |
| | #include "lc_inputtextdialog.h" |
| | #include "lc_widgetfactory.h" |
| | #include "qc_applicationwindow.h" |
| | #include "rs_settings.h" |
| |
|
| | LC_WidgetOptionsDialog::LC_WidgetOptionsDialog(QWidget* parent) |
| | : LC_Dialog(parent, "WidgetOptions"){ |
| | setupUi(this); |
| | connect(stylesheet_button,&QPushButton::released, this, &LC_WidgetOptionsDialog::chooseStyleSheet); |
| |
|
| | connect(pbMain, &QToolButton::clicked, this, &LC_WidgetOptionsDialog::onpbMainClicked); |
| | connect(pbAccent, &QToolButton::clicked, this, &LC_WidgetOptionsDialog::onpbAccentClicked); |
| | connect(pbBack, &QToolButton::clicked, this, &LC_WidgetOptionsDialog::onpbBackClicked); |
| |
|
| | connect(pbAdvancedIcons, &QPushButton::clicked, this, &LC_WidgetOptionsDialog::showAdvancedSetup); |
| |
|
| | LC_GROUP("Widgets");{ |
| | bool allow_style = LC_GET_BOOL("AllowStyle", false); |
| | style_checkbox->setChecked(allow_style); |
| | style_combobox->addItems(QStyleFactory::keys()); |
| | if (allow_style) { |
| | QString a_style = LC_GET_STR("Style", ""); |
| | if (!a_style.isEmpty()) { |
| | int index = style_combobox->findText(a_style); |
| | style_combobox->setCurrentIndex(index); |
| | } |
| | } |
| |
|
| | QString sheet_path = LC_GET_STR("StyleSheet", ""); |
| | if (!sheet_path.isEmpty() && QFile::exists(sheet_path)) |
| | stylesheet_field->setText(sheet_path); |
| |
|
| | |
| | |
| |
|
| | bool allow_toolbar_icon_size = LC_GET_BOOL("AllowToolbarIconSize", false); |
| | toolbar_icon_size_checkbox->setChecked(allow_toolbar_icon_size); |
| |
|
| | int toolbar_icon_size = LC_GET_INT("ToolbarIconSize", 24); |
| | toolbar_icon_size_spinbox->setValue(toolbar_icon_size); |
| |
|
| | bool allow_statusbar_height = LC_GET_BOOL("AllowStatusbarHeight", false); |
| | statusbar_height_checkbox->setChecked(allow_statusbar_height); |
| |
|
| | int statusbar_height = LC_GET_INT("StatusbarHeight", 32); |
| | statusbar_height_spinbox->setValue(statusbar_height); |
| |
|
| | bool allow_statusbar_fontsize = LC_GET_BOOL("AllowStatusbarFontSize", false); |
| | statusbar_fontsize_checkbox->setChecked(allow_statusbar_fontsize); |
| |
|
| | int statusbar_fontsize = LC_GET_INT("StatusbarFontSize", 12); |
| | statusbar_fontsize_spinbox->setValue(statusbar_fontsize); |
| |
|
| | int leftToolbarColumnsCount = LC_GET_INT("LeftToolbarColumnsCount", 5); |
| | left_toobar_columns_spinbox->setValue(leftToolbarColumnsCount); |
| |
|
| | bool leftToolbarFlatIcons = LC_GET_BOOL("LeftToolbarFlatIcons", true); |
| | cbLeftTBFlatButtons->setChecked(leftToolbarFlatIcons); |
| |
|
| | int leftToolbarIconSize = LC_GET_INT("LeftToolbarIconSize", 24); |
| | sbLeftTBIconSize->setValue(leftToolbarIconSize); |
| |
|
| | bool dockWidgetsFlatIcons = LC_GET_BOOL("DockWidgetsFlatIcons", true); |
| | cbDockWidgetsFlatButtons->setChecked(dockWidgetsFlatIcons); |
| |
|
| | bool pickValuesButtonsFlatIcons = LC_GET_BOOL("PickValueButtonsFlatIcons", true); |
| | cbFlatPickValuesButtons->setChecked(pickValuesButtonsFlatIcons); |
| |
|
| | int docWidgetsIconSize = LC_GET_INT("DockWidgetsIconSize", 16); |
| | sbDocWidgtetIconSize->setValue(docWidgetsIconSize); |
| |
|
| | bool allowDockNesting = LC_GET_BOOL("DockAllowNested", true); |
| | cbDockingAllowNested->setChecked(allowDockNesting); |
| |
|
| | bool titleBarVertical = LC_GET_BOOL("DockTitleBarVertical", false); |
| | cbDockingVerticalTitleBar->setChecked(titleBarVertical); |
| |
|
| | bool verticalTabs = LC_GET_BOOL("DockVerticalTabs", false); |
| | cbDockingVerticalTabs->setChecked(verticalTabs); |
| | } |
| | LC_GROUP_END(); |
| |
|
| | bool useClassicalStatusBar = LC_GET_ONE_BOOL("Startup", "UseClassicStatusBar", false); |
| |
|
| | statusbar_height_spinbox->setEnabled(useClassicalStatusBar); |
| | statusbar_height_checkbox->setEnabled(useClassicalStatusBar); |
| | statusbar_fontsize_checkbox->setEnabled(useClassicalStatusBar); |
| | statusbar_fontsize_spinbox->setEnabled(useClassicalStatusBar); |
| |
|
| | m_iconColorsOptions.loadSettings(); |
| | m_iconColorsOptions.mark(); |
| |
|
| | QString iconsOverrideDir = m_iconColorsOptions.getIconsOverridesDir(); |
| | leIconsOverrideDir->setText(iconsOverrideDir); |
| |
|
| | updateUIByOptions(); |
| | connect(cbIconColorMain->lineEdit(), &QLineEdit::textEdited, this, &LC_WidgetOptionsDialog::onMainIconColorChanged); |
| | connect(cbIconColorAccent->lineEdit(), &QLineEdit::textEdited, this, &LC_WidgetOptionsDialog::onAccentIconColorChanged); |
| | connect(cbIconColorBack->lineEdit(), &QLineEdit::textEdited, this, &LC_WidgetOptionsDialog::onBackIconColorChanged); |
| |
|
| | connect(tbOverridesDir, &QToolButton::clicked, this, &LC_WidgetOptionsDialog::setIconsOverrideFoler); |
| |
|
| | QFile iconsDir(iconsOverrideDir); |
| | bool directoryExists = iconsDir.exists(); |
| |
|
| | bool readingStyleEnabled = directoryExists; |
| | bool writingStyleEnabled = directoryExists; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | lblStyle->setEnabled(readingStyleEnabled); |
| | cbIconsStyle->setEnabled(readingStyleEnabled); |
| | pbStyleSave->setEnabled(writingStyleEnabled); |
| |
|
| | if (readingStyleEnabled){ |
| | if (!setupStylesCombobox()){ |
| | cbIconsStyle->setEnabled(false); |
| | pbRemoveStyle->setEnabled(false); |
| | } |
| | else{ |
| | cbIconsStyle->insertItem(0,""); |
| | cbIconsStyle->blockSignals(true); |
| | cbIconsStyle->setCurrentIndex(0); |
| | cbIconsStyle->blockSignals(false); |
| | pbRemoveStyle->setEnabled(true); |
| | } |
| | connect(cbIconsStyle, &QComboBox::currentTextChanged, this, &LC_WidgetOptionsDialog::onStyleChanged); |
| | } |
| |
|
| | if (writingStyleEnabled){ |
| | connect(pbStyleSave, &QPushButton::clicked, this, &LC_WidgetOptionsDialog::onSaveStylePressed); |
| | } |
| |
|
| | connect(pbRemoveStyle, &QPushButton::clicked, this, &LC_WidgetOptionsDialog::onRemoveStylePressed); |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::onStyleChanged(const QString & ){ |
| | QString style = cbIconsStyle->currentText(); |
| | if (!style.isEmpty()) { |
| | if (m_iconColorsOptions.loadFromFile(style)) { |
| | m_currentIconsStyleName = style; |
| | updateUIByOptions(); |
| | applyIconColors(); |
| | } |
| | } |
| | } |
| |
|
| | bool LC_WidgetOptionsDialog::setupStylesCombobox() { |
| | QStringList existingStyles; |
| | m_iconColorsOptions.getAvailableStyles(existingStyles); |
| | if (!existingStyles.isEmpty()) { |
| | for (const auto& style:existingStyles){ |
| | cbIconsStyle->addItem(style); |
| | } |
| | return true; |
| | } |
| | return false; |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::updateStylesCombobox(QStringList options){ |
| | options.clear(); |
| | m_iconColorsOptions.getAvailableStyles(options); |
| | pbRemoveStyle->setEnabled(!options.isEmpty()); |
| | cbIconsStyle->clear(); |
| | for (const auto& style:options){ |
| | cbIconsStyle->addItem(style); |
| | } |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::onSaveStylePressed(){ |
| | bool ok; |
| | QStringList options; |
| | m_iconColorsOptions.getAvailableStyles(options); |
| | auto styleName = LC_InputTextDialog::getText(this, tr("Save Icons Style"), tr("Enter name of icons style:"), options, true, m_currentIconsStyleName, &ok); |
| | if (ok){ |
| | m_iconColorsOptions.saveToFile(styleName); |
| | updateStylesCombobox(options); |
| | } |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::onRemoveStylePressed(){ |
| | bool ok; |
| | QStringList options; |
| | m_iconColorsOptions.getAvailableStyles(options); |
| | auto styleName = LC_InputTextDialog::getText(this, tr("Remove Icons Style"), tr("Select style to remove:"), options, false, m_currentIconsStyleName, &ok); |
| | if (ok) { |
| | if (m_iconColorsOptions.removeStyle(styleName)) { |
| | updateStylesCombobox(options); |
| | } |
| | } |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::setIconsOverrideFoler() { |
| | QString folder = selectFolder(tr("Select External Icons Folder")); |
| | if (folder != nullptr) { |
| | leIconsOverrideDir->setText(QDir::toNativeSeparators(folder)); |
| | } |
| | } |
| |
|
| | QString LC_WidgetOptionsDialog::selectFolder(QString title) { |
| | QString folder = nullptr; |
| | QFileDialog dlg(this); |
| | if (title != nullptr) { |
| | QString dlgTitle = title; |
| | dlg.setWindowTitle(dlgTitle); |
| | } |
| | dlg.setFileMode(QFileDialog::Directory); |
| | dlg.setOption(QFileDialog::ShowDirsOnly); |
| |
|
| | if (dlg.exec()) { |
| | folder = dlg.selectedFiles()[0]; |
| | } |
| | return folder; |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::updateUIByOptions(){ |
| | QString colorMain = m_iconColorsOptions.getColor(LC_SVGIconEngineAPI::AnyMode, LC_SVGIconEngineAPI::AnyState, LC_SVGIconEngineAPI::Main); |
| | QString colorAccent = m_iconColorsOptions.getColor(LC_SVGIconEngineAPI::AnyMode, LC_SVGIconEngineAPI::AnyState, LC_SVGIconEngineAPI::Accent); |
| | QString colorBack = m_iconColorsOptions.getColor(LC_SVGIconEngineAPI::AnyMode, LC_SVGIconEngineAPI::AnyState, LC_SVGIconEngineAPI::Background); |
| |
|
| | cbIconColorMain->setCurrentText(colorMain); |
| | cbIconColorAccent->setCurrentText(colorAccent); |
| | cbIconColorBack->setCurrentText(colorBack); |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::onpbMainClicked() { |
| | QString colorName = set_color(cbIconColorMain); |
| | if (!colorName.isEmpty()) { |
| | onMainIconColorChanged(colorName); |
| | } |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::onpbAccentClicked() { |
| | QString colorName = set_color(cbIconColorAccent); |
| | if (!colorName.isEmpty()) { |
| | onAccentIconColorChanged(colorName); |
| | } |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::onpbBackClicked() { |
| | QString colorName = set_color(cbIconColorBack); |
| | if (!colorName.isEmpty()) { |
| | onBackIconColorChanged(colorName); |
| | } |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::onMainIconColorChanged(const QString &value){ |
| | m_iconColorsOptions.setColor(LC_SVGIconEngineAPI::AnyMode, LC_SVGIconEngineAPI::AnyState, LC_SVGIconEngineAPI::Main, value); |
| | applyIconColors(); |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::onAccentIconColorChanged(const QString &value){ |
| | m_iconColorsOptions.setColor(LC_SVGIconEngineAPI::AnyMode, LC_SVGIconEngineAPI::AnyState, LC_SVGIconEngineAPI::Accent, value); |
| | applyIconColors(); |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::onBackIconColorChanged(const QString &value){ |
| | m_iconColorsOptions.setColor(LC_SVGIconEngineAPI::AnyMode, LC_SVGIconEngineAPI::AnyState, LC_SVGIconEngineAPI::Background, value); |
| | applyIconColors(); |
| | } |
| |
|
| | QString LC_WidgetOptionsDialog::set_color(QComboBox *combo) { |
| | QColor current = QColor::fromString(combo->lineEdit()->text()); |
| |
|
| | QColorDialog dlg; |
| | |
| |
|
| | QColor color = dlg.getColor(current, this, tr("Select Color"), QColorDialog::DontUseNativeDialog); |
| | if (color.isValid()) { |
| | auto colorName = color.name(); |
| | combo->lineEdit()->setText(colorName); |
| | return colorName; |
| | } |
| | return ""; |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::accept() { |
| | LC_GROUP_GUARD("Widgets"); |
| | { |
| | bool allow_style = style_checkbox->isChecked(); |
| | LC_SET("AllowStyle", allow_style); |
| | if (allow_style) { |
| | QString style = style_combobox->currentText(); |
| | LC_SET("Style", style); |
| | QApplication::setStyle(QStyleFactory::create(style)); |
| | } |
| |
|
| | auto& appWindow = QC_ApplicationWindow::getAppWindow(); |
| |
|
| | QString sheet_path = stylesheet_field->text(); |
| | LC_SET("StyleSheet", sheet_path); |
| | if (appWindow->loadStyleSheet(sheet_path)) { |
| | |
| | } |
| |
|
| | bool pickValuesButtonsFlatIcons = cbFlatPickValuesButtons->isChecked(); |
| | LC_SET("PickValueButtonsFlatIcons", pickValuesButtonsFlatIcons); |
| |
|
| | bool allow_theme = false; |
| | LC_SET("AllowTheme", allow_theme); |
| | int allow_toolbar_icon_size = toolbar_icon_size_checkbox->isChecked(); |
| | LC_SET("AllowToolbarIconSize", allow_toolbar_icon_size); |
| | if (allow_toolbar_icon_size) { |
| | int toolbar_icon_size = toolbar_icon_size_spinbox->value(); |
| | LC_SET("ToolbarIconSize", toolbar_icon_size); |
| | appWindow->setIconSize(QSize(toolbar_icon_size, toolbar_icon_size)); |
| | } |
| |
|
| | int allow_statusbar_fontsize = statusbar_fontsize_checkbox->isChecked(); |
| | LC_SET("AllowStatusbarFontSize", allow_statusbar_fontsize); |
| | if (allow_statusbar_fontsize) { |
| | int statusbar_fontsize = statusbar_fontsize_spinbox->value(); |
| | LC_SET("StatusbarFontSize", statusbar_fontsize); |
| | QFont font; |
| | font.setPointSize(statusbar_fontsize); |
| | appWindow->statusBar()->setFont(font); |
| | } |
| |
|
| | int allow_statusbar_height = statusbar_height_checkbox->isChecked(); |
| | LC_SET("AllowStatusbarHeight", allow_statusbar_height); |
| | if (allow_statusbar_height) { |
| | int statusbar_height = statusbar_height_spinbox->value(); |
| | LC_SET("StatusbarHeight", statusbar_height); |
| | appWindow->statusBar()->setMinimumHeight(statusbar_height); |
| | } |
| |
|
| | int columnCount = left_toobar_columns_spinbox->value(); |
| | LC_SET("LeftToolbarColumnsCount", columnCount); |
| |
|
| | LC_SET("LeftToolbarFlatIcons", cbLeftTBFlatButtons->isChecked()); |
| | LC_SET("LeftToolbarIconSize", sbLeftTBIconSize->value()); |
| |
|
| | LC_SET("DockWidgetsFlatIcons", cbDockWidgetsFlatButtons->isChecked()); |
| | LC_SET("DockWidgetsIconSize", sbDocWidgtetIconSize->value()); |
| |
|
| |
|
| | bool allowDockNesting =cbDockingAllowNested->isChecked(); |
| | LC_SET("DockAllowNested", allowDockNesting); |
| |
|
| | bool titleBarVertical = cbDockingVerticalTitleBar->isChecked(); |
| | LC_SET("DockTitleBarVertical", titleBarVertical); |
| |
|
| | bool verticalTabs = cbDockingVerticalTabs->isChecked(); |
| | LC_SET("DockVerticalTabs", verticalTabs); |
| |
|
| | LC_WidgetFactory::updateDockOptions(appWindow.get(), allowDockNesting, verticalTabs); |
| | LC_WidgetFactory::updateDockWidgetsTitleBarType(appWindow.get(), titleBarVertical); |
| | } |
| |
|
| | m_iconColorsOptions.setColor(LC_SVGIconEngineAPI::AnyMode, LC_SVGIconEngineAPI::AnyState, LC_SVGIconEngineAPI::Main, cbIconColorMain->currentText()); |
| | m_iconColorsOptions.setColor(LC_SVGIconEngineAPI::AnyMode, LC_SVGIconEngineAPI::AnyState, LC_SVGIconEngineAPI::Accent, cbIconColorAccent->currentText()); |
| | m_iconColorsOptions.setColor(LC_SVGIconEngineAPI::AnyMode, LC_SVGIconEngineAPI::AnyState, LC_SVGIconEngineAPI::Background, cbIconColorBack->currentText()); |
| |
|
| | QString iconsOverrideDir = leIconsOverrideDir->text(); |
| | m_iconColorsOptions.setIconsOverridesDir(iconsOverrideDir); |
| |
|
| | applyIconColors(); |
| | m_iconColorsOptions.save(); |
| |
|
| | if (m_iconColorsOptions.isIconOverridesChanged()) { |
| | QMessageBox::warning(this, tr("Preferences"), |
| | tr("Icons overrides directory changed. Please restart the application to apply.")); |
| | } |
| |
|
| | LC_Dialog::accept(); |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::reject(){ |
| | m_iconColorsOptions.restore(); |
| | applyIconColors(); |
| | LC_Dialog::reject(); |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::showAdvancedSetup(){ |
| | LC_DlgIconsSetup dlg(this); |
| | LC_IconColorsOptions copy = LC_IconColorsOptions(m_iconColorsOptions); |
| | dlg.setIconsOptions(©); |
| | if (dlg.exec() == QDialog::Accepted){ |
| | m_iconColorsOptions.apply(copy); |
| | updateUIByOptions(); |
| | applyIconColors(); |
| | } |
| | } |
| |
|
| | |
| | |
| | |
| | |
| |
|
| | void LC_WidgetOptionsDialog::applyIconColors(){ |
| | m_iconColorsOptions.applyOptions(); |
| | QPixmapCache::clear(); |
| | auto& appWindow = QC_ApplicationWindow::getAppWindow(); |
| | if (appWindow != nullptr) { |
| | appWindow->fireIconsRefresh(); |
| | } |
| | appWindow->update(); |
| | appWindow->repaint(); |
| | QApplication::processEvents(); |
| | } |
| |
|
| | void LC_WidgetOptionsDialog::chooseStyleSheet(){ |
| | QString path = QFileDialog::getOpenFileName(this); |
| | if (!path.isEmpty()){ |
| | stylesheet_field->setText(QDir::toNativeSeparators(path)); |
| | } |
| | } |
| |
|