Index: trunk/extragear/multimedia/amarok/src/configdialog.cpp =================================================================== --- trunk/extragear/multimedia/amarok/src/configdialog.cpp (revision 663402) +++ trunk/extragear/multimedia/amarok/src/configdialog.cpp (revision 663403) @@ -1,451 +1,451 @@ /*************************************************************************** begin : 2004/02/07 copyright : (C) Mark Kretschmann email : markey@web.de ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "amarok.h" #include "amarokconfig.h" #include "app.h" #include "collectiondb.h" #include "config-amarok.h" // Has USE_MYSQL #include "configdialog.h" #include "contextbrowser.h" #include "dbsetup.h" #include "debug.h" #include "directorylist.h" #include "enginecontroller.h" #include "mediabrowser.h" #include "mediumpluginmanager.h" #include "Options1.h" #include "Options2.h" #include "Options4.h" #include "Options5.h" #include "Options7.h" #include "Options8.h" #include "osd.h" #include "playlistwindow.h" #include "plugin/pluginconfig.h" #include "pluginmanager.h" #include #include #include #include #include #include #include #include #include #include #include #include //Added by qt3to4: #include #include #include //kapp #include #include #include #include #include #include -#undef Q_WS_X11 //HACK: The OSD is broken anyway +//#undef Q_WS_X11 //HACK: The OSD is broken anyway namespace Amarok { int databaseTypeCode( const QString type ) { // can't use kconfigxt for the database comboxbox since we need the DBConnection id and not the index int dbType = DbConnection::sqlite; if ( type == "MySQL") dbType = DbConnection::mysql; else if ( type == "Postgresql" ) dbType = DbConnection::postgresql; return dbType; } } ////////////////////////////////////////////////////////////////////////////////////////// // PUBLIC ////////////////////////////////////////////////////////////////////////////////////////// AmarokConfigDialog::AmarokConfigDialog( QWidget *parent, const char* name, KConfigSkeleton *config ) : KConfigDialog( parent, name, config ) , m_engineConfig( 0 ) , m_opt4( 0 ) { setAttribute( Qt::WA_DeleteOnClose ); // IMPORTANT Don't simply change the page names, they are used as identifiers in other parts of the app. m_opt1 = new Options1( 0, "General" ); #ifdef Q_WS_MAC m_opt1->kcfg_ShowSplashscreen->setEnabled(false); m_opt1->kcfg_ShowTrayIcon->setEnabled(false); m_opt1->kcfg_AnimateTrayIcon->setEnabled(false); #endif m_opt2 = new Options2( 0, "Appearance" ); m_opt4 = new Options4( 0, "Playback" ); #ifdef Q_WS_X11 Options5 *opt5 = new Options5( 0, "OSD" ); #endif KVBox *opt6 = new KVBox; m_opt7 = new Options7( 0, "Collection" ); Options8 *opt8 = new Options8( 0, "Scrobbler" ); KVBox *opt9 = new KVBox; // Sound System opt6->setObjectName( "Engine" ); opt6->setSpacing( KDialog::spacingHint() ); QWidget *groupBox, *aboutEngineButton; groupBox = new Q3GroupBox( 2, Qt::Horizontal, i18n("Sound System"), opt6 ); m_engineConfigFrame = new Q3GroupBox( 1, Qt::Horizontal, opt6 ); m_soundSystem = new QComboBox; m_soundSystem->setParent( groupBox ); aboutEngineButton = new QPushButton( i18n("About"), groupBox ); m_soundSystem->setToolTip( i18n("Click to select the sound system to use for playback.") ); aboutEngineButton->setToolTip( i18n("Click to get the plugin information.") ); /// Populate the engine selection combo box KService::List offers = PluginManager::query( "[X-KDE-Amarok-plugintype] == 'engine'" ); KService::List::ConstIterator end( offers.end() ); for( KService::List::ConstIterator it = offers.begin(); it != end; ++it ) { // Don't list the (void engine) entry if it's not currently active, // cause there's no point in choosing this engine (it's a dummy, after all). if( (*it)->property( "X-KDE-Amarok-name" ).toString() == "void-engine" && AmarokConfig::soundSystem() != "void-engine" ) continue; m_soundSystem->addItem( (*it)->name() ); // Save name properties in QMap for lookup m_pluginName[(*it)->name()] = (*it)->property( "X-KDE-Amarok-name" ).toString(); m_pluginAmarokName[(*it)->property( "X-KDE-Amarok-name" ).toString()] = (*it)->name(); } // Collection #if !defined(USE_MYSQL) && !defined(USE_POSTGRESQL) m_opt7->databaseBox->hide(); #endif #ifndef USE_MYSQL //FIXME we do this because this widget breaks the Apply button (always enabled). //It breaks because it is set to type="password" in the .kcfg file. Setting to //type="string" also fixes this bug, but means the password is stored in plain //text. This is a temporary fix so that the majority of users get a fixed Apply //button. delete m_opt7->dbSetupFrame->kcfg_MySqlPassword2; #endif m_opt7->collectionFoldersBox->setColumns( 1 ); new CollectionSetup( m_opt7->collectionFoldersBox ); //TODO this widget doesn't update the apply/ok buttons // Media Devices opt9->setObjectName( "Media Devices" ); opt9->setSpacing( KDialog::spacingHint() ); KVBox *topbox = new KVBox( opt9 ); topbox->setSpacing( KDialog::spacingHint() ); Q3GroupBox *mediaBox = new Q3GroupBox( 2, Qt::Horizontal, i18n("Media Devices"), topbox ); mediaBox->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ); KVBox *vbox = new KVBox( mediaBox ); vbox->setSpacing( KDialog::spacingHint() ); m_deviceManager = new MediumPluginManager( vbox ); KHBox *hbox = new KHBox( topbox ); hbox->setSpacing( KDialog::spacingHint() ); hbox->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ); KPushButton *autodetect = new KPushButton( i18n( "Autodetect Devices" ), hbox ); autodetect->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); connect( autodetect, SIGNAL(clicked()), m_deviceManager, SLOT(redetectDevices()) ); KPushButton *add = new KPushButton( i18n( "Add Device..." ), hbox ); add->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); connect( add, SIGNAL(clicked()), m_deviceManager, SLOT(newDevice()) ); QFrame *frame = new QFrame( topbox ); frame->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); // add pages addPage( m_opt1, i18n( "General" ), Amarok::icon( "settings_general" ), i18n( "Configure General Options" ) ); addPage( m_opt2, i18n( "Appearance" ), Amarok::icon( "settings_view" ), i18n( "Configure Amarok's Appearance" ) ); addPage( m_opt4, i18n( "Playback" ), Amarok::icon( "settings_playback" ), i18n( "Configure Playback" ) ); #ifdef Q_WS_X11 addPage( opt5, i18n( "OSD" ), Amarok::icon( "settings_indicator" ), i18n( "Configure On-Screen-Display" ) ); #endif addPage( opt6, i18n( "Engine" ), Amarok::icon( "settings_engine" ), i18n( "Configure Engine" ) ); addPage( m_opt7, i18n( "Collection" ), Amarok::icon( "collection" ), i18n( "Configure Collection" ) ); addPage( opt8, i18n( "last.fm" ), Amarok::icon( "audioscrobbler" ), i18n( "Configure last.fm Support" ) ); addPage( opt9, i18n( "Media Devices" ), Amarok::icon( "device" ), i18n( "Configure Portable Player Support" ) ); // Show information labels (must be done after insertions) { QObjectList list = queryList( "QLabel", "infoPixmap" ); QPixmap const info = KIconLoader::global()->iconPath( "messagebox_info", -K3Icon::SizeHuge ); for( int labelI = 0; labelI < list.size(); labelI++ ) qobject_cast( list.at(labelI) )->setPixmap( info ); } //stop KFont Requesters getting stupidly large { QObjectList list = queryList( "QLabel", "m_sampleLabel" ); for( int labelI = 0; labelI < list.size(); labelI++ ) qobject_cast( list.at( labelI ) )->setMaximumWidth( 250 ); } connect( m_deviceManager, SIGNAL(changed()), SLOT(updateButtons()) ); connect( m_soundSystem, SIGNAL(activated( int )), SLOT(updateButtons()) ); connect( aboutEngineButton, SIGNAL(clicked()), SLOT(aboutEngine()) ); #ifdef Q_WS_X11 connect( opt5, SIGNAL(settingsChanged()), SLOT(updateButtons()) ); //see options5.ui.h #endif connect( m_opt2->styleComboBox, SIGNAL( activated( int ) ), SLOT( updateButtons() ) ); connect( m_opt7->dbSetupFrame->databaseEngine, SIGNAL( activated( int ) ), SLOT( updateButtons() ) ); connect( m_opt1->kComboBox_browser, SIGNAL( activated( int ) ), SLOT( updateButtons() ) ); connect( m_opt1->kLineEdit_customBrowser, SIGNAL( textChanged( const QString& ) ), SLOT( updateButtons() ) ); } AmarokConfigDialog::~AmarokConfigDialog() { DEBUG_FUNC_INFO delete m_engineConfig; delete m_deviceManager; } /** Reimplemented from KConfigDialog */ void AmarokConfigDialog::addPage( QWidget *page, const QString &itemName, const QString &pixmapName, const QString &header, bool manage ) { // Add the widget pointer to our list, for later reference m_pageList << page; KConfigDialog::addPage( page, itemName, pixmapName, header, manage ); } /** Show page by object name */ void AmarokConfigDialog::showPageByName( const QByteArray& page ) { for( uint index = 0; index < m_pageList.count(); index++ ) { if ( m_pageList[index]->name() == page ) { KConfigDialog::setCurrentPage( qobject_cast( m_pageList[index] ) ); return; } } } ////////////////////////////////////////////////////////////////////////////////////////// // PROTECTED SLOTS ////////////////////////////////////////////////////////////////////////////////////////// /** * Update the buttons. * REIMPLEMENTED */ void AmarokConfigDialog::updateButtons() { KConfigDialog::updateButtons(); } /** * Update the settings from the dialog. * Example use: User clicks Ok or Apply button in a configure dialog. * REIMPLEMENTED */ void AmarokConfigDialog::updateSettings() { #ifdef Q_WS_X11 - OSDPreviewWidget *osd = findChild( "osdpreview" ); - AmarokConfig::setOsdAlignment( osd->alignment() ); - AmarokConfig::setOsdYOffset( osd->y() ); - Amarok::OSD::instance()->applySettings(); + //OSDPreviewWidget *osd = findChild( "osdpreview" ); + //AmarokConfig::setOsdAlignment( osd->alignment() ); + //AmarokConfig::setOsdYOffset( osd->y() ); + //Amarok::OSD::instance()->applySettings(); #endif CollectionSetup* cs = findChild("CollectionSetup"); if ( cs ) cs->writeConfig(); if ( m_engineConfig ) m_engineConfig->save(); AmarokConfig::setExternalBrowser( externalBrowser() ); // When sound system has changed, update engine config page if ( m_soundSystem->currentText() != m_pluginAmarokName[AmarokConfig::soundSystem()] ) { AmarokConfig::setSoundSystem( m_pluginName[m_soundSystem->currentText()] ); emit settingsChanged( objectName() ); soundSystemChanged(); } if ( m_opt2->styleComboBox->currentText() != AmarokConfig::contextBrowserStyleSheet() ) { //can't use kconfigxt for the style comboxbox's since we need the string, not the index AmarokConfig::setContextBrowserStyleSheet( m_opt2->styleComboBox->currentText() ); ContextBrowser::instance()->reloadStyleSheet(); } int dbType = Amarok::databaseTypeCode( m_opt7->dbSetupFrame->databaseEngine->currentText() ); if ( dbType != AmarokConfig::databaseEngine().toInt() ) { AmarokConfig::setDatabaseEngine( QString::number( dbType ) ); emit settingsChanged( objectName() ); } m_deviceManager->finished(); if( MediaBrowser::isAvailable() ) { PlaylistWindow::self()->addBrowser( "MediaBrowser", MediaBrowser::instance(), i18n( "Media Device" ), Amarok::icon( "device" ) ); //to re-enable mediabrowser hiding, uncomment this: //connect( MediaBrowser::instance(), SIGNAL( availabilityChanged( bool ) ), // PlaylistWindow::self(), SLOT( mbAvailabilityChanged( bool ) ) ); } Amarok::setUseScores( m_opt1->kcfg_UseScores->isChecked() ); Amarok::setUseRatings( m_opt1->kcfg_UseRatings->isChecked() ); // The following makes everything with a moodbar redraw itself. Amarok::setMoodbarPrefs( m_opt1->kcfg_ShowMoodbar->isChecked(), m_opt1->kcfg_MakeMoodier->isChecked(), m_opt1->kcfg_AlterMood->currentIndex(), m_opt1->kcfg_MoodsWithMusic->isChecked() ); } /** * Update the configuration-widgets in the dialog based on Amarok's current settings. * Example use: Initialisation of dialog. * Example use: User clicks Reset button in a configure dialog. * REIMPLEMENTED */ void AmarokConfigDialog::updateWidgets() { int current = m_soundSystem->findText( m_pluginAmarokName[AmarokConfig::soundSystem()] ); m_soundSystem->setCurrentIndex( current ); soundSystemChanged(); } /** * Update the configuration-widgets in the dialog based on the default values for Amarok's settings. * Example use: User clicks Defaults button in a configure dialog. * REIMPLEMENTED */ void AmarokConfigDialog::updateWidgetsDefault() { m_soundSystem->setCurrentIndex( 0 ); } ////////////////////////////////////////////////////////////////////////////////////////// // PROTECTED ////////////////////////////////////////////////////////////////////////////////////////// /** * @return true if any configuration items we are managing changed from Amarok's stored settings * We manage the engine combo box and some of the OSD settings * REIMPLEMENTED */ bool AmarokConfigDialog::hasChanged() { #ifdef Q_WS_X11 OSDPreviewWidget *osd = findChild( "osdpreview" ); #endif return m_soundSystem->currentText() != m_pluginAmarokName[AmarokConfig::soundSystem()] || #ifdef Q_WS_X11 - osd->alignment() != AmarokConfig::osdAlignment() || - osd->alignment() != OSDWidget::Center && osd->y() != AmarokConfig::osdYOffset() || + //osd->alignment() != AmarokConfig::osdAlignment() || + //osd->alignment() != OSDWidget::Center && osd->y() != AmarokConfig::osdYOffset() || #endif m_opt2->styleComboBox->currentText() != AmarokConfig::contextBrowserStyleSheet() || Amarok::databaseTypeCode( m_opt7->dbSetupFrame->databaseEngine->currentText() ) != AmarokConfig::databaseEngine().toInt() || m_engineConfig && m_engineConfig->hasChanged() || m_deviceManager && m_deviceManager->hasChanged() || externalBrowser() != AmarokConfig::externalBrowser(); } /** REIMPLEMENTED */ bool AmarokConfigDialog::isDefault() { AMAROK_NOTIMPLEMENTED //TODO hard to implement - what are default settings for OSD etc? return false; } ////////////////////////////////////////////////////////////////////////////////////////// // PRIVATE SLOTS ////////////////////////////////////////////////////////////////////////////////////////// void AmarokConfigDialog::aboutEngine() //SLOT { PluginManager::showAbout( QString( "Name == '%1'" ).arg( m_soundSystem->currentText() ) ); } ////////////////////////////////////////////////////////////////////////////////////////// // PRIVATE ////////////////////////////////////////////////////////////////////////////////////////// void AmarokConfigDialog::soundSystemChanged() { ///A new sound system has been LOADED ///If only the sound system widget has been changed don't call this! // remove old engine config widget // will delete the view if implementation is done correctly delete m_engineConfig; if( EngineController::hasEngineProperty( "HasConfigure" ) ) { m_engineConfig = EngineController::engine()->configure(); m_engineConfig->view()->reparent( m_engineConfigFrame, QPoint() ); m_engineConfig->view()->show(); m_engineConfigFrame->setTitle( i18nc( "to change settings", "Configure %1", m_soundSystem->currentText() ) ); m_engineConfigFrame->show(); connect( m_engineConfig, SIGNAL(viewChanged()), SLOT(updateButtons()) ); } else { m_engineConfig = 0; m_engineConfigFrame->hide(); } const bool hasCrossfade = EngineController::hasEngineProperty( "HasCrossfade" ); const bool crossfadeOn = m_opt4->kcfg_Crossfade->isChecked(); // Enable crossfading option when available m_opt4->kcfg_Crossfade->setEnabled( hasCrossfade ); m_opt4->kcfg_CrossfadeLength->setEnabled( hasCrossfade && crossfadeOn ); m_opt4->crossfadeLengthLabel->setEnabled( hasCrossfade && crossfadeOn ); m_opt4->kcfg_CrossfadeType->setEnabled( hasCrossfade && crossfadeOn ); if (!hasCrossfade) { m_opt4->radioButtonNormalPlayback->setChecked( true ); } } QString AmarokConfigDialog::externalBrowser() const { return m_opt1->kComboBox_browser->isEnabled() ? #ifdef Q_WS_MAC m_opt1->kComboBox_browser->currentText() == i18n( "Default Browser" ) ? "open" : #else m_opt1->kComboBox_browser->currentText() == i18n( "Default KDE Browser" ) ? "kfmclient openUrl" : #endif m_opt1->kComboBox_browser->currentText().toLower() : m_opt1->kLineEdit_customBrowser->text().toLower(); } #include "configdialog.moc" Index: trunk/extragear/multimedia/amarok/src/CMakeLists.txt =================================================================== --- trunk/extragear/multimedia/amarok/src/CMakeLists.txt (revision 663402) +++ trunk/extragear/multimedia/amarok/src/CMakeLists.txt (revision 663403) @@ -1,348 +1,356 @@ FIND_PATH( KONQSIDEBAR_INCLUDE_DIR konqsidebarplugin.h ${KDE4_INCLUDE_DIR} /usr/include /usr/local/include ) MESSAGE(STATUS "reactivate konquesidebar when it will ported") #if(KONQSIDEBAR_INCLUDE_DIR) # add_subdirectory( konquisidebar ) #disabling for now #else(KONQSIDEBAR_INCLUDE_DIR) # MESSAGE(STATUS "You're missing the kdebase header files") # MESSAGE(STATUS "Konqueror sidebar will not be compiled.") #endif(KONQSIDEBAR_INCLUDE_DIR) ADD_DEFINITIONS(${TAGLIB_CFLAGS}) if(MP4V2_FOUND) ADD_DEFINITIONS(-DHAVE_MP4V2) include_directories( ${MP4V2_INCLUDE_DIR} ) endif(MP4V2_FOUND) add_subdirectory( amarokcore ) add_subdirectory( data ) add_subdirectory( images ) add_subdirectory( loader ) add_subdirectory( scripts ) add_subdirectory( themes ) add_subdirectory( vis ) add_subdirectory( metadata ) add_subdirectory( engine ) add_subdirectory( mediadevice ) add_subdirectory( collectionscanner ) add_subdirectory( collection ) #add_subdirectory( device ) #not necessary at the moment, enable again when devicemanager has been ported to Solid OPTION(USE_SYSTEM_SQLITE "Use system sqlite instead of amarok's own copy" OFF) if (USE_SYSTEM_SQLITE) find_package(Sqlite REQUIRED) set(libsqlite_SRCS ) else (USE_SYSTEM_SQLITE) # Use our own copy set(libsqlite_SRCS sqlite/sqlite3.c ) endif (USE_SYSTEM_SQLITE) include_directories( amarokcore analyzers + configdialog plugin statusbar mediadevice servicebrowser #servicebrowser/magnatunestore ${CMAKE_CURRENT_SOURCE_DIR} meta collection ${CMAKE_CURRENT_BINARY_DIR} #for amarokconfig.h ${KDE4_INCLUDE_DIR} ${TAGLIB_INCLUDE_DIR} ${QT_INCLUDES} ) set(libamarokcore_SRCS amarokcore/amarokdbushandler.cpp amarokcore/crashhandler.cpp ) qt4_add_dbus_adaptor( libamarokcore_SRCS amarokcore/org.kde.amarok.collection.xml amarokcore/amarokdbushandler.h Amarok::DbusCollectionHandler) qt4_add_dbus_adaptor( libamarokcore_SRCS amarokcore/org.kde.amarok.contextbrowser.xml amarokcore/amarokdbushandler.h Amarok::DbusContextBrowserHandler) qt4_add_dbus_adaptor( libamarokcore_SRCS amarokcore/org.kde.amarok.mediabrowser.xml amarokcore/amarokdbushandler.h Amarok::DbusMediaBrowserHandler) qt4_add_dbus_adaptor( libamarokcore_SRCS amarokcore/org.kde.amarok.player.xml amarokcore/amarokdbushandler.h Amarok::DbusPlayerHandler) qt4_add_dbus_adaptor( libamarokcore_SRCS amarokcore/org.kde.amarok.playlist.xml amarokcore/amarokdbushandler.h Amarok::DbusPlaylistHandler) qt4_add_dbus_adaptor( libamarokcore_SRCS amarokcore/org.kde.amarok.playlistbrowse.xml amarokcore/amarokdbushandler.h Amarok::DbusPlaylistBrowserHandler) qt4_add_dbus_adaptor( libamarokcore_SRCS amarokcore/org.kde.amarok.script.xml amarokcore/amarokdbushandler.h Amarok::DbusScriptHandler) set(libplugin_SRCS plugin/plugin.cpp plugin/pluginconfig.cpp ) set(libservicebrowser_SRCS servicebrowser/servicebrowser.cpp servicebrowser/servicebase.cpp #servicebrowser/servicemodelitembase.cpp #servicebrowser/servicemodelbase.cpp #servicebrowser/simpleservicetypes.cpp servicebrowser/servicemetabase.cpp servicebrowser/servicecollection.cpp servicebrowser/databasehandlerbase.cpp) #servicebrowser/databasedrivencontentitem.cpp #servicebrowser/databasedrivencontentmodel.cpp) set(libscriptableservice_SRCS servicebrowser/scriptableservice/scriptableservicemanager.cpp servicebrowser/scriptableservice/scriptableservicecontentitem.cpp servicebrowser/scriptableservice/scriptableservice.cpp servicebrowser/scriptableservice/scriptableservicecontentmodel.cpp) set(libjamendoservice_SRCS servicebrowser/jamendo/jamendoservice.cpp servicebrowser/jamendo/jamendotypes.cpp servicebrowser/jamendo/jamendodatabasehandler.cpp servicebrowser/jamendo/jamendoxmlparser.cpp) set(libmp3tunesservice_SRCS servicebrowser/mp3tunes/mp3tunesservice.cpp servicebrowser/mp3tunes/mp3tunesdatafetcher.cpp) #qt4_add_dbus_adaptor( libscriptableservice_SRCS servicebrowser/scriptableservice/org.kde.amarok.ScriptableServiceManager.xml servicebrowser/scriptableservice/scriptableservicemanager.h ScriptableServiceManager) +set(libconfigdialog_SRCS + configdialog/configdialog.cpp) + +kde4_add_ui_files(libconfigdialog_SRCS + configdialog/General.ui + configdialog/Appearance.ui) + set(libmagnatunestore_SRCS servicebrowser/magnatunestore/magnatuneinfoparser.cpp servicebrowser/magnatunestore/magnatunebrowser.cpp servicebrowser/magnatunestore/magnatunedownloaddialog.cpp servicebrowser/magnatunestore/magnatunepurchasedialog.cpp servicebrowser/magnatunestore/magnatunepurchasehandler.cpp servicebrowser/magnatunestore/magnatunetypes.cpp servicebrowser/magnatunestore/magnatunexmlparser.cpp servicebrowser/magnatunestore/magnatunedatabasehandler.cpp servicebrowser/magnatunestore/magnatuneredownloaddialog.cpp servicebrowser/magnatunestore/magnatuneredownloadhandler.cpp servicebrowser/magnatunestore/magnatunedownloadinfo.cpp servicebrowser/magnatunestore/magnatunealbumdownloader.cpp) kde4_add_ui3_files(libmagnatunestore_SRCS servicebrowser/magnatunestore/magnatunedownloaddialogbase.ui servicebrowser/magnatunestore/magnatunepurchasedialogbase.ui servicebrowser/magnatunestore/magnatuneredownloaddialogbase.ui) set(libcollectionbrowser_SRCS collectionbrowser/collectiontreeview.cpp collectionbrowser/collectiontreeitemmodel.cpp collectionbrowser/singlecollectiontreeitemmodel.cpp collectionbrowser/collectiontreeitem.cpp ) set(libcontextview_SRCS contextview/contextview.cpp contextview/contextbox.cpp contextview/albumbox.cpp contextview/cloudbox.cpp contextview/graphicsitemfader.cpp contextview/textfader.cpp contextview/introanimation.cpp ) set(libanalyzers_SRCS analyzers/analyzerbase.cpp analyzers/analyzerfactory.cpp analyzers/baranalyzer.cpp analyzers/blockanalyzer.cpp analyzers/glanalyzer.cpp analyzers/glanalyzer2.cpp analyzers/glanalyzer3.cpp analyzers/sonogram.cpp # analyzers/turbine.cpp #analyzers/boomanalyzer.cpp ) set(libstatusbar_SRCS statusbar/statusBarBase.cpp statusbar/statusbar.cpp statusbar/overlayWidget.cpp statusbar/popupMessage.cpp statusbar/progressBar.cpp # statusbar/squeezedtextlabel.cpp statusbar/queueLabel.cpp statusbar/selectLabel.cpp ) ########### next target ############### set(amarok_LIB_SRCS ${libamarokcore_SRCS} ${libplugin_SRCS} ${libstatusbar_SRCS} ${libsqlite_SRCS} ${libservicebrowser_SRCS} #${libscriptableservice_SRCS} ${libanalyzers_SRCS} ${libcollectionbrowser_SRCS} ${libcontextview_SRCS} - ${libjamendoservice_SRCS} #${libmagnatunestore_SRCS} ${libmp3tunesservice_SRCS} + ${libjamendoservice_SRCS} ${libconfigdialog_SRCS} #${libmagnatunestore_SRCS} ${libmp3tunesservice_SRCS} collection/querymaker.cpp collection/collection.cpp collection/collectionmanager.cpp collection/metaquerybuilder.cpp collection/blockingquery.cpp collection/support/memoryquerymaker.cpp meta/meta.cpp Options1.ui.h actionclasses.cpp analyzerwidget.cpp app.cpp atomicstring.cpp collectionbrowser.cpp collectiondb.cpp columnlist.cpp configdialog.cpp contextbrowser.cpp coverfetcher.cpp covermanager.cpp cuefile.cpp dbsetup.ui.h deletedialog.cpp deviceconfiguredialog.cpp devicemanager.cpp directorylist.cpp dynamicmode.cpp editfilterdialog.cpp enginebase.cpp enginecontroller.cpp engineobserver.cpp equalizergraph.cpp equalizerpresetmanager.cpp equalizersetup.cpp expression.cpp fht.cpp filebrowser.cpp hintlineedit.cpp htmlview.cpp iconloader.cpp k3bexporter.cpp kbookmarkhandler.cpp ktrm.cpp lastfm.cpp mediabrowser.cpp mediadevicemanager.cpp medium.cpp mediumpluginmanager.cpp metabundle.cpp metabundlesaver.cpp moodbar.cpp mountpointmanager.cpp mydiroperator.cpp osd.cpp pixmapviewer.cpp playlist.cpp playlistbrowser.cpp playlistbrowseritem.cpp playlistitem.cpp playlistloader.cpp playlistselection.cpp playlistwindow.cpp pluginmanager.cpp podcastsettings.cpp prettypopupmenu.cpp progressslider.cpp querybuilder.cpp queuemanager.cpp refreshimages.cpp scancontroller.cpp scriptmanager.cpp scrobbler.cpp searchwidget.cpp sidebar.h sidebarwidget.cpp sliderwidget.cpp smartplaylisteditor.cpp socketserver.cpp statistics.cpp systray.cpp tagdialog.cpp tagguesser.cpp threadmanager.cpp tooltip.cpp trackpickerdialog.cpp tracktooltip.cpp transferdialog.cpp volumewidget.cpp xmlloader.cpp xspfplaylist.cpp ) kde4_add_kcfg_files(amarok_LIB_SRCS amarokcore/amarokconfig.kcfgc) kde4_automoc(${amarok_LIB_SRCS}) kde4_add_ui3_files(amarok_LIB_SRCS Options1.ui Options2.ui Options4.ui Options5.ui Options7.ui Options8.ui dbsetup.ui # firstrunwizard.ui newdynamic.ui organizecollectiondialog.ui podcastsettingsbase.ui tagdialogbase.ui # tagguesserconfigdialog.ui trackpickerdialogbase.ui ) kde4_add_ui_files(amarok_LIB_SRCS controlbar.ui deletedialogbase.ui scriptmanagerbase.ui tagguesserconfigdialog.ui ) kde4_add_library(amarok SHARED ${amarok_LIB_SRCS}) target_link_libraries(amarok ${KDE4_KUTILS_LIBS} ${KDE4_KDEUI_LIBS} ${KDE4_KHTML_LIBS} ${KDE4_KNEWSTUFF_LIBS} ${TAGLIB_LIBRARIES} ${KDE4_KFILE_LIBS} ${KDE4_KDE3SUPPORT_LIBS} ${KDE4_THREADWEAVER_LIBRARIES} amarok_taglib ) if(NOT WIN32) target_link_libraries(amarok dl) endif(NOT WIN32) if(USE_SYSTEM_SQLITE) target_link_libraries(amarok ${SQLITE_LIBRARIES}) endif(USE_SYSTEM_SQLITE) set_target_properties(amarok PROPERTIES VERSION 1.0.0 SOVERSION 1 ) install(TARGETS amarok DESTINATION ${LIB_INSTALL_DIR} ) ########### next target ############### set(amarokapp_SRCS main.cpp ) kde4_automoc(${amarokapp_SRCS}) kde4_add_executable(amarokapp ${amarokapp_SRCS}) target_link_libraries(amarokapp ${KDE4_KDECORE_LIBS} amarok ) install(TARGETS amarokapp DESTINATION ${BIN_INSTALL_DIR}) ########### install files ############### install(FILES amarok.desktop DESTINATION ${XDG_APPS_DIR} ) install(FILES amarok.profile.xml DESTINATION ${DATA_INSTALL_DIR}/profiles ) install(FILES amarokrc DESTINATION ${CONFIG_INSTALL_DIR}) install(FILES amarok_plugin.desktop DESTINATION ${SERVICETYPES_INSTALL_DIR}) install(FILES amarokui.rc DESTINATION ${DATA_INSTALL_DIR}/amarok) install(FILES amarok_append.desktop DESTINATION ${DATA_INSTALL_DIR}/konqueror/servicemenus) kde4_install_icons( ${ICON_INSTALL_DIR} ) Index: trunk/extragear/multimedia/amarok/src/configdialog/configdialog.cpp =================================================================== --- trunk/extragear/multimedia/amarok/src/configdialog/configdialog.cpp (nonexistent) +++ trunk/extragear/multimedia/amarok/src/configdialog/configdialog.cpp (revision 663403) @@ -0,0 +1,200 @@ +/*************************************************************************** +begin : 2004/02/07 +copyright : (C) Mark Kretschmann +email : markey@web.de +***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#include "amarok.h" +#include "amarokconfig.h" +#include "app.h" +#include "collectiondb.h" +#include "config-amarok.h" // Has USE_MYSQL +#include "configdialog.h" +#include "contextbrowser.h" +#include "debug.h" +#include "directorylist.h" +#include "enginecontroller.h" +#include "osd.h" +#include "playlistwindow.h" +#include "plugin/pluginconfig.h" +#include "pluginmanager.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//Added by qt3to4: +#include +#include + +#include //kapp +#include +#include +#include +#include +#include +#include + + +////////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC +////////////////////////////////////////////////////////////////////////////////////////// + +Amarok2ConfigDialog::Amarok2ConfigDialog( QWidget *parent, const char* name, KConfigSkeleton *config ) + : KConfigDialog( parent, name, config ) +{ + setAttribute( Qt::WA_DeleteOnClose ); + +#if 0 + // add pages + addPage( m_opt1, i18n( "General" ), Amarok::icon( "settings_general" ), i18n( "Configure General Options" ) ); + addPage( m_opt2, i18n( "Appearance" ), Amarok::icon( "settings_view" ), i18n( "Configure Amarok's Appearance" ) ); + addPage( m_opt4, i18n( "Playback" ), Amarok::icon( "settings_playback" ), i18n( "Configure Playback" ) ); + addPage( opt5, i18n( "OSD" ), Amarok::icon( "settings_indicator" ), i18n( "Configure On-Screen-Display" ) ); + addPage( opt6, i18n( "Engine" ), Amarok::icon( "settings_engine" ), i18n( "Configure Engine" ) ); + addPage( m_opt7, i18n( "Collection" ), Amarok::icon( "collection" ), i18n( "Configure Collection" ) ); + addPage( opt8, i18n( "last.fm" ), Amarok::icon( "audioscrobbler" ), i18n( "Configure last.fm Support" ) ); + addPage( opt9, i18n( "Media Devices" ), Amarok::icon( "device" ), i18n( "Configure Portable Player Support" ) ); +#endif + + // Show information labels (must be done after insertions) + { + QObjectList list = queryList( "QLabel", "infoPixmap" ); + QPixmap const info = KIconLoader::global()->iconPath( "messagebox_info", -K3Icon::SizeHuge ); + for( int labelI = 0; labelI < list.size(); labelI++ ) + qobject_cast( list.at(labelI) )->setPixmap( info ); + } + + //stop KFont Requesters getting stupidly large + { + QObjectList list = queryList( "QLabel", "m_sampleLabel" ); + for( int labelI = 0; labelI < list.size(); labelI++ ) + qobject_cast( list.at( labelI ) )->setMaximumWidth( 250 ); + } +} + +Amarok2ConfigDialog::~Amarok2ConfigDialog() +{ + DEBUG_FUNC_INFO +} + + +/** Reimplemented from KConfigDialog */ +void Amarok2ConfigDialog::addPage( QWidget *page, const QString &itemName, const QString &pixmapName, const QString &header, bool manage ) +{ + // Add the widget pointer to our list, for later reference + m_pageList << page; + + KConfigDialog::addPage( page, itemName, pixmapName, header, manage ); +} + +/** Show page by object name */ +void Amarok2ConfigDialog::showPageByName( const QByteArray& page ) +{ + for( uint index = 0; index < m_pageList.count(); index++ ) { + if ( m_pageList[index]->name() == page ) { + KConfigDialog::setCurrentPage( qobject_cast( m_pageList[index] ) ); + return; + } + } +} + +////////////////////////////////////////////////////////////////////////////////////////// +// PROTECTED SLOTS +////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Update the buttons. + * REIMPLEMENTED + */ + +void Amarok2ConfigDialog::updateButtons() +{ + KConfigDialog::updateButtons(); +} + +/** + * Update the settings from the dialog. + * Example use: User clicks Ok or Apply button in a configure dialog. + * REIMPLEMENTED + */ +void Amarok2ConfigDialog::updateSettings() +{ +} + + +/** + * Update the configuration-widgets in the dialog based on Amarok's current settings. + * Example use: Initialisation of dialog. + * Example use: User clicks Reset button in a configure dialog. + * REIMPLEMENTED + */ +void Amarok2ConfigDialog::updateWidgets() +{ +} + + +/** + * Update the configuration-widgets in the dialog based on the default values for Amarok's settings. + * Example use: User clicks Defaults button in a configure dialog. + * REIMPLEMENTED + */ +void Amarok2ConfigDialog::updateWidgetsDefault() +{ +} + + +////////////////////////////////////////////////////////////////////////////////////////// +// PROTECTED +////////////////////////////////////////////////////////////////////////////////////////// + +/** + * @return true if any configuration items we are managing changed from Amarok's stored settings + * We manage the engine combo box and some of the OSD settings + * REIMPLEMENTED + */ +bool Amarok2ConfigDialog::hasChanged() +{ + return false; +} + + +/** REIMPLEMENTED */ +bool Amarok2ConfigDialog::isDefault() +{ + AMAROK_NOTIMPLEMENTED + + //TODO hard to implement - what are default settings for OSD etc? + + return false; +} + + +////////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE SLOTS +////////////////////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE +////////////////////////////////////////////////////////////////////////////////////////// + + +#include "configdialog.moc" Property changes on: trunk/extragear/multimedia/amarok/src/configdialog/configdialog.cpp ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +Author Date Id Revision \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/x-c++src \ No newline at end of property Index: trunk/extragear/multimedia/amarok/src/configdialog/General.ui =================================================================== --- trunk/extragear/multimedia/amarok/src/configdialog/General.ui (nonexistent) +++ trunk/extragear/multimedia/amarok/src/configdialog/General.ui (revision 663403) @@ -0,0 +1,687 @@ + + General + + + + 0 + 0 + 425 + 686 + + + + + 0 + 0 + + + + General + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + General Options + + + 0 + + + + + + Check to enable the splashscreen during Amarok startup. + + + Check to enable the splashscreen during Amarok startup. + + + Sho&w splash-screen on startup + + + + + + + Check to enable the Amarok system tray icon. + + + Check to enable the Amarok system tray icon. + + + Show tray &icon + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 16 + 21 + + + + + + + + false + + + Check to animate the Amarok system tray icon. + + + Check to animate the Amarok system tray icon. + + + &Flash tray icon when playing + + + + + + + + + + + Size of the cover image in the context viewer in pixels. + + + Size of the cover image in the context viewer in pixels. + + + Default si&ze for cover previews: + + + false + + + kcfg_CoverPreviewSize + + + + + + + Size of the cover images in the context viewer in pixels. + + + Size of the cover images in the context viewer in pixels. + + + px + + + 50 + + + 300 + + + 100 + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 30 + 20 + + + + + + + + + + + + + 150 + 0 + + + + External web &browser: + + + false + + + kComboBox_browser + + + + + + + + 0 + 0 + + + + + 150 + 0 + + + + Choose the external web browser to be used by Amarok. + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 50 + 21 + + + + + + + + + + + + true + + + + 150 + 0 + + + + Use &another browser: + + + + + + + false + + + + 0 + 0 + + + + + 150 + 0 + + + + Enter filename of external web browser. + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 50 + 21 + + + + + + + + + + + + + Components + + + 0 + + + + + + Scores for tracks are calculated automatically, based on your listening habits. + + + Use &scores + + + false + + + + + + + You can assign ratings to tracks manually, from 1 to 5 stars. + + + Use ratings + + + + + + + QFrame::HLine + + + QFrame::Sunken + + + + + + + You need the <a href='http://amarok.kde.org/wiki/Moodbar'>moodbar package</a> installed to enable the moodbar feature. + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + 0 + + + 0 + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + true + + + Displays a visual representation of the current track in the column of the playlist window. + + + Displays a visual representation of the current track in the column of the playlist window. + + + Use &moods + + + true + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 16 + 21 + + + + + + + + true + + + When enabled, the hue distribution is quantised and respread evenly, giving a prettier but less meaningful output. + + + When enabled, the hue distribution is quantised and respread evenly, giving a prettier but less meaningful output. + + + Make m&oodier: + + + + + + + false + + + + Happy Like a Rainbow + + + + + Angry as Hell + + + + + Frozen in the Arctic + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 130 + 20 + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 16 + 21 + + + + + + + + true + + + Enabling this option stores Mood data files with the music files. Disabling stores them in your home folder. + + + Enabling this option stores Mood data files with the music files. Namely, the mood file for /music/file.mp3 will be /music/file.mood. Disabling stores them in your home folder. + + + Stor&e mood data files with music + + + + + + + + + + + + + + + Playlist-Window Options + + + 0 + + + + + + If checked, Amarok saves the current playlist on quit and restores it when restarted.<br> + + + If checked, Amarok saves the current playlist on quit and restores it when restarted. + + + &Remember current playlist on exit + + + + + + + If checked, Amarok uses a relative path for the tracks of manually saved playlists + + + If checked, Amarok uses a relative path for the tracks of manually saved playlists + + + Manually sa&ved playlists use relative path + + + + + + + Switch to the context browser, when playing a track.<br> + + + Switch to the context browser, when playing a track. + + + Switch to Context &Browser on track change + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 152 + + + + + + + + qPixmapFromMimeSource + + + Q3GroupBox + QGroupBox +
Qt3Support/Q3GroupBox
+ 1 +
+ + Q3Frame + QFrame +
Qt3Support/Q3Frame
+ 1 +
+ + KComboBox + QComboBox +
kcombobox.h
+
+ + KLineEdit + QLineEdit +
klineedit.h
+
+ + K3ActiveLabel + QWidget +
k3activelabel.h
+
+
+ + kcombobox.h + klineedit.h + k3activelabel.h + + + + + kcfg_ShowTrayIcon + toggled(bool) + kcfg_AnimateTrayIcon + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + checkBox_customBrowser + toggled(bool) + kComboBox_browser + setDisabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + checkBox_customBrowser + toggled(bool) + kLineEdit_customBrowser + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + kcfg_ShowMoodbar + toggled(bool) + General + slotUpdateMoodFrame() + + + 20 + 20 + + + 20 + 20 + + + + + kcfg_MakeMoodier + toggled(bool) + General + slotUpdateMoodFrame() + + + 20 + 20 + + + 20 + 20 + + + + +
Index: trunk/extragear/multimedia/amarok/src/configdialog/configdialog.h =================================================================== --- trunk/extragear/multimedia/amarok/src/configdialog/configdialog.h (nonexistent) +++ trunk/extragear/multimedia/amarok/src/configdialog/configdialog.h (revision 663403) @@ -0,0 +1,61 @@ +/*************************************************************************** +begin : 2004/02/07 +copyright : (C) Mark Kretschmann +email : markey@web.de +***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef AMAROK2CONFIGDIALOG_H +#define AMAROK2CONFIGDIALOG_H + +#include +#include +//Added by qt3to4: +#include + +#include + +class QComboBox; +class Q3GroupBox; +class KVBox; + + +class MediumPluginManager; + +class Amarok2ConfigDialog : public KConfigDialog +{ + Q_OBJECT + + public: + Amarok2ConfigDialog( QWidget *parent, const char* name, KConfigSkeleton *config ); + ~Amarok2ConfigDialog(); + + void addPage( QWidget *page, const QString &itemName, const QString &pixmapName, + const QString &header = QString(), bool manage=true); + void showPageByName( const QByteArray& page ); + protected slots: + void updateButtons(); + void updateSettings(); + void updateWidgets(); + void updateWidgetsDefault(); + + private slots: + + protected: + bool hasChanged(); + bool isDefault(); + + private: + Q3ValueList m_pageList; +}; + + +#endif // AMAROK2CONFIGDIALOG_H Property changes on: trunk/extragear/multimedia/amarok/src/configdialog/configdialog.h ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +Author Date Id Revision \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/x-chdr \ No newline at end of property Index: trunk/extragear/multimedia/amarok/src/configdialog/Appearance.ui =================================================================== --- trunk/extragear/multimedia/amarok/src/configdialog/Appearance.ui (nonexistent) +++ trunk/extragear/multimedia/amarok/src/configdialog/Appearance.ui (revision 663403) @@ -0,0 +1,462 @@ + + Options2 + + + + 0 + 0 + 447 + 422 + + + + + 0 + 0 + + + + Options2 + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Icons + + + + + + Check to enable Amarok's custom icon theme.<br> + + + Check to enable Amarok's custom icon theme. + + + Use custom icon &theme (requires restart) + + + + + + + + + + Fonts + + + + + + Check to enable custom fonts. + + + Check to enable custom fonts. + + + &Use custom fonts + + + false + + + + + + + false + + + + 0 + 0 + + + + + + + true + + + Q3GroupBox::NoFrame + + + 0 + + + + + + + 0 + 0 + + + + The font to use in the playlist window. + + + The font to use in the playlist window. + + + Playlist Window: + + + false + + + + + + + + 0 + 0 + + + + The font to use in the playlist window. + + + The font to use in the playlist window. + + + + + + + + + + + 0 + 0 + + + + The font to use in the context browser. + + + The font to use in the context browser. + + + Context Sidebar: + + + false + + + + + + + + 0 + 0 + + + + The font to use in the context browser. + + + The font to use in the context browser. + + + + + + + + + + + + + + + + Color Scheme + + + + + + + + The color that is used when fresh items are being loaded in the playlist. + + + Color for new playlist items: + + + false + + + kcfg_NewPlaylistItemsColor + + + + + + + The color that is used when fresh items are being loaded in the playlist. + + + + + + + + + + + + + + + Context Browser Style + + + + + + + + + 0 + 0 + + + + + + + Select a style: + + + false + + + + + + + Select the style of the Context Browser. + + + Select the style of the Context Browser. + + + + + + + + + + + Click to install a new Context Browser style.<br>Tip: More styles can be found on <a href='http://kde-look.org'>http://kde-look.org</a> + + + Select and install a new Context Browser style. + + + Install New Style... + + + + + + + Click to download new Context Browser styles. + + + Select and download new Context Browser styles. + + + Download Styles... + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 40 + 20 + + + + + + + + Click to uninstall the selected Context Browser style. + + + Uninstall the selected Context Browser style. + + + Uninstall Style + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 16 + + + + + + + + qPixmapFromMimeSource + + + Q3GroupBox + QGroupBox +
Qt3Support/Q3GroupBox
+ 1 +
+ + KColorButton + QPushButton +
kcolorbutton.h
+
+ + KComboBox + QComboBox +
kcombobox.h
+
+ + KFontRequester + QWidget +
kfontrequester.h
+
+
+ + kfontrequester.h + kfontrequester.h + kcolorbutton.h + kcombobox.h + + + + + kcfg_UseCustomFonts + toggled(bool) + fontGroupBox + setEnabled(bool) + + + 20 + 20 + + + 20 + 20 + + + + + installPushButton + clicked() + Options2 + installPushButton_clicked() + + + 20 + 20 + + + 20 + 20 + + + + + retrievePushButton + clicked() + Options2 + retrievePushButton_clicked() + + + 20 + 20 + + + 20 + 20 + + + + + uninstallPushButton + clicked() + Options2 + uninstallPushButton_clicked() + + + 20 + 20 + + + 20 + 20 + + + + + styleComboBox + activated(QString) + Options2 + styleComboBox_activated(QString) + + + 20 + 20 + + + 20 + 20 + + + + +