root/branches/jackMidi/gui/src/PlaylistEditor/PlaylistDialog.cpp @ 538

Revision 538, 21.7 KB (checked in by gabriel, 5 years ago)

Merge rev 465:505 from trunk

Line 
1/*
2 * Hydrogen
3 * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net]
4 *
5 * http://www.hydrogen-music.org
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY, without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20 *
21 */
22
23
24#include "PlaylistDialog.h"
25#include "../HydrogenApp.h"
26
27#include <hydrogen/LocalFileMng.h>
28#include <hydrogen/h2_exception.h>
29#include <hydrogen/Preferences.h>
30#include <hydrogen/hydrogen.h>
31#include <hydrogen/playlist.h>
32
33#include "../widgets/Button.h"
34
35#include <QTreeWidget>
36#include <QDomDocument>
37#include <QMessageBox>
38#include <QHeaderView>
39#include <QFileDialog>
40#include <vector>
41#include <cstdlib>
42#include <iostream>
43#include <fstream>
44
45using namespace H2Core;
46using namespace std;
47
48PlaylistDialog::PlaylistDialog ( QWidget* pParent )
49                : QDialog ( pParent )
50                , Object ( "PlayListDialog" )
51{
52
53        setupUi ( this );
54        INFOLOG ( "INIT" );
55        setWindowTitle ( trUtf8 ( "Play List Browser" ) );
56        setFixedSize ( width(), height() );
57        installEventFilter(this);
58
59       
60#ifdef WIN32
61        QStringList headers;
62        headers << trUtf8 ( "Song list" );
63        QTreeWidgetItem* header = new QTreeWidgetItem ( headers );
64        m_pPlaylistTree->setHeaderItem ( header );
65        m_pPlaylistTree->setAlternatingRowColors( true );
66
67        addSongBTN->setEnabled ( true );
68        loadListBTN->setEnabled ( true );
69        removeFromListBTN->setEnabled ( false );
70        removeFromListBTN->setEnabled ( false );
71        saveListBTN->setEnabled ( false );
72        nodePlayBTN->setEnabled ( false );
73        loadScriptBTN->hide();
74        removeScriptBTN->hide();
75        editScriptBTN->hide();
76        newScriptBTN->hide();
77        clearPlBTN->setEnabled ( false );
78
79        QVBoxLayout *sideBarLayout = new QVBoxLayout(sideBarWidget);
80        sideBarLayout->setSpacing(0);
81        sideBarLayout->setMargin(0);
82
83#else   
84        QStringList headers;
85        headers << trUtf8 ( "Song list" ) << trUtf8 ( "Script" ) << trUtf8 ( "exec Script" );
86        QTreeWidgetItem* header = new QTreeWidgetItem ( headers );
87        m_pPlaylistTree->setHeaderItem ( header );
88        m_pPlaylistTree->header()->resizeSection ( 0, 405 );
89        m_pPlaylistTree->header()->resizeSection ( 1, 405 );
90        m_pPlaylistTree->header()->resizeSection ( 2, 15 );
91        m_pPlaylistTree->setAlternatingRowColors( true );
92
93        addSongBTN->setEnabled ( true );
94        loadListBTN->setEnabled ( true );
95        removeFromListBTN->setEnabled ( false );
96        removeFromListBTN->setEnabled ( false );
97        saveListBTN->setEnabled ( false );
98        nodePlayBTN->setEnabled ( false );
99        loadScriptBTN->setEnabled ( false );
100        removeScriptBTN->setEnabled ( false );
101        editScriptBTN->setEnabled ( false );
102        clearPlBTN->setEnabled ( false );
103
104        QVBoxLayout *sideBarLayout = new QVBoxLayout(sideBarWidget);
105        sideBarLayout->setSpacing(0);
106        sideBarLayout->setMargin(0);
107#endif
108
109        // zoom-in btn
110        Button *up_btn = new Button(
111                        NULL,
112                        "/songEditor/btn_up_on.png",
113                        "/songEditor/btn_up_off.png",
114                        "/songEditor/btn_up_over.png",
115                        QSize(18, 13)
116        );
117
118        up_btn->setFontSize(7);
119        up_btn->setToolTip( trUtf8( "sort" ) );
120        connect(up_btn, SIGNAL(clicked(Button*)), this, SLOT(o_upBClicked()) );
121        sideBarLayout->addWidget(up_btn);
122
123        // zoom-in btn
124        Button *down_btn = new Button(
125                        NULL,
126                        "/songEditor/btn_down_on.png",
127                        "/songEditor/btn_down_off.png",
128                        "/songEditor/btn_down_over.png",
129                        QSize(18, 13)
130        );
131
132        down_btn->setFontSize(7);
133        down_btn->setToolTip( trUtf8( "sort" ) );
134        connect(down_btn, SIGNAL(clicked(Button*)), this, SLOT(o_downBClicked()));
135        sideBarLayout->addWidget(down_btn);
136       
137
138//restore the playlist
139        if( Hydrogen::get_instance()->m_PlayList.size() > 0 ){
140                for ( uint i = 0; i < Hydrogen::get_instance()->m_PlayList.size(); ++i ){
141                        QTreeWidgetItem* m_pPlaylistItem = new QTreeWidgetItem ( m_pPlaylistTree );
142                        m_pPlaylistItem->setText ( 0, Hydrogen::get_instance()->m_PlayList[i].m_hFile );
143                        m_pPlaylistItem->setText ( 1, Hydrogen::get_instance()->m_PlayList[i].m_hScript );
144                        if ( Hydrogen::get_instance()->m_PlayList[i].m_hScriptEnabled == "Use Script" ) {
145                                m_pPlaylistItem->setCheckState( 2, Qt::Checked );
146                        }else{
147                                m_pPlaylistItem->setCheckState( 2, Qt::Unchecked );
148                        }
149                }
150                removeFromListBTN->setEnabled ( true );
151                removeFromListBTN->setEnabled ( true );
152                saveListBTN->setEnabled ( true );
153                nodePlayBTN->setEnabled ( true );
154                loadScriptBTN->setEnabled ( true );
155                removeScriptBTN->setEnabled ( true );
156                editScriptBTN->setEnabled ( true );
157                clearPlBTN->setEnabled ( true );
158
159                //restore the selected item             
160                int selected = Playlist::get_instance()->getActiveSongNumber();
161                int Selected = Playlist::get_instance()->getSelectedSongNr();
162                if( selected == -1 && Selected == -1 ) return;
163               
164                int aselected = 0;
165                if( selected == -1 ){
166                        aselected = Selected;
167                }else
168                {
169                        aselected = selected ;
170                }
171                QTreeWidget* m_pPlaylist = m_pPlaylistTree;
172                QTreeWidgetItem* m_pPlaylistItem = m_pPlaylist->topLevelItem ( aselected );
173                m_pPlaylist->setCurrentItem ( m_pPlaylistItem );
174                }
175
176        QTimer *timer = new QTimer( this );
177        connect(timer, SIGNAL(timeout() ), this, SLOT( updateActiveSongNumber() ) );
178        timer->start( 1000 );   // update player control at 1 fps
179
180}
181
182
183PlaylistDialog::~PlaylistDialog()
184{
185        INFOLOG ( "DESTROY" );
186}
187
188
189void PlaylistDialog::on_addSongBTN_clicked()
190{
191        static QString songDir = Preferences::getInstance()->getDataDirectory()  + "/songs";;
192
193        QFileDialog *fd = new QFileDialog ( this );
194        fd->setFileMode ( QFileDialog::ExistingFile );
195        fd->setFilter ( "Hydrogen song (*.h2song)" );
196        fd->setDirectory ( songDir );
197
198        fd->setWindowTitle ( trUtf8 ( "Add Song to PlayList" ) );
199
200        QString filename = "";
201        if ( fd->exec() == QDialog::Accepted ){
202                filename = fd->selectedFiles().first();
203                updatePlayListNode ( filename );
204        }
205
206
207}
208
209
210void PlaylistDialog::on_removeFromListBTN_clicked()
211{
212
213        QTreeWidget* m_pPlaylist = m_pPlaylistTree;
214        QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem();
215        QTreeWidgetItem * m_pItem = m_pPlaylist->topLevelItem ( 1 );
216
217
218        if (m_pPlaylistItem == NULL){
219                QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Song selected!" ));
220                return;
221        }else
222        {
223                if (m_pItem == 0){
224                        m_pPlaylist->clear();
225                        Hydrogen::get_instance()->m_PlayList.clear();
226                        Playlist::get_instance()->setSelectedSongNr( -1 );
227                        Playlist::get_instance()->setActiveSongNumber( -1 );
228                        editScriptBTN->setEnabled ( false );
229                        nodePlayBTN->setEnabled ( false );
230                        removeFromListBTN->setEnabled ( false );
231                        saveListBTN->setEnabled ( false );
232                        loadScriptBTN->setEnabled ( false );
233                        clearPlBTN->setEnabled ( false );
234                        return;
235                }else
236                {       
237                        ///avoid segfault if the last item will be removed!!
238                        delete m_pPlaylistItem;
239                        updatePlayListVector();
240                }
241        }
242}
243
244
245void PlaylistDialog::on_clearPlBTN_clicked()
246{
247        QTreeWidget* m_pPlaylist = m_pPlaylistTree;
248       
249        m_pPlaylist->clear();
250        Hydrogen::get_instance()->m_PlayList.clear();
251        Playlist::get_instance()->setSelectedSongNr( -1 );
252        Playlist::get_instance()->setActiveSongNumber( -1 );
253        editScriptBTN->setEnabled ( false );
254        nodePlayBTN->setEnabled ( false );
255        removeFromListBTN->setEnabled ( false );
256        saveListBTN->setEnabled ( false );
257        loadScriptBTN->setEnabled ( false );
258        clearPlBTN->setEnabled ( false );
259        return;
260}
261
262
263void PlaylistDialog::updatePlayListNode ( QString file )
264{
265
266        QTreeWidgetItem* m_pPlaylistItem = new QTreeWidgetItem ( m_pPlaylistTree );
267        m_pPlaylistItem->setText ( 0, file );
268        m_pPlaylistItem->setText ( 1, "no Script" );
269        m_pPlaylistItem->setCheckState( 2, Qt::Unchecked );
270
271        updatePlayListVector();
272        loadScriptBTN->setEnabled ( true );
273        nodePlayBTN->setEnabled ( true );
274        removeFromListBTN->setEnabled ( true );
275        saveListBTN->setEnabled ( true );
276        clearPlBTN->setEnabled ( true );
277
278        QTreeWidget* m_pPlaylist = m_pPlaylistTree;
279        m_pPlaylist->setCurrentItem ( m_pPlaylistItem );
280
281}
282
283
284void PlaylistDialog::on_loadListBTN_clicked()
285{
286
287        static QString sDirectory =  Preferences::getInstance()->getDataDirectory()  + "playlists/" ;
288
289        QFileDialog *fd = new QFileDialog ( this );
290        fd->setFileMode ( QFileDialog::ExistingFile );
291        fd->setDirectory ( sDirectory );
292
293        fd->setWindowTitle ( trUtf8 ( "Load Playlist" ) );
294
295        QString filename = "";
296        if ( fd->exec() == QDialog::Accepted ){
297                filename = fd->selectedFiles().first();
298
299                LocalFileMng fileMng;
300                int err = fileMng.loadPlayList( filename.toStdString() );
301                if ( err != 0 ) {
302                        _ERRORLOG( "Error saving the playlist" );
303                }
304
305       
306                if(Hydrogen::get_instance()->m_PlayList.size() > 0){
307
308                        QTreeWidget* m_pPlaylist = m_pPlaylistTree;
309                        m_pPlaylist->clear();
310
311                        for ( uint i = 0; i < Hydrogen::get_instance()->m_PlayList.size(); ++i ){
312                                QTreeWidgetItem* m_pPlaylistItem = new QTreeWidgetItem ( m_pPlaylistTree );
313                                m_pPlaylistItem->setText ( 0, Hydrogen::get_instance()->m_PlayList[i].m_hFile );
314                                m_pPlaylistItem->setText ( 1, Hydrogen::get_instance()->m_PlayList[i].m_hScript );
315                                if ( Hydrogen::get_instance()->m_PlayList[i].m_hScriptEnabled == "Use Script" ) {
316                                        m_pPlaylistItem->setCheckState( 2, Qt::Checked );
317                                }else{
318                                        m_pPlaylistItem->setCheckState( 2, Qt::Unchecked );
319                                }
320                        }
321                        removeFromListBTN->setEnabled ( true );
322                        removeFromListBTN->setEnabled ( true );
323                        saveListBTN->setEnabled ( true );
324                        nodePlayBTN->setEnabled ( true );
325                        loadScriptBTN->setEnabled ( true );
326                        removeScriptBTN->setEnabled ( true );
327                        editScriptBTN->setEnabled ( true );
328                        clearPlBTN->setEnabled ( true );
329       
330
331                        QTreeWidgetItem* m_pPlaylistItem = m_pPlaylist->topLevelItem ( 0 );
332                        m_pPlaylist->setCurrentItem ( m_pPlaylistItem );
333                        Playlist::get_instance()->setSelectedSongNr( 0 );
334//                      Playlist::get_instance()->setNextSongByNumber( 0 );
335                }
336
337        }
338}
339
340
341void PlaylistDialog::on_newScriptBTN_clicked()
342{
343
344        Preferences *pPref = Preferences::getInstance();
345
346        QString sDirectory = ( Preferences::getInstance()->getDataDirectory()  + "scripts/");
347        QFileDialog *fd = new QFileDialog ( this );
348        fd->setFileMode ( QFileDialog::AnyFile );
349        fd->setFilter ( trUtf8 ( "Hydrogen Scripts (*.sh)" ) );
350        fd->setAcceptMode ( QFileDialog::AcceptSave );
351        fd->setWindowTitle ( trUtf8 ( "New Script" ) );
352        fd->setDirectory ( sDirectory );
353
354        QString defaultFilename;
355
356                defaultFilename += ".sh";
357
358
359        fd->selectFile ( defaultFilename );
360
361        QString filename = "";
362        if ( fd->exec() == QDialog::Accepted )
363        {
364                filename = fd->selectedFiles().first();
365        }else
366        {
367                return;
368        }
369       
370        std::string name = filename.toStdString();
371
372        char *file;
373        file = new char[name.length() + 1];
374        strcpy(file, name.c_str());
375
376        ofstream newfile;
377        newfile.open ( file );
378        newfile << "#!/bin/sh\n\n#have phun";
379        newfile.close();
380        delete [] file;
381
382       
383        if( pPref->getDefaultEditor() == ""){
384                QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Default Editor Set. Please set your Default Editor\nDo not use a console based Editor\nSorry, but this will not work for the moment." ) );
385
386                static QString lastUsedDir = "/usr/bin/";
387       
388                QFileDialog *fd = new QFileDialog ( this );
389                fd->setFileMode ( QFileDialog::ExistingFile );
390                fd->setDirectory ( lastUsedDir );
391       
392                fd->setWindowTitle ( trUtf8 ( "Set your Default Editor" ) );
393       
394                QString filename = "";
395                if ( fd->exec() == QDialog::Accepted ){
396                        filename = fd->selectedFiles().first();
397       
398                        pPref->setDefaultEditor( filename );
399                }               
400        }
401
402        std::string  openfile = pPref->getDefaultEditor().toStdString() + " " + filename.toStdString() + "&";
403
404        char *ofile;
405        ofile = new char[openfile.length() + 1];
406        strcpy(ofile, openfile.c_str());
407        std::system( ofile );
408        delete [] ofile;
409        return;
410
411       
412}
413
414
415void PlaylistDialog::on_saveListBTN_clicked()
416{
417
418        QString sDirectory =  Preferences::getInstance()->getDataDirectory()  + "playlists/";
419        QFileDialog *fd = new QFileDialog ( this );
420        fd->setFileMode ( QFileDialog::AnyFile );
421        fd->setFilter ( trUtf8 ( "Hydrogen Playlist (*.h2playlist)" ) );
422        fd->setAcceptMode ( QFileDialog::AcceptSave );
423        fd->setWindowTitle ( trUtf8 ( "Save Playlist" ) );
424        fd->setDirectory ( sDirectory );
425
426
427        QString defaultFilename;
428
429                defaultFilename += ".h2playlist";
430
431
432        fd->selectFile ( defaultFilename );
433
434        QString filename = "";
435        if ( fd->exec() == QDialog::Accepted )
436        {
437                filename = fd->selectedFiles().first();
438        }
439
440        LocalFileMng fileMng;
441        int err = fileMng.savePlayList( filename.toStdString() );
442        if ( err != 0 ) {
443                _ERRORLOG( "Error saving the playlist" );
444        }
445}
446
447
448void PlaylistDialog::on_loadScriptBTN_clicked()
449{
450       
451        QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem();
452        if ( m_pPlaylistItem == NULL ){
453                QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Song in List or no Song selected!" ) );
454                return;
455        }
456
457        static QString lastUsedDir =  Preferences::getInstance()->getDataDirectory()  + "scripts/";
458
459        QFileDialog *fd = new QFileDialog ( this );
460        fd->setFileMode ( QFileDialog::ExistingFile );
461        fd->setDirectory ( lastUsedDir );
462        fd->setFilter ( trUtf8 ( "Hydrogen Playlist (*.sh)" ) );
463        fd->setWindowTitle ( trUtf8 ( "Add Script to selected Song" ) );
464
465        QString filename = "";
466        if ( fd->exec() == QDialog::Accepted ){
467                filename = fd->selectedFiles().first();
468
469                std::string filetest = filename.toStdString();
470                int error = filetest.rfind(" ");
471                if(error >= 0){
472                        QMessageBox::information ( this, "Hydrogen", trUtf8 ( "Script name or path to the script contains whitespaces.\nIMPORTANT\nThe path to the script and the scriptname must without whitespaces.") );
473                        return;
474                }
475
476                m_pPlaylistItem->setText ( 1, filename );
477                editScriptBTN->setEnabled ( true );
478                removeScriptBTN->setEnabled ( true );
479                updatePlayListVector();
480
481        }
482}
483
484
485void PlaylistDialog::on_removeScriptBTN_clicked()
486{
487        QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem();
488
489
490        if (m_pPlaylistItem == NULL){
491                QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Song selected!" ));
492                return;
493        }else{
494                QString selected = "";
495                selected = m_pPlaylistItem->text ( 1 );
496                if( selected == "no Script"){
497                        QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Script in use!" ));
498                        return;
499                }else
500                {
501                        m_pPlaylistItem->setText ( 1, "no Script" );
502                        m_pPlaylistItem->setCheckState( 2, Qt::Unchecked );
503                        updatePlayListVector();
504                }
505        }
506
507}
508
509
510void PlaylistDialog::on_editScriptBTN_clicked()
511{
512        Preferences *pPref = Preferences::getInstance();
513        if( pPref->getDefaultEditor() == ""){
514                QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Default Editor Set. Please set your Default Editor\nDo not use a console based Editor\nSorry, but this will not work for the moment." ) );
515
516                static QString lastUsedDir = "/usr/bin/";
517       
518                QFileDialog *fd = new QFileDialog ( this );
519                fd->setFileMode ( QFileDialog::ExistingFile );
520                fd->setDirectory ( lastUsedDir );
521       
522                fd->setWindowTitle ( trUtf8 ( "Set your Default Editor" ) );
523       
524                QString filename = "";
525                if ( fd->exec() == QDialog::Accepted ){
526                        filename = fd->selectedFiles().first();
527       
528                        pPref->setDefaultEditor( filename );
529                }               
530        }
531
532        QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem();
533
534        if ( m_pPlaylistItem == NULL ){
535                QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Song selected!" ) );
536                return;
537        }
538        QString selected = "";
539        selected = m_pPlaylistItem->text ( 1 );
540
541        std::string filename = pPref->getDefaultEditor().toStdString() + " " + selected.toStdString() + "&";
542
543        if( selected == "no Script"){
544                QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Script selected!" ));
545                return;
546        }
547
548        char *file;
549        file = new char[ filename.length() + 1 ];
550        strcpy( file , filename.c_str() );
551        std::system( file );
552        delete [] file;
553        return;
554}
555
556
557void PlaylistDialog::o_upBClicked()
558{       
559
560        Playlist* pList = Playlist::get_instance();
561
562        QTreeWidget* m_pPlaylist = m_pPlaylistTree;
563        QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem();
564        int index = m_pPlaylist->indexOfTopLevelItem ( m_pPlaylistItem );
565
566        if (index == 0 ) return;
567
568        QTreeWidgetItem* tmpPlaylistItem = m_pPlaylist->takeTopLevelItem ( index );
569
570        m_pPlaylist->insertTopLevelItem ( index -1, tmpPlaylistItem );
571        m_pPlaylist->setCurrentItem ( tmpPlaylistItem );
572
573        if ( pList->getSelectedSongNr() > 0 )
574                pList->setSelectedSongNr( pList->getSelectedSongNr() -1 );
575        if ( pList->getActiveSongNumber() > 0 )
576                pList->setActiveSongNumber( pList->getActiveSongNumber() -1 );
577
578        updatePlayListVector();
579
580}
581
582
583void PlaylistDialog::o_downBClicked()
584{
585
586        Playlist* pList = Playlist::get_instance();
587
588        QTreeWidget* m_pPlaylist = m_pPlaylistTree;
589        int length = m_pPlaylist->topLevelItemCount();
590        QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem();
591        int index = m_pPlaylist->indexOfTopLevelItem ( m_pPlaylistItem );
592
593        if ( index == length - 1)
594                        return;
595
596
597        QTreeWidgetItem* tmpPlaylistItem = m_pPlaylist->takeTopLevelItem ( index );
598
599        m_pPlaylist->insertTopLevelItem ( index +1, tmpPlaylistItem );
600        m_pPlaylist->setCurrentItem ( tmpPlaylistItem );
601
602        if ( pList->getSelectedSongNr() > 0 )
603                pList->setSelectedSongNr( pList->getSelectedSongNr() +1 );
604        if (pList ->getActiveSongNumber() > 0 )
605                pList->setActiveSongNumber( pList->getActiveSongNumber() +1 );
606
607        updatePlayListVector();
608
609}
610
611
612void PlaylistDialog::on_m_pPlaylistTree_itemClicked ( QTreeWidgetItem * item, int column )
613{
614        if ( column == 2 ){
615                QString selected = "";
616                selected = item->text ( 1 );
617
618                if( selected == "no Script"){
619                        QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Script!" ));
620                        item->setCheckState( 2, Qt::Unchecked );
621                        return;
622                }
623                updatePlayListVector();
624        }
625        return;
626}
627
628
629void PlaylistDialog::on_nodePlayBTN_clicked()
630{
631        QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem();
632        if ( m_pPlaylistItem == NULL ){
633                QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Song selected!" ) );
634                return;
635        }
636        QString selected = "";
637        selected = m_pPlaylistItem->text ( 0 );
638
639       
640        HydrogenApp *pH2App = HydrogenApp::getInstance();
641        Hydrogen *engine = Hydrogen::get_instance();
642       
643
644        if ( engine->getState() == STATE_PLAYING ){
645                engine->sequencer_stop();
646        }
647
648        LocalFileMng mng;
649        Song *pSong = Song::load ( selected );
650        if ( pSong == NULL ){
651                QMessageBox::information ( this, "Hydrogen", trUtf8 ( "Error loading song." ) );
652                return;
653        }
654
655        pH2App->setSong ( pSong );
656        engine->setSelectedPatternNumber ( 0 );
657
658        Hydrogen::get_instance()->sequencer_play();
659}
660
661
662void PlaylistDialog::on_nodeStopBTN_clicked()
663{
664        Hydrogen::get_instance()->sequencer_stop();
665        Hydrogen::get_instance()->setPatternPos ( 0 );
666}
667
668
669void PlaylistDialog::on_m_pPlaylistTree_itemDoubleClicked ()
670{
671
672        QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem();
673        if ( m_pPlaylistItem == NULL ){
674                QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Song selected!" ) );
675                return;
676        }
677        QString selected = "";
678        selected = m_pPlaylistItem->text ( 0 );
679
680        QTreeWidget* m_pPlaylist = m_pPlaylistTree;
681        int index = m_pPlaylist->indexOfTopLevelItem ( m_pPlaylistItem );
682        Playlist::get_instance()->setSelectedSongNr( index );
683        Playlist::get_instance()->setActiveSongNumber( index );
684       
685        HydrogenApp *pH2App = HydrogenApp::getInstance();
686        Hydrogen *engine = Hydrogen::get_instance();
687       
688
689        if ( engine->getState() == STATE_PLAYING ){
690                engine->sequencer_stop();
691        }
692
693        LocalFileMng mng;
694        Song *pSong = Song::load ( selected );
695        if ( pSong == NULL ){
696                QMessageBox::information ( this, "Hydrogen", trUtf8 ( "Error loading song." ) );
697                return;
698        }
699
700        pH2App->setSong ( pSong );
701        engine->setSelectedPatternNumber ( 0 );
702
703
704        pH2App->setStatusBarMessage( trUtf8( "Playlist: Set song No. %1" ).arg( index +1 ), 5000 );
705
706///exec script
707///this is very very simple and only an experiment
708#ifdef WIN32
709        //I know nothing about windows scripts -wolke-
710        return;
711#else
712        QString execscript = "";
713        selected = m_pPlaylistItem->text ( 1 );
714        bool execcheckbox = m_pPlaylistItem->checkState ( 2 );
715        std::string filename = selected.toStdString();
716
717        if( execcheckbox == false){
718                //QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Script selected!" ));
719                return;
720        }
721
722        if( execscript == "Script not used"){
723                //QMessageBox::information ( this, "Hydrogen", trUtf8 ( "Script not in use!" ));
724                return;
725        }
726
727        char *file;
728        file = new char[ filename.length() + 1 ];
729        strcpy( file , filename.c_str() );
730        std::system( file );
731        delete [] file;
732        return;
733#endif
734
735}
736
737
738void PlaylistDialog::updatePlayListVector()
739{
740        QTreeWidget* m_pPlaylist = m_pPlaylistTree;
741        int length = m_pPlaylist->topLevelItemCount();
742
743        Hydrogen::get_instance()->m_PlayList.clear();
744
745
746
747        for (int i = 0 ;i < length; i++){
748                QTreeWidgetItem * m_pPlaylistItem = m_pPlaylist->topLevelItem ( i );   
749               
750                QString execval = "";
751                bool execcheckbox = m_pPlaylistItem->checkState ( 2 );
752                if ( execcheckbox == true ) {
753                        execval = "Use Script";
754                }else{
755                        execval = "Script not used";
756                }
757                Hydrogen::HPlayListNode playListItem;
758                playListItem.m_hFile = m_pPlaylistItem->text ( 0 );
759                playListItem.m_hScript = m_pPlaylistItem->text ( 1 );
760                playListItem.m_hScriptEnabled = execval;
761
762                Hydrogen::get_instance()->m_PlayList.push_back( playListItem );
763        }
764}
765
766
767void PlaylistDialog::updateActiveSongNumber()
768{                       
769        int selected = Playlist::get_instance()->getActiveSongNumber();
770        if ( selected == -1 )
771                return;
772       
773        QTreeWidget* m_pPlaylist = m_pPlaylistTree;
774        QTreeWidgetItem* m_pPlaylistItem = m_pPlaylist->topLevelItem ( selected );     
775        m_pPlaylist->setCurrentItem ( m_pPlaylistItem );
776}
777
778
779bool PlaylistDialog::eventFilter ( QObject *o, QEvent *e )
780{
781       
782        UNUSED ( o );
783        if ( e->type() == QEvent::KeyPress )
784        {       
785                QKeyEvent *k = ( QKeyEvent * ) e;
786
787                switch ( k->key() )
788                {
789                        case  Qt::Key_F5 :
790                                if( Hydrogen::get_instance()->m_PlayList.size() == 0)
791                                        break;
792                                Playlist::get_instance()->setPrevSongPlaylist();
793                                return TRUE;
794                                break;
795
796                        case  Qt::Key_F6 :
797                                if( Hydrogen::get_instance()->m_PlayList.size() == 0)
798                                        break;
799                                Playlist::get_instance()->setNextSongPlaylist();
800                                return TRUE;
801                                break;
802                }
803
804        }
805        else
806        {
807                return FALSE; // standard event processing
808        }
809
810return NULL;
811}
812
Note: See TracBrowser for help on using the browser.