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.
This commit is contained in:
Martin Kleusberg
2013-03-17 02:29:45 +01:00
parent b88fd9316e
commit 15f685a1eb
2 changed files with 46 additions and 95 deletions
+45 -91
View File
@@ -1,7 +1,5 @@
#include "EditDialog.h"
#include "ui_EditDialog.h"
#include <QTextStream>
#include <QMessageBox>
#include <QFileDialog>
#include "sqlitedb.h"
#include <src/qhexedit.h>
@@ -12,10 +10,9 @@ EditDialog::EditDialog(QWidget* parent)
{
ui->setupUi(this);
QHBoxLayout* hexLayout = new QHBoxLayout;
QHBoxLayout* hexLayout = new QHBoxLayout(ui->editorBinary);
hexEdit = new QHexEdit(this);
hexLayout->addWidget(hexEdit);
ui->editorBinary->setLayout(hexLayout);
reset();
}
@@ -23,6 +20,7 @@ EditDialog::EditDialog(QWidget* parent)
EditDialog::~EditDialog()
{
delete ui;
delete hexEdit;
}
void EditDialog::reset()
@@ -33,32 +31,7 @@ void EditDialog::reset()
ui->editorText->setFocus();
ui->editorImage->clear();
hexEdit->setData(QByteArray());
setDataType(kSQLiteMediaType_Void, 0);
}
void EditDialog::enableExport(bool enabled)
{
ui->buttonExport->setEnabled(enabled);
}
void EditDialog::setDataType(int type, int size)
{
dataType = type;
dataSize = size;
QString charstr;
switch(dataType)
{
case kSQLiteMediaType_String:
ui->labelType->setText(tr("Type of data currently in cell: Text / Numeric"));
ui->labelSize->setText(tr("%n char(s)", "", hexEdit->data().length()));
enableExport(true);
break;
case kSQLiteMediaType_Void:
ui->labelType->setText(tr("Type of data currently in cell: Empty"));
ui->labelSize->setText(tr(""));
enableExport(false);
break;
}
checkDataType();
}
void EditDialog::closeEvent(QCloseEvent*)
@@ -68,39 +41,18 @@ void EditDialog::closeEvent(QCloseEvent*)
void EditDialog::loadText(const QByteArray& data, int row, int col)
{
// Check if data is text only
if(QString(data).toAscii() == data) // Any proper way??
{
ui->editorStack->setCurrentIndex(0);
} else {
// It's not. So it might be an image.
QImage img;
if(img.loadFromData(data))
{
// It is.
ui->editorImage->setPixmap(QPixmap::fromImage(img));
ui->editorStack->setCurrentIndex(1);
} else {
// It's not. So it's probably some random binary data.
ui->editorStack->setCurrentIndex(2);
}
}
curRow = row;
curCol = col;
ui->editorText->setPlainText(data);
ui->editorText->setFocus();
ui->editorText->selectAll();
hexEdit->setData(data);
curRow = row;
curCol = col;
if(hexEdit->data().length() > 0)
setDataType(kSQLiteMediaType_String, 0);
else
setDataType(kSQLiteMediaType_Void, 0);
checkDataType();
}
void EditDialog::importData()
{
int type = kSQLiteMediaType_Void;
QString fileName = QFileDialog::getOpenFileName(
this,
tr("Choose a file"),
@@ -108,53 +60,33 @@ void EditDialog::importData()
tr("Text files(*.txt);;All files(*)"));
if(QFile::exists(fileName))
{
type = kSQLiteMediaType_String;
QFile file(fileName);
if(file.open(QIODevice::ReadOnly))
{
QByteArray d = file.readAll();
hexEdit->setData(d);
ui->editorText->setPlainText(d);
checkDataType();
file.close();
}
setDataType(type, hexEdit->data().length());
}
}
void EditDialog::exportData()
{
QString filter;
switch (dataType)
{
case kSQLiteMediaType_String:
filter = tr("Text files(*.txt)");
break;
default:
return;
}
QString fileName = QFileDialog::getSaveFileName(
this,
tr("Choose a filename to export data"),
defaultlocation,
filter);
tr("Text files(*.txt);;All files(*)"));
if(fileName.size() > 0)
{
switch (dataType)
QFile file(fileName);
if(file.open(QIODevice::WriteOnly))
{
case kSQLiteMediaType_String:
{
QFile file(fileName);
if(file.open(QIODevice::WriteOnly))
{
file.write(hexEdit->data());
file.close();
}
}
break;
default:
return;
file.write(hexEdit->data());
file.close();
}
}
}
@@ -164,17 +96,12 @@ void EditDialog::clearData()
ui->editorText->clear();
ui->editorImage->clear();
hexEdit->setData(QByteArray());
setDataType(kSQLiteMediaType_Void, 0);
checkDataType();
}
void EditDialog::accept()
{
if(dataType == kSQLiteMediaType_String)
emit updateRecordText(curRow, curCol, hexEdit->data());
if (dataType == kSQLiteMediaType_Void)
emit updateRecordText(curRow, curCol, "");
emit updateRecordText(curRow, curCol, hexEdit->data());
emit goingAway();
}
@@ -183,8 +110,35 @@ void EditDialog::editTextChanged()
if(ui->editorText->hasFocus())
hexEdit->setData(ui->editorText->toPlainText().toUtf8());
int newtype = kSQLiteMediaType_String;
if(hexEdit->data().length() == 0)
newtype = kSQLiteMediaType_Void;
setDataType(newtype, hexEdit->data().length());
checkDataType();
}
void EditDialog::checkDataType()
{
// Check if data is text only
if(QString(hexEdit->data()).toAscii() == hexEdit->data()) // Any proper way??
{
ui->editorStack->setCurrentIndex(0);
ui->labelType->setText(tr("Type of data currently in cell: Text / Numeric"));
ui->labelSize->setText(tr("%n char(s)", "", hexEdit->data().length()));
} else {
// It's not. So it might be an image.
QImage img;
if(img.loadFromData(hexEdit->data()))
{
// It is.
ui->editorImage->setPixmap(QPixmap::fromImage(img));
ui->editorStack->setCurrentIndex(1);
ui->labelType->setText(tr("Type of data currently in cell: Image"));
ui->labelSize->setText(tr("%1x%2 pixel").arg(ui->editorImage->pixmap()->size().width()).arg(ui->editorImage->pixmap()->size().height()));
} else {
// It's not. So it's probably some random binary data.
ui->editorStack->setCurrentIndex(2);
ui->labelType->setText(tr("Type of data currently in cell: Binary"));
ui->labelSize->setText(tr("%n byte(s)", "", hexEdit->data().length()));
}
}
}
+1 -4
View File
@@ -27,14 +27,13 @@ public slots:
virtual void loadText(const QByteArray& data, int row, int col);
private slots:
virtual void enableExport(bool enabled);
virtual void setDataType(int type, int size);
virtual void closeEvent(QCloseEvent*);
virtual void importData();
virtual void exportData();
virtual void clearData();
virtual void accept();
virtual void editTextChanged();
virtual void checkDataType();
signals:
void goingAway();
@@ -43,8 +42,6 @@ signals:
private:
Ui::EditDialog* ui;
QHexEdit* hexEdit;
int dataType;
int dataSize;
int curCol;
int curRow;
};