#include "srcedit_storyvolume.h" #include "keywordshighlighter.h" #include #include #include #include #include using namespace Components; using namespace Parse::Result; using namespace Enhancement; using namespace Core; StoryvolumeSourceEdit::StoryvolumeSourceEdit() : 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 StoryvolumeSourceEdit::modeReset(const QString &) const{} QList StoryvolumeSourceEdit::modes() const { return QList() << "源码"; } QString StoryvolumeSourceEdit::currentMode() const { return modes()[0]; } QString StoryvolumeSourceEdit::name() const { return name_store; } void StoryvolumeSourceEdit::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 StoryvolumeSourceEdit::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 StoryvolumeSourceEdit::relativeTargetPath(const QDir &base) const { return base.relativeFilePath(filepath_store); } QString StoryvolumeSourceEdit::absoluteTargetPath() const { return filepath_store; } QString StoryvolumeSourceEdit::getText() const { return edit_square->toPlainText(); } bool StoryvolumeSourceEdit::isModified() const { return true; } void StoryvolumeSourceEdit::applySetting(const QString &name, Core::AppCore *core) { this->name_store = name; } MakeTools::FilePresent::Features StoryvolumeSourceEdit::features() { return Feature::Compile | Feature::HighLight; } void StoryvolumeSourceEdit::renderRepeat() const { this->words_highlighter->rehighlight(); } QList StoryvolumeSourceEdit::suffixes() const { return QList() << "storyvolume"; } std::tuple StoryvolumeSourceEdit::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 *StoryvolumeSourceEdit::newInst() const { return new StoryvolumeSourceEdit(); } QWidget *StoryvolumeSourceEdit::widget() const { return edit_square; } void StoryvolumeSourceEdit::jumpTo(const QList &path) { } void StoryvolumeSourceEdit::contexBinding(Core::AppCore *app) { core_ins = app; }