summaryrefslogtreecommitdiff
path: root/src/filelist.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/filelist.cc')
-rw-r--r--src/filelist.cc186
1 files changed, 186 insertions, 0 deletions
diff --git a/src/filelist.cc b/src/filelist.cc
new file mode 100644
index 0000000..c4e5c4b
--- /dev/null
+++ b/src/filelist.cc
@@ -0,0 +1,186 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ * filelist.cc
+ *
+ * Mon Nov 30 15:35:52 CET 2009
+ * Copyright 2009 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of DrumGizmo.
+ *
+ * DrumGizmo is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * DrumGizmo is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with DrumGizmo; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#include "filelist.h"
+
+#include <QFileDialog>
+#include <QFileInfo>
+#include <QMenu>
+
+#include "itemeditor.h"
+
+FileList::FileList()
+{
+ setContextMenuPolicy(Qt::CustomContextMenu);
+
+ connect(this, SIGNAL(customContextMenuRequested(const QPoint &)),
+ this, SLOT(popupMenu(const QPoint &)));
+
+ connect(this, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
+ this, SLOT(selectionChanged(QListWidgetItem *)));
+
+ createMenus();
+}
+
+void FileList::addFiles()
+{
+ QStringList files = QFileDialog::getOpenFileNames(this, tr("Open file"),
+ path, tr("Audio Files (*.wav)"));
+ QStringList::Iterator i = files.begin();
+ while(i != files.end()) {
+ QString file = *i;
+ QFileInfo fi(file);
+ QString name = fi.baseName();
+ path = fi.absolutePath();
+
+ QListWidgetItem *item = new QListWidgetItem();
+ setItemFile(item, file);
+ setItemName(item, name);
+ setItemMaster(item, false);
+ addItem(item);
+
+ emit fileAdded(file, name);
+
+ i++;
+ }
+}
+
+void FileList::setMasterFile(QListWidgetItem *i)
+{
+ QString filename = itemFile(i);
+
+ for(int idx = 0; idx < count(); idx++) {
+ setItemMaster(item(idx), false);
+ }
+
+ setItemMaster(i, true);
+ emit masterFileChanged(filename);
+}
+
+void FileList::selectionChanged(QListWidgetItem *i)
+{
+ setMasterFile(i);
+}
+
+
+void FileList::createMenus()
+{
+ menu = new QMenu();
+
+ setMasterAction = new QAction("Set as Master (dbl-click)", this);
+ connect(setMasterAction, SIGNAL(triggered()), this, SLOT(setMaster()));
+
+ editAction = new QAction("Edit name", this);
+ connect(editAction, SIGNAL(triggered()), this, SLOT(editName()));
+
+ removeAction = new QAction("Remove", this);
+ connect(removeAction, SIGNAL(triggered()), this, SLOT(removeFile()));
+
+ removeAllAction = new QAction("Remove all", this);
+ connect(removeAllAction, SIGNAL(triggered()), this, SLOT(removeAllFiles()));
+
+ menu->addAction(setMasterAction);
+ menu->addAction(editAction);
+ menu->addAction(removeAction);
+ menu->addSeparator();
+ menu->addAction(removeAllAction);
+
+}
+
+void FileList::popupMenu(const QPoint & pos)
+{
+ activeItem = itemAt(pos);
+ if(!activeItem) return;
+ menu->popup(mapToGlobal(pos));
+}
+
+void FileList::setMaster()
+{
+ setMasterFile(activeItem);
+}
+
+void FileList::removeFile()
+{
+ QString file = itemFile(activeItem);
+ QString name = itemName(activeItem);
+
+ printf("Removing: %s\n", file.toStdString().c_str());
+ delete activeItem;//takeItem(row(activeItem));
+ activeItem = NULL;
+ setCurrentRow(-1);
+
+ emit fileRemoved(file, name);
+}
+
+void FileList::removeAllFiles()
+{
+ activeItem = NULL;
+
+ clear();
+
+ emit allFilesRemoved();
+}
+
+void FileList::editName()
+{
+ ItemEditor *e = new ItemEditor(activeItem, itemName(activeItem));
+ connect(e, SIGNAL(updateItem(QListWidgetItem *, QString)),
+ this, SLOT(setItemName(QListWidgetItem *, QString)));
+}
+
+
+// Item utility functions.
+QString FileList::itemFile(QListWidgetItem *i)
+{
+ return i->data(Qt::ToolTipRole).toString();
+}
+
+void FileList::setItemFile(QListWidgetItem *i, QString file)
+{
+ i->setData(Qt::ToolTipRole, file);
+ i->setData(Qt::DisplayRole, itemName(i) + "\t" + file);
+}
+
+QString FileList::itemName(QListWidgetItem *i)
+{
+ return i->data(Qt::UserRole).toString();
+}
+
+void FileList::setItemName(QListWidgetItem *i, QString name)
+{
+ QString oldname = itemName(i);
+
+ i->setData(Qt::UserRole, name);
+ i->setData(Qt::DisplayRole, name + "\t" + itemFile(i));
+
+ if(oldname != "" && oldname != name) emit nameChanged(itemFile(i), name);
+}
+
+void FileList::setItemMaster(QListWidgetItem *i, bool master)
+{
+ if(master) i->setIcon(QPixmap(":icons/master.png"));
+ else i->setIcon(QPixmap(":icons/file.png"));
+}