diff --git a/KeyBorad/KeyBorad/APP/AppKeyButton.cpp b/KeyBorad/KeyBorad/APP/AppKeyButton.cpp new file mode 100644 index 0000000..1d7ca8b --- /dev/null +++ b/KeyBorad/KeyBorad/APP/AppKeyButton.cpp @@ -0,0 +1,100 @@ +#include "APP/AppKeyButton.h" + +#include "APP/AppTheme.h" + +namespace APP +{ + +App_KeyButton::App_KeyButton(quint16 Usage, const QString& Text, QWidget* p_Parent) + : QPushButton(Text, p_Parent), + appUsage(Usage), + appBaseText(Text) +{ + setMinimumSize(88, 72); + setCheckable(false); + App_Func_RefreshText(); + App_Func_RefreshStyle(); +} + +quint16 App_KeyButton::App_Func_GetUsage() const +{ + return appUsage; +} + +void App_KeyButton::App_Func_SetPressedState(bool IsPressed) +{ + if (appIsPressed == IsPressed) + { + return; + } + + appIsPressed = IsPressed; + App_Func_RefreshStyle(); +} + +void App_KeyButton::App_Func_SetLatchedState(bool IsLatched) +{ + if (appIsLatched == IsLatched) + { + return; + } + + appIsLatched = IsLatched; + App_Func_RefreshStyle(); +} + +void App_KeyButton::App_Func_SetFeatureText(const QString& Text) +{ + if (appFeatureText == Text.trimmed()) + { + return; + } + + appFeatureText = Text.trimmed(); + App_Func_RefreshText(); +} + +void App_KeyButton::App_Func_RefreshText() +{ + if (appFeatureText.isEmpty()) + { + setText(appBaseText); + return; + } + + setText(QStringLiteral("%1\n%2").arg(appBaseText, appFeatureText)); +} + +void App_KeyButton::App_Func_RefreshStyle() +{ + const App_ThemePalette Palette = App_Theme_DefaultPalette(); + const QColor FillColor = appIsPressed + ? Palette.Accent + : (appIsLatched ? Palette.AccentSoft : Palette.Surface); + const QColor TextColor = appIsPressed + ? QColor(15, 23, 42) + : Palette.TextPrimary; + + setStyleSheet(QStringLiteral( + "QPushButton {" + " background:rgb(%1,%2,%3);" + " color:rgb(%4,%5,%6);" + " border:1px solid rgb(%7,%8,%9);" + " border-radius:12px;" + " font-size:16px;" + " font-weight:600;" + " padding:8px;" + "}" + ) + .arg(FillColor.red()) + .arg(FillColor.green()) + .arg(FillColor.blue()) + .arg(TextColor.red()) + .arg(TextColor.green()) + .arg(TextColor.blue()) + .arg(Palette.Border.red()) + .arg(Palette.Border.green()) + .arg(Palette.Border.blue())); +} + +} // namespace APP diff --git a/KeyBorad/KeyBorad/APP/AppKeyButton.h b/KeyBorad/KeyBorad/APP/AppKeyButton.h new file mode 100644 index 0000000..c067f66 --- /dev/null +++ b/KeyBorad/KeyBorad/APP/AppKeyButton.h @@ -0,0 +1,30 @@ +#pragma once + +#include +#include + +namespace APP +{ + +class App_KeyButton : public QPushButton +{ +public: + explicit App_KeyButton(quint16 Usage, const QString& Text, QWidget* p_Parent = nullptr); + + quint16 App_Func_GetUsage() const; + void App_Func_SetPressedState(bool IsPressed); + void App_Func_SetLatchedState(bool IsLatched); + void App_Func_SetFeatureText(const QString& Text); + +private: + void App_Func_RefreshText(); + void App_Func_RefreshStyle(); + + quint16 appUsage = 0; + bool appIsPressed = false; + bool appIsLatched = false; + QString appBaseText; + QString appFeatureText; +}; + +} // namespace APP