XNSim/XNEditor/mainwindow.h

292 lines
6.2 KiB
C
Raw Permalink Normal View History

2025-04-28 12:25:20 +08:00
/**
* @file mainwindow.h
* @author jinchao
* @brief
* @version 1.0
* @date 2025-02-14
*
* @copyright Copyright (c) 2025 COMAC
*
*/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QXmlStreamAttributes>
#include <QVector>
#include <QLineEdit>
#include <QCloseEvent>
#include <QTableWidget>
#include <QSharedPointer>
#include <QTreeWidgetItem>
#include <QDomDocument>
QT_BEGIN_NAMESPACE
namespace Ui
{
class MainWindow;
}
QT_END_NAMESPACE
/**
* @brief
*/
struct MemberVariable {
QString dataType;
QString variableName;
bool isArray;
QVector<int> arraySizes;
QString description;
};
/**
* @brief
*/
struct StructDefinition {
QString structName;
QVector<QSharedPointer<MemberVariable>> memberVariables;
};
/**
* @brief
*/
struct NamespaceDefinition {
QString namespaceName;
QVector<QSharedPointer<StructDefinition>> structDefinitions;
QVector<QSharedPointer<NamespaceDefinition>> childNamespaces;
};
/**
* @brief
*/
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
/**
* @brief
* @param parent
*/
MainWindow(QWidget *parent = nullptr);
/**
* @brief
* @param fileName
* @param parent
*/
MainWindow(QString fileName, QWidget *parent = nullptr);
/**
* @brief
*/
~MainWindow();
public slots:
/**
* @brief
*/
void onNewFileTriggered();
/**
* @brief
*/
void onOpenFileTriggered();
/**
* @brief
*/
void onCloseFileTriggered();
/**
* @brief IDL树型结构元素点击响应
* @param item:
*/
void onTreeWidgetItemClicked(QTreeWidgetItem *item);
private:
/**
* @brief
*/
void initMenu();
/**
* @brief
*/
void initFileMenu();
/**
* @brief
*/
void initEditMenu();
/**
* @brief
* @param style: 0 1/ 2IDL文件类型
*/
void initCentralWidget(int style = 0);
/**
* @brief IDL树形控件
*/
void initIDLTreeWidget();
/**
* @brief
*/
void openScenarioFile();
/**
* @brief
*/
void openModelFile();
/**
* @brief
*/
void openServiceFile();
/**
* @brief IDL文件
*/
void openIDLFile();
/**
* @brief
*/
void saveFile(QString filePath);
/**
* @brief
*/
void saveScenarioFile(QString filePath);
/**
* @brief
*/
void saveModelFile(QString filePath);
/**
* @brief
*/
void saveServiceFile(QString filePath);
/**
* @brief IDL文件
*/
void saveIDLFile(QString filePath);
/**
* @brief 1labellineEdit类型
* @param layout
* @param name
* @param attributes
*/
void addGroupBox(QVBoxLayout *layout, QString name, QDomNamedNodeMap attributes);
/**
* @brief 2comboBox类型
* @param layout
* @param name
* @param attributes
*/
void addGroupBox2(QVBoxLayout *layout, QString name, QDomNamedNodeMap attributes);
/**
* @brief 3tabwidget类型
* @param layout
* @param name
* @param groupAttributes
* @param vecAttributes
* @param type
*/
void addGroupBox3(QVBoxLayout *layout, QString name, QDomNamedNodeMap groupAttributes,
QVector<QDomNamedNodeMap> vecAttributes, int type);
/**
* @brief 1item
* @param gridLayout
* @param itemName
* @param itemValue
* @param itemStyle
*/
void addItemIntoGroupBox(QGridLayout *gridLayout, QString itemName, QString itemValue,
int itemStyle);
/**
* @brief lineEdit的规则
* @param lineEdit lineEdit
* @param name
*/
void setLineEditRules(QLineEdit *lineEdit, QString name);
/**
* @brief
* @param modelName
* @param ModelPath
* @return true
* @return false
*/
bool findModel(QString modelName, QString ModelPath);
/**
* @brief
* @param serviceName
* @param ServicePath
* @return true
* @return false
*/
bool findService(QString serviceName, QString ServicePath);
/**
* @brief
* @param tabWidget
*/
void UpdateModelList(QTableWidget *tabWidget);
/**
* @brief
* @param tabWidget
*/
void UpdateServiceList(QTableWidget *tabWidget);
/**
* @brief
* @param fileName
*/
void openFileInNewWindow(QString fileName);
/**
* @brief
* @param widget
*/
void connectModificationSignals(QWidget *widget);
/**
* @brief
*/
void updateWindowTitle();
/**
* @brief
* @param layout
*/
void addPlusButton(QGridLayout *layout);
public:
/**
* @brief
*/
QString currentFilePath;
/**
* @brief 0: 1: 2: 3: IDL文件
*/
int currentFileType;
private:
/**
* @brief ui
*/
Ui::MainWindow *ui;
/**
* @brief
*/
QString modelPath;
/**
* @brief
*/
QString ServicePath;
/**
* @brief
*/
bool isModified;
/**
* @brief
*/
QVector<QSharedPointer<NamespaceDefinition>> namespaces;
/**
* @brief namespaces更新IDL树形控件
*/
void updateIDLTreeWidget();
protected:
/**
* @brief
* @param event
*/
void closeEvent(QCloseEvent *event) override;
};
#endif // MAINWINDOW_H