#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_TableMainWindow.h"
#include "TableViewModel.h"
#include <QUndoStack>
#include <QUndoCommand>
#include <qprogressbar.h>
#include <memory>


/*
* 命令
***/

class PasteCommand : public QUndoCommand { // 粘贴命令
private:
    QTableView* tableItem;
    QModelIndexList selectedIndexes; 
    std::vector<std::vector<QString>> newText;
    std::vector<std::vector<QString>> oldText;
    size_t start_row, start_col;
public:
    PasteCommand(QTableView* tableItem, QModelIndexList selectedIndexes, QString clipboardText, QUndoCommand* parent = 0);
    ~PasteCommand();
    //撤销
    void undo() override;
    //回退
    void redo() override;
};


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

    /*菜单*/
    QProgressBar* statusprogressBar;


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

    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); // 是否禁用列调换
private:
    Ui::TableMainWindow ui;



public slots:
    int OpenCSVDialog();
    int SaveCSVDialog();
    int SaveAsDialog();

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

    void tableView_CheckFieldHasEmptyCeilAction();
};
