Skip to content

Commit

Permalink
优化文字内容处理器;支持拖动文件到文字内容处理器,自动读取文本内容
Browse files Browse the repository at this point in the history
  • Loading branch information
changfeng1050 committed Aug 19, 2022
1 parent 79061ba commit 22ba76e
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 23 deletions.
120 changes: 102 additions & 18 deletions DataProcessDialog.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
//
// Created by chang on 2021/6/14.
//
#include <QMimeData>
#include <QCloseEvent>
#include <QTextEdit>
#include <QLineEdit>
Expand All @@ -12,16 +13,26 @@
#include <QCheckBox>
#include <QLabel>
#include <QSettings>
#include <QFileInfo>

#include "DataProcessDialog.h"
#include "global.h"
#include "utils/FileUtil.h"

static const int MATCH_INDEX_COUNT = 5;

QString convertSimplified(DataProcessDialog *dialog, const QString &line) {
return line.simplified();
}

QString convertRemoveText(DataProcessDialog *dialog, const QString &line) {
auto text = dialog->matchText();
if (line.contains(text)) {
return QString(line).remove(text);
}
return line;
}

QString convertRemovePrefix(DataProcessDialog *dialog, const QString &line) {
auto text = dialog->matchText();
if (line.startsWith(text)) {
Expand Down Expand Up @@ -151,7 +162,7 @@ bool deleteMatchIndexLine(DataProcessDialog *dialog, const QString &line) {
if (map.isEmpty()) {
return false;
}
for (auto &index : map.keys()) {
for (auto &index: map.keys()) {
if (index > items.count() - 1) {
return false;
}
Expand All @@ -178,7 +189,7 @@ bool keepMatchIndexLine(DataProcessDialog *dialog, const QString &line) {
if (map.isEmpty()) {
return false;
}
for (auto &index : map.keys()) {
for (auto &index: map.keys()) {
if (index > items.count() - 1) {
return false;
}
Expand All @@ -199,6 +210,9 @@ DataProcessDialog::DataProcessDialog(const QString &text, QWidget *parent, Qt::W
if (!text.isEmpty()) {
textEdit->setText(text);
}

textEdit->setAcceptDrops(false);
setAcceptDrops(true);
}

DataProcessDialog::~DataProcessDialog() {
Expand Down Expand Up @@ -265,15 +279,21 @@ void DataProcessDialog::createUi() {
deleteSuffixButton = new QPushButton(tr("后缀字符"), this);
deleteBeforeButton = new QPushButton(tr("匹配字符串之前的字符"), this);
deleteAfterButton = new QPushButton(tr("匹配字符串之后的字符"), this);
deleteMatchTextLineButton = new QPushButton(tr("删除匹配字符行"), this);
saveMatchTextLineButton = new QPushButton(tr("保留匹配字符行"), this);
deleteLayout->addWidget(includeMatchTextCheckBox);
auto deleteLabel = new QLabel(tr("删除"));
deleteLayout->addWidget(deleteLabel);
deleteLayout->addWidget(deleteTextButton);
deleteLayout->addWidget(deletePrefixButton);
deleteLayout->addWidget(deleteSuffixButton);
deleteLayout->addWidget(deleteBeforeButton);
deleteLayout->addWidget(deleteAfterButton);
deleteLayout->addStretch();
deleteLayout->addWidget(deleteMatchTextLineButton);
deleteLayout->addWidget(saveMatchTextLineButton);

auto deleteGroupBox = new QGroupBox(tr("删除字符串"), this);
auto deleteGroupBox = new QGroupBox(tr("按字符串处理"), this);
deleteGroupBox->setLayout(deleteLayout);

auto returnReplaceLabel = new QLabel(tr("将换行符替换为"), this);
Expand Down Expand Up @@ -317,6 +337,7 @@ void DataProcessDialog::createUi() {
frameSuffixLineEdit = new QLineEdit(this);
frameSuffixLabel->setBuddy(frameSuffixLineEdit);
frameSplitLineButton = new QPushButton(tr("重新换行"), this);
frameDeleteButton = new QPushButton(tr("删除帧"), this);

auto frameLayout = new QHBoxLayout;
frameLayout->addWidget(framePrefixLabel);
Expand All @@ -325,6 +346,7 @@ void DataProcessDialog::createUi() {
frameLayout->addWidget(frameSuffixLineEdit);
frameLayout->addStretch();
frameLayout->addWidget(frameSplitLineButton);
frameLayout->addWidget(frameDeleteButton);

auto frameGroupBox = new QGroupBox(tr("帧处理"), this);
frameGroupBox->setLayout(frameLayout);
Expand All @@ -337,9 +359,8 @@ void DataProcessDialog::createUi() {
deleteShorterOrEqualLineButton = new QPushButton(tr("删除短于或等于匹配行"));
deleteLongerLineButton = new QPushButton(tr("删除长于匹配行"));
deleteLongerOrEqualLineButton = new QPushButton(tr("删除长于或等于匹配行"));

deleteMatchTextLineButton = new QPushButton(tr("删除匹配行"), this);
saveMatchTextLineButton = new QPushButton(tr("保留匹配行"), this);
deleteMatchLineButton = new QPushButton(tr("删除匹配行"), this);
keepMatchLineButton = new QPushButton(tr("保留匹配行"), this);

auto deleteLineLayout = new QHBoxLayout;
deleteLineLayout->addWidget(matchTextCountLabel);
Expand All @@ -349,9 +370,9 @@ void DataProcessDialog::createUi() {
deleteLineLayout->addWidget(deleteLongerLineButton);
deleteLineLayout->addWidget(deleteLongerOrEqualLineButton);
deleteLineLayout->addStretch();
deleteLineLayout->addWidget(deleteMatchTextLineButton);
deleteLineLayout->addWidget(saveMatchTextLineButton);
auto deleteLineGroupBox = new QGroupBox(tr("行处理"), this);
deleteLineLayout->addWidget(deleteMatchLineButton);
deleteLineLayout->addWidget(keepMatchLineButton);
auto deleteLineGroupBox = new QGroupBox(tr("按行字符串数处理"), this);
deleteLineGroupBox->setLayout(deleteLineLayout);

auto lineIndexLayout = new QHBoxLayout;
Expand All @@ -371,10 +392,6 @@ void DataProcessDialog::createUi() {
lineIndexLayout->addWidget(matchLineEdit);
}

deleteMatchLineButton = new QPushButton(tr("删除匹配行"), this);
keepMatchLineButton = new QPushButton(tr("保留匹配行"), this);
lineIndexLayout->addWidget(deleteMatchLineButton);
lineIndexLayout->addWidget(keepMatchLineButton);
auto lineIndexGroup = new QGroupBox(tr("高级行处理"), this);
lineIndexGroup->setLayout(lineIndexLayout);

Expand Down Expand Up @@ -435,10 +452,10 @@ void DataProcessDialog::createConnect() {
connect(matchTextLineEdit, &QLineEdit::textChanged, [this](const QString &text) {
matchTextCountLineEdit->setText(QString::number(text.count()));
auto items = matchTextLineEdit->text().split(QRegExp("\\s+"));
for (const auto &item : indexLineEditList) {
for (const auto &item: indexLineEditList) {
item->setText("");
}
for (const auto &item : matchLineEditList) {
for (const auto &item: matchLineEditList) {
item->setText("");
}

Expand All @@ -453,6 +470,11 @@ void DataProcessDialog::createConnect() {
connect(simplifiedButton, &QPushButton::clicked, [this] {
processText(convertSimplified);
});

connect(deleteTextButton, &QPushButton::clicked, [this] {
processText(convertRemoveText);
});

connect(deletePrefixButton, &QPushButton::clicked, [this] {
processText(convertRemovePrefix);
});
Expand All @@ -463,14 +485,16 @@ void DataProcessDialog::createConnect() {
connect(deleteBeforeButton, &QPushButton::clicked, [this] {
processText(convertRemoveBefore);
});
connect(deleteBeforeButton, &QPushButton::clicked, [this] {
connect(deleteAfterButton, &QPushButton::clicked, [this] {
processText(convertRemoveAfter);
});

connect(returnTypeReplaceButton, &QPushButton::clicked, this, &DataProcessDialog::replaceLineReturn);

connect(frameSplitLineButton, &QPushButton::clicked, this, &DataProcessDialog::splitLine);

connect(frameDeleteButton, &QPushButton::clicked, this, &DataProcessDialog::deleteFrame);

connect(deleteShorterLineButton, &QPushButton::clicked, [this] {
processText2(deleteShorterLine);
});
Expand Down Expand Up @@ -799,9 +823,69 @@ void DataProcessDialog::keyPressEvent(QKeyEvent *event) {
}

void DataProcessDialog::dropEvent(QDropEvent *event) {
QWidget::dropEvent(event);
auto urls = event->mimeData()->urls();
if (urls.isEmpty()) {
event->ignore();
return;
}

QStringList filePathList;

QString filePath;
for (auto &url: urls) {
auto fileInfo = QFileInfo(url.toLocalFile());
if (isTextFile(fileInfo.fileName())) {
filePath = fileInfo.absoluteFilePath();
break;
}
}
qDebug() << "accept file:" << filePath;
if (!filePath.isEmpty()) {
auto text = readFromFile(filePath);
textEdit->setText(text);
} else {
event->ignore();
}
}

void DataProcessDialog::dragEnterEvent(QDragEnterEvent *event) {
QWidget::dragEnterEvent(event);
if (event->mimeData()->hasFormat("text/uri-list")) {
event->acceptProposedAction();
} else {
event->ignore();
}
}

void DataProcessDialog::deleteFrame() {
auto prefix = framePrefixLineEdit->text().trimmed();
auto suffix = frameSuffixLineEdit->text().trimmed();
if (prefix.isEmpty() || suffix.isEmpty()) {
return;
}

auto text = textEdit->toPlainText();
if (text.isEmpty()) {
return;
}
QString t = text;
QTextStream in(&t);
QStringList lines;
auto separator = ' ';
while (!in.atEnd()) {
auto line = in.readLine();
lines.append(line);
}
text = lines.join(separator).simplified();
int prefixIndex = -1;
int suffixIndex = -1;

prefixIndex = text.indexOf(prefix);

while (prefixIndex >= 0) {
suffixIndex = text.indexOf(suffix, prefixIndex + prefix.length());
if (suffixIndex >= 0) {
text = text.remove(prefixIndex, suffixIndex - prefixIndex + suffix.length());
}
}
textEdit->setText(text);
}
13 changes: 8 additions & 5 deletions DataProcessDialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ class QPushButton;
class DataProcessDialog : public QDialog {
Q_OBJECT
public:
explicit DataProcessDialog(const QString &text="", QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
explicit DataProcessDialog(const QString &text = "", QWidget *parent = nullptr,
Qt::WindowFlags f = Qt::WindowFlags());

~DataProcessDialog() override;

Expand Down Expand Up @@ -63,6 +64,7 @@ Q_OBJECT

protected:
void keyPressEvent(QKeyEvent *) override;

void closeEvent(QCloseEvent *event) override;

void dropEvent(QDropEvent *event) override;
Expand All @@ -75,6 +77,8 @@ public Q_SLOT:

void splitLine();

void deleteFrame();

private:
void createUi();

Expand Down Expand Up @@ -107,6 +111,8 @@ public Q_SLOT:
QPushButton *deleteSuffixButton{nullptr};
QPushButton *deleteBeforeButton{nullptr};
QPushButton *deleteAfterButton{nullptr};
QPushButton *deleteMatchTextLineButton{nullptr};
QPushButton *saveMatchTextLineButton{nullptr};

QRadioButton *returnTypeRnRadioButton{nullptr};
QRadioButton *returnTypeRRadioButton{nullptr};
Expand All @@ -121,23 +127,20 @@ public Q_SLOT:
QLineEdit *framePrefixLineEdit{nullptr};
QLineEdit *frameSuffixLineEdit{nullptr};
QPushButton *frameSplitLineButton{nullptr};
QPushButton *frameDeleteButton{nullptr};

QPushButton *deleteShorterLineButton{nullptr};
QPushButton *deleteShorterOrEqualLineButton{nullptr};
QPushButton *deleteLongerLineButton{nullptr};
QPushButton *deleteLongerOrEqualLineButton{nullptr};

QPushButton *deleteMatchTextLineButton{nullptr};
QPushButton *saveMatchTextLineButton{nullptr};

QList<QLineEdit *> indexLineEditList;
QList<QLineEdit *> matchLineEditList;
QPushButton *deleteMatchLineButton{nullptr};
QPushButton *keepMatchLineButton{nullptr};

QPushButton *saveButton{nullptr};
QPushButton *cancelButton{nullptr};

};

#endif //SERIALWIZARD_DATAPROCESSDIALOG_H

0 comments on commit 22ba76e

Please sign in to comment.