#include "srcedit_storyboard.h" #include "keywordshighlighter.h" #include #include #include #include #include using namespace Components; using namespace Parse::Result; using namespace Enhancement; using namespace Core; StoryboardSourceEdit::StoryboardSourceEdit() : words_highlighter(new KeywordsHighlighter(this)), edit_square(new QTextEdit) { words_highlighter->setDocument(this->edit_square->document()); connect(edit_square, &QTextEdit::textChanged, [this](){ emit this->dataChanged(filepath_store); }); } void StoryboardSourceEdit::modeReset(const QString &) const{} QList StoryboardSourceEdit::modes() const { return QList() << "源码"; } QString StoryboardSourceEdit::currentMode() const { return modes()[0]; } void StoryboardSourceEdit::contexBinding(Core::AppCore *app) { this->core_temp = app; } void StoryboardSourceEdit::renderRepeat() const { this->words_highlighter->rehighlight(); } QList StoryboardSourceEdit::suffixes() const { return QList() << "storyboard"; } std::tuple StoryboardSourceEdit::create(const QDir &target, const QString &name, const QString &suffix) { auto path = target.filePath(QString("%1.%2").arg(name, suffix)); if(QFileInfo::exists(path)) return std::make_tuple(false, path); QFile nwf(path); if(!nwf.open(QIODevice::WriteOnly|QIODevice::Text)) throw new SimpleException("指定文件无法创建:"+path); return std::make_tuple(true, target.relativeFilePath(path)); } MakeTools::FilePresent *StoryboardSourceEdit::newInst() const { return new StoryboardSourceEdit(); } QWidget *StoryboardSourceEdit::widget() const { return edit_square; } QString StoryboardSourceEdit::name() const { return this->name_store; } void StoryboardSourceEdit::load(const QFileInfo &target_file) { if(!target_file.exists()) throw new SimpleException("参数错误:传入的文件不存在"); if(!target_file.isFile()) throw new SimpleException("参数错误:传入参数非文件类型"); filepath_store = target_file.absoluteFilePath(); QFile bin(filepath_store); if(!bin.open(QIODevice::ReadOnly|QIODevice::Text)) throw new SimpleException("参数错误:指定的文件无法打开"); QTextStream tin(&bin); tin.setCodec("UTF-8"); this->edit_square->setText(tin.readAll()); } void StoryboardSourceEdit::saveAs(const QString &path) { if(!path.isEmpty()) filepath_store = path; QFile bout(filepath_store); if(!bout.open(QIODevice::WriteOnly|QIODevice::Text)) throw new SimpleException("参数错误:指定的文件无法打开"); QTextStream tout(&bout); tout.setCodec("UTF-8"); tout << this->edit_square->toPlainText(); tout.flush(); } QString StoryboardSourceEdit::relativeTargetPath(const QDir &base) const { return base.relativeFilePath(filepath_store); } QString StoryboardSourceEdit::absoluteTargetPath() const { return filepath_store; } QString StoryboardSourceEdit::getText() const { return edit_square->toPlainText(); } bool StoryboardSourceEdit::isModified() const { return true; } void StoryboardSourceEdit::applySetting(const QString &name, Core::AppCore *core) { this->name_store = name; } void StoryboardSourceEdit::jumpTo(const QList &path) { auto fpath = this->absoluteTargetPath(); auto core = core_temp->parseCore(); if(path.size()){ auto storynode = core->queryStoryBoard(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()); this->edit_square->setTextCursor(cur); } } MakeTools::FilePresent::Features StoryboardSourceEdit::features() { return Feature::Compile | Feature::HighLight; }