情节列表视图改进完成

This commit is contained in:
玉宇清音 2023-03-11 13:55:16 +08:00
parent 28ac179e8d
commit e53b2a3a49
8 changed files with 120 additions and 77 deletions

View File

@ -18,10 +18,11 @@ using namespace Components;
using namespace Parse::Result;
using namespace MakeTools;
AppCore::AppCore(MainWindow *win, bool record, QObject *parent)
: QObject(parent), disp_core(new Schedule::CommandsDispatcher(QDir::home(), record)),
views_holder(win), global_config(new Config::XMLConfig(this)),
makes_core(new StoryTool())//, docs_manager(new DocsManager(makes_core, this, win))
AppCore::AppCore(MainWindow *win, QObject *parent)
: QObject(parent), views_holder(win),
global_config(new Config::XMLConfig(this)),
makes_core(new StoryTool()) //, docs_manager(new DocsManager(makes_core,
// this, win))
{
global_config->loadFile(QDir(QApplication::applicationDirPath()).filePath(".software.xml"));
@ -39,7 +40,6 @@ AppCore::AppCore(MainWindow *win, bool record, QObject *parent)
present_types << ins0 << ins1 << ins2 << ins3 << ins4
<< new DefaultTextPresent();
}
void AppCore::registerHighlightType(Enhancement::HighlightFeature *base_type)

View File

