LAMPCAE/src/PluginWBFZExchangePlugin/TaskTreeClass.cpp

227 lines
5.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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;
}