1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
9 * Copyright (C) 2007 by Rostilav Checkan
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
27 #include "qwpsdrawer.h"
30 #include "qtrackstate.h"
31 #include "qwpsstate.h"
34 QPointer
<QWpsDrawer
> drawer
;
35 QPixmap
*QWpsDrawer::pix
= NULL
;
36 QString
QWpsDrawer::mTmpWpsString
;
37 QImage
QWpsDrawer::backdrop
;
38 proxy_api
QWpsDrawer::api
;
40 QWpsDrawer::QWpsDrawer( QWpsState
*ws
,QTrackState
*ms
, QWidget
*parent
)
41 : QWidget(parent
),wpsState(ws
),trackState(ms
),showGrid(false),mCurTarget(qApp
->applicationDirPath()+"/libwps_IRIVER_H10_5GB") {
47 bool QWpsDrawer::tryResolve() {
48 QLibrary
lib(mCurTarget
);
49 lib_wps_init
= (pfwps_init
)lib
.resolve("wps_init");
50 lib_wps_display
= (pfwps_display
)lib
.resolve("wps_display");
51 lib_wps_refresh
= (pfwps_refresh
)lib
.resolve("wps_refresh");
52 lib_get_model_name
= (pfget_model_name
)lib
.resolve("get_model_name");
53 mResolved
= lib_wps_init
&& lib_wps_display
&& lib_wps_refresh
&& lib_get_model_name
;
55 DEBUGF1(tr("ERR: Failed to resolve funcs!"));
58 memset(&api
,0,sizeof(struct proxy_api
));
60 api
.putsxy
= &QWpsDrawer::putsxy
;
61 api
.transparent_bitmap_part
= &QWpsDrawer::transparent_bitmap_part
;
62 api
.bitmap_part
= &QWpsDrawer::bitmap_part
;
63 api
.drawpixel
= &QWpsDrawer::drawpixel
;
64 api
.fillrect
= &QWpsDrawer::fillrect
;
65 api
.hline
= &QWpsDrawer::hline
;
66 api
.vline
= &QWpsDrawer::vline
;
67 api
.clear_viewport
= &QWpsDrawer::clear_viewport
;
68 api
.load_wps_backdrop
= &QWpsDrawer::load_wps_backdrop
;
69 api
.read_bmp_file
= &QWpsDrawer::read_bmp_file
;
70 api
.debugf
= &qlogger
;
71 qDebug()<<(mCurTarget
+" resolved");
75 QWpsDrawer::~QWpsDrawer() {
76 qDebug()<<"QWpsDrawer::~QWpsDrawer()";
80 void QWpsDrawer::mouseReleaseEvent ( QMouseEvent
* event
) {
82 /*int x = event->x() - (this->width()-pix->width())/2,
83 y = event->y() - (this->height()-pix->height())/2;
84 DEBUGF1("x=%d,y=%d",x,y);*/
86 void QWpsDrawer::newTempWps() {
87 QTemporaryFile tmpWps
;
88 tmpWps
.setAutoRemove(false);
89 tmpWps
.setFileTemplate(QDir::tempPath()+"/XXXXXXXXXX.wps");
91 QString tmpDir
= tmpWps
.fileName().left(tmpWps
.fileName().length()-4);
92 if (QDir::temp().mkpath(tmpDir
)) {
93 mTmpWpsString
= tmpDir
;
94 DEBUGF3(QString("Created :"+mTmpWpsString
).toAscii());
99 void QWpsDrawer::WpsInit(QString buffer
, bool isFile
) {
100 DEBUGF3("QWpsDrawer::WpsInit");
106 DEBUGF1( tr("Loading %1").arg(buffer
));
108 if (file
.open(QIODevice::ReadOnly
| QIODevice::Text
))
109 mWpsString
= file
.readAll();
114 QFile
tfile(mTmpWpsString
+".wps");
115 if (tfile
.open(QIODevice::WriteOnly
| QIODevice::Text
))
116 tfile
.write(mWpsString
.toAscii(),mWpsString
.length());
118 backdrop
.fill(Qt::black
);
119 DEBUGF3("clear backdrop");
121 lib_wps_init(buffer
.toAscii(), &api
, isFile
);
123 lib_wps_init(QString(mTmpWpsString
+".wps").toAscii(), &api
, true);
124 pix
= new QPixmap(api
.getwidth(),api
.getheight());
125 pix
->fill(Qt::black
);
129 setMinimumWidth(api
.getwidth());
130 setMinimumHeight(api
.getheight());
134 void QWpsDrawer::paintEvent(QPaintEvent
* event
) {
135 DEBUGF3("QWpsDrawer::paintEvent()");
141 QRect rect
= event
->rect();
149 api
.get_current_vp(&avp
);
153 for (int i
=0;i
*avp
.fontheight
/1.5<avp
.width
;i
++) {
154 g
.drawLine(int(i
*avp
.fontheight
/1.5), 0, int(i
*avp
.fontheight
/1.5), avp
.height
);
156 for (int j
=0;j
*avp
.fontheight
<avp
.height
; j
++) {
157 g
.drawLine(0,j
*avp
.fontheight
,avp
.width
,j
*avp
.fontheight
);
161 p
.drawPixmap((rect
.width()-pix
->width())/2,(rect
.height()-pix
->height())/2,*pix
);
165 void QWpsDrawer::clear_viewport(int x
,int y
,int w
,int h
, int color
) {
166 DEBUGF2("clear_viewport(int x=%d,int y=%d,int w=%d,int h=%d, int color)",x
,y
,w
,h
);
169 //QImage img = backdrop.copy(x,y,w,h);
170 //p.drawImage(x,y,img);
173 void QWpsDrawer::slotSetVolume() {
174 Slider
*slider
= new Slider(this, tr("Volume"),-74,10);
176 connect(slider
, SIGNAL(valueChanged(int)), wpsState
, SLOT(setVolume(int)));
177 connect(this, SIGNAL(destroyed()),slider
, SLOT(close()));
180 void QWpsDrawer::slotSetProgress() {
181 Slider
*slider
= new Slider(this,tr("Progress"),0,100);
183 connect(slider
, SIGNAL(valueChanged(int)), trackState
, SLOT(setElapsed(int)));
184 connect(this, SIGNAL(destroyed()),slider
, SLOT(close()));
187 void QWpsDrawer::slotWpsStateChanged(wpsstate ws_
) {
188 if (api
.set_wpsstate
)
189 api
.set_wpsstate(ws_
);
193 void QWpsDrawer::slotTrackStateChanged(trackstate ms_
) {
194 if (api
.set_wpsstate
)
195 api
.set_trackstate(ms_
);
199 void QWpsDrawer::slotShowGrid(bool show
) {
204 void QWpsDrawer::drawBackdrop() {
205 DEBUGF3("QWpsDrawer::drawBackdrop()");
206 if (backdrop
.isNull())
209 QImage pink
= backdrop
.createMaskFromColor(qRgb(255,0,255),Qt::MaskOutColor
);
210 backdrop
.setAlphaChannel(pink
);
211 b
.drawImage(0,0,backdrop
,0,0,pix
->width(),pix
->height());
214 void QWpsDrawer::slotSetAudioStatus(int status
) {
215 api
.set_audio_status(status
);
219 void QWpsDrawer::cleanTemp(bool fileToo
) {
221 QFile::remove(mTmpWpsString
+".wps");
222 QDirIterator
it(mTmpWpsString
, QDirIterator::Subdirectories
);
223 while (it
.hasNext()) {
224 QFile::remove(it
.next());
226 QDir(mTmpWpsString
).rmdir(mTmpWpsString
);
229 void QWpsDrawer::closeEvent(QCloseEvent
*event
) {
230 qDebug()<<"QWpsDrawer::closeEvent()";
235 QString
QWpsDrawer::getModelName(QString libraryName
) {
236 QLibrary
lib(libraryName
);
237 if ((pfget_model_name
)lib
.resolve("get_model_name"))
238 return ((pfget_model_name
)lib
.resolve("get_model_name"))();
239 DEBUGF1("ERR: failed to resolve <get_model_name>");
243 QList
<QString
> QWpsDrawer::getTargets() {
244 QList
<QString
> list
;
245 QDir d
= QDir(qApp
->applicationDirPath());
246 QFileInfoList libs
= d
.entryInfoList(QStringList("libwps_*"));
247 qDebug() << libs
.size()<<"libs found";
248 for (int i
= 0; i
< libs
.size(); i
++) {
249 QString modelName
= getModelName(libs
[i
].absoluteFilePath());
250 qDebug() << libs
[i
].fileName()<<modelName
;
251 if (modelName
== "unknown")
253 list
.append(modelName
);
254 libs_array
[i
].target_name
= modelName
;
255 libs_array
[i
].lib
= libs
[i
].absoluteFilePath();
259 bool QWpsDrawer::setTarget(QString target
) {
260 foreach(lib_t cur_lib
, libs_array
)
262 if(cur_lib
.target_name
== target
)
264 QLibrary
lib(cur_lib
.lib
);
266 if (getModelName(cur_lib
.lib
) != "unknown")
268 mCurTarget
= cur_lib
.lib
;