88 lines
3.0 KiB
C++
88 lines
3.0 KiB
C++
#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);
|
|
|
|
|
|
|
|
}
|