diff --git a/DSView/pv/dock/protocoldock.cpp b/DSView/pv/dock/protocoldock.cpp index 92379c22..94d385db 100755 --- a/DSView/pv/dock/protocoldock.cpp +++ b/DSView/pv/dock/protocoldock.cpp @@ -68,51 +68,37 @@ ProtocolDock::ProtocolDock(QWidget *parent, view::View &view, SigSession *sessio _session = session; _cur_search_index = -1; _search_edited = false; + _pro_add_button = NULL; - _top_panel = new QWidget(); - _bot_panel = new QWidget(); - - _top_panel->setMinimumHeight(70); - - _add_button = new QPushButton(_top_panel); - _add_button->setFlat(true); - _del_all_button = new QPushButton(_top_panel); - _del_all_button->setFlat(true); - _del_all_button->setCheckable(true); - - _keyword_edit = new KeywordLineEdit(_top_panel, this); - _keyword_edit->setReadOnly(true); - + //-----------------------------get protocol list GSList *l = const_cast(srd_decoder_list()); - std::map pro_key_table; QString repeatNammes; for(; l; l = l->next) { const srd_decoder *const d = (srd_decoder*)l->data; - assert(d); - - if (true) { - DecoderInfoItem *info = new DecoderInfoItem(); - srd_decoder *dec = (srd_decoder *)(l->data); - info->_data_handle = dec; - _decoderInfoList.push_back(info); + assert(d); - std::string prokey(dec->id); - if (pro_key_table.find(prokey) != pro_key_table.end()){ - if (repeatNammes != "") - repeatNammes += ","; - repeatNammes += QString(dec->id); - } - else{ - pro_key_table[prokey] = 1; - } + DecoderInfoItem *info = new DecoderInfoItem(); + srd_decoder *dec = (srd_decoder *)(l->data); + info->_data_handle = dec; + _decoderInfoList.push_back(info); + + std::string prokey(dec->id); + if (pro_key_table.find(prokey) != pro_key_table.end()) + { + if (repeatNammes != "") + repeatNammes += ","; + repeatNammes += QString(dec->id); + } + else + { + pro_key_table[prokey] = 1; } } g_slist_free(l); - - //sort protocol list + sort(_decoderInfoList.begin(), _decoderInfoList.end(), ProtocolDock::protocol_sort_callback); if (repeatNammes != ""){ @@ -120,102 +106,111 @@ ProtocolDock::ProtocolDock(QWidget *parent, view::View &view, SigSession *sessio err += repeatNammes; MsgBox::Show(tr("error"), err.toUtf8().data()); } - - _arrow = new QToolButton(_top_panel); - QHBoxLayout *hori_layout = new QHBoxLayout(); - hori_layout->addWidget(_add_button); - hori_layout->addWidget(_del_all_button); - hori_layout->addWidget(_keyword_edit); - hori_layout->addWidget(_arrow); - hori_layout->addStretch(1); + //-----------------------------top panel + QWidget *top_panel = new QWidget(); + top_panel->setMinimumHeight(70); + _top_panel = top_panel; + QWidget* bot_panel = new QWidget(); + + _pro_add_button = new QPushButton(top_panel); + _pro_add_button->setFlat(true); + _del_all_button = new QPushButton(top_panel); + _del_all_button->setFlat(true); + _del_all_button->setCheckable(true); + _pro_keyword_edit = new KeywordLineEdit(top_panel, this); + _pro_keyword_edit->setReadOnly(true); + + _pro_search_button = new QToolButton(top_panel); + QHBoxLayout *pro_search_lay = new QHBoxLayout(); + pro_search_lay->setSpacing(2); + pro_search_lay->addWidget(_pro_add_button); + pro_search_lay->addWidget(_del_all_button); + pro_search_lay->addWidget(_pro_keyword_edit, 1); + pro_search_lay->addWidget(_pro_search_button); - _up_layout = new QVBoxLayout(); - _up_layout->addLayout(hori_layout); - _up_layout->addStretch(1); - _top_panel->setLayout(_up_layout); + _top_layout = new QVBoxLayout(); + _top_layout->addLayout(pro_search_lay); + _top_layout->addStretch(1); + top_panel->setLayout(_top_layout); - //----------------bottom - _dn_set_button = new QPushButton(_bot_panel); - _dn_set_button->setFlat(true); + //-----------------------------bottom panel + _bot_set_button = new QPushButton(bot_panel); + _bot_set_button->setFlat(true); + _bot_save_button = new QPushButton(bot_panel); + _bot_save_button->setFlat(true); + _dn_nav_button = new QPushButton(bot_panel); + _dn_nav_button->setFlat(true); + _bot_title_label = new QLabel(bot_panel); - _dn_save_button = new QPushButton(_bot_panel); - _dn_save_button->setFlat(true); + QHBoxLayout *bot_title_layout = new QHBoxLayout(); + bot_title_layout->setSpacing(2); + bot_title_layout->addWidget(_bot_set_button); + bot_title_layout->addWidget(_bot_save_button); + bot_title_layout->addWidget(_bot_title_label, 1); + bot_title_layout->addWidget(_dn_nav_button); + + _pre_button = new QPushButton(bot_panel); + _ann_search_button = new QPushButton(bot_panel); //search icon + _nxt_button = new QPushButton(bot_panel); + _ann_search_edit = new QLineEdit(bot_panel); + + _ann_search_button->setFixedWidth(_ann_search_button->height()); + _ann_search_button->setDisabled(true); + QHBoxLayout *ann_edit_layout = new QHBoxLayout(); + ann_edit_layout->addWidget(_ann_search_button); + ann_edit_layout->addStretch(1); + ann_edit_layout->setContentsMargins(0, 0, 0, 0); + _ann_search_edit->setLayout(ann_edit_layout); + _ann_search_edit->setTextMargins(_ann_search_button->width() + 1, 0, 0, 0); - _dn_nav_button = new QPushButton(_bot_panel); - _dn_nav_button->setFlat(true); + QHBoxLayout *ann_search_layout = new QHBoxLayout(); + ann_search_layout->setSpacing(2); + ann_search_layout->addWidget(_pre_button); + ann_search_layout->addWidget(_ann_search_edit, 1); + ann_search_layout->addWidget(_nxt_button); - QHBoxLayout *dn_title_layout = new QHBoxLayout(); - _dn_title_label = new QLabel(_bot_panel); -#ifndef _WIN32 - _dn_title_label->setWordWrap(true); -#endif - dn_title_layout->addWidget(_dn_set_button, 0, Qt::AlignLeft); - dn_title_layout->addWidget(_dn_save_button, 0, Qt::AlignLeft); - dn_title_layout->addWidget(_dn_title_label, 1, Qt::AlignLeft); - dn_title_layout->addWidget(_dn_nav_button, 0, Qt::AlignRight); - - _table_view = new QTableView(_bot_panel); + _table_view = new QTableView(bot_panel); _table_view->setModel(_session->get_decoder_model()); _table_view->setAlternatingRowColors(true); _table_view->setShowGrid(false); _table_view->horizontalHeader()->setStretchLastSection(true); _table_view->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); - _table_view->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); + _table_view->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); - _pre_button = new QPushButton(_bot_panel); - _nxt_button = new QPushButton(_bot_panel); + _matchs_title_label = new QLabel(); + _matchs_label = new QLabel(); + QHBoxLayout *match_layout = new QHBoxLayout(); + match_layout->addWidget(_matchs_title_label, 0, Qt::AlignLeft); + match_layout->addWidget(_matchs_label, 0, Qt::AlignLeft); + match_layout->addStretch(1); - _search_button = new QPushButton(this); - _search_button->setFixedWidth(_search_button->height()); - _search_button->setDisabled(true); - _search_edit = new QLineEdit(_bot_panel); - _search_edit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - QHBoxLayout *search_layout = new QHBoxLayout(); - search_layout->addWidget(_search_button); - search_layout->addStretch(1); - search_layout->setContentsMargins(0, 0, 0, 0); - _search_edit->setLayout(search_layout); - _search_edit->setTextMargins(_search_button->width(), 0, 0, 0); + QVBoxLayout *bot_layout = new QVBoxLayout(); + bot_layout->addLayout(bot_title_layout); + bot_layout->addLayout(ann_search_layout); + bot_layout->addLayout(match_layout); + bot_layout->addWidget(_table_view); + bot_panel->setLayout(bot_layout); - _dn_search_layout = new QHBoxLayout(); - _dn_search_layout->addWidget(_pre_button, 0, Qt::AlignLeft); - _dn_search_layout->addWidget(_search_edit, 1, Qt::AlignLeft); - _dn_search_layout->addWidget(_nxt_button, 0, Qt::AlignRight); - - _matchs_label = new QLabel(_bot_panel); - _matchs_title_label = new QLabel(_bot_panel); - QHBoxLayout *dn_match_layout = new QHBoxLayout(); - dn_match_layout->addWidget(_matchs_title_label, 0, Qt::AlignLeft); - dn_match_layout->addWidget(_matchs_label, 0, Qt::AlignLeft); - dn_match_layout->addStretch(1); - - _dn_layout = new QVBoxLayout(); - _dn_layout->addLayout(dn_title_layout); - _dn_layout->addLayout(_dn_search_layout); - _dn_layout->addLayout(dn_match_layout); - _dn_layout->addWidget(_table_view); - _bot_panel->setLayout(_dn_layout); - - _split_widget = new QSplitter(this); - _split_widget->insertWidget(0, _top_panel); - _split_widget->insertWidget(1, _bot_panel); - _split_widget->setOrientation(Qt::Vertical); - _split_widget->setCollapsible(0, false); - _split_widget->setCollapsible(1, false); + QSplitter *split_widget = new QSplitter(this); + split_widget->insertWidget(0, top_panel); + split_widget->insertWidget(1, bot_panel); + split_widget->setOrientation(Qt::Vertical); + split_widget->setCollapsible(0, false); + split_widget->setCollapsible(1, false); this->setWidgetResizable(true); - this->setWidget(_split_widget); - _split_widget->setObjectName("protocolWidget"); + this->setWidget(split_widget); + split_widget->setObjectName("protocolWidget"); - retranslateUi(); + retranslateUi(); connect(_dn_nav_button, SIGNAL(clicked()),this, SLOT(nav_table_view())); - connect(_dn_save_button, SIGNAL(clicked()),this, SLOT(export_table_view())); - connect(_dn_set_button, SIGNAL(clicked()),this, SLOT(set_model())); + connect(_bot_save_button, SIGNAL(clicked()),this, SLOT(export_table_view())); + connect(_bot_set_button, SIGNAL(clicked()),this, SLOT(set_model())); connect(_pre_button, SIGNAL(clicked()),this, SLOT(search_pre())); connect(_nxt_button, SIGNAL(clicked()),this, SLOT(search_nxt())); - connect(_add_button, SIGNAL(clicked()),this, SLOT(on_add_protocol())); + connect(_pro_add_button, SIGNAL(clicked()),this, SLOT(on_add_protocol())); connect(_del_all_button, SIGNAL(clicked()),this, SLOT(on_del_all_protocol())); connect(this, SIGNAL(protocol_updated()), this, SLOT(update_model())); @@ -224,9 +219,9 @@ ProtocolDock::ProtocolDock(QWidget *parent, view::View &view, SigSession *sessio connect(_table_view->horizontalHeader(), SIGNAL(sectionResized(int,int,int)), this, SLOT(column_resize(int, int, int))); - connect(_search_edit, SIGNAL(editingFinished()), this, SLOT(search_changed())); + connect(_ann_search_edit, SIGNAL(editingFinished()), this, SLOT(search_changed())); - connect(_arrow, SIGNAL(clicked()), this, SLOT(show_protocol_select())); + connect(_pro_search_button, SIGNAL(clicked()), this, SLOT(show_protocol_select())); } ProtocolDock::~ProtocolDock() @@ -243,30 +238,34 @@ ProtocolDock::~ProtocolDock() void ProtocolDock::retranslateUi() { - _search_edit->setPlaceholderText(tr("search")); + _ann_search_edit->setPlaceholderText(tr("search")); _matchs_title_label->setText(tr("Matching Items:")); - _dn_title_label->setText(tr("Protocol List Viewer")); - - _keyword_edit->ResetText(); + _bot_title_label->setText(tr("Protocol List Viewer")); + _pro_keyword_edit->ResetText(); } void ProtocolDock::reStyle() { QString iconPath = GetIconPath(); - _add_button->setIcon(QIcon(iconPath+"/add.svg")); + if (_pro_add_button == NULL) + { + return; + } + + _pro_add_button->setIcon(QIcon(iconPath+"/add.svg")); _del_all_button->setIcon(QIcon(iconPath+"/del.svg")); - _dn_set_button->setIcon(QIcon(iconPath+"/gear.svg")); - _dn_save_button->setIcon(QIcon(iconPath+"/save.svg")); + _bot_set_button->setIcon(QIcon(iconPath+"/gear.svg")); + _bot_save_button->setIcon(QIcon(iconPath+"/save.svg")); _dn_nav_button->setIcon(QIcon(iconPath+"/nav.svg")); _pre_button->setIcon(QIcon(iconPath+"/pre.svg")); _nxt_button->setIcon(QIcon(iconPath+"/next.svg")); - _search_button->setIcon(QIcon(iconPath+"/search.svg")); - _arrow->setIcon(QIcon(iconPath + "/search.svg")); + _ann_search_button->setIcon(QIcon(iconPath+"/search.svg")); + _pro_search_button->setIcon(QIcon(iconPath + "/search.svg")); - for (auto it = _protocol_lay_items.begin(); it != _protocol_lay_items.end(); it++){ - (*it)->ResetStyle(); - } + for (auto item : _protocol_lay_items){ + item->ResetStyle(); + } } void ProtocolDock::changeEvent(QEvent *event) @@ -278,28 +277,6 @@ void ProtocolDock::changeEvent(QEvent *event) QScrollArea::changeEvent(event); } -//void ProtocolDock::paintEvent(QPaintEvent *){} - -void ProtocolDock::resizeEvent(QResizeEvent *event) -{ - int width = this->visibleRegion().boundingRect().width(); - - int mg1 = 10; - int mg2 = 10; - - width = width - mg1 * 2 - - mg2 * 2 - - _dn_search_layout->spacing() * 2 - - _pre_button->width()-_nxt_button->width(); - width = std::max(width, 0); - - _search_edit->setMinimumWidth(width); - width = std::max(width-20, 0); - _keyword_edit->setMinimumWidth(width); - - QScrollArea::resizeEvent(event); -} - int ProtocolDock::decoder_name_cmp(const void *a, const void *b) { return strcmp(((const srd_decoder*)a)->name, @@ -423,7 +400,7 @@ bool ProtocolDock::add_protocol_by_id(QString id, bool silent, std::listinsertLayout(_protocol_lay_items.size(), layer); + _top_layout->insertLayout(_protocol_lay_items.size(), layer); layer->m_decoderStatus = dstatus; layer->m_protocolId = protocolId; @@ -811,7 +788,7 @@ void ProtocolDock::search_nxt() void ProtocolDock::search_done() { - QString str = _search_edit->text().trimmed(); + QString str = _ann_search_edit->text().trimmed(); QRegularExpression rx("(-)"); _str_list = str.split(rx); _model_proxy.setFilterFixedString(_str_list.first()); @@ -1019,7 +996,7 @@ bool ProtocolDock::protocol_sort_callback(const DecoderInfoItem *o1, const Decod panel->AddDataItem(QString(dec->id), QString(dec->name), info); } panel->SetItemClickHandle(this); - panel->ShowDlg(_keyword_edit); + panel->ShowDlg(_pro_keyword_edit); } void ProtocolDock::OnItemClick(void *sender, void *data_handle) @@ -1027,7 +1004,7 @@ bool ProtocolDock::protocol_sort_callback(const DecoderInfoItem *o1, const Decod if (data_handle != NULL){ DecoderInfoItem *info = (DecoderInfoItem*)data_handle; srd_decoder *dec = (srd_decoder *)(info->_data_handle); - this->_keyword_edit->SetInputText(QString(dec->name)); + this->_pro_keyword_edit->SetInputText(QString(dec->name)); _selected_protocol_id = QString(dec->id); this->on_add_protocol(); } diff --git a/DSView/pv/dock/protocoldock.h b/DSView/pv/dock/protocoldock.h index e392e85e..c29bae28 100755 --- a/DSView/pv/dock/protocoldock.h +++ b/DSView/pv/dock/protocoldock.h @@ -89,10 +89,7 @@ private: void retranslateUi(); void reStyle(); -protected: - //void paintEvent(QPaintEvent *); - void resizeEvent(QResizeEvent *); - +protected: int get_protocol_index_by_id(QString id); static QString parse_protocol_id(const char *id); int get_output_protocol_by_id(QString id); @@ -143,32 +140,28 @@ private: int _cur_search_index; QStringList _str_list; - QSplitter *_split_widget; - QWidget *_top_panel; - QWidget *_bot_panel; - QTableView *_table_view; + QWidget *_top_panel; + QTableView *_table_view; QPushButton *_pre_button; QPushButton *_nxt_button; - QLineEdit *_search_edit; - QHBoxLayout *_dn_search_layout; - QVBoxLayout *_dn_layout; + QLineEdit *_ann_search_edit; QLabel *_matchs_label; QLabel *_matchs_title_label; - QLabel *_dn_title_label; + QLabel *_bot_title_label; - QPushButton *_add_button; + QPushButton *_pro_add_button; QPushButton *_del_all_button; - QVBoxLayout *_up_layout; + QVBoxLayout *_top_layout; std::vector _protocol_lay_items; //protocol item layers - QPushButton *_dn_set_button; - QPushButton *_dn_save_button; + QPushButton *_bot_set_button; + QPushButton *_bot_save_button; QPushButton *_dn_nav_button; - QPushButton *_search_button; + QPushButton *_ann_search_button; std::vector _decoderInfoList; - KeywordLineEdit *_keyword_edit; + KeywordLineEdit *_pro_keyword_edit; QString _selected_protocol_id; - QToolButton *_arrow; + QToolButton *_pro_search_button; mutable std::mutex _search_mutex; bool _search_edited;