Skip to content

Commit 15f685a

Browse files
committed
Simplify EditDialog code and improve the new multiple editor feature
Remove quite a bit of old code from the EditDialog. Fix various smaller issues with the multiple editors added in the last commit.
1 parent b88fd93 commit 15f685a

2 files changed

Lines changed: 46 additions & 95 deletions

File tree

src/EditDialog.cpp

Lines changed: 45 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#include "EditDialog.h"
22
#include "ui_EditDialog.h"
3-
#include <QTextStream>
4-
#include <QMessageBox>
53
#include <QFileDialog>
64
#include "sqlitedb.h"
75
#include <src/qhexedit.h>
@@ -12,17 +10,17 @@ EditDialog::EditDialog(QWidget* parent)
1210
{
1311
ui->setupUi(this);
1412

15-
QHBoxLayout* hexLayout = new QHBoxLayout;
13+
QHBoxLayout* hexLayout = new QHBoxLayout(ui->editorBinary);
1614
hexEdit = new QHexEdit(this);
1715
hexLayout->addWidget(hexEdit);
18-
ui->editorBinary->setLayout(hexLayout);
1916

2017
reset();
2118
}
2219

2320
EditDialog::~EditDialog()
2421
{
2522
delete ui;
23+
delete hexEdit;
2624
}
2725

2826
void EditDialog::reset()
@@ -33,32 +31,7 @@ void EditDialog::reset()
3331
ui->editorText->setFocus();
3432
ui->editorImage->clear();
3533
hexEdit->setData(QByteArray());
36-
setDataType(kSQLiteMediaType_Void, 0);
37-
}
38-
39-
void EditDialog::enableExport(bool enabled)
40-
{
41-
ui->buttonExport->setEnabled(enabled);
42-
}
43-
44-
void EditDialog::setDataType(int type, int size)
45-
{
46-
dataType = type;
47-
dataSize = size;
48-
QString charstr;
49-
switch(dataType)
50-
{
51-
case kSQLiteMediaType_String:
52-
ui->labelType->setText(tr("Type of data currently in cell: Text / Numeric"));
53-
ui->labelSize->setText(tr("%n char(s)", "", hexEdit->data().length()));
54-
enableExport(true);
55-
break;
56-
case kSQLiteMediaType_Void:
57-
ui->labelType->setText(tr("Type of data currently in cell: Empty"));
58-
ui->labelSize->setText(tr(""));
59-
enableExport(false);
60-
break;
61-
}
34+
checkDataType();
6235
}
6336

6437
void EditDialog::closeEvent(QCloseEvent*)
@@ -68,93 +41,52 @@ void EditDialog::closeEvent(QCloseEvent*)
6841

6942
void EditDialog::loadText(const QByteArray& data, int row, int col)
7043
{
71-
// Check if data is text only
72-
if(QString(data).toAscii() == data) // Any proper way??
73-
{
74-
ui->editorStack->setCurrentIndex(0);
75-
} else {
76-
// It's not. So it might be an image.
77-
QImage img;
78-
if(img.loadFromData(data))
79-
{
80-
// It is.
81-
ui->editorImage->setPixmap(QPixmap::fromImage(img));
82-
ui->editorStack->setCurrentIndex(1);
83-
} else {
84-
// It's not. So it's probably some random binary data.
85-
ui->editorStack->setCurrentIndex(2);
86-
}
87-
}
44+
curRow = row;
45+
curCol = col;
8846

8947
ui->editorText->setPlainText(data);
9048
ui->editorText->setFocus();
9149
ui->editorText->selectAll();
9250
hexEdit->setData(data);
93-
curRow = row;
94-
curCol = col;
95-
if(hexEdit->data().length() > 0)
96-
setDataType(kSQLiteMediaType_String, 0);
97-
else
98-
setDataType(kSQLiteMediaType_Void, 0);
51+
checkDataType();
9952
}
10053

10154
void EditDialog::importData()
10255
{
103-
int type = kSQLiteMediaType_Void;
10456
QString fileName = QFileDialog::getOpenFileName(
10557
this,
10658
tr("Choose a file"),
10759
defaultlocation,
10860
tr("Text files(*.txt);;All files(*)"));
10961
if(QFile::exists(fileName))
11062
{
111-
type = kSQLiteMediaType_String;
11263
QFile file(fileName);
11364
if(file.open(QIODevice::ReadOnly))
11465
{
11566
QByteArray d = file.readAll();
11667
hexEdit->setData(d);
11768
ui->editorText->setPlainText(d);
69+
checkDataType();
11870
file.close();
11971
}
120-
setDataType(type, hexEdit->data().length());
12172
}
12273
}
12374