@ -48,10 +48,8 @@ namespace Core {
*/
class AppCore : public QObject, public Schedule::AccessibleObject
{
public:
Schedule::CommandsDispatcher *const disp_core;
AppCore(MainWindow *win, bool record, QObject *parent = nullptr);
public:
AppCore(MainWindow *win, QObject *parent = nullptr);
virtual ~AppCore() = default;
void registerHighlightType(Enhancement::HighlightFeature *base_type);

View File

@ -382,3 +382,24 @@ QString StoryconceptJumpTo::toText() const { return navi_path.join("/"); }
void StoryconceptJumpTo::fromText(const QString &line) {
navi_path = line.split("/");
}
StoryfragmentJumpTo::StoryfragmentJumpTo(const QList<QString> &path) {
navi_path.append(path);
}
QString StoryfragmentJumpTo::name() const { return NAME(StoryfragmentJumpTo); }
void StoryfragmentJumpTo::run(Schedule::CommandsDispatcher *core) const {
auto core_ins = core->get<AppCore>(NAME(AppCore));
auto unit_ins = core_ins->parseCore()->queryStoryUnit(navi_path[0]).first();
auto unit_doc = unit_ins->doc();
auto vmgr =
core_ins->disp_core->get<DocumentsManager>(NAME(DocumentsManager));
auto index = vmgr->projectManager()->queryIndex(unit_doc->filePath());
auto route = vmgr->converter(index);
vmgr->openFile(route);
vmgr->activePresentOf(route)->jumpTo(navi_path);
}

View File

@ -210,6 +210,21 @@ namespace CommandList {
QList<QString> navi_path;
};
class StoryfragmentJumpTo : public Schedule::GeCommand {
public:
StoryfragmentJumpTo(const QList<QString> &path);
// GeCommand interface
public:
virtual QString name() const override;
virtual void run(Schedule::CommandsDispatcher *core) const override;
virtual QString toText() const override;
virtual void fromText(const QString &line) override;
private:
QList<QString> navi_path;
};
} // namespace CommandList
#endif // COMMAND_LIST_H

View File

@ -1,87 +1,75 @@
#include "fragmentsorderview.h"
#include "DocsManager.h"
#include "command_list.h"
#include "manager_docs.h"
#include <comdef.h>
#include <StoryUnitDocumentParser.h>
#include <QVBoxLayout>
#include <StoryUnitDocumentParser.h>
#include <comdef.h>
using namespace Components;
using namespace Parse;
FragmentsOrderView::FragmentsOrderView(Core::AppCore *core, QWidget *parent)
: QWidget(parent), core_ins(core), table_view(new QTableView(this)),
table_base(new QStandardItemModel(this))
{
this->table_view->setModel(table_base);
table_base->setHorizontalHeaderLabels(QStringList() << "情节名称" << "单元名称" << "索引值");
FragmentsOrderView::FragmentsOrderView(Schedule::CommandsDispatcher *core,
QWidget *parent)
: QWidget(parent), core_ins(core), table_view(new QTableView(this)) {
auto backend =
core->get<FragmentsOrderviewModel>(NAME(FragmentsOrderviewModel));
this->table_view->setModel(backend->tableModel());
auto layout = new QVBoxLayout(this);
layout->addWidget(table_view);
connect(this->table_view, &QTableView::doubleClicked, this, &FragmentsOrderView::double_click);
}
void FragmentsOrderView::refresh()
{
table_base->clear();
table_base->setHorizontalHeaderLabels(QStringList() << "情节名称" << "单元名称" << "索引值");
auto node_list = core_ins->parseCore()->queryOrdersFragment();
for(auto &ins : node_list){
QList<QStandardItem*> row;
row << new QStandardItem(ins.first->name()[0]);
row << new QStandardItem(ins.first->name()[1]);
row << new QStandardItem(QString("%1").arg(ins.second, 8, 'f'));
for(auto &i : row) i->setEditable(false);
table_base->appendRow(row);
}
}
using namespace CommandList;
void FragmentsOrderView::double_click(const QModelIndex &index)
{
if(!index.isValid())
return;
auto frag = table_base->item(index.row());
auto unit = table_base->item(index.row(), 1);
QList<QString> path;
path << unit->text() << frag->text();
path << index.sibling(index.row(), 0).data().toString();
path << index.sibling(index.row(), 1).data().toString();
core_ins->postCommand(StoryfragmentJumpTo(path));
}
auto unit_ins = this->core_ins->parseCore()->queryStoryUnit(path[0]).first();
auto unit_doc = unit_ins->doc();
QString FragmentsOrderView::name() const { return NAME(FragmentsOrderView); }
auto vmgr = this->core_ins->disp_core->get<DocumentsManager>(NAME(DocumentsManager));
index = vmgr->converter(QFileInfo())
FragmentsOrderviewModel::FragmentsOrderviewModel(Core::AppCore *core)
: core_ins(core), table_base(new QStandardItemModel) {
this->core_ins->getDocsManager()->openTextDocument(unit_doc->filePath(), unit_doc->docName());
auto present = this->core_ins->getDocsManager()->queryTextComponent(QFileInfo(unit_doc->filePath()));
table_base->setHorizontalHeaderLabels(QStringList() << "情节名称"
<< "单元名称"
<< "索引值");
}
if(path.size()){
present->jumpTo(path);
void FragmentsOrderviewModel::refreshTable() {
table_base->clear();
table_base->setHorizontalHeaderLabels(QStringList() << "情节名称"
<< "单元名称"
<< "索引值");
auto node_list = core_ins->parseCore()->queryOrdersFragment();
for (auto &ins : node_list) {
QList<QStandardItem *> row;
row << new QStandardItem(ins.first->name()[0]);
row << new QStandardItem(ins.first->name()[1]);
row << new QStandardItem(QString("%1").arg(ins.second, 8, 'f'));
for (auto &i : row)
i->setEditable(false);
table_base->appendRow(row);
}
}
QString FragmentsOrderView::name() const
{
return NAME(FragmentsOrderView);
QStandardItemModel *FragmentsOrderviewModel::tableModel() const {
return table_base;
}
QString FragmentsOrderviewModel::name() const {
return NAME(FragmentsOrderviewModel);
}

View File

@ -10,27 +10,40 @@
namespace Components {
class FragmentsOrderviewModel : public Schedule::AccessibleObject {
public:
FragmentsOrderviewModel(Core::AppCore *core);
void refreshTable();
QStandardItemModel *tableModel() const;
private:
Core::AppCore *const core_ins;
QStandardItemModel *const table_base;
// AccessibleObject interface
public:
virtual QString name() const override;
};
class FragmentsOrderView : public QWidget, public Schedule::AccessibleObject
{
Q_OBJECT
public:
explicit FragmentsOrderView(Core::AppCore *core, QWidget *parent = nullptr);
void refresh();
public:
explicit FragmentsOrderView(Schedule::CommandsDispatcher *core,
QWidget *parent = nullptr);
void double_click(const QModelIndex &index);
private:
Core::AppCore *const core_ins;
private:
Schedule::CommandsDispatcher *const core_ins;
QTableView *const table_view;
QStandardItemModel *const table_base;
// AccessibleObject interface
public:
public:
virtual QString name() const override;
};
}
} // namespace Components
#endif // FRAGMENTSORDERVIEW_H

View File

@ -74,6 +74,10 @@ void StoryconceptsPresent::jump_to(const QModelIndex &curr) {
core_ins->postCommand(StoryconceptJumpTo(path));
}
QString StoryconceptsPresent::name() const {
return NAME(StoryconceptsPresent);
}
StoryconceptsPresentModel::StoryconceptsPresentModel(Core::AppCore *core)
: core_ins(core), model_base(new QStandardItemModel),
detail_backend(new QTextDocument) {

View File

@ -46,6 +46,10 @@ namespace Components {
void show_details(const QModelIndex &curr);
void jump_to(const QModelIndex &curr);
// AccessibleObject interface
public:
virtual QString name() const override;
};
}