QtNovelUI/WordsIDE/projectpresent.cpp

75 lines
2.3 KiB
C++
Raw Normal View History

#include "projectpresent.h"
#include "command_list.h"
#include <QInputDialog>
#include <QMenu>
#include <QVBoxLayout>
using namespace Components;
using namespace CommandList;
2023-03-17 13:58:38 +00:00
using namespace Schedule;
using namespace DataModel;
2023-03-17 13:58:38 +00:00
ProjectPresent::ProjectPresent(CommandsDispatcher *core, DocumentsManager *mgr, QWidget *parent)
: QWidget(parent), source(core), view_present(new QTreeView(this)) {
auto layout = new QVBoxLayout(this);
layout->addWidget(view_present);
view_present->setModel(mgr->projectManager()->model());
2023-03-17 13:58:38 +00:00
view_present->setHeaderHidden(true);
2023-03-17 13:58:38 +00:00
view_present->setContextMenuPolicy(Qt::CustomContextMenu);
connect(view_present, &QTreeView::customContextMenuRequested,
this, &ProjectPresent::menu_popup);
connect(view_present, &QTreeView::doubleClicked,
this, &ProjectPresent::open_target);
}
2023-03-17 13:58:38 +00:00
QModelIndex ProjectPresent::currentIndex() const { return view_present->currentIndex(); }
QString ProjectPresent::name() const
{
return NAME(ProjectPresent);
}
2023-03-17 13:58:38 +00:00
QWidget *ProjectPresent::widget() const { return (QWidget *)this; }
void ProjectPresent::menu_popup(const QPoint &p)
{
QMenu m;
m.addAction("新建路径", [this](){
auto path_string = QInputDialog::getText(this, "输入路径定义/packa/packb/packc", "路径定义:");
if(path_string.isEmpty())
return;
2023-03-17 13:58:38 +00:00
source->postCommand(NewPackage(path_string));
});
auto index = this->view_present->currentIndex();
if(index.isValid()){
2023-03-17 13:58:38 +00:00
auto mgr = source->get<DocumentsManager>(NAME(DocumentsManager));
auto menu = m.addMenu("新建文件");
auto views = mgr->fileTypes();
2023-03-17 13:58:38 +00:00
for (auto &it : views) {
menu->addAction(it, [this, &it, &index, mgr]() {
auto name = QInputDialog::getText(this, "输入文件名称", "文件名称");
auto path = mgr->converter(index);
2023-03-17 13:58:38 +00:00
source->postCommand(NewFile(path, name, it));
});
}
m.addSeparator();
m.addAction("移除节点");
}
m.exec(mapToGlobal(p));
}
void ProjectPresent::open_target(const QModelIndex &t)
{
2023-03-17 13:58:38 +00:00
auto mgr = source->get<DocumentsManager>(NAME(DocumentsManager));
auto path = mgr->converter(t);
2023-03-17 13:58:38 +00:00
source->postCommand(OpenFile(path));
}