Invoking Port Filter Dialog will now always show selected list in the same order as in the port stats window before invocation
This commit is contained in:
parent
37711fdd5c
commit
e2a4431418
@ -24,7 +24,8 @@ PortStatsFilterDialog::PortStatsFilterDialog(QWidget *parent)
|
|||||||
{
|
{
|
||||||
setupUi(this);
|
setupUi(this);
|
||||||
|
|
||||||
mUnselected.setSortRole(PositionRole);
|
mUnselected.setSortRole(kLogicalIndex);
|
||||||
|
mSelected.setSortRole(kVisualIndex);
|
||||||
|
|
||||||
lvUnselected->setModel(&mUnselected);
|
lvUnselected->setModel(&mUnselected);
|
||||||
lvSelected->setModel(&mSelected);
|
lvSelected->setModel(&mSelected);
|
||||||
@ -49,7 +50,8 @@ QList<uint> PortStatsFilterDialog::getItemList(bool* ok,
|
|||||||
QStandardItem *item;
|
QStandardItem *item;
|
||||||
|
|
||||||
item = new QStandardItem(model->headerData(i, orientation).toString());
|
item = new QStandardItem(model->headerData(i, orientation).toString());
|
||||||
item->setData(i, PositionRole);
|
item->setData(i, kLogicalIndex);
|
||||||
|
item->setData(initial.indexOf(i), kVisualIndex);
|
||||||
item->setFlags(Qt::ItemIsSelectable
|
item->setFlags(Qt::ItemIsSelectable
|
||||||
| Qt::ItemIsDragEnabled
|
| Qt::ItemIsDragEnabled
|
||||||
//| Qt::ItemIsDropEnabled
|
//| Qt::ItemIsDropEnabled
|
||||||
@ -60,6 +62,7 @@ QList<uint> PortStatsFilterDialog::getItemList(bool* ok,
|
|||||||
else
|
else
|
||||||
mUnselected.appendRow(item);
|
mUnselected.appendRow(item);
|
||||||
}
|
}
|
||||||
|
mSelected.sort(0);
|
||||||
|
|
||||||
// No need to sort right now 'coz we have inserted items in order
|
// No need to sort right now 'coz we have inserted items in order
|
||||||
|
|
||||||
@ -70,7 +73,7 @@ QList<uint> PortStatsFilterDialog::getItemList(bool* ok,
|
|||||||
{
|
{
|
||||||
QModelIndex index = mSelected.index(i, 0, QModelIndex());
|
QModelIndex index = mSelected.index(i, 0, QModelIndex());
|
||||||
QStandardItem *item = mSelected.itemFromIndex(index);
|
QStandardItem *item = mSelected.itemFromIndex(index);
|
||||||
ret.append(item->data(PositionRole).toInt());
|
ret.append(item->data(kLogicalIndex).toInt());
|
||||||
}
|
}
|
||||||
*ok = true;
|
*ok = true;
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,8 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
enum ItemRole {
|
enum ItemRole {
|
||||||
PositionRole = Qt::UserRole + 1
|
kLogicalIndex = Qt::UserRole + 1,
|
||||||
|
kVisualIndex
|
||||||
};
|
};
|
||||||
QStandardItemModel mUnselected;
|
QStandardItemModel mUnselected;
|
||||||
QStandardItemModel mSelected;
|
QStandardItemModel mSelected;
|
||||||
|
@ -158,23 +158,29 @@ void PortStatsWindow::on_tbFilter_clicked()
|
|||||||
QList<uint> currentColumns, newColumns;
|
QList<uint> currentColumns, newColumns;
|
||||||
PortStatsFilterDialog dialog;
|
PortStatsFilterDialog dialog;
|
||||||
|
|
||||||
for(int i = 0; i < model->columnCount(); i++)
|
// create the input list for the filter dialog -
|
||||||
if (!tvPortStats->isColumnHidden(i))
|
// list of logical-indexes ordered by their current visual indexes
|
||||||
currentColumns.append(i);
|
for(int vi = 0; vi < model->columnCount(); vi++) {
|
||||||
|
int li = tvPortStats->horizontalHeader()->logicalIndex(vi);
|
||||||
|
if (!tvPortStats->isColumnHidden(li)) {
|
||||||
|
currentColumns.append(li);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// return list from the filter dialog -
|
||||||
|
// list of logical-indexes ordered by their new visual indexes
|
||||||
newColumns = dialog.getItemList(&ok, model, Qt::Horizontal, currentColumns);
|
newColumns = dialog.getItemList(&ok, model, Qt::Horizontal, currentColumns);
|
||||||
|
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
|
QHeaderView *hv = tvPortStats->horizontalHeader();
|
||||||
|
|
||||||
// hide/show sections first ...
|
// hide/show sections first ...
|
||||||
for(int i = 0; i < model->columnCount(); i++)
|
for(int li = 0; li < model->columnCount(); li++)
|
||||||
tvPortStats->setColumnHidden(i, !newColumns.contains(i));
|
tvPortStats->setColumnHidden(li, !newColumns.contains(li));
|
||||||
|
|
||||||
// ... then for the 'shown' columns, set the visual index
|
// ... then for the 'shown' columns, set the visual index
|
||||||
for(int i = 0; i < newColumns.size(); i++)
|
for(int vi = 0; vi < newColumns.size(); vi++)
|
||||||
{
|
hv->moveSection(hv->visualIndex(newColumns.at(vi)), vi);
|
||||||
tvPortStats->horizontalHeader()->moveSection(tvPortStats->
|
|
||||||
horizontalHeader()->visualIndex(newColumns.at(i)), i);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user