#pragma once #include "enums.h" #include #include #include #include #include QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget* parent = nullptr); ~MainWindow() override; // Набор методов отображения, который используют типизированные контроллеры. void SetInputText(const std::string& text); void SetErrorText(const std::string& text); void SetFormulaText(const std::string& text); void SetMemText(const std::string& text); void SetExtraKey(const std::optional& key); // Набор методов регистрации функций обратного вызова, который используют контроллеры и `main`. void SetDigitKeyCallback(std::function cb); void SetProcessOperationKeyCallback(std::function cb); void SetProcessControlKeyCallback(std::function cb); void SetControllerCallback(std::function cb); private slots: // Слоты переводят Qt-сигналы в перечисления проекта и простые значения. void OnDigitClicked(); void OnOperationClicked(); void OnControlClicked(); void OnControllerChanged(); private: // Вспомогательные функции оставляют детали имен виджетов внутри окна. static std::optional OperationFromObjectName(const QString& object_name); static std::optional ControlFromObjectName(const QString& object_name); static std::optional ControllerFromText(const QString& text); Ui::MainWindow* ui; // Сохраненные функции обратного вызова вызываются только при соответствующем действии в интерфейсе. std::function operation_cb_; std::function digit_cb_; std::function control_cb_; std::function controller_cb_; };