2
operations with skinset.
3
Copyright (C) 1999 Martin Vogt
5
This program is free software; you can redistribute it and/or modify
6
it under the terms of the GNU General Public License as published by
7
the Free Software Foundation.
9
For more information look at the file COPYRIGHT in this package
16
#include <waSkinOperation.h>
19
#include "waSkinMapping.h"
22
WaSkinOperation::WaSkinOperation() {
26
WaSkinOperation::~WaSkinOperation() {
30
int WaSkinOperation::loadSkinSet(QString skinDir,WaSkinModell* waSkinModell) {
33
// now load the pixmaps
38
if (WaSkinOperation::isZippedFile(skinDir)) {
39
char* tempdir=tempnam(NULL, NULL);
40
QString cmd=WaSkinOperation::unzipCommand(skinDir,tempdir);
41
QString dir=WaSkinOperation::doUnzip(cmd,tempdir);
42
lError=WaSkinOperation::loadSkinSet(dir,waSkinModell);
47
WaSkinOperation::doSystemCall(del);
50
waSkinModell->setSkinDirectory(skinDir);
56
for(i=0;i<_WA_SKIN_ENTRIES;i++) {
57
WaSkinDesc* waSkinDesc=waSkinModell->getWaSkinDesc(i);
58
QPixmap* pixmap=waSkinDesc->getPixmap();
59
QString file=waSkinDesc->getFilename();
61
int lFound=WaSkinOperation::getPixmap(skinDir,file,&loadPixmap);
63
int x=waSkinDesc->getX();
64
int y=waSkinDesc->getY();
65
int width=waSkinDesc->getWidth();
66
int height=waSkinDesc->getHeight();
67
pixmap->resize(width,height);
69
bitBlt(pixmap,0,0,&loadPixmap,x,y,width,height);
73
waSkinModell->emitChangeEvent(i);
75
waSkinModell->setSkinDirectory(skinDir);
82
void WaSkinOperation::makeEmptySkinModell(WaSkinModell* waSkinModell) {
87
// now make a lokal copy of global struct
88
QPixmap pixmap(error_xpm);
89
for(i=0;i<_WA_SKIN_ENTRIES;i++) {
90
WaSkinDesc* waSkinDesc=waSkinModell->
91
getWaSkinDesc(globalMapFromFile[i].posId);
93
waSkinDesc->setFilename(globalMapFromFile[i].filename);
94
waSkinDesc->setPosId(globalMapFromFile[i].posId);
95
waSkinDesc->setX(globalMapFromFile[i].x);
96
waSkinDesc->setY(globalMapFromFile[i].y);
97
waSkinDesc->setWidth(globalMapFromFile[i].width);
98
waSkinDesc->setHeight(globalMapFromFile[i].height);
99
waSkinDesc->setPixmap(&pixmap);
101
QPixmap* tmpPixmap=waSkinDesc->getPixmap();
103
paint.begin( tmpPixmap );
104
snprintf((char*)&id,9,"%d",waSkinDesc->getPosId());
105
paint.drawText ( 0, 10, (char*)&id);
110
// Now find the mapToGlobal id an add the information
112
int id=waSkinDesc->getPosId();
114
for(i=0;i<_WA_SKIN_ENTRIES;i++) {
115
if (bmpToGui[i][0]==id) {
116
int globalPos=bmpToGui[i][1];
117
waSkinDesc->setWidgetId(globalPos);
118
if (globalPos != -1) {
119
waSkinDesc->setWidgetX(globalMapToGui[globalPos].x);
120
waSkinDesc->setWidgetY(globalMapToGui[globalPos].y);
121
waSkinDesc->setWidgetWidth(globalMapToGui[globalPos].width);
122
waSkinDesc->setWidgetHeight(globalMapToGui[globalPos].height);
123
waSkinModell->emitChangeEvent(i);
130
if (lFound == false) {
135
// now load the mapping in the modell
136
for(i=0;i<_WA_MAPPING_ENTRIES;i++) {
137
WaSkinDesc* waSkinDesc=waSkinModell
138
->getWaSkinMapDesc(globalMapToGui[i].posId);
139
waSkinDesc->setWidgetId(globalMapToGui[i].posId);
140
waSkinDesc->setWidgetX(globalMapToGui[i].x);
141
waSkinDesc->setWidgetY(globalMapToGui[i].y);
142
waSkinDesc->setWidgetWidth(globalMapToGui[i].width);
143
waSkinDesc->setWidgetHeight(globalMapToGui[i].height);
149
int WaSkinOperation::getPixmap(QString dir,QString fname,QPixmap* target) {
153
if (WaSkinOperation::isZippedFile(dir)) {
154
char* tempdir=tempnam(NULL, NULL);
155
QString cmd=WaSkinOperation::unzipCommand(dir,tempdir);
156
QString skinDir=WaSkinOperation::doUnzip(cmd,tempdir);
157
back=WaSkinOperation::getPixmap(skinDir,fname,target);
162
WaSkinOperation::doSystemCall(del);
168
if (qdir.exists() == false) {
172
QString basename=WaSkinOperation::baseName(fname);
174
back=WaSkinOperation::getPixmapExt(&qdir,basename,"bmp",target);
178
back=WaSkinOperation::getPixmapExt(&qdir,basename,"xpm",target);
186
int WaSkinOperation::getPixmapExt(QDir* dir,QString basename,
187
QString extension,QPixmap* target) {
191
QStringList strList=dir->entryList();
193
QString cmpString2=basename.upper();
195
int n=strList.count();
197
// this strList thing is a hack for qt-1.40
200
QString file=strList[i];
203
fileInfo.setFile(file);
204
if (fileInfo.isDir()) {
207
QString cmpString1=fileInfo.baseName().upper();
209
if (cmpString1==cmpString2) {
210
QString file=dir->absPath()+"/"+QString(fileInfo.filePath());
216
// now the filename mapping 1.8x -> 2.0
217
if (basename.upper() == "VOLUME") {
218
return WaSkinOperation::getPixmapExt(dir,QString("VOLBAR"),
221
if (basename.upper() == "NUMBERS") {
222
return WaSkinOperation::getPixmapExt(dir,QString("NUMS_EX"),
230
int WaSkinOperation::isZippedFile(QString skinDir) {
233
fileInfo.setFile(skinDir);
234
ending=fileInfo.extension().upper();
238
if ( (ending == "ZIP") ||
240
(ending == "TAR.GZ") ||
243
(ending == "TAR.BZ2") ||
244
(ending == "BZ2") ) {
251
QString WaSkinOperation::unzipCommand(QString skinDir,QString tempdir) {
257
fileInfo.setFile(skinDir);
258
ending=fileInfo.extension().upper();
259
if (ending == "ZIP") {
260
back=getenv("UNZIPCMD");
264
tmp=back+" -o -j \""+skinDir+"\" -d "+tempdir;
269
if ( (ending == "GZ") ) {
275
if ( (ending == "TAR.GZ") ||
276
(ending == "TGZ") ) {
277
back=getenv("TARCMD");
281
tmp=back+"\""+skinDir+"\" >"+tempdir+"/tmp.tar";
282
tmp=tmp+";"+unzipCommand(QString(tempdir)+"/tmp.tar",tempdir);
286
if (ending == "TAR") {
287
back=getenv("TARCMD");
291
tmp=back+"\""+skinDir+"\" -C "+tempdir;
296
if (ending == "BZ2") {
300
tmp=back+" \""+skinDir+"\"";
304
if (ending == "TAR.BZ2") {
308
tmp=back+"-cdf \""+skinDir+"\" >"+tempdir+"/tmp.tar";
309
tmp=tmp+";"+unzipCommand(QString(tempdir)+"/tmp.tar",tempdir);
317
QString WaSkinOperation::doUnzip(QString unzipCommand,QString tempdir) {
318
mkdir(tempdir.latin1(), 0x1ed); /* Permissions: 755 */
321
WaSkinOperation::doSystemCall(unzipCommand);
322
return findMainBMP(tempdir);
326
QString WaSkinOperation::findMainBMP(QString tempdir) {
328
dir.setPath(tempdir);
329
// this strList is a big hack to compile with qt-1.40
330
QStringList strList=dir.entryList();
331
int n=strList.count();
333
QString path(dir.absPath());
336
QString file=strList[i];
338
if ((file != ".") && (file != "..")) {
340
QString testDir=path+"/"+file;
341
fileInfo.setFile(testDir);
342
if (fileInfo.isDir()) {
343
QString back=findMainBMP(testDir);
349
QString cmpString=fileInfo.baseName().upper();
350
if (cmpString=="MAIN") {
351
return QString(tempdir)+"/";
361
QString WaSkinOperation::baseName(QString filename) {
362
int pos = filename.find('.');
366
return filename.left(pos);
373
void WaSkinOperation::doSystemCall(QString call) {
374
system(call.latin1());