From bb8e2b6be1c05fc41132724d1f48a285f104418c Mon Sep 17 00:00:00 2001
From: deva <deva>
Date: Mon, 30 Nov 2009 14:57:04 +0000
Subject: Add multiple files.

---
 dgedit/Makefile.am   |  2 ++
 dgedit/filelist.cc   | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 dgedit/filelist.h    | 51 ++++++++++++++++++++++++++++++++++++++++++
 dgedit/mainwindow.cc | 35 +++++------------------------
 dgedit/mainwindow.h  |  7 +++---
 5 files changed, 124 insertions(+), 33 deletions(-)
 create mode 100644 dgedit/filelist.cc
 create mode 100644 dgedit/filelist.h

diff --git a/dgedit/Makefile.am b/dgedit/Makefile.am
index a16a0e9..77f95fe 100644
--- a/dgedit/Makefile.am
+++ b/dgedit/Makefile.am
@@ -9,12 +9,14 @@ dgedit_SOURCES = $(shell ../tools/MocList cc ) \
 	dgedit.cc \
 	audioextractor.cc \
 	canvas.cc \
+	filelist.cc \
 	mainwindow.cc \
 	samplesorter.cc
 
 EXTRA_DIST = \
 	audioextractor.h \
 	canvas.h \
+	filelist.h \
 	mainwindow.h \
 	samplesorter.h
 
diff --git a/dgedit/filelist.cc b/dgedit/filelist.cc
new file mode 100644
index 0000000..52e6757
--- /dev/null
+++ b/dgedit/filelist.cc
@@ -0,0 +1,62 @@
+/* -*- 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>
+
+FileList::FileList()
+{
+  connect(this, SIGNAL(itemSelectionChanged()), this, SLOT(selectionChanged()));
+}
+
+void FileList::addFiles()
+{
+  QStringList files = QFileDialog::getOpenFileNames(this, tr("Open file"),
+                                              "", tr("Audio Files (*.wav)"));
+  QStringList::Iterator i = files.begin();
+  while(i != files.end()) {
+    QString file = *i;
+    QFileInfo fi(file);
+    QString name = fi.baseName();
+
+    QListWidgetItem *item = new QListWidgetItem();
+    item->setText(file);
+    item->setData(Qt::UserRole, name);
+    addItem(item);
+    
+    emit fileAdded(file, name);
+
+    i++;
+  }
+}
+
+void FileList::selectionChanged()
+{
+  QString filename = currentItem()->text();
+  emit masterFileChanged(filename);
+}
diff --git a/dgedit/filelist.h b/dgedit/filelist.h
new file mode 100644
index 0000000..b1b47a8
--- /dev/null
+++ b/dgedit/filelist.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ *            filelist.h
+ *
+ *  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.
+ */
+#ifndef __DRUMGIZMO_FILELIST_H__
+#define __DRUMGIZMO_FILELIST_H__
+
+#include <QListWidget>
+
+class FileList : public QListWidget {
+Q_OBJECT
+public:
+  FileList();
+
+signals:
+  void masterFileChanged(QString filename);
+  void fileAdded(QString file, QString name);
+  void fileRemoved(QString file, QString name);
+
+public slots:
+  void addFiles();
+
+private slots:
+  void selectionChanged();
+};
+
+
+
+#endif/*__DRUMGIZMO_FILELIST_H__*/
diff --git a/dgedit/mainwindow.cc b/dgedit/mainwindow.cc
index b46904a..390c436 100644
--- a/dgedit/mainwindow.cc
+++ b/dgedit/mainwindow.cc
@@ -32,12 +32,10 @@
 #include <QPushButton>
 #include <QLineEdit>
 #include <QLabel>
-#include <QFileDialog>
 #include <QStatusBar>
 #include <QApplication>
 #include <QDockWidget>
 #include <QSettings>
-#include <QFileInfo>
 
 #define MAXVAL 10000000L
 #define SINGLESTEP MAXVAL/100000
@@ -108,8 +106,7 @@ MainWindow::MainWindow()
   connect(exportsel, SIGNAL(clicked()), this, SLOT(doExport()));
 
   QPushButton *loadbtn = new QPushButton();
-  loadbtn->setText("Load");
-  connect(loadbtn, SIGNAL(clicked()), this, SLOT(addFile()));
+  loadbtn->setText("Add files...");
 
   btns->addWidget(autosel);
   btns->addWidget(clearsel);
@@ -135,8 +132,10 @@ MainWindow::MainWindow()
   configs->addWidget(exportp);
 
   configs->addWidget(new QLabel("Files:"));
-  filelist = new QListWidget();
-  connect(filelist, SIGNAL(itemSelectionChanged()), this, SLOT(loadFile()));
+  filelist = new FileList();
+  connect(filelist, SIGNAL(masterFileChanged(QString)), this, SLOT(loadFile(QString)));
+  connect(loadbtn, SIGNAL(clicked()), filelist, SLOT(addFiles()));
+  connect(filelist, SIGNAL(fileAdded(QString, QString)), extractor, SLOT(addFile(QString, QString)));
   configs->addWidget(filelist);
 
   QDockWidget *dockWidget = new QDockWidget(tr("Dock Widget"), this);
@@ -216,10 +215,8 @@ void MainWindow::doExport()
   extractor->exportSelections(sorter->selections());
 }
 
-void MainWindow::loadFile()
+void MainWindow::loadFile(QString filename)
 {
-  QString filename = filelist->currentItem()->text();
-
   setCursor(Qt::WaitCursor);
   statusBar()->showMessage("Loading...");
   qApp->processEvents();
@@ -229,23 +226,3 @@ void MainWindow::loadFile()
   statusBar()->showMessage("Ready");
   setCursor(Qt::ArrowCursor);
 }
-
-void MainWindow::addFile()
-{
-  QStringList files = QFileDialog::getOpenFileNames(this, tr("Open file"),
-                                              "", tr("Audio Files (*.wav)"));
-  QStringList::Iterator i = files.begin();
-  while(i != files.end()) {
-    QString file = *i;
-    QFileInfo fi(file);
-    QString name = fi.baseName();
-
-    QListWidgetItem *item = new QListWidgetItem();
-    item->setText(file);
-    item->setData(Qt::UserRole, name);
-    filelist->addItem(item);
-    
-    extractor->addFile(file, name);
-    i++;
-  }
-}
diff --git a/dgedit/mainwindow.h b/dgedit/mainwindow.h
index df40e3a..f6fff27 100644
--- a/dgedit/mainwindow.h
+++ b/dgedit/mainwindow.h
@@ -29,11 +29,11 @@
 
 #include <QMainWindow>
 #include <QScrollBar>
-#include <QListWidget>
 
 #include "canvas.h"
 #include "audioextractor.h"
 #include "samplesorter.h"
+#include "filelist.h"
 
 class MainWindow : public QMainWindow {
 Q_OBJECT
@@ -46,8 +46,7 @@ public slots:
   void setXOffset(int);
   void setYOffset(int);
   void doExport();
-  void loadFile();
-  void addFile();
+  void loadFile(QString filename);
 
 protected:
   void closeEvent(QCloseEvent*);
@@ -59,11 +58,11 @@ private:
   SampleSorter *sorter;
   Canvas *canvas;
   AudioExtractor *extractor;
+  FileList *filelist;
   QScrollBar *yoffset;
   QScrollBar *yscale;
   QScrollBar *xscale;
   QScrollBar *xoffset;
-  QListWidget *filelist;
 };
 
 #endif/*__DRUMGIZMO_MAINWINDOW_H__*/
-- 
cgit v1.2.3