📦 jkjkil4 / LL1Parser

📄 mainwindow.h · 100 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100#pragma once

#include <QMainWindow>
#include <QStackedWidget>
#include <QMenuBar>
#include <QMessageBox>

//#include <QProcess>
#include <QDesktopServices>
#include <QHBoxLayout>
#include <QSettings>
//#include <QDebug>

#include <Lib/header.h>

#include "Widget/sidebar.h"

#include "mw/HomePage/homepage.h"
#include "mw/Edit/editview.h"

#include "Dialog/settingsdialog.h"
#include "Dialog/newprojdialog.h"

#include "Menu/rflmenu.h"

class MainWindow : public QMainWindow
{
    Q_OBJECT
protected:
    void changeEvent(QEvent *ev) override;
    void closeEvent(QCloseEvent *ev) override;

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow() override;

    void setCurrentView(const QString &name);
    void setCurrentView(MainWindowView *view);

    void updateProjMenuState();

    void updateTr();

public slots:
    void onNewProj();
    void onOpenProj();
    void onOpenProj(const QString &filePath);
    void onSaveProj();
    void onSaveProjAs();

    void onAbout();

    void onRFLMenuRequested(const QPoint &pos);

private:
    QRect mNormalGeometry;   //默认位置大小

    QStackedWidget *mStackedWidget = new QStackedWidget;     //视图控件
    SideBar *mSideBar = new SideBar; //侧边栏


    struct Menu {
        QMenu file;
        QAction file_actNewProj;
        QAction file_actOpenProj;
        QAction file_actSave;
        QAction file_actSaveAs;

        QMenu other;
        QAction other_actAbout;
        QAction other_actAboutQt;
        QAction other_actSettings;

        void init(QMenuBar *menuBar);
        void tr();
    } mMenu;


    struct View
    {
        QString iconPath;
        QString name;
        QString(*TrFn)();
        MainWindowView *p;
    };

    HomePage *mViewHomePage = new HomePage;
    EditView *mViewEdit = new EditView;

    View mViews[2] = {
        { ":/SideBtn/qrc/HomePage.png", "HomePage", []()->QString { return tr("HomePage"); }, mViewHomePage },
        { ":/SideBtn/qrc/Edit.png", "Edit", []()->QString { return tr("Edit"); }, mViewEdit }
    };

    QMap<QString, MainWindowView*> mMapViews = {
        { "HomePage", mViewHomePage },
        { "Edit", mViewEdit }
    };
};