diff options
author | Dominik Wenger <domonoky@googlemail.com> | 2008-09-03 19:24:50 +0000 |
---|---|---|
committer | Dominik Wenger <domonoky@googlemail.com> | 2008-09-03 19:24:50 +0000 |
commit | 254fa65c7b75f61147186d9f9146b89ee11b2b26 (patch) | |
tree | bb5355f04275394ebfd2aa200abc44b188c08df9 /utils/wpseditor/gui/src/qwpsdrawer.cpp | |
parent | ca0de82cec434fcd4af827ff1a1d473667249338 (diff) | |
download | rockbox-254fa65c7b75f61147186d9f9146b89ee11b2b26.tar.gz rockbox-254fa65c7b75f61147186d9f9146b89ee11b2b26.zip |
WpsEditor: commit FS#9344 by Rostislav Chekan - multitarget support (only colour targets for now)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18399 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'utils/wpseditor/gui/src/qwpsdrawer.cpp')
-rw-r--r-- | utils/wpseditor/gui/src/qwpsdrawer.cpp | 112 |
1 files changed, 78 insertions, 34 deletions
diff --git a/utils/wpseditor/gui/src/qwpsdrawer.cpp b/utils/wpseditor/gui/src/qwpsdrawer.cpp index ab8a4b32d6..a506d5c03b 100644 --- a/utils/wpseditor/gui/src/qwpsdrawer.cpp +++ b/utils/wpseditor/gui/src/qwpsdrawer.cpp | |||
@@ -1,11 +1,14 @@ | |||
1 | #include "qwpsdrawer.h" | 1 | #include <stdarg.h> |
2 | #include "slider.h" | 2 | |
3 | #include "utils.h" | ||
4 | #include <QtGui> | 3 | #include <QtGui> |
5 | #include <QLibrary> | 4 | #include <QLibrary> |
6 | #include <stdarg.h> | ||
7 | // | ||
8 | 5 | ||
6 | #include "qwpsdrawer.h" | ||
7 | #include "slider.h" | ||
8 | #include "utils.h" | ||
9 | #include "qtrackstate.h" | ||
10 | #include "qwpsstate.h" | ||
11 | #include "api.h" | ||
9 | 12 | ||
10 | QPointer<QWpsDrawer> drawer; | 13 | QPointer<QWpsDrawer> drawer; |
11 | QPixmap *QWpsDrawer::pix = NULL; | 14 | QPixmap *QWpsDrawer::pix = NULL; |
@@ -14,34 +17,38 @@ QImage QWpsDrawer::backdrop; | |||
14 | proxy_api QWpsDrawer::api; | 17 | proxy_api QWpsDrawer::api; |
15 | 18 | ||
16 | QWpsDrawer::QWpsDrawer( QWpsState *ws,QTrackState *ms, QWidget *parent ) | 19 | QWpsDrawer::QWpsDrawer( QWpsState *ws,QTrackState *ms, QWidget *parent ) |
17 | : QWidget(parent),wpsState(ws),trackState(ms),showGrid(false),mTargetLibName("libwps") { | 20 | : QWidget(parent),wpsState(ws),trackState(ms),showGrid(false),mCurTarget("h10_5gb") { |
18 | 21 | ||
19 | tryResolve(); | 22 | tryResolve(); |
20 | memset(&api,0,sizeof(struct proxy_api)); | ||
21 | |||
22 | api.verbose = 2; | ||
23 | api.putsxy = &QWpsDrawer::putsxy; | ||
24 | api.transparent_bitmap_part = &QWpsDrawer::transparent_bitmap_part; | ||
25 | api.bitmap_part = &QWpsDrawer::bitmap_part; | ||
26 | api.drawpixel = &QWpsDrawer::drawpixel; | ||
27 | api.fillrect = &QWpsDrawer::fillrect; | ||
28 | api.hline = &QWpsDrawer::hline; | ||
29 | api.vline = &QWpsDrawer::vline; | ||
30 | api.clear_viewport = &QWpsDrawer::clear_viewport; | ||
31 | api.load_wps_backdrop = &QWpsDrawer::load_wps_backdrop; | ||
32 | api.read_bmp_file = &QWpsDrawer::read_bmp_file; | ||
33 | api.debugf = &qlogger; | ||
34 | newTempWps(); | 23 | newTempWps(); |
35 | } | 24 | } |
36 | 25 | ||
37 | bool QWpsDrawer::tryResolve() { | 26 | bool QWpsDrawer::tryResolve() { |
38 | QLibrary lib(qApp->applicationDirPath()+"/"+mTargetLibName); | 27 | QLibrary lib(qApp->applicationDirPath()+"/libwps_"+mCurTarget); |
39 | wps_init = (pfwps_init)lib.resolve("wps_init"); | 28 | lib_wps_init = (pfwps_init)lib.resolve("wps_init"); |
40 | wps_display = (pfwps_display)lib.resolve("wps_display"); | 29 | lib_wps_display = (pfwps_display)lib.resolve("wps_display"); |
41 | wps_refresh = (pfwps_refresh)lib.resolve("wps_refresh"); | 30 | lib_wps_refresh = (pfwps_refresh)lib.resolve("wps_refresh"); |
42 | mResolved = wps_init && wps_display && wps_refresh; | 31 | lib_get_model_name = (pfget_model_name)lib.resolve("get_model_name"); |
32 | mResolved = lib_wps_init && lib_wps_display && lib_wps_refresh && lib_get_model_name; | ||
43 | if (!mResolved) | 33 | if (!mResolved) |
44 | DEBUGF1(tr("ERR: Failed to resolve funcs!")); | 34 | DEBUGF1(tr("ERR: Failed to resolve funcs!")); |
35 | else { | ||
36 | int v = api.verbose; | ||
37 | memset(&api,0,sizeof(struct proxy_api)); | ||
38 | api.verbose = v; | ||
39 | api.putsxy = &QWpsDrawer::putsxy; | ||
40 | api.transparent_bitmap_part = &QWpsDrawer::transparent_bitmap_part; | ||
41 | api.bitmap_part = &QWpsDrawer::bitmap_part; | ||
42 | api.drawpixel = &QWpsDrawer::drawpixel; | ||
43 | api.fillrect = &QWpsDrawer::fillrect; | ||
44 | api.hline = &QWpsDrawer::hline; | ||
45 | api.vline = &QWpsDrawer::vline; | ||
46 | api.clear_viewport = &QWpsDrawer::clear_viewport; | ||
47 | api.load_wps_backdrop = &QWpsDrawer::load_wps_backdrop; | ||
48 | api.read_bmp_file = &QWpsDrawer::read_bmp_file; | ||
49 | api.debugf = &qlogger; | ||
50 | qDebug()<<(qApp->applicationDirPath()+"/libwps_"+mCurTarget+" resolved"); | ||
51 | } | ||
45 | return mResolved; | 52 | return mResolved; |
46 | } | 53 | } |
47 | QWpsDrawer::~QWpsDrawer() { | 54 | QWpsDrawer::~QWpsDrawer() { |
@@ -56,20 +63,20 @@ void QWpsDrawer::mouseReleaseEvent ( QMouseEvent * event ) { | |||
56 | DEBUGF1("x=%d,y=%d",x,y);*/ | 63 | DEBUGF1("x=%d,y=%d",x,y);*/ |
57 | } | 64 | } |
58 | void QWpsDrawer::newTempWps() { | 65 | void QWpsDrawer::newTempWps() { |
59 | QTemporaryFile tmpWps; | 66 | QTemporaryFile tmpWps; |
60 | tmpWps.setAutoRemove(false); | 67 | tmpWps.setAutoRemove(false); |
61 | tmpWps.setFileTemplate(QDir::tempPath()+"/XXXXXXXXXX.wps"); | 68 | tmpWps.setFileTemplate(QDir::tempPath()+"/XXXXXXXXXX.wps"); |
62 | if (tmpWps.open()) { | 69 | if (tmpWps.open()) { |
63 | QString tmpDir = tmpWps.fileName().left(tmpWps.fileName().length()-4); | 70 | QString tmpDir = tmpWps.fileName().left(tmpWps.fileName().length()-4); |
64 | if (QDir::temp().mkpath(tmpDir)) { | 71 | if (QDir::temp().mkpath(tmpDir)) { |
65 | mTmpWpsString = tmpDir; | 72 | mTmpWpsString = tmpDir; |
66 | DEBUGF1(mTmpWpsString); | 73 | DEBUGF3(QString("Created :"+mTmpWpsString).toAscii()); |
67 | } | 74 | } |
68 | } | 75 | } |
69 | } | 76 | } |
70 | 77 | ||
71 | void QWpsDrawer::WpsInit(QString buffer, bool isFile) { | 78 | void QWpsDrawer::WpsInit(QString buffer, bool isFile) { |
72 | 79 | DEBUGF3("QWpsDrawer::WpsInit"); | |
73 | if (!mResolved) | 80 | if (!mResolved) |
74 | if (!tryResolve()) | 81 | if (!tryResolve()) |
75 | return; | 82 | return; |
@@ -87,22 +94,24 @@ void QWpsDrawer::WpsInit(QString buffer, bool isFile) { | |||
87 | if (tfile.open(QIODevice::WriteOnly | QIODevice::Text)) | 94 | if (tfile.open(QIODevice::WriteOnly | QIODevice::Text)) |
88 | tfile.write(mWpsString.toAscii(),mWpsString.length()); | 95 | tfile.write(mWpsString.toAscii(),mWpsString.length()); |
89 | } | 96 | } |
90 | 97 | backdrop.fill(Qt::black); | |
98 | DEBUGF3("clear backdrop"); | ||
91 | if (isFile) | 99 | if (isFile) |
92 | wps_init(buffer.toAscii(), &api, isFile); | 100 | lib_wps_init(buffer.toAscii(), &api, isFile); |
93 | else | 101 | else |
94 | wps_init(QString(mTmpWpsString+".wps").toAscii(), &api, true); | 102 | lib_wps_init(QString(mTmpWpsString+".wps").toAscii(), &api, true); |
95 | pix = new QPixmap(api.getwidth(),api.getheight()); | 103 | pix = new QPixmap(api.getwidth(),api.getheight()); |
104 | pix->fill(Qt::black); | ||
96 | 105 | ||
97 | drawBackdrop(); | 106 | drawBackdrop(); |
98 | 107 | ||
99 | setMinimumWidth(api.getwidth()); | 108 | setMinimumWidth(api.getwidth()); |
100 | setMinimumHeight(api.getheight()); | 109 | setMinimumHeight(api.getheight()); |
101 | |||
102 | update(); | 110 | update(); |
103 | } | 111 | } |
104 | 112 | ||
105 | void QWpsDrawer::paintEvent(QPaintEvent * event) { | 113 | void QWpsDrawer::paintEvent(QPaintEvent * event) { |
114 | DEBUGF3("QWpsDrawer::paintEvent()"); | ||
106 | if (!mResolved) | 115 | if (!mResolved) |
107 | return; | 116 | return; |
108 | if (pix==NULL) | 117 | if (pix==NULL) |
@@ -111,7 +120,7 @@ void QWpsDrawer::paintEvent(QPaintEvent * event) { | |||
111 | QRect rect = event->rect(); | 120 | QRect rect = event->rect(); |
112 | 121 | ||
113 | drawBackdrop(); | 122 | drawBackdrop(); |
114 | wps_refresh(); | 123 | lib_wps_refresh(); |
115 | 124 | ||
116 | if (showGrid) { | 125 | if (showGrid) { |
117 | QPainter g(pix); | 126 | QPainter g(pix); |
@@ -172,10 +181,13 @@ void QWpsDrawer::slotShowGrid(bool show) { | |||
172 | } | 181 | } |
173 | 182 | ||
174 | void QWpsDrawer::drawBackdrop() { | 183 | void QWpsDrawer::drawBackdrop() { |
184 | DEBUGF3("QWpsDrawer::drawBackdrop()"); | ||
185 | if (backdrop.isNull()) | ||
186 | return; | ||
175 | QPainter b(pix); | 187 | QPainter b(pix); |
176 | QImage pink = backdrop.createMaskFromColor(qRgb(255,0,255),Qt::MaskOutColor); | 188 | QImage pink = backdrop.createMaskFromColor(qRgb(255,0,255),Qt::MaskOutColor); |
177 | backdrop.setAlphaChannel(pink); | 189 | backdrop.setAlphaChannel(pink); |
178 | b.drawImage(0,0,backdrop); | 190 | b.drawImage(0,0,backdrop,0,0,pix->width(),pix->height()); |
179 | } | 191 | } |
180 | 192 | ||
181 | void QWpsDrawer::slotSetAudioStatus(int status) { | 193 | void QWpsDrawer::slotSetAudioStatus(int status) { |
@@ -198,3 +210,35 @@ void QWpsDrawer::closeEvent(QCloseEvent *event) { | |||
198 | cleanTemp(); | 210 | cleanTemp(); |
199 | event->accept(); | 211 | event->accept(); |
200 | } | 212 | } |
213 | |||
214 | QString QWpsDrawer::getModelName(QString libraryName) { | ||
215 | QLibrary lib(libraryName); | ||
216 | if ((pfget_model_name)lib.resolve("get_model_name")) | ||
217 | return ((pfget_model_name)lib.resolve("get_model_name"))(); | ||
218 | DEBUGF1("ERR: failed to resolve <get_model_name>"); | ||
219 | return "unknown"; | ||
220 | } | ||
221 | |||
222 | QList<QString> QWpsDrawer::getTargets() { | ||
223 | QList<QString> list ; | ||
224 | QDir d = QDir(qApp->applicationDirPath()); | ||
225 | QFileInfoList libs = d.entryInfoList(QStringList("libwps*")); | ||
226 | qDebug() << libs.size()<<"libs found"; | ||
227 | for (int i = 0; i < libs.size(); i++) { | ||
228 | QString modelName = getModelName(libs[i].absoluteFilePath()); | ||
229 | qDebug() << libs[i].fileName()<<modelName; | ||
230 | if (modelName == "unknown") | ||
231 | continue; | ||
232 | list.append(modelName); | ||
233 | } | ||
234 | return list; | ||
235 | } | ||
236 | bool QWpsDrawer::setTarget(QString target) { | ||
237 | QLibrary lib(qApp->applicationDirPath()+"/libwps_"+mCurTarget); | ||
238 | //lib.unload(); | ||
239 | if (getModelName("libwps_"+target)!="unknown") { | ||
240 | mCurTarget = target; | ||
241 | return tryResolve(); | ||
242 | } | ||
243 | return false; | ||
244 | } | ||