]> git.sesse.net Git - kdenlive/commitdiff
better management of effects in list
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 25 Feb 2008 22:33:02 +0000 (22:33 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 25 Feb 2008 22:33:02 +0000 (22:33 +0000)
svn path=/branches/KDE4/; revision=1941

src/effectslistview.cpp
src/effectslistview.h
src/widgets/effectlist_ui.ui

index 7c374c5a2df803fc57eb5d7714e1947aef16dbca..d501aa7ebf4c881cf78358e6b20e2705bd49b927 100644 (file)
 
 #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);
 }
index dacbbe9a623dba5ce644a654c29cebbbf8b1d42f..f6045675c71f985a547bda09f3f35129c5b27fa7 100644 (file)
@@ -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();
index 5420b90ef784b79944c397222321e170e542c2f0..7789cb21ba2959e8829fd1c8d8a210d792caa6ae 100644 (file)
    </property>
    <item row="0" column="0" >
     <widget class="KComboBox" name="type_combo" >
+     <item>
+      <property name="text" >
+       <string>All</string>
+      </property>
+     </item>
      <item>
       <property name="text" >
        <string>Video</string>