file.cpp
author insilmaril
Tue, 23 Mar 2010 11:54:30 +0000
branchrelease-1-12-maintained
changeset 81 876eed30ba3b
permissions -rw-r--r--
Patch from Xavier Oswald to compile with older compilers
insilmaril@81
     1
#include <QDir>
insilmaril@81
     2
#include <QMessageBox>
insilmaril@81
     3
#include <QPixmap>
insilmaril@81
     4
#include <QLabel>
insilmaril@81
     5
#include <QTextStream>
insilmaril@81
     6
#include <iostream>
insilmaril@81
     7
#include <cstdlib>
insilmaril@81
     8
insilmaril@81
     9
#include "file.h"
insilmaril@81
    10
#include "process.h"
insilmaril@81
    11
insilmaril@81
    12
#if defined(Q_OS_WIN32)
insilmaril@81
    13
#include "mkdtemp.h"
insilmaril@81
    14
#include <windows.h>
insilmaril@81
    15
#endif
insilmaril@81
    16
insilmaril@81
    17
QString maskPath(QString p)
insilmaril@81
    18
{
insilmaril@81
    19
	// Change " " to "\ " to enable blanks in filenames
insilmaril@81
    20
	p=p.replace(QChar('&'),"\\&");
insilmaril@81
    21
	return p.replace(QChar(' '),"\\ ");
insilmaril@81
    22
}
insilmaril@81
    23
insilmaril@81
    24
QString convertToRel (const QString &src, const QString &dst)
insilmaril@81
    25
{
insilmaril@81
    26
	QString s=src;
insilmaril@81
    27
	QString d=dst;
insilmaril@81
    28
	int i;
insilmaril@81
    29
insilmaril@81
    30
	if (s==d) 
insilmaril@81
    31
	{
insilmaril@81
    32
		// Special case, we just need the name of the file,
insilmaril@81
    33
		// not the complete path
insilmaril@81
    34
		i=d.findRev ("/");
insilmaril@81
    35
		d=d.right (d.length()-i-1);
insilmaril@81
    36
	} else
insilmaril@81
    37
	{
insilmaril@81
    38
		// Find relative path from src to dst
insilmaril@81
    39
insilmaril@81
    40
		// Remove the first "/"
insilmaril@81
    41
		if (s.section ("/",0,0).isEmpty()) 
insilmaril@81
    42
		{
insilmaril@81
    43
			s=s.right (s.length()-1);
insilmaril@81
    44
			d=d.right (d.length()-1);
insilmaril@81
    45
		}
insilmaril@81
    46
		
insilmaril@81
    47
		// remove identical left parts
insilmaril@81
    48
		while (s.section("/",0,0) == d.section("/",0,0) ) 
insilmaril@81
    49
		{
insilmaril@81
    50
			i=s.find ("/");
insilmaril@81
    51
			s=s.right (s.length()-i-1);
insilmaril@81
    52
			d=d.right (d.length()-i-1);
insilmaril@81
    53
		}
insilmaril@81
    54
insilmaril@81
    55
		// Now take care of paths where we have to go back first
insilmaril@81
    56
		int srcsep=s.count("/");
insilmaril@81
    57
		int dstsep=d.count("/");
insilmaril@81
    58
		if (srcsep <=  dstsep )
insilmaril@81
    59
		{
insilmaril@81
    60
			// find path to go up first and then back to dst
insilmaril@81
    61
			i=1;
insilmaril@81
    62
			while (i<=srcsep) 
insilmaril@81
    63
			{
insilmaril@81
    64
				d="../"+d;
insilmaril@81
    65
				i++;
insilmaril@81
    66
			}	
insilmaril@81
    67
		}
insilmaril@81
    68
	}	
insilmaril@81
    69
	return d;
insilmaril@81
    70
}
insilmaril@81
    71
insilmaril@81
    72
#include <QFileDialog>
insilmaril@81
    73
extern QString vymName;
insilmaril@81
    74
extern QDir lastFileDir;
insilmaril@81
    75
insilmaril@81
    76
