X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Feffectslistview.cpp;h=9935394c1b445ba3c5db0a10fc2a6292e3766b48;hb=ecda842bf2b632f75198d6cf0fac1fcb5ef862ad;hp=96cc4d20bf1c872083306d3d319d39f4b1cb03b8;hpb=467dba1b93820a5b7ccedffb206deb047a4038ca;p=kdenlive diff --git a/src/effectslistview.cpp b/src/effectslistview.cpp index 96cc4d20..9935394c 100644 --- a/src/effectslistview.cpp +++ b/src/effectslistview.cpp @@ -35,50 +35,60 @@ EffectsListView::EffectsListView(QWidget *parent) : { setupUi(this); - QMenu *menu = new QMenu(this); - m_effectsList = new EffectsListWidget(menu); + QMenu *contextMenu = new QMenu(this); + m_effectsList = new EffectsListWidget(contextMenu); QVBoxLayout *lyr = new QVBoxLayout(effectlistframe); lyr->addWidget(m_effectsList); lyr->setContentsMargins(0, 0, 0, 0); search_effect->setTreeWidget(m_effectsList); + search_effect->setToolTip(i18n("Search in the effect list")); buttonInfo->setIcon(KIcon("help-about")); + buttonInfo->setToolTip(i18n("Show/Hide the effect description")); setFocusPolicy(Qt::StrongFocus); + setFocusProxy(search_effect); + m_effectsList->setFocusProxy(search_effect); - if (KdenliveSettings::showeffectinfo()) { + if (KdenliveSettings::showeffectinfo()) buttonInfo->setDown(true); - } else infopanel->hide(); - menu->addAction(KIcon("edit-delete"), i18n("Delete effect"), this, SLOT(slotRemoveEffect())); + else + infopanel->hide(); + + contextMenu->addAction(KIcon("edit-delete"), i18n("Delete effect"), this, SLOT(slotRemoveEffect())); connect(type_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(filterList(int))); connect(buttonInfo, SIGNAL(clicked()), this, SLOT(showInfoPanel())); connect(m_effectsList, SIGNAL(itemSelectionChanged()), this, SLOT(slotUpdateInfo())); connect(m_effectsList, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(slotEffectSelected())); - + connect(search_effect, SIGNAL(hiddenChanged(QTreeWidgetItem *, bool)), this, SLOT(slotUpdateSearch(QTreeWidgetItem *, bool))); + connect(search_effect, SIGNAL(textChanged(QString)), this, SLOT(slotAutoExpand(QString))); //m_effectsList->setCurrentRow(0); } - -void EffectsListView::focusInEvent(QFocusEvent * event) -{ - kDebug() << "// got foc"; - search_effect->setFocus(); -} - void EffectsListView::filterList(int pos) { - QTreeWidgetItem *item; - QTreeWidgetItem *folder; for (int i = 0; i < m_effectsList->topLevelItemCount(); i++) { - folder = m_effectsList->topLevelItem(i); + QTreeWidgetItem *folder = m_effectsList->topLevelItem(i); + bool hideFolder = true; for (int j = 0; j < folder->childCount(); j++) { - item = folder->child(j); - if (pos == 0) item->setHidden(false); - else if (item->data(0, Qt::UserRole).toInt() == pos) item->setHidden(false); - else item->setHidden(true); + QTreeWidgetItem *item = folder->child(j); + if (pos == 0 || pos == item->data(0, Qt::UserRole).toInt()) { + item->setHidden(false); + hideFolder = false; + } else { + item->setHidden(true); + } } + // do not hide the folder if it's empty but "All" is selected + if (pos == 0) + hideFolder = false; + folder->setHidden(hideFolder); } - item = m_effectsList->currentItem(); - /*if (item) { + // make sure we don't show anything not matching the search expression + search_effect->updateSearch(); + + + /*item = m_effectsList->currentItem(); + if (item) { if (item->isHidden()) { int i; for (i = 0; i < m_effectsList->count() && m_effectsList->item(i)->isHidden(); i++); //do nothing @@ -89,21 +99,21 @@ void EffectsListView::filterList(int pos) void EffectsListView::showInfoPanel() { - if (infopanel->isVisible()) { - infopanel->setVisible(false); - buttonInfo->setDown(false); - KdenliveSettings::setShoweffectinfo(false); - } else { - infopanel->setVisible(true); - buttonInfo->setDown(true); - KdenliveSettings::setShoweffectinfo(true); - } + bool show = !infopanel->isVisible(); + infopanel->setVisible(show); + buttonInfo->setDown(show); + KdenliveSettings::setShoweffectinfo(show); } void EffectsListView::slotEffectSelected() { QDomElement effect = m_effectsList->currentEffect(); - if (!effect.isNull()) emit addEffect(effect); + QTreeWidgetItem* item=m_effectsList->currentItem(); + if (item && m_effectsList->indexOfTopLevelItem(item)!=-1){ + item->setExpanded(!item->isExpanded()); + } + if (!effect.isNull()) + emit addEffect(effect); } void EffectsListView::slotUpdateInfo() @@ -111,9 +121,9 @@ void EffectsListView::slotUpdateInfo() infopanel->setText(m_effectsList->currentInfo()); } -void EffectsListView::reloadEffectList() +void EffectsListView::reloadEffectList(QMenu *effectsMenu, KActionCategory *effectActions) { - m_effectsList->initList(); + m_effectsList->initList(effectsMenu, effectActions); } void EffectsListView::slotRemoveEffect() @@ -147,4 +157,37 @@ void EffectsListView::slotRemoveEffect() emit reloadEffects(); } +void EffectsListView::slotUpdateSearch(QTreeWidgetItem *item, bool hidden) +{ + if (!hidden) { + if (item->data(0, Qt::UserRole).toInt() == type_combo->currentIndex()) { + if (item->parent()) + item->parent()->setHidden(false); + } else { + if (type_combo->currentIndex() != 0) + item->setHidden(true); + } + } +} + +void EffectsListView::slotAutoExpand(QString text) +{ + search_effect->updateSearch(); + + for (int i = 0; i < m_effectsList->topLevelItemCount(); ++i) { + QTreeWidgetItem *folder = m_effectsList->topLevelItem(i); + bool expandFolder = false; + /*if (folder->isHidden()) + continue;*/ + if (!text.isEmpty()) { + for (int j = 0; j < folder->childCount(); j++) { + QTreeWidgetItem *item = folder->child(j); + if (!item->isHidden()) + expandFolder = true; + } + } + folder->setExpanded(expandFolder); + } +} + #include "effectslistview.moc"