playlistselection.cpp
来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· C++ 代码 · 共 223 行
CPP
223 行
/*************************************************************************** * Copyright (C) 2005 Ian Monroe <ian@monroe.nu> * * * * 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. * * * ***************************************************************************/#define DEBUG_PREFIX "PlaylistSelection"#include "amarok.h" //foreach#include "debug.h"#include "newdynamic.h"#include "dynamicmode.h"#include "playlistbrowser.h"#include "playlistselection.h"#include <qcheckbox.h>#include <qgroupbox.h>#include <qlabel.h>#include <qlayout.h>#include <qlistview.h>#include <qsizepolicy.h>#include <qstringlist.h>#include <kapplication.h>#include <kiconloader.h>#include <knuminput.h>#include <klistview.h>#include <klocale.h>PlaylistSelection::PlaylistSelection( QWidget* parent, const char* name ) : KListView( parent, name ){ addColumn( i18n("Select Playlists") ); setRootIsDecorated( true ); PlaylistBrowserView* browserTree = PlaylistBrowser::instance()->getListView(); QListViewItem* browserItem = browserTree->firstChild(); //load into the tree the first two items, which is the smart playlist and the playlist for( int i = 0; i<2; i++ ) { QListViewItem* newItem = new QListViewItem( this, browserItem->text(0) ); newItem->setPixmap( 0, *browserItem->pixmap(0) ); loadChildren( browserItem, newItem ); newItem->setOpen( true ); browserItem = browserItem->nextSibling(); }}void PlaylistSelection::loadChildren( QListViewItem* browserParent, QListViewItem* selectionParent ){ QListViewItem* browserChild = browserParent->firstChild(); while( browserChild ) { SelectionListItem* selectionChild = new SelectionListItem( selectionParent, browserChild->text(0), browserChild ); if ( browserChild->pixmap(0) ) selectionChild->setPixmap( 0, *browserChild->pixmap(0) ); if( browserChild->childCount() > 0 ) loadChildren( browserChild, selectionChild ); browserChild = browserChild->nextSibling(); }}/////////////////////////////////// ConfigDynamic////////////////////////////////namespace ConfigDynamic{ KDialogBase* basicDialog( QWidget* parent ) { KDialogBase* dialog = new KDialogBase( parent, "new dynamic", true, i18n("Create Dynamic Playlist"), KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, true ); kapp->setTopWidget( dialog ); dialog->setCaption( i18n("Dynamic Mode") ); NewDynamic* nd = new NewDynamic( dialog, "new dynamic"); //QSizePolicy policy; //policy.setHorData(QSizePolicy::Maximum); //dialog->setSizePolicy(policy); dialog->setMainWidget( nd ); return dialog; } void dynamicDialog( QWidget* parent ) { KDialogBase* dialog = basicDialog( parent ); NewDynamic* nd = static_cast<NewDynamic*>(dialog->mainWidget()); nd->m_mixLabel->setText( i18n("Add Dynamic Playlist") ); if( dialog->exec() == QDialog::Accepted ) addDynamic( nd ); } void editDynamicPlaylist( QWidget* parent, DynamicMode* mode ) { KDialogBase* dialog = basicDialog( parent ); NewDynamic* nd = static_cast<NewDynamic*>(dialog->mainWidget()); nd->m_name->setText( mode->title() ); nd->m_cycleTracks->setChecked( mode->cycleTracks() ); nd->m_upcomingIntSpinBox->setValue( mode->upcomingCount() ); nd->m_previousIntSpinBox->setValue( mode->previousCount() ); if( mode->appendType() == DynamicMode::CUSTOM ) { //check items in the custom playlist nd->m_mixLabel->setText( i18n("Edit Dynamic Playlist") ); QStringList items = mode->items(); foreach( items ) { QCheckListItem* current = dynamic_cast<QCheckListItem*>( Amarok::findItemByPath(nd->selectPlaylist, (*it)) ); if( current ) current->setOn(true); } } else //if its a suggested song or a random mix... { nd->selectPlaylist->hide(); nd->layout()->remove( nd->selectPlaylist ); // don't allow editing the name of the default random and suggested dynamics nd->m_name->hide(); nd->m_playlistName_label->hide(); if( mode->appendType() == DynamicMode::RANDOM ) { nd->m_mixLabel->setText( i18n("Random Mix") ); } else { nd->m_mixLabel->setText( i18n("Suggested Songs") ); } } nd->updateGeometry(); dialog->resize( nd->minimumSizeHint() ); if( dialog->exec() == QDialog::Accepted ) { loadDynamicMode( mode, nd ); PlaylistBrowser::instance()->getDynamicCategory()->sortChildItems( 0, true ); PlaylistBrowser::instance()->saveDynamics(); } } void loadDynamicMode( DynamicMode* saveMe, NewDynamic* dialog ) { saveMe->setTitle( dialog->m_name->text().replace( "\n", " " ) ); saveMe->setCycleTracks( dialog->m_cycleTracks->isChecked() ); saveMe->setUpcomingCount( dialog->m_upcomingIntSpinBox->value() ); saveMe->setPreviousCount( dialog->m_previousIntSpinBox->value() ); QStringList list; debug() << "Saving custom list..." << endl; QListViewItemIterator it( dialog->selectPlaylist, QListViewItemIterator::Checked ); while( it.current() ) { SelectionListItem *item = static_cast<SelectionListItem*>(it.current()); list.append( item->name() ); ++it; } saveMe->setItems( list ); } void addDynamic( NewDynamic* dialog ) { QListViewItem *parent = PlaylistBrowser::instance()->getDynamicCategory(); DynamicEntry *saveMe = new DynamicEntry( parent, 0, dialog->m_name->text().replace( "\n", " " ) ); saveMe->setAppendType( DynamicMode::CUSTOM ); loadDynamicMode( saveMe, dialog ); parent->sortChildItems( 0, true ); parent->setOpen( true ); PlaylistBrowser::instance()->saveDynamics(); }}/////////////////////////////////// SelectionListItem////////////////////////////////SelectionListItem::SelectionListItem( QCheckListItem * parent, const QString& text, QListViewItem* browserEquivalent ) : QCheckListItem( parent, text, QCheckListItem::CheckBox ) , m_browserEquivalent( browserEquivalent ){ }SelectionListItem::SelectionListItem( QListViewItem * parent, const QString& text, QListViewItem* browserEquivalent ) : QCheckListItem( parent, text, QCheckListItem::CheckBox ) , m_browserEquivalent( browserEquivalent ){ }void SelectionListItem::stateChange( bool b ){ QListViewItem* it = firstChild(); while( it ) { static_cast<SelectionListItem*>(it)->setOn( b ); //calls stateChange, so is recursive it = it->nextSibling(); }}QStringSelectionListItem::name() const{ QString fullName = text(0).replace('/', "\\/"); QListViewItem *p = parent(); while ( p ) { fullName.prepend( p->text(0).replace('/', "\\/") + "/" ); p = p->parent(); } return fullName;}#include "playlistselection.moc"
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?