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

Revision 398, 21.1 KB (checked in by gabriel, 5 years ago)

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