QString browseDirectory (QWidget *parent,const QString &caption)
insilmaril@81
    77
{
insilmaril@81
    78
	QFileDialog fd(parent,caption);
insilmaril@81
    79
	fd.setMode (QFileDialog::DirectoryOnly);
insilmaril@81
    80
	fd.setCaption(vymName+ " - "+caption);
insilmaril@81
    81
	fd.setDir (lastFileDir);
insilmaril@81
    82
	fd.show();
insilmaril@81
    83
	
insilmaril@81
    84
	if ( fd.exec() == QDialog::Accepted )
insilmaril@81
    85
		return fd.selectedFile();
insilmaril@81
    86
	else
insilmaril@81
    87
		return "";
insilmaril@81
    88
}
insilmaril@81
    89
insilmaril@81
    90
insilmaril@81
    91
insilmaril@81
    92
bool reallyWriteDirectory(const QString &dir)
insilmaril@81
    93
{
insilmaril@81
    94
	QStringList eList = QDir(dir).entryList();
insilmaril@81
    95
	if (eList.first() ==".")  eList.pop_front();	// remove "."
insilmaril@81
    96
	if (eList.first() =="..") eList.pop_front();	// remove "."
insilmaril@81
    97
	if (!eList.isEmpty())
insilmaril@81
    98
	{
insilmaril@81
    99
		QMessageBox mb( vymName,
insilmaril@81
   100
			QObject::tr("The directory %1 is not empty.\nDo you risk to overwrite its contents?","write directory").arg(dir),
insilmaril@81
   101
		QMessageBox::Warning,
insilmaril@81
   102
		QMessageBox::Yes ,
insilmaril@81
   103
		QMessageBox::Cancel | QMessageBox::Default,
insilmaril@81
   104
		QMessageBox::NoButton );
insilmaril@81
   105
insilmaril@81
   106
		mb.setButtonText( QMessageBox::Yes, QObject::tr("Overwrite") );
insilmaril@81
   107
		mb.setButtonText( QMessageBox::No, QObject::tr("Cancel"));
insilmaril@81
   108
		switch( mb.exec() ) 
insilmaril@81
   109
		{
insilmaril@81
   110
			case QMessageBox::Yes:
insilmaril@81
   111
				// save 
insilmaril@81
   112
				return true;
insilmaril@81
   113
			case QMessageBox::Cancel:
insilmaril@81
   114
				// do nothing
insilmaril@81
   115
				return false;
insilmaril@81
   116
		}
insilmaril@81
   117
	}
insilmaril@81
   118
	return true;
insilmaril@81
   119
}
insilmaril@81
   120
insilmaril@81
   121
QString makeTmpDir (bool &ok, QString prefix)
insilmaril@81
   122
{
insilmaril@81
   123
	bool b;
insilmaril@81
   124
	QString path=makeUniqueDir (b,QDir::tempPath()+"/"+prefix+"-XXXXXX");
insilmaril@81
   125
	ok=b;
insilmaril@81
   126
	return path;
insilmaril@81
   127
}
insilmaril@81
   128
insilmaril@81
   129
bool isInTmpDir(QString fn)
insilmaril@81
   130
{
insilmaril@81
   131
	QString temp=QDir::tempPath();
insilmaril@81
   132
	int l=temp.length();
insilmaril@81
   133
	return fn.left(l)==temp;
insilmaril@81
   134
}
insilmaril@81
   135
insilmaril@81
   136
QString makeUniqueDir (bool &ok,QString s)
insilmaril@81
   137
{
insilmaril@81
   138
	// Create unique directory e.g. for s="/tmp/vym-XXXXXX"
insilmaril@81
   139
insilmaril@81
   140
	// Convert Separators
insilmaril@81
   141
	s=QDir::convertSeparators(s);
insilmaril@81
   142
insilmaril@81
   143
	// Convert QString to string 
insilmaril@81
   144
	ok=true;
insilmaril@81
   145
	char *p;
insilmaril@81
   146
	int bytes=s.length();
insilmaril@81
   147
	p=(char*) malloc (bytes+1);
insilmaril@81
   148
	int i;
insilmaril@81
   149
	for (i=0;i<bytes;i++)
insilmaril@81
   150
		p[i]=s.at(i).latin1();
insilmaril@81
   151
	p[bytes]=0;	
insilmaril@81
   152
insilmaril@81
   153
	QString r=mkdtemp (p);
insilmaril@81
   154
	if (r.isEmpty()) ok=false;
insilmaril@81
   155
	free (p);
insilmaril@81
   156
	return r;
insilmaril@81
   157
}
insilmaril@81
   158
