From: Jean-Baptiste Mardelle Date: Mon, 25 Feb 2008 22:33:02 +0000 (+0000) Subject: better management of effects in list X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=ee28c87c726b74934df420ecc6c334befc9e4ce9;p=kdenlive better management of effects in list svn path=/branches/KDE4/; revision=1941 --- diff --git a/src/effectslistview.cpp b/src/effectslistview.cpp index 7c374c5a..d501aa7e 100644 --- a/src/effectslistview.cpp +++ b/src/effectslistview.cpp @@ -23,15 +23,22 @@ #include "effectslistview.h" +#define EFFECT_VIDEO 1 +#define EFFECT_AUDIO 2 +#define EFFECT_CUSTOM 3 + EffectsListView::EffectsListView(EffectsList *audioEffectList, EffectsList *videoEffectList, EffectsList *customEffectList, QWidget *parent) : QWidget(parent), m_audioList(audioEffectList), m_videoList(videoEffectList), m_customList(customEffectList) { ui.setupUi(this); - initList(0); + ui.effectlist->setSortingEnabled(true); ui.search_effect->setListWidget(ui.effectlist); ui.buttonInfo->setIcon(KIcon("help-about")); ui.infopanel->hide(); - connect(ui.type_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(initList(int))); + + initList(); + + connect(ui.type_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(filterList(int))); connect (ui.buttonInfo, SIGNAL (clicked()), this, SLOT (showInfoPanel())); connect(ui.effectlist, SIGNAL(itemSelectionChanged()), this, SLOT(slotUpdateInfo())); connect(ui.effectlist, SIGNAL(doubleClicked(QListWidgetItem *,const QPoint &)), this, SLOT(slotEffectSelected())); @@ -39,23 +46,48 @@ EffectsListView::EffectsListView(EffectsList *audioEffectList, EffectsList *vide ui.effectlist->setCurrentRow(0); } -void EffectsListView::initList(int pos) +void EffectsListView::initList() +{ + ui.effectlist->clear(); + QStringList names = m_videoList->effectNames(); + QListWidgetItem *item; + foreach (QString str, names) { + item = new QListWidgetItem(str, ui.effectlist); + item->setData(Qt::UserRole, QString::number((int) EFFECT_VIDEO)); + } + + names = m_audioList->effectNames(); + foreach (QString str, names) { + item = new QListWidgetItem(str, ui.effectlist); + item->setData(Qt::UserRole, QString::number((int) EFFECT_AUDIO)); + } + + names = m_customList->effectNames(); + foreach (QString str, names) { + item = new QListWidgetItem(str, ui.effectlist); + item->setData(Qt::UserRole, QString::number((int) EFFECT_CUSTOM)); + } +} + +void EffectsListView::filterList(int pos) { - QStringList names; - switch (pos) + QListWidgetItem *item; + for (int i = 0; i < ui.effectlist->count(); i++) { - case 0: - names = m_videoList->effectNames(); - break; - case 1: - names = m_audioList->effectNames(); - break; - default: - names = m_customList->effectNames(); - break; + item = ui.effectlist->item(i); + if (pos == 0) item->setHidden(false); + else if (item->data(Qt::UserRole).toInt() == pos) item->setHidden(false); + else item->setHidden(true); + } + item = ui.effectlist->currentItem(); + if (item) { + if (item->isHidden()) { + int i; + for (i = 0; i < ui.effectlist->count() && ui.effectlist->item(i)->isHidden(); i++); + ui.effectlist->setCurrentRow(i); + } + else ui.effectlist->scrollToItem(item); } - ui.effectlist->clear(); - ui.effectlist->addItems(names); } void EffectsListView::showInfoPanel() @@ -72,13 +104,15 @@ void EffectsListView::showInfoPanel() void EffectsListView::slotEffectSelected() { + QListWidgetItem *item = ui.effectlist->currentItem(); + if (!item) return; QDomElement effect; - switch (ui.type_combo->currentIndex()) + switch (item->data(Qt::UserRole).toInt()) { - case 0: + case 1: effect = m_videoList->getEffectByName(ui.effectlist->currentItem()->text()); break; - case 1: + case 2: effect = m_audioList->getEffectByName(ui.effectlist->currentItem()->text()); break; default: @@ -90,15 +124,20 @@ void EffectsListView::slotEffectSelected() void EffectsListView::slotUpdateInfo() { + QListWidgetItem *item = ui.effectlist->currentItem(); + if (!item) return; QString info; - if (ui.type_combo->currentIndex() == 0) { + switch (item->data(Qt::UserRole).toInt()) + { + case 1: info = m_videoList->getInfo(ui.effectlist->currentItem()->text()); - } - else if (ui.type_combo->currentIndex() == 1) { + break; + case 2: info = m_audioList->getInfo(ui.effectlist->currentItem()->text()); - } - else if (ui.type_combo->currentIndex() == 2) { + break; + default: info = m_customList->getInfo(ui.effectlist->currentItem()->text()); + break; } ui.infopanel->setText(info); } diff --git a/src/effectslistview.h b/src/effectslistview.h index dacbbe9a..f6045675 100644 --- a/src/effectslistview.h +++ b/src/effectslistview.h @@ -41,7 +41,8 @@ class EffectsListView : public QWidget EffectsList *m_customList; private slots: - void initList(int pos); + void initList(); + void filterList(int pos); void slotUpdateInfo(); void showInfoPanel(); void slotEffectSelected(); diff --git a/src/widgets/effectlist_ui.ui b/src/widgets/effectlist_ui.ui index 5420b90e..7789cb21 100644 --- a/src/widgets/effectlist_ui.ui +++ b/src/widgets/effectlist_ui.ui @@ -15,6 +15,11 @@ + + + All + + Video