mirror of
https://github.com/sqlitebrowser/sqlitebrowser.git
synced 2026-05-05 03:19:21 -05:00
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:
+45
-91
@@ -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
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user