From 5fa76f57fd5bd74b268196f08d411e69124222fc Mon Sep 17 00:00:00 2001 From: Nikolay Tischenko Date: Wed, 22 Sep 2010 20:05:03 +0700 Subject: [PATCH] Added application config. Moved application data from /tmp to ~/.someplayer --- resources/random_active.png | Bin 1069 -> 976 bytes resources/random_inactive.png | Bin 1071 -> 1134 bytes resources/repeat_active.png | Bin 969 -> 922 bytes someplayer.pro | 6 ++++-- src/config.cpp | 31 +++++++++++++++++++++++++++++++ src/config.h | 22 ++++++++++++++++++++++ src/library.h | 3 --- src/mainwindow.cpp | 4 +++- src/player/player.cpp | 18 +++++++++++++++--- src/player/player.h | 6 ++++-- src/someplayer.h | 1 + src/trackrenderer.cpp | 2 +- 12 files changed, 81 insertions(+), 12 deletions(-) create mode 100644 src/config.cpp create mode 100644 src/config.h diff --git a/resources/random_active.png b/resources/random_active.png index 5a8c3197eca905fcbcb0fd9aaf6e0995432f5245..aae80aa90ea236d87c2ef1c025b74d1d2f438334 100644 GIT binary patch delta 906 zcmV;519kkZ2+#+RHwl9Pw*cGT6_WIkKp=k>3py|eHvaDb00U4-L_t(&-tAazP82~9 zeT91iZeX$;M4|#}{6Ii~MaA{MH_-zii!O*?EEpp}h#I{{C)~g*bopbtXR2#@X2)a} z=f_mCnW4A0s@|)r?ka#*T4|+~R$6J8tnV9M+c#Wg?^F{3Fauzq3W&x6VE0^oTMmDs znE)gR01x+yLD2tl@S%@i*$;zH#Z~=7;5V;!2 zIRHGr{0A@3r}19c>IA>1%uz16<9olasLtj|R2WpQXYO*MZ9aMX*} zRsf)A(>S>|O!A&pf!-Y^c`s|le?RKYQ0YZR8F7ate${f3je1?O%GjMZ$%$h{WM!LB zCf4n<01h|GN$u2iF&!yGtcu?vtC4X|`7_~YV|+$T*y`Ib_zp;}X z%T<0;TSylMhLP_!0075N5=RyWCdKC0%5;H%<1rv=Nuhb?nC!dcr($0g9s=$lm>-l+ zWC6Olf#}t_V!U)ir=BN{>ACHURWBz6QJ9lXD?OzyUEdDT7U3xVBHVxT%^B5t12q+O z0hzwS6q2Wfzsi{-X<@^`JNVwMOJmX0@=YG+*VCtZzxFCm#8hmcv1;&;f2T@CD{V!? z#sr*hhD@DqcFAg|6iKp`hH9%Nu&XMXQ_2q(%7D zdrAiydHttBp!n(Gff06qv;O!q`|N3#W_=oPI9I^6&z1@X{C_xCE<|Rx4C_fWnD8hg z$M5^zAMR-@AR`)ys0KcDg8=2y* gw9-l|tu#me0yR4m!Y}3o&;S4c07*qoM6N<$f*A_1M*si- delta 1000 zcmVy{D6rKp=k+4=gl^9Unvh00XT_L_t(&-tAc3Y7|Ql z{;GS{^?-=pd3o^8W6X;PqQ)eWponnZOAe?ftBIocBAOqcz$@<#2xhkH^P;C_yC*Zd zD@=|nOfADsPxVxN)%DZW0}M3KKm!dl(2CL1wTz6#!`#% zSG>dN}id7Xho6?B2%B=jMNj)B`~D z5EEdQS8cLJNvx*wQ#|RoEj){SbsKI=UM`%g=Univ&IKpY6M=DDD)HjMO=(sTslWsh zg>!JyUR5mI0$JxAnak`nU|s^wBTHa2qAherPO`Y~0-r9VP45EV+eVfeZspXBVoTEI z`OvbFRf`bFg^ODBwK26RB4dAf1PPzy#=I4cDLy}J&V47|d3{8Sdox6;9CDgeA|)_o+t5Xb8^Vd$szyO5SpjZLdWJPf&K07a7tw@3Om;qcx8-t>neY(>^DQF+3R1~cRTtSJ`pl~9c)n$KsO=622<=TPB-Zh;y2Ie?s zWmdKbIZ`}=O0u#a#DR1$d9SMIwU!n z8B!|oVRv0t#(;Tban1zbyABVp?59O60e)o-u&*6~^TDt7*J+|P<_8*Rpn(P&D5W1- WQfwFJyvYCn00001z8e4l1MW#gK~!ko?O0n=6KN1V?ees*zHm)Oq$Cm| zu>AkOps3`Ax|N6l5q?9TedzBxlSz0;)>t)NmC8)!OZVw}_W%tw)KEhWHMC(g`u>Yg zPfvW#*%zCrz{|g1fB+sJANfZrpsFAhB=KvB5*w)iNl+QSAAcSmYL$@R1@h;^Pr|{X z0Ky1|07M9sU~g}4%R&Y2@9!&`62@I9pxuSv1zrZRyR-8wW6YOfP(;l7QuBN|nV=}z z*hyq%XYcOr2#8q#NB~EuNbVUJ#OJ%ayS0kU9RF1PoQJc1kd?}vFJmi99@5(!=@o-O zB=?S8Kww~Ivws-@!QNi3$dB2KVEW%^5Ottg0nL&Zs@~ZuWlzG;LoGSe0oGI$QxQNp zcyDh#c!R(Ma5Prgx1|^oQ+6CmGG>F5Csqun8HZ~d#LKXCSH)(`F5)%v45r$A_5Jn8W<7aAUT)Pbo!kF zZ*@Q*XtfUJp3M|!*Dzd0lgZSIAPGteWNJ~bgh;M@tJPj0i{>GUS-v=swKlS%XbV6n ziK1=5CX)$O3DPyD@J&}N7Ib1e45gx7EH>)asv1*K6q1ARNzYIqeEm6m^=cs~s(EtR zxwUoTZ-3wZwUClnW$7+nA0Dn$=GHnC2-PgDFxBe168dY^48MN)O3vv;1aNe8v~rKH z)B`s+U#K9$97a_7#zrd;8)58H-W$iqZ=P-a@y(b3aQx=@|4ZW0Xq=9!ku!--ry~F` z8jnL`?R4tF1zucyZe@L7I2?tBMI{IgH9s3WsDB`q_ks9d#c(*{vpp~v4o#v+W=XoZ zF7F8{^^U||24F&^3BtRj7?#cYK*^k%#0mC*R1nI<;*8!A) z+cFXqrfpQ+ldb?jzdv9(Cq&8{3rme7BJ@L`=T{p-S<6>9PN(~+9|ZuY3k7xEmTLDF zLVvk1<6(_nWvlx}a!n;viO-*}S*w6597A>1N1}|)H)df(Ag<=C5~_+`uQxYV zd#9(OFg{2;q0r#L;6*YhUgYR6tU>&d<+eW8MobqW2#@(3ej? z)n1%m$RG1&4y5Iy%fmYGYa6FmfIsBI<>kftM~QXp6H3M9bxvY;t`lE00000NkvXXu0mjfhmz?x delta 989 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 Zz5v-n_(1)gs;~e6002ovPDHLkV1nUiygmQ` diff --git a/someplayer.pro b/someplayer.pro index ef5b1f1..a803c35 100644 --- a/someplayer.pro +++ b/someplayer.pro @@ -24,7 +24,8 @@ SOURCES += src/main.cpp\ src/playerform.cpp \ src/libraryform.cpp \ src/busywidget.cpp \ - src/trackrenderer.cpp + src/trackrenderer.cpp \ + src/config.cpp HEADERS += src/mainwindow.h \ src/player/player.h \ @@ -41,7 +42,8 @@ HEADERS += src/mainwindow.h \ src/playerform.h \ src/libraryform.h \ src/busywidget.h \ - src/trackrenderer.h + src/trackrenderer.h \ + src/config.h FORMS += src/ui/mainwindow.ui \ src/ui/playerform.ui \ diff --git a/src/config.cpp b/src/config.cpp new file mode 100644 index 0000000..422e294 --- /dev/null +++ b/src/config.cpp @@ -0,0 +1,31 @@ +#include "config.h" +#include +#include + +using namespace SomePlayer::Storage; + +Config::Config() +{ + _settings = new QSettings(QString(applicationDir())+"/settings.ini", QSettings::IniFormat); +} + +Config::~Config() { + delete _settings; +} + +QString Config::applicationDir() { + QString path = QDir::homePath()+"/.someplayer"; + QDir appdir(path); + if (!appdir.exists(path)) { + appdir.mkdir(path); + } + return path; +} + +QVariant Config::getValue(QString key) { + return _settings->value(key); +} + +void Config::setValue(QString key, QVariant value) { + _settings->setValue(key, value); +} diff --git a/src/config.h b/src/config.h new file mode 100644 index 0000000..b1d98ed --- /dev/null +++ b/src/config.h @@ -0,0 +1,22 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#include + +namespace SomePlayer { + namespace Storage { + class Config + { + public: + Config(); + ~Config(); + QString applicationDir(); + QVariant getValue(QString key); + void setValue(QString key, QVariant value); + private: + QSettings *_settings; + }; + }; +}; + +#endif // CONFIG_H diff --git a/src/library.h b/src/library.h index 6f69661..b7e674b 100644 --- a/src/library.h +++ b/src/library.h @@ -28,9 +28,6 @@ #include "mediascanner.h" #include "tagresolver.h" -#define _DATABASE_PATH_ "/tmp" -#define _PLAYLISTS_PATH_ "/tmp" - // represents media library: tracks, playlists // it uses different media storages for tracks and playlists // but dynamic playlits will be stored with tracks into the same storage diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 6347ae8..0570563 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -29,12 +29,14 @@ #include "library.h" using namespace SomePlayer::DataObjects; +using namespace SomePlayer::Storage; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { - _library = new Library(_DATABASE_PATH_, _PLAYLISTS_PATH_); + Config config; + _library = new Library(config.applicationDir(), config.applicationDir()); ui->setupUi(this); connect(ui->actionAbout_Qt, SIGNAL(triggered()), this, SLOT(aboutQt())); connect(ui->actionAbout, SIGNAL(triggered()), this, SLOT(about())); diff --git a/src/player/player.cpp b/src/player/player.cpp index 6f8ebb2..0181fc6 100644 --- a/src/player/player.cpp +++ b/src/player/player.cpp @@ -22,6 +22,7 @@ using namespace SomePlayer::Playback; using namespace SomePlayer::DataObjects; +using namespace SomePlayer::Storage; Player::Player(QObject *parent) : QObject(parent) @@ -34,8 +35,8 @@ Player::Player(QObject *parent) : Phonon::createPath(_player, _output); int seed = reinterpret_cast (_player); qsrand(seed); - _random = false; - _repeat = false; + _random = _config.getValue("playback/random").toBool(); + _repeat = _config.getValue("playback/repeat").toBool(); _current = -1; } @@ -111,7 +112,7 @@ void Player::prev() { play(); } -void Player::_stateChanged(Phonon::State newState, Phonon::State oldState) { +void Player::_stateChanged(Phonon::State newState, Phonon::State /*oldState*/) { switch (newState) { case Phonon::PlayingState: if (_state == PLAYER_LOADING) { @@ -174,3 +175,14 @@ void Player::play() { void Player::enqueue(int id) { _queue.enqueue(id); } + +void Player::toggleRandom() { + _random = !_random; + _config.setValue("playback/random", _random); +} + +void Player::toggleRepeat() { + _repeat = !_repeat; + _config.setValue("playback/repeat", _repeat); +} + diff --git a/src/player/player.h b/src/player/player.h index a2fdbf7..cf45026 100644 --- a/src/player/player.h +++ b/src/player/player.h @@ -16,6 +16,7 @@ using SomePlayer::DataObjects::Track; using SomePlayer::DataObjects::TrackMetadata; using SomePlayer::DataObjects::Playlist; +using SomePlayer::Storage::Config; namespace SomePlayer { namespace Playback { @@ -47,8 +48,8 @@ namespace SomePlayer { void next(); void prev(); void setPlaylist(Playlist); - void toggleRandom() {_random = !_random;} - void toggleRepeat() {_repeat = !_repeat;} + void toggleRandom(); + void toggleRepeat(); void seek(int); private slots: void _stateChanged(Phonon::State, Phonon::State); @@ -65,6 +66,7 @@ namespace SomePlayer { Phonon::MediaObject *_player; Phonon::AudioOutput *_output; PlayerState _state; + Config _config; void _set_source(); diff --git a/src/someplayer.h b/src/someplayer.h index 44e5bda..6ecab29 100644 --- a/src/someplayer.h +++ b/src/someplayer.h @@ -44,6 +44,7 @@ namespace SomePlayer { #include #include #include +#include "config.h" #define _DYNAMIC_PLAYLIST_MAX_COUNT_ 50 diff --git a/src/trackrenderer.cpp b/src/trackrenderer.cpp index e1a92d9..f3c0b8e 100644 --- a/src/trackrenderer.cpp +++ b/src/trackrenderer.cpp @@ -70,7 +70,7 @@ void TrackRenderer::paint(QPainter *painter, const QStyleOptionViewItem &option, } QSize TrackRenderer::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &/*index*/) const { - return QSize(option.rect.width(), option.rect.height()/3); + return QSize(option.rect.width(), 80); } void TrackRenderer::setActiveRow(int r) { -- 1.7.9.5