insilmaril@81
   159
void removeDir(QDir d)
insilmaril@81
   160
{
insilmaril@81
   161
	// This check should_ not be necessary, but proved to be useful ;-)
insilmaril@81
   162
	if (!isInTmpDir(d.path()))
insilmaril@81
   163
	{
insilmaril@81
   164
		qWarning ("file.cpp::removeDir should remove "+d.path()+" - aborted.");
insilmaril@81
   165
		return;
insilmaril@81
   166
	}
insilmaril@81
   167
insilmaril@81
   168
	// Traverse directories
insilmaril@81
   169
	d.setFilter( QDir::Dirs| QDir::Hidden | QDir::NoSymLinks );
insilmaril@81
   170
	QFileInfoList list = d.entryInfoList();
insilmaril@81
   171
	QFileInfo fi;
insilmaril@81
   172
insilmaril@81
   173
	for (int i = 0; i < list.size(); ++i) 
insilmaril@81
   174
	{
insilmaril@81
   175
		fi=list.at(i);
insilmaril@81
   176
		if (fi.fileName() != "." && fi.fileName() != ".." )
insilmaril@81
   177
		{
insilmaril@81
   178
			if ( !d.cd(fi.fileName()) ) 
insilmaril@81
   179
				qWarning ("removeDir() cannot find the directory "+fi.fileName());
insilmaril@81
   180
			else 
insilmaril@81
   181
			{
insilmaril@81
   182
				// Recursively remove subdirs
insilmaril@81
   183
				removeDir (d);
insilmaril@81
   184
				d.cdUp();
insilmaril@81
   185
			}
insilmaril@81
   186
		}	
insilmaril@81
   187
	}
insilmaril@81
   188
insilmaril@81
   189
	// Traverse files
insilmaril@81
   190
	d.setFilter( QDir::Files| QDir::Hidden | QDir::NoSymLinks );
insilmaril@81
   191
	list = d.entryInfoList();
insilmaril@81
   192
insilmaril@81
   193
	for (int i = 0; i < list.size(); ++i) 
insilmaril@81
   194
	{
insilmaril@81
   195
		fi=list.at(i);
insilmaril@81
   196
		QFile (fi.filePath()).remove(); 
insilmaril@81
   197
	}	
insilmaril@81
   198
insilmaril@81
   199
	if (!d.rmdir(d.path()))
insilmaril@81
   200
		qWarning ("removeDir("+d.path()+") failed!");
insilmaril@81
   201
}		
insilmaril@81
   202
insilmaril@81
   203
