summaryrefslogtreecommitdiff
path: root/utils/wpseditor/gui/src/qwpsdrawer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utils/wpseditor/gui/src/qwpsdrawer.cpp')
-rw-r--r--utils/wpseditor/gui/src/qwpsdrawer.cpp112
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
10QPointer<QWpsDrawer> drawer; 13QPointer<QWpsDrawer> drawer;
11QPixmap *QWpsDrawer::pix = NULL; 14QPixmap *QWpsDrawer::pix = NULL;
@@ -14,34 +17,38 @@ QImage QWpsDrawer::backdrop;
14proxy_api QWpsDrawer::api; 17proxy_api QWpsDrawer::api;
15 18
16QWpsDrawer::QWpsDrawer( QWpsState *ws,QTrackState *ms, QWidget *parent ) 19QWpsDrawer::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
37bool QWpsDrawer::tryResolve() { 26bool 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}
47QWpsDrawer::~QWpsDrawer() { 54QWpsDrawer::~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}
58void QWpsDrawer::newTempWps() { 65void 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
71void QWpsDrawer::WpsInit(QString buffer, bool isFile) { 78void 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
105void QWpsDrawer::paintEvent(QPaintEvent * event) { 113void 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
174void QWpsDrawer::drawBackdrop() { 183void 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
181void QWpsDrawer::slotSetAudioStatus(int status) { 193void 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
214QString 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
222QList<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}
236bool 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}