QtNovelUI/WordsIDE/session_binder.cpp

88 lines
3.0 KiB
C++
Raw Normal View History

2024-02-14 05:27:15 +00:00
#include "session_binder.h"
#include "mainwindow.h"
#include "message_view.h"
#include "present_container.h"
#include "project_view.h"
#include <QMenuBar>
#include <QMenu>
using namespace Config;
using namespace Core;
using namespace Components;
using namespace split_window;
SessionBinder::SessionBinder(XApp *core)
: QObject(core),
bind_window(new split_window::SplitWindow),
pjt_manager(new ProjectView(bind_window, core->cmdsPort(), core->docsPort())),
msg_present(new MessageView(bind_window, core)),
bind_core(core),
project_op(new QMenu("项目管理")),
edit_op(new QMenu("内容编辑")),
view_op(new QMenu("视图管理")),
build_op(new QMenu("构建服务")),
tool_op(new QMenu("功能拓展")),
system_op(new QMenu("系统帮助"))
{
connect(bind_window, &SplitWindow::windowActived, [this](SplitWindow *inst){
menus_refresh(inst->menuBar());
});
menus_refresh(bind_window->menuBar(), true);
}
#include <DockPanel.h>
void SessionBinder::menus_refresh(QMenuBar *mbar, bool rebuild)
{
if(rebuild){
mbar->addMenu(project_op);
project_op->addActions(pjt_manager->bindMenu()->actions());
mbar->addMenu(edit_op);
mbar->addMenu(view_op);
view_op->addAction("新建窗口");
view_op->addAction("关闭窗口");
view_op->addSeparator();
for(auto &t : bind_core->viewTemplates()){
auto act_item = view_op->addAction(t->typeName());
act_item->setCheckable(t->type() == ExtendType::FEATURE_PRESENT);
std::function<void(bool)> open_view = [=, &open_view](bool state){
auto vinst = t->newInst(bind_window, bind_core);
auto wrap_v = new dock_panel::DockableView(bind_window, vinst->presentWidget());
bind_window->freedomHasBeenAppended(wrap_v);
if(t->type() == ExtendType::FEATURE_PRESENT){
disconnect(act_item, &QAction::triggered, nullptr, nullptr);
connect(act_item, &QAction::triggered, [=, &open_view](bool state){
vinst->presentWidget()->setParent(nullptr);
bind_window->doRetrieve(wrap_v);
bind_window->doClose(wrap_v);
delete vinst;
disconnect(act_item, &QAction::triggered, nullptr, nullptr);
connect(act_item, &QAction::triggered, open_view);
});
}
};
connect(act_item, &QAction::triggered, open_view);
}
mbar->addMenu(build_op);
build_op->addActions(msg_present->bindMenu()->actions());
mbar->addMenu(tool_op);
mbar->addMenu(system_op);
system_op->addAction("关于Qt", []() { QApplication::aboutQt(); });
}
auto action_list = edit_op->actions();
for(auto &it : action_list)
edit_op->removeAction(it);
}