void copyDir (QDir src, QDir dst)
insilmaril@81
   204
{
insilmaril@81
   205
	system ("cp -r "+src.path()+"/* "+dst.path());
insilmaril@81
   206
insilmaril@81
   207
	/*
insilmaril@81
   208
	ErrorCode err=success;
insilmaril@81
   209
insilmaril@81
   210
	Process *cpProc=new Process ();
insilmaril@81
   211
	QStringList args;
insilmaril@81
   212
	cpProc->setWorkingDirectory (src.path());
insilmaril@81
   213
	args <<"-r";
insilmaril@81
   214
	args <<src.path();
insilmaril@81
   215
	args <<dst.path();
insilmaril@81
   216
insilmaril@81
   217
	cpProc->start ("cp",args);
insilmaril@81
   218
	if (!cpProc->waitForStarted() )
insilmaril@81
   219
	{	
insilmaril@81
   220
		// zip could not be started
insilmaril@81
   221
		QMessageBox::critical( 0, QObject::tr( "Critical Error" ),
insilmaril@81
   222
					   QObject::tr("Couldn't start zip to compress data."));
insilmaril@81
   223
		err=aborted;
insilmaril@81
   224
	} else
insilmaril@81
   225
	{
insilmaril@81
   226
		// zip could be started
insilmaril@81
   227
		cpProc->waitForFinished();
insilmaril@81
   228
		if (cpProc->exitStatus()!=QProcess::NormalExit )
insilmaril@81
   229
		{
insilmaril@81
   230
			QMessageBox::critical( 0, QObject::tr( "Critical Error" ),
insilmaril@81
   231
						   QObject::tr("cp didn't exit normally")+
insilmaril@81
   232
						   "\n" + cpProc->getErrout());
insilmaril@81
   233
			err=aborted;
insilmaril@81
   234
		} else
insilmaril@81
   235
		{
insilmaril@81
   236
			if (cpProc->exitCode()>0)
insilmaril@81
   237
			{
insilmaril@81
   238
				QMessageBox::critical( 0, QObject::tr( "Critical Error" ),
insilmaril@81
   239
						   QString("cp exit code:  %1").arg(cpProc->exitCode() )+
insilmaril@81
   240
						   "\n" + cpProc->getErrout() );
insilmaril@81
   241
				err=aborted;
insilmaril@81
   242
			}
insilmaril@81
   243
		}
insilmaril@81
   244
	}	// cp could be started
insilmaril@81
   245
	*/
insilmaril@81
   246
}
insilmaril@81
   247
insilmaril@81
   248
void makeSubDirs (const QString &s)
insilmaril@81
   249
{
insilmaril@81
   250
	QDir d(s);
insilmaril@81
   251
	d.mkdir(s);
insilmaril@81
   252
	d.mkdir ("images");	
insilmaril@81
   253
	d.mkdir ("flags");	
insilmaril@81
   254
}
insilmaril@81
   255
insilmaril@81
   256
ErrorCode zipDir (const QDir &zipDir, const QString &zipName)
insilmaril@81
   257
{
insilmaril@81
   258
	ErrorCode err=success;
insilmaril@81
   259
	
insilmaril@81
   260
	// zip the temporary directory
insilmaril@81
   261
	QStringList args;
insilmaril@81
   262
	Process *zipProc=new Process ();
insilmaril@81
   263
	zipProc->setWorkingDirectory (zipDir.path());
insilmaril@81
   264
	args <<"-r";
insilmaril@81
   265
	args <<zipName;
insilmaril@81
   266
	args <<".";
insilmaril@81
   267
insilmaril@81
   268
	zipProc->start ("zip",args);
insilmaril@81
   269
	if (!zipProc->waitForStarted() )
insilmaril@81
   270
	{	
insilmaril@81
   271
		// zip could not be started
insilmaril@81
   272
		QMessageBox::critical( 0, QObject::tr( "Critical Error" ),
insilmaril@81
   273
					   QObject::tr("Couldn't start zip to compress data."));
insilmaril@81
   274
		err=aborted;
insilmaril@81
   275
	} else
insilmaril@81
   276
	{
insilmaril@81
   277
		// zip could be started
insilmaril@81
   278
		zipProc->waitForFinished();
insilmaril@81
   279
		if (zipProc->exitStatus()!=QProcess::NormalExit )
insilmaril@81
   280
		{
insilmaril@81
   281
			QMessageBox::critical( 0, QObject::tr( "Critical Error" ),
insilmaril@81
   282
						   QObject::tr("zip didn't exit normally")+
insilmaril@81
   283
						   "\n" + zipProc->getErrout());
insilmaril@81
   284
			err=aborted;
insilmaril@81
   285
		} else
insilmaril@81
   286
		{
insilmaril@81
   287
			if (zipProc->exitCode()>0)
insilmaril@81
   288
			{
insilmaril@81
   289
				QMessageBox::critical( 0, QObject::tr( "Critical Error" ),
insilmaril@81
   290
						   QString("zip exit code:  %1").arg(zipProc->exitCode() )+
insilmaril@81
   291
						   "\n" + zipProc->getErrout() );
insilmaril@81
   292
				err=aborted;
insilmaril@81
   293
			}
insilmaril@81
   294
		}
insilmaril@81
   295
	}	// zip could be started
insilmaril@81
   296
	return err;	
insilmaril@81
   297
}
insilmaril@81
   298
