namespace decoder_selector {
+void QCustomTreeView::currentChanged(const QModelIndex& current,
+ const QModelIndex& previous)
+{
+ QTreeView::currentChanged(current, previous);
+ currentChanged(current);
+}
+
+
SubWindow::SubWindow(Session& session, QWidget* parent) :
SubWindowBase(session, parent),
splitter_(new QSplitter()),
- tree_view_(new QTreeView()),
+ tree_view_(new QCustomTreeView()),
info_box_(new QWidget()),
info_label_header_(new QLabel()),
info_label_body_(new QLabel()),
info_label_footer_(new QLabel()),
- model_(new DecoderCollectionModel())
+ model_(new DecoderCollectionModel()),
+ sort_filter_model_(new QSortFilterProxyModel())
{
QVBoxLayout* root_layout = new QVBoxLayout(this);
root_layout->setContentsMargins(0, 0, 0, 0);
splitter_->addWidget(tree_view_);
splitter_->addWidget(info_box_);
- tree_view_->setModel(model_);
+ sort_filter_model_->setSourceModel(model_);
+
+ tree_view_->setModel(sort_filter_model_);
tree_view_->setRootIsDecorated(true);
+ tree_view_->setSortingEnabled(true);
+ tree_view_->sortByColumn(0, Qt::AscendingOrder);
// Hide the columns that hold the detailed item information
tree_view_->hideColumn(2); // ID
info_label_body_->setWordWrap(true);
info_label_body_->setText(tr("Select a decoder to see its description here."));
- connect(tree_view_, SIGNAL(clicked(const QModelIndex&)),
- this, SLOT(on_item_clicked(const QModelIndex&)));
- connect(tree_view_, SIGNAL(doubleClicked(const QModelIndex&)),
- this, SLOT(on_item_double_clicked(const QModelIndex&)));
+ connect(tree_view_, SIGNAL(currentChanged(const QModelIndex&)),
+ this, SLOT(on_item_changed(const QModelIndex&)));
+ connect(tree_view_, SIGNAL(activated(const QModelIndex&)),
+ this, SLOT(on_item_activated(const QModelIndex&)));
connect(this, SIGNAL(new_decoders_selected(vector<const srd_decoder*>)),
&session, SLOT(on_new_decoders_selected(vector<const srd_decoder*>)));
return ret_val;
}
-void SubWindow::on_item_clicked(const QModelIndex& index)
+void SubWindow::on_item_changed(const QModelIndex& index)
{
if (!index.isValid())
return;
info_label_footer_->setText(tr("<p align='right'>Tags: %1</p>").arg(tags));
}
-void SubWindow::on_item_double_clicked(const QModelIndex& index)
+void SubWindow::on_item_activated(const QModelIndex& index)
{
if (!index.isValid())
return;