diff -r 1a6714c53019 -r cce62ebc198e radioapp/radioapplication/src/testwindow_win32.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioapplication/src/testwindow_win32.cpp Tue Aug 31 15:15:02 2010 +0300 @@ -0,0 +1,353 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +// System includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// User includes +#include "testwindow_win32.h" +#include "radioapplication.h" +#include "radiologger.h" +#include "radio_global.h" +#include "radioenginewrapper_win32_p.h" + +const int WINDOW_WIDTH = 360; +const int WINDOW_HEIGHT = 640; +const int TOOLBAR_HEIGHT = 120; +const int WINDOW_EXTRA_WIDTH = 5; + +const QString KBtnDisconnectHeadset = "Disconnect Headset"; +const QString KBtnConnectHeadset = "Connect Headset"; + +const QString KBtnGoOffline = "Go Offline"; +const QString KBtnGoOnline = "Go Online"; + +struct Song +{ + const char* mArtist; + const char* mTitle; +}; + +const Song KRecognizedSongs[] = { + { "Red Hot Chili Peppers", "Under The Bridge" }, + { "Queens Of The Stone Age", "No One Knows" }, + { "The Presidents of the United States of America", "Dune Buggy" }, + { "System of a Down", "Aerials" }, + { "The White Stripes", "Seven Nation Army" }, + { "Alice In Chains", "When The Sun Rose Again" }, + { "Bullet For My Valentine", "Tears Don't Fall" } +}; +const int KSongsCount = sizeof( KRecognizedSongs ) / sizeof( KRecognizedSongs[0] ); + +/*! + * + */ +Win32Window::Win32Window() : + QWidget( 0 ), + mOrientationButton( new QPushButton( "Change Orientation", this ) ), + mVolUpButton( new QPushButton( "Volume Up", this ) ), + mVolDownButton( new QPushButton( "Volume Down", this ) ), + mAddSongButton( new QPushButton( "Add Song", this ) ), + mClearSongButton( new QPushButton( "Clear Song", this ) ), + mHeadsetButton( new QPushButton( KBtnDisconnectHeadset, this ) ), + mHeadsetConnected( true ), + mOfflineButton( new QPushButton( KBtnGoOffline, this ) ), + mThemeBox( new QComboBox( this ) ), + mToolbarLayout( 0 ), + mVolume( 5 ), + mRadioWindow( 0 ), + mOrientation( Qt::Vertical ), + mSongIndex( 0 ) +{ + mThemeBox->setEditable( false ); + initThemes(); + + Radio::connect( mOrientationButton, SIGNAL(clicked()), this, SLOT(changeOrientation()) ); + Radio::connect( mVolUpButton, SIGNAL(clicked()), this, SLOT(volumeUp()) ); + Radio::connect( mVolDownButton, SIGNAL(clicked()), this, SLOT(volumeDown()) ); + Radio::connect( mHeadsetButton, SIGNAL(clicked()), this, SLOT(toggleHeadsetStatus()) ); + Radio::connect( mAddSongButton, SIGNAL(clicked()), this, SLOT(addSong()) ); + Radio::connect( mClearSongButton, SIGNAL(clicked()), this, SLOT(clearSong()) ); + Radio::connect( mOfflineButton, SIGNAL(clicked()), this, SLOT(toggleOffline()) ); + Radio::connect( mThemeBox, SIGNAL(activated(QString)), this, SLOT(changeTheme(QString)) ); + + QTimer::singleShot( 0, this, SLOT(updateWindowSize()) ); +} + +/*! + * + */ +Win32Window::~Win32Window() +{ +} + +/*! + * + */ +void Win32Window::addHbWindow( HbMainWindow* radioWindow ) +{ + mRadioWindow = radioWindow; + mOrientation = mRadioWindow->orientation(); + updateWindowSize(); + + QVBoxLayout* layout = new QVBoxLayout( this ); + layout->setMargin( 5 ); + layout->setSpacing( 5 ); + + mToolbarLayout = new QGridLayout( this ); + mToolbarLayout->setHorizontalSpacing( 5 ); + mToolbarLayout->setVerticalSpacing( 5 ); + + mToolbarLayout->addWidget( mOrientationButton, 0, 0 ); + mToolbarLayout->addWidget( mVolUpButton, 0, 1 ); + mToolbarLayout->addWidget( mVolDownButton, 1, 1 ); + mToolbarLayout->addWidget( mHeadsetButton, 1, 0 ); + mToolbarLayout->addWidget( mAddSongButton, 2, 0 ); + mToolbarLayout->addWidget( mClearSongButton, 2, 1 ); + mToolbarLayout->addWidget( mOfflineButton, 3, 0 ); + + QGridLayout* themeLayout = new QGridLayout( this ); + themeLayout->addWidget( new QLabel( "Theme:", this ), 0, 0 ); + themeLayout->addWidget( mThemeBox, 0, 1 ); + themeLayout->setColumnStretch( 1, 2 ); + + mToolbarLayout->addLayout( themeLayout, 3, 1 ); + mToolbarLayout->setColumnStretch( 0, 1 ); + mToolbarLayout->setColumnStretch( 1, 1 ); + + layout->addItem( mToolbarLayout ); + layout->addWidget( radioWindow ); + + setLayout( layout ); +} + +/*! + * + */ +void Win32Window::init() +{ + RadioEngineWrapperPrivate* wrapper = RadioEngineWrapperPrivate::instance(); + if ( wrapper ) { + QString error = wrapper->dataParsingError(); + if ( !error.isEmpty() ) { + QMessageBox msg( QMessageBox::Warning, "Unable to parse radio settings", error, QMessageBox::Ok ); + msg.exec(); + } + + if ( wrapper->isOffline() ) { + mOfflineButton->setText( KBtnGoOnline ); + } + } + updateWindowSize(); +} + +/*! + * Private slot + */ +void Win32Window::changeOrientation() +{ + if ( mOrientation == Qt::Horizontal ) { + mOrientation = Qt::Vertical; + } else { + mOrientation = Qt::Horizontal; + } + + mRadioWindow->setOrientation( mOrientation ); + updateWindowSize(); +} + +/*! + * Private slot + */ +void Win32Window::volumeUp() +{ + if ( ++mVolume > MAXIMUM_VOLUME_LEVEL ) { + mVolume = MAXIMUM_VOLUME_LEVEL; + } + RadioEngineWrapperPrivate::instance()->setVolume( mVolume ); +} + +/*! + * Private slot + */ +void Win32Window::volumeDown() +{ + if ( --mVolume < 0 ) { + mVolume = 0; + } + RadioEngineWrapperPrivate::instance()->setVolume( mVolume ); +} + +/*! + * Private slot + */ +void Win32Window::toggleHeadsetStatus() +{ + mHeadsetConnected = !mHeadsetConnected; + if ( mHeadsetConnected ) { + mHeadsetButton->setText( KBtnDisconnectHeadset ); + } else { + mHeadsetButton->setText( KBtnConnectHeadset ); + } + RadioEngineWrapperPrivate::instance()->setHeadsetStatus( mHeadsetConnected ); +} + +/*! + * Private slot + */ +void Win32Window::updateWindowSize() +{ + if ( mOrientation == Qt::Horizontal ) { + resize( WINDOW_HEIGHT + WINDOW_EXTRA_WIDTH, WINDOW_WIDTH + TOOLBAR_HEIGHT ); + } else { + resize( WINDOW_WIDTH + WINDOW_EXTRA_WIDTH, WINDOW_HEIGHT + TOOLBAR_HEIGHT ); + } +} + +/*! + * Private slot + */ +void Win32Window::addSong() +{ + Song song = KRecognizedSongs[mSongIndex++]; + mSongIndex %= KSongsCount; + + RadioEngineWrapperPrivate::instance()->addSong( song.mArtist, song.mTitle ); +} + +/*! + * Private slot + */ +void Win32Window::clearSong() +{ + RadioEngineWrapperPrivate::instance()->clearSong(); +} + +/*! + * Private slot + */ +void Win32Window::toggleOffline() +{ + bool offline = !RadioEngineWrapperPrivate::instance()->isOffline(); + RadioEngineWrapperPrivate::instance()->setOffline( offline ); + if ( offline ) { + mOfflineButton->setText( KBtnGoOnline ); + } else { + mOfflineButton->setText( KBtnGoOffline ); + } +} + +/*! + * Private slot + */ +void Win32Window::changeTheme( const QString& theme ) +{ + LOG_FORMAT( "Changing to theme %s", GETSTRING( theme ) ); + QLocalSocket socket; + socket.connectToServer( "hbthemeserver" ); + if ( socket.waitForConnected( 3000 ) ) { + QByteArray outputByteArray; + QDataStream outputDataStream( &outputByteArray, QIODevice::WriteOnly ); + outputDataStream << 4; // EThemeSelection from HbThemeServerRequest in hbthemecommon_p.h + outputDataStream << theme; + socket.write( outputByteArray ); + socket.flush(); + } +} + +/*! + * + */ +void Win32Window::initThemes() +{ + QStringList themeList; + foreach ( const QString& themeRootPath, themeRootPaths() ) { + QDir dir( themeRootPath ) ; + QStringList list = dir.entryList( QDir::AllDirs | QDir::NoDotAndDotDot, QDir::Name ); + + if ( list.contains( "themes", Qt::CaseSensitive ) ) { + QDir root = themeRootPath; + dir.setPath( root.path() + "/themes/icons/" ); + QStringList iconthemeslist = dir.entryList( QDir::AllDirs | QDir::NoDotAndDotDot, QDir::Name ); + foreach ( QString themefolder, iconthemeslist ) { + QDir iconThemePath( root.path() + "/themes/icons/" + themefolder ); + if ( iconThemePath.exists( "index.theme" ) ) { + QSettings iniSetting( iconThemePath.path() + "/index.theme", QSettings::IniFormat ); + iniSetting.beginGroup( "Icon Theme" ); + QString hidden = iniSetting.value( "Hidden" ).toString(); + QString name = iniSetting.value( "Name" ).toString(); + iniSetting.endGroup(); + if ( (hidden == "true") || ( hidden == "" ) || ( name != themefolder ) ) { + iconthemeslist.removeOne( themefolder ); + } + } + else { + iconthemeslist.removeOne( themefolder ); + } + + } + + themeList.append( iconthemeslist ); + } + } + + if ( themeList.count() == 0 ) { + themeList.insert( 0, "hbdefault" ); //adding one default entry + mThemeBox->setEnabled( false ); + } + + mThemeBox->setModel( new QStringListModel( themeList, mThemeBox ) ); + + for ( int i = 0; i < themeList.count(); ++i ) { + QString theme = themeList.at( i ); + if ( theme == HbInstance::instance()->theme()->name() ) { + mThemeBox->setCurrentIndex( i ); + } + } +} + +/*! + * + */ +QStringList Win32Window::themeRootPaths() +{ + QStringList rootDirs; + QString envDir = qgetenv( "HB_THEMES_DIR" ); + if ( !envDir.isEmpty() ) { + rootDirs << envDir; + } + + QString resourcesDir = HB_RESOURCES_DIR; + if ( resourcesDir.isEmpty() ) { + resourcesDir = "/hb_dev/src/hbcore/resources"; + } + rootDirs << resourcesDir; + + return rootDirs; +}