GUI: remove sorting related functionality from AbstractTableView
This commit is contained in:
parent
ae5bb70203
commit
83005bdcda
|
@ -1009,10 +1009,9 @@ int AbstractTableView::getLineToPrintcount()
|
||||||
*
|
*
|
||||||
* @param[in] width Width of the column in pixel
|
* @param[in] width Width of the column in pixel
|
||||||
* @param[in] isClickable Boolean that tells whether the header is clickable or not
|
* @param[in] isClickable Boolean that tells whether the header is clickable or not
|
||||||
* @param[in] sortFn The sort function to use for this column. Defaults to case insensitve text search
|
|
||||||
* @return Nothing.
|
* @return Nothing.
|
||||||
*/
|
*/
|
||||||
void AbstractTableView::addColumnAt(int width, const QString & title, bool isClickable, SortBy::t sortFn)
|
void AbstractTableView::addColumnAt(int width, const QString & title, bool isClickable)
|
||||||
{
|
{
|
||||||
HeaderButton_t wHeaderButton;
|
HeaderButton_t wHeaderButton;
|
||||||
Column_t wColumn;
|
Column_t wColumn;
|
||||||
|
@ -1030,7 +1029,6 @@ void AbstractTableView::addColumnAt(int width, const QString & title, bool isCli
|
||||||
wColumn.width = width;
|
wColumn.width = width;
|
||||||
wColumn.hidden = false;
|
wColumn.hidden = false;
|
||||||
wColumn.title = title;
|
wColumn.title = title;
|
||||||
wColumn.sortFunction = sortFn;
|
|
||||||
wCurrentCount = mColumnList.length();
|
wCurrentCount = mColumnList.length();
|
||||||
mColumnList.append(wColumn);
|
mColumnList.append(wColumn);
|
||||||
mColumnOrder.append(wCurrentCount);
|
mColumnOrder.append(wCurrentCount);
|
||||||
|
@ -1104,13 +1102,6 @@ bool AbstractTableView::getColumnHidden(int col)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AbstractTableView::SortBy::t AbstractTableView::getColumnSortBy(int col) const
|
|
||||||
{
|
|
||||||
if(col < getColumnCount() && col >= 0)
|
|
||||||
return mColumnList[col].sortFunction;
|
|
||||||
return SortBy::AsText;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AbstractTableView::setColumnHidden(int col, bool hidden)
|
void AbstractTableView::setColumnHidden(int col, bool hidden)
|
||||||
{
|
{
|
||||||
if(col < getColumnCount() && col >= 0)
|
if(col < getColumnCount() && col >= 0)
|
||||||
|
@ -1254,31 +1245,3 @@ void AbstractTableView::prepareData()
|
||||||
dsint wRemainingRowsCount = getRowCount() - mTableOffset;
|
dsint wRemainingRowsCount = getRowCount() - mTableOffset;
|
||||||
mNbrOfLineToPrint = (dsint)wRemainingRowsCount > (dsint)wViewableRowsCount ? (int)wViewableRowsCount : (int)wRemainingRowsCount;
|
mNbrOfLineToPrint = (dsint)wRemainingRowsCount > (dsint)wViewableRowsCount ? (int)wViewableRowsCount : (int)wRemainingRowsCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AbstractTableView::SortBy::AsText(const QString & a, const QString & b)
|
|
||||||
{
|
|
||||||
auto i = QString::compare(a, b);
|
|
||||||
if(i < 0)
|
|
||||||
return true;
|
|
||||||
if(i > 0)
|
|
||||||
return false;
|
|
||||||
return duint(&a) < duint(&b);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool AbstractTableView::SortBy::AsInt(const QString & a, const QString & b)
|
|
||||||
{
|
|
||||||
if(a.toLongLong() < b.toLongLong())
|
|
||||||
return true;
|
|
||||||
if(a.toLongLong() > b.toLongLong())
|
|
||||||
return false;
|
|
||||||
return duint(&a) < duint(&b);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool AbstractTableView::SortBy::AsHex(const QString & a, const QString & b)
|
|
||||||
{
|
|
||||||
if(a.toLongLong(0, 16) < b.toLongLong(0, 16))
|
|
||||||
return true;
|
|
||||||
if(a.toLongLong(0, 16) > b.toLongLong(0, 16))
|
|
||||||
return false;
|
|
||||||
return duint(&a) < duint(&b);
|
|
||||||
}
|
|
||||||
|
|
|
@ -73,16 +73,8 @@ public:
|
||||||
int getViewableRowsCount();
|
int getViewableRowsCount();
|
||||||
virtual int getLineToPrintcount();
|
virtual int getLineToPrintcount();
|
||||||
|
|
||||||
struct SortBy
|
|
||||||
{
|
|
||||||
typedef std::function<bool(const QString &, const QString &)> t;
|
|
||||||
static bool AsText(const QString & a, const QString & b);
|
|
||||||
static bool AsInt(const QString & a, const QString & b);
|
|
||||||
static bool AsHex(const QString & a, const QString & b);
|
|
||||||
};
|
|
||||||
|
|
||||||
// New Columns/New Size
|
// New Columns/New Size
|
||||||
virtual void addColumnAt(int width, const QString & title, bool isClickable, SortBy::t sortFn = SortBy::AsText);
|
virtual void addColumnAt(int width, const QString & title, bool isClickable);
|
||||||
virtual void setRowCount(dsint count);
|
virtual void setRowCount(dsint count);
|
||||||
virtual void deleteAllColumns();
|
virtual void deleteAllColumns();
|
||||||
void setColTitle(int index, const QString & title);
|
void setColTitle(int index, const QString & title);
|
||||||
|
@ -105,7 +97,6 @@ public:
|
||||||
int getCharWidth();
|
int getCharWidth();
|
||||||
bool getColumnHidden(int col);
|
bool getColumnHidden(int col);
|
||||||
void setColumnHidden(int col, bool hidden);
|
void setColumnHidden(int col, bool hidden);
|
||||||
SortBy::t getColumnSortBy(int idx) const;
|
|
||||||
|
|
||||||
// UI customization
|
// UI customization
|
||||||
void loadColumnFromConfig(const QString & viewName);
|
void loadColumnFromConfig(const QString & viewName);
|
||||||
|
@ -166,7 +157,6 @@ private:
|
||||||
bool hidden;
|
bool hidden;
|
||||||
HeaderButton_t header;
|
HeaderButton_t header;
|
||||||
QString title;
|
QString title;
|
||||||
SortBy::t sortFunction;
|
|
||||||
} Column_t;
|
} Column_t;
|
||||||
|
|
||||||
typedef struct _Header_t
|
typedef struct _Header_t
|
||||||
|
|
|
@ -411,12 +411,43 @@ bool StdTable::scrollSelect(int offset)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
Sorting
|
||||||
|
************************************************************************************/
|
||||||
|
bool StdTable::SortBy::AsText(const QString & a, const QString & b)
|
||||||
|
{
|
||||||
|
auto i = QString::compare(a, b);
|
||||||
|
if(i < 0)
|
||||||
|
return true;
|
||||||
|
if(i > 0)
|
||||||
|
return false;
|
||||||
|
return duint(&a) < duint(&b);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool StdTable::SortBy::AsInt(const QString & a, const QString & b)
|
||||||
|
{
|
||||||
|
if(a.toLongLong() < b.toLongLong())
|
||||||
|
return true;
|
||||||
|
if(a.toLongLong() > b.toLongLong())
|
||||||
|
return false;
|
||||||
|
return duint(&a) < duint(&b);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool StdTable::SortBy::AsHex(const QString & a, const QString & b)
|
||||||
|
{
|
||||||
|
if(a.toLongLong(0, 16) < b.toLongLong(0, 16))
|
||||||
|
return true;
|
||||||
|
if(a.toLongLong(0, 16) > b.toLongLong(0, 16))
|
||||||
|
return false;
|
||||||
|
return duint(&a) < duint(&b);
|
||||||
|
}
|
||||||
|
|
||||||
/************************************************************************************
|
/************************************************************************************
|
||||||
Data Management
|
Data Management
|
||||||
************************************************************************************/
|
************************************************************************************/
|
||||||
void StdTable::addColumnAt(int width, QString title, bool isClickable, QString copyTitle, SortBy::t sortFn)
|
void StdTable::addColumnAt(int width, QString title, bool isClickable, QString copyTitle, SortBy::t sortFn)
|
||||||
{
|
{
|
||||||
AbstractTableView::addColumnAt(width, title, isClickable, sortFn);
|
AbstractTableView::addColumnAt(width, title, isClickable);
|
||||||
|
|
||||||
//append empty column to list of rows
|
//append empty column to list of rows
|
||||||
for(size_t i = 0; i < mData.size(); i++)
|
for(size_t i = 0; i < mData.size(); i++)
|
||||||
|
@ -427,9 +458,20 @@ void StdTable::addColumnAt(int width, QString title, bool isClickable, QString c
|
||||||
mCopyTitles.push_back(title);
|
mCopyTitles.push_back(title);
|
||||||
else
|
else
|
||||||
mCopyTitles.push_back(copyTitle);
|
mCopyTitles.push_back(copyTitle);
|
||||||
|
|
||||||
|
//append column sort function
|
||||||
|
mColumnSortFunctions.push_back(sortFn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StdTable::setRowCount(int count)
|
void StdTable::deleteAllColumns()
|
||||||
|
{
|
||||||
|
setRowCount(0);
|
||||||
|
AbstractTableView::deleteAllColumns();
|
||||||
|
mCopyTitles.clear();
|
||||||
|
mColumnSortFunctions.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void StdTable::setRowCount(dsint count)
|
||||||
{
|
{
|
||||||
int wRowToAddOrRemove = count - int(mData.size());
|
int wRowToAddOrRemove = count - int(mData.size());
|
||||||
for(int i = 0; i < qAbs(wRowToAddOrRemove); i++)
|
for(int i = 0; i < qAbs(wRowToAddOrRemove); i++)
|
||||||
|
@ -446,13 +488,6 @@ void StdTable::setRowCount(int count)
|
||||||
AbstractTableView::setRowCount(count);
|
AbstractTableView::setRowCount(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StdTable::deleteAllColumns()
|
|
||||||
{
|
|
||||||
setRowCount(0);
|
|
||||||
AbstractTableView::deleteAllColumns();
|
|
||||||
mCopyTitles.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void StdTable::setCellContent(int r, int c, QString s)
|
void StdTable::setCellContent(int r, int c, QString s)
|
||||||
{
|
{
|
||||||
if(isValidIndex(r, c))
|
if(isValidIndex(r, c))
|
||||||
|
@ -776,7 +811,7 @@ void StdTable::reloadData()
|
||||||
{
|
{
|
||||||
if(mSort.first != -1) //re-sort if the user wants to sort
|
if(mSort.first != -1) //re-sort if the user wants to sort
|
||||||
{
|
{
|
||||||
auto sortFn = getColumnSortBy(mSort.first);
|
auto sortFn = mColumnSortFunctions.at(mSort.first);
|
||||||
std::stable_sort(mData.begin(), mData.end(), [this, &sortFn](const std::vector<CellData> & a, const std::vector<CellData> & b)
|
std::stable_sort(mData.begin(), mData.end(), [this, &sortFn](const std::vector<CellData> & a, const std::vector<CellData> & b)
|
||||||
{
|
{
|
||||||
auto less = sortFn(a.at(mSort.first).text, b.at(mSort.first).text);
|
auto less = sortFn(a.at(mSort.first).text, b.at(mSort.first).text);
|
||||||
|
|
|
@ -11,11 +11,11 @@ public:
|
||||||
QString paintContent(QPainter* painter, dsint rowBase, int rowOffset, int col, int x, int y, int w, int h);
|
QString paintContent(QPainter* painter, dsint rowBase, int rowOffset, int col, int x, int y, int w, int h);
|
||||||
void reloadData();
|
void reloadData();
|
||||||
|
|
||||||
void mouseMoveEvent(QMouseEvent* event);
|
void mouseMoveEvent(QMouseEvent* event) override;
|
||||||
void mousePressEvent(QMouseEvent* event);
|
void mousePressEvent(QMouseEvent* event) override;
|
||||||
void mouseDoubleClickEvent(QMouseEvent* event);
|
void mouseDoubleClickEvent(QMouseEvent* event) override;
|
||||||
void mouseReleaseEvent(QMouseEvent* event);
|
void mouseReleaseEvent(QMouseEvent* event) override;
|
||||||
void keyPressEvent(QKeyEvent* event);
|
void keyPressEvent(QKeyEvent* event) override;
|
||||||
|
|
||||||
void enableMultiSelection(bool enabled);
|
void enableMultiSelection(bool enabled);
|
||||||
void enableColumnSorting(bool enabled);
|
void enableColumnSorting(bool enabled);
|
||||||
|
@ -37,10 +37,19 @@ public:
|
||||||
bool isSelected(int base, int offset);
|
bool isSelected(int base, int offset);
|
||||||
bool scrollSelect(int offset);
|
bool scrollSelect(int offset);
|
||||||
|
|
||||||
|
// Sorting
|
||||||
|
struct SortBy
|
||||||
|
{
|
||||||
|
typedef std::function<bool(const QString &, const QString &)> t;
|
||||||
|
static bool AsText(const QString & a, const QString & b);
|
||||||
|
static bool AsInt(const QString & a, const QString & b);
|
||||||
|
static bool AsHex(const QString & a, const QString & b);
|
||||||
|
};
|
||||||
|
|
||||||
// Data Management
|
// Data Management
|
||||||
void addColumnAt(int width, QString title, bool isClickable, QString copyTitle = "", SortBy::t sortFn = SortBy::AsText);
|
void addColumnAt(int width, QString title, bool isClickable, QString copyTitle = "", SortBy::t sortFn = SortBy::AsText);
|
||||||
void setRowCount(int count);
|
void deleteAllColumns() override;
|
||||||
void deleteAllColumns();
|
void setRowCount(dsint count) override;
|
||||||
void setCellContent(int r, int c, QString s);
|
void setCellContent(int r, int c, QString s);
|
||||||
QString getCellContent(int r, int c);
|
QString getCellContent(int r, int c);
|
||||||
void setCellUserdata(int r, int c, duint userdata);
|
void setCellUserdata(int r, int c, duint userdata);
|
||||||
|
@ -120,6 +129,7 @@ protected:
|
||||||
bool mIsColumnSortingAllowed;
|
bool mIsColumnSortingAllowed;
|
||||||
|
|
||||||
std::vector<std::vector<CellData>> mData; //listof(row) where row = (listof(col) where col = string)
|
std::vector<std::vector<CellData>> mData; //listof(row) where row = (listof(col) where col = string)
|
||||||
|
std::vector<SortBy::t> mColumnSortFunctions;
|
||||||
std::vector<QString> mCopyTitles;
|
std::vector<QString> mCopyTitles;
|
||||||
QPair<int, bool> mSort;
|
QPair<int, bool> mSort;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue