#pragma once
#ifndef ECHOTABLEEDITWINDOW_H
#define ECHOTABLEEDITWINDOW_H
#include "AllHead.h"
#include <QtWidgets/QMainWindow>
#include "ui_EchoTableEditWindow.h"
#include "TableProcess/TableViewModel.h"
#include <QUndoStack>
#include <QUndoCommand>
#include <qprogressbar.h>
#include <memory>


/*
* 命令
***/


/*
* 表格编辑窗体情况分析
****/
class EchoTableEditWindow : public QMainWindow
{
    Q_OBJECT
public:
    bool FILEOPENLOCK;
    bool CheckFieldContextHasEmptyCeilLOCK;
private:
   std::shared_ptr<AbstractTableModel> model;
    QMenu* tableViewContextMenu;
    QUndoStack* m_undoStack;

    /*菜单*/
    QProgressBar* statusprogressBar;


public:
    EchoTableEditWindow(QWidget* parent = nullptr); 
    ~EchoTableEditWindow();

    int initTableViewStatusBarControl();
    int initTableViewContextMenu(); // 初始化上下文菜单
    int LockFileOpen(bool flag=true); // 锁定文件，不允许进行重新打开文件
    int setCheckFieldContextHasEmptyCeilLOCK(bool flag=true);// 允许启动当前字段中存在空格检查，-- 提供给FEKOResult分析使用
    int loadTablemode(std::shared_ptr<AbstractTableModel> mode); // 加载tableview 使用的model
    int setTableViewAutoSort(bool flag);
    int setDragDropOverwriteMode(bool flag); // 是否禁用列调换

    int setTablCalibrationTab(bool flag);

private:
    Ui::EchoTableEditWindow ui;
    int OpenCSVDialog();
    int SaveCSVDialog();
    int SaveAsDialog();
    

public slots:


    // tableview 右键菜单
    void ShowTableViewContextMenu(QPoint p);
    void tableView_CopyAction();
    void tableView_PasteAction();
    void tableView_UndoAction();
    void tableView_RedoAction();
    void tableView_CheckFieldHasEmptyCeilAction();

    void on_actionOpen_triggered();
    void on_actionSave_triggered();
    void on_actionSaveAs_triggered();

    void on_actionEchoSplitExport_triggered();    // 回波数据导出
    void on_actionCalibrationConst_triggered();     // 计算定标常数
 



protected: // 重写函数
    void closeEvent(QCloseEvent* event) override {
        // 在窗口关闭事件中询问用户是否关闭
        QMessageBox::StandardButton reply;
        reply = QMessageBox::question(this, u8"Close", u8"您回波数据导出了吗？", QMessageBox::Yes | QMessageBox::No);

        if (reply == QMessageBox::Yes) {
            // 用户点击了"Yes"按钮，关闭窗口
            event->accept();
        }
        else {
            // 用户点击了"No"按钮，取消关闭操作
            event->ignore();
        }
    };
};

#endif // !ECHOTABLEEDITWINDOW_H