LAMPCAE/src/PluginWBFZExchangePlugin/TaskTreeClass.cpp

227 lines
5.3 KiB
C++
Raw Normal View History

#include "TaskTreeClass.h"
#include <iostream>
#include <memory>
#include <boost/filesystem.hpp>
#include <QStandardItemModel>
#include <QStringListModel>
#include <QMessageBox>
#include <unordered_set>
#include <QProcess>
#include <QDebug>
#include <QtCore>
#include <QtXml>
#include <QDomDocument>
TaskNode::TaskNode(QWidget* parent) :QCheckBox(parent)
{
this->status = TaskStatusEnum::wait;
this->setText("TaskNode");
this->description = "TaskNode";
this->TaskXmlPath = "";
this->setContextMenuPolicy(Qt::CustomContextMenu);
this->ContentListContextMenu = new QMenu(this); // 表格控件的右键菜单
QObject::connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(ShowContentListContextMenu(QPoint)));
//// 加载数据
//QAction* action_Node_ExcuteTask_Action = this->ContentListContextMenu->addAction(u8"加载");
//QObject::connect(action_Node_ExcuteTask_Action, SIGNAL(triggered()), this, SLOT(ExcuteTask()));
// 重命名
QAction* action_rename=this->ContentListContextMenu->addAction(u8"重命名");
QObject::connect(action_rename, SIGNAL(triggered()), this, SLOT(renameNode()));
// 移除
QAction* action_remove = this->ContentListContextMenu->addAction(u8"移除");
QObject::connect(action_remove, SIGNAL(triggered()), this, SLOT(deleteNode()));
}
TaskNode::~TaskNode()
{
this->Nodelist.clear();
}
QString TaskNode::getName()
{
return this->text();
}
int TaskNode::setName(QString name)
{
this->setText(name);
return 0;
}
QString TaskNode::getTaskName()
{
return this->text();
}
int TaskNode::loadXmlDocument(QString xmlFilePath, QDomDocument& doc)
{
QFile file(xmlFilePath.toUtf8().constData()); //相对路径、绝对路径、资源路径都可以
if (!file.open(QFile::ReadOnly)) //可以用QIODeviceTruncate表示清空原来的内容
{
QString tiptext = "File isn't opened in readonly mode ,file path "+ xmlFilePath;
qDebug() << tiptext.toUtf8().constData();
return 2;
}
QTextStream stream(&file);
QTextCodec* codec = QTextCodec::codecForName(u8"UTF-8");
stream.setCodec(codec);
QString content = stream.readAll();
file.close();
if (!doc.setContent(content)) // 关联文件流
{
QString tiptext = u8"File isn't readed in xml format ,file path " + xmlFilePath;
qDebug() << tiptext.toUtf8().constData();
file.close();
return 3;
}
file.close(); // 文件读取结束
return -1;
}
int TaskNode::writeXmlDocument(QDomDocument& doc)
{
QFile wfile(this->TaskXmlPath.toUtf8().constData()); // 保存 XML 文件
if (wfile.open(QFile::ReadWrite | QFile::Text))
{
QTextStream out(&wfile);
doc.save(out, QDomNode::EncodingFromDocument);
wfile.close();
}
return -1;
}
int TaskNode::loadXmlFile(QString xmlFilePath)
{
return 0;
}
int TaskNode::saveXmlFile()
{
return 0;
}
int TaskNode::addNode(std::shared_ptr<TaskNode> n)
{
this->Nodelist.push_back(n);
return 0;
}
std::shared_ptr<TaskNode> TaskNode::getNode(int nid)
{
if (nid < this->Nodelist.size()) {
return this->Nodelist[nid];
}
return std::shared_ptr<TaskNode>(nullptr);
}
std::shared_ptr<TaskNode> TaskNode::getNode(QString nodename)
{
for (int i = 0; i < this->Nodelist.size(); i++) {
if (strcmp(nodename.toUtf8().constData(), this->Nodelist[i]->getName().toUtf8().constData()) == 0) {
return this->Nodelist[i];
}
}
return std::shared_ptr<TaskNode>(nullptr);
}
std::shared_ptr<TaskNode> TaskNode::removeAt(int nid)
{
if (nid < this->Nodelist.size()) {
std::shared_ptr<TaskNode> result = this->Nodelist[nid];
this->Nodelist.erase(this->Nodelist.begin()+nid); // 删除 nid
return result;
}
return std::shared_ptr<TaskNode>(nullptr);
}
std::shared_ptr<TaskNode> TaskNode::removeByName(QString nodename)
{
for (int i = 0; i < this->Nodelist.size(); i++) {
if (strcmp(nodename.toUtf8().constData(), this->Nodelist[i]->getName().toUtf8().constData()) == 0) {
std::shared_ptr<TaskNode> result = this->Nodelist[i];
this->Nodelist.erase(this->Nodelist.begin() + i); // 删除 nid
return result;
}
}
return std::shared_ptr<TaskNode>(nullptr);
}
TaskStatusEnum TaskNode::getStatus()
{
return this->status;
// return TaskStatusEnum();
}
int TaskNode::setStatus(TaskStatusEnum taskstatus)
{
this->status = taskstatus;
return 0;
}
void TaskNode::renameNode()
{
QString newName=QInputDialog::getText(this, u8"重命名", u8"请输入新的名称", QLineEdit::Normal, this->text());
emit this->renameNode(this->text(), newName);
}
void TaskNode::deleteNode()
{
this->FinishTask();
emit this->deleteNode(this->text());
}
void TaskNode::copyNewNode()
{
emit this->copyNewNode(this->CopyToNew());
}
void TaskNode::ShowContentListContextMenu(QPoint p)
{
this->ContentListContextMenu->exec(QCursor::pos());
}
int TaskNode::ExcuteTask()
{
this->status = TaskStatusEnum::excuting;
return 0;
}
int TaskNode::FinishTask()
{
return 0;
}
TaskNode* TaskNode::CopyToNew()
{
return nullptr;
}
int TaskNode::preView()
{
return 0;
}
int TaskTreeClass::loadXmlFile(QString xmlFilePath)
{
return 0;
}
int TaskTreeClass::saveXmlFile()
{
return 0;
}