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의 초기화면은 개발자가 작업 시 불필요한 시간낭비를 줄일 수 있도록 아래와 같이 설계되었다.
댓글
댓글 쓰기