Files
templates/tools/dsview/decoder-panel.patch

120 lines
4.0 KiB
Diff

--- a/DSView/pv/dock/searchcombobox.h
+++ b/DSView/pv/dock/searchcombobox.h
@@ -58,6 +58,7 @@
public:
QString _id;
QString _name;
+ QString _section;
void *_data_handle;
QWidget *_control;
};
@@ -74,7 +75,7 @@
void ShowDlg(QWidget *editline);
- void AddDataItem(QString id, QString name, void *data_handle);
+ void AddDataItem(QString id, QString name, void *data_handle, QString section = QString());
inline void SetItemClickHandle(ISearchItemClick *click){
_item_click = click;
@@ -95,6 +96,7 @@
std::vector<SearchDataItem*> _items;
ISearchItemClick *_item_click;
QScrollArea *_scroll;
+ std::vector<std::pair<QString, QWidget*> > _sections;
};
#endif // SEARCHCOMBOBOX_H
--- a/DSView/pv/dock/searchcombobox.cpp
+++ b/DSView/pv/dock/searchcombobox.cpp
@@ -25,6 +25,7 @@
#include <QPoint>
#include <QLineEdit>
#include <QScrollBar>
+#include <QLabel>
#include "../config/appconfig.h"
#include "../appcontrol.h"
#include "../ui/fn.h"
@@ -107,8 +108,17 @@
QFont font = this->font();
font.setPointSizeF(AppConfig::Instance().appOptions.fontSize);
+ QString section;
for(auto o : _items)
- {
+ {
+ if (!o->_section.isEmpty() && o->_section != section) {
+ section = o->_section;
+ auto heading = new QLabel(section, listPanel);
+ heading->setFont(font);
+ heading->setStyleSheet("font-weight: bold; padding: 8px 4px; border-top: 1px solid #344762;");
+ listLay->addWidget(heading);
+ _sections.push_back(std::make_pair(section, heading));
+ }
ComboButtonItem *bt = new ComboButtonItem(panel, this, o);
bt->setText(o->_name);
bt->setObjectName("flat");
@@ -143,11 +153,12 @@
this->show();
}
-void SearchComboBox::AddDataItem(QString id, QString name, void *data_handle)
+void SearchComboBox::AddDataItem(QString id, QString name, void *data_handle, QString section)
{
SearchDataItem *item = new SearchDataItem();
item->_id = id;
item->_name = name;
+ item->_section = section;
item->_data_handle = data_handle;
this->_items.push_back(item);
}
@@ -197,5 +208,14 @@
}
}
+ for (auto section : _sections) {
+ bool visible = false;
+ for (auto item : _items)
+ if (item->_section == section.first && !item->_control->isHidden()) {
+ visible = true;
+ break;
+ }
+ section.second->setVisible(visible);
+ }
_scroll->verticalScrollBar()->setValue(0);
}
--- a/DSView/pv/dock/protocoldock.cpp
+++ b/DSView/pv/dock/protocoldock.cpp
@@ -1060,10 +1060,15 @@
{
SearchComboBox *panel = new SearchComboBox(this);
- for (auto info : _decoderInfoList)
- {
- srd_decoder *dec = (srd_decoder *)(info->_data_handle);
- panel->AddDataItem(QString(dec->id), QString(dec->name), info);
+ const QStringList customIds = {"gate_driver_timing", "transistor_pair", "set_uart", "set_can", "pm35_uart"};
+ for (bool custom : {true, false}) {
+ for (auto info : _decoderInfoList) {
+ srd_decoder *dec = (srd_decoder *)(info->_data_handle);
+ if (customIds.contains(QString(dec->id)) != custom)
+ continue;
+ panel->AddDataItem(QString(dec->id), QString(dec->name), info,
+ custom ? QString::fromUtf8("Пользовательские") : QString::fromUtf8("Стандартные"));
+ }
}
QFont font = this->font();
--- a/DSView/pv/mainwindow.cpp
+++ b/DSView/pv/mainwindow.cpp
@@ -1329,7 +1329,8 @@
// default dockwidget size
AppConfig &app = AppConfig::Instance();
QByteArray st = app.frameOptions.windowState;
- if (!st.isEmpty())
+ // Standalone toolbar rows must not reserve space above embedded docks.
+ if (!qApp->property("embeddedHost").toBool() && !st.isEmpty())
{
try
{