insilmaril@81
   299
ErrorCode unzipDir (const QDir &zipDir, const QString &zipName)
insilmaril@81
   300
{
insilmaril@81
   301
	ErrorCode err=success;
insilmaril@81
   302
insilmaril@81
   303
	// Try to unzip file
insilmaril@81
   304
#if !defined(Q_OS_WIN32)
insilmaril@81
   305
	QStringList args;
insilmaril@81
   306
	Process *zipProc=new Process ();
insilmaril@81
   307
	zipProc->setWorkingDirectory (zipDir.path());
insilmaril@81
   308
	args << "-o";	// overwrite existing files!
insilmaril@81
   309
	args << zipName ;
insilmaril@81
   310
	args << "-d";
insilmaril@81
   311
	args << zipDir.path();
insilmaril@81
   312
insilmaril@81
   313
	zipProc->start ("unzip",args);
insilmaril@81
   314
	if (!zipProc->waitForStarted() )
insilmaril@81
   315
	{
insilmaril@81
   316
		QMessageBox::critical( 0, QObject::tr( "Critical Error" ),
insilmaril@81
   317
					   QObject::tr("Couldn't start unzip to decompress data."));
insilmaril@81
   318
		err=aborted;
insilmaril@81
   319
		
insilmaril@81
   320
	} else
insilmaril@81
   321
	{
insilmaril@81
   322
		zipProc->waitForFinished();
insilmaril@81
   323
		if (zipProc->exitStatus()!=QProcess::NormalExit )
insilmaril@81
   324
		{
insilmaril@81
   325
			QMessageBox::critical( 0,QObject::tr( "Critical Error" ),
insilmaril@81
   326
						   QObject::tr("unzip didn't exit normally") +
insilmaril@81
   327
						   zipProc->getErrout() );
insilmaril@81
   328
			err=aborted;
insilmaril@81
   329
		} else
insilmaril@81
   330
		{
insilmaril@81
   331
			if (zipProc->exitCode()>0)
insilmaril@81
   332
			{
insilmaril@81
   333
				if (zipProc->exitCode()==9)
insilmaril@81
   334
					// no zipped file, but maybe .xml or old version? Try again.
insilmaril@81
   335
					err=nozip;
insilmaril@81
   336
				else	
insilmaril@81
   337
				{
insilmaril@81
   338
					QMessageBox::critical( 0, QObject::tr( "Critical Error" ),
insilmaril@81
   339
								   QString("unzip exit code:  %1").arg(zipProc->exitCode() ) +
insilmaril@81
   340
								   zipProc->getErrout() );
insilmaril@81
   341
					err=aborted;
insilmaril@81
   342
				}
insilmaril@81
   343
			} 
insilmaril@81
   344
		}
insilmaril@81
   345
	}
insilmaril@81
   346
#else
insilmaril@81
   347
    // Do this process creation using Win32 API.
insilmaril@81
   348
    //! Create process.
insilmaril@81
   349
    PROCESS_INFORMATION piProcInfo;
insilmaril@81
   350
    STARTUPINFO siStartInfo;
insilmaril@81
   351
insilmaril@81
   352
    // Initialize members of the PROCESS_INFORMATION structure.
insilmaril@81
   353
    ::ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) );
insilmaril@81
   354
insilmaril@81
   355
    // Set up members of the STARTUPINFO structure.
insilmaril@81
   356
    ::ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) );
insilmaril@81
   357
    siStartInfo.cb = sizeof(STARTUPINFO);
insilmaril@81
   358
insilmaril@81
   359
    // Create command line.
insilmaril@81
   360
    QString argv("unzip -o ");
insilmaril@81
   361
    argv.append(QDir::convertSeparators(zipName));
insilmaril@81
   362
    argv.append(" -d ");
insilmaril@81
   363
    argv.append(QDir::convertSeparators(zipDir.path()));
