#include "vsessionmaintenance.h" #include "messagespresent.h" #include "presentcontainer.h" #include "projectpresent.h" using namespace Config; using namespace Core; using namespace SplitFrame; using namespace Components; VSessionMaintenance::VSessionMaintenance(Config::Configration *port) : recover_port(port) {} void VSessionMaintenance::initPresentView(ViewPresent *host, PresentContainer *center_frame, ProjectPresent *project_present, QStandardItemModel *error_model) { auto project_panel = host->appendView(project_present, QIcon(":/ui/icons/dir_icon.jpg"), tr("项目管理")); host->markFreedom(project_panel); view_store[project_panel->title()] = project_panel; auto edit_panel = host->appendView(center_frame, QIcon(":/ui/icons/file_icon.jpg"), tr("编辑窗口")); host->resetEngross(edit_panel); view_store[edit_panel->title()] = edit_panel; auto msg_view = MessagesPresent::gen(host, error_model, host->bind()); auto msg_panel = host->appendView(msg_view, QIcon(":/ui/icons/file_icon.jpg"), "信息提示"); host->markFreedom(msg_panel); view_store[msg_panel->title()] = msg_panel; } const QList base_path = {"sys-config", "front-end", "view-state"}; void views_state_store(Config::Configration *port, const QList &base_path, const QList &child) { for (auto &it : child) { if (!it) continue; auto keys_path = base_path; keys_path << QString("rect_%1").arg(child.indexOf(it)); auto conv = dynamic_cast(it); if (conv) { // split QHash values; values["rect-type"] = "split"; values["split-type"] = QString("%1").arg((int)conv->splitType()); values["split-width"] = QString("%1").arg(conv->splitterWidth()); values["split-pos"] = QString("%1").arg(conv->splitterPos()); port->setMap(keys_path, values); auto split_childs = conv->child(); views_state_store(port, keys_path, QList() << split_childs.first << split_childs.second); } else { // view QHash values; values["rect-type"] = "view"; values["view-title"] = it->title(); port->setMap(keys_path, values); } } } void VSessionMaintenance::viewStatesSave(SplitFrame::ViewPresent *root) { recover_port->deleteX(base_path); auto childs = root->child(); auto win = root->bind()->parentWidget(); QHash values; values["win-width"] = win->width(); values["win-height"] = win->height(); values["win-xpos"] = win->rect().topLeft().x(); values["win-ypos"] = win->rect().topLeft().y(); recover_port->setMap(base_path, values); views_state_store(recover_port, base_path, QList() << childs.first << childs.second); } RectCom *views_state_restore(const QHash &cache, const QList &target_path, Config::Configration *port) { auto values = port->getMap(target_path); if (!values.size()) return nullptr; } void VSessionMaintenance::viewStatesRestore(SplitFrame::ViewPresent *root) { auto values = recover_port->getMap(base_path); auto win = root->bind()->parentWidget(); auto width = values["win-width"].toFloat(); auto height = values["win-height"].toFloat(); auto xpos = values["win-xpos"].toFloat(); auto ypos = values["win-ypos"].toFloat(); win->setGeometry(xpos, ypos, width, height); }