From 3ded30b981a501e651011bdaaf496c3a7a4842e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=89=E5=AE=87=E6=B8=85=E9=9F=B3?= <2422523675@qq.com> Date: Tue, 22 Nov 2022 14:15:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E6=97=B6=E7=BC=96=E8=AF=91=EF=BC=8C?= =?UTF-8?q?=E5=8F=8C=E5=87=BB=E8=84=89=E7=BB=9C=E6=88=96=E5=8D=95=E5=85=83?= =?UTF-8?q?=E8=8A=82=E7=82=B9=EF=BC=8C=E8=87=AA=E5=8A=A8=E6=89=93=E5=BC=80?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E5=92=8C=E8=B7=B3=E8=BD=AC=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DesParser/main.cpp | 2 +- WordsIDE/SensitiveCore.cpp | 19 +++++++++++--- WordsIDE/SensitiveCore.h | 9 +++++-- WordsIDE/appcore.cpp | 4 +-- WordsIDE/mainwindow.cpp | 34 ++++++++++++++++--------- WordsIDE/storychainsourceeditor.cpp | 4 +++ WordsIDE/storychainspresent.cpp | 5 +++- WordsIDE/storyunitsourceedit.cpp | 24 +++++++++++++++++ WordsIDE/storyunitsourceedit.h | 1 + WordsIDE/storyunitspresent.cpp | 34 +++++++++++++++++++++---- WordsIDE/storyunitspresent.h | 7 ++--- libParse/StoryTool.cpp | 20 +++++++-------- libParse/StoryTool.h | 4 +-- libParse/libParse.cpp | 8 +++--- libParse/libParse.h | 5 ++-- libProjectManager/libProjectManager.h | 2 +- libProjectManager/xmlprojectmanager.cpp | 8 +++--- libProjectManager/xmlprojectmanager.h | 4 +-- 18 files changed, 140 insertions(+), 54 deletions(-) diff --git a/DesParser/main.cpp b/DesParser/main.cpp index 2640ce5..080afe5 100644 --- a/DesParser/main.cpp +++ b/DesParser/main.cpp @@ -41,7 +41,7 @@ int main(int argc, char *argv[]) // auto path = "D:\\Projects\\Cpp\\QtNovelDesc\\DesParser\\example.storyvolume"; auto path = "D:\\测试文学项目\\contentfile_851382615.storyboard"; - tool.compile(QFileInfo(path)); + tool.compile(QFileInfo(path), "后台编译"); auto doc = core.queryDocument(QFileInfo(path)); auto retlist = core.queryRootNodes(doc); diff --git a/WordsIDE/SensitiveCore.cpp b/WordsIDE/SensitiveCore.cpp index 26e76ed..19a98e9 100644 --- a/WordsIDE/SensitiveCore.cpp +++ b/WordsIDE/SensitiveCore.cpp @@ -76,7 +76,9 @@ void SensitiveCore::closeTextComponent(const QFileInfo &target) void SensitiveCore::addPerceptionList(VariedTextView *ins, SensitiveType type) { if(type == SensitiveType::CompileAtChanged){ - connect(ins, &VariedTextView::dataChanged, this, &SensitiveCore::recompile); + connect(ins, &VariedTextView::dataChanged, [ins, this](const QString &path){ + this->recompile(path, ins->docName()); + }); this->sourcecode_map[ins->filePath()] = ins; } else{ @@ -89,13 +91,13 @@ void SensitiveCore::addProcTrigger(std::function exc) this->trigger_list << exc; } -void SensitiveCore::recompile(const QString &file_path) +void SensitiveCore::recompile(const QString &file_path, const QString &doc_name) { if(!sourcecode_map.contains(file_path)) return; auto view = this->sourcecode_map[file_path]; - make_core->compileSource(QFileInfo(file_path), view->textContent()); + make_core->compileSource(QFileInfo(file_path), view->textContent(), doc_name); for(auto &ex : trigger_list) ex(); @@ -104,6 +106,12 @@ void SensitiveCore::recompile(const QString &file_path) VariedTextView::VariedTextView() : QObject(nullptr){} +void VariedTextView::setSource(Core::AppCore *core, const QFileInfo &src, const QString &name, QWidget *parent) +{ + this->doc_name = name; + this->setSource(core, src, parent); +} + QString VariedTextView::filePath() const { return source_x.absoluteFilePath(); @@ -122,6 +130,11 @@ void VariedTextView::save() const tout.flush(); } +QString VariedTextView::docName() const +{ + return doc_name; +} + void VariedTextView::setSource(Core::AppCore *core, const QFileInfo &src, QWidget *parent) { this->source_x = src; diff --git a/WordsIDE/SensitiveCore.h b/WordsIDE/SensitiveCore.h index cfd45f3..54ec5fd 100644 --- a/WordsIDE/SensitiveCore.h +++ b/WordsIDE/SensitiveCore.h @@ -18,13 +18,14 @@ namespace MakeTools { explicit VariedTextView(); virtual ~VariedTextView() = default; - virtual void setSource(Core::AppCore *core, const QFileInfo &src, QWidget *parent=nullptr); + void setSource(Core::AppCore *core, const QFileInfo &src, const QString &name, QWidget *parent=nullptr); QString filePath() const; void save() const; virtual void jumpTo(const QList &path) = 0; + virtual QString docName() const; virtual QWidget* textView() const = 0; virtual QString textContent() const = 0; virtual void textContentReset(const QString &value) = 0; @@ -32,8 +33,12 @@ namespace MakeTools { signals: void dataChanged(const QString &filePath); + protected: + virtual void setSource(Core::AppCore *core, const QFileInfo &src, QWidget *parent=nullptr); + private: QFileInfo source_x; + QString doc_name; }; enum class SensitiveType @@ -67,7 +72,7 @@ namespace MakeTools { QHash plaintext_map; QList> trigger_list; - void recompile(const QString &file_path); + void recompile(const QString &file_path, const QString &doc_name); }; } diff --git a/WordsIDE/appcore.cpp b/WordsIDE/appcore.cpp index 92cd8a6..1342f62 100644 --- a/WordsIDE/appcore.cpp +++ b/WordsIDE/appcore.cpp @@ -111,11 +111,11 @@ void AppCore::openTextDocument(const QString &src, const QString &name) auto doc = parse_core->queryDocument(QFileInfo(src)); if(doc == nullptr){ - this->make_tool->compile(QFileInfo(src)); + this->make_tool->compile(QFileInfo(src), name); doc = parse_core->queryDocument(QFileInfo(src)); } - tview->setSource(this, QFileInfo(src), views); + tview->setSource(this, QFileInfo(src), name, views); framework->addPerceptionList(tview); dynamic_cast(tview)->reload(this->getConfigs(QList() << Scale::Global << Scale::Project)); diff --git a/WordsIDE/mainwindow.cpp b/WordsIDE/mainwindow.cpp index 7eec62f..f3d887a 100644 --- a/WordsIDE/mainwindow.cpp +++ b/WordsIDE/mainwindow.cpp @@ -41,7 +41,7 @@ MainWindow::MainWindow(QWidget *parent) current_projects(new QListView(this)), project_structure(new ProjectView(app_core, project_manager, this)), chains_view(new StoryChainsPresent(app_core, this)), - units_view(new StoryUnitsPresent(app_core->parseCore(), this)), + units_view(new StoryUnitsPresent(app_core, this)), errors_present(new MessagePresent(app_core->getMake_tool(), this)) { QApplication::instance()->installEventFilter(this); @@ -67,7 +67,7 @@ MainWindow::MainWindow(QWidget *parent) auto mbar = menuBar(); // 项目菜单树 auto project = mbar->addMenu("项目"); - project->addAction("新建路径", [this](){ + auto pnew = project->addAction("新建路径", [this](){ auto packages = QInputDialog::getText(this, "输入包路径名称", "packagea#packageb#packagec"); if(packages == "") return; @@ -82,6 +82,8 @@ MainWindow::MainWindow(QWidget *parent) project_manager->newPath(names); }); + sync_kernel->registerActionSync(pnew, [this]()->bool{return project_manager->isOpen();}); + auto _xnew = project->addMenu("最后卷新建文件"); _xnew->addAction("小说章节"); _xnew->addSeparator(); @@ -89,6 +91,8 @@ MainWindow::MainWindow(QWidget *parent) _xnew->addAction("故事单元"); _xnew->addAction("故事大纲"); _xnew->addAction("叙事大纲"); + sync_kernel->registerWidgetSync(_xnew, [this]()->bool{return project_manager->isOpen();}); + project->addSeparator(); auto sav = project->addAction("保存"); sav->setShortcut(QKeySequence::StandardKey::Save); @@ -290,13 +294,14 @@ MainWindow::MainWindow(QWidget *parent) sys->addSeparator(); sys->addAction("关于……"); - - setCentralWidget(this->horizontal_split); - this->horizontal_split->addWidget(left_funcs); - this->horizontal_split->addWidget(vertical_split); - this->horizontal_split->addWidget(right_funcs); - this->vertical_split->addWidget(center_funcs); + setCentralWidget(this->vertical_split); + this->vertical_split->addWidget(this->horizontal_split); this->vertical_split->addWidget(bottom_funcs); + + this->horizontal_split->addWidget(left_funcs); + this->horizontal_split->addWidget(center_funcs); + this->horizontal_split->addWidget(right_funcs); + left_funcs->setTabsClosable(true); connect(left_funcs, &QTabWidget::tabCloseRequested, [this](int index){ toggle_widget_visible(false, left_funcs, left_funcs->widget(index)); }); @@ -316,6 +321,11 @@ MainWindow::MainWindow(QWidget *parent) app_core->getFramework()->closeTextComponent(QFileInfo(comp->filePath())); }); + this->app_core->getFramework()->addProcTrigger([this](){ + this->chains_view->refresh(); + this->units_view->refresh(); + this->errors_present->refresh(); + }); center_funcs->addTab(current_projects, "欢迎界面"); @@ -357,19 +367,19 @@ void MainWindow::build_internal(bool all_from_disk) auto chains = project_manager->filesWithEnds("storychain"); for(auto &it : chains) - app_core->getMake_tool()->compile(it); + app_core->getMake_tool()->compile(std::get<0>(it), std::get<1>(it)); auto units = project_manager->filesWithEnds("storyunit"); for(auto &it : units) - app_core->getMake_tool()->compile(it); + app_core->getMake_tool()->compile(std::get<0>(it), std::get<1>(it)); auto storys = project_manager->filesWithEnds("storyboard"); for(auto &it : storys) - app_core->getMake_tool()->compile(it); + app_core->getMake_tool()->compile(std::get<0>(it), std::get<1>(it)); auto volumes = project_manager->filesWithEnds("storyvolume"); for(auto &it : volumes) - app_core->getMake_tool()->compile(it); + app_core->getMake_tool()->compile(std::get<0>(it), std::get<1>(it)); errors_present->refresh(); chains_view->refresh(); diff --git a/WordsIDE/storychainsourceeditor.cpp b/WordsIDE/storychainsourceeditor.cpp index a54ba56..a932907 100644 --- a/WordsIDE/storychainsourceeditor.cpp +++ b/WordsIDE/storychainsourceeditor.cpp @@ -90,6 +90,7 @@ void StoryChainSourceEdit::jumpTo(const QList &path) auto textblock = this->edit_square->document()->findBlockByNumber(first_word->row()); auto cur = this->edit_square->textCursor(); cur.setPosition(textblock.position()); + cur.select(QTextCursor::SelectionType::LineUnderCursor); this->edit_square->setTextCursor(cur); if(path.size() > 1){ @@ -98,9 +99,12 @@ void StoryChainSourceEdit::jumpTo(const QList &path) auto textblock = this->edit_square->document()->findBlockByNumber(first_word->row()); cur.setPosition(textblock.position()); + cur.select(QTextCursor::SelectionType::LineUnderCursor); this->edit_square->setTextCursor(cur); } } + + edit_square->setFocus(); } namespace __temp { diff --git a/WordsIDE/storychainspresent.cpp b/WordsIDE/storychainspresent.cpp index d84f42b..4c30d03 100644 --- a/WordsIDE/storychainspresent.cpp +++ b/WordsIDE/storychainspresent.cpp @@ -88,7 +88,10 @@ void StoryChainsPresent::click_to(const QModelIndex &curr) } auto chain_ins = this->core_ins->parseCore()->queryStoryChain(path[0]).first(); - auto present = this->core_ins->getFramework()->queryTextComponent(QFileInfo(chain_ins->doc()->filePath())); + auto chain_doc = chain_ins->doc(); + this->core_ins->openTextDocument(chain_doc->filePath(), chain_doc->docName()); + auto present = this->core_ins->getFramework()->queryTextComponent(QFileInfo(chain_doc->filePath())); + if(path.size()){ present->jumpTo(path); } diff --git a/WordsIDE/storyunitsourceedit.cpp b/WordsIDE/storyunitsourceedit.cpp index 8e5ad91..2fd30fd 100644 --- a/WordsIDE/storyunitsourceedit.cpp +++ b/WordsIDE/storyunitsourceedit.cpp @@ -74,6 +74,7 @@ void StoryUnitSourceEdit::rehighlighter() void StoryUnitSourceEdit::setSource(Core::AppCore *core, const QFileInfo &src, QWidget *parent) { this->source_target = src; + this->core_ins = core; FormattedTextEdit::setSource(core, src, parent); static_cast(words_highlighter) ->reset(core->parseCore()->queryDocument(src)); @@ -82,7 +83,30 @@ void StoryUnitSourceEdit::setSource(Core::AppCore *core, const QFileInfo &src, Q void StoryUnitSourceEdit::jumpTo(const QList &path) { + auto fpath = this->filePath(); + auto core = core_ins->parseCore(); + if(path.size()){ + auto storynode = core->queryStoryUnit(path[0]).first(); + auto first_word = storynode->refered()[0]; + auto textblock = this->edit_square->document()->findBlockByNumber(first_word->row()); + auto cur = this->edit_square->textCursor(); + cur.setPosition(textblock.position()); + cur.select(QTextCursor::SelectionType::LineUnderCursor); + this->edit_square->setTextCursor(cur); + + if(path.size() > 1){ + auto storypoint = core->queryStoryFragment(storynode, path[1]).first(); + first_word = storypoint->refered()[0]; + + auto textblock = this->edit_square->document()->findBlockByNumber(first_word->row()); + cur.setPosition(textblock.position()); + cur.select(QTextCursor::SelectionType::LineUnderCursor); + this->edit_square->setTextCursor(cur); + } + } + + edit_square->setFocus(); } FileExtension *StoryUnitSourceEditFactory::newInstance(Core::AppCore *core) diff --git a/WordsIDE/storyunitsourceedit.h b/WordsIDE/storyunitsourceedit.h index 0493a7b..18412e3 100644 --- a/WordsIDE/storyunitsourceedit.h +++ b/WordsIDE/storyunitsourceedit.h @@ -46,6 +46,7 @@ namespace Components { QSyntaxHighlighter *const words_highlighter; Core::FileExtensionFactory *const factory_ins; QFileInfo source_target; + Core::AppCore *core_ins; // VariedTextView interface public: diff --git a/WordsIDE/storyunitspresent.cpp b/WordsIDE/storyunitspresent.cpp index 124959f..1e57c68 100644 --- a/WordsIDE/storyunitspresent.cpp +++ b/WordsIDE/storyunitspresent.cpp @@ -1,4 +1,5 @@ #include "storyunitspresent.h" +#include "SensitiveCore.h" #include #include @@ -6,7 +7,7 @@ using namespace Components; using namespace Parse::Result; -StoryUnitsPresent::StoryUnitsPresent(Parse::Result::ParseCore *core, QWidget *parent) +StoryUnitsPresent::StoryUnitsPresent(Core::AppCore *core, QWidget *parent) : QWidget(parent), core_ins(core), model_ins(new QStandardItemModel(this)), units_view(new QTreeView(this)), @@ -27,12 +28,13 @@ StoryUnitsPresent::StoryUnitsPresent(Parse::Result::ParseCore *core, QWidget *pa details_show->setReadOnly(true); connect(units_view, &QTreeView::clicked, this, &StoryUnitsPresent::show_node_description); + connect(units_view, &QTreeView::doubleClicked, this, &StoryUnitsPresent::click_to); } void StoryUnitsPresent::refresh() { model_ins->clear(); - auto units = core_ins->allStoryUnits(); + auto units = core_ins->parseCore()->allStoryUnits(); for(auto &unit : units){ auto unit_node = new QStandardItem(static_cast(unit)->name()); unit_node->setEditable(false); @@ -57,7 +59,7 @@ void StoryUnitsPresent::show_node_description(const QModelIndex &curr) details_show->clear(); auto item = model_ins->itemFromIndex(curr); if(item->parent() == nullptr){ - auto node = core_ins->queryStoryUnit(item->text()); + auto node = core_ins->parseCore()->queryStoryUnit(item->text()); auto children = node.first()->children(); for(auto &it : children){ @@ -67,8 +69,8 @@ void StoryUnitsPresent::show_node_description(const QModelIndex &curr) } } else{ - auto node = core_ins->queryStoryUnit(item->parent()->text()); - auto point = core_ins->queryStoryFragment(node.first(), item->text()); + auto node = core_ins->parseCore()->queryStoryUnit(item->parent()->text()); + auto point = core_ins->parseCore()->queryStoryFragment(node.first(), item->text()); auto children = point.first()->children(); for(auto &it : children){ @@ -77,6 +79,28 @@ void StoryUnitsPresent::show_node_description(const QModelIndex &curr) } } +void StoryUnitsPresent::click_to(const QModelIndex &curr) +{ + if(!curr.isValid()) + return; + + auto pnode = this->model_ins->itemFromIndex(curr); + QList path; + while (pnode) { + path.insert(0, pnode->text()); + pnode = pnode->parent(); + } + + auto unit_ins = this->core_ins->parseCore()->queryStoryUnit(path[0]).first(); + auto chain_doc = unit_ins->doc(); + this->core_ins->openTextDocument(chain_doc->filePath(), chain_doc->docName()); + auto present = this->core_ins->getFramework()->queryTextComponent(QFileInfo(chain_doc->filePath())); + + if(path.size()){ + present->jumpTo(path); + } +} + diff --git a/WordsIDE/storyunitspresent.h b/WordsIDE/storyunitspresent.h index 641a576..4d031d0 100644 --- a/WordsIDE/storyunitspresent.h +++ b/WordsIDE/storyunitspresent.h @@ -7,6 +7,7 @@ #include #include +#include "appcore.h" #include "libParse.h" namespace Components { @@ -15,20 +16,20 @@ namespace Components { { Q_OBJECT public: - explicit StoryUnitsPresent(Parse::Result::ParseCore *core, QWidget *parent = nullptr); + explicit StoryUnitsPresent(Core::AppCore *core, QWidget *parent = nullptr); void refresh(); signals: private: - Parse::Result::ParseCore *const core_ins; + Core::AppCore *const core_ins; QStandardItemModel *const model_ins; QTreeView *const units_view; QPlainTextEdit *const details_show; void show_node_description(const QModelIndex &curr); - + void click_to(const QModelIndex &curr); }; } diff --git a/libParse/StoryTool.cpp b/libParse/StoryTool.cpp index f810846..aebabbe 100644 --- a/libParse/StoryTool.cpp +++ b/libParse/StoryTool.cpp @@ -12,7 +12,7 @@ using namespace Parse::Result; StoryTool::StoryTool(Parse::Result::ParseCore *core) : parse_core(core){} -QList StoryTool::compile(const QFileInfo &file) +QList StoryTool::compile(const QFileInfo &file, const QString &doc_name) { DocCore *doc_core = parse_core->queryDocument(file.absoluteFilePath()); if(doc_core) @@ -21,28 +21,28 @@ QList StoryTool::compile(const QFileInfo &file) QList results; if(file.suffix() == "storychain"){ if(!doc_core) - doc_core = new DocCore(parse_core, DocType::STORYCHAIN, file.absoluteFilePath()); + doc_core = new DocCore(parse_core, DocType::STORYCHAIN, file.absoluteFilePath(), doc_name); StoryChainDocumentParser parser(parse_core); results.append(parser.analysis(doc_core, file.absoluteFilePath())); } else if(file.suffix() == "storyunit"){ if(!doc_core) - doc_core = new DocCore(parse_core, DocType::STORYUNIT, file.absoluteFilePath()); + doc_core = new DocCore(parse_core, DocType::STORYUNIT, file.absoluteFilePath(), doc_name); StoryUnitDocumentParser parser(parse_core); results.append(parser.analysis(doc_core, file.absoluteFilePath())); } else if(file.suffix() == "storyboard"){ if(!doc_core) - doc_core = new DocCore(parse_core, DocType::STORYBOARD, file.absoluteFilePath()); + doc_core = new DocCore(parse_core, DocType::STORYBOARD, file.absoluteFilePath(), doc_name); StoryBoardDocumentParser parser(parse_core); results.append(parser.analysis(doc_core, file.absoluteFilePath())); } else if(file.suffix() == "storyvolume"){ if(!doc_core) - doc_core = new DocCore(parse_core, DocType::STORYOUTLINES, file.absoluteFilePath()); + doc_core = new DocCore(parse_core, DocType::STORYOUTLINES, file.absoluteFilePath(), doc_name); StoryOutlineDocumentParser parser(parse_core); results.append(parser.analysis(doc_core, file.absoluteFilePath())); @@ -56,7 +56,7 @@ QList StoryTool::compile(const QFileInfo &file) return QList(); } -QList StoryTool::compileSource(const QFileInfo &_file, const QString &src) +QList StoryTool::compileSource(const QFileInfo &_file, const QString &src, const QString &doc_name) { DocCore *doc_core = parse_core->queryDocument(_file.absoluteFilePath()); if(doc_core) @@ -65,28 +65,28 @@ QList StoryTool::compileSource(const QFileInfo &_file, const QString &s QList results; if(_file.suffix() == "storychain"){ if(!doc_core) - doc_core = new DocCore(parse_core, DocType::STORYCHAIN, _file.absoluteFilePath()); + doc_core = new DocCore(parse_core, DocType::STORYCHAIN, _file.absoluteFilePath(), doc_name); StoryChainDocumentParser parser(parse_core); results.append(parser.analysisSource(doc_core, src)); } else if(_file.suffix() == "storyunit"){ if(!doc_core) - doc_core = new DocCore(parse_core, DocType::STORYUNIT, _file.absoluteFilePath()); + doc_core = new DocCore(parse_core, DocType::STORYUNIT, _file.absoluteFilePath(), doc_name); StoryUnitDocumentParser parser(parse_core); results.append(parser.analysisSource(doc_core, src)); } else if(_file.suffix() == "storyboard"){ if(!doc_core) - doc_core = new DocCore(parse_core, DocType::STORYBOARD, _file.absoluteFilePath()); + doc_core = new DocCore(parse_core, DocType::STORYBOARD, _file.absoluteFilePath(), doc_name); StoryBoardDocumentParser parser(parse_core); results.append(parser.analysisSource(doc_core, src)); } else if(_file.suffix() == "storyvolume"){ if(!doc_core) - doc_core = new DocCore(parse_core, DocType::STORYOUTLINES, _file.absoluteFilePath()); + doc_core = new DocCore(parse_core, DocType::STORYOUTLINES, _file.absoluteFilePath(), doc_name); StoryOutlineDocumentParser parser(parse_core); results.append(parser.analysisSource(doc_core, src)); diff --git a/libParse/StoryTool.h b/libParse/StoryTool.h index 8fa5b54..5952bc0 100644 --- a/libParse/StoryTool.h +++ b/libParse/StoryTool.h @@ -15,8 +15,8 @@ namespace MakeTools { public: StoryTool(Parse::Result::ParseCore *core); - QList compile(const QFileInfo &file); - QList compileSource(const QFileInfo &file, const QString &src); + QList compile(const QFileInfo &file, const QString &doc_name); + QList compileSource(const QFileInfo &file, const QString &src, const QString &doc_name); bool checkPass(QList &errors); diff --git a/libParse/libParse.cpp b/libParse/libParse.cpp index bcc32e4..cfcebf6 100644 --- a/libParse/libParse.cpp +++ b/libParse/libParse.cpp @@ -297,8 +297,8 @@ QString Words::toString() const return value_store; } -DocCore::DocCore(ParseCore * core, DocType type, const QFileInfo & path) - : unknown_host(new Unknown(this)), core_store(core), +DocCore::DocCore(ParseCore * core, DocType type, const QFileInfo & path, const QString &doc_name) + : unknown_host(new Unknown(this)), core_store(core), doc_name(doc_name), file_path_store(path.absoluteFilePath()), type_store(type) { } @@ -323,9 +323,9 @@ QString DocCore::filePath() const return file_path_store; } -QString DocCore::fileName() const +QString DocCore::docName() const { - return QFileInfo(file_path_store).fileName(); + return doc_name; } void DocCore::clear() diff --git a/libParse/libParse.h b/libParse/libParse.h index a7ef82c..d2c0a4a 100644 --- a/libParse/libParse.h +++ b/libParse/libParse.h @@ -207,7 +207,7 @@ namespace Parse class LIBPARSE_EXPORT DocCore { public: - explicit DocCore(ParseCore* core, DocType type, const QFileInfo &path); + explicit DocCore(ParseCore* core, DocType type, const QFileInfo &path, const QString &doc_name); virtual ~DocCore() = default; /** @@ -242,7 +242,7 @@ namespace Parse * * \return */ - QString fileName() const; + QString docName() const; /** * 清除所有的词语节点和内容节点. @@ -270,6 +270,7 @@ namespace Parse private: Result::DesNode *const unknown_host; ParseCore *const core_store; + QString doc_name; QString file_path_store; DocType type_store; diff --git a/libProjectManager/libProjectManager.h b/libProjectManager/libProjectManager.h index 92c6519..00a62d6 100644 --- a/libProjectManager/libProjectManager.h +++ b/libProjectManager/libProjectManager.h @@ -82,7 +82,7 @@ namespace Project { * @param suffix 后缀名类型 * @return 文件集合 */ - virtual QList filesWithEnds(const QString &suffix) const = 0; + virtual QList> filesWithEnds(const QString &suffix) const = 0; /** * @brief 建立新的包路径 diff --git a/libProjectManager/xmlprojectmanager.cpp b/libProjectManager/xmlprojectmanager.cpp index a16a8f7..d7d8ce9 100644 --- a/libProjectManager/xmlprojectmanager.cpp +++ b/libProjectManager/xmlprojectmanager.cpp @@ -224,7 +224,7 @@ bool XMLProjectManager::deletePath(const QList &path) return true; } -QList XMLProjectManager::filesWithEnds(const QString &suffix) const +QList > XMLProjectManager::filesWithEnds(const QString &suffix) const { auto root_project = mode_holder->item(0); return nodes_search(static_cast(root_project), suffix); @@ -265,10 +265,10 @@ ProjectNode *XMLProjectManager::node_follows(ProjectNode *pnode, const QList XMLProjectManager::nodes_search(ProjectNode *pnode, const QString &suffix) const +QList > XMLProjectManager::nodes_search(ProjectNode *pnode, const QString &suffix) const { auto root_dir = QFileInfo(file_path).dir(); - QList infos_return; + QList> infos_return; for(auto idx=0; idxrowCount(); ++idx){ auto item = static_cast(pnode->child(idx)); @@ -277,7 +277,7 @@ QList XMLProjectManager::nodes_search(ProjectNode *pnode, const QStri auto file_path = root_dir.filePath(item->file()); QFileInfo xinfo(file_path); if(xinfo.suffix() == suffix) - infos_return << xinfo; + infos_return << std::make_tuple(xinfo, item->text()); } else{ auto elist = nodes_search(item, suffix); diff --git a/libProjectManager/xmlprojectmanager.h b/libProjectManager/xmlprojectmanager.h index 968303c..8c4db42 100644 --- a/libProjectManager/xmlprojectmanager.h +++ b/libProjectManager/xmlprojectmanager.h @@ -53,7 +53,7 @@ namespace Project { virtual int createFile(const QList &path, const QString &name, const QString &suffix) override; virtual bool deletePath(const QList &path) override; - virtual QList filesWithEnds(const QString &suffix) const override; + virtual QList> filesWithEnds(const QString &suffix) const override; virtual QStandardItem *newPath(const QList &path) override; virtual QFileInfo queryWith(const QList &path) override; @@ -69,7 +69,7 @@ namespace Project { void structure_severlize(ProjectNode *pnode, QDomElement &elm); ProjectNode* node_follows(ProjectNode* pnode, const QList &path_remains); - QList nodes_search(ProjectNode *pnode, const QString &suffix) const; + QList> nodes_search(ProjectNode *pnode, const QString &suffix) const; ProjectNode *groups_rebuild(ProjectNode *pnode, const QList &path_remains);