insilmaril@81
   364
insilmaril@81
   365
    // Create the child process.
insilmaril@81
   366
    if( !::CreateProcess(NULL, 
insilmaril@81
   367
        (LPWSTR)argv.unicode(), // command line
insilmaril@81
   368
        NULL, // process security attributes
insilmaril@81
   369
        NULL, // primary thread security attributes
insilmaril@81
   370
        TRUE, // handles are inherited
insilmaril@81
   371
        0, // creation flags
insilmaril@81
   372
        NULL, // use parent's environment
insilmaril@81
   373
        NULL, // use parent's current directory
insilmaril@81
   374
        &siStartInfo, // STARTUPINFO pointer
insilmaril@81
   375
        &piProcInfo) ) // receives PROCESS_INFORMATION
insilmaril@81
   376
    {
insilmaril@81
   377
        err = aborted;
insilmaril@81
   378
    }
insilmaril@81
   379
    else
insilmaril@81
   380
    {
insilmaril@81
   381
        // Wait for it to finish.
insilmaril@81
   382
        ::WaitForSingleObject( piProcInfo.hProcess, 10000 );
insilmaril@81
   383
    }
insilmaril@81
   384
#endif
insilmaril@81
   385
	return err;	
insilmaril@81
   386
}
insilmaril@81
   387
insilmaril@81
   388
bool loadStringFromDisk (const QString &fname, QString &s)
insilmaril@81
   389
{
insilmaril@81
   390
	s="";
insilmaril@81
   391
	QFile file ( fname);
insilmaril@81
   392
	if ( !file.open( QIODevice::ReadOnly ) ) return false;
insilmaril@81
   393
insilmaril@81
   394
	QTextStream ts( &file );
insilmaril@81
   395
	ts.setEncoding (QTextStream::UnicodeUTF8);
insilmaril@81
   396
	while ( !ts.atEnd() ) 
insilmaril@81
   397
		s+=ts.readLine()+"\n"; 
insilmaril@81
   398
	file.close();
insilmaril@81
   399
	return true;
insilmaril@81
   400
}
insilmaril@81
   401
insilmaril@81
   402
bool saveStringToDisk (const QString &fname, const QString &s)
insilmaril@81
   403
{
insilmaril@81
   404
	QFile file( fname);
insilmaril@81
   405
insilmaril@81
   406
	file.setName ( fname);
insilmaril@81
   407
	if ( !file.open( QIODevice::WriteOnly ) ) 
insilmaril@81
   408
	{
insilmaril@81
   409
		file.close();
insilmaril@81
   410
		return false;
insilmaril@81
   411
	}	
insilmaril@81
   412
insilmaril@81
   413
	// Write it finally, and write in UTF8, no matter what 
insilmaril@81
   414
	QTextStream ts( &file );
insilmaril@81
   415
	ts.setEncoding (QTextStream::UnicodeUTF8);
insilmaril@81
   416
	ts << s;
insilmaril@81
   417
	file.close();
insilmaril@81
   418
	return true;
insilmaril@81
   419
}
insilmaril@81
   420
insilmaril@81
   421
insilmaril@81
   422
ImagePreview::ImagePreview (QWidget *par=0): QLabel (par)
insilmaril@81
   423
{
insilmaril@81
   424
	fdia=(Q3FileDialog*)par;
insilmaril@81
   425
}
insilmaril@81
   426
insilmaril@81
   427
