1 /***************************************************************************
2 * Copyright (C) 2007 by Jean-Baptiste Mardelle (jb@kdenlive.org) *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 ***************************************************************************/
26 #include <KStandardDirs>
28 #include "effectslistview.h"
29 #include "effectslistwidget.h"
30 #include "effectslist.h"
32 EffectsListView::EffectsListView(QWidget *parent)
36 QMenu *menu = new QMenu(this);
37 m_effectsList = new EffectsListWidget(menu);
38 QVBoxLayout *lyr = new QVBoxLayout(ui.effectlistframe);
39 lyr->addWidget(m_effectsList);
40 lyr->setContentsMargins(0, 0, 0, 0);
41 ui.search_effect->setListWidget(m_effectsList);
42 ui.buttonInfo->setIcon(KIcon("help-about"));
44 menu->addAction(KIcon("edit-delete"), i18n("Delete effect"), this, SLOT(slotRemoveEffect()));
46 connect(ui.type_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(filterList(int)));
47 connect(ui.buttonInfo, SIGNAL(clicked()), this, SLOT(showInfoPanel()));
48 connect(m_effectsList, SIGNAL(itemSelectionChanged()), this, SLOT(slotUpdateInfo()));
49 connect(m_effectsList, SIGNAL(doubleClicked(QListWidgetItem *, const QPoint &)), this, SLOT(slotEffectSelected()));
51 m_effectsList->setCurrentRow(0);
55 void EffectsListView::filterList(int pos) {
56 QListWidgetItem *item;
57 for (int i = 0; i < m_effectsList->count(); i++) {
58 item = m_effectsList->item(i);
59 if (pos == 0) item->setHidden(false);
60 else if (item->data(Qt::UserRole).toInt() == pos) item->setHidden(false);
61 else item->setHidden(true);
63 item = m_effectsList->currentItem();
65 if (item->isHidden()) {
67 for (i = 0; i < m_effectsList->count() && m_effectsList->item(i)->isHidden(); i++);
68 m_effectsList->setCurrentRow(i);
69 } else m_effectsList->scrollToItem(item);
73 void EffectsListView::showInfoPanel() {
74 if (ui.infopanel->isVisible()) {
75 ui.infopanel->setVisible(false);
76 ui.buttonInfo->setDown(false);
78 ui.infopanel->setVisible(true);
79 ui.buttonInfo->setDown(true);
83 void EffectsListView::slotEffectSelected() {
84 QDomElement effect = m_effectsList->currentEffect().cloneNode().toElement();
85 if (!effect.isNull()) emit addEffect(effect);
88 void EffectsListView::slotUpdateInfo() {
89 QString info = m_effectsList->currentInfo();
90 if (!info.isEmpty()) ui.infopanel->setText(info);
93 KListWidget *EffectsListView::listView() {
97 void EffectsListView::reloadEffectList() {
98 m_effectsList->initList();
101 void EffectsListView::slotRemoveEffect() {
102 QListWidgetItem *item = m_effectsList->currentItem();
103 QString effectId = item->text();
104 QString path = KStandardDirs::locateLocal("data", "kdenlive/effects/", true);
106 QDir directory = QDir(path);
109 const QStringList fileList = directory.entryList(filter, QDir::Files);
111 foreach(const QString filename, fileList) {
112 itemName = KUrl(path + filename).path();
114 QFile file(itemName);
115 doc.setContent(&file, false);
117 QDomNodeList effects = doc.elementsByTagName("effect");
118 if (effects.count() != 1) {
119 kDebug() << "More than one effect in file " << itemName << ", NOT SUPPORTED YET";
121 QDomElement e = effects.item(0).toElement();
122 if (e.attribute("id") == effectId) {
123 QFile::remove(itemName);
128 emit reloadEffects();
131 #include "effectslistview.moc"