lplayer-commits Mailing List for LongPlayer
Status: Abandoned
Brought to you by:
panixx
You can subscribe to this list here.
| 2003 |
Jan
(21) |
Feb
(23) |
Mar
(5) |
Apr
(37) |
May
(23) |
Jun
(13) |
Jul
(27) |
Aug
(37) |
Sep
(30) |
Oct
(32) |
Nov
(3) |
Dec
(21) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2004 |
Jan
(2) |
Feb
(19) |
Mar
(21) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
(28) |
Dec
(23) |
| 2005 |
Jan
(47) |
Feb
(28) |
Mar
(12) |
Apr
|
May
|
Jun
(5) |
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2006 |
Jan
(1) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
Update of /cvsroot/lplayer/lplayer/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24241 Modified Files: abslog.h absutil.h command.h lp.pro lpformabout.cpp lpformabout.h lpformaboutbase.ui lpformplaylists.cpp lpformplaylists.h lpformplaylistsbase.ui lpformprefs.cpp lpformprefs.h lpformprefsbase.ui lpformsearch.cpp lpformsearch.h lpformsearchbase.ui lpformstartup.cpp lpformstartup.h lpformstartupbase.ui lplistener.h lpsongfilter.h lpwindowmainbase.cpp Added Files: lpdatabasesqlite.cpp lpdatabasesqlite.h Log Message: compiling sqlite database --- NEW FILE: lpdatabasesqlite.cpp --- #include <cstring> #include <sstream> #include "lpDatabasesqlite.h" #include "lpdatabaseiterator.h" #include "lpsettings.h" #define DB_VERSION 1 LPDatabaseSQLite::LPDatabaseSQLite(string filename) { db = QSqlDatabase::addDatabase("QSQLITE"); // db.setHostName("bigblue"); db.setDatabaseName("filename"); bool ok = db.open(); model.setTable("songs"); /* Do version checking int version; if (!(version=getVersion())) { setVersion(DB_VERSION); } */ } LPDatabaseSQLite::~LPDatabaseSQLite() { db.close(); } void LPDatabaseSQLite::flush() { } void LPDatabaseSQLite::compact() { } void LPDatabaseSQLite::store(Song song) { model.setFilter(QString("key='") + song.getKey().c_str() + "'"); if (!model.select()) model.insertRow(0); model.record(0).setValue("key", QString::fromLocal8Bit(song.getKey().c_str())); model.record(0).setValue("name", QString::fromLocal8Bit(song.getName().c_str())); model.record(0).setValue("filename", QString::fromLocal8Bit(song.getFilename().c_str())); model.record(0).setValue("date", song.getDate()); model.record(0).setValue("olddate", song.getOldDate()); model.record(0).setValue("times", song.getTimes()); model.record(0).setValue("rating", song.getRating()); int h,s,v; song.getColor(&h,&s,&v); model.record(0).setValue("colorh", h); model.record(0).setValue("colors", s); model.record(0).setValue("colorv", v); } void LPDatabaseSQLite::remove(string key) { model.setFilter(QString("key='") + key.c_str() + "'"); if (model.select()) model.removeRow(0); } Song LPDatabaseSQLite::retrieve(string key) { Song s; s.setKey(key); model.setFilter(QString("key='") + key.c_str() + "'"); if (!model.select()) return s; return read(&model, 0); } Song LPDatabaseSQLite::read(QSqlTableModel* model, int rec) { Song s; s.setKey(string(model->record(rec).value("key").toString().local8Bit())); s.setName(string(model->record(rec).value("name").toString().local8Bit())); s.setFilename(string(model->record(rec).value("filename").toString().local8Bit())); s.setDate(model->record(rec).value("date").toInt()); s.setOldDate(model->record(rec).value("olddate").toInt()); s.setTimes(model->record(rec).value("times").toInt()); s.setRating(model->record(rec).value("rating").toInt()); int h,sa,v; h = model->record(rec).value("colorh").toInt(); sa = model->record(rec).value("colors").toInt(); v = model->record(rec).value("colorv").toInt(); s.setColor(h,sa,v); return s; } bool LPDatabaseSQLite::inDatabase(string key) { model.setFilter(QString("key='") + key.c_str() + "'"); return (!model.select()); } int LPDatabaseSQLite::getSize() { return model.rowCount(); } int LPDatabaseSQLite::getVersion() { return 1; //atoi((char*) dbdata.get_data()); } void LPDatabaseSQLite::setVersion(int v) { } /************************ Iterator stuff **********************************/ class LPDatabaseSQLite::LPSQLiteDBIterator : public LPDatabaseIterator { public: LPSQLiteDBIterator(LPDatabaseSQLite* const db); ~LPSQLiteDBIterator(); void reset(); Song next(); bool atEnd(); private: LPDatabaseSQLite* _db; QSqlTableModel model; int rec; }; LPDatabaseSQLite::LPSQLiteDBIterator::LPSQLiteDBIterator(LPDatabaseSQLite* db) : rec(0), _db(db) { model.setTable("songs"); } LPDatabaseSQLite::LPSQLiteDBIterator::~LPSQLiteDBIterator() { } void LPDatabaseSQLite::LPSQLiteDBIterator::reset() { rec = 0; } Song LPDatabaseSQLite::LPSQLiteDBIterator::next() { Song s = _db->read(&model, rec++); return s; } bool LPDatabaseSQLite::LPSQLiteDBIterator::atEnd() { return rec + 1 >= model.rowCount(); } LPDatabaseIterator* LPDatabaseSQLite::iterator() { return new LPDatabaseSQLite::LPSQLiteDBIterator(this); } --- NEW FILE: lpdatabasesqlite.h --- #ifndef H_LPDBSQLITE #define H_LPDBSQLITE #include <string.h> #include "lpsong.h" #include "lpdatabasereader.h" #include <QtSql> using namespace std; class QFile; class LPDatabaseIterator; /* * A Berkeley DB database reader / writer */ class LPDatabaseSQLite : public LPDatabaseReader { //friend class LPBDatabaseIterator; public: LPDatabaseSQLite(string filename); ~LPDatabaseSQLite(); void flush(); //quicksave?? ensures persistency void compact(); //saves, compacts.. whatever void store(Song song); void remove(string key); Song retrieve(string key); bool inDatabase(string key); int getSize(); LPDatabaseIterator* iterator(); private: Song read(QSqlTableModel* model, int record); QSqlDatabase db; QSqlTableModel model; int getVersion(); void setVersion(int v); // static void readData(char*,Song*); class LPSQLiteDBIterator; friend class LPSQLiteDBIterator; }; #endif Index: abslog.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/abslog.h,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** abslog.h 6 Mar 2005 22:05:27 -0000 1.11 --- abslog.h 23 Feb 2006 19:55:01 -0000 1.12 *************** *** 17,20 **** --- 17,21 ---- class absLog { public: + virtual ~absLog() {} /** singleton getter */ static absLog* getLog(); Index: absutil.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/absutil.h,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** absutil.h 7 Jan 2005 21:17:34 -0000 1.16 --- absutil.h 23 Feb 2006 19:55:01 -0000 1.17 *************** *** 20,24 **** { public: ! /** Time functions */ /** returns the amount of seconds elapsed since Jan 1st 1970 midnight --- 20,24 ---- { public: ! virtual ~absUtil() {} /** Time functions */ /** returns the amount of seconds elapsed since Jan 1st 1970 midnight Index: command.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/command.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** command.h 3 Jan 2005 10:42:52 -0000 1.2 --- command.h 23 Feb 2006 19:55:01 -0000 1.3 *************** *** 14,17 **** --- 14,18 ---- public: + virtual ~Command() {} virtual void start()=0; virtual void stop()=0; Index: lp.pro =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lp.pro,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** lp.pro 2 Jan 2006 23:16:21 -0000 1.33 --- lp.pro 23 Feb 2006 19:55:01 -0000 1.34 *************** *** 1,8 **** TEMPLATE = app ! CONFIG += qt warn_on debug thread ! QMAKE_CFLAGS += -F/usr/local/Trolltech/Qt-4.0.1/lib ! QMAKE_LFLAGS_SONAME = -Wl,-install_name,@executable_path/../Frameworks/ macx:LIBS += -framework Carbon -framework Cocoa -framework QuickTime -lz -framework Growl -L/sw/lib -ldb_cxx -L/Developer/qt -F/Developer/qt macx:INCLUDEPATH += /Developer/Headers/FlatCarbon /sw/include/db4 RC_FILE = mac/LongPlayer.icns HEADERS = absplayer.h \ --- 1,14 ---- TEMPLATE = app ! CONFIG += qt uitools warn_on ! #debug ! #thread ! QT += xml qt3support sql ! ! #QMAKE_LFLAGS_SONAME = -Wl,-install_name,@executable_path/../Frameworks/ ! macx:LIBS += -framework Carbon -framework Cocoa -framework QuickTime -lz -framework Growl -L/sw/lib -ldb_cxx -L/Developer/qt -F/Developer/qt macx:INCLUDEPATH += /Developer/Headers/FlatCarbon /sw/include/db4 + + RESOURCES += resources/longplayer.qrc RC_FILE = mac/LongPlayer.icns HEADERS = absplayer.h \ *************** *** 22,25 **** --- 28,32 ---- lpdatabaseiterator.h \ lpberkeleydbreader.h \ + lpdatabasesqlite.h \ lpdirview.h \ lpfactory.h \ *************** *** 79,82 **** --- 86,90 ---- lpdatabasexmlreader.cpp \ lpdatabasexmlwriter.cpp \ + lpdatabasesqlite.cpp \ lpdirview.cpp \ lpfactory.cpp \ *************** *** 120,147 **** playlistreader.cpp \ cocoascript.mm ! INTERFACES = lpformaboutbase.ui \ lpformprefsbase.ui \ - lpformplaylistsbase.ui \ lpformstartupbase.ui \ ! lpformsearchbase.ui TARGET = LongPlayer OBJECTS_DIR=objects - - #platform-dependant options: - - #============================================================================== - #Qt only - #============================================================================== - %TMAKE_LIBS += -lxmms -lglib -L/sw/lib - %INCLUDEPATH += /sw/include/xmms /sw/lib/glib/include /sw/include/glib-1.2 /Developer/Headers/FlatCarbon - - #LIBS += -lkdeui - - #mac os x with fink and kde3.1 - #TMAKE_LIBS += -L/sw/lib/kde3 /sw/lib/libkdesu.dylib -ldl /sw/lib/libkdeui.dylib /sw/lib/libkdecore.dylib -ldl /sw/lib/libDCOP.dylib - #The following line was inserted by qt3to4 - QT += xml qt3support - #The following line was inserted by qt3to4 - CONFIG += uic3 - --- 128,137 ---- playlistreader.cpp \ cocoascript.mm ! FORMS = lpformplaylistsbase.ui \ ! lpformsearchbase.ui \ lpformprefsbase.ui \ lpformstartupbase.ui \ ! lpformaboutbase.ui TARGET = LongPlayer OBJECTS_DIR=objects Index: lpformabout.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformabout.cpp,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** lpformabout.cpp 2 Jan 2006 23:16:21 -0000 1.39 --- lpformabout.cpp 23 Feb 2006 19:55:01 -0000 1.40 *************** *** 18,22 **** */ LPFormAbout::LPFormAbout(LPApp* app, QWidget* parent, const char* name, bool modal, Qt::WFlags fl ) ! : LPFormAboutBase( parent, name, modal, fl ) { LPSettings* stats = app->getSettings(); TextLabel1->setText( --- 18,23 ---- */ LPFormAbout::LPFormAbout(LPApp* app, QWidget* parent, const char* name, bool modal, Qt::WFlags fl ) ! : QDialog( parent, name, modal, fl ) { ! setupUi(this); LPSettings* stats = app->getSettings(); TextLabel1->setText( Index: lpformabout.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformabout.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** lpformabout.h 2 Jan 2006 23:16:21 -0000 1.6 --- lpformabout.h 23 Feb 2006 19:55:01 -0000 1.7 *************** *** 7,15 **** #ifndef LPFORMABOUT_H #define LPFORMABOUT_H ! #include "lpformaboutbase.h" class LPApp; ! class LPFormAbout: public LPFormAboutBase { Q_OBJECT --- 7,16 ---- #ifndef LPFORMABOUT_H #define LPFORMABOUT_H ! #include "ui_lpformaboutbase.h" ! #include <QDialog> class LPApp; ! class LPFormAbout: public QDialog, public Ui::LPFormAboutBase { Q_OBJECT Index: lpformaboutbase.ui =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformaboutbase.ui,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** lpformaboutbase.ui 29 Dec 2004 13:11:30 -0000 1.6 --- lpformaboutbase.ui 23 Feb 2006 19:55:01 -0000 1.7 *************** *** 1,101 **** ! <!DOCTYPE UI><UI version="3.2" stdsetdef="1"> ! <class>LPFormAboutBase</class> ! <widget class="QDialog"> ! <property name="name"> ! <cstring>LPFormAboutBase</cstring> ! </property> ! <property name="geometry"> ! <rect> ! <x>0</x> ! <y>3</y> ! <width>361</width> ! <height>217</height> ! </rect> ! </property> ! <property name="sizePolicy"> ! <sizepolicy> ! <hsizetype>0</hsizetype> ! <vsizetype>0</vsizetype> ! <horstretch>0</horstretch> ! <verstretch>0</verstretch> ! </sizepolicy> ! </property> ! <property name="caption"> ! <string></string> ! </property> ! <property name="sizeGripEnabled"> ! <bool>false</bool> ! </property> ! <vbox> ! <property name="name"> ! <cstring>unnamed</cstring> ! </property> ! <property name="margin"> ! <number>11</number> </property> ! <property name="spacing"> ! <number>6</number> </property> ! <property name="resizeMode"> ! <enum>Fixed</enum> </property> ! <widget class="QLabel"> ! <property name="name"> ! <cstring>PixmapLabel1</cstring> ! </property> ! <property name="pixmap"> ! <pixmap>image0</pixmap> ! </property> ! <property name="scaledContents"> ! <bool>false</bool> ! </property> ! </widget> ! <widget class="QFrame"> ! <property name="name"> ! <cstring>Frame3</cstring> ! </property> ! <property name="font"> ! <font> ! <pointsize>12</pointsize> ! </font> ! </property> ! <property name="frameShape"> ! <enum>NoFrame</enum> ! </property> ! <property name="frameShadow"> ! <enum>Plain</enum> ! </property> ! <vbox> ! <property name="name"> ! <cstring>unnamed</cstring> ! </property> ! <property name="margin"> ! <number>11</number> ! </property> ! <property name="spacing"> ! <number>6</number> ! </property> ! <widget class="QLabel"> ! <property name="name"> ! <cstring>TextLabel1</cstring> ! </property> ! <property name="font"> ! <font> ! <pointsize>10</pointsize> ! </font> ! </property> ! <property name="text"> ! <string>LongPlayer</string> ! </property> ! </widget> ! </vbox> ! </widget> ! </vbox> ! </widget> ! <images> ! <image name="image0"> ! <data format="XPM.GZ" length="117868">789cedbdd772ebcab2ae79bf9f62c6aebb1d1d38322425c689be90f7deaba32f808237246549a9a3dffd14907f964800244199311635b132c61ceb1b7065fecaca3200ffd7fffc737b7af4cffffcafff7a7a369f03f98ff4cdc77ffec77e4992b7ffe7fffdbfffbffffaefe5e5f63f8bcd857fda2b0bff2cfdf7fff55fff7df6fc8ffce7b8db7152f01d0562a9dd6ab696530e5c70bb6565c7b78857da2b747c3fe5e5453edf31895716e97c6f03dcc4f54b607b8518e7afb688dd03e6d54676bf30e376b34df7779bc42de61be2d525bade6636e97a710a765665767c40dc5e2236cec1663b3bdf7b003bc4fe9a663a3f26369788fd7770cb6c66e5d14fb9b1d46c36cc2cfd0330d22b4d622e4fb10eb6a93cbd4d62557ec4679ae9fc35663adfbc0737c13d30ea47bc6bceaeb7bac45c5e510b8cf216781e979ff3047688ad67cd59fe8545cce5293c708bd83198a93ced0d30ca5b5e8351dec1bd662aef9098cbdb88c02d94ff363395bfb1043671fe35331d775ec00ef851b39d724cd79b8dc5e576c62eb8d9c81a4bdc02b789fd4db04de7db3631d7b745cf335ba84fb101467dc701b1aedf4d66d4df1698ebf714ccf5bbad99ea978fa37d0517c4aabee97a5b33b5971e18edcfbc62a6fa366ec1d0836c80a107d9d59c95b7497a30590fd200430f729d99ea5bec80a10713f7633d8865cd549f27c45a0f483febc1780773fd7798a10fdc5fd7ffb3e6acfec51bb1b544c7e58666d247563ecd25a58fc58cb734935e9ec04de2c406b35e98a1170ff76b425f1e8e37ed66e63fcc0566e8e94273565f7285197a38276ec1df5a1118fe26782666bd39c7ccf0e79760e8cdc2fd596f764b333dff11cc7ab388596fe25133e93b04435fd11d98fdf512187a8a07c44a4fa48f5bcdd9710fcf637d990633f484e7b1beac6530f425b73567d70748afd217a5c7d44cfa5d04436f326426bdf8287fadbf5d66e80ff961fd890e31eb4d249a33bd45597fd834596f49006e12472198f545e9339bd063b40e6e36b3e3c90318fab229bfca3fa17e6fc1a84f0bcf677dc4ccd083bcd44cfe2306e37af38858d7ff2233d5a7bf036ee1f91633eafb1a0c7d045d30fc8f79a399f440e5adfd8bff0436d1ff3f30a3fe519eac07e74133d5ef3bb1d6c39e66aadf36187ab04e98a93eed0e187a302f99a107940feb21bad59cd5bfb146cc7a48b2fea1b5dc6853fd876db04df51fde10abfacd386a68ceea3bc0f92dd683c58c78630bdca6e3e28219ed9dcf6fa3fe3ce215befe5a33c5776f60f8af604133e9abc58c787040bcba44c74d87998e3b3e33fc8501865e7ce47fd5243df9cb9aa9bf0b99490ffe23d8c1f39f99e9786012b3ff91179ab3e3d10e989f7fa699f4b1c00cffc3e7e3f9c62533f487f263fd3938cefa33f735939e0fc1acbf8419fa5b03435ffeb566d2d73631ebcb407d592d62fb92d9a2fe30069bc409958fc5fe28e981a1cfe498b8d9a678d897c4ad45d2a3eb82a1afe415ccfddb1333ca7f5733b5f726f14a13fde53633fa9f4b66c4a70b60dccf5e21663d05020c7f241acca8df5330f41474c0d08f49edc7627d980118f51f2c82e1cfdc5366d4ff1198c72b7c3df460227d5cbf720d0c7f62a1bc757cb34eaceb17c7b93e8d3e98eb337bfeca32f71f1d9358d517f52faf609477e033a3fd9f80e13f826d30fc51c2c751bf7e9399ca3b0989b9bfb17a60d4a7bfaf99cafb8119e39357cdd41e76c1ec5f703efb1781f3f5f8e79e99eac35d06c39f982e33f47001467d590eb11e0fb59971bf67309ee79e3363fc3900737ff7aa99eeffc44ce7c7f79ab3e3ee0698fb2fe497f522707fd68b8dfa3371bea519f130ca5feb07f5a5f5b303867e8c33b043ecad6aa67826f3b72b968a7fc93f1c12b3dec22330e2e7e00c8cfecd6b6826fd517e2cadcf7b30f4e95f82dbc4099f8ff159dc06a37f4ad688393ef62d30eb7d8919f12beecff18f1d3153797a3d30eeef9f68a6f1b7cd0c7d86ccd0cf1533e2997562a55f4aff0b33e2a145663a3f7cd24cfd159ebfda42fcef3143ffd7cc88471230f42f9acc48df1d33dd5fdc30c33fed8079bee096197a247d58dc3e4c1fccf11bf2c7edc1de6446fc76a599ca1bfa62ff693c30a33fa5f66471ffe92e32a33d4830b7175ccfedc186feb87fb45c66d2bb093db3de4d94b75c26f671be5c91adac7cb3e7ad369a1cdfc760d67b5b73a63fef8d58c76f7b60f8db506a26bdaf8339fe7a225e417b097798e15f8fc1d07bc76726bd840bcc182f26603c2f5a0143cf36dfcf46fdbc10b35edd5b66d4770f0c7d9a67cca8ff37662a7f29c0d06370c48cf9381bec40bf2d663a3fbc6086bf43fa75ffed31a37f3e0463be449e3343bf9b60d623ca5fcf5fa0bc586f56130cbd594b60e8dbb801b3fe4c62f6c7f62b98f58af2657f2c0230f468402fac4703e9932be00366d2674ce9934dc4776e4b33f9eb0618f19efba6393bee3a60cc77242e33e9dba1fccad622f4bea799e2b90e18f323c18e66d2779b99f46c5f83311e7684663a5f1f477c7203c6f8c8db27e6f9d7600b8cfb078666ea0f5e98d17f2c69a6f8f01c8cf8267235d3fcf83b318f6f925b66f4ff1eb885f9ee2bcd74fe0d33fa0f8319fd13b389f43c30d3f1705333f50f1d66c4ab0760b49fb0c94ce727dbcc681f1133da13f90fc9ed27ea6ba6f6f5c80cffeb30c37fde8179fc74c90cff8bf2e5fec0b8d04cfee08d99da43243493ffb0c10ee9dd5c2536f17ceb9d998e07480fc74f12e5a1db27ee6f713c1633d3f36d94a785f37d3e1fed53748975fb447a74fb6c30537a8c67b0459c64febfdde0f6981c68a6f9c64b30da63c726e6f6976c80d1de9267cdd41f78cc981f380173fb5a64a6e3b10f46fcef1f1173ff932c68a6f6148371ffe81eccf1d90531cf2f7ac89f5e3fda0143ef0e1f77c07c3df46c9d31939edd5de236ee9f9c3223dee880a1c798cf477d479a491fa1cd0cbde179dc1fd8482febcdec33537dca55cdd9fa9c8dfbabecd1f9afcc747eb8a8393bdf447e955ee9fc0133e20f8fd9ced8da03439fe60633e29b3633d2b745acfba32633e60b50ff16e627ec75663a1e203fdc3e1c178ce7c963cdd43e0e89b97d0801e6f680e7717b3002b00b7ed29c958f47fad6fd5340ede7a3bf39d44cfd031f47ff123e6a26fdbf8011af858219faa7f253fd0bcebf62c67c48170cfd8789668aaf1c666a0f510cc678c6df00637c91905e258f77c33366b49f008cfe25b96786bf373553fbba06a37d755c66ea4fbc6330e6673d949f9e2f3b65467bea81797d7015cce30994b78edf0366f41777cc8857905e8eefbd1b663a3fde0173bcd567467b7a62a6fbd91f9ce92540fa747b5a6146fff1a2393b5ff2f3d1becc3d30da57b4c08cfee69a19f76b69a6f66f30d3fda2aee6ecb8b54dcceb0996ad99d2fbc64cf7b7f6c1688fd61a339effae39bb7fb4c78ce70f34537ef9fe1cff1accf07fafccf01fc8bfc5f30f1d663adfeb33d3f91eca5bf78fb81fb76781f66c2f132759f9984d6edfde02710bf30dc93e18f1ac973053fb760760b4f7e04a33f9836d30e259b7a1393b6e38cc68ffabc4dcfe0d8f19c76fc1f037fe2133fcc196e6ec786c8079fc77a7998e3798e12f5ec18877c313663a1ee2f9da5fdc33933f70505eec2fc29819f12dd2c7f3a38900637e34f189793e3d3ad44c7a3902f37ce91e98dbff1b33f4b449cced5b2e83d1bedd7566b4e72dcdd43f4a30dab31b30d3fd9d77665cbfad99da63cc4ced2140f9717fe92d69a6f6a719edeb5933b59f3d66ba9fed6ace8e3b482fb75fb3a999ae7f66a6eb655b33e517e5c1ed3b5866a6f37db4170be5611f31233fbe66f2570633d2b3a6397b5ee830233f7c7f9487bbc00c7f74a339bbde5824e6f6ee9e30e37ca199f28ff4ca15f40fe7cc882f7a9a29fd0d66d42fdabf7250349f097db13f31a01f7b05fcc24cf98b29bf36fb93648b19e3db180c7fe23d81e13f7c5f33b5ff5d62f6172266a6f6ee9d82e12fdc47663aeee2f9ec0f5c01667fb4c08cfd5ba43f7b7589ce77cec02dc41f1133fcc33618f383099f8ff6ee91ffb0b9bd2777608c37e33730cfc77499a9bd27c83ff7e7d10d18ed3b6982116f8b23cda417cd54bf8ea599f482f2e3fed8b199492f6e5b33ddef8e99eee7fa9a69ffdc01b1ee7f1f99e97e7ea499fa378f19fda1d44ce97b61267db9284feeafed53cda4e73766f8b70633f4f90e467bb602cdd4de4f98e97aeb8a99ae0f37c0bc5f82cf473c669acc74bfd06546bc70a699fcc335b15c46bce732233f6d66c4771dcd74fd1233eebfa8393beea2bcb97d5bb79ac97fa33c547ba7fae7fb5bf0ff5d665cbfae99cac764867f43fea48bfa59d64ce3fd9899ee276ccd74bf3b66dc0fedd15ec678e95833c53f57ccc88f66f44748afbd027ffec24cf70bf571dcef9119f5cdf7b3309f78c08cf2cefcbda5e221c44f1133e2a51e98f7279c6b26ffb642bc82f98720d24cfe6603ccf3098b9a297eb1c0bcbef8ae99fc179ec7fe2c7a62c6fa4902463c131f8231be898ec1982fe8389a693e2d206e23de09717d1bc7e34b66c43b0fc426e6fbe22366cc3f98cc985fb0c1bc5ed863863fdc07f37a614b33ed6fd08cf5c53b66acefa0bc4cde6f75c18c783c6626fd78e7ccf08fabccf0876b9a333dc6283ff687c61d33aef798a1f70530fbb77bcdf4fc57668c071635537b7f67867e913e8bd7d71366f8e3be66f2370366f84be88fe7eb9c3566c4138e66f2773e33e2a16566b417b05cc67ec23366a4e74e33cd6fec32637ec7d34cfeef9919e93d05a37ddb8b9aa97df3f3e10f43be3fc72f9666f2477c3ddabfdf61c6f52fcc881f51beecdf2ca999fa338719cfeb6aa6f125f46fa37cec7d66f4571633f482f2d0feed9919f95fd24cf93f64867f447ddaf0fff28019f34ffb9ae97acdd017fc970d7f2ffb9a49af54de3abef34262edef3e98c6932698c77f0d30c69bee0533f93b67150cff170bcd743ef93b1dcfc58f60c473c10633c67348cfaa83f9a04b668cefc8dfa9780ef11ff2d7e6f58847668cf7f07c1def6d82d91f6e13b3bf8baec1ecdf485f36cf5fb82bcc98bf5b03c35fb887ccd0d73918f1a077cb8cf94c7d9cea2b3e01a3bd4bcd743cb866463c89f2e3f619a0beb8bd85282f3d1f79aa99daef2533a5d7b902a3bd84afcc989fdd22b6f13c33d24ce7f79991ff9e66f2c7128cf62f6f35537bdf60c6f8f10eccedc1d34cfe728119edfd5e338d8f5698e97e863e8ef9a20118ed27686aa6f27799315fbda499eecfe985ff90a87f07fe227ad34cf36d17cce8afb2fe58b65a981f0a5bc42b981ff23acc68bf2e18e3397f4f33b5af18ccf1cfa9666a8f7c3fc43fee2533c6732dcd14af58c4dc5ee38819ed73056c121b7c3eda6bfc4cacd73370bd6e9f0998e76b1c668cd7901edebfeae2fe1c1f247d66c413abc4dcdfc70b60b4cfe40dccebd34f609ecfc1f3b83db921187a4d963553bc7b0186de24f2c3ed27ea11b3be65c40cffbda799dacf1a98fbb703cdd43e3699d19f9f6ba6ebdfc1dc7edf98d11ed734537aee89b55e7dcde48fd69931ff43e5e3b03e0dc94c7a336c30af5f6c6aa6f946170c7d1a42331d37c1accf8419fd4d9b58f52734bff002863e3b0633e61bafc026d6d72f9831dfb00b467fe3da9a293ea6fa71b8bf7197c0986f740dcda45f0fcceb0f5d6213fb713ba45f87f74b74507e1c6f850633f4b70de6f9a24366f8ff180c7d98c80febcfbf6246bc82f2637f6d1e30e3781f0c7d260dcda4a70198e38f7d30eb8bfc99a3f592f9075bfb2bd107a3fec5b1661a2ff171aeff4d62aeef3804b7a087a666f257cf60d477d466467cd101a3be3da199d6677788757cf100e6fd6adbcc988fbe03f3fcd3aa66ba3e02633ce69c129b988f8a97c13cbe3ad34cf10aca83fd5d8ce75bbcbe84f472bc107bc43a3eee69a6f509a4478ff7913fae7f0be5abe3d315cde42f96c0f037c201c39f58c83fd7bfd1627656b2fc67fec676b8bca24dcd34de6d82b9bcb68879bc1a38cc783ff016cce5b7a799e6eb17c01cffad8279bd7d9f98cb333a0223fe8befc018afc637602e6f5ccfe3a78e00233ef10330e20993ea4bb737f3188cf23613cd54beb83f97b7cbe7a3bc13be9f4be56b21fd5cfec13b33ca3f2b6f55b8bc9faca199e63f8fc1c8bf7303e6fe5732637ff72298f77b9f68a678b94facc79bb7cc98ff390563fce4be3263bedf01a33c937330e2b118e7733c9a1860f4b7f10a18fecaf2c0283f679938b5ecfc2cbe765cbedfd9736db5fda75badd4dae6c36aa5d6361f562bb5b6f9b0af29d51086993361587f3b4fb5fd46fba252a56117ccf9db79aaed37da17956a2b1f3a6aaee1fded3cd5f61bad566a6df361b5526b9b0fab955adb7c58add4dae6c36aa5d6361f562bb5b6f9b05aa9b5cd87d54aad6d3eac566a6df361b5526b9b0fab955adb7c58add4dae6c36aa5d6361f562bb5b6f9b05aa9b5cd87d54aad6d3eac566a6df361b5526b9b0fab955adb7c58add4dae6c3fe1d4a357c231832ff6fa7a7b6d9ed5fa2d4d088862c3692bf9da2da66b57f89523b43d6357ac6c3df4e516db3dabf50a99d5aa9f368b5526b9b0fab955adb7c58add4dae6c36aa5d6361f562bb5b6f9b05aa9b5cd87d54aad6d3eac566a6df3617f53a9c6a3f164a46bf26c2f3f95cb5aa9f36f7f5ea9c6abd137069962a212eba8636fc637e7b256eafcdb9f54aaf29a6f993e3b532d32de8d3563ddd8f89e5cfe84528d176353d98ff5037fca281f3ffe94adaf3ee3cf2855f5f3fd8a1a1dd56bcfd8365ebfa19cbe49a92a56d9512d6837d71f74b29ea03f6b4fa0ee36b217d178fcfcb59fc809f56ca3bdd9b6b167ec7fba940f8ce7213bd4ff3a507e879fb166ec7deeee7f42a9ca93ceaad151bd1e7d55ad5f57aaf23b6f5a95937a82e3aa35ad5a6f9c8b7c4e8cd38ad79ee5ae3d372e66c84b5f95c0b89ca4775bfb8cff5351dd689a2eb37f1d149e941e3b9bfdfe3fad54552a5f51e947eeb68dab2fa4f34b4a553d57b1bc27a575a7e27d8f72575e1b3715af1c8c5cd7356e8dbb8a57f6b3f6343d0f6bc6fd8c65bc3952465d63c158cca5f3c396541d2ccf76ff9f54aad150699a5e2ad515d0345a9f4ce71794aafafbd9a3965d63a5c29d570b776e574ad153fe3a6154baeed19825027b1762a632ce295598aa9cc7ddbb2b2c2167abc39f53aaf282554ba55bb9f47685fda9747e5aa99f8e5c7645855f902b5cd5136e85abd672b5ee890a716a51df532d12c10c65bc99bbffa45aed8a5044b3d5e1f72b55c4d991717eff231f039188f4efbc4dbeee5d743f91ce4f2a756cec323dbdd7a257e1fe3bf9eb448594156afd513c4dbb463c4fcd49b9562bcf6d14943aa9ee4fc4cc238fef56aae88b580ca6b4a7b72cad9678176b625dd986d8145b62dbb8153b4a45d3d4aaa28099d3f929a5aa3142b1eca9567b6af443d61b5bcf3db13b7bed8a3d316544a662aad178b037bdd6c541a98a28dd9c93722f1889c38a653c8b526fc5d1ac75f8ed4a3d1627e274acd6069946cf9432cfc585b81457e25adc647f6ec59db8170b62512c4dd5ebcc5afda452f3fd824a935856a5fc281aa2295a6245ac8ab6b1601a593d17ccac10e7159ed133cd99aee89a963935e22be9e1d2bc78a66d3aa62b5aa667fa66608659b9175a9c59a99f9ea0d4420f64c6e6ccef5c7ebf52cd8e526a59dfaffa7bb36bf6c4b9f9603e9a4fe6b3b217f355595ffd19986fe6bbb966ae9b1be6a6b935a6d43ea9d5cf28b524ae53bec0dc1647666e6c6fee9a7be67e3195c2340fa63dc53c2c78d5c19474e5a241f3c83c9ef28c93929c9c98a7e699799ecbc785d82b69719795cab85ca9698bd831afcc6bf3c6bc35bb598abb66c5998a61fb534a1569dbbc3717cc4573c95c56d6309b66cb5cc974baaa6c60b6cd37cbb084655a96252ddb72945ac7c7e5915561eca1d3f919a5bee5cb5c9c9963e7012dcff20b69ec595347244651a9a6158e3f3fa7bab4879a3a1f52548fd9b5222b2ebdff819518d785b2ee5428af32a52a9d5a5dab67dca5addb7ab01ead27a5037b7a5c5db43fa254e54dad67ebc57ab5fa994a97ad81f5a694fa4c4ab5de49a9d69ab9a694baae94ba616d5a5bd6b6b5a3fad5b15a9d21daff8c528bb53b25ee2ce4ba6755588fc98de4537d4f8854679f492d7854a56eebc01a1b7d5a47d671beacad930af92855aa756ae55ab7d8b5cea7dfad687f40a9aa5d99f7d68575695d291b5803ed5347946a5d5b6bd68d756bdd654abd57b6602d5a4bd6f218a5a675daa898ce99956af8f9fa9d3ec236f6f2631dab428c529c5535c72a3537c6536dd89aee51f3daee582b937362ad66ebc5a3253d75a6b744a95d69c899e66427d98f2b55fd3f694a4b69b2915aaad5ccab5e49c94a95b6d2aa56aa74944e37329d2e48577ad297c138adca50568bf66756aa8c8dced028a0d2bc8af198ababaa23b7420b9463c61bc6a8b74b9530a55f2ecc4e7565574e9d3f1322af3a39bd6d9729f5d1fab65d6b3fac54d2693a7a6ac867f9425ad5fdbff6a9a952cd37f9aafbfe7b28d5937d39906f72ec4a975cab94ce99956af9a625d7d508209bbd911bc29215d6c27375f55e51a9f959d59edcaa948fae08c7f7e2b8a29f2f313502ab30ee2e686e7b52f49c5d519cf9efc98aebca55ec4795aafc91d2e9aedc532acd6cc4aba691ea8af9f4a1d46c3c75671c6a8feac97d79a0947a288f8cf618ad4672cac8b7a4dc2bf93a79224fe5993c176d7961deca4b73eaec6841a91d5969af42c1178fe9ff731149a599d47cdf2fafabac67652b8ca3aa3b99363a2c2a558df9675c319d643fa954d131efa5256f9446f758ad435ef54a29f56558a96a3c95f5fdf2164a4d757aa7943a90f772412e8ef1aa8b72696a3a3fa1d461b31ea6affda918323f5bd0b12a8e718bb3aa65bbaa72f7ef2aaf3f759747c13736aaed6531d673ba8be49498bba85415677c729f4699fd9c5245479cc915b92adbb63a8db5fae155ad4116a9664a5531401be3294b7bd454a707994e53af3ab0c5b81d0ff694b9f29fdcf32fd2fd97bcd3b390b2aa4a1581b1946b7f25bac8abceb6f233bb25d7e4675fbb966b3c8dec6d2db3a762d4604ff18f45a59ad7df55caa9fd98520762d9b66dc776539d7e2875c4abbee594aaa254e3903caaeef9b5d99e5d9cb1cc4c98e3462063eaf80b4a553d75a0fccd99f26f1ffb904b5335934fddc8ed39eb165755f333a9aa1f9f3ab350b21edc35cadf0a2abe25343afeefdab3f6fe1d7b4a643b9bfd9852bb62dd8ee49e1dcb9b9c565f74acdac8c654434acdc6fd1f1ef543a7a9773db013bb5c11d7d3f6757c5da99997a9a0cdcf29b56c56d5ceedc4c9479c766f7a3f6e94aff77fc6baf6b432ceef4fed5915769355b79f51aa484ccb7eb49fec3835d66aa6d621af9a45aa50aa75adc653baef571e35a753fbd97e517f5ecbcb5198767f623abfa45463cf98fdcd9a59959a9fbf2dacaae66752cd0a3a507ef8bbf6072ba54ede3b5354aaf9addffefe09a5da03b9a13cea5bea5147b5fa11ad52ffaf22d517f8d43715a5ae6b9d0e7bd454a72fb0773bef7ba03d7b7d623a3fad54e3f9b32a9d4da9ea49b9d9f6d155d5dc4c56d7de9015def05051caf7e8348d3a8dc973a345a5dadffa1ee10f29755d79d42d7b5b5951abec55d351d59b756dbeda3bf66eaa54eefb4b75ba97d9be7d505e92f6c479c5cf2a75867dd4a57bff66526a7e5635b28776c6e59f261ea7cda496def34b4a9d3cff319f4a35efed63a5cfadcc726afdd0aa7d629f5a8fd6a37167dc598ff6a9d8b564aee71fd5e999b2f3c2db475473a63de19db7cf29d5be9caad34c9fd97edb9ef0a491d7ea2c4ab5afc6f7ff451554db895ce2538b3bd72bdaeff3a9f6b57d63dfda774aa15bda58addaaf9a4dfb3e55e8a8d90bf6a2bdf4a1d39c4a97336b946aa6674f18097f46a9257be58a75dd33426199b6ddb257ec55d9cc9f3b8b52cf0a6f00aad687d5f6cfcca4667938ccc7a962d9313e63f686087f9b521de198d6ab63657d7f41abe4571d692fa4ca74ec6123b53a8ebc9387eacf874e3f54aacc71cbfddba495e9cf28b5b0f74deff797d7c2326e45685ba2e178b263dc51bf68ece7b53da352f7d43387a308bdaa9a4f87a8b89e9e9bbf57f7757cd913f2c39cc00986799ca97638a56dcca5524327825247d50aad7ee8549e7c94b813dbf7a45627b19f339de654ea7494759d5e79ffef4c189bceaed46c35b1eb3c0ee926ade727f1683a5208a9e295429c585c159d51a91b463a8b995ac77956f642abaa851d542755d7d38bf3a9ce377ce763ccb3e64ca94edfec3803e7cdb186b4faa1d76da5d377d2a9bd505c0575628a5a9db55195661a4d554ab65ea654e3c419fb6da0aa4a75369d2d67dbd971769d3d67df39700e9d23b98838adeb1ccb9e53baff184f29e86216a53a27cea973e69c67b6ef5ca8675faa3c5d95acc1577fbb3fdf76ba8e5e37726e9c5be74ee575c7b977169cc5cfab00cf9a3ba53a4bf663aa5336ad54a895b4a8d458da9b98bbe457853ba2d2eeb05965fd7ffabec5d87dcbd394ea349ca64abd745a86c4d4afedaca4a672b4aa147b698493761fe3297b9395aaeed566334c57bfa3afda475b3d4f3d5b3d6fe4d9ae704de3d07919edc1e5e50c35942b25b9e85ace9661d2f30c3dd1adc8769aae1c93d60aefaecf9f525dc7755dcff55dbf4caf6e807e7fecae12374cb56c2f389d4ca55a9f6ee44656c36aa8bfe312a5a6fa1bbba63a49a9ce829ba4f594cf8936d759713b6ed79dbaab33e7fb724a754edc07ad0c65ee635a06cecda4a73b2ba2ef3eb9cfc331885cafb61b0a69fa58d9eaaa78e2c8394b7569b8a5cf53ea755f5c151fb8fde1b4aa340cccdb69dfa99843a5be59afeebbbba66d48b3ee7aea31954e27eeb1219f6b9aa30afd30795cd8939e993b73efaf6a64b24a87d5bae94edba351580f1a56aadb574f1abaa3bbe56eab7e77fad35355ef18fc4659853da92369ea6be574dcdd54fb539f26dd3d777f3855e2d81db807e6942f11cda352c5957b38a4d421c5ba47e451dd897b4a652bd5b37d3aaa4fe54d4fc8ac4ef9bbafeed8ef8f952b55c56955543aec7126ac0b1967c5592d77e88da19c52857be15e567dba6a27579817e889c64c3544fae91abbeef554957ea8758433a5de4c1bc5cda352dddb52a5a68679d3c977b5c254a9ee3d2b73c816522b51ea6eba27468e9dfbcf2bd555e387cc9f555529e7aee58e895a8c97b215767368ff515ea98618d3078f518fbb9c6ad5acf4eec148cab2b29a41a705534a6db8cd69bba2e750a92da5d41577b5c4d6dc368dfa27df55eca74ab51e3d8394396a96e119254add9d41a9d7f6a6a7c64f93ea461ccfa6d5b26844e96ab25267528b677a96dca8b2273597b23de35a8d093fadd3ecd9d2b3a77edbe53f58a99ee315bc42aa5473d1f3dcbb529b4da97e9952dd8512a5d258a3aa523b5e50d6ef2a75da5ee8455eec25ea4f478d254af4eab4bcfc7e3c3fbf0f5ad7d6504e272b55f4d5b33beae9a17aae5bfadc15afe73d4cdf935a524f8f65b975fa86504f7c52397df2c274dc342e6d4edf7bf6a6beb13e874a7d534a7d4d75e90dfd6f58a9957bff88cd6a7f440056dbeb6773fff9fd2023bac895e2d079ceb33728ed775da5cf37ef5d6e7a6bdebab7e16d7a5bde76892f723dd7d37ecd789cb08ba5eb0dbd7b3541a9ae6a1d7bdebe77e01d7a47deb177e26d1775a33cdba977e67de25d79efa26c85c6bbf4aebc6befc65ef06ebd3befde2dd533ce5d98e65de651a9dea552ea18afea2d551f5159c1f0fcd4b0d95de748067231edf187f45acda7aab185739ed79faa8b65af213b1f73672251e786e2cc6b7a450f677b2d6fc578f256a77c017864f771b952d5933b5edb3786572d7ce19bbe55d48de7fa9f7a832e1fe7a83a0a7ddb77ecf4cde1d877d36f9d7bab62c7f7bcb0d4b3babe3f69c5034ff90f56aa1f1495aa4a3ef1432987f5e9bc7f981f654a9df8de02f95de1fab19ff89dd446e6fdd7fdaedff31ffc47ff6954adfef83b0e7954ffa54ca7feab3fb2175b08d5a30f9c6723f407655af5dffce97b94bb72dbd65f7428576afa64a730af2e127fcd5f2ff873e97fe2173a9c9d51cda76dc3dff4b7b22f3051c92d65d14bd7dff6773cb344abaebf3bdf4a555add2bf6a35eecefb3471dd6686ae6137955eb717c7cee667d3fcdfca796e97548b1c2f60ffc43ffc83ff64ffc53ff4cbefbe7347fe3578a539db3bc0254cd5dfa85f79d7ddaa13230aefd1b95cf516df7fd5b7b23177f947d9db0e7eb48a74ca9ca4bde97ed56340fd538bfe78a9c6a6c7f6a1f5c92f7bc6fb6fd457f4994cdf40d9c177f399fd75fa2d446895243bf692ee535eabcbbebe693b2155a4d1d17f7580fb49a6a2f662bff7a0795d22b2936b1a4df52cf58f157fd766078bd4004a60c945a7be6f8df17d2e5e71c157a81beb7e797bcdb2223bcb7dd35aeddab82baddc01a5166ba33c0166141ad7abebca854711cc8f2b99ff4bb6ace6360e79eeaba63be5831de0267b4ef4fd71003b7b45521af8157f0e5bf40a96e619638ab43dfea97aa34b51773093b54ee8b7ed5dcc59e80b5a19da9cbc3a6b41a0781f2827b411844feae526b1c24fe43d009bae3dfd7f8e8fbdddd7c3d04bd60cc7e15bfc35a0d1ef36d52f4832723e42f7088377b2378963d4b16eabecdb16f894fb583b1236a63cd79095ef38a11f1ac5fcf497714e46aa72faf277c31bc6b2d17fccf2f50aa17948d8d8341f0f6a1d1d4c89b2a952afbd8f5673dca137e5728783777ed7bbd93ea39580bd6837568756f647f6a27d8484b3fd8f4f7a0d7d4bb6e05dbe3bf736ce8fdcf85bedf0d76c6bf2d609c9ae99ed3aef3e8ee8c5e278efd5d6165bbfdbbf686796aedd21a27ed161cb2eb00e3ffa252bde560fc9e9a8671ed5c7ec6b7e5ee33a2d374bc1bec8f8954b8d7790cf2b3afd5953ab2cbfc3f49a985fe89fab4c3e0c87c2695c29342a5a94ed3bdd4c33ba9e1458777527be997288235db535a7d19556b701c9c04a71f6d3e55ab670691b23339f6db89f25a5e9b5d796d2dbb97a3fec2eb0453e67dac3d6fd708ad9d92bee3c288c45970e9781f5fcc35aee8596cf25aec506b2c28d50dae82b1df6e305e55a4da5639cd2966f258346fae2c3cf326b80deeb26feef64674a5bf1617dc070bb99eb2aa52cf3ff26daaf62b563fafaca27d51a98b058f9ad661182cd9db233dfe884ee573b06cbdd9f7a4d6d1b7538286f48226bf9d02cffaa1d654a9256bf54aadaed708c6feb28e29856fde99775e61463de84d5f9db41e8255f7dcbdc8f58976d0b657642734ca9fc52630c39357aae887627c8a8d7eaa54b7f335a5e6a354af1366df9b119129edcdf47b5ba665aa90451aeabfe9d7f743d371bc60cf4d46f25ad1977b37c339177ed55db4d5ec8baba9bdd02a9945b74319daf6f6a837fdd0a97c0e1deb2a74433530f2fba95eed05bfef3861206fad85a0995af62d2a7ae3cf1b8d03c2b06c865af5a4d5be0c96f3166ea36add87516e5ed20e67ea890b3ed50e277cf925ed89fd73a5d451c5f8b37de929ece4a2d4301c595f13913c31eec4915c1647c69d3c09b1b3317c18b9ee1351c7f7db17957a5d16a98ae3f0317c524a1d5269aad36ccbee73e651539d3e872fe16bd837a3d464140ec2b7f03d5c9ba4d5703ddcc8f58899a5eb7d6185a8a8c4af6d4d5e8518ba36df93dae1f62c655554eaf8d9d1ec3b15ddaf2bb5309e5aaee6e79cdb9156f92b94ea96fd26958ae1c21dfb69a24edd703753ea9eb5995ab8afec2d3c080fb2f7a8390280567514f0121e96afd88747e363be0f0b8f0b6aabf05d705c7b5af0a995af4dadc4a78e9fabc8c6655f576abab77ff899e179b52fec3b9ba37b697f81523b7231b44ad6a8fb6e23bc505eb544a7daa3ee8697615f464aa50750eabef2a907a9574d953aa4d53bf2ace155789dab3bed2bc24abf389aab81542db733e43617398433c561254a1df3cba478fbe9fb95aaaeafb60b3bd77ffc0aa53a2f65e3ffac1e16c2c58fe89474aa3dea123c6a3ff3a71f4a85574d238011bf9a69552975b97c5750d8082bed312a51ea0c355050ea4cf3f0332895be68f41d4a159f8b379dc5f0d729d5e8caf7b2952ad10fa2e048e9b3a053ed519552b3df4821a50ea054ed55737e7510ae84ab252d4264b146a55fc62d55ea0cb1666efdbcff65a596d6fec7fb24dfafd420aaa6b8dfe853538b8c52afea864924e4deb04ed32fa7c1a3a67d7f51a9d4ffc3abea9155aad54335ec2ad95f947a54351cabf8bbbf4ee34b4a95a3f98b66faea62b952d5d8e9dd78339e8dcdf4abc1e6f06f05fe40ef1f44d57affdf18a7665e3528f3aa695d446ee4d92e7d898a22d4618faafafea252b3fe3ff3aa2e4500a956235ffd29ddfd9c7ad4289cfe5b7a64c5f17b54f917918b4a8bbe3a4b15eb3548febeeefbf72ad54df2b354154754bf6fec8f528d92312a32a34ed4cde9943cea9052a39e1efd0ff5ff1f11406ad143f91394477dac16a3663557545be56f47142387d9f6e08d8b53c7efc3feba52a35cc4e275a24abf36f70be753f56e84e8b56c0faee82badf6a341aa53ccf6b347cd949a8efc734a45ff3facd5e82d7a1fabd3b568e297530b29ce8d8aa28daaf3a9d166a1d6bf6544357eafc837ccfc47f935aaa852b4939b87fd3d4a55a51aed94ec6ba45c36a2dd682ffb7d3ff2a89952a5937ad452a58e7855d5f7f7a37d75eff23727ece8a0b80f79628a73919b67567d7bbe308bde896678ef7e8252c7ed6bfa0e9f7a54e8432ab54b437c6635f567edbb94aa228093316a526a884e83e5e84c7b54ddf747e7a4d4a1792a566aa6d5e8c25ecae6fa4bdf374e7bfee872b614475705bd55fc858f7ceebce5a8d21c2edb38a546b7e53a951bd15daef5cfacd4b23e64da3ba665fb5a7e9152b3ef4245f763ded575d5a8672b5a8816954e87fa7e8a52d311d58852074aa9a956dfa3a568b97c959f74ea3d478d59531c35f32b4d41a56833fb8ac5d075e238b81abf77abccc6fad4c2af58d1aebca815ada811d117955a185375a2a93b9ca2765edfbf4aa9d96f1dc5c6d87771ed58c4a675135b994e87a254add4c190575516cbd80e4ec7eb347662b7f84ec9342bf80be1b9f1d8770586aecb8f19dd78c6df5b18abd49ddcbecef49711afe3201d27c6612e5e9c59a9c57d35f194d98e6209fd3aa5a66f0d5bdee904adc6712297e34edc8d7b615fd95e9952e387f0cdda0a5af163f6fdae313a8dd6e2a7e96ff696a639b716aed235f59adcac8da8b2af356fe3946af7dd73f356a4bf0faf4cfd7d6badc42f349b5418d9ccacd4f8b5f81e553cf177660a6df2372a5569351e4cd06afafeb11b6cc46ff1bb748cfb782d35a5cb6c3c153f285b97b7f146bce93e8d572974ba658f598b9c66ce69c167c878e288d8ed977da9498efd0ad6b8bb8c5f4db51efc7ebc23cfe2ddec1bc21f5f3ffeb2529556f3a3515769756cacea344bcafd572a5569f52088267e194c6930388d0fe3a3f8383e091af6a2bd189fc667f1797c115f061b598f3fe1fa4ca757b38df8872dbe2efa0c557713464725e9b183994653a9555ff7ffb06f516aa13f48ef1997eeaec9cf6ffc62a52a8befe3857871ca57ec5cfa3267709a9a7be97682d36c266aa24649a7de42bcf4799d66f57157a8bb54aba55f1e76168a694abf692066fe46c4df526a8957cdbe3d1976dc9128c0b91f5bfabf54a9e93743ad87b8e1754a735dd42c5b85b3d538aa19b7667b43a3a4e6564a476ad2693b23916fbcaa62b6bca6451aa3c61577c40cdbdf536a6294e637fde2af7013faeaf4441ff18b959a958f087a337c9db4824abd4e6226d677e43aee977ee9cfcebe21de765f942544656779edcfc4c87f4fa963f32b86be913da9ec7fb95295678d0dcfeb4c185fcda052c34d6462c7bb9f4feba825ced8af524eae3b3771bd9963d4d4fea652557ebd2f7c13f3d72b352b213fb8526a1df335d26a2a4dbf35970449e51d53d52c89c67eef7ebcd949fcd9d6f27795aaf29b84ad8af9cd9fa59e6b7e9b8ff8acfdb452d32ff7251d77e095be55325da54a1bdda4973c7c764e6a92258f5ea77a7ca2da4be8b53fefd5ffb652557e9fa6e757c558cbc973f13b03dfeb253e633fafd4d4e4897790bc7851c957f3c66b54446b71336c27af3fa152b2a4ef5e8cdb5530aa52159d26c9a0ecfb5555edef2b55e5f72d791fef33545b740399ac7977f9f7fd0dcffae228f6ebf667949a9a15ca5eb29e6c446bd9d79efbc52f948b63a79f46a45e275a0b1bc966b41e6ecebe5e3a9b8928dc0ec2496a157dcf4db6824132d33bd34573169d96cab5b62a4a55637277f89af0fc6b4a555add4976c3adeccbd7f6686abce540faafd46718236fb5a8a315d69b7fdafe9c52c9dc30d80bce933d352eb94cf6a3b56153d1e84172981c25c7c949723afe17fbbedb547c72a6c67eaaf63cf7a3fed2f534f52fb1b797accbced77bbfe4dc6d0487e1239bf25e137e3d1bd75c06f2e30a75cdce57954ae6ad4587fe4672158af4aee224b9f6f6939b8f5537632456552d64c23734fe94fd69a5b299bbf682dcf40e7d23b9f50db2b029a4f528ff4aa9c8256f2db94bee23275988fd6431590c6e9225ef40c8ef6b31e6ae6cb9219b6c55e9513fce4f2da9f40bd433a4e8c0be7043fb22698cfe7b7e67c46cefe1fc8cfd2da5d6f667ccd951f1feb3b3eddc8615df6d2846d45e27f9b1914275ab95fabb4d29957e1d15bf093b7ddf98ba66abf04ecb4c6f37fc8cd54afddde66ce7660f56a6af451bb919d5a0977ce2b785bedb6aa5fe6e2b7e9732993226cbbf15a1c6538fdf338efb9ad54afddd56fc665c32f69bada93937dfb1c3f127ac56ea6fb7a2f292b16f5295ed71f4226bc2ef1aff39ab95fadbade417fea4fb52fc0578573acd925d2c6ed21eff3b087fd26aa5fe762bbcf39ff9d5f4dfdcc46946eda8edbea46b61657b1cc571b255fd0b353f6bb5527fbf758c71dff598bc3f551c07bdcfec19ff19ab95fafbad23d255e252ad4eb0f4572b3be677af8a7dde6aa5fe1bac638dfd5ed21873fa41cfbfff737b2fa65badd47f8775a47b5175e778bac7b163276b3fbd8f6d36ab95fa6f31eba1e304e134b5a67bc8922def4dccf885989fb75aa9ff264bf737ba8ffecac7ee54f2a1d8e5d8f1e2e030594f4efffe0effa2d54afdb7995cb2e28e1bc5e9ded4e0ca1db803f5f761c70b65c7b7cebef256c3cf5aadd47fafa5fb65e589791e5cbbe17f564c5a66b5526b9b0fab955adb7c58add4dae6c36aa5d6361f562bb5b6f9b05aa9b5cd87d54aad6d3eac566a6df361b5526b9b0fab955adb7c58add4dae6c36aa5d6361f562bb5b6f9b05aa9b5cd87d54aad6d3eac566a6df361b5526b9b0ffba252a3825297dc197fa3b9b6daaad8d794ea9e9b47a32f379a47b2566a6d3f605f536a6db5fd29ab955adb7c58add4dae6c3fefbffffdffff57f006c1d40e8</data> ! </image> ! </images> ! <layoutdefaults spacing="6" margin="11"/> ! </UI> --- 1,116 ---- ! <ui version="4.0" > ! <author></author> ! <comment></comment> ! <exportmacro></exportmacro> ! <class>LPFormAboutBase</class> ! <widget class="QDialog" name="LPFormAboutBase" > ! <property name="geometry" > ! <rect> ! <x>0</x> ! <y>0</y> ! <width>305</width> ! <height>253</height> ! </rect> ! </property> ! <property name="sizePolicy" > ! <sizepolicy> ! <hsizetype>0</hsizetype> ! <vsizetype>0</vsizetype> ! <horstretch>0</horstretch> ! <verstretch>0</verstretch> ! </sizepolicy> ! </property> ! <property name="windowTitle" > ! <string/> ! </property> ! <property name="sizeGripEnabled" > ! <bool>false</bool> ! </property> ! <layout class="QVBoxLayout" > ! <property name="margin" > ! <number>11</number> ! </property> ! <property name="spacing" > ! <number>6</number> ! </property> ! <item> ! <widget class="QLabel" name="PixmapLabel1" > ! <property name="pixmap" > ! <pixmap resource="resources/longplayer.qrc" >:/new/prefix1/longplayer.png</pixmap> ! </property> ! <property name="scaledContents" > ! <bool>false</bool> ! </property> ! <property name="alignment" > ! <set>Qt::AlignCenter</set> ! </property> ! </widget> ! </item> ! <item> ! <widget class="Q3Frame" name="Frame3" > ! <property name="font" > ! <font> ! <family>Lucida Grande</family> ! <pointsize>12</pointsize> ! <weight>50</weight> ! <italic>false</italic> ! <bold>false</bold> ! <underline>false</underline> ! <strikeout>false</strikeout> ! </font> ! </property> ! <property name="frameShape" > ! <enum>QFrame::NoFrame</enum> ! </property> ! <property name="frameShadow" > ! <enum>QFrame::Plain</enum> ! </property> ! <layout class="QVBoxLayout" > ! <property name="margin" > ! <number>11</number> ! </property> ! <property name="spacing" > ! <number>6</number> ! </property> ! <item> ! <widget class="QLabel" name="TextLabel1" > ! <property name="font" > ! <font> ! <family>Lucida Grande</family> ! <pointsize>10</pointsize> ! <weight>50</weight> ! <italic>false</italic> ! <bold>false</bold> ! <underline>false</underline> ! <strikeout>false</strikeout> ! </font> </property> ! <property name="text" > ! <string>LongPlayer</string> </property> ! <property name="alignment" > ! <set>Qt::AlignCenter</set> </property> ! </widget> ! </item> ! </layout> ! </widget> ! </item> ! </layout> ! </widget> ! <layoutdefault spacing="6" margin="11" /> ! <pixmapfunction></pixmapfunction> ! <customwidgets> ! <customwidget> ! <class>Q3Frame</class> ! <extends></extends> ! <header>Qt3Support/Q3Frame</header> ! <container>1</container> ! <pixmap></pixmap> ! </customwidget> ! </customwidgets> ! <resources> ! <include location="resources/longplayer.qrc" /> ! </resources> ! <connections/> ! </ui> Index: lpformplaylists.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformplaylists.cpp,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -d -r1.30 -r1.31 *** lpformplaylists.cpp 2 Jan 2006 23:16:21 -0000 1.30 --- lpformplaylists.cpp 23 Feb 2006 19:55:02 -0000 1.31 *************** *** 22,27 **** LPFormPlaylists::LPFormPlaylists(LPApp* app, QWidget* parent, const char* name, bool modal, Qt::WFlags fl ) ! : LPFormPlaylistsBase( parent, name, modal, fl ), _app(app), _playlist(0) { refreshPlaylists(); } --- 22,39 ---- LPFormPlaylists::LPFormPlaylists(LPApp* app, QWidget* parent, const char* name, bool modal, Qt::WFlags fl ) ! : QDialog( parent ), _app(app), _playlist(0) { + setupUi(this); + + connect(buttonApply, SIGNAL(clicked()), this, SLOT(apply())); + connect(btnPlaylistAddDir, SIGNAL(clicked()), this, SLOT(PlaylistAddDir())); + connect(btnCreatePlaylist, SIGNAL(clicked()), this, SLOT(PlaylistCreate())); + connect(btnSaveAsPlaylist, SIGNAL(clicked()), this, SLOT(PlaylistSaveAs())); + connect(btnPlaylistRemoveDir, SIGNAL(clicked()), this, SLOT(PlaylistRemoveDir())); + connect(btnRemovePlaylist, SIGNAL(clicked()), this, SLOT(PlaylistRemove())); + connect(btnPlaylistToggleSubDirs, SIGNAL(clicked()), this, SLOT(PlaylistToggleSubDirs())); + connect(btnAddM3U, SIGNAL(clicked()), this, SLOT(PlaylistAddM3U())); + connect(boxPlaylist, SIGNAL(activated(int)), this, SLOT(PlaylistSelect())); + refreshPlaylists(); } *************** *** 44,53 **** void LPFormPlaylists::accept() { ! LPFormPlaylistsBase::accept(); apply(); } void LPFormPlaylists::reject() { ! LPFormPlaylistsBase::reject(); getApp()->restorePreferences(); } --- 56,65 ---- void LPFormPlaylists::accept() { ! QDialog::accept(); apply(); } void LPFormPlaylists::reject() { ! QDialog::reject(); getApp()->restorePreferences(); } Index: lpformplaylists.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformplaylists.h,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** lpformplaylists.h 2 Jan 2006 23:16:21 -0000 1.11 --- lpformplaylists.h 23 Feb 2006 19:55:02 -0000 1.12 *************** *** 7,17 **** #ifndef LPFPLAYLISTS_H #define LPFPLAYLISTS_H ! #include "lpformplaylistsbase.h" #include "lpsettings.h" class LPApp; class CompositePlaylist; ! class LPFormPlaylists : public LPFormPlaylistsBase { Q_OBJECT --- 7,18 ---- #ifndef LPFPLAYLISTS_H #define LPFPLAYLISTS_H ! #include "ui_lpformplaylistsbase.h" #include "lpsettings.h" + #include <QDialog> class LPApp; class CompositePlaylist; ! class LPFormPlaylists : public QDialog, public Ui::LPFormPlaylistsBase { Q_OBJECT *************** *** 21,25 **** LPFormPlaylists(LPApp* app, QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags f = 0 ); ! //inherited slots void apply(); void PlaylistAddDir(); --- 22,26 ---- LPFormPlaylists(LPApp* app, QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags f = 0 ); ! private slots: void apply(); void PlaylistAddDir(); *************** *** 34,37 **** --- 35,39 ---- void PlaylistAddM3U(); + //inherited slots //when quitting void accept(); Index: lpformplaylistsbase.ui =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformplaylistsbase.ui,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** lpformplaylistsbase.ui 27 Dec 2004 23:57:23 -0000 1.7 --- lpformplaylistsbase.ui 23 Feb 2006 19:55:02 -0000 1.8 *************** *** 1,530 **** ! <!DOCTYPE UI><UI version="3.2" stdsetdef="1"> ! <class>LPFormPlaylistsBase</class> ! <widget class="QDialog"> ! <property name="name"> ! <cstring>PlaylistsBase</cstring> ! </property> ! <property name="geometry"> ! <rect> ! <x>0</x> ! <y>0</y> ! <width>496</width> ! <height>502</height> ! </rect> ! </property> ! <property name="caption"> ! <string>Playlists</string> ! </property> ! <property name="sizeGripEnabled"> <bool>true</bool> ! </property> ! <vbox> ! <property name="name"> ! <cstring>unnamed</cstring> ! </property> ! <property name="margin"> ! <number>11</number> ! </property> ! <property name="spacing"> ! <number>6</number> ! </property> ! <widget class="QLayoutWidget"> ! <property name="name"> ! <cstring>Layout5</cstring> ! </property> ! <hbox> ! <property name="name"> ! <cstring>unnamed</cstring> ! </property> ! <property name="margin"> ! <number>0</number> ! </property> ! <property name="spacing"> ! <number>6</number> ! </property> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>btnCreatePlaylist</cstring> ! </property> ! <property name="text"> ! <string>New...</string> ! </property> ! </widget> ! <spacer> ! <property name="name"> ! <cstring>Spacer2</cstring> ! </property> ! <property name="orientation"> ! <enum>Horizontal</enum> ! </property> ! <property name="sizeType"> ! <enum>Expanding</enum> ! </property> ! <property name="sizeHint"> ! <size> ! <width>20</width> ! <height>20</height> ! </size> ! </property> ! </spacer> ! </hbox> ! </widget> ! <widget class="QLabel"> ! <property name="name"> ! <cstring>TextLabel2</cstring> ! </property> ! <property name="text"> ! <string>Playlist</string> ! </property> ! </widget> ! <widget class="QLayoutWidget"> ! <property name="name"> ! <cstring>Layout11_2</cstring> ! </property> ! <hbox> ! <property name="name"> ! <cstring>unnamed</cstring> ! </property> ! <property name="margin"> ! <number>0</number> ! </property> ! <property name="spacing"> ! <number>6</number> ! </property> ! <widget class="QComboBox"> ! <property name="name"> ! <cstring>boxPlaylist</cstring> ! </property> ! <property name="minimumSize"> ! <size> ! <width>100</width> ! <height>0</height> ! </size> ! </property> ! </widget> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>btnSaveAsPlaylist</cstring> ! </property> ! <property name="text"> ! <string>Save As...</string> ! </property> ! </widget> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>btnRemovePlaylist</cstring> ! </property> ! <property name="text"> ! <string>Remove</string> ! </property> ! </widget> ! <spacer> ! <property name="name"> ! <cstring>Spacer5</cstring> ! </property> ! <property name="orientation"> ! <enum>Horizontal</enum> ! </property> ! <property name="sizeType"> ! <enum>Expanding</enum> ! </property> ! <property name="sizeHint"> ! <size> ! <width>20</width> ! <height>20</height> ! </size> ! </property> ! </spacer> ! </hbox> ! </widget> ! <widget class="Line"> ! <property name="name"> ! <cstring>Line1</cstring> ! </property> ! <property name="frameShape"> ! <enum>HLine</enum> ! </property> ! <property name="frameShadow"> ! <enum>Sunken</enum> ! </property> ! <property name="orientation"> ! <enum>Horizontal</enum> ! </property> ! </widget> ! <widget class="QLabel"> ! <property name="name"> ! <cstring>TextLabel4</cstring> ! </property> ! <property name="text"> ! <string>Sources</string> ! </property> ! </widget> ! <widget class="QListView"> ! <column> ! <property name="text"> ! <string>Path</string> ! </property> ! <property name="clickable"> ! <bool>true</bool> ! </property> ! <property name="resizable"> ! <bool>true</bool> ! </property> ! </column> ! <column> ! <property name="text"> ! <string>Subdirs</string> ! </property> ! <property name="clickable"> ! <bool>true</bool> ! </property> ! <property name="resizable"> ! <bool>true</bool> ! </property> ! </column> ! <item> ! <property name="text"> ! <string>New Item</string> ! </property> ! <property name="text"> ! <string></string> ! </property> ! <property name="pixmap"> ! <pixmap></pixmap> ! </property> ! <property name="pixmap"> ! <pixmap></pixmap> ! </property> ! </item> ! <property name="name"> ! <cstring>viewPlaylistDirs</cstring> ! </property> ! </widget> ! <widget class="QLayoutWidget"> ! <property name="name"> ! <cstring>Layout7</cstring> ! </property> ! <hbox> ! <property name="name"> ! <cstring>unnamed</cstring> ! </property> ! <property name="margin"> ! <number>0</number> ! </property> ! <property name="spacing"> ! <number>6</number> ! </property> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>btnPlaylistAddDir</cstring> ! </property> ! <property name="enabled"> ! <bool>false</bool> ! </property> ! <property name="text"> ! <string>Add Directory</string> ! </property> ! </widget> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>btnAddM3U</cstring> ! </property> ! <property name="enabled"> ! <bool>false</bool> ! </property> ! <property name="text"> ! <string>Add M3U</string> ! </property> ! </widget> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>btnPlaylistRemoveDir</cstring> ! </property> ! <property name="enabled"> ! <bool>false</bool> ! </property> ! <property name="text"> ! <string>Remove</string> ! </property> ! </widget> ! <widget class="QPushButton"> ! <property name="name"> ! <cstring>btnPlaylistToggleSubDirs</cstring> ! </property> ! <property name="enabled"> ! <bool>false</bool> ! </property> ! <property name="text"> ! <string>Toggle Subdirs</string> ! </property> ! </widget> ! <spacer> ! <property name="name"> ! <cstring>Spacer4</cstring> ! </property> ! <property name="orientation"> ! <enum>Horizontal</enum> ! </property> ! <property name="sizeType"> ! <enum>Expanding</enum> ! </property> ! <property name="sizeHint"> ! <size> ! <width>20</width> ! <height>20</height> ! </size> ! </property> ! </spacer> ! </hbox> ! </widget> ! <widget class="QLayoutWidget"> ! <property name="name"> ! <cstring>Layout11</cstring> ! </property> ! <hbox> ! <property name="name"> ! <cstring>unnamed</cstring> ! </property> ! <property name="margin"> ! <number>0</number> ! </property> ! <property name="spacing"> ! <number>6</number> ! </property> ! <widget class="QLabel"> ! <property name="name"> ! <cstring>TextLabel1</cstring> ! </property> ! <property name="text"> ! <string>Files to include</string> ! </property> ! </widget> ! <spacer> ! <property name="name"> ! <cstring>Spacer3</cstring> ! </property> ! <property name="orientation"> ! <enum>Horizontal</enum> ! </property> ! <property name="sizeType"> ! <enum>Expanding</enum> ! </property> ! <property name="sizeHint"> ! <size> ! <width>20</width> ! <height>20</height> ! </size> ! </property> ! </spacer> ! <widget class="QLabel"> ! <property name="name"> ! <cstring>TextLabel1_2</cstring> ! </property> ! <property name="text"> ! <string>Files to exclude</string> ! </property> ! </widget> ! </hbox> ! </widget> ! <widget class="QLayoutWidget"> ! <property name="name"> ! <cstring>Layout12</cstring> ! </property> ! <hbox> ! <property name="name"> ! <cstring>unnamed</cstring> ! </property> ! <property name="margin"> ! <number>0</number> ! </property> ! <property name="spacing"> ! <number>6</number> ! </property> ! <widget class="QLineEdit"> ! <property name="name"> ! <cstring>edtMasks</cstring> ! </property> ! </widget> ! <widget class="QLineEdit"> ! <property name="name"> ! <cstring>edtExcludeMasks</cstring> ! </property> ! </widget> ! </hbox> ! </widget> ! <widget class="QLabel"> ! <property name="name"> ! <cstring>TextLabel2_2</cstring> ! </property> ! <property name="text"> ! <string>enter file masks separated by semicolons, e.g. *.mp3 ; *.m3u</string> ! <... [truncated message content] |
Update of /cvsroot/lplayer/lplayer/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2314 Modified Files: absutil.cpp compositeplaylist.cpp directoryplaylist.cpp genrewidget.cpp genrewidget.h growlnotifier.cpp logqt.cpp logqt.h lp.pro lpargparser.cpp lpdatabase.cpp lpdatabasexmlreader.cpp lpdatabasexmlreader.h lpdatabasexmlwriter.cpp lpdirview.cpp lpdirview.h lpformabout.cpp lpformabout.h lpformplaylists.cpp lpformplaylists.h lpformprefs.cpp lpformprefs.h lpformsearch.cpp lpformsearch.h lpformstartup.cpp lpformstartup.h lpgrowl.cpp lpguihandler.cpp lplayer.cpp lplayer.h lpnogui.cpp lpremotegeneric.cpp lpsettings.cpp lpsong.h lpwindowmain.cpp lpwindowmain.h lpwindowmainbase.cpp lpwindowmainbase.h m3uplaylist.cpp mpg123.cpp playlistreader.cpp queuebuilder.h simpleplaylist.h songaccess.cpp songwidgets.cpp songwidgets.h stable.h synchronizeddbaccess.cpp synchronizeddbaccess.h winamp.cpp xmms.cpp Log Message: first qt4 conversion part Index: absutil.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/absutil.cpp,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** absutil.cpp 22 Feb 2005 15:25:08 -0000 1.27 --- absutil.cpp 2 Jan 2006 23:16:21 -0000 1.28 *************** *** 267,271 **** logDebug(string("copying file ") + filename + " to " + destination ); QFile fin(QString::fromLocal8Bit(filename.c_str())); ! if (!fin.open(IO_ReadOnly)) { logWarning(string("absUtil::Could not open file") + filename); return false; --- 267,271 ---- logDebug(string("copying file ") + filename + " to " + destination ); QFile fin(QString::fromLocal8Bit(filename.c_str())); ! if (!fin.open(QIODevice::ReadOnly)) { logWarning(string("absUtil::Could not open file") + filename); return false; *************** *** 273,277 **** QString dest = QString::fromLocal8Bit(destination.c_str()); QFile fout(dest); ! if (!fout.open(IO_WriteOnly)) { logWarning(string("absUtil::Could not open file ") + string(dest.local8Bit())); return false; --- 273,277 ---- QString dest = QString::fromLocal8Bit(destination.c_str()); QFile fout(dest); ! if (!fout.open(QIODevice::WriteOnly)) { logWarning(string("absUtil::Could not open file ") + string(dest.local8Bit())); return false; Index: compositeplaylist.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/compositeplaylist.cpp,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** compositeplaylist.cpp 4 Jul 2005 15:22:03 -0000 1.13 --- compositeplaylist.cpp 2 Jan 2006 23:16:21 -0000 1.14 *************** *** 49,52 **** --- 49,53 ---- //deletes subplaylists void CompositePlaylist::setPlaylist(Playlist* list) { + if (!list) return; logDebug("compositeplaylist::samesource"); if (list->getType() != TYPE) return ; Index: directoryplaylist.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/directoryplaylist.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** directoryplaylist.cpp 27 Jun 2005 15:52:04 -0000 1.15 --- directoryplaylist.cpp 2 Jan 2006 23:16:21 -0000 1.16 *************** *** 34,37 **** --- 34,38 ---- void DirectoryPlaylist::setPlaylist(Playlist* plist) { + if (!plist) return; if (plist->getType() != TYPE) return; DirectoryPlaylist *dlist = (DirectoryPlaylist*) plist; *************** *** 77,85 **** d.setFilter( QDir::All); ! const QFileInfoList *list = d.entryInfoList(); ! if (list) { ! QFileInfoListIterator it(*list); // create list iterator QFileInfo *fi; ! while ( !_abort && (fi=it.current()) ) { // iterate over files if ((fi->fileName() != ".") && (fi->fileName() != "..")) { while (fi->isSymLink()) fi->setFile(fi->readLink()); --- 78,86 ---- d.setFilter( QDir::All); ! QFileInfoList list = d.entryInfoList(); ! if (list.size()) { QFileInfo *fi; ! for ( int i = 0 ; !_abort && i < list.size(); i++ ) { // iterate over files ! fi = &list[i]; if ((fi->fileName() != ".") && (fi->fileName() != "..")) { while (fi->isSymLink()) fi->setFile(fi->readLink()); *************** *** 92,96 **** } } - ++it; // goto next list element } } --- 93,96 ---- *************** *** 101,103 **** QDir d(QString::fromLocal8Bit(filename.c_str())); return d.exists(); ! } \ No newline at end of file --- 101,103 ---- QDir d(QString::fromLocal8Bit(filename.c_str())); return d.exists(); ! } Index: genrewidget.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/genrewidget.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** genrewidget.cpp 8 Jan 2005 02:53:13 -0000 1.6 --- genrewidget.cpp 2 Jan 2006 23:16:21 -0000 1.7 *************** *** 5,13 **** #include <qpixmap.h> ! #include <qframe.h> ! #include <qheader.h> ! #include <qwhatsthis.h> #include <qimage.h> ! #include <qpicture.h> #include <qpixmap.h> #include <qpainter.h> --- 5,13 ---- #include <qpixmap.h> ! #include <QFrame> ! #include <q3header.h> ! #include <q3whatsthis.h> #include <qimage.h> ! #include <q3picture.h> #include <qpixmap.h> #include <qpainter.h> *************** *** 15,20 **** #include <qfile.h> #include <qapplication.h> ! GenreConstraintWidget::GenreConstraintWidget(QWidget* parent, const char* name) : QFrame(parent, name), _message(""), x1(0),y1(0),x2(0),y2(0) { setMinimumHeight(94); setMaximumHeight(94); setMinimumWidth(184); setMaximumWidth(184); --- 15,26 ---- #include <qfile.h> #include <qapplication.h> + //Added by qt3to4: + #include <QMouseEvent> + #include <QResizeEvent> + #include <QPaintEvent> ! GenreConstraintWidget::GenreConstraintWidget(QWidget*) { ! GenreConstraintWidget(); } ! GenreConstraintWidget::GenreConstraintWidget() : QFrame(), _message(""), x1(0),y1(0),x2(0),y2(0) { setMinimumHeight(94); setMaximumHeight(94); setMinimumWidth(184); setMaximumWidth(184); *************** *** 78,87 **** p->drawPixmap(r.left(),r.top(), *pict ); //draw picture else ! p->drawText( rect(), AlignCenter, "no image" ); p->setPen( Qt::black ); if ((x1 == x2) && (y1 == y2)) { if (!_message.isEmpty()) ! p->drawText( rect(), AlignCenter, _message ); return; } --- 84,93 ---- p->drawPixmap(r.left(),r.top(), *pict ); //draw picture else ! p->drawText( rect(), Qt::AlignCenter, "no image" ); p->setPen( Qt::black ); if ((x1 == x2) && (y1 == y2)) { if (!_message.isEmpty()) ! p->drawText( rect(), Qt::AlignCenter, _message ); return; } *************** *** 126,130 **** } ! GenreWidget::GenreWidget(QWidget* parent, const char* name) : QFrame(parent, name), _message("") { //setBackgroundColor( white ); setMinimumHeight(94); --- 132,137 ---- } ! GenreWidget::GenreWidget(QWidget*) { GenreWidget() ;} ! GenreWidget::GenreWidget() : QFrame(), _message("") { //setBackgroundColor( white ); setMinimumHeight(94); *************** *** 184,193 **** p->drawPixmap(r.left(),r.top(), *pict ); // draw picture else ! p->drawText( rect(), AlignCenter, "no image" ); p->setPen( Qt::black ); if ((x < 0) || !isEnabled()) { if (!_message.isEmpty()) ! p->drawText( rect(), AlignCenter, _message ); return; } --- 191,200 ---- p->drawPixmap(r.left(),r.top(), *pict ); // draw picture else ! p->drawText( rect(), Qt::AlignCenter, "no image" ); p->setPen( Qt::black ); if ((x < 0) || !isEnabled()) { if (!_message.isEmpty()) ! p->drawText( rect(), Qt::AlignCenter, _message ); return; } Index: genrewidget.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/genrewidget.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** genrewidget.h 3 Jan 2005 10:42:52 -0000 1.3 --- genrewidget.h 2 Jan 2006 23:16:21 -0000 1.4 *************** *** 8,17 **** #define GENREWIDGET_H ! #include <qframe.h> class GenreConstraintWidget : public QFrame { Q_OBJECT public: ! GenreConstraintWidget(QWidget*, const char*); ~GenreConstraintWidget(); void getConstraint(int* x1, int* y1, int* x2, int* y2); --- 8,23 ---- #define GENREWIDGET_H ! #include <QFrame> ! //Added by qt3to4: ! #include <QMouseEvent> ! #include <QPixmap> ! #include <QResizeEvent> ! #include <QPaintEvent> class GenreConstraintWidget : public QFrame { Q_OBJECT public: ! GenreConstraintWidget(QWidget* b); ! GenreConstraintWidget(); ~GenreConstraintWidget(); void getConstraint(int* x1, int* y1, int* x2, int* y2); *************** *** 37,41 **** Q_OBJECT public: ! GenreWidget(QWidget*, const char*); ~GenreWidget(); void setMessage(QString s); --- 43,48 ---- Q_OBJECT public: ! GenreWidget(QWidget* ); ! GenreWidget( ); ~GenreWidget(); void setMessage(QString s); Index: growlnotifier.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/growlnotifier.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** growlnotifier.cpp 27 Jun 2005 15:51:20 -0000 1.1 --- growlnotifier.cpp 2 Jan 2006 23:16:21 -0000 1.2 *************** *** 79,83 **** ushort* buffer = new ushort[s.length()]; ! for (unsigned int i = 0; i < s.length(); ++i) buffer[i] = s[i].unicode(); CFStringRef result = CFStringCreateWithBytes ( NULL, --- 79,83 ---- ushort* buffer = new ushort[s.length()]; ! for (int i = 0; i < s.length(); ++i) buffer[i] = s[i].unicode(); CFStringRef result = CFStringCreateWithBytes ( NULL, *************** *** 299,304 **** if (!p.isNull()) { QByteArray img_data; ! QBuffer buffer(img_data); ! buffer.open(IO_WriteOnly); p.save(&buffer, "PNG"); icon = CFDataCreate( NULL, (UInt8*) img_data.data(), img_data.size()); --- 299,304 ---- if (!p.isNull()) { QByteArray img_data; ! QBuffer buffer(&img_data); ! buffer.open(QIODevice::WriteOnly); p.save(&buffer, "PNG"); icon = CFDataCreate( NULL, (UInt8*) img_data.data(), img_data.size()); Index: logqt.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/logqt.cpp,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** logqt.cpp 6 Mar 2005 22:05:28 -0000 1.29 --- logqt.cpp 2 Jan 2006 23:16:21 -0000 1.30 *************** *** 8,16 **** #include <qapplication.h> #include <qmessagebox.h> ! #include <qprogressbar.h> #include <qstatusbar.h> #include <qthread.h> #include <qfile.h> ! #include <qprogressdialog.h> #include <qwidget.h> --- 8,16 ---- #include <qapplication.h> #include <qmessagebox.h> ! #include <q3progressbar.h> #include <qstatusbar.h> #include <qthread.h> #include <qfile.h> ! #include <q3progressdialog.h> #include <qwidget.h> *************** *** 79,83 **** _file = new QFile(filename.c_str()); ! if (!_file->open(IO_WriteOnly | IO_Truncate)) { cout << "LogQt::could not dump debugging output.. expect a crash\n"; delete _file; --- 79,83 ---- _file = new QFile(filename.c_str()); ! if (!_file->open(QIODevice::WriteOnly | QIODevice::Truncate)) { cout << "LogQt::could not dump debugging output.. expect a crash\n"; delete _file; *************** *** 118,122 **** void LogQt::progressInit(string text, int steps) { if (_widget) { ! _progress = new QProgressDialog ( text.c_str(), 0, steps,_widget); _progress->setCancelButtonText("Cancel"); qApp->processEvents(); --- 118,122 ---- void LogQt::progressInit(string text, int steps) { if (_widget) { ! _progress = new Q3ProgressDialog ( QString::fromLocal8Bit(text.c_str()), QString("Cancel"), steps,_widget, 0); _progress->setCancelButtonText("Cancel"); qApp->processEvents(); *************** *** 136,140 **** if (_debug) cout << text << "\n"; if (_stream) (*_stream) << text.c_str() << "\n"; ! if (_output) QThread::postEvent ( _output, new LPGUIEvent(1,text)); } --- 136,141 ---- if (_debug) cout << text << "\n"; if (_stream) (*_stream) << text.c_str() << "\n"; ! if (_output) QApplication::postEvent ( _output, new LPGUIEvent(1,text)); ! //emit debugSignal(text); } *************** *** 142,146 **** if (_debug) cout << text << "\n"; if (_stream) (*_stream) << text.c_str() << "\n"; ! if (_output) QThread::postEvent ( _output, new LPGUIEvent(LPGUIEvent::LPMESSAGE,text)); else { QMessageBox::information( 0, "LongPlayer", text.c_str()); --- 143,148 ---- if (_debug) cout << text << "\n"; if (_stream) (*_stream) << text.c_str() << "\n"; ! emit messageSignal(text); ! if (_output) QApplication::postEvent ( _output, new LPGUIEvent(LPGUIEvent::LPMESSAGE,text)); else { QMessageBox::information( 0, "LongPlayer", text.c_str()); *************** *** 151,155 **** if (_debug || !_output) cout << text << "\n"; if (_stream) (*_stream) << text.c_str() << "\n"; ! if (_output) QThread::postEvent ( _output, new LPGUIEvent(2,text, displaylength)); } --- 153,158 ---- if (_debug || !_output) cout << text << "\n"; if (_stream) (*_stream) << text.c_str() << "\n"; ! //emit infoSignal(text,displaylength); ! if (_output) QApplication::postEvent ( _output, new LPGUIEvent(2,text, displaylength)); } *************** *** 157,161 **** if (_debug || !_output) cout << text << "\n"; if (_stream) (*_stream) << text.c_str() << "\n"; ! if (_output) QThread::postEvent ( _output, new LPGUIEvent(LPGUIEvent::BUSY,text, modal)); } --- 160,164 ---- if (_debug || !_output) cout << text << "\n"; if (_stream) (*_stream) << text.c_str() << "\n"; ! if (_output) QApplication::postEvent ( _output, new LPGUIEvent(LPGUIEvent::BUSY,text, modal)); } *************** *** 163,167 **** if (_debug || !_output) cout << text << "\n"; if (_stream) (*_stream) << text.c_str() << " done.\n"; ! if (_output) QThread::postEvent ( _output, new LPGUIEvent(LPGUIEvent::READY,text)); } --- 166,170 ---- if (_debug || !_output) cout << text << "\n"; if (_stream) (*_stream) << text.c_str() << " done.\n"; ! if (_output) QApplication::postEvent ( _output, new LPGUIEvent(LPGUIEvent::READY,text)); } *************** *** 174,181 **** " \\__U_/" "\n"; (*_stream) << text.c_str() << "\n"; ! _stream->device()->flush(); } ! if (_output) QThread::postEvent ( _output, new LPGUIEvent(4, ! "Oops! Something happened and it isn't good. LPlayer might not function correctly anymore.")); } --- 177,185 ---- " \\__U_/" "\n"; (*_stream) << text.c_str() << "\n"; ! _file->flush(); } ! //emit oopsSignal(text); ! if (_output) QApplication::postEvent ( _output, new LPGUIEvent(4, ! "Oops! Something happened and it isn't good. LPlayer might not function correctly anymore.")); } *************** *** 184,190 **** if (_stream) { (*_stream) << text.c_str() << "\n"; ! _stream->device()->flush(); } ! if (_output) QThread::postEvent ( _output, new LPGUIEvent(4,text)); } --- 188,195 ---- if (_stream) { (*_stream) << text.c_str() << "\n"; ! _file->flush(); } ! // emit errorSignal(text); ! if (_output) QApplication::postEvent ( _output, new LPGUIEvent(4,text)); } *************** *** 195,199 **** (*_stream) << " [!]" << "\n"; } ! if (_output) QThread::postEvent ( _output, new LPGUIEvent(3,text)); } --- 200,205 ---- (*_stream) << " [!]" << "\n"; } ! emit warningSignal(text); ! if (_output) QApplication::postEvent ( _output, new LPGUIEvent(3,text)); } Index: logqt.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/logqt.h,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** logqt.h 6 Mar 2005 22:05:28 -0000 1.13 --- logqt.h 2 Jan 2006 23:16:21 -0000 1.14 *************** *** 9,12 **** --- 9,15 ---- #include "abslog.h" + //Added by qt3to4: + #include <QTextStream> + #include <QObject> class QFile; *************** *** 15,19 **** class QObject; class QWidget; ! class QProgressDialog; class LPListener; class CallbackWnd; --- 18,22 ---- class QObject; class QWidget; ! class Q3ProgressDialog; class LPListener; class CallbackWnd; *************** *** 21,25 **** /** Qt GUI implementation of absLog */ ! class LogQt : public absLog { public: /** progress methods must be called in UI thread */ --- 24,29 ---- /** Qt GUI implementation of absLog */ ! class LogQt : public QObject, public absLog { ! Q_OBJECT public: /** progress methods must be called in UI thread */ *************** *** 46,50 **** /** implemented functions from abslog.h */ ! virtual void debug(int text); virtual void debug(string text); virtual void message(string text); --- 50,54 ---- /** implemented functions from abslog.h */ ! virtual void debug(int ); virtual void debug(string text); virtual void message(string text); *************** *** 55,60 **** virtual void busy(string text, bool modal); virtual void ready(string text); private: ! QProgressDialog* _progress; //logfile QFile* _file; --- 59,73 ---- virtual void busy(string text, bool modal); virtual void ready(string text); + + signals: + void debugSignal(string text); + void messageSignal(string text); + void infoSignal(string text, int displaylength); + void errorSignal(string text); + void warningSignal(string text); + void oopsSignal(string text); + private: ! Q3ProgressDialog* _progress; //logfile QFile* _file; Index: lp.pro =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lp.pro,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** lp.pro 4 Jul 2005 15:19:31 -0000 1.32 --- lp.pro 2 Jan 2006 23:16:21 -0000 1.33 *************** *** 1,6 **** TEMPLATE = app CONFIG += qt warn_on debug thread QMAKE_LFLAGS_SONAME = -Wl,-install_name,@executable_path/../Frameworks/ ! macx:LIBS += -framework Carbon -framework Cocoa -framework QuickTime -lz -framework Growl -L/sw/lib -ldb_cxx macx:INCLUDEPATH += /Developer/Headers/FlatCarbon /sw/include/db4 RC_FILE = mac/LongPlayer.icns --- 1,7 ---- TEMPLATE = app CONFIG += qt warn_on debug thread + QMAKE_CFLAGS += -F/usr/local/Trolltech/Qt-4.0.1/lib QMAKE_LFLAGS_SONAME = -Wl,-install_name,@executable_path/../Frameworks/ ! macx:LIBS += -framework Carbon -framework Cocoa -framework QuickTime -lz -framework Growl -L/sw/lib -ldb_cxx -L/Developer/qt -F/Developer/qt macx:INCLUDEPATH += /Developer/Headers/FlatCarbon /sw/include/db4 RC_FILE = mac/LongPlayer.icns *************** *** 140,141 **** --- 141,147 ---- #mac os x with fink and kde3.1 #TMAKE_LIBS += -L/sw/lib/kde3 /sw/lib/libkdesu.dylib -ldl /sw/lib/libkdeui.dylib /sw/lib/libkdecore.dylib -ldl /sw/lib/libDCOP.dylib + #The following line was inserted by qt3to4 + QT += xml qt3support + #The following line was inserted by qt3to4 + CONFIG += uic3 + Index: lpargparser.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpargparser.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** lpargparser.cpp 3 Jan 2005 10:42:52 -0000 1.15 --- lpargparser.cpp 2 Jan 2006 23:16:21 -0000 1.16 *************** *** 42,46 **** //1 try to find the option in our list ! QMapIterator<string,int> it = (*tokens).find( string( (argv)[i] ) ); if (it == (*tokens).end()) { _valid = false; --- 42,46 ---- //1 try to find the option in our list ! QMap<string, int>::iterator it = (*tokens).find( string( (argv)[i] ) ); if (it == (*tokens).end()) { _valid = false; Index: lpdatabase.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpdatabase.cpp,v retrieving revision 1.59 retrieving revision 1.60 diff -C2 -d -r1.59 -r1.60 *** lpdatabase.cpp 27 Jun 2005 15:52:05 -0000 1.59 --- lpdatabase.cpp 2 Jan 2006 23:16:21 -0000 1.60 *************** *** 19,23 **** #include <qxml.h> #include <qtextstream.h> ! #include <qprogressdialog.h> #include <qmap.h> #include "stringcache.h" --- 19,23 ---- #include <qxml.h> #include <qtextstream.h> ! #include <q3progressdialog.h> #include <qmap.h> #include "stringcache.h" *************** *** 70,74 **** return; } ! if (!f.open(IO_ReadOnly)) { logWarning(string("LPDatabase::probing of database ") + filename + " failed."); logError(string("Could not open database file ") + filename + ". Please check file permissions and quit any processes using it."); --- 70,74 ---- return; } ! if (!f.open(QIODevice::ReadOnly)) { logWarning(string("LPDatabase::probing of database ") + filename + " failed."); logError(string("Could not open database file ") + filename + ". Please check file permissions and quit any processes using it."); *************** *** 122,126 **** logInfo("Importing database from XML..."); QFile file(QString::fromLocal8Bit(filename.c_str())); ! QXmlInputSource source = QXmlInputSource(file); QXmlSimpleReader reader; LPDatabaseXMLReader* handler = new LPDatabaseXMLReader(this); --- 122,126 ---- logInfo("Importing database from XML..."); QFile file(QString::fromLocal8Bit(filename.c_str())); ! QXmlInputSource source(file); QXmlSimpleReader reader; LPDatabaseXMLReader* handler = new LPDatabaseXMLReader(this); Index: lpdatabasexmlreader.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpdatabasexmlreader.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** lpdatabasexmlreader.cpp 28 Jan 2005 13:11:27 -0000 1.9 --- lpdatabasexmlreader.cpp 2 Jan 2006 23:16:21 -0000 1.10 *************** *** 78,82 **** bool LPDatabaseXMLReader::characters(const QString& chars){ ! _buffer += chars.local8Bit(); return true; } --- 78,82 ---- bool LPDatabaseXMLReader::characters(const QString& chars){ ! _buffer += string(chars.local8Bit()); return true; } *************** *** 125,129 **** * The reader calls this function to get an error string if any of the handler functions returns FALSE */ ! QString LPDatabaseXMLReaderErrorHandler::errorString(){ return "LPDatabase:: importing XML. Impossible error occured. Universe will collapse in 5 seconds."; } --- 125,129 ---- * The reader calls this function to get an error string if any of the handler functions returns FALSE */ ! QString LPDatabaseXMLReaderErrorHandler::errorString() const{ return "LPDatabase:: importing XML. Impossible error occured. Universe will collapse in 5 seconds."; } Index: lpdatabasexmlreader.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpdatabasexmlreader.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** lpdatabasexmlreader.h 8 Feb 2004 17:30:26 -0000 1.7 --- lpdatabasexmlreader.h 2 Jan 2006 23:16:21 -0000 1.8 *************** *** 49,53 **** bool error ( const QXmlParseException & exception ); bool fatalError ( const QXmlParseException & exception ); ! QString errorString (); }; --- 49,53 ---- bool error ( const QXmlParseException & exception ); bool fatalError ( const QXmlParseException & exception ); ! QString errorString () const; }; Index: lpdatabasexmlwriter.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpdatabasexmlwriter.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** lpdatabasexmlwriter.cpp 28 Jan 2005 13:11:27 -0000 1.12 --- lpdatabasexmlwriter.cpp 2 Jan 2006 23:16:21 -0000 1.13 *************** *** 28,32 **** _f = new ofstream(filename.c_str()); #if QT_VERSION / 100 > 2 ! string encoding = QTextCodec::codecForLocale()->mimeName(); *_f << string("<?xml version='1.0' encoding='"+encoding+"' ?>\n"); //TODO export to utf8 ? #else --- 28,32 ---- _f = new ofstream(filename.c_str()); #if QT_VERSION / 100 > 2 ! string encoding = string(QTextCodec::codecForLocale()->mimeName()); *_f << string("<?xml version='1.0' encoding='"+encoding+"' ?>\n"); //TODO export to utf8 ? #else Index: lpdirview.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpdirview.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** lpdirview.cpp 18 Feb 2003 16:47:08 -0000 1.3 --- lpdirview.cpp 2 Jan 2006 23:16:21 -0000 1.4 *************** *** 1,4 **** #include "lpdirview.h" ! #include <qlistview.h> #include <qdir.h> --- 1,4 ---- #include "lpdirview.h" ! #include <q3listview.h> #include <qdir.h> *************** *** 6,33 **** { this->addColumn("Name"); ! const QFileInfoList* drives = QDir::drives(); ! QFileInfoListIterator driveit(*drives); QFileInfo *di; // pointer for traversing ! while ( (di=driveit.current()) ) { ! QListViewItem *item = new QListViewItem(this,di->dirPath()); QDir d(di->dirPath()); d.setFilter( QDir::Dirs); ! const QFileInfoList *list = d.entryInfoList(); ! if (list) ! { ! QFileInfoListIterator it( *list ); // create list iterator ! QFileInfo *fi; // pointer for traversing ! while ( (fi=it.current()) ) ! { ! addDir(item,fi->dirPath()); ! ++it; // goto next list element ! } } - ++di; // goto next list element } } ! void LPDirView::addDir(QListViewItem* /*base*/, QString /*dir*/) { } --- 6,27 ---- { this->addColumn("Name"); ! QFileInfoList drives = QDir::drives(); ! QList<QFileInfo>::iterator driveit; QFileInfo *di; // pointer for traversing ! for (driveit = drives.begin(); driveit != drives.end(); driveit++) { ! di = &(*driveit); // *bla returns current item ! Q3ListViewItem *item = new Q3ListViewItem(this,di->dirPath()); QDir d(di->dirPath()); d.setFilter( QDir::Dirs); ! QFileInfoList list = d.entryInfoList(); ! for (int i = 0; i < list.size(); i++) ! { ! addDir(item,list[i].dirPath()); } } } ! void LPDirView::addDir(Q3ListViewItem* /*base*/, QString /*dir*/) { } Index: lpdirview.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpdirview.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** lpdirview.h 3 Jan 2005 10:42:53 -0000 1.2 --- lpdirview.h 2 Jan 2006 23:16:21 -0000 1.3 *************** *** 8,18 **** #define LPDIRVIEW_H ! #include <qlistview.h> ! class LPDirView : public QListView { public: LPDirView(); ! void addDir(QListViewItem*, QString dir); }; --- 8,18 ---- #define LPDIRVIEW_H ! #include <q3listview.h> ! class LPDirView : public Q3ListView { public: LPDirView(); ! void addDir(Q3ListViewItem*, QString dir); }; Index: lpformabout.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformabout.cpp,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** lpformabout.cpp 30 Mar 2005 14:31:01 -0000 1.38 --- lpformabout.cpp 2 Jan 2006 23:16:21 -0000 1.39 *************** *** 17,21 **** * TRUE to construct a modal dialog. */ ! LPFormAbout::LPFormAbout(LPApp* app, QWidget* parent, const char* name, bool modal, WFlags fl ) : LPFormAboutBase( parent, name, modal, fl ) { LPSettings* stats = app->getSettings(); --- 17,21 ---- * TRUE to construct a modal dialog. */ ! LPFormAbout::LPFormAbout(LPApp* app, QWidget* parent, const char* name, bool modal, Qt::WFlags fl ) : LPFormAboutBase( parent, name, modal, fl ) { LPSettings* stats = app->getSettings(); Index: lpformabout.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformabout.h,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** lpformabout.h 3 Jan 2005 10:42:53 -0000 1.5 --- lpformabout.h 2 Jan 2006 23:16:21 -0000 1.6 *************** *** 16,20 **** public: ! LPFormAbout(LPApp*,QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0); ~LPFormAbout(); private: --- 16,20 ---- public: ! LPFormAbout(LPApp*,QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0); ~LPFormAbout(); private: Index: lpformplaylists.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformplaylists.cpp,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** lpformplaylists.cpp 28 Jan 2005 09:23:31 -0000 1.29 --- lpformplaylists.cpp 2 Jan 2006 23:16:21 -0000 1.30 *************** *** 6,15 **** #include <qinputdialog.h> ! #include <qlistbox.h> #include <qdir.h> ! #include <qlistview.h> #include <qcombobox.h> #include <qpushbutton.h> ! #include <qfiledialog.h> #include <qregexp.h> #include <qstringlist.h> --- 6,15 ---- #include <qinputdialog.h> ! #include <q3listbox.h> #include <qdir.h> ! #include <q3listview.h> #include <qcombobox.h> #include <qpushbutton.h> ! #include <q3filedialog.h> #include <qregexp.h> #include <qstringlist.h> *************** *** 21,25 **** StringSetting LPFormPlaylists::SettingLastDir("playlistactions", "lastdir",string(QDir::homeDirPath().local8Bit()) ); ! LPFormPlaylists::LPFormPlaylists(LPApp* app, QWidget* parent, const char* name, bool modal, WFlags fl ) : LPFormPlaylistsBase( parent, name, modal, fl ), _app(app), _playlist(0) { --- 21,25 ---- StringSetting LPFormPlaylists::SettingLastDir("playlistactions", "lastdir",string(QDir::homeDirPath().local8Bit()) ); ! LPFormPlaylists::LPFormPlaylists(LPApp* app, QWidget* parent, const char* name, bool modal, Qt::WFlags fl ) : LPFormPlaylistsBase( parent, name, modal, fl ), _app(app), _playlist(0) { *************** *** 34,38 **** btnPlaylistAddDir->setEnabled(boxPlaylist->count()); btnAddM3U->setEnabled(boxPlaylist->count()); ! btnPlaylistToggleSubDirs->setEnabled(viewPlaylistDirs->currentItem() && viewPlaylistDirs->currentItem()->text(1)); btnPlaylistRemoveDir->setEnabled(viewPlaylistDirs->currentItem()); } --- 34,38 ---- btnPlaylistAddDir->setEnabled(boxPlaylist->count()); btnAddM3U->setEnabled(boxPlaylist->count()); ! btnPlaylistToggleSubDirs->setEnabled(viewPlaylistDirs->currentItem() && !viewPlaylistDirs->currentItem()->text(1).isEmpty()); btnPlaylistRemoveDir->setEnabled(viewPlaylistDirs->currentItem()); } *************** *** 55,64 **** void LPFormPlaylists::PlaylistAddM3U() { QString lastdir = QString::fromLocal8Bit(getApp()->getSettings()->getSetting(SettingLastDir).c_str()); ! QString s( QFileDialog::getOpenFileName( lastdir,"M3U Files (*.m3u);;All Files (*.*)", this,"Stuff", "Select an m3u") ); if ( s.isEmpty() ) return; getApp()->getSettings()->setSetting(SettingLastDir,string(QFileInfo(s).dirPath().local8Bit())); M3UPlaylist* p = new M3UPlaylist(string(s.local8Bit())); p->setM3U(string(s.local8Bit())); _playlist->addPlaylist(p); ! new QListViewItem( viewPlaylistDirs, s, "" ); } --- 55,64 ---- void LPFormPlaylists::PlaylistAddM3U() { QString lastdir = QString::fromLocal8Bit(getApp()->getSettings()->getSetting(SettingLastDir).c_str()); ! QString s( Q3FileDialog::getOpenFileName( lastdir,"M3U Files (*.m3u);;All Files (*.*)", this,"Stuff", "Select an m3u") ); if ( s.isEmpty() ) return; getApp()->getSettings()->setSetting(SettingLastDir,string(QFileInfo(s).dirPath().local8Bit())); M3UPlaylist* p = new M3UPlaylist(string(s.local8Bit())); p->setM3U(string(s.local8Bit())); _playlist->addPlaylist(p); ! new Q3ListViewItem( viewPlaylistDirs, s, "" ); } *************** *** 66,70 **** // LPDirView* view = new LPDirView(); QString lastdir = QString::fromLocal8Bit(getApp()->getSettings()->getSetting(SettingLastDir).c_str()); ! QString s( QFileDialog::getExistingDirectory( lastdir, this,"Stuff", "Select a directory containing music", false) ); if ( s.isEmpty() ) return; --- 66,70 ---- // LPDirView* view = new LPDirView(); QString lastdir = QString::fromLocal8Bit(getApp()->getSettings()->getSetting(SettingLastDir).c_str()); ! QString s( Q3FileDialog::getExistingDirectory( lastdir, this,"Stuff", "Select a directory containing music", false) ); if ( s.isEmpty() ) return; *************** *** 74,78 **** p->setDirectory(string(s.local8Bit())); p->setIncludeSubDirs(true); _playlist->addPlaylist(p); ! new QListViewItem( viewPlaylistDirs, s, "true" ); } --- 74,78 ---- p->setDirectory(string(s.local8Bit())); p->setIncludeSubDirs(true); _playlist->addPlaylist(p); ! new Q3ListViewItem( viewPlaylistDirs, s, "true" ); } *************** *** 90,94 **** list.sort(); int index= 0; ! for (uint j=0;!index && (j<list.count());j++) { if (list[j] == QString::fromLocal8Bit(currplaylistname.c_str())) index = j; } --- 90,94 ---- list.sort(); int index= 0; ! for (int j=0;!index && (j<list.count());j++) { if (list[j] == QString::fromLocal8Bit(currplaylistname.c_str())) index = j; } *************** *** 125,129 **** logDebug(string("adding ") + edtMasks->text().latin1() ); string mask; QString qmask; ! for (uint i=0;i<splitted.count();i++) { QRegExp num("[*. ]*"); qmask = splitted[i].replace(num,"");//first bring into a QString to avoid a Windows crash --- 125,129 ---- logDebug(string("adding ") + edtMasks->text().latin1() ); string mask; QString qmask; ! for (int i=0;i<splitted.count();i++) { QRegExp num("[*. ]*"); qmask = splitted[i].replace(num,"");//first bring into a QString to avoid a Windows crash *************** *** 136,140 **** splitted = QStringList::split ( ";", edtExcludeMasks->text(), FALSE ); mask = ""; ! for (uint j=0;j<splitted.count();j++) { QRegExp num("[*. ]*"); qmask = splitted[j].replace(num,"");//first bring into a QString to avoid a Windows crash --- 136,140 ---- splitted = QStringList::split ( ";", edtExcludeMasks->text(), FALSE ); mask = ""; ! for (int j=0;j<splitted.count();j++) { QRegExp num("[*. ]*"); qmask = splitted[j].replace(num,"");//first bring into a QString to avoid a Windows crash *************** *** 183,187 **** delete _playlist; _playlist = new CompositePlaylist(name); ! QListViewItem* ch = viewPlaylistDirs->firstChild(); for (int i=0;i<viewPlaylistDirs->childCount();i++) { if (ch->text(1).isEmpty()) { --- 183,187 ---- delete _playlist; _playlist = new CompositePlaylist(name); ! Q3ListViewItem* ch = viewPlaylistDirs->firstChild(); for (int i=0;i<viewPlaylistDirs->childCount();i++) { if (ch->text(1).isEmpty()) { *************** *** 207,212 **** QString s = boxPlaylist->currentText(); viewPlaylistDirs->clear(); ! if (s) { ! logDebug(string("GUI::drawing playlist ") + string(s.latin1())); if (_playlist) delete _playlist; --- 207,212 ---- QString s = boxPlaylist->currentText(); viewPlaylistDirs->clear(); ! if (!s.isEmpty()) { ! logDebug(string("GUI::drawing playlist ") + string(s.local8Bit())); if (_playlist) delete _playlist; *************** *** 217,225 **** if (p->getType() == DirectoryPlaylist::TYPE) { DirectoryPlaylist *pd = (DirectoryPlaylist*)p; ! new QListViewItem( viewPlaylistDirs, QString::fromLocal8Bit(pd->getDirectory().c_str()), (pd->getIncludeSubDirs() ? "true":"false" )); } else if (p->getType() == M3UPlaylist::TYPE) { M3UPlaylist *md = (M3UPlaylist*)p; ! new QListViewItem( viewPlaylistDirs, QString::fromLocal8Bit(md->getM3U().c_str()), ""); } } --- 217,225 ---- if (p->getType() == DirectoryPlaylist::TYPE) { DirectoryPlaylist *pd = (DirectoryPlaylist*)p; ! new Q3ListViewItem( viewPlaylistDirs, QString::fromLocal8Bit(pd->getDirectory().c_str()), (pd->getIncludeSubDirs() ? "true":"false" )); } else if (p->getType() == M3UPlaylist::TYPE) { M3UPlaylist *md = (M3UPlaylist*)p; ! new Q3ListViewItem( viewPlaylistDirs, QString::fromLocal8Bit(md->getM3U().c_str()), ""); } } Index: lpformplaylists.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformplaylists.h,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** lpformplaylists.h 10 Jan 2005 14:04:12 -0000 1.10 --- lpformplaylists.h 2 Jan 2006 23:16:21 -0000 1.11 *************** *** 19,23 **** static StringSetting SettingLastDir; ! LPFormPlaylists(LPApp* app, QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags f = 0 ); //inherited slots --- 19,23 ---- static StringSetting SettingLastDir; ! LPFormPlaylists(LPApp* app, QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags f = 0 ); //inherited slots Index: lpformprefs.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformprefs.cpp,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** lpformprefs.cpp 27 Jun 2005 15:52:06 -0000 1.28 --- lpformprefs.cpp 2 Jan 2006 23:16:21 -0000 1.29 *************** *** 11,18 **** #include <qspinbox.h> #include <qinputdialog.h> ! #include <qlistbox.h> #include <qcombobox.h> #include <qpushbutton.h> ! #include <qfiledialog.h> #include <qcheckbox.h> #include <qslider.h> --- 11,18 ---- #include <qspinbox.h> #include <qinputdialog.h> ! #include <q3listbox.h> #include <qcombobox.h> #include <qpushbutton.h> ! #include <q3filedialog.h> #include <qcheckbox.h> #include <qslider.h> *************** *** 21,25 **** LPApp* LPFormPrefs::getApp() { return _app; } ! LPFormPrefs::LPFormPrefs(LPApp* app, QWidget* parent, const char* name, bool modal, WFlags fl ) : LPFormPrefsBase( parent, name, modal, fl ), _app(app) { --- 21,25 ---- LPApp* LPFormPrefs::getApp() { return _app; } ! LPFormPrefs::LPFormPrefs(LPApp* app, QWidget* parent, const char* name, bool modal, Qt::WFlags fl ) : LPFormPrefsBase( parent, name, modal, fl ), _app(app) { *************** *** 110,114 **** void LPFormPrefs::SelectDJSong() { QString lastdir = QString::fromLocal8Bit(getApp()->getSettings()->getSetting(LPWindowMain::SettingLastDir).c_str()); ! QString s = QFileDialog::getOpenFileName( lastdir, "All files ( * )", this, 0 , "Choose filename to play"); if ( s.isEmpty() ) return; --- 110,114 ---- void LPFormPrefs::SelectDJSong() { QString lastdir = QString::fromLocal8Bit(getApp()->getSettings()->getSetting(LPWindowMain::SettingLastDir).c_str()); ! QString s = Q3FileDialog::getOpenFileName( lastdir, "All files ( * )", this, 0 , "Choose filename to play"); if ( s.isEmpty() ) return; Index: lpformprefs.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformprefs.h,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** lpformprefs.h 3 Jan 2005 10:42:53 -0000 1.12 --- lpformprefs.h 2 Jan 2006 23:16:21 -0000 1.13 *************** *** 16,20 **** Q_OBJECT public: ! LPFormPrefs( LPApp* app, QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags f = 0 ); //slots --- 16,20 ---- Q_OBJECT public: ! LPFormPrefs( LPApp* app, QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags f = 0 ); //slots Index: lpformsearch.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformsearch.cpp,v retrieving revision 1.61 retrieving revision 1.62 diff -C2 -d -r1.61 -r1.62 *** lpformsearch.cpp 27 Jun 2005 15:52:06 -0000 1.61 --- lpformsearch.cpp 2 Jan 2006 23:16:21 -0000 1.62 *************** *** 18,23 **** #include <qapplication.h> ! #include <qlistbox.h> ! #include <qlistview.h> #include <qcombobox.h> #include <qpushbutton.h> --- 18,23 ---- #include <qapplication.h> ! #include <q3listbox.h> ! #include <q3listview.h> #include <qcombobox.h> #include <qpushbutton.h> *************** *** 25,33 **** #include <qlineedit.h> #include <qspinbox.h> ! #include <qfiledialog.h> ! #include <qprogressdialog.h> #include <qfileinfo.h> #include <qmessagebox.h> #include <qlayout.h> #include <fstream> --- 25,36 ---- #include <qlineedit.h> #include <qspinbox.h> ! #include <q3filedialog.h> ! #include <q3progressdialog.h> #include <qfileinfo.h> #include <qmessagebox.h> #include <qlayout.h> + //Added by qt3to4: + #include <Q3Frame> + #include <QEvent> #include <fstream> *************** *** 35,43 **** StringSetting LPFormSearch::SettingLastDir("searchactions", "lastdir",string(QDir::homeDirPath().local8Bit()) ); ! LPFormSearch::LPFormSearch(LPApp* app, QWidget* parent, const char* name, bool modal, WFlags fl ) : LPFormSearchBase( parent, name, modal, fl ), _lastItem(0), _app(app), _listp(0), _filter(0), _iterator(0), _builder(0), currSongs(0), currMB(0), odd(false) { ! genreConstraintWidget1->setProperty( "frameShape", (int)QFrame::StyledPanel ); ! genreConstraintWidget1->setProperty( "frameShadow", (int)QFrame::Sunken ); genreConstraintWidget1->setLineWidth(2); genreConstraintWidget1->setMessage("draw a rectangle\n to constrain"); --- 38,46 ---- StringSetting LPFormSearch::SettingLastDir("searchactions", "lastdir",string(QDir::homeDirPath().local8Bit()) ); ! LPFormSearch::LPFormSearch(LPApp* app, QWidget* parent, const char* name, bool modal, Qt::WFlags fl ) : LPFormSearchBase( parent, name, modal, fl ), _lastItem(0), _app(app), _listp(0), _filter(0), _iterator(0), _builder(0), currSongs(0), currMB(0), odd(false) { ! genreConstraintWidget1->setProperty( "frameShape", (int)Q3Frame::StyledPanel ); ! genreConstraintWidget1->setProperty( "frameShadow", (int)Q3Frame::Sunken ); genreConstraintWidget1->setLineWidth(2); genreConstraintWidget1->setMessage("draw a rectangle\n to constrain"); *************** *** 62,67 **** cmbHeard2->insertItem("weeks"); cmbHeard2->insertItem("months"); ! viewSearched->setSelectionMode(QListView::Extended); ! tip = new PlayedSongTip(viewSearched->viewport()); viewSearched->setBackgroundOrigin(QWidget::AncestorOrigin); viewSearched->addColumn( tr( "Played At" ) ); --- 65,70 ---- cmbHeard2->insertItem("weeks"); cmbHeard2->insertItem("months"); ! viewSearched->setSelectionMode(Q3ListView::Extended); ! //qt4 tip = new PlayedSongTip(viewSearched->viewport()); viewSearched->setBackgroundOrigin(QWidget::AncestorOrigin); viewSearched->addColumn( tr( "Played At" ) ); *************** *** 71,76 **** viewSearched->addColumn( tr( "Times" ) ); viewSearched->addColumn( tr( "Length" ) ); ! viewSearched->setColumnWidthMode ( 0, QListView::Manual ); ! viewSearched->setColumnWidthMode ( 5, QListView::Manual ); viewSearched->hideColumn(0); //hide Played At.. viewSearched->hideColumn(5); //and Length columns --- 74,79 ---- viewSearched->addColumn( tr( "Times" ) ); viewSearched->addColumn( tr( "Length" ) ); ! viewSearched->setColumnWidthMode ( 0, Q3ListView::Manual ); ! viewSearched->setColumnWidthMode ( 5, Q3ListView::Manual ); viewSearched->hideColumn(0); //hide Played At.. viewSearched->hideColumn(5); //and Length columns *************** *** 78,82 **** _playedSongHandler = new SongContextMenu(this,getApp(), viewSearched); ! connect( viewSearched, SIGNAL( rightButtonPressed(QListViewItem*,const QPoint&,int) ), _playedSongHandler, SLOT( popup(QListViewItem*, const QPoint&) ) ); checkButtons(); --- 81,85 ---- _playedSongHandler = new SongContextMenu(this,getApp(), viewSearched); ! connect( viewSearched, SIGNAL( rightButtonPressed(Q3ListViewItem*,const QPoint&,int) ), _playedSongHandler, SLOT( popup(Q3ListViewItem*, const QPoint&) ) ); checkButtons(); *************** *** 88,92 **** getApp()->unSubscribe(this); if (_listp) delete _listp; _listp = 0; ! delete tip; } --- 91,95 ---- getApp()->unSubscribe(this); if (_listp) delete _listp; _listp = 0; ! //qt4 delete tip; } *************** *** 117,121 **** list.sort(); int index= 0; ! for (uint j=0;!index && (j<list.count());j++) { if (list[j] == currplaylistname.c_str()) index = j; } --- 120,124 ---- list.sort(); int index= 0; ! for (int j=0;!index && (j<list.count());j++) { if (list[j] == currplaylistname.c_str()) index = j; } *************** *** 157,161 **** LPSettings* LPFormSearch::getSettings() { return getApp()->getSettings(); } ! void LPFormSearch::playSong(QListViewItem* item) { Song s = getApp()->SongRetrieveFromFilename(((PlayedSongItem*)item)->getFilename()); if (s.getFilename().empty()) return; --- 160,164 ---- LPSettings* LPFormSearch::getSettings() { return getApp()->getSettings(); } ! void LPFormSearch::playSong(Q3ListViewItem* item) { Song s = getApp()->SongRetrieveFromFilename(((PlayedSongItem*)item)->getFilename()); if (s.getFilename().empty()) return; *************** *** 165,169 **** vector<string> LPFormSearch::getFoundSongs() { ! QListViewItem* current; vector<string> files; current = viewSearched->firstChild(); --- 168,172 ---- vector<string> LPFormSearch::getFoundSongs() { ! Q3ListViewItem* current; vector<string> files; current = viewSearched->firstChild(); *************** *** 192,196 **** QString lastdir = QString::fromLocal8Bit(getApp()->getSettings()->getSetting(SettingLastDir).c_str()); ! QString s( QFileDialog::getSaveFileName( lastdir,"M3U Files (*.m3u);;All Files (*.*)", this,"create m3u file...", "Select a file") ); if ( s.isEmpty() ) return; --- 195,199 ---- QString lastdir = QString::fromLocal8Bit(getApp()->getSettings()->getSetting(SettingLastDir).c_str()); ! QString s( Q3FileDialog::getSaveFileName( lastdir,"M3U Files (*.m3u);;All Files (*.*)", this,"create m3u file...", "Select a file") ); if ( s.isEmpty() ) return; *************** *** 210,224 **** QString lastdir = QString::fromLocal8Bit(getApp()->getSettings()->getSetting(SettingLastDir).c_str()); ! QString s( QFileDialog::getExistingDirectory( lastdir, this,"Copy songs to...", "Select a directory to copy the music to", true) ); if ( s.isEmpty() ) return; getApp()->getSettings()->setSetting(SettingLastDir,string(QFileInfo(s).dirPath().local8Bit())); ! QProgressDialog progress( "Copying files...", "Abort Copy", files.size(), this, "progress", TRUE ); for (uint i=0; i<files.size();i++) { progress.setProgress(i); qApp->processEvents(); ! if ( progress.wasCancelled() ) break; QString from = QString::fromLocal8Bit(files[i].c_str()); QString dest = s + "/" + QFileInfo(from).fileName(); --- 213,227 ---- QString lastdir = QString::fromLocal8Bit(getApp()->getSettings()->getSetting(SettingLastDir).c_str()); ! QString s( Q3FileDialog::getExistingDirectory( lastdir, this,"Copy songs to...", "Select a directory to copy the music to", true) ); if ( s.isEmpty() ) return; getApp()->getSettings()->setSetting(SettingLastDir,string(QFileInfo(s).dirPath().local8Bit())); ! Q3ProgressDialog progress( "Copying files...", "Abort Copy", files.size(), this, "progress", TRUE ); for (uint i=0; i<files.size();i++) { progress.setProgress(i); qApp->processEvents(); ! if ( progress.wasCanceled() ) break; QString from = QString::fromLocal8Bit(files[i].c_str()); QString dest = s + "/" + QFileInfo(from).fileName(); *************** *** 232,237 **** if (!files.size()) return; ! QListViewItem* current = viewSearched->firstChild(); ! QListViewItem* toDelete; bool deleteAll = (files.size() == (uint) viewSearched->childCount()); //only delete the selected or everything? --- 235,240 ---- if (!files.size()) return; ! Q3ListViewItem* current = viewSearched->firstChild(); ! Q3ListViewItem* toDelete; bool deleteAll = (files.size() == (uint) viewSearched->childCount()); //only delete the selected or everything? *************** *** 331,340 **** //prepare a new playlist ! Playlist* newPlaylist = getApp()->getPlaylist(string(cmbPlaylist->currentText().local8Bit())); Playlist* playerPlaylist = getApp()->getLPlayer()->getPlaylist(); if (!_listp) _listp = newPlaylist; ! if (_listp->sameSource(playerPlaylist) && playerPlaylist->getBuilt() && !_listp->getBuilt()) _listp->setPlaylist(playerPlaylist); //clone playlist if (!_listp->sameSource(newPlaylist)) { delete _listp; _listp = newPlaylist; } --- 334,345 ---- //prepare a new playlist ! //TODO what's with all the pointers? ! CompositePlaylist* newPlaylist = getApp()->getPlaylist(string(cmbPlaylist->currentText().local8Bit())); ! //returns new possibly meta playlist Playlist* playerPlaylist = getApp()->getLPlayer()->getPlaylist(); if (!_listp) _listp = newPlaylist; ! if (playerPlaylist && _listp->sameSource(playerPlaylist) && playerPlaylist->getBuilt() && !_listp->getBuilt()) _listp->setPlaylist(playerPlaylist); //clone playlist if (!_listp->sameSource(newPlaylist)) { delete _listp; _listp = newPlaylist; } *************** *** 345,348 **** --- 350,355 ---- _listp->setFilenamesDoNotEndWith(newPlaylist->getFilenamesDoNotEndWith()); } + if (playerPlaylist) delete playerPlaylist; + //take contains of newPlaylist, add search criteria and inject in the one we are using vector<string> contains = newPlaylist->getFilenamesContain(); *************** *** 481,485 **** } ! void LPFormSearch::makeSongListViewItem(QListView* vlist, Song sng,QListViewItem* vitem) { //check if songs weren't deleted if (!absUtil::getUtil()->existsFile(sng.getFilename())) return; --- 488,492 ---- } ! void LPFormSearch::makeSongListViewItem(Q3ListView* vlist, Song sng,Q3ListViewItem* vitem) { //check if songs weren't deleted if (!absUtil::getUtil()->existsFile(sng.getFilename())) return; Index: lpformsearch.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformsearch.h,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** lpformsearch.h 13 Feb 2005 22:30:06 -0000 1.22 --- lpformsearch.h 2 Jan 2006 23:16:21 -0000 1.23 *************** *** 12,18 **** #include "lpsettings.h" ! #include <qlistview.h> #include <qtimer.h> #include <qthread.h> #include <vector> #include <string> --- 12,21 ---- #include "lpsettings.h" ! #include <q3listview.h> #include <qtimer.h> #include <qthread.h> + #include <qmutex.h> + //Added by qt3to4: + #include <QEvent> #include <vector> #include <string> *************** *** 37,41 **** static StringSetting SettingLastDir; ! LPFormSearch( LPApp* p, QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags f = 0 ); ~LPFormSearch(); --- 40,44 ---- static StringSetting SettingLastDir; ! LPFormSearch( LPApp* p, QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags f = 0 ); ~LPFormSearch(); *************** *** 57,61 **** virtual void playSongs(); virtual void queueSongs(); ! virtual void playSong(QListViewItem*); virtual void saveM3U(); --- 60,64 ---- virtual void playSongs(); virtual void queueSongs(); ! virtual void playSong(Q3ListViewItem*); virtual void saveM3U(); *************** *** 73,82 **** //returns selected or all found songs vector<string> getFoundSongs(); ! void makeSongListViewItem(QListView* list, Song sng,QListViewItem* item =0); void checkButtons(); void refreshPlaylists(); void refreshSongs(); ! QListViewItem* _lastItem; LPApp* getApp(); LPApp* _app; --- 76,85 ---- //returns selected or all found songs vector<string> getFoundSongs(); ! void makeSongListViewItem(Q3ListView* list, Song sng,Q3ListViewItem* item =0); void checkButtons(); void refreshPlaylists(); void refreshSongs(); ! Q3ListViewItem* _lastItem; LPApp* getApp(); LPApp* _app; Index: lpformstartup.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformstartup.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** lpformstartup.cpp 3 Jan 2005 10:42:53 -0000 1.12 --- lpformstartup.cpp 2 Jan 2006 23:16:21 -0000 1.13 *************** *** 8,11 **** --- 8,13 ---- #include <qlabel.h> #include <qlayout.h> + //Added by qt3to4: + #include <QEvent> /* *************** *** 16,20 **** * TRUE to construct a modal dialog. */ ! LPFormStartup::LPFormStartup(QWidget* parent, const char* name, bool modal, WFlags fl ) : LPFormStartupBase( parent, name, modal, fl ) { --- 18,22 ---- * TRUE to construct a modal dialog. */ ! LPFormStartup::LPFormStartup(QWidget* parent, const char* name, bool modal, Qt::WFlags fl ) : LPFormStartupBase( parent, name, modal, fl ) { Index: lpformstartup.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformstartup.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** lpformstartup.h 3 Jan 2005 10:42:53 -0000 1.6 --- lpformstartup.h 2 Jan 2006 23:16:21 -0000 1.7 *************** *** 18,22 **** public: ! LPFormStartup(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ); ~LPFormStartup(); void show(); --- 18,22 ---- public: ! LPFormStartup(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0 ); ~LPFormStartup(); void show(); Index: lpgrowl.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpgrowl.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** lpgrowl.cpp 4 Jul 2005 15:22:03 -0000 1.2 --- lpgrowl.cpp 2 Jan 2006 23:16:21 -0000 1.3 *************** *** 53,57 **** QString dirClue = ""; QString dirClueSep = ""; //Qt2 uses count instead of size ! uint i = 0; if (dirs1.count() > 4) i = dirs1.count() - 4; for (; i < dirs1.count() - 1; i++) { --- 53,57 ---- QString dirClue = ""; QString dirClueSep = ""; //Qt2 uses count instead of size ! int i = 0; if (dirs1.count() > 4) i = dirs1.count() - 4; for (; i < dirs1.count() - 1; i++) { Index: lpguihandler.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpguihandler.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** lpguihandler.cpp 28 Jan 2005 19:03:17 -0000 1.4 --- lpguihandler.cpp 2 Jan 2006 23:16:21 -0000 1.5 *************** *** 1,3 **** --- 1,5 ---- #include "lpguihandler.h" + //Added by qt3to4: + #include <QEvent> int LPGUIEvent::getType() { return _type; } Index: lplayer.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lplayer.cpp,v retrieving revision 1.68 retrieving revision 1.69 diff -C2 -d -r1.68 -r1.69 *** lplayer.cpp 27 Jun 2005 15:52:06 -0000 1.68 --- lplayer.cpp 2 Jan 2006 23:16:21 -0000 1.69 *************** *** 61,66 **** if (!_queueList || !_queueList->equals(playlist)) { logDebug("LPlayer::cached playlist has become invalid."); ! if (_queueList) delete _queueList; _queueList = playlist; } else { delete playlist; } --- 61,71 ---- if (!_queueList || !_queueList->equals(playlist)) { logDebug("LPlayer::cached playlist has become invalid."); ! change.lock(); ! if (_queueList) { ! _queueList = 0; ! delete _queueList; ! } _queueList = playlist; + change.unlock(); } else { delete playlist; } *************** *** 87,92 **** } ! Playlist* LPlayer::getPlaylist() { ! return _queueList; } --- 92,102 ---- } ! /* always returns a copy of the playlist */ ! CompositePlaylist* LPlayer::getPlaylist() { ! change.lock(); ! CompositePlaylist* result = new CompositePlaylist(); ! result->setPlaylist(_queueList); ! change.unlock(); ! return result; } Index: lplayer.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lplayer.h,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** lplayer.h 27 Jun 2005 15:52:06 -0000 1.25 --- lplayer.h 2 Jan 2006 23:16:21 -0000 1.26 *************** *** 61,65 **** Playlist* getBuiltPlaylist(); ! Playlist* getPlaylist(); QueueBuilder* getQueueBuilder(); --- 61,65 ---- Playlist* getBuiltPlaylist(); ! CompositePlaylist* getPlaylist(); QueueBuilder* getQueueBuilder(); Index: lpnogui.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpnogui.cpp,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** lpnogui.cpp 3 Jan 2005 10:42:53 -0000 1.21 --- lpnogui.cpp 2 Jan 2006 23:16:21 -0000 1.22 *************** *** 9,12 **** --- 9,14 ---- #include <qfileinfo.h> #include <qthread.h> + //Added by qt3to4: + #include <QEvent> #include <iostream> *************** *** 15,19 **** LPNoGUI::LPNoGUI(LPSettings* settings) : _quit(false), _settings(settings) { ! QThread::initialize(); // no, we have to initialize threads ourselves ((LogQt*)(globalclass::getLogger()))->setOutput(this); _lplayer = LPFactory::getFactory()->getLPlayer(); --- 17,22 ---- LPNoGUI::LPNoGUI(LPSettings* settings) : _quit(false), _settings(settings) { ! //not in Qt4 we can't.. ! // QThread::initialize(); // no, we have to initialize threads ourselves ((LogQt*)(globalclass::getLogger()))->setOutput(this); _lplayer = LPFactory::getFactory()->getLPlayer(); Index: lpremotegeneric.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpremotegeneric.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** lpremotegeneric.cpp 3 Jan 2005 10:42:53 -0000 1.15 --- lpremotegeneric.cpp 2 Jan 2006 23:16:21 -0000 1.16 *************** *** 30,34 **** QString filename = QString::fromLocal8Bit(_app->getSettings()->getSetting("remote","location").c_str()); QFile f(filename); ! if (!f.open(IO_ReadOnly)) { } --- 30,34 ---- QString filename = QString::fromLocal8Bit(_app->getSettings()->getSetting("remote","location").c_str()); QFile f(filename); ! if (!f.open(QIODevice::ReadOnly)) { } Index: lpsettings.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpsettings.cpp,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** lpsettings.cpp 30 Mar 2005 14:31:02 -0000 1.33 --- lpsettings.cpp 2 Jan 2006 23:16:21 -0000 1.34 *************** *** 13,16 **** --- 13,18 ---- #include <qdatetime.h> #include <qmap.h> + //Added by qt3to4: + #include <Q3CString> LPSettings* LPSettings::_singleton=0; *************** *** 124,128 **** _doc = QDomDocument( "mydocument" ); QFile f( ini.c_str() ); ! if ( !f.open( IO_ReadOnly ) ) { logWarning(string("LPSettings::settings file ") + ini + " cannot be opened. creating default."); Q... [truncated message content] |
|
From: <pa...@us...> - 2005-07-04 15:22:12
|
Update of /cvsroot/lplayer/lplayer/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4232 Modified Files: cocoascript.h compositeplaylist.cpp lpgrowl.cpp m3uplaylist.cpp Log Message: qmake compile Index: cocoascript.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/cocoascript.h,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** cocoascript.h 26 Jan 2005 00:39:15 -0000 1.5 --- cocoascript.h 4 Jul 2005 15:22:03 -0000 1.6 *************** *** 6,9 **** --- 6,10 ---- */ #include "lpglobal.h" + #include <vector> #import <Cocoa/Cocoa.h> Index: compositeplaylist.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/compositeplaylist.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** compositeplaylist.cpp 27 Jun 2005 15:52:04 -0000 1.12 --- compositeplaylist.cpp 4 Jul 2005 15:22:03 -0000 1.13 *************** *** 50,54 **** void CompositePlaylist::setPlaylist(Playlist* list) { logDebug("compositeplaylist::samesource"); ! if (list->getType() != TYPE) return false; CompositePlaylist* clist = (CompositePlaylist*) list; for (uint i=0;i<_playlists.size();i++) { --- 50,54 ---- void CompositePlaylist::setPlaylist(Playlist* list) { logDebug("compositeplaylist::samesource"); ! if (list->getType() != TYPE) return ; CompositePlaylist* clist = (CompositePlaylist*) list; for (uint i=0;i<_playlists.size();i++) { Index: lpgrowl.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpgrowl.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** lpgrowl.cpp 27 Jun 2005 15:51:20 -0000 1.1 --- lpgrowl.cpp 4 Jul 2005 15:22:03 -0000 1.2 *************** *** 4,7 **** --- 4,8 ---- #include "growlnotifier.h" #include <qstringlist.h> + #include <qfileinfo.h> LPGrowl::LPGrowl(LPlayer* player) { Index: m3uplaylist.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/m3uplaylist.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** m3uplaylist.cpp 27 Jun 2005 15:52:07 -0000 1.10 --- m3uplaylist.cpp 4 Jul 2005 15:22:03 -0000 1.11 *************** *** 26,30 **** } void M3UPlaylist::setPlaylist(Playlist* plist) { ! if (plist->getType() != TYPE) return false; setM3U(((M3UPlaylist*)plist)->getM3U()); return; --- 26,30 ---- } void M3UPlaylist::setPlaylist(Playlist* plist) { ! if (plist->getType() != TYPE) return ; setM3U(((M3UPlaylist*)plist)->getM3U()); return; |
|
From: <pa...@us...> - 2005-07-04 15:19:40
|
Update of /cvsroot/lplayer/lplayer/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3017 Modified Files: lp.pro Log Message: fixed qmake compile Index: lp.pro =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lp.pro,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** lp.pro 28 Jan 2005 19:03:17 -0000 1.31 --- lp.pro 4 Jul 2005 15:19:31 -0000 1.32 *************** *** 1,7 **** TEMPLATE = app CONFIG += qt warn_on debug thread - DEPENDPATH=/usr/local/qt/include QMAKE_LFLAGS_SONAME = -Wl,-install_name,@executable_path/../Frameworks/ ! macx:LIBS += -framework Carbon -framework Cocoa -framework QuickTime -lz -ldb_cxx macx:INCLUDEPATH += /Developer/Headers/FlatCarbon /sw/include/db4 RC_FILE = mac/LongPlayer.icns --- 1,6 ---- TEMPLATE = app CONFIG += qt warn_on debug thread QMAKE_LFLAGS_SONAME = -Wl,-install_name,@executable_path/../Frameworks/ ! macx:LIBS += -framework Carbon -framework Cocoa -framework QuickTime -lz -framework Growl -L/sw/lib -ldb_cxx macx:INCLUDEPATH += /Developer/Headers/FlatCarbon /sw/include/db4 RC_FILE = mac/LongPlayer.icns *************** *** 11,14 **** --- 10,14 ---- filewriter.h \ frontend.h \ + growlnotifier.h \ itunes.h \ logqt.h \ *************** *** 29,32 **** --- 29,33 ---- lpformstartup.h \ lpglobal.h \ + lpgrowl.h \ lpguihandler.h \ lplistener.h \ *************** *** 47,50 **** --- 48,52 ---- cocoascript.h \ simpleplaylist.h \ + stringcache.h \ songaccess.h \ songwidgets.h \ *************** *** 66,69 **** --- 68,72 ---- absutil.cpp \ filewriter.cpp \ + growlnotifier.cpp \ itunes.mm \ logqt.cpp \ *************** *** 83,86 **** --- 86,90 ---- lpformstartup.cpp \ lpglobal.cpp \ + lpgrowl.cpp \ lpguihandler.cpp \ lplayer.cpp \ *************** *** 100,103 **** --- 104,108 ---- winamp.cpp \ simpleplaylist.cpp \ + stringcache.cpp \ songaccess.cpp \ synchronizeddbaccess.cpp \ |
|
From: <pa...@us...> - 2005-06-27 15:53:29
|
Update of /cvsroot/lplayer/lplayer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22916 Modified Files: ChangeLog TODO Log Message: misc Index: ChangeLog =================================================================== RCS file: /cvsroot/lplayer/lplayer/ChangeLog,v retrieving revision 1.54 retrieving revision 1.55 diff -C2 -d -r1.54 -r1.55 *** ChangeLog 30 Mar 2005 13:40:47 -0000 1.54 --- ChangeLog 27 Jun 2005 15:53:19 -0000 1.55 *************** *** 13,16 **** --- 13,23 ---- |_ | + - fixed Show Song File in Tiger + - recycles lplayer playlist in search form + - basic growl support + + 1.01 + - fixed crashes when there are no playlists + 1.0 features Index: TODO =================================================================== RCS file: /cvsroot/lplayer/lplayer/TODO,v retrieving revision 1.58 retrieving revision 1.59 diff -C2 -d -r1.58 -r1.59 *** TODO 30 Mar 2005 13:40:47 -0000 1.58 --- TODO 27 Jun 2005 15:53:19 -0000 1.59 *************** *** 1,7 **** ! BUGS/TODO ! 1.0 1.x - ability to cancel queueing - specify trim not for total but for # previous songs --- 1,31 ---- ! BUGS ! libdb dependency in mac os x ! close window means no menu in mac ! bdb fixes! (e.g. auto-remove logfile?) ! ! minimal-robust tested lplayer? java lplayer? -> java bdb ! ! /TODO ! - be stricter with color rectangle ! - basic browsing ! - add Growl support with color (Mac) + add "next 2 songs:" ! ! ui ! - BIG song items and separation Cocoa/Qt/.. ! - upcoming music: with close button (instant decresae non user rating and remove from queue) ! ! queueing ! - remove good music from m3us -> m3u queue mode: queue entirely, queue from, queue selections ! - playlist/dir mode -> PICK RANDOM dir and queue good songs in them ! - basic tagging 1.x + - favorite folders to prevent your fav music never gets played..? + - "party" function. -> only play known songs and treat songs heard before party start as never played. + + small/low value + - m3u entries with \ needs current drive path (Windows) or something + - implement commandline arg for exporting / backup instructions? - ability to cancel queueing - specify trim not for total but for # previous songs *************** *** 13,21 **** - cache filelist persistently? + entry detect new files - add option for filelist rebuilds? ! - include PlayLong/PlayNext/PlayDir/PlayDirNext/Queue/QueueDir (Mac OS X - optional scripts dir) - play next reinserts previously queued songs - - "party" function. -> only play known songs and treat songs heard before party start as never played. - very simple: open database (to sort on history etc..) + remove from database entry in song menu)? - - Growl support with color (Mac) - popup genrewidget from color square for extended list - playlist trimming: leave 5 last or make it easier to reinsert --- 37,43 ---- - cache filelist persistently? + entry detect new files - add option for filelist rebuilds? ! - include PlayNext/PlayDir/PlayDirNext/Queue/QueueDir (Mac OS X - optional scripts dir) - play next reinserts previously queued songs - very simple: open database (to sort on history etc..) + remove from database entry in song menu)? - popup genrewidget from color square for extended list - playlist trimming: leave 5 last or make it easier to reinsert *************** *** 33,38 **** - show ALBUM thingy when filename starts with 06 or something or m3u present in which this song is listed, also MP3/OGG/ACC indicator? - offer Music ROOT option for added functionality ! - add ID3 tag support (http://www.robodj.org/source/index.html) - single instance - player - - plag tagged songs --- 55,59 ---- - show ALBUM thingy when filename starts with 06 or something or m3u present in which this song is listed, also MP3/OGG/ACC indicator? - offer Music ROOT option for added functionality ! - add ID3 tag support (http://www.robodj.org/source/index.html), e.g. for i3dtag genre - single instance - player |
Update of /cvsroot/lplayer/lplayer/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22288 Modified Files: compositeplaylist.cpp compositeplaylist.h directoryplaylist.cpp directoryplaylist.h itunes.h itunes.mm lpberkeleydbreader.cpp lpdatabase.cpp lpformprefs.cpp lpformsearch.cpp lplayer.cpp lplayer.h lpsongfilter.h m3uplaylist.cpp m3uplaylist.h playlist.h queuebuilder.cpp songwidgets.cpp stringcache.cpp tester.cpp Log Message: misc (a.o. clone capability for playlists and reuse of main lplayer playlist in search) Index: compositeplaylist.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/compositeplaylist.cpp,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** compositeplaylist.cpp 26 Jan 2005 10:08:32 -0000 1.11 --- compositeplaylist.cpp 27 Jun 2005 15:52:04 -0000 1.12 *************** *** 35,38 **** --- 35,44 ---- if (list->getType() != TYPE) return false; CompositePlaylist* clist = (CompositePlaylist*) list; + //try meta + if (getMeta() && !clist->getMeta()) + return ((getPlaylists().size() == 1) && (getPlaylists()[0]->sameSource(clist))); + if (!getMeta() && clist->getMeta()) + return ((clist->getPlaylists().size() == 1) && (this->sameSource(clist->getPlaylists()[0]))); + if (clist->getPlaylists().size() != _playlists.size()) return false; for (uint i=0;i<_playlists.size();i++) *************** *** 41,44 **** --- 47,70 ---- return Playlist::sameSource(list); } + //deletes subplaylists + void CompositePlaylist::setPlaylist(Playlist* list) { + logDebug("compositeplaylist::samesource"); + if (list->getType() != TYPE) return false; + CompositePlaylist* clist = (CompositePlaylist*) list; + for (uint i=0;i<_playlists.size();i++) { + delete _playlists[i]; + } + _playlists.clear(); + vector<Playlist*> newPlaylists = clist->getPlaylists(); + for (uint i=0;i<newPlaylists.size();i++) { + addPlaylist(newPlaylists[i]); + } + if (_filenames) delete _filenames; + _filenames = new vector<string>; + vector<string>* newFilenames = clist->filenames(); + for (uint i=0;i<newFilenames->size();i++) { + _filenames->push_back((*newFilenames)[i]); + } + } void CompositePlaylist::removePlaylist(string playlist) { |
|
From: <pa...@us...> - 2005-06-27 15:52:30
|
Update of /cvsroot/lplayer/lplayer/src/mac In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22288/mac Modified Files: Info.plist Log Message: misc (a.o. clone capability for playlists and reuse of main lplayer playlist in search) Index: Info.plist =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/mac/Info.plist,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Info.plist 6 Dec 2004 16:59:43 -0000 1.1 --- Info.plist 27 Jun 2005 15:52:10 -0000 1.2 *************** *** 6,10 **** <string>LongPlayer</string> <key>CFBundleGetInfoString</key> ! <string>1.0 beta, Copyright 2004 Andrew Wils.</string> <key>CFBundleIconFile</key> <string>LongPlayer.icns</string> --- 6,10 ---- <string>LongPlayer</string> <key>CFBundleGetInfoString</key> ! <string>1.01, Copyright 2001-2005 Andrew Wils.</string> <key>CFBundleIconFile</key> <string>LongPlayer.icns</string> |
|
From: <pa...@us...> - 2005-06-27 15:52:22
|
Update of /cvsroot/lplayer/lplayer/src/LongPlayer.xcode In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22288/LongPlayer.xcode Modified Files: project.pbxproj Log Message: misc (a.o. clone capability for playlists and reuse of main lplayer playlist in search) Index: project.pbxproj =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/LongPlayer.xcode/project.pbxproj,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** project.pbxproj 1 Feb 2005 16:30:06 -0000 1.12 --- project.pbxproj 27 Jun 2005 15:52:09 -0000 1.13 *************** *** 89,92 **** --- 89,93 ---- D51E41AA54D7C558B71745FF, 49ED6FDC07AA42B3000A4AFE, + 49A50E42087037A800B32CEC, ); isa = PBXFrameworksBuildPhase; *************** *** 140,143 **** --- 141,146 ---- 0CAF37870141BDC4138B5CE6 = { children = ( + 4906815908182C4900DAC2A9, + 49068141081828B100DAC2A9, 498E48F007AFCF6400DEB0F7, 49ED6FDD07AA42F1000A4AFE, *************** *** 904,907 **** --- 907,975 ---- //493 //494 + 49068141081828B100DAC2A9 = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + path = growlnotifier.cpp; + refType = 4; + sourceTree = "<group>"; + }; + 49068142081828B100DAC2A9 = { + fileRef = 49068141081828B100DAC2A9; + isa = PBXBuildFile; + settings = { + }; + }; + 49068143081828C100DAC2A9 = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + path = growlnotifier.h; + refType = 4; + sourceTree = "<group>"; + }; + 49068144081828C100DAC2A9 = { + fileRef = 49068143081828C100DAC2A9; + isa = PBXBuildFile; + settings = { + }; + }; + 4906815108182BE700DAC2A9 = { + fileEncoding = 4; + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + path = lpgrowl.h; + refType = 4; + sourceTree = "<group>"; + }; + 4906815208182BE700DAC2A9 = { + fileRef = 4906815108182BE700DAC2A9; + isa = PBXBuildFile; + settings = { + }; + }; + 4906815908182C4900DAC2A9 = { + fileEncoding = 4; + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + path = lpgrowl.cpp; + refType = 4; + sourceTree = "<group>"; + }; + 4906815A08182C4900DAC2A9 = { + fileRef = 4906815908182C4900DAC2A9; + isa = PBXBuildFile; + settings = { + }; + }; + 490681F0081834F100DAC2A9 = { + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + isa = PBXCopyFilesBuildPhase; + runOnlyForDeploymentPostprocessing = 0; + }; 492E91F40798707E007B03DD = { fileEncoding = 30; *************** *** 1007,1010 **** --- 1075,1079 ---- 4996245E078949AD00AEAD69 = { buildSettings = { + DEPLOYMENT_POSTPROCESSING = YES; }; isa = PBXBuildStyle; *************** *** 1024,1027 **** --- 1093,1109 ---- shellScript = LongPlayer.xcode/lplayer_dynamic.sh; }; + 49A50E41087037A800B32CEC = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + path = Growl.framework; + refType = 4; + sourceTree = "<group>"; + }; + 49A50E42087037A800B32CEC = { + fileRef = 49A50E41087037A800B32CEC; + isa = PBXBuildFile; + settings = { + }; + }; 49ED6FDB07AA42B3000A4AFE = { isa = PBXFileReference; *************** *** 1118,1121 **** --- 1200,1205 ---- 49ED6FE007AA42F1000A4AFE, 498E48EF07AFCF5900DEB0F7, + 49068144081828C100DAC2A9, + 4906815208182BE700DAC2A9, ); isa = PBXResourcesBuildPhase; *************** *** 1271,1274 **** --- 1355,1360 ---- 5CABFA5208F1CF844E380E48 = { children = ( + 4906815108182BE700DAC2A9, + 49068143081828C100DAC2A9, 498E48EE07AFCF5900DEB0F7, 49ED6FDE07AA42F1000A4AFE, *************** *** 1544,1547 **** --- 1630,1635 ---- 49ED6FDF07AA42F1000A4AFE, 498E48F107AFCF6400DEB0F7, + 49068142081828B100DAC2A9, + 4906815A08182C4900DAC2A9, ); isa = PBXSourcesBuildPhase; *************** *** 2622,2625 **** --- 2710,2714 ---- B3B3A1209B0F55C9F667064C = { buildPhases = ( + 490681F0081834F100DAC2A9, 27B7CF887F184AD70FA01B45, 58FD34D9E619A65A471A6CAF, *************** *** 2638,2642 **** DYLIB_COMPATIBILITY_VERSION = 1.0; DYLIB_CURRENT_VERSION = 1.0.0; ! FRAMEWORK_SEARCH_PATHS = ""; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = stable.h; --- 2727,2731 ---- DYLIB_COMPATIBILITY_VERSION = 1.0; DYLIB_CURRENT_VERSION = 1.0.0; ! FRAMEWORK_SEARCH_PATHS = "/Users/andrew/Code/growl/Growl-Frameworks /Users/andrew/Code/lplayer/lplayer-1.0/src/build/LongPlayer.app/Contents/Frameworks /Users/andrew/Code/lplayer/lplayer-1.0/src"; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = stable.h; *************** *** 2778,2781 **** --- 2867,2871 ---- GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; + PREBINDING = NO; ZERO_LINK = YES; }; *************** *** 2901,2904 **** --- 2991,2995 ---- C5440CDF523D6A4D9BBEC5E6 = { children = ( + 49A50E41087037A800B32CEC, 49ED6FDB07AA42B3000A4AFE, D1B8AC3D25097A6F8643AFB7, |
|
From: <pa...@us...> - 2005-06-27 15:51:34
|
Update of /cvsroot/lplayer/lplayer/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21885 Modified Files: lpfactory.cpp Added Files: lpgrowl.h lpgrowl.cpp growlnotifier.h growlnotifier.cpp Log Message: basic growl support (mac) --- NEW FILE: lpgrowl.h --- /** LongPlayer - cross-platform multimedia queuer * Copyright (C) 2001-2005 Andrew Wils * * This program is free software; See the * GNU General Public License for more details. */ #ifndef LPGROWL_H #define LPGROWL_H #include "lplayer.h" #include "lplistener.h" #include <qstringlist.h> class LPlayer; class GrowlNotifier; /** class fileWriter: outputs LongPlayer info to a text file */ class LPGrowl : public LPListener { public: LPGrowl(LPlayer* player); virtual ~LPGrowl(); void notify(int i=0); private: GrowlNotifier* _growl; LPlayer* getLPlayer(); LPlayer* _player; QStringList notifications; QStringList default_notifications; }; #endif --- NEW FILE: lpgrowl.cpp --- #include "lpgrowl.h" #include "lpsettings.h" #include "absplayer.h" #include "growlnotifier.h" #include <qstringlist.h> LPGrowl::LPGrowl(LPlayer* player) { logDebug("LPGrowl::registering Growl"); _player = player; player->subscribe(this); notifications.push_back("new_song"); default_notifications.push_back("new_song"); _growl = new GrowlNotifier(notifications, default_notifications, "LongPlayer"); } LPGrowl::~LPGrowl() { delete _growl; } LPlayer* LPGrowl::getLPlayer() { return _player; } void LPGrowl::notify(int /*i*/) { Song sng = _player->currentSong(); string title = string("Playing ") + sng.getName(); QString desc = ""; QString name, like, ago, times, length; int date; name = QString::fromLocal8Bit(sng.getName().c_str()); if (sng.getFilename().empty()) desc = ""; if (name.isEmpty()) name = sng.getFilename().c_str(); if (sng.firstTime()) { times = "first time"; ago = "first time"; } else { date = sng.getOldDate(); ago = absUtil::longTimeSpan(absUtil::getUtil()->date() - date).c_str(); ago += " ago"; times = absUtil::its(sng.getTimes()).c_str(); } if (sng.getRating()) like = string(absUtil::its(sng.getRating() + 5) + "/10").c_str(); else like = "neutral"; if (sng.length() > 1) length = absUtil::shortTimeSpan(sng.length()).c_str(); else length = "unknown"; QFileInfo info(QString::fromLocal8Bit(sng.getFilename().c_str())); //take some dirs from the path QString filename1 = QString::fromLocal8Bit(sng.getFilename().c_str()); char delimiter1; if (filename1.contains("/")) delimiter1 = '/'; else delimiter1 = '\\'; QStringList dirs1 = QStringList::split( delimiter1,filename1,FALSE); QString dirClue = ""; QString dirClueSep = ""; //Qt2 uses count instead of size uint i = 0; if (dirs1.count() > 4) i = dirs1.count() - 4; for (; i < dirs1.count() - 1; i++) { dirClue += dirClueSep + dirs1[i]; dirClueSep = " - "; } dirClue += "\n"; desc = dirClue + QString("\nrating: ") + absUtil::its(sng.getRating() + 5).c_str() + QString("/10") + QString(" size: ") + absUtil::its(sng.size() / 1024).c_str() + QString("kb") + QString(" length: ") + absUtil::shortTimeSpan(sng.length()).c_str() ; _growl->notify("new_song", title.c_str(), desc); } --- NEW FILE: growlnotifier.h --- /* * growlnotifier.h - A simple Qt interface to Growl * * Copyright (C) 2005 Remko Troncon * * 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. * * You can also redistribute and/or modify this program under the * terms of the Psi License, specified in the accompanied COPYING * file, as published by the Psi Project; either dated January 1st, * 2005, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef GROWLNOTIFIER_H #define GROWLNOTIFIER_H #include <CoreFoundation/CoreFoundation.h> #include <Growl/Growl.h> #include <qobject.h> #include <qpixmap.h> #include <qstring.h> #include <qstringlist.h> class GrowlNotifierSignaler; /*! * A simple interface to Growl. */ class GrowlNotifier { public: GrowlNotifier( const QStringList& notifications, const QStringList& default_notifications, const QString& app_name = ""); void notify(const QString& name, const QString& title, const QString& description, const QPixmap& icon = QPixmap(), bool sticky = false, const QObject* receiver = 0, const char* clicked_slot = 0, const char* timeout_slot = 0, void* context = 0); private: struct Growl_Delegate delegate_; GrowlNotifierSignaler* signaler_; }; #endif --- NEW FILE: growlnotifier.cpp --- /* * growlnotifier.cpp - A simple Qt interface to Growl * * Copyright (C) 2005 Remko Troncon * * 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. * * You can also redistribute and/or modify this program under the * terms of the Psi License, specified in the accompanied COPYING * file, as published by the Psi Project; either dated January 1st, * 2005, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /* * TODO: * - Write a destructor, which CFReleases all datastructures * - Make the signal/slot work when Growl is fixed **/ extern "C" { #include <CoreFoundation/CoreFoundation.h> #include <Growl/Growl.h> } #include <qstringlist.h> #include <qpixmap.h> #include <qbuffer.h> //#include <sys/types.h> //#include <unistd.h> #include "growlnotifier.h" //------------------------------------------------------------------------------ /*! * A class for emitting a clicked signal to the interested party. */ class GrowlNotifierSignaler : public QObject { Q_OBJECT public: GrowlNotifierSignaler() { }; void emitNotificationClicked(void* context) { emit notificationClicked(context); } void emitNotificationTimeout(void* context) { emit notificationTimedOut(context); } signals: void notificationClicked(void*); void notificationTimedOut(void*); }; //------------------------------------------------------------------------------ /*! * Converts a QString to a CoreFoundation string, preserving Unicode. * * \param s the string to be converted. * \return a reference to a CoreFoundation string. */ static CFStringRef qString2CFString(const QString& s) { if (s.isNull()) return 0; ushort* buffer = new ushort[s.length()]; for (unsigned int i = 0; i < s.length(); ++i) buffer[i] = s[i].unicode(); CFStringRef result = CFStringCreateWithBytes ( NULL, (UInt8*) buffer, s.length()*sizeof(ushort), kCFStringEncodingUnicode, false); delete buffer; return result; } //------------------------------------------------------------------------------ /*! * Retrieves the values from the context. * * \param context the context * \param receiver the receiving object which will be signaled when the * notification is clicked. May be NULL. * \param clicked_slot the slot to be signaled when the notification is clicked. * \param timeout_slot the slot to be signaled when the notification isn't clicked. * \param context the context which will be passed back to the slot * May be NULL. */ void getContext( CFPropertyListRef context, GrowlNotifierSignaler** signaler, const QObject** receiver, const char** clicked_slot, const char** timeout_slot, void** qcontext/*, pid_t* pid*/) { CFDataRef data; if (signaler) { data = (CFDataRef) CFArrayGetValueAtIndex((CFArrayRef) context, 0); CFDataGetBytes(data, CFRangeMake(0,CFDataGetLength(data)), (UInt8*) signaler); } if (receiver){ data = (CFDataRef) CFArrayGetValueAtIndex((CFArrayRef) context, 1); CFDataGetBytes(data, CFRangeMake(0,CFDataGetLength(data)), (UInt8*) receiver); } if (clicked_slot) { data = (CFDataRef) CFArrayGetValueAtIndex((CFArrayRef) context, 2); CFDataGetBytes(data, CFRangeMake(0,CFDataGetLength(data)), (UInt8*) clicked_slot); } if (timeout_slot) { data = (CFDataRef) CFArrayGetValueAtIndex((CFArrayRef) context, 3); CFDataGetBytes(data, CFRangeMake(0,CFDataGetLength(data)), (UInt8*) timeout_slot); } if (qcontext) { data = (CFDataRef) CFArrayGetValueAtIndex((CFArrayRef) context, 4); CFDataGetBytes(data, CFRangeMake(0,CFDataGetLength(data)), (UInt8*) qcontext); } //if (pid) { // data = (CFDataRef) CFArrayGetValueAtIndex((CFArrayRef) context, 5); // CFDataGetBytes(data, CFRangeMake(0,CFDataGetLength(data)), (UInt8*) pid); //} } //------------------------------------------------------------------------------ /*! * Creates a context for a notification, which will be sent back by Growl * when a notification is clicked. * * \param receiver the receiving object which will be signaled when the * notification is clicked. May be NULL. * \param clicked_slot the slot to be signaled when the notification is clicked. * \param timeout_slot the slot to be signaled when the notification isn't clicked. * \param context the context which will be passed back to the slot * May be NULL. * \return the context */ CFPropertyListRef createContext( GrowlNotifierSignaler* signaler, const QObject* receiver, const char* clicked_slot, const char* timeout_slot, void* qcontext /*, pid_t pid*/) { CFDataRef context[5]; context[0] = CFDataCreate(kCFAllocatorDefault, (const UInt8*) &signaler, sizeof(GrowlNotifierSignaler*)); context[1] = CFDataCreate(kCFAllocatorDefault, (const UInt8*) &receiver, sizeof(const QObject *)); context[2] = CFDataCreate(kCFAllocatorDefault, (const UInt8*) &clicked_slot, sizeof(const char*)); context[3] = CFDataCreate(kCFAllocatorDefault, (const UInt8*) &timeout_slot, sizeof(const char*)); context[4] = CFDataCreate(kCFAllocatorDefault, (const UInt8*) &qcontext, sizeof(void*)); //context[5] = CFDataCreate(kCFAllocatorDefault, (const UInt8*) &pid, sizeof(pid_t)); CFArrayRef array = CFArrayCreate( kCFAllocatorDefault, (const void **)context, 5, &kCFTypeArrayCallBacks ); // Cleaning up CFRelease(context[0]); CFRelease(context[1]); CFRelease(context[2]); CFRelease(context[3]); CFRelease(context[4]); //CFRelease(context[5]); return array; } //------------------------------------------------------------------------------ /*! * The callback function, used by Growl to notify that a notification was * clicked. * \param context the context of the notification */ void notification_clicked(CFPropertyListRef context) { GrowlNotifierSignaler* signaler; const QObject* receiver; const char* slot; void* qcontext; //pid_t pid; getContext(context, &signaler, &receiver, &slot, 0, &qcontext/*, &pid*/); //if (pid == getpid()) { QObject::connect(signaler,SIGNAL(notificationClicked(void*)),receiver,slot); signaler->emitNotificationClicked(qcontext); QObject::disconnect(signaler,SIGNAL(notificationClicked(void*)),receiver,slot); //} } //------------------------------------------------------------------------------ /*! * The callback function, used by Growl to notify that a notification has * timed out. * \param context the context of the notification */ void notification_timeout(CFPropertyListRef context) { GrowlNotifierSignaler* signaler; const QObject* receiver; const char* slot; void* qcontext; //pid_t pid; getContext(context, &signaler, &receiver, 0, &slot, &qcontext /*, &pid*/); //if (pid == getpid()) { QObject::connect(signaler,SIGNAL(notificationTimedOut(void*)),receiver,slot); signaler->emitNotificationTimeout(qcontext); QObject::disconnect(signaler,SIGNAL(notificationTimedOut(void*)),receiver,slot); //} } //------------------------------------------------------------------------------ /*! * Constructs a GrowlNotifier. * * \param notifications the list names of all notifications that can be sent * by this notifier. * \param default_notifications the list of names of the notifications that * should be enabled by default. * \param app the name of the application under which the notifier should * register with growl. */ GrowlNotifier::GrowlNotifier( const QStringList& notifications, const QStringList& default_notifications, const QString& app) { // Initialize signaler signaler_ = new GrowlNotifierSignaler(); // All Notifications QStringList::ConstIterator it; CFMutableArrayRef allNotifications = CFArrayCreateMutable( kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks); for ( it = notifications.begin(); it != notifications.end(); ++it ) CFArrayAppendValue(allNotifications, qString2CFString(*it)); // Default Notifications CFMutableArrayRef defaultNotifications = CFArrayCreateMutable( kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks); for ( it = default_notifications.begin(); it != default_notifications.end(); ++it ) CFArrayAppendValue(defaultNotifications, qString2CFString(*it)); // Initialize delegate InitGrowlDelegate(&delegate_); if (!app.isEmpty()) delegate_.applicationName = qString2CFString(app); CFTypeRef keys[] = { GROWL_NOTIFICATIONS_ALL, GROWL_NOTIFICATIONS_DEFAULT }; CFTypeRef values[] = { allNotifications, defaultNotifications }; delegate_.registrationDictionary = CFDictionaryCreate( kCFAllocatorDefault, keys, values, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); delegate_.growlNotificationWasClicked = ¬ification_clicked; // delegate_.growlNotificationTimedOut = ¬ification_timeout; // Register with Growl Growl_SetDelegate(&delegate_); } /*! * Sends a notification to Growl. * * \param name the registered name of the notification. * \param title the title for the notification. * \param description the description of the notification. * \param icon the icon of the notification. * \param sticky whether the notification should be sticky (i.e. require a * click to discard. * \param receiver the receiving object which will be signaled when the * notification is clicked. May be NULL. * \param slot the slot to be signaled when the notification is clicked. * \param context the context which will be passed back to the slot * May be NULL. */ void GrowlNotifier::notify(const QString& name, const QString& title, const QString& description, const QPixmap& p, bool sticky, const QObject* receiver, const char* clicked_slot, const char* timeout_slot, void* qcontext) { // Convert the image if necessary CFDataRef icon = 0; if (!p.isNull()) { QByteArray img_data; QBuffer buffer(img_data); buffer.open(IO_WriteOnly); p.save(&buffer, "PNG"); icon = CFDataCreate( NULL, (UInt8*) img_data.data(), img_data.size()); } // Convert strings CFStringRef cf_title = qString2CFString(title); CFStringRef cf_description = qString2CFString(description); CFStringRef cf_name = qString2CFString(name); // Do notification CFPropertyListRef context = createContext(signaler_, receiver, clicked_slot, timeout_slot, qcontext/*, getpid()*/); Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext( cf_title, cf_description, cf_name, icon, 0, sticky, context); // Release intermediary datastructures CFRelease(context); if (icon) CFRelease(icon); if (cf_title) CFRelease(cf_title); if (cf_description) CFRelease(cf_description); if (cf_name) CFRelease(cf_name); } //----------------------------------------------------------------------------- #include "growlnotifier.moc" Index: lpfactory.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpfactory.cpp,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** lpfactory.cpp 3 Jan 2005 10:42:53 -0000 1.35 --- lpfactory.cpp 27 Jun 2005 15:51:20 -0000 1.36 *************** *** 9,12 **** --- 9,15 ---- #include "absplayer.h" + #ifdef Q_OS_MACX + #include "lpgrowl.h" + #endif LPFactory* LPFactory::_factory = 0; *************** *** 33,37 **** _lplayer = new LPlayer(getSettings()); ! //TODO move elsewhere if (getSettings()->getSetting(LPArgParser::SettingCleanDatabase) != "") { --- 36,42 ---- _lplayer = new LPlayer(getSettings()); ! #ifdef Q_OS_MACX ! LPGrowl* growl = new LPGrowl(_lplayer); ! #endif //TODO move elsewhere if (getSettings()->getSetting(LPArgParser::SettingCleanDatabase) != "") { |
|
From: <pa...@us...> - 2005-03-31 06:56:19
|
Update of /cvsroot/lplayer/lplayer/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27855/src Modified Files: LPlayer.dsp lpformsearch.cpp lpwindowmain.cpp playlistreader.cpp Log Message: fixes crashes when no playlists Index: LPlayer.dsp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/LPlayer.dsp,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** LPlayer.dsp 6 Mar 2005 23:30:33 -0000 1.21 --- LPlayer.dsp 31 Mar 2005 06:55:42 -0000 1.22 *************** *** 71,75 **** # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "$(QTDIR)\include" /I "P:\Programming\Wasabi SDK\studio" /I "_$(QTDIR)\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "QT_DLL" /D "QT_THREAD_SUPPORT" /D "WINAMP2" /FR /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 --- 71,75 ---- # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /GZ /c ! # ADD CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /I "$(QTDIR)\include" /I "P:\Programming\Wasabi SDK\studio" /I "_$(QTDIR)\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "QT_DLL" /D "QT_THREAD_SUPPORT" /D "WINAMP2" /FR /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 Index: lpformsearch.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformsearch.cpp,v retrieving revision 1.59 retrieving revision 1.60 diff -C2 -d -r1.59 -r1.60 *** lpformsearch.cpp 22 Feb 2005 15:44:35 -0000 1.59 --- lpformsearch.cpp 31 Mar 2005 06:55:42 -0000 1.60 *************** *** 271,274 **** --- 271,275 ---- void LPFormSearch::startSearch() { + if (!cmbPlaylist->count()) return; txtStatus->setText("Building playlist..."); btnSearch->setEnabled(false); Index: lpwindowmain.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpwindowmain.cpp,v retrieving revision 1.110 retrieving revision 1.111 diff -C2 -d -r1.110 -r1.111 *** lpwindowmain.cpp 30 Mar 2005 15:01:18 -0000 1.110 --- lpwindowmain.cpp 31 Mar 2005 06:55:43 -0000 1.111 *************** *** 808,811 **** --- 808,812 ---- vector<string>* files = meta->filenames(); + if (!files) return; //empty doInitProgress("Calculating Song ID's...\nPrecalculating the Song ID's will greatly speed up the queueing process.",files->size()); bool stop = false; Index: playlistreader.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/playlistreader.cpp,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** playlistreader.cpp 26 Jan 2005 10:08:32 -0000 1.11 --- playlistreader.cpp 31 Mar 2005 06:55:51 -0000 1.12 *************** *** 155,163 **** if (att.value() == QString::fromLocal8Bit(name.c_str())) found = true; } - logDebug(string("PlaylistReader::Reading ") + string(att.value().local8Bit())); if (!found) { logWarning(string("PlaylistReader::playlist ") + name + " does not exist."); return new CompositePlaylist("dummy"); } CompositePlaylist* cp = new CompositePlaylist(name); //dirs --- 155,163 ---- if (att.value() == QString::fromLocal8Bit(name.c_str())) found = true; } if (!found) { logWarning(string("PlaylistReader::playlist ") + name + " does not exist."); return new CompositePlaylist("dummy"); } + logDebug(string("PlaylistReader::Reading ") + string(att.value().local8Bit())); CompositePlaylist* cp = new CompositePlaylist(name); //dirs |
|
From: <pa...@us...> - 2005-03-30 15:02:01
|
Update of /cvsroot/lplayer/lplayer/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2880/src Modified Files: lpwindowmain.cpp lpwindowmain.h songwidgets.cpp Log Message: fixed png's for windows / aborts clean database when user refuses to backup db Index: lpwindowmain.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpwindowmain.cpp,v retrieving revision 1.109 retrieving revision 1.110 diff -C2 -d -r1.109 -r1.110 *** lpwindowmain.cpp 30 Mar 2005 13:40:48 -0000 1.109 --- lpwindowmain.cpp 30 Mar 2005 15:01:18 -0000 1.110 *************** *** 783,787 **** QMessageBox::information( this, "Clean Database", "This will remove all song entries from the database that are not present in the playlists.\nFirst you can specify where to backup the database."); ! exportXML(); vector<string> playlists = getApp()->getPlaylists(); CompositePlaylist* meta = new CompositePlaylist(); --- 783,787 ---- QMessageBox::information( this, "Clean Database", "This will remove all song entries from the database that are not present in the playlists.\nFirst you can specify where to backup the database."); ! if (!exportXML()) return; vector<string> playlists = getApp()->getPlaylists(); CompositePlaylist* meta = new CompositePlaylist(); *************** *** 818,826 **** } ! void LPWindowMain::exportXML() { QString lastdir = QString::fromLocal8Bit(getSettings()->getSetting(SettingLastDir).c_str()); QString s = QFileDialog::getSaveFileName( lastdir, "XML ( *.xml );;All files ( * )", this, "save to xml", "Choose filename for XML export"); if ( s.isEmpty() ) ! return; getSettings()->setSetting(SettingLastDir,string(QFileInfo(s).dirPath().local8Bit())); if(s.contains('.',true)<1) { --- 818,826 ---- } ! bool LPWindowMain::exportXML() { QString lastdir = QString::fromLocal8Bit(getSettings()->getSetting(SettingLastDir).c_str()); QString s = QFileDialog::getSaveFileName( lastdir, "XML ( *.xml );;All files ( * )", this, "save to xml", "Choose filename for XML export"); if ( s.isEmpty() ) ! return false; getSettings()->setSetting(SettingLastDir,string(QFileInfo(s).dirPath().local8Bit())); if(s.contains('.',true)<1) { *************** *** 828,831 **** --- 828,832 ---- } getApp()->DatabaseExportXML(string(s.local8Bit())); + return true; } Index: lpwindowmain.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpwindowmain.h,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -d -r1.42 -r1.43 *** lpwindowmain.h 10 Feb 2005 21:55:13 -0000 1.42 --- lpwindowmain.h 30 Mar 2005 15:01:21 -0000 1.43 *************** *** 95,99 **** void clearLists(); void importXML(); ! void exportXML(); void calculateFileIDs(); void purgeFileIDs(); --- 95,99 ---- void clearLists(); void importXML(); ! bool exportXML();//returns false when user canceled void calculateFileIDs(); void purgeFileIDs(); Index: songwidgets.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/songwidgets.cpp,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** songwidgets.cpp 6 Mar 2005 23:30:44 -0000 1.17 --- songwidgets.cpp 30 Mar 2005 15:01:21 -0000 1.18 *************** *** 494,497 **** --- 494,498 ---- setSong(sng); } + PlayedSongItem::PlayedSongItem(QListView* vlist, Song sng, QListViewItem* after, bool history) : QListViewItem(vlist,after), _odd(false), _history(history) { |
|
From: <pa...@us...> - 2005-03-30 15:01:56
|
Update of /cvsroot/lplayer/lplayer/src/images In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2880/src/images Modified Files: add5.png refresh.png Log Message: fixed png's for windows / aborts clean database when user refuses to backup db Index: add5.png =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/images/add5.png,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsP0Uuq3 and /tmp/cvsDn47o0 differ Index: refresh.png =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/images/refresh.png,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvs2IhY1m and /tmp/cvsMtVCjk differ |
|
From: <pa...@us...> - 2005-03-30 14:31:29
|
Update of /cvsroot/lplayer/lplayer/debian In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17166/debian Modified Files: changelog Log Message: 1.0 linux Index: changelog =================================================================== RCS file: /cvsroot/lplayer/lplayer/debian/changelog,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** changelog 16 Jan 2005 15:56:16 -0000 1.3 --- changelog 30 Mar 2005 14:30:59 -0000 1.4 *************** *** 1,2 **** --- 1,8 ---- + lplayer (1.0) unstable; urgency=low + + * new release + + -- Andrew Wils <an...@ja...> Sat, 29 Jan 2005 00:27:27 +0100 + lplayer (1.0_beta) unstable; urgency=low |
|
From: <pa...@us...> - 2005-03-30 14:31:16
|
Update of /cvsroot/lplayer/lplayer/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17166/src Modified Files: Makefile.am lpformabout.cpp lpformsearchbase.ui lpsettings.cpp Log Message: 1.0 linux Index: Makefile.am =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/Makefile.am,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -d -r1.40 -r1.41 *** Makefile.am 28 Jan 2005 19:03:16 -0000 1.40 --- Makefile.am 30 Mar 2005 14:31:01 -0000 1.41 *************** *** 44,48 **** songwidgets.cpp \ threadedcommand.cpp autoqueue.cpp genrewidget.cpp buildplaylist.cpp \ ! tester.cpp EXTRA_lplayer_SOURCES = lpberkeleydbreader.cpp --- 44,48 ---- songwidgets.cpp \ threadedcommand.cpp autoqueue.cpp genrewidget.cpp buildplaylist.cpp \ ! tester.cpp stringcache.cpp EXTRA_lplayer_SOURCES = lpberkeleydbreader.cpp *************** *** 65,69 **** songwidgets.h \ threadedcommand.h command.h autoqueue.h genrewidget.h buildplaylist.h \ ! tester.h # client stuff --- 65,69 ---- songwidgets.h \ threadedcommand.h command.h autoqueue.h genrewidget.h buildplaylist.h \ ! tester.h stringcache.h # client stuff *************** *** 92,96 **** images/genre.png images/genre-disabled.png images/normal.png \ images/minimal.png images/playnow.png \ ! images/queue.png # this is where the XML-GUI resource file goes --- 92,96 ---- images/genre.png images/genre-disabled.png images/normal.png \ images/minimal.png images/playnow.png \ ! images/queue.png images/refresh.png images/add5.png # this is where the XML-GUI resource file goes Index: lpformabout.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformabout.cpp,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** lpformabout.cpp 6 Mar 2005 22:05:28 -0000 1.37 --- lpformabout.cpp 30 Mar 2005 14:31:01 -0000 1.38 *************** *** 22,26 **** TextLabel1->setText( QString( ! QString("LongPlayer ") + VERSION + " (2005-03-06)\n" + QString("Copyright (c) 2001-2005 by Andrew Wils\n\n") + QString("This program is free software:\nSee the accompanying license file for details.\n\n\n") + --- 22,26 ---- TextLabel1->setText( QString( ! QString("LongPlayer ") + VERSION + " (2005-03-30)\n" + QString("Copyright (c) 2001-2005 by Andrew Wils\n\n") + QString("This program is free software:\nSee the accompanying license file for details.\n\n\n") + Index: lpformsearchbase.ui =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformsearchbase.ui,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** lpformsearchbase.ui 13 Feb 2005 22:30:06 -0000 1.12 --- lpformsearchbase.ui 30 Mar 2005 14:31:01 -0000 1.13 *************** *** 1,3 **** ! <!DOCTYPE UI><UI version="3.2" stdsetdef="1"> <class>LPFormSearchBase</class> <widget class="QDialog"> --- 1,3 ---- ! <!DOCTYPE UI><UI version="3.2" stdsetdef="1"> <class>LPFormSearchBase</class> <widget class="QDialog"> *************** *** 805,807 **** --- 805,810 ---- <includehint>playedsongview.h</includehint> </includehints> + <forwards> + <forward>class QListViewItem;</forward> + </forwards> </UI> Index: lpsettings.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpsettings.cpp,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** lpsettings.cpp 1 Feb 2005 16:30:06 -0000 1.32 --- lpsettings.cpp 30 Mar 2005 14:31:02 -0000 1.33 *************** *** 18,22 **** /* important: lpsettings cannot rely on util at construction time */ LPSettings::LPSettings() { ! logDebug("LPSettings::creating settings..."); _singleton = this; _resourceDir = ""; --- 18,22 ---- /* important: lpsettings cannot rely on util at construction time */ LPSettings::LPSettings() { ! //no logging possible _singleton = this; _resourceDir = ""; *************** *** 28,32 **** if (QDir("../share/lplayer").exists()) _resourceDir = "../share/lplayer/"; ! #ifdef Q_OS_X11 else _resourceDir = RESOURCE_DIR; //hard coded path --- 28,32 ---- if (QDir("../share/lplayer").exists()) _resourceDir = "../share/lplayer/"; ! #ifdef Q_WS_X11 else _resourceDir = RESOURCE_DIR; //hard coded path *************** *** 76,79 **** --- 76,80 ---- setSetting("playlists","location",getLPHomeDir() + "/playlists.xml"); } + logDebug(string("LPSettings::resources in ") + _resourceDir); } |
|
From: <pa...@us...> - 2005-03-30 13:41:17
|
Update of /cvsroot/lplayer/lplayer/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19952/src Modified Files: autoqueue.cpp lpdatabase.cpp lpwindowmain.cpp stringcache.cpp Log Message: getting ready for 1.0 Index: autoqueue.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/autoqueue.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** autoqueue.cpp 13 Feb 2005 22:30:06 -0000 1.10 --- autoqueue.cpp 30 Mar 2005 13:40:48 -0000 1.11 *************** *** 34,38 **** if (_nr) amount = _nr; else { ! //e.g. 20 songs, playing 15th, need to stay 5 ahead -> amount = 20 - 15 - 5 = 0 amount = getLPlayer()->getSettings()->getSetting(SettingAmount) - (absPlayer::getPlayer()->getPlaylistLength() - absPlayer::getPlayer()->getPlaylistPosition() ); if (force) amount = getLPlayer()->getSettings()->getSetting(SettingAmount); --- 34,38 ---- if (_nr) amount = _nr; else { ! //e.g.c 20 songs, playing 15th, need to stay 5 ahead -> amount = 20 - 15 - 5 = 0 amount = getLPlayer()->getSettings()->getSetting(SettingAmount) - (absPlayer::getPlayer()->getPlaylistLength() - absPlayer::getPlayer()->getPlaylistPosition() ); if (force) amount = getLPlayer()->getSettings()->getSetting(SettingAmount); Index: lpdatabase.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpdatabase.cpp,v retrieving revision 1.57 retrieving revision 1.58 diff -C2 -d -r1.57 -r1.58 *** lpdatabase.cpp 6 Mar 2005 22:05:28 -0000 1.57 --- lpdatabase.cpp 30 Mar 2005 13:40:48 -0000 1.58 *************** *** 43,47 **** if (getSize() < getSettings()->getSetting(SettingLastSize)) { logWarning("LPDatabase::size has reduced! " + _filename); - logError("The database is missing songs! You may want to check/restore the file " + _filename + "."); } } --- 43,46 ---- Index: lpwindowmain.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpwindowmain.cpp,v retrieving revision 1.108 retrieving revision 1.109 diff -C2 -d -r1.108 -r1.109 *** lpwindowmain.cpp 6 Mar 2005 22:05:28 -0000 1.108 --- lpwindowmain.cpp 30 Mar 2005 13:40:48 -0000 1.109 *************** *** 193,197 **** toolbar = _mainBar; tbutton = new QToolButton(QPixmap(imgPrefix + "playnow.png"),"Play random songs.",0,this, SLOT(queue()),toolbar); tbutton->setAutoRaise(true); ! tbutton = new QToolButton(QPixmap(imgPrefix + "queue.png"),"Queue 5 songs.",0,this, SLOT(enqueue()),toolbar); tbutton->setAutoRaise(true); tbutton = new QToolButton(QPixmap(imgPrefix + "rateup32.png"),"Rate up current song.",0,this, SLOT(incRatingCurrentSong()),toolbar); tbutton->setAutoRaise(true); tbutton = new QToolButton(QPixmap(imgPrefix + "ratedown32.png"),"Rate down current song.",0,this, SLOT(decRatingCurrentSong()),toolbar); tbutton->setAutoRaise(true); --- 193,198 ---- toolbar = _mainBar; tbutton = new QToolButton(QPixmap(imgPrefix + "playnow.png"),"Play random songs.",0,this, SLOT(queue()),toolbar); tbutton->setAutoRaise(true); ! tbutton = new QToolButton(QPixmap(imgPrefix + "add5.png"),"Queue 5 songs.",0,this, SLOT(enqueue()),toolbar); tbutton->setAutoRaise(true); ! tbutton = new QToolButton(QPixmap(imgPrefix + "refresh.png"),"Refresh queue.",0,this, SLOT(requeue()),toolbar); tbutton->setAutoRaise(true); tbutton = new QToolButton(QPixmap(imgPrefix + "rateup32.png"),"Rate up current song.",0,this, SLOT(incRatingCurrentSong()),toolbar); tbutton->setAutoRaise(true); tbutton = new QToolButton(QPixmap(imgPrefix + "ratedown32.png"),"Rate down current song.",0,this, SLOT(decRatingCurrentSong()),toolbar); tbutton->setAutoRaise(true); Index: stringcache.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/stringcache.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** stringcache.cpp 6 Mar 2005 23:30:44 -0000 1.3 --- stringcache.cpp 30 Mar 2005 13:40:49 -0000 1.4 *************** *** 21,25 **** dbenv = new DbEnv(DB_CXX_NO_EXCEPTIONS); if ((ret=dbenv->open( dirname.c_str(), ! DB_CREATE | DB_INIT_LOG | DB_INIT_MPOOL,0))) { dbenv->err(ret,""); exit(0); --- 21,25 ---- dbenv = new DbEnv(DB_CXX_NO_EXCEPTIONS); if ((ret=dbenv->open( dirname.c_str(), ! DB_CREATE | DB_INIT_LOG | DB_INIT_TXN | DB_INIT_MPOOL | DB_RECOVER,0))) { dbenv->err(ret,""); exit(0); |
|
From: <pa...@us...> - 2005-03-30 13:40:57
|
Update of /cvsroot/lplayer/lplayer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19952 Modified Files: ChangeLog README TODO Log Message: getting ready for 1.0 Index: ChangeLog =================================================================== RCS file: /cvsroot/lplayer/lplayer/ChangeLog,v retrieving revision 1.53 retrieving revision 1.54 diff -C2 -d -r1.53 -r1.54 *** ChangeLog 25 Feb 2005 16:03:49 -0000 1.53 --- ChangeLog 30 Mar 2005 13:40:47 -0000 1.54 *************** *** 15,23 **** 1.0 features ! - added song menu ! - added fast BerkeleyDB database system - added File ID cache (speeding up queueing process) ! - added Queue 5 and Requeue options ! - Show Song file in Explorer (Windows) - can queue from multiple playlists - improved queuing logic --- 15,22 ---- 1.0 features ! - added song menu and some new song actions ! - added fast and reliable BerkeleyDB database system - added File ID cache (speeding up queueing process) ! - added Queue 5 and Requeue actions - can queue from multiple playlists - improved queuing logic *************** *** 27,41 **** - better handling of small playlists - added smooth color function in search form ! - added "Mark as heard" e.g. for iPods bugfixes - fixed bug causing lplayer to favour certain songs after long period of operation ! - context menu in search form now operates on all selected songs ! - fixed bug causing lockups when stresstesting some gui controls ! - proper sorting of "heard ago" column ! - doesn't keep queueing when in other playlists (Mac only) other ! - only logs when in debug mode 1.0 beta --- 26,38 ---- - better handling of small playlists - added smooth color function in search form ! - added "Mark as heard" e.g. to use before exporting music to iPods etc.. bugfixes + - GUI bugs (proper sorting, multi-select in search form, lockups on stresstest..) - fixed bug causing lplayer to favour certain songs after long period of operation ! - fixed bug causing lplayer to keep queueing when playing in another playlist (Mac only) other ! - now only logs when in debug mode 1.0 beta Index: README =================================================================== RCS file: /cvsroot/lplayer/lplayer/README,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** README 31 Jan 2005 12:46:54 -0000 1.12 --- README 30 Mar 2005 13:40:47 -0000 1.13 *************** *** 6,10 **** version 1.0 ! 2005-02-01 contents: --- 6,10 ---- version 1.0 ! 2005-03-30 contents: Index: TODO =================================================================== RCS file: /cvsroot/lplayer/lplayer/TODO,v retrieving revision 1.57 retrieving revision 1.58 diff -C2 -d -r1.57 -r1.58 *** TODO 6 Mar 2005 22:05:27 -0000 1.57 --- TODO 30 Mar 2005 13:40:47 -0000 1.58 *************** *** 2,8 **** 1.0 - - make artwork for "Refill" button 1.x - specify trim not for total but for # previous songs - preference to filter out bad songs (min rating) when queuing e.g. a dir or when auto-queueing e.g. an m3u (needs to change in queueing algo to ignore those entries) --- 2,8 ---- 1.0 1.x + - ability to cancel queueing - specify trim not for total but for # previous songs - preference to filter out bad songs (min rating) when queuing e.g. a dir or when auto-queueing e.g. an m3u (needs to change in queueing algo to ignore those entries) |
|
From: <pa...@us...> - 2005-03-17 15:19:13
|
Update of /cvsroot/lplayer/lplayer/src/images In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8593 Added Files: add5.png refresh.png Log Message: init --- NEW FILE: add5.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: refresh.png --- (This appears to be a binary file; contents omitted.) |
|
From: <pa...@us...> - 2005-03-14 20:20:27
|
Update of /cvsroot/lplayer/lplayer/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32227/src Modified Files: lpberkeleydbreader.cpp Log Message: misc Index: lpberkeleydbreader.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpberkeleydbreader.cpp,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** lpberkeleydbreader.cpp 6 Feb 2005 22:31:26 -0000 1.8 --- lpberkeleydbreader.cpp 14 Mar 2005 20:20:17 -0000 1.9 *************** *** 21,25 **** dbenv = new DbEnv(DB_CXX_NO_EXCEPTIONS); if ((ret=dbenv->open( string(LPSettings::getLPHomeDir()).c_str(), ! DB_CREATE | DB_INIT_LOG | DB_INIT_MPOOL,0))) { dbenv->err(ret,""); exit(0); --- 21,25 ---- dbenv = new DbEnv(DB_CXX_NO_EXCEPTIONS); if ((ret=dbenv->open( string(LPSettings::getLPHomeDir()).c_str(), ! DB_CREATE | DB_INIT_LOG | DB_INIT_TXN | DB_INIT_MPOOL | DB_RECOVER,0))) { dbenv->err(ret,""); exit(0); |
|
From: <pa...@us...> - 2005-03-06 23:30:55
|
Update of /cvsroot/lplayer/lplayer/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26473/src Modified Files: LPlayer.dsp songwidgets.cpp stringcache.cpp Log Message: windows compile Index: LPlayer.dsp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/LPlayer.dsp,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** LPlayer.dsp 8 Feb 2005 14:26:03 -0000 1.20 --- LPlayer.dsp 6 Mar 2005 23:30:33 -0000 1.21 *************** *** 44,48 **** # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GX /O2 /I "$(QTDIR)\include" /I "P:\Programming\Wasabi SDK\studio" /I "_$(QTDIR)\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "QT_DLL" /D "QT_THREAD_SUPPORT" /D "WINAMP2" /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 --- 44,48 ---- # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c ! # ADD CPP /nologo /MD /W3 /GR /GX /O2 /I "$(QTDIR)\include" /I "P:\Programming\Wasabi SDK\studio" /I "_$(QTDIR)\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "QT_DLL" /D "QT_THREAD_SUPPORT" /D "WINAMP2" /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 Index: songwidgets.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/songwidgets.cpp,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** songwidgets.cpp 6 Mar 2005 22:05:30 -0000 1.16 --- songwidgets.cpp 6 Mar 2005 23:30:44 -0000 1.17 *************** *** 434,437 **** --- 434,438 ---- itemID = insertItem( "&Mark as heard", this, SLOT(ListSongMarkHeard())); + setItemEnabled(itemID, valid); itemID = insertItem( "&Reset date", this, SLOT(ListSongReset())); setItemEnabled(itemID, valid); Index: stringcache.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/stringcache.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** stringcache.cpp 9 Feb 2005 14:43:27 -0000 1.2 --- stringcache.cpp 6 Mar 2005 23:30:44 -0000 1.3 *************** *** 6,9 **** --- 6,11 ---- #include "stringcache.h" + #include "lpglobal.h" + #include "absutil.h" #define MAX_KEY_LENGTH 1024 *************** *** 83,87 **** void StringCache::removeAll() { ! uint nr; db->truncate(0,&nr,0); logDebug(string("StringCache::removed ") + absUtil::its(nr) + " entries."); --- 85,89 ---- void StringCache::removeAll() { ! unsigned int nr; db->truncate(0,&nr,0); logDebug(string("StringCache::removed ") + absUtil::its(nr) + " entries."); |
|
From: <pa...@us...> - 2005-03-06 22:06:10
|
Update of /cvsroot/lplayer/lplayer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1850 Modified Files: TODO Log Message: added progress/cancel functionality Index: TODO =================================================================== RCS file: /cvsroot/lplayer/lplayer/TODO,v retrieving revision 1.56 retrieving revision 1.57 diff -C2 -d -r1.56 -r1.57 *** TODO 28 Feb 2005 23:31:37 -0000 1.56 --- TODO 6 Mar 2005 22:05:27 -0000 1.57 *************** *** 2,8 **** 1.0 - - add progress to long tasks (advanced menu + multiselect actions) - - implement Cancel for all progress - - fix: about appears under main window - make artwork for "Refill" button --- 2,5 ---- |
|
From: <pa...@us...> - 2005-03-06 22:05:49
|
Update of /cvsroot/lplayer/lplayer/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1850/src Modified Files: abslog.h logqt.cpp logqt.h lpapp.cpp lpdatabase.cpp lpformabout.cpp lpglobal.cpp lpsongfilter.cpp lpwindowmain.cpp queuebuilder.cpp songwidgets.cpp Log Message: added progress/cancel functionality Index: abslog.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/abslog.h,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** abslog.h 3 Jan 2005 10:42:52 -0000 1.10 --- abslog.h 6 Mar 2005 22:05:27 -0000 1.11 *************** *** 24,28 **** * pre: progressInit(text, steps) where steps >= step */ ! virtual bool progressSet(int step)=0; /* initiate GUI progress indication --- 24,29 ---- * pre: progressInit(text, steps) where steps >= step */ ! virtual void progressSet(int step)=0; ! virtual bool progressCanceled()=0; /* initiate GUI progress indication Index: logqt.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/logqt.cpp,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** logqt.cpp 22 Feb 2005 14:04:11 -0000 1.28 --- logqt.cpp 6 Mar 2005 22:05:28 -0000 1.29 *************** *** 104,112 **** } ! bool LogQt::progressSet(int i) { if (_widget && i && _progress) { _progress->setProgress(i); qApp->processEvents(); } return false; } --- 104,116 ---- } ! void LogQt::progressSet(int i) { if (_widget && i && _progress) { _progress->setProgress(i); qApp->processEvents(); } + } + + bool LogQt::progressCanceled() { + if (_progress) return (_progress->wasCanceled()); return false; } Index: logqt.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/logqt.h,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** logqt.h 3 Jan 2005 10:42:52 -0000 1.12 --- logqt.h 6 Mar 2005 22:05:28 -0000 1.13 *************** *** 24,30 **** public: /** progress methods must be called in UI thread */ ! virtual bool progressSet(int); virtual void progressInit(string text, int steps); virtual void progressEnd(); /** constructs a logger... --- 24,31 ---- public: /** progress methods must be called in UI thread */ ! virtual void progressSet(int); virtual void progressInit(string text, int steps); virtual void progressEnd(); + virtual bool progressCanceled(); /** constructs a logger... Index: lpapp.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpapp.cpp,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** lpapp.cpp 13 Feb 2005 22:30:06 -0000 1.22 --- lpapp.cpp 6 Mar 2005 22:05:28 -0000 1.23 *************** *** 290,295 **** vector<string>* files = p->filenames(); doInitProgress(string("Processing ") + absUtil::its(files->size()) + " songs...",files->size()); ! for (uint i=0;i<files->size();i++) { ! doSetProgress(i); Song s = SongRetrieveFromFilename((*files)[i]); s.setRating(rating); --- 290,296 ---- vector<string>* files = p->filenames(); doInitProgress(string("Processing ") + absUtil::its(files->size()) + " songs...",files->size()); ! int stop = false; ! for (uint i=0;(i<files->size()) && !stop;i++) { ! stop = doSetProgress(i); Song s = SongRetrieveFromFilename((*files)[i]); s.setRating(rating); *************** *** 308,313 **** vector<string>* files = p->filenames(); doInitProgress(string("Processing ") + absUtil::its(files->size()) + " songs...",files->size()); ! for (uint i=0;i<files->size();i++) { ! doSetProgress(i); Song s = SongRetrieveFromFilename((*files)[i]); s.setColor(x,y,z); --- 309,315 ---- vector<string>* files = p->filenames(); doInitProgress(string("Processing ") + absUtil::its(files->size()) + " songs...",files->size()); ! bool stop = false; ! for (uint i=0;!stop && (i<files->size());i++) { ! stop = doSetProgress(i); Song s = SongRetrieveFromFilename((*files)[i]); s.setColor(x,y,z); Index: lpdatabase.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpdatabase.cpp,v retrieving revision 1.56 retrieving revision 1.57 diff -C2 -d -r1.56 -r1.57 *** lpdatabase.cpp 6 Feb 2005 22:32:37 -0000 1.56 --- lpdatabase.cpp 6 Mar 2005 22:05:28 -0000 1.57 *************** *** 148,153 **** it->reset(); doInitProgress("Exporting songs",getReader()->getSize()); ! while(!it->atEnd() ) { ! doSetProgress(i++); Song s = it->next(); writer->writeSong(&s); --- 148,154 ---- it->reset(); doInitProgress("Exporting songs",getReader()->getSize()); ! bool stop = false; ! while(!it->atEnd() && !stop) { ! stop = doSetProgress(i++); Song s = it->next(); writer->writeSong(&s); *************** *** 232,239 **** plist->startBuilding(); vector<string> *list = plist->filenames(); ! for (uint i=0;i< list->size();i++) { itersong = retrieveAndCorrect((*list)[i],""); (dbtable)[itersong.getKey()] = 1; } //now delete all entries that are not marked --- 233,245 ---- plist->startBuilding(); vector<string> *list = plist->filenames(); ! doInitProgress("Removing all song entries that are not in the playlists...",list->size()); ! bool stop = false; ! for (uint i=0;!stop && (i< list->size());i++) { ! stop = doSetProgress(i); itersong = retrieveAndCorrect((*list)[i],""); (dbtable)[itersong.getKey()] = 1; } + doEndProgress(); + if (stop) return; //now delete all entries that are not marked Index: lpformabout.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpformabout.cpp,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** lpformabout.cpp 22 Feb 2005 14:04:11 -0000 1.36 --- lpformabout.cpp 6 Mar 2005 22:05:28 -0000 1.37 *************** *** 22,26 **** TextLabel1->setText( QString( ! QString("LongPlayer ") + VERSION + " (2005-02-01)\n" + QString("Copyright (c) 2001-2005 by Andrew Wils\n\n") + QString("This program is free software:\nSee the accompanying license file for details.\n\n\n") + --- 22,26 ---- TextLabel1->setText( QString( ! QString("LongPlayer ") + VERSION + " (2005-03-06)\n" + QString("Copyright (c) 2001-2005 by Andrew Wils\n\n") + QString("This program is free software:\nSee the accompanying license file for details.\n\n\n") + Index: lpglobal.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpglobal.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** lpglobal.cpp 17 Sep 2003 19:20:18 -0000 1.7 --- lpglobal.cpp 6 Mar 2005 22:05:28 -0000 1.8 *************** *** 24,30 **** bool doSetProgress(int i) { ! if (globalclass::getLogger()) ! return globalclass::getLogger()->progressSet(i); ! else return 0; } --- 24,30 ---- bool doSetProgress(int i) { ! if (!globalclass::getLogger()) return 0; ! globalclass::getLogger()->progressSet(i); ! return globalclass::getLogger()->progressCanceled(); } Index: lpsongfilter.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpsongfilter.cpp,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** lpsongfilter.cpp 25 Feb 2005 16:03:49 -0000 1.39 --- lpsongfilter.cpp 6 Mar 2005 22:05:28 -0000 1.40 *************** *** 164,169 **** } else { ! //interval min<>0 to -(DELTA-1)-0 ! if (diff < min) diff = (int)min; result = (float)(diff) * (-0.9*DELTA)/min; } --- 164,169 ---- } else { ! //disrecommend if below minimum; else interval min<>0 to -(DELTA-1)-0 ! if (diff < min) level = DISREC; result = (float)(diff) * (-0.9*DELTA)/min; } Index: lpwindowmain.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpwindowmain.cpp,v retrieving revision 1.107 retrieving revision 1.108 diff -C2 -d -r1.107 -r1.108 *** lpwindowmain.cpp 28 Feb 2005 23:31:38 -0000 1.107 --- lpwindowmain.cpp 6 Mar 2005 22:05:28 -0000 1.108 *************** *** 780,792 **** void LPWindowMain::cleanDatabase() { vector<string> playlists = getApp()->getPlaylists(); - doInitProgress("Cleaning database...\nThis will remove database entries for songs not present in the playlists.",0); CompositePlaylist* meta = new CompositePlaylist(); - doSetProgress(0); for (uint i=0;i<playlists.size();i++) { meta->addPlaylist(getApp()->getPlaylist(playlists[i])); } getApp()->getLPlayer()->getDatabase()->cleanDatabase(meta); - doEndProgress(); } --- 780,792 ---- void LPWindowMain::cleanDatabase() { + QMessageBox::information( this, "Clean Database", + "This will remove all song entries from the database that are not present in the playlists.\nFirst you can specify where to backup the database."); + exportXML(); vector<string> playlists = getApp()->getPlaylists(); CompositePlaylist* meta = new CompositePlaylist(); for (uint i=0;i<playlists.size();i++) { meta->addPlaylist(getApp()->getPlaylist(playlists[i])); } getApp()->getLPlayer()->getDatabase()->cleanDatabase(meta); } *************** *** 798,809 **** vector<string> playlists = getApp()->getPlaylists(); - doInitProgress("Building playlists...\nPrecalculating the Song ID's will greatly speed up the queueing process.",0); CompositePlaylist* meta = new CompositePlaylist(); ! for (uint i=0;i<playlists.size();i++) { ! doSetProgress(0); meta->addPlaylist(getApp()->getPlaylist(playlists[i])); meta->startBuilding(); } - doEndProgress(); if (!meta->getBuilt()) { return;} --- 798,806 ---- vector<string> playlists = getApp()->getPlaylists(); CompositePlaylist* meta = new CompositePlaylist(); ! for (uint i=0; (i<playlists.size());i++) { meta->addPlaylist(getApp()->getPlaylist(playlists[i])); meta->startBuilding(); } if (!meta->getBuilt()) { return;} *************** *** 811,817 **** vector<string>* files = meta->filenames(); doInitProgress("Calculating Song ID's...\nPrecalculating the Song ID's will greatly speed up the queueing process.",files->size()); ! for (uint j=0;j<files->size();j++) { if (getApp()->quitting()) return; ! doSetProgress(j); getApp()->SongRetrieveFromFilename((*files)[j]); } --- 808,815 ---- vector<string>* files = meta->filenames(); doInitProgress("Calculating Song ID's...\nPrecalculating the Song ID's will greatly speed up the queueing process.",files->size()); ! bool stop = false; ! for (uint j=0;(j<files->size()) && !stop;j++) { if (getApp()->quitting()) return; ! stop = doSetProgress(j); getApp()->SongRetrieveFromFilename((*files)[j]); } Index: queuebuilder.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/queuebuilder.cpp,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** queuebuilder.cpp 25 Feb 2005 17:11:29 -0000 1.35 --- queuebuilder.cpp 6 Mar 2005 22:05:30 -0000 1.36 *************** *** 62,66 **** float avgInterval = getSettings()->getSetting(SettingAverageInterval); ! // float avgRating = getSettings()->getSetting(SettingAverageRating); float intervalWeight = _settings->getSetting(SettingIntervalWeight); float ratingWeight = getSettings()->getSetting(SettingRatingWeight); --- 62,66 ---- float avgInterval = getSettings()->getSetting(SettingAverageInterval); ! float weighedInterval = getSettings()->getSetting(SettingWeighedInterval); float intervalWeight = _settings->getSetting(SettingIntervalWeight); float ratingWeight = getSettings()->getSetting(SettingRatingWeight); *************** *** 108,117 **** //weighedinterval = currInterval if rating = neutral or ratingweight = minimum //else value that is max 4 times higher ! float weighedinterval = currInterval + (currInterval * expsong.getRating() * (ratingWeight-1)/3 ); getSettings()->setSetting( SettingWeighedInterval, ! (avgInterval * (1 - intervalWeight)) + (intervalWeight * weighedinterval) ); - // getSettings()->setSetting(SettingAverageRating, (avgRating * (1 - intervalWeight)) + (intervalWeight * expsong.getRating())); } } --- 108,116 ---- //weighedinterval = currInterval if rating = neutral or ratingweight = minimum //else value that is max 4 times higher ! float newweighedinterval = currInterval + (currInterval * expsong.getRating() * (ratingWeight-1)/3 ); getSettings()->setSetting( SettingWeighedInterval, ! (weighedInterval * (1 - intervalWeight)) + (intervalWeight * newweighedinterval) ); } } *************** *** 168,172 **** //seconds-ago filter2 = filter; ! filter1 = new LPSecondsAgoFilter(LPSongFilter::MORE, avgInterval, false); filter = new LPAddFilter(filter1, 10 - ratingWeight,filter2,ratingWeight); --- 167,171 ---- //seconds-ago filter2 = filter; ! filter1 = new LPSecondsAgoFilter(LPSongFilter::MORE, (int)avgInterval, false); filter = new LPAddFilter(filter1, 10 - ratingWeight,filter2,ratingWeight); Index: songwidgets.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/songwidgets.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** songwidgets.cpp 22 Feb 2005 15:44:48 -0000 1.15 --- songwidgets.cpp 6 Mar 2005 22:05:30 -0000 1.16 *************** *** 26,30 **** void SongContextMenu::ListSongRate(int menupos) { ! for (uint i=0;i<getSongs()->size();i++) { QString text = _ratesong->text(menupos); if (text[1] == '0') (*getSongs())[i].setRating(5); --- 26,33 ---- void SongContextMenu::ListSongRate(int menupos) { ! doInitProgress("Setting Ratings",getSongs()->size()); ! bool stop = false; ! for (uint i=0;!stop & (i<getSongs()->size());i++) { ! stop = doSetProgress(i); QString text = _ratesong->text(menupos); if (text[1] == '0') (*getSongs())[i].setRating(5); *************** *** 34,37 **** --- 37,41 ---- getApp()->SongStore((*getSongs())[i]); } + doEndProgress(); } *************** *** 70,102 **** void SongContextMenu::ListSongIncRating() { ! for (uint i=0;i<getSongs()->size();i++) { (*getSongs())[i].setRating((*getSongs())[i].getRating()+1); PlayedSongItem::makeSongListViewItem(0,(*getSongs())[i],getItems()[i]); getApp()->SongStore((*getSongs())[i]); } } void SongContextMenu::ListSongDecRating() { ! for (uint i=0;i<getSongs()->size();i++) { (*getSongs())[i].setRating((*getSongs())[i].getRating()-1); PlayedSongItem::makeSongListViewItem(0,(*getSongs())[i],getItems()[i]); getApp()->SongStore((*getSongs())[i]); } } void SongContextMenu::ListSongMarkHeard() { ! for (uint i=0;i<getSongs()->size();i++) { (*getSongs())[i].listen(); PlayedSongItem::makeSongListViewItem(0,(*getSongs())[i],getItems()[i]); getApp()->SongStore((*getSongs())[i]); } } void SongContextMenu::ListSongReset() { ! for (uint i=0;i<getSongs()->size();i++) { (*getSongs())[i].resetListen(); PlayedSongItem::makeSongListViewItem(0,(*getSongs())[i],getItems()[i]); getApp()->SongStore((*getSongs())[i]); } } --- 74,122 ---- void SongContextMenu::ListSongIncRating() { ! doInitProgress("Setting Ratings",getSongs()->size()); ! bool stop = false; ! for (uint i=0;!stop & (i<getSongs()->size());i++) { ! stop = doSetProgress(i); (*getSongs())[i].setRating((*getSongs())[i].getRating()+1); PlayedSongItem::makeSongListViewItem(0,(*getSongs())[i],getItems()[i]); getApp()->SongStore((*getSongs())[i]); } + doEndProgress(); } void SongContextMenu::ListSongDecRating() { ! doInitProgress("Setting Ratings",getSongs()->size()); ! bool stop = false; ! for (uint i=0;!stop & (i<getSongs()->size());i++) { ! stop = doSetProgress(i); (*getSongs())[i].setRating((*getSongs())[i].getRating()-1); PlayedSongItem::makeSongListViewItem(0,(*getSongs())[i],getItems()[i]); getApp()->SongStore((*getSongs())[i]); } + doEndProgress(); } void SongContextMenu::ListSongMarkHeard() { ! doInitProgress("Marking",getSongs()->size()); ! bool stop = false; ! for (uint i=0;!stop & (i<getSongs()->size());i++) { ! stop = doSetProgress(i); (*getSongs())[i].listen(); PlayedSongItem::makeSongListViewItem(0,(*getSongs())[i],getItems()[i]); getApp()->SongStore((*getSongs())[i]); } + doEndProgress(); } void SongContextMenu::ListSongReset() { ! doInitProgress("Resetting",getSongs()->size()); ! bool stop = false; ! for (uint i=0;!stop & (i<getSongs()->size());i++) { ! stop = doSetProgress(i); (*getSongs())[i].resetListen(); PlayedSongItem::makeSongListViewItem(0,(*getSongs())[i],getItems()[i]); getApp()->SongStore((*getSongs())[i]); } + doEndProgress(); } *************** *** 267,273 **** mb.setButtonText( QMessageBox::No, "Cancel"); uint i=0; switch( mb.exec() ) { case QMessageBox::Yes: ! for (i=0;i<getSongs()->size();i++) { if (absUtil::getUtil()->removeFile((*getSongs())[i].getFilename()),true) { getItems()[i]->setText(2,"removed"); --- 287,296 ---- mb.setButtonText( QMessageBox::No, "Cancel"); uint i=0; + bool stop = false; switch( mb.exec() ) { case QMessageBox::Yes: ! doInitProgress("Removing",getSongs()->size()); ! for (i=0;!stop & (i<getSongs()->size());i++) { ! stop = doSetProgress(i); if (absUtil::getUtil()->removeFile((*getSongs())[i].getFilename()),true) { getItems()[i]->setText(2,"removed"); *************** *** 281,284 **** --- 304,308 ---- } } + doEndProgress(); break; case QMessageBox::No: |
|
From: <pa...@us...> - 2005-02-28 23:32:21
|
Update of /cvsroot/lplayer/lplayer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22765 Modified Files: TODO Log Message: itunes bugfix/implementation and addition of advanced menu Index: TODO =================================================================== RCS file: /cvsroot/lplayer/lplayer/TODO,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -d -r1.55 -r1.56 *** TODO 25 Feb 2005 17:11:29 -0000 1.55 --- TODO 28 Feb 2005 23:31:37 -0000 1.56 *************** *** 1,13 **** ! BUGS ! - add progress to long tasks -> put in commands + implement Cancel for all progress ! - "never" heard for m3u ! - test small playlist ! - remove Command a shortcut ! - about appears under main window ! 1.x - make artwork for "Refill" button - option to "wrap" colors around - - "listen to" to (iPod) playlist - cache filelist persistently? + entry detect new files - add option for filelist rebuilds? --- 1,17 ---- ! BUGS/TODO ! 1.0 ! - add progress to long tasks (advanced menu + multiselect actions) ! - implement Cancel for all progress ! - fix: about appears under main window - make artwork for "Refill" button + + 1.x + - specify trim not for total but for # previous songs + - preference to filter out bad songs (min rating) when queuing e.g. a dir or when auto-queueing e.g. an m3u (needs to change in queueing algo to ignore those entries) + - add progress to multiselect actions + - put longer tasks in Commands? + - "never" heard for m3u - option to "wrap" colors around - cache filelist persistently? + entry detect new files - add option for filelist rebuilds? *************** *** 16,20 **** - "party" function. -> only play known songs and treat songs heard before party start as never played. - very simple: open database (to sort on history etc..) + remove from database entry in song menu)? - - Growl support with color (Mac) - popup genrewidget from color square for extended list --- 20,23 ---- |
|
From: <pa...@us...> - 2005-02-28 23:31:56
|
Update of /cvsroot/lplayer/lplayer/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22765/src Modified Files: cocoascript.mm itunes.h itunes.mm lpwindowmain.cpp Log Message: itunes bugfix/implementation and addition of advanced menu Index: cocoascript.mm =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/cocoascript.mm,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** cocoascript.mm 26 Jan 2005 00:39:16 -0000 1.11 --- cocoascript.mm 28 Feb 2005 23:31:38 -0000 1.12 *************** *** 101,105 **** NSString *temp; //one-based ! for (uint i=1;i<= [result numberOfItems];i++) { curDescriptor = [result descriptorAtIndex:i]; temp = [curDescriptor stringValue]; --- 101,105 ---- NSString *temp; //one-based ! for (int i=1;i<= [result numberOfItems];i++) { curDescriptor = [result descriptorAtIndex:i]; temp = [curDescriptor stringValue]; *************** *** 136,140 **** string filename=""; string title=""; ! int length=0; int playlistposition=0, playlistlength=0; curDescriptor = [theDescriptor descriptorAtIndex:1]; --- 136,140 ---- string filename=""; string title=""; ! int length=0; int playlistposition=0, playlistlength=0, songposition=0; curDescriptor = [theDescriptor descriptorAtIndex:1]; *************** *** 183,188 **** playlistlength = [curDescriptor int32Value]; } ! itunes->setVars(![playerState isEqualToString:@"paused"], playlistposition, playlistlength); if (previousSong != newTrackID) { itunes->setSong(filename, length, title);//also notifies --- 183,191 ---- playlistlength = [curDescriptor int32Value]; } + if ( (curDescriptor = [theDescriptor descriptorAtIndex:11]) ) { + songposition = [curDescriptor int32Value]; + } ! itunes->setVars(![playerState isEqualToString:@"paused"], playlistposition, playlistlength, songposition); if (previousSong != newTrackID) { itunes->setSong(filename, length, title);//also notifies Index: itunes.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/itunes.h,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** itunes.h 3 Jan 2005 10:42:52 -0000 1.9 --- itunes.h 28 Feb 2005 23:31:38 -0000 1.10 *************** *** 44,48 **** //should be private void setSong(string filename, int length, string title);//notifies ! void setVars(bool playing, int playlistposition, int playlistlength); private: CocoaScript* script() const; --- 44,48 ---- //should be private void setSong(string filename, int length, string title);//notifies ! void setVars(bool playing, int playlistposition, int playlistlength, int songpos); private: CocoaScript* script() const; *************** *** 56,59 **** --- 56,60 ---- int _playlistlength; int _length; + int _songposition; }; Index: itunes.mm =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/itunes.mm,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** itunes.mm 22 Feb 2005 15:25:09 -0000 1.7 --- itunes.mm 28 Feb 2005 23:31:38 -0000 1.8 *************** *** 19,22 **** --- 19,23 ---- _playlistposition = 0; _playlistlength = 0; + _songposition = 0; //for now we only use an object for getsong *************** *** 68,73 **** } ! void ITunes::setVars(bool playing,int playlistposition, int playlistlength) { ! _playing = playing; _playlistposition = playlistposition; _playlistlength = playlistlength; } --- 69,74 ---- } ! void ITunes::setVars(bool playing,int playlistposition, int playlistlength, int songposition) { ! _playing = playing; _playlistposition = playlistposition; _playlistlength = playlistlength; _songposition = songposition; } *************** *** 101,105 **** } ! int ITunes::getSongPosition() const { return 1; } int ITunes::getSongLength() const { return _length; } string ITunes::getSongName() const { return _title; } --- 102,106 ---- } ! int ITunes::getSongPosition() const { return _songposition; } int ITunes::getSongLength() const { return _length; } string ITunes::getSongName() const { return _title; } Index: lpwindowmain.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/lpwindowmain.cpp,v retrieving revision 1.106 retrieving revision 1.107 diff -C2 -d -r1.106 -r1.107 *** lpwindowmain.cpp 22 Feb 2005 15:44:45 -0000 1.106 --- lpwindowmain.cpp 28 Feb 2005 23:31:38 -0000 1.107 *************** *** 195,199 **** tbutton = new QToolButton(QPixmap(imgPrefix + "queue.png"),"Queue 5 songs.",0,this, SLOT(enqueue()),toolbar); tbutton->setAutoRaise(true); tbutton = new QToolButton(QPixmap(imgPrefix + "rateup32.png"),"Rate up current song.",0,this, SLOT(incRatingCurrentSong()),toolbar); tbutton->setAutoRaise(true); ! tbutton = new QToolButton(QPixmap(imgPrefix + "ratedown32.png"),"Rate down current song",0,this, SLOT(decRatingCurrentSong()),toolbar); tbutton->setAutoRaise(true); #ifndef Q_WS_WIN _minimalButton = new QToolButton(QPixmap(imgPrefix + "minimal.png"),"Toggle minimal view.",0,this, SLOT(toggleMinimal()),toolbar); _minimalButton->setAutoRaise(true); --- 195,199 ---- tbutton = new QToolButton(QPixmap(imgPrefix + "queue.png"),"Queue 5 songs.",0,this, SLOT(enqueue()),toolbar); tbutton->setAutoRaise(true); tbutton = new QToolButton(QPixmap(imgPrefix + "rateup32.png"),"Rate up current song.",0,this, SLOT(incRatingCurrentSong()),toolbar); tbutton->setAutoRaise(true); ! tbutton = new QToolButton(QPixmap(imgPrefix + "ratedown32.png"),"Rate down current song.",0,this, SLOT(decRatingCurrentSong()),toolbar); tbutton->setAutoRaise(true); #ifndef Q_WS_WIN _minimalButton = new QToolButton(QPixmap(imgPrefix + "minimal.png"),"Toggle minimal view.",0,this, SLOT(toggleMinimal()),toolbar); _minimalButton->setAutoRaise(true); *************** *** 229,236 **** pmenu->insertItem( "&Export database as XML...", this, SLOT(exportXML())); pmenu->insertSeparator(); - pmenu->insertItem( "Precalculate Song ID's", this, SLOT(calculateFileIDs())); - pmenu->insertItem( "Purge Song ID cache", this, SLOT(purgeFileIDs())); - pmenu->insertItem( "Clean database", this, SLOT(cleanDatabase())); - pmenu->insertSeparator(); pmenu->insertItem( "Preferences...", this, SLOT(prefs()),Key_P+CTRL); pmenu->insertSeparator(); --- 229,232 ---- *************** *** 242,246 **** pmenu->insertItem( "&Play random songs ", this, SLOT(queue()),Key_R+CTRL); pmenu->insertItem( "&Queue 5 songs", this, SLOT(enqueue()),Key_5+CTRL); ! pmenu->insertItem( "&Refill queue", this, SLOT(requeue()),Key_A+CTRL); pmenu->insertItem( "&Find songs...", this, SLOT(search()),Key_F+CTRL); pmenu->insertItem( "Manage Play&lists...", this, SLOT(playlists()),Key_L+CTRL); --- 238,242 ---- pmenu->insertItem( "&Play random songs ", this, SLOT(queue()),Key_R+CTRL); pmenu->insertItem( "&Queue 5 songs", this, SLOT(enqueue()),Key_5+CTRL); ! pmenu->insertItem( "&Refill queue", this, SLOT(requeue()),Key_R+SHIFT+CTRL); pmenu->insertItem( "&Find songs...", this, SLOT(search()),Key_F+CTRL); pmenu->insertItem( "Manage Play&lists...", this, SLOT(playlists()),Key_L+CTRL); *************** *** 250,253 **** --- 246,256 ---- menu->insertItem( "&Song", _songMenu); + pmenu = new QPopupMenu( this ); + CHECK_PTR( pmenu); + pmenu->insertItem( "Precalculate Song ID's", this, SLOT(calculateFileIDs())); + pmenu->insertItem( "Purge Song ID cache", this, SLOT(purgeFileIDs())); + pmenu->insertItem( "Clean database", this, SLOT(cleanDatabase())); + menu->insertItem( "&Advanced", pmenu); + //this one needs to be modified afterwards viewMenu = new QPopupMenu( this ); |
|
From: <pa...@us...> - 2005-02-28 23:31:56
|
Update of /cvsroot/lplayer/lplayer/src/mac/scripts In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22765/src/mac/scripts Modified Files: itunesinfo.scpt Log Message: itunes bugfix/implementation and addition of advanced menu Index: itunesinfo.scpt =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/mac/scripts/itunesinfo.scpt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 Binary files /tmp/cvsWfcIM0 and /tmp/cvs3WyjHD differ |
|
From: <pa...@us...> - 2005-02-25 17:11:47
|
Update of /cvsroot/lplayer/lplayer/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5026/src Modified Files: queuebuilder.cpp queuebuilder.h tester.cpp Log Message: removed getQueued buildFilter (can crash itunes when calledfrom autoqueue) Index: queuebuilder.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/queuebuilder.cpp,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** queuebuilder.cpp 25 Feb 2005 16:03:50 -0000 1.34 --- queuebuilder.cpp 25 Feb 2005 17:11:29 -0000 1.35 *************** *** 50,54 **** logInfo(string("Searching..."), 0); ! LPSongFilter* filter = buildFilter(); LPPlaylistIterator* it = new LPPlaylistIterator(playlist,filter ,getDatabase(),true, false); --- 50,56 ---- logInfo(string("Searching..."), 0); ! string initSong = ""; ! if (blackList.size()) initSong = blackList[blackList.size()-1]; ! LPSongFilter* filter = buildFilter(initSong); LPPlaylistIterator* it = new LPPlaylistIterator(playlist,filter ,getDatabase(),true, false); *************** *** 125,129 **** /* users should delete the filter after they are done with it */ ! LPSongFilter* QueueBuilder::buildFilter() { logDebug("QueueBuilder::building songfilter..."); //build tree with strongest selection first. --- 127,131 ---- /* users should delete the filter after they are done with it */ ! LPSongFilter* QueueBuilder::buildFilter(string initsong) { logDebug("QueueBuilder::building songfilter..."); //build tree with strongest selection first. *************** *** 193,202 **** Song song; //based on last queued song... ! if (getPlayer()) { ! vector<string> queued = getPlayer()->getQueued(); ! if (queued.size()) { ! song = getDatabase()->retrieveAndCorrect(queued[queued.size()-1],"",0); ! logDebug("QueueBuilder::colortransitioning from " + song.getFilename()); ! } //...unless this conflicts with step 1 if (colorRectangleF && colorRectangleF->goodahness(song) < (-1 * LPSongFilter::NORMAL)) { --- 195,201 ---- Song song; //based on last queued song... ! if (initsong != "") { ! song = getDatabase()->retrieveAndCorrect(initsong,"",0); ! logDebug("QueueBuilder::colortransitioning from " + song.getFilename()); //...unless this conflicts with step 1 if (colorRectangleF && colorRectangleF->goodahness(song) < (-1 * LPSongFilter::NORMAL)) { Index: queuebuilder.h =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/queuebuilder.h,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** queuebuilder.h 13 Feb 2005 22:30:07 -0000 1.19 --- queuebuilder.h 25 Feb 2005 17:11:30 -0000 1.20 *************** *** 47,53 **** * returns a number of (random) songs that can be queued * pre: playlist.isBuilt() ! * inPlaylist: list of songs that may not be queued */ ! vector<string> getQueue(Playlist* playlist, int, vector<string> inPlaylist); void abort(); --- 47,54 ---- * returns a number of (random) songs that can be queued * pre: playlist.isBuilt() ! * blackList: list of songs that may not be queued ! * the last song in blackList is believed to be the last one in the mediaplayer playlist */ ! vector<string> getQueue(Playlist* playlist, int, vector<string> blackList); void abort(); *************** *** 64,68 **** void addToList(vector<string>* list, string filename); ! LPSongFilter* buildFilter(); LPDatabase* getDatabase() const; --- 65,69 ---- void addToList(vector<string>* list, string filename); ! LPSongFilter* buildFilter(string firstsong); LPDatabase* getDatabase() const; Index: tester.cpp =================================================================== RCS file: /cvsroot/lplayer/lplayer/src/tester.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** tester.cpp 25 Feb 2005 16:03:50 -0000 1.12 --- tester.cpp 25 Feb 2005 17:11:30 -0000 1.13 *************** *** 236,240 **** song.setDate(0); song.setTimes(0); ! filter = q.buildFilter(); if (!between(filter->goodahness(song), 0, HIGHACCEPT)) addError(); //9/10 rating + heard pretty close -> NOK --- 236,240 ---- song.setDate(0); song.setTimes(0); ! filter = q.buildFilter(""); if (!between(filter->goodahness(song), 0, HIGHACCEPT)) addError(); //9/10 rating + heard pretty close -> NOK *************** *** 256,260 **** song.setTimes(0); delete filter; ! filter = q.buildFilter(); if (!between(filter->goodahness(song), LOWACCEPT, 0)) addError(); //9/10 rating + heard real close -> NOK --- 256,260 ---- song.setTimes(0); delete filter; ! filter = q.buildFilter(""); if (!between(filter->goodahness(song), LOWACCEPT, 0)) addError(); //9/10 rating + heard real close -> NOK *************** *** 364,368 **** logInfo("Filtering."); QueueBuilder q(getSettings(),0,0); ! LPSongFilter* f = q.buildFilter(); t.start(); for (i=0; i < length; i++) { --- 364,368 ---- logInfo("Filtering."); QueueBuilder q(getSettings(),0,0); ! LPSongFilter* f = q.buildFilter(""); t.start(); for (i=0; i < length; i++) { |