summaryrefslogtreecommitdiffstats
path: root/kmid/collectdlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kmid/collectdlg.cpp')
-rw-r--r--kmid/collectdlg.cpp307
1 files changed, 307 insertions, 0 deletions
diff --git a/kmid/collectdlg.cpp b/kmid/collectdlg.cpp
new file mode 100644
index 00000000..fb79667b
--- /dev/null
+++ b/kmid/collectdlg.cpp
@@ -0,0 +1,307 @@
+/**************************************************************************
+
+ collectdlg.cpp - The collections manager dialog
+ Copyright (C) 1998 Antonio Larrosa Jimenez
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Send comments and bug fixes to larrosa@kde.org
+ or to Antonio Larrosa, Rio Arnoya, 10 5B, 29006 Malaga, Spain
+
+***************************************************************************/
+#include <qpushbutton.h>
+#include <qlistbox.h>
+#include <qlabel.h>
+
+#include <kapplication.h>
+#include <kfiledialog.h>
+#include <klocale.h>
+#include <kinputdialog.h>
+#include <kmessagebox.h>
+#include <kurl.h>
+#include <kpushbutton.h>
+#include <kstdguiitem.h>
+#include "collectdlg.h"
+#include "version.h"
+#include "songlist.h"
+#include "slman.h"
+
+CollectionDialog::CollectionDialog(SLManager *slm,int selC,QWidget *parent,const char *name) : QDialog(parent,name,TRUE)
+{
+setCaption(i18n("Collections Manager"));
+ok=new KPushButton(KStdGuiItem::ok(),this);
+ok->setGeometry(140,200,100,30);
+connect(ok,SIGNAL(clicked()),SLOT(accept()) );
+cancel=new KPushButton(KStdGuiItem::cancel(),this);
+cancel->setGeometry(250,200,100,30);
+connect(cancel,SIGNAL(clicked()),SLOT(reject()) );
+
+label=new QLabel(i18n("Available collections:"),this);
+label->adjustSize();
+label->move(10,10);
+collections=new QListBox(this,"collectionlist");
+collections->setGeometry(10,20+label->height(),340,90);
+connect(collections,SIGNAL(highlighted(int)),SLOT(collectionselected(int)));
+connect(collections,SIGNAL(selected(int)),SLOT(changeCollectionName(int)));
+slman=slm;
+for (int i=0;i<=slman->numberOfCollections();i++)
+ {
+ collections->insertItem(i18n( slman->getCollectionName(i) ),i);
+#ifdef COLLECTDLGDEBUG
+ printf("Name : %s\n",slman->getCollectionName(i));
+#endif
+ };
+selectedC=selC;
+#ifdef COLLECTDLGDEBUG
+printf("selectedC : %d\n",selectedC);
+#endif
+
+label2=new QLabel(i18n("Songs in selected collection:"),this);
+label2->adjustSize();
+label2->move(10,collections->y()+collections->height()+10);
+
+songs=new QListBox(this,"songlist");
+songs->setGeometry(10,label2->y()+label2->height()+10,340,120);
+connect(songs,SIGNAL(highlighted(int)),SLOT(songselected(int)));
+currentsl=slman->getCollection(selectedC);
+if (slman->numberOfCollections()>0)
+ {
+ collections->setCurrentItem(selectedC);
+ collections->centerCurrentItem();
+ };
+//fillInSongList();
+newC=new QPushButton(i18n("&New..."),this);
+newC->adjustSize();
+newC->move(360,collections->y()+5);
+connect(newC,SIGNAL(clicked()),SLOT(newCollection()) );
+copyC=new QPushButton(i18n("&Copy..."),this);
+copyC->adjustSize();
+copyC->move(360,newC->y()+newC->height()+5);
+connect(copyC,SIGNAL(clicked()),SLOT(copyCollection()) );
+deleteC=new QPushButton(i18n("Delete"),this);
+deleteC->adjustSize();
+deleteC->move(360,copyC->y()+copyC->height()+5);
+connect(deleteC,SIGNAL(clicked()),SLOT(deleteCollection()) );
+
+addS=new QPushButton(i18n("&Add..."),this);
+addS->adjustSize();
+addS->move(360,songs->y()+5);
+connect(addS,SIGNAL(clicked()),SLOT(addSong()) );
+delS=new QPushButton(i18n("&Remove"),this);
+delS->adjustSize();
+delS->move(360,addS->y()+addS->height()+5);
+connect(delS,SIGNAL(clicked()),SLOT(removeSong()) );
+
+ok->move(ok->x(),songs->y()+songs->height()+10);
+cancel->move(ok->x()+ok->width()+5,ok->y());
+
+setMinimumSize(400,ok->y()+ok->height()+5);
+//setMaximumSize(360,240);
+}
+
+void CollectionDialog::collectionselected(int idx)
+{
+selectedC=idx;
+#ifdef COLLECTDLGDEBUG
+printf("Selected collection: %d\n",selectedC);
+#endif
+currentsl=slman->getCollection(selectedC);
+fillInSongList();
+}
+
+void CollectionDialog::fillInSongList(void)
+{
+QString qs;
+songs->clear();
+if (currentsl!=NULL)
+ {
+ currentsl->iteratorStart();
+ int i=0;
+ while (!currentsl->iteratorAtEnd())
+ {
+ qs=QString(currentsl->getIteratorName());
+ //KURL::decode(qs);
+ songs->insertItem(qs,i);
+ currentsl->iteratorNext();
+ i++;
+ };
+ songs->setCurrentItem(currentsl->getActiveSongID()-1);
+ songs->centerCurrentItem();
+ };
+}
+
+void CollectionDialog::songselected(int idx)
+{
+selectedS=idx;
+currentsl->setActiveSong(idx+1);
+
+#ifdef COLLECTDLGDEBUG
+printf("Selected song: %d\n",selectedS);
+#endif
+}
+
+void CollectionDialog::newCollection()
+{
+ bool ok;
+ QString name = KInputDialog::getText( i18n( "New Collection" ),
+ i18n( "Enter the name of the new collection:" ), QString::null,
+ &ok, this );
+
+ if (ok)
+ {
+ int i=slman->createCollection(name.ascii());
+ if (i==-1)
+ {
+ QString s = i18n("The name '%1' is already used").arg(name);
+ KMessageBox::sorry(this, s);
+ }
+ else
+ {
+ collections->insertItem(name,i);
+ collections->setCurrentItem(i);
+ collections->centerCurrentItem();
+ };
+ };
+}
+
+void CollectionDialog::copyCollection()
+{
+SongList *src=currentsl;
+int i;
+ bool ok;
+ QString name = KInputDialog::getText( i18n( "Copy Collection" ),
+ i18n( "Enter the name of the copy collection:" ), QString::null,
+ &ok, this );
+
+ if (ok)
+ {
+ i=slman->createCollection(name.ascii());
+ if (i==-1)
+ {
+ QString s = i18n("The name '%1' is already used").arg(name);
+ KMessageBox::sorry(this, s);
+ }
+ else
+ {
+ collections->insertItem(name,i);
+ SongList *tgt=slman->getCollection(i);
+ src->iteratorStart();
+ while (!src->iteratorAtEnd())
+ {
+ tgt->AddSong(src->getIteratorName());
+ src->iteratorNext();
+ };
+ collections->setCurrentItem(i);
+ collections->centerCurrentItem();
+ };
+ };
+}
+
+void CollectionDialog::deleteCollection()
+{
+if (selectedC==0) return;
+slman->deleteCollection(selectedC);
+int i=selectedC;
+collections->removeItem(selectedC);
+collections->setCurrentItem(i);
+collections->centerCurrentItem();
+}
+
+void CollectionDialog::changeCollectionName(int idx)
+{
+if (idx==0) return;
+ bool ok;
+
+ QString name = KInputDialog::getText( i18n( "Change Collection Name" ),
+ i18n( "Enter the name of the selected collection:" ), QString::null,
+ &ok, this );
+
+ if (ok)
+ {
+ if (slman->getCollection(name.ascii())!=NULL)
+ {
+ QString s = i18n("The name '%1' is already used").arg(name);
+ KMessageBox::sorry(this, s);
+ }
+ else
+ {
+ slman->changeCollectionName(idx,name.ascii());
+ collections->changeItem(name,idx);
+ };
+ };
+}
+
+void CollectionDialog::addSong(const KURL &url)
+{
+ if (currentsl==NULL) return;
+ if( url.isEmpty()) return;
+
+ int id=currentsl->AddSong(QFile::encodeName(url.path()));
+
+ if (id==-1)
+ {
+ printf("Couldn't add song to collection\n");
+ return;
+ };
+
+ songs->insertItem(url.fileName(),id-1);
+}
+
+
+void CollectionDialog::addSong()
+{
+ KURL::List urls = KFileDialog::getOpenURLs(":MidiFiles",
+ "*.kar *.mid *.kar.gz *.mid.gz\n*.kar *.kar.gz\n*.mid *.mid.gz\n*",this);
+
+ KURL::List::Iterator it;
+ for( it = urls.begin(); it != urls.end(); ++it )
+ addSong(*it);
+
+}
+
+void CollectionDialog::removeSong()
+{
+if (currentsl==NULL) return;
+currentsl->DelSong(selectedS+1);
+int i=selectedS;
+songs->removeItem(selectedS);
+songs->setCurrentItem(i);
+}
+
+void CollectionDialog::resizeEvent(QResizeEvent *)
+{
+int maxw=newC->width();
+if (copyC->width()>maxw) maxw=copyC->width();
+if (deleteC->width()>maxw) maxw=deleteC->width();
+if (addS->width()>maxw) maxw=addS->width();
+if (delS->width()>maxw) maxw=delS->width();
+
+newC->setGeometry(width()-maxw-5,newC->y(),maxw,newC->height());
+copyC->setGeometry(width()-maxw-5,copyC->y(),maxw,copyC->height());
+deleteC->setGeometry(width()-maxw-5,deleteC->y(),maxw,deleteC->height());
+
+collections->resize(width()-maxw-20,(height()*35)/100);
+label2->move(10,collections->y()+collections->height()+10);
+songs->setGeometry(10,label2->y()+label2->height()+10,width()-maxw-20,height()-(label2->y()+label2->height()+10+ok->height()+10));
+addS->setGeometry(width()-maxw-5,songs->y()+5,maxw,addS->height());
+delS->setGeometry(width()-maxw-5,addS->y()+addS->height()+5,maxw,delS->height());
+
+cancel->move(width()-cancel->width()-5,height()-cancel->height()-5);
+ok->move(cancel->x()-5-ok->width(),height()-ok->height()-5);
+}
+
+int CollectionDialog::selectedC=0;
+int CollectionDialog::selectedS=0;
+#include "collectdlg.moc"