text paste
#pragma once

#include <QWidget>
#include <QJsonObject>
#include <QVector>
#include <QList>
#include "e3d_motion_controller_base.h"
#include "ui_view_configGenarater.h"

struct data_ToolheadConfig;
struct data_motion_controller;
class QSpinBox;
class QPushButton;
class QLineEdit;
class QTableWidget;
class QListWidget;
class QTabWidget;
class QComboBox;
class QCheckBox;
class QGroupBox;
struct data_equipment;

QT_BEGIN_NAMESPACE
namespace Ui { class e3d_configGenaraterClass; };
QT_END_NAMESPACE

class view_configGenerator : public QWidget
{
	Q_OBJECT

public:
	explicit view_configGenerator(QWidget *parent = nullptr);
	~view_configGenerator();

private slots:
	void onLoadConfigFromFile();
	void onSaveConfigToFile();
	void onSaveTempClicked();

	// 1. 控制卡 Master-Detail 槽函数
	void onAddController();
	void onDeleteController();
	void onControllerSelected(int currentRow);

	void onAddAxis();
	void onDeleteAxis();
	void onAddIO(QTableWidget* table);
	void onDeleteIO(QTableWidget* table);

	// 2. 工具头 (Toolhead) Master-Detail 槽函数
	void onAddToolhead();
	void onDeleteToolhead();
	void onToolheadSelected(int currentRow);
	void onAddMountedDevice();
	void onDeleteMountedDevice();

private:
	void initUI();

	// 顶级 UI 构建
	QWidget* createMotionControllerTab();
	QWidget* createCommsTab();
	QWidget* createHeightSensorTab();  // 测距传感器配置页
	QWidget* createDispenserTab();
	QWidget* createExternalDeviceTab(); // 物理坐标与通讯通道统一在此管理
	QWidget* createToolheadTab();       // 工作头配置页
	QWidget* createCommonTab();

	void updateTableRows(QTableWidget *table, int targetCount);

	// JSON 内存与 UI 数据同步
	QJsonObject saveToTempJson();
	void loadFromTempJson(const QJsonObject& json);

	// 控制卡辅助同步
	void saveCurrentControllerFromUI();
	void updateControllerRightPanel();
	void clearControllerRightPanel();

	// 工具头辅助同步
	void saveCurrentToolheadFromUI();
	void updateToolheadRightPanel();
	void clearToolheadRightPanel();

private:
	Ui::e3d_configGenaraterClass *ui;
	data_equipment* currentData = nullptr;

	// 顶部通用控件
	QLineEdit *le_configPath;
	QPushButton *pb_loadConfig;
	QPushButton *pb_saveConfigToFile;
	QPushButton *pb_saveConfigToTemp;
	QLineEdit *le_softwareName;

	// 1. 控制卡页面控件
	QListWidget  *m_cardListWidget;
	QGroupBox    *m_controllerRightGroup; // 右侧整体面板容器,用于控制 Enable/Disable
	QLineEdit    *m_editCardName;
	QComboBox    *m_comboBrand;
	QLineEdit    *m_editIP;
	QSpinBox     *m_spinPort;
	QLineEdit    *m_editAllAxisHomePath;
	QCheckBox    *m_showSub;

	QTabWidget   *m_subConfigTab;
	QTableWidget *m_axisTable;
	QTableWidget *m_dinTable;
	QTableWidget *m_doutTable;
	QTableWidget *m_ainTable;
	QTableWidget *m_aoutTable;
	QTableWidget *m_surfaceAxisGroupTable;

	QList<data_motion_controller> m_controllerList;
	int m_currentCardIndex = -1;

	// 2. 通讯模块页面控件
	QSpinBox *sb_count_Comms;
	QTableWidget *tw_Comms;

	// 3. 测距传感器页面控件 (Height Sensor)
	QSpinBox *sb_count_HeightSensor;
	QTableWidget *tw_HeightSensor;

	// 4. 点胶机页面控件
	QSpinBox *sb_count_Dispenser;
	QTableWidget *tw_Dispenser;

	// 5. 全局外设页面控件 (包含 Pos X, Y, Z 以及 m_commsChannelName)
	QSpinBox *sb_count_ExternalDevice;
	QTableWidget *tw_ExternalDevice;
		
	// 6. 工作头 (Toolhead) 页面控件
	QListWidget  *m_toolheadListWidget;
	QGroupBox    *m_toolheadRightGroup; // 右侧整体面板容器,用于控制 Enable/Disable
	QLineEdit    *m_editToolheadName;
	QCheckBox    *m_chkIsVirtualToolhead;
	QLineEdit    *m_editBindMotionGroup;
	QLineEdit    *m_editBindZAxis;
	QTableWidget *m_mountedDevicesTable;

	QList<data_ToolheadConfig> m_toolheadList;
	int m_currentToolheadIndex = -1;
};