diff --git a/logdoctor/CMakeLists.txt b/logdoctor/CMakeLists.txt index 20fd0932..78949ec8 100644 --- a/logdoctor/CMakeLists.txt +++ b/logdoctor/CMakeLists.txt @@ -166,6 +166,9 @@ set(PROJECT_SOURCES modules/crapinfo/modules/stylesheets.h modules/crapinfo/modules/stylesheets.cpp + tools/crappath/crappath.h + tools/crappath/crappath.cpp + tools/crapnote/crapnote.ui tools/crapnote/crapnote.h tools/crapnote/crapnote.cpp diff --git a/logdoctor/tools/crappath/crappath.cpp b/logdoctor/tools/crappath/crappath.cpp new file mode 100644 index 00000000..3dc9db77 --- /dev/null +++ b/logdoctor/tools/crappath/crappath.cpp @@ -0,0 +1,116 @@ + +#include "crappath.h" + +#include "globals/global_configs.h" + +#include "modules/exceptions.h" + +#include + + +QString makeStyleSheet(); + + +Crappath::Crappath( QWidget* parent ) + : QFileDialog(parent) +{ + QFileDialog::setViewMode( QFileDialog::Detail ); + + QFileDialog::setFileMode( QFileDialog::Directory ); + + QFileDialog::setOptions( + QFileDialog::ShowDirsOnly | + QFileDialog::DontResolveSymlinks | + QFileDialog::ReadOnly | + QFileDialog::DontUseCustomDirectoryIcons ); + + QFileDialog::setFilter( + QDir::Dirs | + QDir::NoDot | + QDir::NoSymLinks | + QDir::Hidden ); + + QFileDialog::setLabelText( QFileDialog::Accept, Crappath::tr("Choose") ); + QFileDialog::setLabelText( QFileDialog::Reject, Crappath::tr("Cancel") ); + + switch ( GlobalConfigs::window_theme ) { + case WindowTheme::Native: + QFileDialog::setStyleSheet(""); + break; + case WindowTheme::Light: + [[fallthrough]]; + case WindowTheme::Dark: + QFileDialog::setStyleSheet( makeStyleSheet() ); + break; + default: + // wrong + throw GenericException( "Unexpected WindowTheme: "+std::to_string(static_cast(GlobalConfigs::window_theme)), true ); + break; + } +} + + + +enum StyleId : uint32_t { + BUTTONS_BASE, + BUTTONS_BASE_HOVER, + BUTTONS_BASE_FLAT, + BUTTONS_BASE_DISABLED +}; + +using StyleMap = std::unordered_map; + +StyleMap makeStyleMap() +{ + switch ( GlobalConfigs::window_theme ) { + case WindowTheme::Light: + return { + {BUTTONS_BASE, + "rgb( 99, 188, 255 )"}, + {BUTTONS_BASE_HOVER, + "rgb( 123, 201, 255 )"}, + {BUTTONS_BASE_FLAT, + "rgb( 200, 219, 238 )"}, + {BUTTONS_BASE_DISABLED, + "rgb( 200, 219, 238 )"} + }; + break; + case WindowTheme::Dark: + return { + {BUTTONS_BASE, + "rgb( 10, 155, 10 )"}, + {BUTTONS_BASE_HOVER, + "rgb( 33, 162, 33 )"}, + {BUTTONS_BASE_FLAT, + "rgb( 21, 71, 21 )"}, + {BUTTONS_BASE_DISABLED, + "rgb( 21, 71, 21 )"} + }; + break; + default: + throw GenericException( "Unexpected WindowTheme: "+std::to_string(static_cast(GlobalConfigs::window_theme)), true ); + break; + } +} + +QString makeStyleSheet() +{ + const StyleMap style{ makeStyleMap() }; + return + "QPushButton {" + " border: 0px;" + " border-radius: 8px;" + " padding-left: 4px;" + " padding-right: 4px;" + " background-color: "+style.at(BUTTONS_BASE)+";" + "}" + "QPushButton:hover {" + " background-color: "+style.at(BUTTONS_BASE_HOVER)+";" + "}" + "QPushButton::flat {" + " background-color: "+style.at(BUTTONS_BASE_FLAT)+";" + "}" + "QPushButton::disabled {" + " background-color: "+style.at(BUTTONS_BASE_DISABLED)+";" + "}"; +} diff --git a/logdoctor/tools/crappath/crappath.h b/logdoctor/tools/crappath/crappath.h new file mode 100644 index 00000000..adfef495 --- /dev/null +++ b/logdoctor/tools/crappath/crappath.h @@ -0,0 +1,16 @@ +#ifndef LOGDOCTOR__CRAPPATH_H +#define LOGDOCTOR__CRAPPATH_H + + +#include + + +class Crappath : public QFileDialog +{ + Q_OBJECT + +public: + explicit Crappath( QWidget* parent=nullptr ); +}; + +#endif // LOGDOCTOR__CRAPPATH_H