Scintilla 라이브러리를 활용한 SPACE 코드 전용 에디터 AESPA 개발 [2일차]

1. 메인 클래스 작성


AESPA의 메인 클래스를 아래와 같이 작성하였다. 클래스 이름은 SIDE이며 본 클래스에서 모든 클래스 및 함수들이 제어될 예정이다.


class SIDE : public QMainWindow
{
    Q_OBJECT

public:
    SIDE(QString fileName="", QWidget *parent = nullptr);
    ~SIDE();

protected:
    void closeEvent(QCloseEvent *event);
    virtual void dragEnterEvent(QDragEnterEvent *event);
    virtual void dropEvent(QDropEvent *event);

private slots:
    void newFile();
    void open();
    bool save();
    bool saveAs();
    void refresh();
    void exportExcel();
    void setOptions();
    void quit();
    void executeCode();
    void copy();
    void cut();
    void paste();
    void find();
    void findAndReplace();
    void toggleFoldAll();
    void unitConverter();
    void steamTable();
    void menuSearch_resultsTriggered(QAction* act);
    void spaceManual();
    void manual();
    void about();
    void setFolderExisted(bool b);
    void optionSettingCompleted();
    void optionSettingCanceled();
    void editorFontChanged(QFont font);
    void textModified(bool b);
    void on_tabWidget_currentChanged(int index);
    void on_tabWidget_tabCloseRequested(int index);
    void spaceCalculationMessageSended(QStringList statusLogData);
    void spaceCalculationCancelled();
    void spaceCalculationNormallyFinished();
    void spaceCalculationFailed();
    void fileDropEventOccured(QString fileName);
    void on_rightTabWidget_tabCloseRequested(int index);
    void setApplicationSkin(int skin);
    void cleanRecentFiles(bool b);

private:
    Ui::SIDE *ui;
    //
    void initialize();
    void displayStartupWindow();
    void loadSettings();
    void saveSettings();
    void clearRecentProject();
    void recentProjectsAction(int);
    void addRecentProject(const QString &name);
    void refreshRecentProjects();
    void handleRecentProject(int ndx);
    bool maybeSave();
    void loadFile(const QString &fileName);
    void setCurrentFile(const QString &fileName);
    void setCurrentDir(const QString &fileName);
    QString strippedName(const QString &fullFileName);
    bool saveFile(const QString &fileName);
    void createToolBars();
    void addNewTab(QString fileName);
    void addNewTabToRightSide(QString fileName);
    bool isFileAlreadyOpened(QString fileName);
    bool dataToPlotData(QString dataFileType, QString dataFile);
    QString getTend(QString inputFile);
    void refreshFile(MainWindow* editor, QString fileName);
    //
    MainWindow* _textEditor = nullptr;
    OptionDlg* _optionDlg = nullptr;
    CalcProgressWindow* _calcWindow = nullptr;
    StartupWindow* _startupWindow = nullptr;
    //
    QString _currentFileName;
    QList<QString> _fileListMap;
    QList<MainWindow*> _editorListMap;
    QString _code   ="";
    QString _workDir="";
    QString _defaultWorkDir="";
    bool _bookMarkAutoUpdate = true;
    QFont _editorFont = QFont("Consolas", 14, QFont::Normal);
    int _applicationSkin = 0;
    //
    QStringList _plotVariables;
    QList<QStringList> _plotData;
    QList<QUrl> _urlsFromWindow{};
    bool _isFolded = false;
    bool _isFolderExisted = false;
    // For recent files
    QVector<QString> _recentProjects;
    QVector<QString> _recentToolProjects;
    QVector<QAction*> _recentActions;
    QMenu* _recentProjectMenu;
    const int SETTINGS_RECENT_SIZE = 20; // 표시할 최대 최근 파일 개수
    SpaceManualWindow* _spaceManual = nullptr;
    ManualWindow* _aespaManual = nullptr;

};


2. 초기화면 설계


AESPA의 초기화면은 개발자가 작업 시 불필요한 시간낭비를 줄일 수 있도록 아래와 같이 설계되었다.








댓글

이 블로그의 인기 게시물

SPACE 코드 제어 계통도를 그림 파일로 변환하는 예시