#ifndef DIALOGEDITVALUE_H
#define DIALOGEDITVALUE_H

#include <QDialog>
#include <QLabel>

#include "DataTypeDef.h"

namespace Ui {
class DialogEditValue;
}

namespace EditType {
constexpr int TEXT      = 0x0;
constexpr int INT       = 0x1;
constexpr int DOUBLE    = 0x2;
constexpr int DATETIME  = 0x3;
}

/**
 * @brief DialogEditValue 类用于创建一个对话框，允许用户编辑和显示特定类型的值。
 * 
 * 该类继承自 QDialog，用于创建一个用户界面，用户可以在其中编辑和显示特定类型的值。
 * 主要功能包括设置和获取值、设置编辑类型以及处理键盘可见性变化等。
 * 
 * @param parent 父窗口指针，用于设置对话框的父窗口。
 * @param type 初始值类型，默认为 General::Type::VALUE。
 */
class DialogEditValue : public QDialog
{
    Q_OBJECT

public:
    explicit DialogEditValue(QWidget *parent = nullptr, int type = General::Type::VALUE);
    ~DialogEditValue();

    /**
     * @brief 设置对话框显示的值。
     * 
     * @param text 要显示的文本值。
     * @param type 值的类型，默认为 General::Type::VALUE。
     */
    void setValue(const QString& text, const int& type = General::Type::VALUE);

    /**
     * @brief 获取对话框当前显示的值。
     * 
     * @param type 值的类型，默认为 General::Type::VALUE。
     * @return 当前显示的文本值。
     */
    QString getValue(const int& type = General::Type::VALUE);

    /**
     * @brief 设置编辑类型。
     * 
     * @param type 要设置的编辑类型。
     */
    void setEditType(const int& type);

private:
    void initConnect();
    void updateShow(int type);
    void setBackground();
    void centerWindow();

    void setAddressRegExpValidator();

private slots:
    // 键盘可见性改变信号槽
    void onKeyboardVisibilityChanged();

protected:
    void showEvent(QShowEvent* event) override;

private:
    Ui::DialogEditValue *ui;
    QLabel* m_background;
    // 原始位置
    QPoint  m_originalPos;
};

#endif // DIALOGEDITVALUE_H
