add strategy support to sqlbrowser example
Several useful options added to context menu. Also added yellow background for unsubmitted changes. Change-Id: I132cd4498a5fb7275ea10c0497910aba99c06a2b Reviewed-by: Honglei Zhang <honglei.zhang@nokia.com> Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
This commit is contained in:
parent
698e620aad
commit
e999ca25c6
@ -52,6 +52,12 @@ Browser::Browser(QWidget *parent)
|
||||
|
||||
table->addAction(insertRowAction);
|
||||
table->addAction(deleteRowAction);
|
||||
table->addAction(fieldStrategyAction);
|
||||
table->addAction(rowStrategyAction);
|
||||
table->addAction(manualStrategyAction);
|
||||
table->addAction(submitAction);
|
||||
table->addAction(revertAction);
|
||||
table->addAction(selectAction);
|
||||
|
||||
if (QSqlDatabase::drivers().isEmpty())
|
||||
QMessageBox::information(this, tr("No database drivers found"),
|
||||
@ -144,7 +150,7 @@ void Browser::addConnection()
|
||||
|
||||
void Browser::showTable(const QString &t)
|
||||
{
|
||||
QSqlTableModel *model = new QSqlTableModel(table, connectionWidget->currentDatabase());
|
||||
QSqlTableModel *model = new CustomModel(table, connectionWidget->currentDatabase());
|
||||
model->setEditStrategy(QSqlTableModel::OnRowChange);
|
||||
model->setTable(connectionWidget->currentDatabase().driver()->escapeIdentifier(t, QSqlDriver::TableName));
|
||||
model->select();
|
||||
@ -215,8 +221,6 @@ void Browser::deleteRow()
|
||||
if (!model)
|
||||
return;
|
||||
|
||||
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
|
||||
|
||||
QModelIndexList currentSelection = table->selectionModel()->selectedIndexes();
|
||||
for (int i = 0; i < currentSelection.count(); ++i) {
|
||||
if (currentSelection.at(i).column() != 0)
|
||||
@ -224,19 +228,31 @@ void Browser::deleteRow()
|
||||
model->removeRow(currentSelection.at(i).row());
|
||||
}
|
||||
|
||||
model->submitAll();
|
||||
model->setEditStrategy(QSqlTableModel::OnRowChange);
|
||||
|
||||
updateActions();
|
||||
}
|
||||
|
||||
void Browser::updateActions()
|
||||
{
|
||||
bool enableIns = qobject_cast<QSqlTableModel *>(table->model());
|
||||
QSqlTableModel * tm = qobject_cast<QSqlTableModel *>(table->model());
|
||||
bool enableIns = tm;
|
||||
bool enableDel = enableIns && table->currentIndex().isValid();
|
||||
|
||||
insertRowAction->setEnabled(enableIns);
|
||||
deleteRowAction->setEnabled(enableDel);
|
||||
|
||||
fieldStrategyAction->setEnabled(tm);
|
||||
rowStrategyAction->setEnabled(tm);
|
||||
manualStrategyAction->setEnabled(tm);
|
||||
submitAction->setEnabled(tm);
|
||||
revertAction->setEnabled(tm);
|
||||
selectAction->setEnabled(tm);
|
||||
|
||||
if (tm) {
|
||||
QSqlTableModel::EditStrategy es = tm->editStrategy();
|
||||
fieldStrategyAction->setChecked(es == QSqlTableModel::OnFieldChange);
|
||||
rowStrategyAction->setChecked(es == QSqlTableModel::OnRowChange);
|
||||
manualStrategyAction->setChecked(es == QSqlTableModel::OnManualSubmit);
|
||||
}
|
||||
}
|
||||
|
||||
void Browser::about()
|
||||
@ -245,3 +261,46 @@ void Browser::about()
|
||||
"shows how a data browser can be used to visualize the results of SQL"
|
||||
"statements on a live database"));
|
||||
}
|
||||
|
||||
void Browser::on_fieldStrategyAction_triggered()
|
||||
{
|
||||
QSqlTableModel * tm = qobject_cast<QSqlTableModel *>(table->model());
|
||||
if (tm)
|
||||
tm->setEditStrategy(QSqlTableModel::OnFieldChange);
|
||||
}
|
||||
|
||||
void Browser::on_rowStrategyAction_triggered()
|
||||
{
|
||||
QSqlTableModel * tm = qobject_cast<QSqlTableModel *>(table->model());
|
||||
if (tm)
|
||||
tm->setEditStrategy(QSqlTableModel::OnRowChange);
|
||||
}
|
||||
|
||||
void Browser::on_manualStrategyAction_triggered()
|
||||
{
|
||||
QSqlTableModel * tm = qobject_cast<QSqlTableModel *>(table->model());
|
||||
if (tm)
|
||||
tm->setEditStrategy(QSqlTableModel::OnManualSubmit);
|
||||
}
|
||||
|
||||
void Browser::on_submitAction_triggered()
|
||||
{
|
||||
QSqlTableModel * tm = qobject_cast<QSqlTableModel *>(table->model());
|
||||
if (tm)
|
||||
tm->submitAll();
|
||||
}
|
||||
|
||||
void Browser::on_revertAction_triggered()
|
||||
{
|
||||
QSqlTableModel * tm = qobject_cast<QSqlTableModel *>(table->model());
|
||||
if (tm)
|
||||
tm->revertAll();
|
||||
}
|
||||
|
||||
void Browser::on_selectAction_triggered()
|
||||
{
|
||||
QSqlTableModel * tm = qobject_cast<QSqlTableModel *>(table->model());
|
||||
if (tm)
|
||||
tm->select();
|
||||
}
|
||||
|
||||
|
@ -43,6 +43,7 @@
|
||||
#define BROWSER_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QSqlTableModel>
|
||||
#include "ui_browserwidget.h"
|
||||
|
||||
class ConnectionWidget;
|
||||
@ -77,6 +78,12 @@ public slots:
|
||||
{ insertRow(); }
|
||||
void on_deleteRowAction_triggered()
|
||||
{ deleteRow(); }
|
||||
void on_fieldStrategyAction_triggered();
|
||||
void on_rowStrategyAction_triggered();
|
||||
void on_manualStrategyAction_triggered();
|
||||
void on_submitAction_triggered();
|
||||
void on_revertAction_triggered();
|
||||
void on_selectAction_triggered();
|
||||
void on_connectionWidget_tableActivated(const QString &table)
|
||||
{ showTable(table); }
|
||||
void on_connectionWidget_metaDataRequested(const QString &table)
|
||||
@ -96,4 +103,17 @@ signals:
|
||||
void statusMessage(const QString &message);
|
||||
};
|
||||
|
||||
class CustomModel: public QSqlTableModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
CustomModel(QObject *parent = 0, QSqlDatabase db = QSqlDatabase()):QSqlTableModel(parent, db) {}
|
||||
QVariant data(const QModelIndex &idx, int role) const
|
||||
{
|
||||
if (role == Qt::BackgroundRole && isDirty(idx))
|
||||
return QBrush(QColor(Qt::yellow));
|
||||
return QSqlTableModel::data(idx, role);
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -1,7 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<author></author>
|
||||
<comment></comment>
|
||||
<exportmacro></exportmacro>
|
||||
<class>Browser</class>
|
||||
<widget class="QWidget" name="Browser">
|
||||
<property name="geometry">
|
||||
@ -16,18 +14,16 @@
|
||||
<string>Qt SQL Browser</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout">
|
||||
<property name="margin" >
|
||||
<number>8</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>8</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter_2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy>
|
||||
<hsizetype>7</hsizetype>
|
||||
<vsizetype>7</vsizetype>
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
@ -37,9 +33,7 @@
|
||||
</property>
|
||||
<widget class="ConnectionWidget" name="connectionWidget">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy>
|
||||
<hsizetype>13</hsizetype>
|
||||
<vsizetype>7</vsizetype>
|
||||
<sizepolicy hsizetype="Ignored" vsizetype="Expanding">
|
||||
<horstretch>1</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
@ -47,9 +41,7 @@
|
||||
</widget>
|
||||
<widget class="QTableView" name="table">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy>
|
||||
<hsizetype>7</hsizetype>
|
||||
<vsizetype>7</vsizetype>
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>2</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
@ -66,9 +58,7 @@
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy>
|
||||
<hsizetype>5</hsizetype>
|
||||
<vsizetype>3</vsizetype>
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
@ -83,18 +73,16 @@
|
||||
<string>SQL Query</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout">
|
||||
<property name="margin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QTextEdit" name="sqlEdit">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy>
|
||||
<hsizetype>7</hsizetype>
|
||||
<vsizetype>3</vsizetype>
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
@ -115,18 +103,18 @@
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout">
|
||||
<property name="margin" >
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<item>
|
||||
<spacer>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" >
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
@ -176,15 +164,69 @@
|
||||
<string>Deletes the current Row</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="fieldStrategyAction">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Submit on &Field Change</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Commit on Field Change</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="rowStrategyAction">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Submit on &Row Change</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Commit on Row Change</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="manualStrategyAction">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Submit &Manually</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Commit Manually</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="submitAction">
|
||||
<property name="text">
|
||||
<string>&Submit All</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Submit Changes</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="revertAction">
|
||||
<property name="text">
|
||||
<string>&Revert All</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Revert</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="selectAction">
|
||||
<property name="text">
|
||||
<string>S&elect</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Refresh Data from Database</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<pixmapfunction></pixmapfunction>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>ConnectionWidget</class>
|
||||
<extends>QTreeView</extends>
|
||||
<header>connectionwidget.h</header>
|
||||
<container>0</container>
|
||||
<pixmap></pixmap>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
|
Loading…
x
Reference in New Issue
Block a user