Move filter header from window to table widget and show sort indicators

Move the FilterTableHeader object from the MainWindow to the
ExtendedTableWidget class because it actually is a part of the latter,
not the former.

Show sort order arrows in the table header of the Browse Data tab after
clicking it.
This commit is contained in:
Martin Kleusberg
2014-05-25 14:35:56 +02:00
parent 80d5c1a117
commit 297bfbce0a
6 changed files with 19 additions and 10 deletions

View File

@@ -1,5 +1,6 @@
#include "ExtendedTableWidget.h"
#include "sqlitetablemodel.h"
#include "FilterTableHeader.h"
#include <QApplication>
#include <QClipboard>
@@ -14,6 +15,10 @@ ExtendedTableWidget::ExtendedTableWidget(QWidget* parent) :
setHorizontalScrollMode(ExtendedTableWidget::ScrollPerPixel);
connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(vscrollbarChanged(int)));
// Set up filter row
m_tableHeader = new FilterTableHeader(this);
setHorizontalHeader(m_tableHeader);
}
void ExtendedTableWidget::copy()

View File

@@ -2,6 +2,7 @@
#define __EXTENDEDTABLEWIDGET_H__
#include <QTableView>
#include "FilterTableHeader.h"
class ExtendedTableWidget : public QTableView
{
@@ -10,6 +11,8 @@ class ExtendedTableWidget : public QTableView
public:
explicit ExtendedTableWidget(QWidget* parent = 0);
FilterTableHeader* filterHeader() { return m_tableHeader; }
private:
void copy();
int numVisibleRows();
@@ -20,6 +23,8 @@ private slots:
protected:
virtual void keyPressEvent(QKeyEvent* event);
virtual void updateGeometries();
FilterTableHeader* m_tableHeader;
};
#endif

View File

@@ -14,6 +14,8 @@ FilterTableHeader::FilterTableHeader(QTableView* parent) :
setClickable(true);
#endif
setSortIndicatorShown(true);
// Do some connects: Basically just resize and reposition the input widgets whenever anything changes
connect(this, SIGNAL(sectionResized(int,int,int)), this, SLOT(adjustPositions()));
connect(parent->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(adjustPositions()));

View File

@@ -11,7 +11,6 @@
#include "SQLiteSyntaxHighlighter.h"
#include "sqltextedit.h"
#include "sqlitetablemodel.h"
#include "FilterTableHeader.h"
#include "SqlExecutionArea.h"
#include "VacuumDialog.h"
#include "DbStructureModel.h"
@@ -78,10 +77,6 @@ void MainWindow::init()
ui->dbTreeWidget->setColumnHidden(1, true);
ui->dbTreeWidget->setColumnWidth(0, 300);
// Set up filter row
m_tableHeader = new FilterTableHeader(ui->dataTable);
ui->dataTable->setHorizontalHeader(m_tableHeader);
// Create the actions for the recently opened dbs list
for(int i = 0; i < MaxRecentFiles; ++i) {
recentFileActs[i] = new QAction(this);
@@ -118,8 +113,8 @@ void MainWindow::init()
ui->statusbar->addPermanentWidget(statusEncodingLabel);
// Connect some more signals and slots
connect(m_tableHeader, SIGNAL(filterChanged(int,QString)), this, SLOT(setRecordsetLabel()));
connect(m_tableHeader, SIGNAL(sectionClicked(int)), this, SLOT(browseTableHeaderClicked(int)));
connect(ui->dataTable->filterHeader(), SIGNAL(filterChanged(int,QString)), this, SLOT(setRecordsetLabel()));
connect(ui->dataTable->filterHeader(), SIGNAL(sectionClicked(int)), this, SLOT(browseTableHeaderClicked(int)));
connect(ui->dataTable->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(setRecordsetLabel()));
connect(editWin, SIGNAL(goingAway()), this, SLOT(editWinAway()));
connect(editWin, SIGNAL(updateRecordText(int, int, QByteArray)), this, SLOT(updateRecordText(int, int, QByteArray)));
@@ -302,6 +297,7 @@ void MainWindow::populateTable( const QString & tablename)
curBrowseOrderByIndex = 0;
curBrowseOrderByMode = Qt::AscendingOrder;
m_browseTableModel->sort(curBrowseOrderByIndex, curBrowseOrderByMode);
ui->dataTable->filterHeader()->setSortIndicator(curBrowseOrderByIndex, curBrowseOrderByMode);
// Update the filter row
qobject_cast<FilterTableHeader*>(ui->dataTable->horizontalHeader())->generateFilters(m_browseTableModel->columnCount());
@@ -369,7 +365,7 @@ void MainWindow::fileClose()
// Delete the model for the Browse tab and create a new one
delete m_browseTableModel;
m_browseTableModel = new SqliteTableModel(this, &db, PreferencesDialog::getSettingsValue("db", "prefetchsize").toInt());
connect(m_tableHeader, SIGNAL(filterChanged(int,QString)), m_browseTableModel, SLOT(updateFilter(int,QString)));
connect(ui->dataTable->filterHeader(), SIGNAL(filterChanged(int,QString)), m_browseTableModel, SLOT(updateFilter(int,QString)));
// Manually update the recordset label inside the Browse tab now
setRecordsetLabel();

View File

@@ -19,7 +19,6 @@ class DbStructureModel;
class QNetworkReply;
class QNetworkAccessManager;
class QTreeWidgetItem;
class FilterTableHeader;
namespace Ui {
class MainWindow;
@@ -69,7 +68,6 @@ private:
SqliteTableModel* m_browseTableModel;
SqliteTableModel* m_currentPlotModel;
FilterTableHeader* m_tableHeader;
QMenu *popupTableMenu;
QMenu *recentFilesMenu;

View File

@@ -174,6 +174,9 @@
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<attribute name="horizontalHeaderShowSortIndicator" stdset="0">
<bool>true</bool>
</attribute>
</widget>
</item>
<item>