QtNovelUI/WordsIDE/mainwindow.cpp

175 lines
6.0 KiB
C++
Raw Normal View History

2022-11-06 00:37:50 +00:00
#include "mainwindow.h"
#include <QLabel>
#include <QMenuBar>
#include <QStatusBar>
#include <QDebug>
#include <QDateTime>
#include <QTextEdit>
2022-11-15 08:07:02 +00:00
#include <QToolBar>
#include <xmlprojectmanager.h>
#include <QFileDialog>
#include <QInputDialog>
using namespace Project;
2022-11-06 00:37:50 +00:00
MainWindow::MainWindow(QWidget *parent)
2022-11-15 08:07:02 +00:00
: QMainWindow(parent),
horizontal_split(new QSplitter(Qt::Horizontal, this)),
vertical_split(new QSplitter(Qt::Vertical, this)),
left_funcs(new QTabWidget(this)),
right_funcs(new QTabWidget(this)),
center_funcs(new QTabWidget(this)),
bottom_funcs(new QTabWidget(this)),
project_view(new QTreeView(this)),
errors_present(new QTableView(this)),
project_manager(new XMLProjectManager(this))
2022-11-06 00:37:50 +00:00
{
setMinimumSize(1000, 600);
setWindowTitle("提线木偶文学项目集成开发工具");
2022-11-15 08:07:02 +00:00
auto xtool = new QToolBar(this);
addToolBar(Qt::ToolBarArea::TopToolBarArea, xtool);
auto xstatus = statusBar();
statusBar()->addWidget(new QLabel("文本消息", this));
auto mbar = menuBar();
// 项目菜单树
auto project = mbar->addMenu("项目");
auto _xnew = project->addMenu("新建文件");
2022-11-15 08:07:02 +00:00
_xnew->addAction("发展脉络");
_xnew->addAction("故事单元");
2022-11-15 08:07:02 +00:00
_xnew->addAction("故事大纲");
_xnew->addAction("叙事大纲");
_xnew->addAction("小说章节");
project->addSeparator();
2022-11-15 08:07:02 +00:00
auto sav = project->addAction("保存");
sav->setEnabled(false);
connect(sav, &QAction::triggered, [this](){
this->project_manager->save();
});
project->addSeparator();
auto opnp = project->addAction("打开项目");
connect(opnp, &QAction::triggered, [this, sav](){
auto file = QFileDialog::getOpenFileName(this, "打开项目", QString(), "小说项目(*.nsf)");
if(file == "")
return;
project_manager->openProject(file);
sav->setEnabled(true);
});
auto newp = project->addAction("新建项目");
connect(newp, &QAction::triggered, [this, sav](){
auto name = QInputDialog::getText(this, "输入项目名称", "项目名称");
if(name == "")
return;
auto dir_path = QFileDialog::getExistingDirectory(this, "指定项目存储路径");
if(dir_path == "")
return;
sav->setEnabled(true);
this->project_manager->newProject(dir_path, name);
});
auto clsp = project->addAction("关闭项目");
connect(clsp, &QAction::triggered, [this, sav](){
this->project_manager->closeProject();
sav->setEnabled(false);
});
project->addSeparator();
project->addAction("项目配置");
project->addAction("软件配置");
project->addSeparator();
project->addAction("退出");
// 编辑菜单
auto edit = mbar->addMenu("编辑");
edit->addAction("撤销一步");
edit->addAction("重做一步");
edit->addSeparator();
edit->addAction("查找关键词");
edit->addAction("替换关键词");
// 视图菜单
auto view = mbar->addMenu("视图");
2022-11-15 08:07:02 +00:00
auto area = view->addMenu("区域管理");
auto act_tool = area->addAction("工具栏");
act_tool->setCheckable(true);
act_tool->setChecked(true);
connect(act_tool, &QAction::triggered, [xtool](bool v){ xtool->setVisible(v); });
auto act_status = area->addAction("状态栏");
act_status->setCheckable(true);
act_status->setChecked(true);
connect(act_status,&QAction::triggered, [xstatus](bool v){xstatus->setVisible(v);});
auto act_left = area->addAction("左侧功能区");
act_left->setCheckable(true);
act_left->setChecked(true);
connect(act_left, &QAction::triggered, [this](bool v){this->left_funcs->setVisible(v);});
auto act_right = area->addAction("右侧功能区");
act_right->setCheckable(true);
act_right->setChecked(true);
connect(act_right, &QAction::triggered, [this](bool v){this->right_funcs->setVisible(v);});
auto act_bottom = area->addAction("底部功能区");
act_bottom->setCheckable(true);
act_bottom->setChecked(true);
connect(act_bottom, &QAction::triggered, [this](bool v){this->bottom_funcs->setVisible(v);});
view->addSeparator();
2022-11-15 08:07:02 +00:00
auto change = view->addMenu("内容切换");
change->addAction("序列视图");
change->addAction("编辑视图");
2022-11-15 08:07:02 +00:00
view->addSeparator();
auto func = view->addMenu("功能视图");
func->addAction("项目结构");
func->addAction("引用统计");
func->addAction("脉络分蘖");
func->addAction("终端输出");
// 工具菜单
auto tool = mbar->addMenu("工具");
auto word = tool->addMenu("敏感词检测");
word->addAction("工具配置");
word->addAction("敏感词编辑");
auto vcs = tool->addMenu("版本管理");
vcs->addAction("工具配置");
vcs->addAction("启用");
auto exp = tool->addMenu("导入导出");
exp->addAction("导入TXT");
exp->addSeparator();
2022-11-15 08:07:02 +00:00
exp->addAction("导出TXT内容");
exp->addAction("导出TXT大纲");
// 窗口菜单
auto window = mbar->addMenu("窗口");
window->addAction("新建窗口");
window->addAction("关闭窗口");
window->addSeparator();
window->addAction("布局管理");
window->addMenu("布局切换");
window->addMenu("窗口切换");
// 系统
auto sys = mbar->addMenu("系统");
sys->addAction("软件激活");
sys->addAction("系统信息");
sys->addSeparator();
sys->addAction("关于……");
2022-11-15 08:07:02 +00:00
this->horizontal_split->addWidget(left_funcs);
this->horizontal_split->addWidget(vertical_split);
this->horizontal_split->addWidget(right_funcs);
this->vertical_split->addWidget(center_funcs);
this->vertical_split->addWidget(bottom_funcs);
setCentralWidget(this->horizontal_split);
2022-11-15 08:07:02 +00:00
center_funcs->addTab(new QTextEdit(this), "编辑区域");
left_funcs->addTab(project_view, "项目管理");
project_view->setHeaderHidden(true);
project_view->setModel(project_manager->model());
bottom_funcs->addTab(errors_present, "错误列表");
2022-11-06 00:37:50 +00:00
}
MainWindow::~MainWindow()
{
}