Add search command list for customize popups (#101)
This commit is contained in:
parent
4871443ae5
commit
1d09e20c2f
2 changed files with 94 additions and 4 deletions
|
@ -393,6 +393,66 @@ void CommandBarListTree::mousePressEvent(QMouseEvent* event) {
|
||||||
QTreeWidget::mousePressEvent(event);
|
QTreeWidget::mousePressEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void CommandBarListTree::displayAll(QTreeWidgetItem* item) {
|
||||||
|
int childCount = item->childCount();
|
||||||
|
for (int i = 0; i < childCount; ++i) {
|
||||||
|
displayAll(item->child(i));
|
||||||
|
}
|
||||||
|
item->setHidden(false);
|
||||||
|
item->setExpanded(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
|
void CommandBarListTree::hideAll(QTreeWidgetItem* item) {
|
||||||
|
int childCount = item->childCount();
|
||||||
|
for (int i = 0; i < childCount; ++i) {
|
||||||
|
hideAll(item->child(i));
|
||||||
|
}
|
||||||
|
item->setHidden(true);
|
||||||
|
item->setExpanded(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void CommandBarListTree::searchItems(const QString& searchWord) {
|
||||||
|
// if search word is empty, show all items
|
||||||
|
if (searchWord.isEmpty()) {
|
||||||
|
int itemCount = topLevelItemCount();
|
||||||
|
for (int i = 0; i < itemCount; ++i) {
|
||||||
|
displayAll(topLevelItem(i));
|
||||||
|
}
|
||||||
|
update();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// hide all items first
|
||||||
|
int itemCount = topLevelItemCount();
|
||||||
|
for (int i = 0; i < itemCount; ++i) {
|
||||||
|
hideAll(topLevelItem(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QTreeWidgetItem*> foundItems =
|
||||||
|
findItems(searchWord, Qt::MatchContains | Qt::MatchRecursive, 0);
|
||||||
|
if (foundItems.isEmpty()) { // if nothing is found, do nothing but update
|
||||||
|
update();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// for each item found, show it and show its parent
|
||||||
|
for (auto item : foundItems) {
|
||||||
|
while (item) {
|
||||||
|
item->setHidden(false);
|
||||||
|
item->setExpanded(true);
|
||||||
|
item = item->parent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
// CommandBarPopup
|
// CommandBarPopup
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -434,6 +494,8 @@ CommandBarPopup::CommandBarPopup(bool isXsheetToolbar)
|
||||||
nf.setItalic(true);
|
nf.setItalic(true);
|
||||||
noticeLabel->setFont(nf);
|
noticeLabel->setFont(nf);
|
||||||
|
|
||||||
|
QLineEdit* searchEdit = new QLineEdit(this);
|
||||||
|
|
||||||
//--- layout
|
//--- layout
|
||||||
QVBoxLayout* mainLay = new QVBoxLayout();
|
QVBoxLayout* mainLay = new QVBoxLayout();
|
||||||
m_topLayout->setMargin(0);
|
m_topLayout->setMargin(0);
|
||||||
|
@ -446,10 +508,20 @@ CommandBarPopup::CommandBarPopup(bool isXsheetToolbar)
|
||||||
{
|
{
|
||||||
mainUILay->addWidget(commandBarLabel, 0, 0);
|
mainUILay->addWidget(commandBarLabel, 0, 0);
|
||||||
mainUILay->addWidget(commandItemListLabel, 0, 1);
|
mainUILay->addWidget(commandItemListLabel, 0, 1);
|
||||||
mainUILay->addWidget(m_menuBarTree, 1, 0);
|
|
||||||
mainUILay->addWidget(m_commandListTree, 1, 1);
|
|
||||||
|
|
||||||
mainUILay->addWidget(noticeLabel, 2, 0, 1, 2);
|
mainUILay->addWidget(m_menuBarTree, 1, 0, 2, 1);
|
||||||
|
|
||||||
|
QHBoxLayout* searchLay = new QHBoxLayout();
|
||||||
|
searchLay->setMargin(0);
|
||||||
|
searchLay->setSpacing(5);
|
||||||
|
{
|
||||||
|
searchLay->addWidget(new QLabel(tr("Search:"), this), 0);
|
||||||
|
searchLay->addWidget(searchEdit);
|
||||||
|
}
|
||||||
|
mainUILay->addLayout(searchLay, 1, 1);
|
||||||
|
mainUILay->addWidget(m_commandListTree, 2, 1);
|
||||||
|
|
||||||
|
mainUILay->addWidget(noticeLabel, 3, 0, 1, 2);
|
||||||
}
|
}
|
||||||
mainUILay->setRowStretch(0, 0);
|
mainUILay->setRowStretch(0, 0);
|
||||||
mainUILay->setRowStretch(1, 1);
|
mainUILay->setRowStretch(1, 1);
|
||||||
|
@ -473,6 +545,9 @@ CommandBarPopup::CommandBarPopup(bool isXsheetToolbar)
|
||||||
|
|
||||||
bool ret = connect(okBtn, SIGNAL(clicked()), this, SLOT(onOkPressed()));
|
bool ret = connect(okBtn, SIGNAL(clicked()), this, SLOT(onOkPressed()));
|
||||||
ret = ret && connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject()));
|
ret = ret && connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject()));
|
||||||
|
ret = ret && connect(searchEdit, SIGNAL(textChanged(const QString&)), this,
|
||||||
|
SLOT(onSearchTextChanged(const QString&)));
|
||||||
|
|
||||||
assert(ret);
|
assert(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -483,3 +558,11 @@ void CommandBarPopup::onOkPressed() {
|
||||||
|
|
||||||
accept();
|
accept();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CommandBarPopup::onSearchTextChanged(const QString& text) {
|
||||||
|
static bool busy = false;
|
||||||
|
if (busy) return;
|
||||||
|
busy = true;
|
||||||
|
m_commandListTree->searchItems(text);
|
||||||
|
busy = false;
|
||||||
|
}
|
||||||
|
|
|
@ -50,6 +50,12 @@ class CommandBarListTree final : public QTreeWidget {
|
||||||
public:
|
public:
|
||||||
CommandBarListTree(QWidget* parent = 0);
|
CommandBarListTree(QWidget* parent = 0);
|
||||||
|
|
||||||
|
void searchItems(const QString& searchWord = QString());
|
||||||
|
|
||||||
|
private:
|
||||||
|
void displayAll(QTreeWidgetItem* item);
|
||||||
|
void hideAll(QTreeWidgetItem* item);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QMouseEvent*) override;
|
void mousePressEvent(QMouseEvent*) override;
|
||||||
};
|
};
|
||||||
|
@ -68,6 +74,7 @@ public:
|
||||||
CommandBarPopup(bool isXsheetToolbar = false);
|
CommandBarPopup(bool isXsheetToolbar = false);
|
||||||
protected slots:
|
protected slots:
|
||||||
void onOkPressed();
|
void onOkPressed();
|
||||||
|
void onSearchTextChanged(const QString& text);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in a new issue