#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);
+ ui.effectlist->setSortingEnabled(true);
+ ui.search_effect->setListWidget(ui.effectlist);
+ ui.buttonInfo->setIcon(KIcon("help-about"));
+ ui.infopanel->hide();
+
initList();
- connect(ui.video_button, SIGNAL(released()), this, SLOT(initList()));
- connect(ui.audio_button, SIGNAL(released()), this, SLOT(initList()));
- connect(ui.custom_button, SIGNAL(released()), this, SLOT(initList()));
- connect(ui.effectlist, SIGNAL(itemSelectionChanged()), this, SLOT(slotDisplayInfo()));
+
+ 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()));
+
+ ui.effectlist->setCurrentRow(0);
}
void EffectsListView::initList()
{
- QStringList names;
- if (ui.video_button->isChecked()) {
- names = m_videoList->effectNames();
+ 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));
}
- else if (ui.audio_button->isChecked()) {
- names = m_audioList->effectNames();
+
+ names = m_customList->effectNames();
+ foreach (QString str, names) {
+ item = new QListWidgetItem(str, ui.effectlist);
+ item->setData(Qt::UserRole, QString::number((int) EFFECT_CUSTOM));
}
- if (ui.custom_button->isChecked()) {
- names = m_customList->effectNames();
+}
+
+void EffectsListView::filterList(int pos)
+{
+ QListWidgetItem *item;
+ for (int i = 0; i < ui.effectlist->count(); i++)
+ {
+ 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);
+ }
+}
+
+void EffectsListView::showInfoPanel()
+{
+ if (ui.infopanel->isVisible()) {
+ ui.infopanel->hide();
+ ui.buttonInfo->setDown(false);
+ }
+ else {
+ ui.infopanel->show();
+ ui.buttonInfo->setDown(true);
}
- ui.effectlist->clear();
- ui.effectlist->addItems(names);
}
-void EffectsListView::slotDisplayInfo()
+void EffectsListView::slotEffectSelected()
{
+ QListWidgetItem *item = ui.effectlist->currentItem();
+ if (!item) return;
+ QDomElement effect;
+ switch (item->data(Qt::UserRole).toInt())
+ {
+ case 1:
+ effect = m_videoList->getEffectByName(ui.effectlist->currentItem()->text());
+ break;
+ case 2:
+ effect = m_audioList->getEffectByName(ui.effectlist->currentItem()->text());
+ break;
+ default:
+ effect = m_customList->getEffectByName(ui.effectlist->currentItem()->text());
+ break;
+ }
+ emit addEffect(effect);
+}
+
+void EffectsListView::slotUpdateInfo()
+{
+ QListWidgetItem *item = ui.effectlist->currentItem();
+ if (!item) return;
QString info;
- if (ui.video_button->isChecked()) {
+ switch (item->data(Qt::UserRole).toInt())
+ {
+ case 1:
info = m_videoList->getInfo(ui.effectlist->currentItem()->text());
- }
- else if (ui.audio_button->isChecked()) {
+ break;
+ case 2:
info = m_audioList->getInfo(ui.effectlist->currentItem()->text());
- }
- if (ui.custom_button->isChecked()) {
+ break;
+ default:
info = m_customList->getInfo(ui.effectlist->currentItem()->text());
+ break;
}
ui.infopanel->setText(info);
}