12475
void EditDialog::exportData()
12576
{
126-
QString filter;
127-
switch (dataType)
128-
{
129-
case kSQLiteMediaType_String:
130-
filter = tr("Text files(*.txt)");
131-
break;
132-
default:
133-
return;
134-
}
135-
13677
QString fileName = QFileDialog::getSaveFileName(
13778
this,
13879
tr("Choose a filename to export data"),
13980
defaultlocation,
140-
filter);
81+
tr("Text files(*.txt);;All files(*)"));
14182

14283
if(fileName.size() > 0)
14384
{
144-
switch (dataType)
85+
QFile file(fileName);
86+
if(file.open(QIODevice::WriteOnly))
14587
{
146-
case kSQLiteMediaType_String:
147-
{
148-
QFile file(fileName);
149-
if(file.open(QIODevice::WriteOnly))
150-
{
151-
file.write(hexEdit->data());
152-
file.close();
153-
}
154-
}
155-
break;
156-
default:
157-
return;
88+
file.write(hexEdit->data());
89+
file.close();
15890
}
15991
}
16092
}
@@ -164,17 +96,12 @@ void EditDialog::clearData()
16496
ui->editorText->clear();
16597
ui->editorImage->clear();
16698
hexEdit->setData(QByteArray());
167-
setDataType(kSQLiteMediaType_Void, 0);
99+
checkDataType();
168100
}
169101

170102
void EditDialog::accept()
171103
{
172-
if(dataType == kSQLiteMediaType_String)
173-
emit updateRecordText(curRow, curCol, hexEdit->data());
174-
175-
if (dataType == kSQLiteMediaType_Void)
176-
emit updateRecordText(curRow, curCol, "");
177-
104+
emit updateRecordText(curRow, curCol, hexEdit->data());
178105
emit goingAway();
179106
}
180107

@@ -183,8 +110,35 @@ void EditDialog::editTextChanged()
183110
if(ui->editorText->hasFocus())
184111
hexEdit->setData(ui->editorText->toPlainText().toUtf8());
185112

186-
int newtype = kSQLiteMediaType_String;
187-
if(hexEdit->data().length() == 0)
188-
newtype = kSQLiteMediaType_Void;
189-
setDataType(newtype, hexEdit->data().length());
113+
checkDataType();
114+
}
115+
116+
void EditDialog::checkDataType()
117+
{
118+
// Check if data is text only
119+
if(QString(hexEdit->data()).toAscii() == hexEdit->data()) // Any proper way??
120+
{
121+
ui->editorStack->setCurrentIndex(0);
122+
123+
ui->labelType->setText(tr("Type of data currently in cell: Text / Numeric"));
124+
ui->labelSize->setText(tr("%n char(s)", "", hexEdit->data().length()));
125+
} else {
126+
// It's not. So it might be an image.
127+
QImage img;
128+
if(img.loadFromData(hexEdit->data()))
129+
{
130+
// It is.
131+
ui->editorImage->setPixmap(QPixmap::fromImage(img));
132+
ui->editorStack->setCurrentIndex(1);
133+
134+
ui->labelType->setText(tr("Type of data currently in cell: Image"));
135+
ui->labelSize->setText(tr("%1x%2 pixel").arg(ui->editorImage->pixmap()->size().width()).arg(ui->editorImage->pixmap()->size().height()));
136+
} else {
137+
// It's not. So it's probably some random binary data.
138+
ui->editorStack->setCurrentIndex(2);
139+
140+
ui->labelType->setText(tr("Type of data currently in cell: Binary"));
141+
ui->labelSize->setText(tr("%n byte(s)", "", hexEdit->data().length()));
142+
}
143+
}
190144
}

src/EditDialog.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,13 @@ public slots:
2727
virtual void loadText(const QByteArray& data, int row, int col);
2828

2929
private slots:
30-
virtual void enableExport(bool enabled);
31-
virtual void setDataType(int type, int size);
3230
virtual void closeEvent(QCloseEvent*);
3331
virtual void importData();
3432
virtual void exportData();
3533
virtual void clearData();
3634
virtual void accept();
3735
virtual void editTextChanged();
36+
virtual void checkDataType();
3837

3938
signals:
4039
void goingAway();
@@ -43,8 +42,6 @@ private slots:
4342
private:
4443
Ui::EditDialog* ui;
4544
QHexEdit* hexEdit;
46-
int dataType;
47-
int dataSize;
4845
int curCol;
4946
int curRow;
5047
};

0 commit comments

Comments
 (0)