342 lines
13 KiB
C++
342 lines
13 KiB
C++
#include "DialogFileOperation.h"
|
|
#include "ui_dialogfileoperation.h"
|
|
#include <QDir>
|
|
#include <QStringListModel>
|
|
#include <SysPara.h>
|
|
#include <QAbstractItemView>
|
|
#include <QFile>
|
|
#include <QTextStream>
|
|
#include <QMessageBox>
|
|
#include <Public.h>
|
|
|
|
#include <QTextCodec>
|
|
#include <QByteArray>
|
|
#include <QDebug>
|
|
#include<QStandardItemModel>
|
|
#include"HtmlDelegate.h"
|
|
#include"myinclude.h"
|
|
|
|
DialogFileOperation::DialogFileOperation(QWidget *parent) :
|
|
QDialog(parent),
|
|
ui(new Ui::DialogFileOperation)
|
|
{
|
|
ui->setupUi(this);
|
|
this->setWindowTitle(tr("文件操作"));
|
|
ui->textEditView->setReadOnly(true);
|
|
ui->textEditView->setLineWrapMode(QTextEdit::NoWrap);
|
|
ui->textEditView->document()->setDocumentMargin(0);
|
|
this->setFixedSize(this->geometry().width(),this->geometry().height());
|
|
EditMode=4;
|
|
}
|
|
|
|
void DialogFileOperation::refreshListView(int mode){
|
|
|
|
QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR;
|
|
QDir dir(dirPath);
|
|
QStringList filters;
|
|
EditMode = mode;
|
|
if(mode==TXTFILE) filters << "*.html" << "*.txt" << "*.TXT" << "*.jpeg" << "*.gif" << "*.jpg" << "*.bmp"<< "*.BMP"<< "*.bin"; // txtmode
|
|
// else if(mode==PICFILE) filters << "*.png";// <<"*.jpg" ; // picmode
|
|
else if(mode==PICFILE) filters << "*.png" << "*.jpeg" << "*.gif" << "*.jpg" << "*.bmp"<< "*.BMP";
|
|
else if(mode==SCENE) filters << "*.xml";
|
|
else filters << "*.html" << "*.bmp" << "*.BMP"<<"*.jpg"<<"*.gif";
|
|
dir.setNameFilters(filters);
|
|
dir.setFilter(QDir::Files);
|
|
#ifndef EnableArabic
|
|
QStringListModel *model = new QStringListModel(dir.entryList());
|
|
#else
|
|
QStringList entries=dir.entryList();
|
|
QStandardItemModel *model = new QStandardItemModel();
|
|
for(int i=0;i<entries.size();i++){
|
|
//qDebug()<<"entries:"<<entries.at(i);
|
|
QStandardItem *item1 = new QStandardItem(entries.at(i));
|
|
int lastIndex=entries.at(i).lastIndexOf(".");
|
|
if(lastIndex != -1){
|
|
int secondLastIndex = entries.at(i).lastIndexOf(".",lastIndex-1);
|
|
if(secondLastIndex != -1){
|
|
QString subsuffix=entries.at(i).mid(secondLastIndex);
|
|
if(subsuffix.contains(".a.")){
|
|
QString subsuffix2=entries.at(i).mid(lastIndex);
|
|
QString subname=entries.at(i).mid(0,secondLastIndex);
|
|
QString stringhtml=QString("<span style=font-family:'biyangarabic';>%1</span><span style=font-family:'biyang';>%2</span>").arg(subname).arg(subsuffix2);
|
|
QStandardItem *item2 = new QStandardItem(stringhtml);
|
|
model->appendRow(item2);
|
|
}
|
|
}else{
|
|
model->appendRow(item1);
|
|
}
|
|
}
|
|
}
|
|
ui->listViewFile->setItemDelegate(new HtmlDelegate);
|
|
#endif
|
|
|
|
ui->listViewFile->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
|
ui->listViewFile->setModel(model); //useList是个QListView
|
|
int count = ui->listViewFile->model()->rowCount();
|
|
if(count){
|
|
QModelIndex index = ui->listViewFile->model()->index(0 , 0);
|
|
ui->listViewFile->setCurrentIndex(index);
|
|
on_listViewFile_entered(index);
|
|
}
|
|
}
|
|
|
|
|
|
DialogFileOperation::~DialogFileOperation()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void DialogFileOperation::on_listViewFile_entered(const QModelIndex &index)
|
|
{
|
|
#ifdef EnableArabic
|
|
QString fileName=index.data().toString();
|
|
if(fileName.endsWith("</span>")){
|
|
QTextDocument doc;
|
|
doc.setHtml(fileName);
|
|
fileName= doc.toPlainText();
|
|
int position = fileName.lastIndexOf(".");
|
|
fileName.insert(position,".a");
|
|
}
|
|
#endif
|
|
QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR;
|
|
#ifndef EnableArabic
|
|
QString filePath = dirPath + index.data().toString();
|
|
#else
|
|
QString filePath = dirPath + fileName;
|
|
#endif
|
|
if(filePath.endsWith(".gif") || filePath.endsWith(".jpeg") || filePath.endsWith(".jpg") ||
|
|
filePath.endsWith(".png") || filePath.endsWith(".bmp")|| filePath.endsWith(".BMP")|| filePath.endsWith(".nda")){
|
|
ui->textEditView->clear();
|
|
ui->textEditView->setHtml(QString("<img src='%1'/>").arg(filePath));
|
|
}
|
|
else if(filePath.endsWith(".xml"))
|
|
{
|
|
emit createSceneImage(filePath);
|
|
ui->textEditView->setHtml(QString("<img src='%1'/>").arg("./printSceneView.png"));
|
|
}
|
|
else {
|
|
QFile file(filePath);
|
|
if (!file.open(QFile::ReadOnly))
|
|
return ;
|
|
if (filePath.endsWith(".txt") || filePath.endsWith(".TXT"))
|
|
{
|
|
qint64 size = file.size();
|
|
if(size/1024 > 10)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
QByteArray data = file.readAll();
|
|
QTextCodec *codec = Qt::codecForHtml(data);
|
|
QString str = codec->toUnicode(data);
|
|
if (Qt::mightBeRichText(str)) {
|
|
if(!ui->radioButtonLocal->isChecked())
|
|
str.replace(DOC_ROOT_DIR,UDISK_DOC_ROOT_DIR); //必须替换相应的路径
|
|
ui->textEditView->setHtml(str);
|
|
} else {
|
|
str = QString::fromLocal8Bit(data);
|
|
ui->textEditView->setPlainText(str);
|
|
}
|
|
}
|
|
}
|
|
void DialogFileOperation::on_listViewFile_clicked(const QModelIndex &index)
|
|
{
|
|
on_listViewFile_entered(index);
|
|
}
|
|
|
|
void DialogFileOperation::on_pushButtonNext_pressed()
|
|
{
|
|
QModelIndex currIndex = ui->listViewFile->currentIndex();
|
|
int count = ui->listViewFile->model()->rowCount();
|
|
if(count){
|
|
QModelIndex index = ui->listViewFile->model()->index((currIndex.row() + 1)%count, 0);
|
|
ui->listViewFile->setCurrentIndex(index);
|
|
on_listViewFile_entered(index);
|
|
}
|
|
}
|
|
|
|
|
|
void DialogFileOperation::on_pushButtonLast_pressed()
|
|
{
|
|
QModelIndex currIndex = ui->listViewFile->currentIndex();
|
|
int count = ui->listViewFile->model()->rowCount();
|
|
if(count){
|
|
QModelIndex index = ui->listViewFile->model()->index(currIndex.row() == 0?(count - 1):(currIndex.row() - 1), 0);
|
|
ui->listViewFile->setCurrentIndex(index);
|
|
on_listViewFile_entered(index);
|
|
}
|
|
}
|
|
|
|
void DialogFileOperation::on_pushButtonExit_pressed()
|
|
{
|
|
hide();
|
|
}
|
|
|
|
void DialogFileOperation::on_pushButtonDelFile_pressed()
|
|
{
|
|
QMessageBox::StandardButton ret;
|
|
ret = QMessageBox::warning(this, tr("警告"),
|
|
tr("是否确认删除当前文件?"),
|
|
QMessageBox::Ok | QMessageBox::Cancel);
|
|
if (ret == QMessageBox::Ok){
|
|
QModelIndex index = ui->listViewFile->currentIndex();
|
|
int currRow = index.row();
|
|
QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR;
|
|
#ifndef EnableArabic
|
|
QString filePath = dirPath + index.data().toString();
|
|
#else
|
|
QString fileName=index.data().toString();
|
|
if(fileName.endsWith("</span>")){
|
|
QTextDocument doc;
|
|
doc.setHtml(fileName);
|
|
fileName= doc.toPlainText();
|
|
int position = fileName.lastIndexOf(".");
|
|
fileName.insert(position,".a");
|
|
}
|
|
QString filePath=dirPath+fileName;
|
|
#endif
|
|
QFile file(filePath);
|
|
if(!QFileInfo(filePath).baseName().startsWith("UP")){
|
|
if(file.exists())file.remove();
|
|
file.setFileName(PARA_ROOT_DIR + QFileInfo(filePath).baseName()+".dpn" );
|
|
//file.setFileName( PARA_ROOT_DIR + QFileInfo(filePath).baseName()+".dpn" );
|
|
if(file.exists())file.remove();
|
|
}
|
|
|
|
//Public::resetPara(); // 20140923 这个BUG导致系统参数被恢复
|
|
refreshListView(EditMode);
|
|
int count = ui->listViewFile->model()->rowCount();
|
|
if(count){
|
|
index = ui->listViewFile->model()->index((currRow > (count - 1))?(count - 1):currRow , 0);
|
|
ui->listViewFile->setCurrentIndex(index);
|
|
on_listViewFile_entered(index);
|
|
}
|
|
}
|
|
|
|
}
|
|
void DialogFileOperation::on_pushButtonDelAll_pressed()
|
|
{
|
|
QMessageBox::StandardButton ret;
|
|
ret = QMessageBox::warning(this, tr("警告"),
|
|
tr("是否确认删除所有文件?"),
|
|
QMessageBox::Ok | QMessageBox::Cancel);
|
|
if (ret == QMessageBox::Ok){
|
|
QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR;
|
|
// 删除所有文件的方法要改进
|
|
|
|
system((char *)((QString("mkdir %1").arg(TESTDIR)).toAscii().data()));
|
|
system((char *)((QString("cp %1/UP* %2/. ").arg(DOC_ROOT_DIR).arg(TESTDIR)).toAscii().data())); //先备份UP*
|
|
|
|
system((char *)((QString("rm %1/*.*").arg(dirPath)).toAscii().data()));// 删除所有打印文件
|
|
|
|
system((char *)((QString("rm %1*.ini").arg(PARA_ROOT_DIR)).toAscii().data())); // 删除所有参数文件
|
|
system((char *)((QString("rm %1*.dpn").arg(PARA_ROOT_DIR)).toAscii().data()));
|
|
|
|
system((char *)((QString("cp %1/UP.* %1/UP1.* %2/. ").arg(TESTDIR).arg(DOC_ROOT_DIR)).toAscii().data()));
|
|
//system((char *)((QString("cp %1* %2/. ").arg(TESTDIR).arg(PARA_ROOT_DIR)).toAscii().data()));
|
|
refreshListView(EditMode);
|
|
}
|
|
}
|
|
|
|
void DialogFileOperation::on_pushButtonImport_pressed()
|
|
{
|
|
QMessageBox::StandardButton ret;
|
|
ret = QMessageBox::information(this, tr("提示"),
|
|
tr("是否确认从U盘导入所有文件?"),
|
|
QMessageBox::Ok | QMessageBox::Cancel);
|
|
if (ret == QMessageBox::Ok){
|
|
system((char *)((tr("mv %1/VoltParaHi.bin %1/VoltParaStd.bin %2/").arg(UDISK_DOC_ROOT_DIR).arg(PARA_ROOT_DIR)).toAscii().data()));//把参数文件移动到参数目录下
|
|
system((char *)((tr("cp %1/* %2/").arg(UDISK_DOC_ROOT_DIR).arg(DOC_ROOT_DIR)).toAscii().data()));
|
|
refreshListView(EditMode);
|
|
QMessageBox::information(this, tr("提示"),
|
|
tr("成功从U盘导入?"));
|
|
}
|
|
}
|
|
|
|
void DialogFileOperation::on_pushButtonExport_pressed()
|
|
{
|
|
QMessageBox::StandardButton ret;
|
|
ret = QMessageBox::information(this, tr("提示"),
|
|
tr("是否确认将所有文件导出到U盘?"),
|
|
QMessageBox::Ok | QMessageBox::Cancel);
|
|
if (ret == QMessageBox::Ok){
|
|
QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR;
|
|
QDir dir(UDISK_DOC_ROOT_DIR);
|
|
if(!dir.exists()){
|
|
system((char *)((QString("mkdir -p %1").arg(UDISK_DOC_ROOT_DIR)).toAscii().data()));
|
|
}
|
|
// QDir dirCONF(UDISK_CONF_ROOT_DIR);
|
|
// if(!dirCONF.exists()){
|
|
// system((char *)((QString("mkdir -p %1").arg(UDISK_CONF_ROOT_DIR)).toAscii().data()));
|
|
// }
|
|
system((char *)((QString("cp %1/* %2/").arg(DOC_ROOT_DIR).arg(UDISK_DOC_ROOT_DIR)).toAscii().data()));
|
|
// system((char *)((QString("cp %1/* %2/").arg("/home/plg/conf/").arg(UDISK_CONF_ROOT_DIR)).toAscii().data()));
|
|
refreshListView(EditMode);
|
|
QMessageBox::information(this, tr("提示"),
|
|
tr("成功导出到U盘?"));
|
|
}
|
|
}
|
|
|
|
void DialogFileOperation::on_pushButtonInsert_clicked()
|
|
{
|
|
QModelIndex index = ui->listViewFile->currentIndex();
|
|
QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR;
|
|
#ifndef EnableArabic
|
|
QString filePath = dirPath + index.data().toString();
|
|
#else
|
|
QString fileName=index.data().toString();
|
|
if(fileName.endsWith("</span>")){
|
|
QTextDocument doc;
|
|
doc.setHtml(fileName);
|
|
fileName= doc.toPlainText();
|
|
int position = fileName.lastIndexOf(".");
|
|
fileName.insert(position,".a");
|
|
}
|
|
QString filePath = dirPath + fileName;
|
|
#endif
|
|
emit openFile(filePath,true);
|
|
hide();
|
|
}
|
|
|
|
void DialogFileOperation::on_pushButtonOpen_clicked()
|
|
{
|
|
QModelIndex index = ui->listViewFile->currentIndex();
|
|
QString dirPath = ui->radioButtonLocal->isChecked()?DOC_ROOT_DIR:UDISK_DOC_ROOT_DIR;
|
|
#ifndef EnableArabic
|
|
QString filePath = dirPath + index.data().toString();
|
|
#else
|
|
QString fileName=index.data().toString();
|
|
if(fileName.endsWith("</span>")){
|
|
QTextDocument doc;
|
|
doc.setHtml(fileName);
|
|
fileName= doc.toPlainText();
|
|
int position = fileName.lastIndexOf(".");
|
|
fileName.insert(position,".a");
|
|
}
|
|
QString filePath = dirPath + fileName;
|
|
#endif
|
|
emit openFile(filePath,false);
|
|
hide();
|
|
}
|
|
|
|
void DialogFileOperation::on_radioButtonLocal_released()
|
|
{
|
|
refreshListView(EditMode);
|
|
}
|
|
|
|
void DialogFileOperation::on_radioButtonUdisk_released()
|
|
{
|
|
|
|
QDir dir(UDISK_DOC_ROOT_DIR);
|
|
if(!dir.exists()){
|
|
dir.mkdir("/udisk/doc");
|
|
QMessageBox::warning(0,tr("警告"),tr("U盘未插入或U盘根目录下的doc文件夹不存在!"));
|
|
}
|
|
refreshListView(EditMode);
|
|
}
|
|
|
|
void DialogFileOperation::modbus_openfile(QString filename)
|
|
{
|
|
emit openFile(filename,true);
|
|
}
|