59 lines
2.3 KiB
C++
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_;
|
|
};
|