Files
Dmitry Rudakov 7504a12f6a Upload to git
2026-06-05 20:25:41 +05:00

59 lines
2.3 KiB
C++

#pragma once
#include "enums.h"
#include <QMainWindow>
#include <QString>
#include <functional>
#include <optional>
#include <string>
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<std::string>& key);
// Набор методов регистрации функций обратного вызова, который используют контроллеры и `main`.
void SetDigitKeyCallback(std::function<void(int key)> cb);
void SetProcessOperationKeyCallback(std::function<void(Operation key)> cb);
void SetProcessControlKeyCallback(std::function<void(ControlKey key)> cb);
void SetControllerCallback(std::function<void(ControllerType controller)> cb);
private slots:
// Слоты переводят Qt-сигналы в перечисления проекта и простые значения.
void OnDigitClicked();
void OnOperationClicked();
void OnControlClicked();
void OnControllerChanged();
private:
// Вспомогательные функции оставляют детали имен виджетов внутри окна.
static std::optional<Operation> OperationFromObjectName(const QString& object_name);
static std::optional<ControlKey> ControlFromObjectName(const QString& object_name);
static std::optional<ControllerType> ControllerFromText(const QString& text);
Ui::MainWindow* ui;
// Сохраненные функции обратного вызова вызываются только при соответствующем действии в интерфейсе.
std::function<void(Operation key)> operation_cb_;
std::function<void(int key)> digit_cb_;
std::function<void(ControlKey key)> control_cb_;
std::function<void(ControllerType controller)> controller_cb_;
};