void ImagePreview::previewUrl( const Q3Url &u )
insilmaril@81
   428
{
insilmaril@81
   429
    QString path = u.path();
insilmaril@81
   430
    QPixmap pix( path );
insilmaril@81
   431
    if ( pix.isNull() )
insilmaril@81
   432
	{
insilmaril@81
   433
		// Strange: If we have fd->setMode (QFileDialog::ExistingFiles)
insilmaril@81
   434
		// in the filedialog, then there are 3 calls to previewURL 
insilmaril@81
   435
		// for each selection. And only the first is the actual selected file
insilmaril@81
   436
		// while the following 2 point to the directory above the current one.
insilmaril@81
   437
		// So here's my workaround:
insilmaril@81
   438
		
insilmaril@81
   439
		if (fdia && fdia->selectedFiles().count()==0)
insilmaril@81
   440
			setText( QObject::tr("This is not an image.") );
insilmaril@81
   441
		if (fdia &&fdia->selectedFiles().count()>1)
insilmaril@81
   442
			setText( QObject::tr("Sorry, no preview for\nmultiple selected files.") );
insilmaril@81
   443
	}	
insilmaril@81
   444
    else
insilmaril@81
   445
	{
insilmaril@81
   446
		float max_w=300;
insilmaril@81
   447
		float max_h=300;
insilmaril@81
   448
		float r;
insilmaril@81
   449
		if (pix.width()>max_w)
insilmaril@81
   450
		{
insilmaril@81
   451
			r=max_w / pix.width();
insilmaril@81
   452
			pix.resize(qRound(pix.width()*r), qRound(pix.height()*r));
insilmaril@81
   453
			// TODO not a resize, but a shrink/enlarge is needed here...
insilmaril@81
   454
		}
insilmaril@81
   455
		if (pix.height()>max_h)
insilmaril@81
   456
		{
insilmaril@81
   457
			r=max_h / pix.height();
insilmaril@81
   458
			pix.resize(qRound(pix.width()*r), qRound(pix.height()*r));
insilmaril@81
   459
			// TODO not a resize, but a shrink/enlarge is needed here...
insilmaril@81
   460
		}
insilmaril@81
   461
        setPixmap( pix );
insilmaril@81
   462
	}	
insilmaril@81
   463
}
insilmaril@81
   464
insilmaril@81
   465
ImageIO::ImageIO ()
insilmaril@81
   466
{
insilmaril@81
   467
	// Create list with supported image types
insilmaril@81
   468
	// foreach (QByteArray format, QImageWriter::supportedImageFormats()) 
insilmaril@81
   469
	// imageTypes.append( tr("%1...").arg(QString(format).toUpper()));
insilmaril@81
   470
	imageFilters.append ("Images (*.png *.jpg *.jpeg *.bmp *.bmp *.ppm *.xpm *.xbm)");
insilmaril@81
   471
	imageTypes.append ("PNG");
insilmaril@81
   472
	imageFilters.append ("Portable Network Graphics (*.png)");
insilmaril@81
   473
	imageTypes.append ("PNG");
insilmaril@81
   474
	imageFilters.append ("Joint Photographic Experts Group (*.jpg)");
insilmaril@81
   475
	imageTypes.append ("JPG");
insilmaril@81
   476
	imageFilters.append ("Joint Photographic Experts Group (*.jpeg)");
insilmaril@81
   477
	imageTypes.append ("JPG");
insilmaril@81
   478
	imageFilters.append ("Windows Bitmap (*.bmp)");
insilmaril@81
   479
	imageTypes.append ("BMP");
insilmaril@81
   480
	imageFilters.append ("Portable Pixmap (*.ppm)");
insilmaril@81
   481
	imageTypes.append ("PPM");
insilmaril@81
   482
	imageFilters.append ("X11 Bitmap (*.xpm)");
insilmaril@81
   483
	imageTypes.append ("XPM");
insilmaril@81
   484
	imageFilters.append ("X11 Bitmap (*.xbm)");
insilmaril@81
   485
	imageTypes.append ("XBM");
insilmaril@81
   486
}
insilmaril@81
   487
insilmaril@81
   488
QStringList ImageIO::getFilters()
insilmaril@81
   489
{
insilmaril@81
   490
	return imageFilters;
insilmaril@81
   491
}
insilmaril@81
   492
insilmaril@81
   493
QString ImageIO::getType(QString filter)
insilmaril@81
   494
{
insilmaril@81
   495
	for (int i=0;i<imageFilters.count()+1;i++)
insilmaril@81
   496
		if (imageFilters.at(i)==filter) return imageTypes.at(i);
insilmaril@81
   497
	return QString();	
insilmaril@81
   498
}
insilmaril@81
   499
insilmaril@81
   500