102 files changed, 10199 insertions, 7175 deletions
diff --git a/library/alarmserver.cpp b/library/alarmserver.cpp index a1a7142..1ee05c6 100644 --- a/library/alarmserver.cpp +++ b/library/alarmserver.cpp @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qdir.h> #include <qfile.h> #include <qmessagebox.h> #include <qtextstream.h> #include "qpeapplication.h" #include "global.h" #include "resource.h" #if defined(Q_WS_QWS) && !defined(QT_NO_COP) #include "qcopenvelope_qws.h" #endif #include "alarmserver.h" #include <qpe/timeconversion.h> #include <sys/types.h> #include <sys/stat.h> #include <stdlib.h> #include <unistd.h> struct timerEventItem { time_t UTCtime; QCString channel, message; int data; bool operator==( const timerEventItem &right ) const { return ( UTCtime == right.UTCtime && channel == right.channel && message == right.message && data == right.data ); @@ -149,228 +149,255 @@ void AlarmServer::initialize() } } static const char* atdir = "/var/spool/at/"; static bool triggerAtd( bool writeHWClock = FALSE ) { QFile trigger(QString(atdir) + "trigger"); if ( trigger.open(IO_WriteOnly|IO_Raw) ) { const char* data = #ifdef QT_QWS_CUSTOM //custom atd only writes HW Clock if we write a 'W' ( writeHWClock ) ? "W\n" : #endif data = "\n"; int len = strlen(data); int total_written = trigger.writeBlock(data,len); if ( total_written != len ) { QMessageBox::critical( 0, QObject::tr( "Out of Space" ), QObject::tr( "Unable to schedule alarm.\nFree some memory and try again." ) ); trigger.close(); QFile::remove( trigger.name() ); return FALSE; } return TRUE; } return FALSE; } void TimerReceiverObject::deleteTimer() { if ( !atfilename.isEmpty() ) { unlink( atfilename ); atfilename = QString::null; triggerAtd( FALSE ); } } void TimerReceiverObject::resetTimer() { const int maxsecs = 2147000; int total_written; QDateTime nearest = TimeConversion::fromUTC(nearestTimerEvent->UTCtime); QDateTime now = QDateTime::currentDateTime(); + if ( nearest < now ) + nearest = now; int secs = TimeConversion::secsTo( now, nearest ); if ( secs > maxsecs ) { // too far for millisecond timing secs = maxsecs; } // System timer (needed so that we wake from deep sleep), // from the Epoch in seconds. // int at_secs = TimeConversion::toUTC(nearest); // qDebug("reset timer to %d seconds from Epoch",at_secs); QString fn = atdir + QString::number(at_secs) + "." + QString::number(getpid()); if ( fn != atfilename ) { QFile atfile(fn+".new"); if ( atfile.open(IO_WriteOnly|IO_Raw) ) { // just wake up and delete the at file QString cmd = "#!/bin/sh\nrm " + fn; total_written = atfile.writeBlock(cmd.latin1(),cmd.length()); if ( total_written != int(cmd.length()) ) { QMessageBox::critical( 0, tr("Out of Space"), tr("Unable to schedule alarm.\n" "Please free up space and try again") ); atfile.close(); QFile::remove( atfile.name() ); return; } atfile.close(); unlink( atfilename ); QDir d; d.rename(fn+".new",fn); chmod(fn.latin1(),0755); atfilename = fn; triggerAtd( FALSE ); } else { qWarning("Cannot open atd file %s",fn.latin1()); } } // Qt timers (does the actual alarm) // from now in milliseconds // qDebug("AlarmServer waiting %d seconds",secs); startTimer( 1000 * secs + 500 ); } void TimerReceiverObject::timerEvent( QTimerEvent * ) { bool needSave = FALSE; killTimers(); if (nearestTimerEvent) { if ( nearestTimerEvent->UTCtime <= TimeConversion::toUTC(QDateTime::currentDateTime()) ) { +#ifndef QT_NO_COP QCopEnvelope e( nearestTimerEvent->channel, nearestTimerEvent->message ); e << TimeConversion::fromUTC( nearestTimerEvent->UTCtime ) << nearestTimerEvent->data; +#endif timerEventList.remove( nearestTimerEvent ); needSave = TRUE; } setNearestTimerEvent(); } else { resetTimer(); } if ( needSave ) saveState(); } /*! \class AlarmServer alarmserver.h - \brief The AlarmServer class provides alarms to be scheduled. + \brief The AlarmServer class allows alarms to be scheduled and unscheduled. + + Applications can schedule alarms with addAlarm() and can + unschedule alarms with deleteAlarm(). When the time for an alarm + to go off is reached the specified \link qcop.html QCop\endlink + message is sent on the specified channel (optionally with + additional data). + + Scheduling an alarm using this class is important (rather just using + a QTimer) since the machine may be asleep and needs to get woken up using + the Linux kernel which implements this at the kernel level to minimize + battery usage while asleep. - Applications which wish to be informed when a certain time instant - passes use the functions of AlarmServer to request so. + \ingroup qtopiaemb + \sa QCopEnvelope */ /*! - Schedules an alarm for \a when. Soon after this time, - \a message will be sent to \a channel, with \a data as - a parameter. \a message must be of the form "someMessage(int)". + Schedules an alarm to go off at (or soon after) time \a when. When + the alarm goes off, the \link qcop.html QCop\endlink \a message will + be sent to \a channel, with \a data as a parameter. + + If this function is called with exactly the same data as a previous + call the subsequent call is ignored, so there is only ever one alarm + with a given set of parameters. \sa deleteAlarm() */ void AlarmServer::addAlarm ( QDateTime when, const QCString& channel, const QCString& message, int data) { if ( qApp->type() == QApplication::GuiServer ) { bool needSave = FALSE; // Here we are the server so either it has been directly called from // within the server or it has been sent to us from a client via QCop if (!timerEventReceiver) timerEventReceiver = new TimerReceiverObject; timerEventItem *newTimerEventItem = new timerEventItem; newTimerEventItem->UTCtime = TimeConversion::toUTC( when ); newTimerEventItem->channel = channel; newTimerEventItem->message = message; newTimerEventItem->data = data; // explore the case of already having the event in here... QListIterator<timerEventItem> it( timerEventList ); for ( ; *it; ++it ) if ( *(*it) == *newTimerEventItem ) return; // if we made it here, it is okay to add the item... timerEventList.append( newTimerEventItem ); needSave = TRUE; // quicker than using setNearestTimerEvent() if ( nearestTimerEvent ) { if (newTimerEventItem->UTCtime < nearestTimerEvent->UTCtime) { nearestTimerEvent = newTimerEventItem; timerEventReceiver->killTimers(); timerEventReceiver->resetTimer(); } } else { nearestTimerEvent = newTimerEventItem; timerEventReceiver->resetTimer(); } if ( needSave ) saveState(); } else { +#ifndef QT_NO_COP QCopEnvelope e( "QPE/System", "addAlarm(QDateTime,QCString,QCString,int)" ); e << when << channel << message << data; +#endif } } /*! - Deletes previously scheduled alarms which match \a when, \a channel, \a message, - and \a data. + Deletes previously scheduled alarms which match \a when, \a channel, + \a message, and \a data. - Passing null values for \a when, \a channel, or \a message indicates "any". - Passing -1 for \a data indicates "any". + Passing null values for \a when, \a channel, or for the \link + qcop.html QCop\endlink \a message, acts as a wildcard meaning "any". + Similarly, passing -1 for \a data indicates "any". + + If there is no matching alarm, nothing happens. + + \sa addAlarm() - \sa deleteAlarm() */ void AlarmServer::deleteAlarm (QDateTime when, const QCString& channel, const QCString& message, int data) { if ( qApp->type() == QApplication::GuiServer) { bool needSave = FALSE; if ( timerEventReceiver != NULL ) { timerEventReceiver->killTimers(); // iterate over the list of events QListIterator<timerEventItem> it( timerEventList ); time_t deleteTime = TimeConversion::toUTC( when ); for ( ; *it; ++it ) { // if its a match, delete it if ( ( (*it)->UTCtime == deleteTime || when.isNull() ) && ( channel.isNull() || (*it)->channel == channel ) && ( message.isNull() || (*it)->message == message ) && ( data==-1 || (*it)->data == data ) ) { // if it's first, then we need to update the timer if ( (*it) == nearestTimerEvent ) { timerEventList.remove(*it); setNearestTimerEvent(); } else { timerEventList.remove(*it); } needSave = TRUE; } } if ( nearestTimerEvent ) timerEventReceiver->resetTimer(); } if ( needSave ) saveState(); } else { +#ifndef QT_NO_COP QCopEnvelope e( "QPE/System", "deleteAlarm(QDateTime,QCString,QCString,int)" ); e << when << channel << message << data; +#endif } } /*! Writes the system clock to the hardware clock. */ void Global::writeHWClock() { if ( !triggerAtd( TRUE ) ) { // atd not running? set it ourselves system("/sbin/hwclock --systohc"); // ##### UTC? } } diff --git a/library/applnk.cpp b/library/applnk.cpp index 9498f84..298581a 100644 --- a/library/applnk.cpp +++ b/library/applnk.cpp @@ -1,1145 +1,1457 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #define QTOPIA_INTERNAL_MIMEEXT +#define QTOPIA_INTERNAL_PRELOADACCESS +#define QTOPIA_INTERNAL_APPLNKASSIGN #include "applnk.h" #include <qpe/qpeapplication.h> #include <qpe/categories.h> #include <qpe/categoryselect.h> +#ifdef QWS #include <qpe/qcopenvelope_qws.h> +#endif #include <qpe/global.h> #include <qpe/mimetype.h> #include <qpe/config.h> #include <qpe/storage.h> #include <qpe/resource.h> #include <qdict.h> #include <qdir.h> #include <qregexp.h> #ifdef Q_WS_QWS #include <qgfx_qws.h> #endif #include <stdlib.h> int AppLnk::lastId = 5000; static int smallSize = 14; static int bigSize = 32; static QString safeFileName(const QString& n) { QString safename=n; - safename.replace(QRegExp("[^0-9A-Za-z.]"),"_"); // Njaard says this is broken + safename.replace(QRegExp("[^0-9A-Za-z.]"),"_"); safename.replace(QRegExp("^[^A-Za-z]*"),""); if ( safename.isEmpty() ) safename = "_"; return safename; } static bool prepareDirectories(const QString& lf) { if ( !QFile::exists(lf) ) { // May need to create directories QFileInfo fi(lf); if ( system(("mkdir -p "+fi.dirPath(TRUE))) ) return FALSE; } return TRUE; } class AppLnkPrivate { public: - QArray<int> mCat; + /* the size of the Pixmap */ + enum Size {Normal = 0, Big }; + AppLnkPrivate() { + /* we want one normal and one big item */ + mPixmaps = QArray<QPixmap>(2); + } + + QStringList mCatList; // always correct + QArray<int> mCat; // cached value; correct if not empty + QArray<QPixmap> mPixmaps; + + void updateCatListFromArray() + { + Categories cat( 0 ); + cat.load( categoryFileName() ); + mCatList = cat.labels("Document View",mCat); + } + + void setCatArrayDirty() + { + mCat.resize(0); + } + + void ensureCatArray() + { + if ( mCat.count() > 0 || mCatList.count()==0 ) + return; + + Categories cat( 0 ); + cat.load( categoryFileName() ); + mCat.resize( mCatList.count() ); + int i; + QStringList::ConstIterator it; + for ( i = 0, it = mCatList.begin(); it != mCatList.end(); + ++it, i++ ) { + + bool number; + int id = (*it).toInt( &number ); + if ( !number ) { + id = cat.id( "Document View", *it ); + if ( id == 0 ) + id = cat.addCategory( "Document View", *it ); + } + mCat[i] = id; + } + } }; /*! \class AppLnk applnk.h \brief The AppLnk class represents an application available on the system. - Information about applications are stored in Qtopia as ".desktop" files. - When read, these files are stored as AppLnk objects. + Every Qtopia application \e app has a corresponding \e app.desktop + file. When one of these files is read its data is stored as an + AppLnk object. + + The AppLnk class introduces some Qtopia-specific concepts, and + provides a variety of functions, as described in the following + sections. + \tableofcontents + + \target Types + \section1 Types + + Every AppLnk object has a \e type. For applications, games and + settings the type is \c Application; for documents the + type is the document's MIME type. + + \target files-and-links + \section1 Files and Links + + When you create an AppLnk (or more likely, a \link doclnk.html + DocLnk\endlink), you don't deal directly with filenames in the + filesystem. Instead you do this: + \code + DocLnk d; + d.setType("text/plain"); + d.setName("My Nicely Named Document / Whatever"); // Yes, "/" is legal. + \endcode + At this point, the file() and linkFile() are unknown. Normally + this is uninteresting, and the names become automatically known, + and more importantly, becomes reserved, when you ask what they are: + + \code + QString fn = d.file(); + \endcode + This invents a filename, and creates the file on disk (an empty + reservation file) to prevent the name being used by another + application. + + In some circumstances, you don't want to create the file if it + doesn't already exist (e.g. in the Document tab, some of the \link + doclnk.html DocLnk\endlink objects represented by icons are + DocLnk's created just for that view - they don't have + corresponding \c .desktop files. To avoid littering empty + reservation files around, we check in a few places to see whether + the file really needs to exist). + + \section1 Functionality + + AppLnk objects are created by calling the constructor with the + name of a \e .desktop file. The object can be checked for validity + using isValid(). + + The following functions are used to set or retrieve information + about the application: + \table + \header \i Get Function \i Set Function \i Short Description + \row \i \l name() \i \l setName() \i application's name + \row \i \l pixmap() \i \e none \i application's icon + \row \i \l bigPixmap() \i \e none \i application's large icon + \row \i \e none \i setIcon() \i sets the icon's filename + \row \i \l type() \i \l setType() \i see \link #Types Types\endlink above + \row \i \l rotation() \i \e none \i 0, 90, 180 or 270 degrees + \row \i \l comment() \i \l setComment() \i text for the Details dialog + \row \i \l exec() \i \l setExec() \i executable's filename + \row \i \l file() \i \e none \i document's filename + \row \i \l linkFile() \i \l setLinkFile() \i \e .desktop filename + \row \i \l mimeTypes() \i \e none \i the mime types the application can view or edit + \row \i \l categories() \i \l setCategories() \i \e{see the function descriptions} + \row \i \l fileKnown() \i \e none \i see \link +#files-and-links Files and Links\endlink above + \row \i \l linkFileKnown() \i \e none \i see \link +#files-and-links Files and Links\endlink above + \row \i \l property() \i \l setProperty() \i any AppLnk property + can be retrieved or set (if writeable) using these + \endtable + + To save an AppLnk to disk use writeLink(). To execute the + application that the AppLnk object refers to, use execute(). + + AppLnk's can be deleted from disk using removeLinkFile(). To + remove both the link and the application's executable use + removeFiles(). + + Icon sizes can be globally changed (but only for AppLnk objects + created after the calls) with setSmallIconSize() and + setBigIconSize(). + + \ingroup qtopiaemb */ /*! Sets the size used for small icons to \a small pixels. Only affects AppLnk objects created after the call. + + \sa smallIconSize() setIcon() */ void AppLnk::setSmallIconSize(int small) { smallSize = small; } /*! Returns the size used for small icons. + + \sa setSmallIconSize() setIcon() */ int AppLnk::smallIconSize() { return smallSize; } /*! Sets the size used for large icons to \a big pixels. Only affects AppLnk objects created after the call. + + \sa bigIconSize() setIcon() */ void AppLnk::setBigIconSize(int big) { bigSize = big; } /*! Returns the size used for large icons. + + \sa setBigIconSize() setIcon() */ int AppLnk::bigIconSize() { return bigSize; } /*! \fn QString AppLnk::name() const - Returns the Name property. + Returns the Name property. This is the user-visible name for the + document or application, not the filename. + + See \link #files-and-links Files and Links\endlink. + + \sa setName() */ /*! \fn QString AppLnk::exec() const - Returns the Exec property. This is the executable program associated - with the AppLnk. + Returns the Exec property. This is the name of the executable + program associated with the AppLnk. + + \sa setExec() */ /*! \fn QString AppLnk::rotation() const - Returns the Rotation property. + Returns the Rotation property. The value is 0, 90, 180 or 270 + degrees. */ /*! \fn QString AppLnk::comment() const Returns the Comment property. + + \sa setComment() */ /*! \fn QStringList AppLnk::mimeTypes() const Returns the MimeTypes property. This is the list of MIME types that the application can view or edit. */ /*! \fn const QArray<int>& AppLnk::categories() const Returns the Categories property. + + See the CategoryWidget for more details. + + \sa setCategories() */ const QArray<int>& AppLnk::categories() const { + d->ensureCatArray(); return d->mCat; } /*! \fn int AppLnk::id() const Returns the id of the AppLnk. If the AppLnk is not in an AppLnkSet, this value is 0, otherwise it is a value that is unique for the duration of the current process. + + \sa AppLnkSet::find() */ /*! \fn bool AppLnk::isValid() const - Returns whether this AppLnk is valid. + Returns TRUE if this AppLnk is valid; otherwise returns FALSE. */ /*! Creates an invalid AppLnk. \sa isValid() */ AppLnk::AppLnk() { mId = 0; d = new AppLnkPrivate(); } /*! - Loads \a file as an AppLnk. + Loads \a file (e.g. \e app.desktop) as an AppLnk. + + \sa writeLink() */ AppLnk::AppLnk( const QString &file ) { QStringList sl; d = new AppLnkPrivate(); if ( !file.isNull() ) { Config config( file, Config::File ); if ( config.isValid() ) { config.setGroup( "Desktop Entry" ); mName = config.readEntry( "Name", file ); mExec = config.readEntry( "Exec" ); mType = config.readEntry( "Type", QString::null ); mIconFile = config.readEntry( "Icon", QString::null ); mRotation = config.readEntry( "Rotation", "" ); mComment = config.readEntry( "Comment", QString::null ); + // MIME types are case-insensitive. mMimeTypes = config.readListEntry( "MimeType", ';' ); + for (QStringList::Iterator it=mMimeTypes.begin(); it!=mMimeTypes.end(); ++it) + *it = (*it).lower(); mMimeTypeIcons = config.readListEntry( "MimeTypeIcons", ';' ); mLinkFile = file; mFile = config.readEntry("File", QString::null); - sl = config.readListEntry("Categories", ';'); - } - } - // let's try our darndest to create categories... - Categories cat( 0 ); - cat.load( categoryFileName() ); - d->mCat.resize( sl.count() ); - int i; - QStringList::Iterator it; - for ( i = 0, it = sl.begin(); it != sl.end(); - ++it, i++ ) { - - bool number; - int id = (*it).toInt( &number ); - if ( !number ) { - // convert from old school... - id = cat.id( "Document Viewer", *it ); - if ( id == 0 ) - id = cat.addCategory( "Document Viewer", *it ); + if ( mFile[0] != '/' ) { + int slash = file.findRev('/'); + if ( slash >= 0 ) { + mFile = file.left(slash) + '/' + mFile; + } + } + d->mCatList = config.readListEntry("Categories", ';'); + if ( d->mCatList[0].toInt() < -1 ) { + // numeric cats in file! convert to text + Categories cat( 0 ); + cat.load( categoryFileName() ); + d->mCat.resize( d->mCatList.count() ); + int i; + QStringList::ConstIterator it; + for ( i = 0, it = d->mCatList.begin(); it != d->mCatList.end(); + ++it, i++ ) { + bool number; + int id = (*it).toInt( &number ); + if ( !number ) { + // convert from text + id = cat.id( "Document View", *it ); + if ( id == 0 ) + id = cat.addCategory( "Document View", *it ); + } + d->mCat[i] = id; + } + d->updateCatListFromArray(); + } } - d->mCat[i] = id; } mId = 0; } +AppLnk& AppLnk::operator=(const AppLnk ©) +{ + if ( mId ) + qWarning("Deleting AppLnk that is in an AppLnkSet"); + if ( d ) + delete d; + + + mName = copy.mName; + + /* remove for Qtopia 3.0 -zecke */ + mPixmap = copy.mPixmap; + mBigPixmap = copy.mBigPixmap; + + mExec = copy.mExec; + mType = copy.mType; + mRotation = copy.mRotation; + mComment = copy.mComment; + mFile = copy.mFile; + mLinkFile = copy.mLinkFile; + mIconFile = copy.mIconFile; + mMimeTypes = copy.mMimeTypes; + mMimeTypeIcons = copy.mMimeTypeIcons; + mId = 0; + d = new AppLnkPrivate(); + d->mCat = copy.d->mCat; + d->mCatList = copy.d->mCatList; + d->mPixmaps = copy.d->mPixmaps; + + return *this; +} /*! - Returns a small pixmap associated with the application. + protected internally to share code + should I document that at all? + I don't know the TT style for that */ -const QPixmap& AppLnk::pixmap() const -{ - if ( mPixmap.isNull() ) { +const QPixmap& AppLnk::pixmap( int pos, int size ) const { + if ( d->mPixmaps[pos].isNull() ) { AppLnk* that = (AppLnk*)this; if ( mIconFile.isEmpty() ) { MimeType mt(type()); - that->mPixmap = mt.pixmap(); - if ( that->mPixmap.isNull() ) - that->mPixmap = Resource::loadPixmap("UnknownDocument-14"); - return that->mPixmap; + that->d->mPixmaps[pos] = mt.pixmap(); + if ( that->d->mPixmaps[pos].isNull() ) + that->d->mPixmaps[pos].convertFromImage( + Resource::loadImage("UnknownDocument") + .smoothScale( size, size ) ); + return that->d->mPixmaps[pos]; } QImage unscaledIcon = Resource::loadImage( that->mIconFile ); - that->mPixmap.convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) ); - that->mBigPixmap.convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) ); - return that->mPixmap; + if ( unscaledIcon.isNull() ) { + qDebug( "Cannot find icon: %s", that->mIconFile.latin1() ); + that->d->mPixmaps[pos].convertFromImage( + Resource::loadImage("UnknownDocument") + .smoothScale( size, size ) ); + } else { + that->d->mPixmaps[0].convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) ); + that->d->mPixmaps[1].convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) ); + } + return that->d->mPixmaps[0]; } return mPixmap; } /*! + Returns a small pixmap associated with the application. + + \sa bigPixmap() setIcon() +*/ +const QPixmap& AppLnk::pixmap() const +{ + if ( d->mPixmaps[0].isNull() ) { + return pixmap(AppLnkPrivate::Normal, smallSize ); + } + return d->mPixmaps[0]; +} + +/*! Returns a large pixmap associated with the application. + + \sa pixmap() setIcon() */ const QPixmap& AppLnk::bigPixmap() const { - if ( mBigPixmap.isNull() ) { - AppLnk* that = (AppLnk*)this; - if ( mIconFile.isEmpty() ) { - MimeType mt(type()); - that->mBigPixmap = mt.bigPixmap(); - if ( that->mBigPixmap.isNull() ) - that->mBigPixmap = Resource::loadPixmap("UnknownDocument"); - return that->mBigPixmap; - } - QImage unscaledIcon = Resource::loadImage( that->mIconFile ); - that->mPixmap.convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) ); - that->mBigPixmap.convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) ); - return that->mBigPixmap; + if ( d->mPixmaps[1].isNull() ) { + return pixmap( AppLnkPrivate::Big, bigSize ); } return mBigPixmap; } /*! - Returns the type of the application. + Returns the type of the AppLnk. For applications, games and + settings the type is \c Application; for documents the type is the + document's MIME type. */ QString AppLnk::type() const { if ( mType.isNull() ) { AppLnk* that = (AppLnk*)this; - MimeType mt(file()); - that->mType = mt.id(); - return that->mType; + QString f = file(); + if ( !f.isNull() ) { + MimeType mt(f); + that->mType = mt.id(); + return that->mType; + } } return mType; } /*! Returns the file associated with the AppLnk. - \sa exec() + \sa exec() name() */ QString AppLnk::file() const { if ( mFile.isNull() ) { - AppLnk* that = (AppLnk*)this; // copy? + AppLnk* that = (AppLnk*)this; QString ext = MimeType(mType).extension(); if ( !ext.isEmpty() ) ext = "." + ext; if ( !mLinkFile.isEmpty() ) { that->mFile = mLinkFile.right(8)==".desktop" // 8 = strlen(".desktop") ? mLinkFile.left(mLinkFile.length()-8) : mLinkFile; } else if ( mType.contains('/') ) { that->mFile = QString(getenv("HOME"))+"/Documents/"+mType+"/"+safeFileName(that->mName); - if ( QFile::exists(that->mFile+ext) || QFile::exists(that->mFile+".desktop") ) { // a .desktop with the same name exists + /* + * A file with the same name or a .desktop file already exists + */ + if ( QFile::exists(that->mFile+ext) || QFile::exists(that->mFile+".desktop") ) { int n=1; - qWarning("AppLnk::file() n=1 %s", that->mFile.latin1() ); QString nn; while (QFile::exists((nn=(that->mFile+"_"+QString::number(n)))+ext) || QFile::exists(nn+".desktop")) n++; that->mFile = nn; - qWarning("AppLnl::file() now mFile is %s", that->mFile.latin1() ); } that->mLinkFile = that->mFile+".desktop"; that->mFile += ext; } prepareDirectories(that->mFile); - QFile f(that->mFile); - if ( !f.open(IO_WriteOnly) ) - that->mFile = QString::null; - return that->mFile; + if ( !that->mFile.isEmpty() ) { + QFile f(that->mFile); + if ( !f.open(IO_WriteOnly) ) + that->mFile = QString::null; + return that->mFile; + } } return mFile; } /*! - Returns the desktop file coresponding to this AppLnk. + Returns the desktop file corresponding to this AppLnk. - \sa file(), exec() + \sa file() exec() name() */ QString AppLnk::linkFile() const { if ( mLinkFile.isNull() ) { AppLnk* that = (AppLnk*)this; if ( type().contains('/') ) { StorageInfo storage; const FileSystem *fs = storage.fileSystemOf( that->mFile ); - if ( fs && ( fs->isRemovable() || fs->disk() == "/dev/mtdblock6" || fs->disk() == "tmpfs" ) ) { + /* tmpfs + and ramfs are available too but not removable + * either we fix storage or add this + */ + if ( fs && ( fs->isRemovable() || fs->disk() == "/dev/mtdblock6" || fs->disk() == "tmpfs") ) { that->mLinkFile = fs->path(); } else that->mLinkFile = getenv( "HOME" ); that->mLinkFile += "/Documents/"+type()+"/"+safeFileName(that->mName); - if ( QFile::exists(that->mLinkFile+".desktop") ) { // ok the file exists lets check if we point to the same file - int n=1; - QString nn; - AppLnk lnk( that->mLinkFile+".desktop" ); - if(that->file() != lnk.file() ){ - qWarning("AppLnk::linkFile exists %s", that->mLinkFile.latin1() ); - while (QFile::exists((nn=that->mLinkFile+"_"+QString::number(n))+".desktop")){ - n++; - AppLnk lnk(nn ); // just to be sure - if(lnk.file() ==that->file() ){ - break; - } - } - that->mLinkFile = nn; - } + + /* the desktop file exists make sure we don't point to the same file */ + if ( QFile::exists(that->mLinkFile+".desktop") ) { + AppLnk lnk( that->mLinkFile + ".desktop" ); + + /* the linked is different */ + if(that->file() != lnk.file() ) { + int n = 1; + QString nn; + while (QFile::exists((nn=that->mLinkFile+"_"+QString::number(n))+".desktop")) { + n++; + /* just to be sure */ + AppLnk lnk(nn ); + if (lnk.file() == that->file() ) + break; + } + that->mLinkFile = nn; + } } that->mLinkFile += ".desktop"; - qWarning("AppLnk::linkFile is %s", that->mLinkFile.latin1() ); storeLink(); } return that->mLinkFile; } return mLinkFile; } /*! Copies \a copy. */ AppLnk::AppLnk( const AppLnk © ) { mName = copy.mName; mPixmap = copy.mPixmap; mBigPixmap = copy.mBigPixmap; mExec = copy.mExec; mType = copy.mType; mRotation = copy.mRotation; mComment = copy.mComment; mFile = copy.mFile; mLinkFile = copy.mLinkFile; mIconFile = copy.mIconFile; mMimeTypes = copy.mMimeTypes; mMimeTypeIcons = copy.mMimeTypeIcons; mId = 0; d = new AppLnkPrivate(); d->mCat = copy.d->mCat; + d->mCatList = copy.d->mCatList; + d->mPixmaps = copy.d->mPixmaps; } /*! - Destroys the AppLnk. Note that if the AppLnk is current a member of - an AppLnkSet, this will produce a run-time warning. + Destroys the AppLnk. Note that if the AppLnk is currently a member + of an AppLnkSet, this will produce a run-time warning. - \sa AppLnkSet::add(), AppLnkSet::remove() + \sa AppLnkSet::add() AppLnkSet::remove() */ AppLnk::~AppLnk() { if ( mId ) qWarning("Deleting AppLnk that is in an AppLnkSet"); if ( d ) delete d; } /*! + \overload Executes the application associated with this AppLnk. + + \sa exec() */ void AppLnk::execute() const { execute(QStringList()); } /*! Executes the application associated with this AppLnk, with \a args as arguments. + + \sa exec() */ void AppLnk::execute(const QStringList& args) const { #ifdef Q_WS_QWS if ( !mRotation.isEmpty() ) { // ######## this will only work in the server int rot = QPEApplication::defaultRotation(); rot = (rot+mRotation.toInt())%360; QCString old = getenv("QWS_DISPLAY"); setenv("QWS_DISPLAY", QString("Transformed:Rot%1:0").arg(rot), 1); invoke(args); setenv("QWS_DISPLAY", old.data(), 1); } else #endif invoke(args); } /*! Invokes the application associated with this AppLnk, with \a args as arguments. Rotation is not taken into account by - this function, you should not call it directly. + this function, so you should not call it directly. \sa execute() */ void AppLnk::invoke(const QStringList& args) const { Global::execute( exec(), args[0] ); } /*! Sets the Exec property to \a exec. - \sa exec() + \sa exec() name() */ void AppLnk::setExec( const QString& exec ) { mExec = exec; } /*! Sets the Name property to \a docname. \sa name() */ void AppLnk::setName( const QString& docname ) { mName = docname; } /*! Sets the File property to \a filename. - \sa file() + \sa file() name() */ void AppLnk::setFile( const QString& filename ) { mFile = filename; } /*! Sets the LinkFile property to \a filename. \sa linkFile() */ void AppLnk::setLinkFile( const QString& filename ) { mLinkFile = filename; } /*! Sets the Comment property to \a comment. + This text is displayed in the 'Details Dialog', for example if the + user uses the 'press-and-hold' gesture. + \sa comment() */ void AppLnk::setComment( const QString& comment ) { mComment = comment; } /*! Sets the Type property to \a type. + For applications, games and settings the type should be \c + Application; for documents the type should be the document's MIME + type. + \sa type() */ void AppLnk::setType( const QString& type ) { mType = type; } /*! - Sets the Icon property to \a iconname. + \fn QString AppLnk::icon() const + + Returns the Icon property. + + \sa setIcon() +*/ + +/*! + Sets the Icon property to \a iconname. This is the filename from + which the pixmap() and bigPixmap() are obtained. - \sa pixmap(), bigPixmap() + \sa icon() setSmallIconSize() setBigIconSize() */ void AppLnk::setIcon( const QString& iconname ) { mIconFile = iconname; QImage unscaledIcon = Resource::loadImage( mIconFile ); - mPixmap.convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) ); - mBigPixmap.convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) ); + d->mPixmaps[0].convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) ); + d->mPixmaps[1].convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) ); } /*! Sets the Categories property to \a c. + See the CategoryWidget for more details. + \sa categories() */ void AppLnk::setCategories( const QArray<int>& c ) { d->mCat = c; + d->updateCatListFromArray(); } /*! \fn QStringList AppLnk::mimeTypeIcons() const Returns the MimeTypeIcons property of the AppLnk. */ /*! - Attempts to ensure that the link file for this AppLnk exists, including - creating any required directories. Returns TRUE if successful. + Attempts to ensure that the link file for this AppLnk exists, + including creating any required directories. Returns TRUE if + successful; otherwise returns FALSE. + + You should not need to use this function. */ bool AppLnk::ensureLinkExists() const { QString lf = linkFile(); return prepareDirectories(lf); } /*! - Commits the AppLnk to disk. Returns whether the operation succeeded. + Commits the AppLnk to disk. Returns TRUE if the operation succeeded; + otherwise returns FALSE. - The "linkChanged(QString)" message is sent to the - "QPE/System" QCop channel as a result. + In addition, the "linkChanged(QString)" message is sent to the + "QPE/System" \link qcop.html QCop\endlink channel. */ bool AppLnk::writeLink() const { // Only re-writes settable parts QString lf = linkFile(); if ( !ensureLinkExists() ) return FALSE; storeLink(); return TRUE; } +/*! + \internal +*/ void AppLnk::storeLink() const { Config config( mLinkFile, Config::File ); config.setGroup("Desktop Entry"); config.writeEntry("Name",mName); if ( !mIconFile.isNull() ) config.writeEntry("Icon",mIconFile); config.writeEntry("Type",type()); if ( !mComment.isNull() ) config.writeEntry("Comment",mComment); - config.writeEntry("File",file()); - // write out the id... - int i; - QStringList sl; - for ( i = 0; i < int(d->mCat.count()); i++ ) { - sl.append( QString::number( d->mCat[i] ) ); - } - config.writeEntry( "Categories", sl, ';' ); - + QString f = file(); + int i = 0; + while ( i < (int)f.length() && i < (int)mLinkFile.length() && f[i] == mLinkFile[i] ) + i++; + while ( i && f[i] != '/' ) + i--; + // simple case where in the same directory + if ( mLinkFile.find( '/', i + 1 ) < 0 ) + f = f.mid(i+1); + // ### could do relative ie ../../otherDocs/file.doc + config.writeEntry("File",f); + config.writeEntry( "Categories", d->mCatList, ';' ); + +#ifndef QT_NO_COP QCopEnvelope e("QPE/System", "linkChanged(QString)"); e << mLinkFile; +#endif } /*! Sets the property named \a key to \a value. + + \sa property() */ void AppLnk::setProperty(const QString& key, const QString& value) { if ( ensureLinkExists() ) { Config cfg(linkFile(), Config::File); cfg.writeEntry(key,value); } } /*! Returns the property named \a key. + + \sa setProperty() */ QString AppLnk::property(const QString& key) const { QString lf = linkFile(); if ( !QFile::exists(lf) ) return QString::null; Config cfg(lf, Config::File); return cfg.readEntry(key); } - bool AppLnk::isPreloaded() const { // Preload information is stored in the Launcher config in v1.5. Config cfg("Launcher"); cfg.setGroup("Preload"); QStringList apps = cfg.readListEntry("Apps",','); if (apps.contains(exec())) return true; return false; } void AppLnk::setPreloaded(bool yesNo) { // Preload information is stored in the Launcher config in v1.5. Config cfg("Launcher"); cfg.setGroup("Preload"); QStringList apps = cfg.readListEntry("Apps", ','); if (apps.contains(exec()) && !yesNo) apps.remove(exec()); else if (yesNo && !apps.contains(exec())) apps.append(exec()); cfg.writeEntry("Apps", apps, ','); } /*! - Deletes both the linkFile() and file() associated with this AppLnk. + Deletes both the linkFile() and the file() associated with this AppLnk. + + \sa removeLinkFile() */ void AppLnk::removeFiles() { bool valid = isValid(); if ( !valid || !linkFileKnown() || QFile::remove(linkFile()) ) { if ( QFile::remove(file()) ) { +#ifndef QT_NO_COP QCopEnvelope e("QPE/System", "linkChanged(QString)"); if ( linkFileKnown() ) e << linkFile(); else e << file(); +#endif } else if ( valid ) { // restore link writeLink(); } } } /*! - Delete the linkFile(), leaving any file() untouched. + Deletes the linkFile(), leaving any file() untouched. + + \sa removeFiles() */ void AppLnk::removeLinkFile() { if ( isValid() && linkFileKnown() && QFile::remove(linkFile()) ) { +#ifndef QT_NO_COP QCopEnvelope e("QPE/System", "linkChanged(QString)"); e << linkFile(); +#endif } } class AppLnkSetPrivate { public: AppLnkSetPrivate() { typPix.setAutoDelete(TRUE); typPixBig.setAutoDelete(TRUE); typName.setAutoDelete(TRUE); } QDict<QPixmap> typPix; QDict<QPixmap> typPixBig; QDict<QString> typName; }; /*! \class AppLnkSet applnk.h \brief The AppLnkSet class is a set of AppLnk objects. */ /*! \fn QStringList AppLnkSet::types() const - Returns the list of types in the set. + Returns the list of \link applnk.html#Types types\endlink in the set. + + For applications, games and settings the type is \c Application; + for documents the type is the document's MIME type. \sa AppLnk::type(), typeName(), typePixmap(), typeBigPixmap() */ /*! \fn const QList<AppLnk>& AppLnkSet::children() const Returns the members of the set. */ /*! Constructs an empty AppLnkSet. */ AppLnkSet::AppLnkSet() : d(new AppLnkSetPrivate) { } /*! Constructs an AppLnkSet that contains AppLnk objects representing - all the files in a \a directory (recursively). + all the files in the given \a directory (and any subdirectories + recursively). - The directories may contain ".directory" files which overrides - any AppLnk::type() value of AppLnk objects found in the directory. + \omit + The directories may contain ".directory" files which override + any AppLnk::type() values for AppLnk objects found in the directory. This allows simple localization of application types. + \endomit */ AppLnkSet::AppLnkSet( const QString &directory ) : d(new AppLnkSetPrivate) { QDir dir( directory ); mFile = directory; findChildren(directory,QString::null,QString::null); } /*! - Detaches all AppLnk objects from the set. The set become empty - and the call becomes responsible for deleting the AppLnk objects. + Detaches all AppLnk objects from the set. The set become empty and + the caller becomes responsible for deleting the AppLnk objects. */ void AppLnkSet::detachChildren() { QListIterator<AppLnk> it( mApps ); for ( ; it.current(); ) { AppLnk* a = *it; ++it; a->mId = 0; } mApps.clear(); } /*! - Destroys the set, deleting all AppLnk objects it contains. + Destroys the set, deleting all the AppLnk objects it contains. \sa detachChildren() */ AppLnkSet::~AppLnkSet() { QListIterator<AppLnk> it( mApps ); for ( ; it.current(); ) { AppLnk* a = *it; ++it; a->mId = 0; delete a; } delete d; } void AppLnkSet::findChildren(const QString &dr, const QString& typ, const QString& typName, int depth) { depth++; if ( depth > 10 ) return; QDir dir( dr ); QString typNameLocal = typName; if ( dir.exists( ".directory" ) ) { Config config( dr + "/.directory", Config::File ); config.setGroup( "Desktop Entry" ); typNameLocal = config.readEntry( "Name", typNameLocal ); if ( !typ.isEmpty() ) { QString iconFile = config.readEntry( "Icon", "AppsIcon" ); QImage unscaledIcon = Resource::loadImage( iconFile ); QPixmap pm, bpm; pm.convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) ); bpm.convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) ); d->typPix.insert(typ, new QPixmap(pm)); d->typPixBig.insert(typ, new QPixmap(bpm)); d->typName.insert(typ, new QString(typNameLocal)); } } const QFileInfoList *list = dir.entryInfoList(); if ( list ) { QFileInfo* fi; bool cadded=FALSE; for ( QFileInfoListIterator it(*list); (fi=*it); ++it ) { QString bn = fi->fileName(); if ( bn[0] != '.' && bn != "CVS" ) { if ( fi->isDir() ) { QString c = typ.isNull() ? bn : typ+"/"+bn; QString d = typNameLocal.isNull() ? bn : typNameLocal+"/"+bn; findChildren(fi->filePath(), c, d, depth ); } else { if ( fi->extension(FALSE) == "desktop" ) { AppLnk* app = new AppLnk( fi->filePath() ); #ifdef QT_NO_QWS_MULTIPROCESS if ( !Global::isBuiltinCommand( app->exec() ) ) delete app; else #endif { if ( !typ.isEmpty() ) { if ( !cadded ) { typs.append(typ); cadded = TRUE; } app->setType(typ); } add(app); } } } } } } } /*! - Adds \a f to the set. The set takes over responsibility for deleting \a f. + Adds AppLnk \a f to the set. The set takes responsibility for + deleting \a f. \sa remove() */ void AppLnkSet::add( AppLnk *f ) { if ( f->mId == 0 ) { AppLnk::lastId++; f->mId = AppLnk::lastId; mApps.append( f ); } else { qWarning("Attempt to add an AppLnk twice"); } } /*! - Removes \a f to the set, returning whether \a f was in the set. - The caller becomes responsible for deleting \a f. + Removes AppLnk \a f to the set. The caller becomes responsible for + deleting \a f. Returns TRUE if \a f was in the set; otherwise + returns FALSE. \sa add() */ bool AppLnkSet::remove( AppLnk *f ) { if ( mApps.remove( f ) ) { f->mId = 0; return TRUE; } return FALSE; } + /*! Returns the localized name for type \a t. + + For applications, games and settings the type is \c Application; + for documents the type is the document's MIME type. */ QString AppLnkSet::typeName( const QString& t ) const { QString *st = d->typName.find(t); return st ? *st : QString::null; } /*! Returns the small pixmap associated with type \a t. + + For applications, games and settings the type is \c Application; + for documents the type is the document's MIME type. */ QPixmap AppLnkSet::typePixmap( const QString& t ) const { QPixmap *pm = d->typPix.find(t); return pm ? *pm : QPixmap(); } /*! Returns the large pixmap associated with type \a t. + + For applications, games and settings the type is \c Application; + for documents the type is the document's MIME type. */ QPixmap AppLnkSet::typeBigPixmap( const QString& t ) const { QPixmap *pm = d->typPixBig.find(t); return pm ? *pm : QPixmap(); } /*! Returns the AppLnk with the given \a id. */ const AppLnk *AppLnkSet::find( int id ) const { QListIterator<AppLnk> it( children() ); for ( ; it.current(); ++it ) { const AppLnk *app = it.current(); if ( app->id() == id ) return app; } return 0; } /*! Returns the AppLnk with the given \a exec attribute. */ const AppLnk *AppLnkSet::findExec( const QString& exec ) const { QListIterator<AppLnk> it( children() ); for ( ; it.current(); ++it ) { const AppLnk *app = it.current(); if ( app->exec() == exec ) return app; } return 0; } /*! \class DocLnkSet applnk.h \brief The DocLnkSet class is a set of DocLnk objects. */ /*! \fn const QList<DocLnk>& DocLnkSet::children() const Returns the members of the set. */ /*! Constructs an empty DocLnkSet. \sa appendFrom() */ DocLnkSet::DocLnkSet() { } /*! - Constructs an DocLnkSet that contains DocLnk objects representing - all the files in a \a directory (recursively). + Constructs a DocLnkSet that contains DocLnk objects representing all + the files in the \a directory (and any subdirectories, recursively). If \a mimefilter is not null, only documents with a MIME type matching \a mimefilter are selected. The value may contain multiple wild-card patterns separated by ";", - such as "*o/mpeg;audio/x-wav". + such as \c{*o/mpeg;audio/x-wav}. + + See also \link applnk.html#files-and-links Files and Links\endlink. + */ DocLnkSet::DocLnkSet( const QString &directory, const QString& mimefilter ) : AppLnkSet() { QDir dir( directory ); mFile = dir.dirName(); QDict<void> reference; QStringList subFilter = QStringList::split(";", mimefilter); QValueList<QRegExp> mimeFilters; for( QStringList::Iterator it = subFilter.begin(); it != subFilter.end(); ++ it ) mimeFilters.append( QRegExp(*it, FALSE, TRUE) ); findChildren(directory, mimeFilters, reference); const QList<DocLnk> &list = children(); for ( QListIterator<DocLnk> it( list ); it.current(); ++it ) { reference.remove( (*it)->file() ); } for ( QDictIterator<void> dit(reference); dit.current(); ++dit ) { if ( dit.current() == (void*)2 ) { // Unreferenced, make an unwritten link DocLnk* dl = new DocLnk; QFileInfo fi( dit.currentKey() ); dl->setFile(fi.filePath()); dl->setName(fi.baseName()); // #### default to current path? // dl->setCategories( ... ); bool match = mimefilter.isNull(); if ( !match ) for( QValueList<QRegExp>::Iterator it = mimeFilters.begin(); it != mimeFilters.end() && !match; ++ it ) if ( (*it).match(dl->type()) >= 0 ) match = TRUE; if ( match /* && dl->type() != "application/octet-stream" */ && !!dl->exec() ) add(dl); else delete dl; } } } // other becomes empty /*! Transfers all DocLnk objects from \a other to this set. \a other becomes empty. */ void DocLnkSet::appendFrom( DocLnkSet& other ) { if ( &other == this ) return; QListIterator<AppLnk> it( other.mApps ); for ( ; it.current(); ) { mApps.append(*it); ++it; } other.mApps.clear(); } void DocLnkSet::findChildren(const QString &dr, const QValueList<QRegExp> &mimeFilters, QDict<void> &reference, int depth) { depth++; if ( depth > 10 ) return; QDir dir( dr ); + /* Opie got a different approach + * I guess it's geek vs. consumer + * in this case to be discussed + */ + if ( dir.exists( ".Qtopia-ignore" ) ) + return; + const QFileInfoList *list = dir.entryInfoList(); if ( list ) { QFileInfo* fi; for ( QFileInfoListIterator it(*list); (fi=*it); ++it ) { QString bn = fi->fileName(); - if ( bn[0] != '.' && bn != "CVS" ) { - if ( fi->isDir() ) { - findChildren(fi->filePath(), mimeFilters, reference, depth); + if ( bn[0] != '.' ) { + if ( fi->isDir() ) { + if ( bn != "CVS" && bn != "Qtopia" && bn != "QtPalmtop" ) + findChildren(fi->filePath(), mimeFilters, reference, depth); } else { if ( fi->extension(FALSE) == "desktop" ) { DocLnk* dl = new DocLnk( fi->filePath() ); QFileInfo fi2(dl->file()); bool match = FALSE; if ( !fi2.exists() ) { dir.remove( dl->file() ); } if ( mimeFilters.count() == 0 ) { add( dl ); match = TRUE; } else { for( QValueList<QRegExp>::ConstIterator it = mimeFilters.begin(); it != mimeFilters.end(); ++ it ) { if ( (*it).match(dl->type()) >= 0 ) { add(dl); match = TRUE; } } } if ( !match ) delete dl; } else { if ( !reference.find(fi->fileName()) ) reference.insert(fi->filePath(), (void*)2); } } } } } } /*! \class DocLnk applnk.h \brief The DocLnk class represents loaded document references. */ /*! \fn DocLnk::DocLnk( const DocLnk &o ) Copies \a o. */ /*! Constructs a DocLnk from a valid .desktop \a file or a new .desktop \a file for other files. */ DocLnk::DocLnk( const QString &file ) : AppLnk(file) { init(file); } /*! Constructs a DocLnk from a valid .desktop \a file or a new .desktop - \a file for other files. If \a may_be_desktopfile is TRUE, then \a file - is first attempted to be read as a .desktop file. + \a file for other files. If \a may_be_desktopfile is TRUE, then an + attempt is made to read \a file as a .desktop file; if that fails it + is read as a normal file. */ DocLnk::DocLnk( const QString &file, bool may_be_desktopfile ) : AppLnk(may_be_desktopfile ? file : QString::null) { init(file); } void DocLnk::init(const QString &file) { if ( isValid() ) { #ifndef FORCED_DIR_STRUCTURE_WAY if ( mType.isNull() ) // try to infer it #endif { int s0 = file.findRev('/'); if ( s0 > 0 ) { int s1 = file.findRev('/',s0-1); if ( s1 > 0 ) { int s2 = file.findRev('/',s1-1); if ( s2 > 0 ) { mType = file.mid(s2+1,s0-s2-1); } } } } } else if ( QFile::exists(file) ) { QString n = file; - n.replace(QRegExp("\\..*"),""); n.replace(QRegExp(".*/"),""); + n.replace(QRegExp("\\..*"),""); setName( n ); setFile( file ); } MimeType mt(mType); if( mt.application() ) mExec = mt.application()->exec(); } /*! Constructs an invalid DocLnk. */ DocLnk::DocLnk() { } /*! - Destroys the DocLnk. As with AppLnk objects, a run-time error + Destroys the DocLnk. Just like AppLnk objects, a run-time error occurs if the DocLnk is a member of a DocLnkSet (or AppLnkSet). */ DocLnk::~DocLnk() { } /*! \reimp */ QString DocLnk::exec() const { MimeType mt(type()); const AppLnk* app = mt.application(); if ( app ) return app->exec(); else return QString::null; } /*! \reimp */ void DocLnk::invoke(const QStringList& args) const { MimeType mt(type()); const AppLnk* app = mt.application(); if ( app ) { QStringList a = args; if ( linkFileKnown() && QFile::exists( linkFile() ) ) a.append(linkFile()); else a.append(file()); app->execute(a); } } + diff --git a/library/applnk.h b/library/applnk.h index 9b5523e..71b62ef 100644 --- a/library/applnk.h +++ b/library/applnk.h @@ -1,177 +1,207 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef __APPLNK_H__ #define __APPLNK_H__ #include <qobject.h> #include <qiconset.h> #include <qlist.h> #include <qdict.h> #include <qstringlist.h> class AppLnkSetPrivate; class AppLnkPrivate; class AppLnk { public: AppLnk(); AppLnk( const QString &file ); AppLnk( const AppLnk © ); // copy constructor virtual ~AppLnk(); bool isValid() const { return !mLinkFile.isNull(); } static void setSmallIconSize(int); static void setBigIconSize(int); static int smallIconSize(); static int bigIconSize(); QString name() const { return mName; } const QPixmap& pixmap() const; const QPixmap& bigPixmap() const; + QString icon() const { return mIconFile; } virtual QString exec() const { return mExec; } QString type() const; QString rotation() const { return mRotation; } QString comment() const { return mComment; } QString file() const; QString linkFile() const; QStringList mimeTypes() const { return mMimeTypes; } QStringList mimeTypeIcons() const { return mMimeTypeIcons; } const QArray<int> &categories() const; int id() const { return mId; } + bool fileKnown() const { return !mFile.isNull(); } bool linkFileKnown() const { return !mLinkFile.isNull(); } void execute() const; void execute(const QStringList& args) const; void removeFiles(); void removeLinkFile(); void setName( const QString& docname ); void setExec( const QString& exec ); void setFile( const QString& filename ); void setLinkFile( const QString& filename ); void setComment( const QString& comment ); void setType( const QString& mimetype ); void setIcon( const QString& iconname ); void setCategories( const QArray<int> &v ); bool writeLink() const; void setProperty(const QString& key, const QString& value); QString property(const QString& key) const; -//#ifdef QTOPIA_INTERNAL_PRELOADACCESS +#ifdef QTOPIA_INTERNAL_PRELOADACCESS bool isPreloaded() const; void setPreloaded(bool yesNo); -//#endif +#endif + +#ifdef QTOPIA_INTERNAL_APPLNKASSIGN + AppLnk &operator=(const AppLnk &other); +#endif protected: QString mName; + + /* remove for Qtopia 3.0 -zecke */ QPixmap mPixmap; + + /* remove for Qtopia 3.0 -zecke */ QPixmap mBigPixmap; + QString mExec; QString mType; QString mRotation; QString mComment; QString mFile; QString mLinkFile; QString mIconFile; QStringList mMimeTypes; QStringList mMimeTypeIcons; int mId; static int lastId; AppLnkPrivate *d; friend class AppLnkSet; virtual void invoke(const QStringList& args) const; bool ensureLinkExists() const; void storeLink() const; + +private: + const QPixmap& pixmap(int pos, int size) const; }; class DocLnk : public AppLnk { public: DocLnk(); DocLnk( const DocLnk &o ) : AppLnk(o) { } DocLnk( const QString &file ); DocLnk( const QString &file, bool may_be_desktopfile ); virtual ~DocLnk(); + +#ifdef QTOPIA_INTERNAL_APPLNKASSIGN + DocLnk &operator=(const DocLnk &other) { AppLnk::operator=(other); return *this; } +#endif + QString exec() const; protected: void invoke(const QStringList& args) const; private: void init(const QString &file); }; class AppLnkSet { public: AppLnkSet(); AppLnkSet( const QString &dir ); ~AppLnkSet(); const AppLnk *find( int id ) const; const AppLnk *findExec( const QString& execname ) const; QStringList types() const { return typs; } QString typeName( const QString& ) const; QPixmap typePixmap( const QString& ) const; QPixmap typeBigPixmap( const QString& ) const; void add(AppLnk*); bool remove(AppLnk*); + void clear() { + QListIterator<AppLnk> it( mApps ); + for ( ; it.current(); ) { + AppLnk* a = *it; + ++it; + a->mId = 0; + delete a; + } + mApps.clear(); + typs.clear(); + } const QList<AppLnk> &children() const { return mApps; } void detachChildren(); protected: friend class AppLnk; QList<AppLnk> mApps; QString mFile; QStringList typs; AppLnkSetPrivate *d; private: AppLnkSet( const AppLnkSet & ); // no copying! void findChildren(const QString &, const QString& t, const QString& lt, int depth = 0); }; class DocLnkSet : public AppLnkSet { public: DocLnkSet(); DocLnkSet( const QString &dir, const QString &mimefilter=QString::null ); const QList<DocLnk> &children() const { return (const QList<DocLnk> &)mApps; } void appendFrom( DocLnkSet& other ); private: DocLnkSet( const DocLnkSet & ); // no copying! void findChildren(const QString &dr, const QValueList<QRegExp> &mimeFilters, QDict<void> &reference, int depth=0); }; #endif // __APPLNK_H__ diff --git a/library/backend/categories.cpp b/library/backend/categories.cpp index 6e011c4..e37b3b9 100644 --- a/library/backend/categories.cpp +++ b/library/backend/categories.cpp @@ -1,677 +1,936 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included -** in the packaging of this file. +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. ** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING -** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A -** PARTICULAR PURPOSE. +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ -#include "categories.h" +#include <qtopia/categories.h> +#include <qtopia/stringutil.h> #include <qfile.h> #include <qcstring.h> #include <qtextstream.h> -#include "stringutil.h" using namespace Qtopia; /*********************************************************** * * CategoryGroup * **********************************************************/ #ifdef PALMTOPCENTER UidGen CategoryGroup::sUidGen( UidGen::PalmtopCenter ); #else UidGen CategoryGroup::sUidGen( UidGen::Qtopia ); #endif +/*! \class CategoryGroup categories.h + \brief Helper class that is used by Categories + + CategoryGroup is a group of categories that is associated with an + application or global set. Mainly it defines a map of ids to + category labels and category labels to ids. Lookups can be done with + labels or unique idenifiers. + + \ingroup qtopiaemb + \ingroup qtopiadesktop + \warning Categories API will likely change between Qtopia 1.5 and Qtopia 3 + \sa Categories::appGroupMap(), Categories::globalGroup() + */ + +/*! Add \a label and return the UID. If failure, then 0 is returned. Note + that All and Unfiled are reserved labels. + \internal +*/ int CategoryGroup::add( const QString &label ) { if ( label == QObject::tr("All") || label == QObject::tr("Unfiled") ) return 0; QMap<QString,int>::Iterator findIt = mLabelIdMap.find( label ); if ( findIt != mLabelIdMap.end() ) return 0; int newUid = uidGen().generate(); insert( newUid, label ); return newUid; } void CategoryGroup::insert( int uid, const QString &label ) { uidGen().store( uid ); mIdLabelMap[uid] = label; mLabelIdMap[label] = uid; } +/*! \internal + */ bool CategoryGroup::add( int uid, const QString &label ) { if ( label == QObject::tr("All") || label == QObject::tr("Unfiled") ) return FALSE; QMap<QString,int>::ConstIterator labelIt = mLabelIdMap.find( label ); if ( labelIt != mLabelIdMap.end() ) return FALSE; QMap<int,QString>::ConstIterator idIt = mIdLabelMap.find( uid ); if ( idIt != mIdLabelMap.end() ) return FALSE; insert( uid, label ); return TRUE; } +/*! Returns TRUE if \a label was removed from the group, FALSE if not. + \internal + */ bool CategoryGroup::remove( const QString &label ) { QMap<QString,int>::Iterator findIt = mLabelIdMap.find( label ); if ( findIt == mLabelIdMap.end() ) return FALSE; mIdLabelMap.remove( *findIt ); mLabelIdMap.remove( findIt ); return TRUE; } +/*! Returns TRUE if \a uid was removed from the group, FALSE if not. + \internal + */ bool CategoryGroup::remove( int uid ) { QMap<int,QString>::Iterator idIt = mIdLabelMap.find( uid ); if ( idIt == mIdLabelMap.end() ) return FALSE; mLabelIdMap.remove( *idIt ); mIdLabelMap.remove( idIt ); return TRUE; } +/*! \internal + */ bool CategoryGroup::rename( int uid, const QString &newLabel ) { if ( newLabel == QObject::tr("All") || newLabel == QObject::tr("Unfiled") ) return FALSE; QMap<int, QString>::Iterator idIt = mIdLabelMap.find( uid ); if ( idIt == mIdLabelMap.end() ) return FALSE; mLabelIdMap.remove( *idIt ); mLabelIdMap[newLabel] = uid; *idIt = newLabel; return TRUE; } +/*! \internal + */ bool CategoryGroup::rename( const QString &oldLabel, const QString &newLabel ) { return rename( id(oldLabel), newLabel ); } +/*! Returns TRUE if \a uid is stored in this group, FALSE if not. */ bool CategoryGroup::contains(int uid) const { return ( mIdLabelMap.find( uid ) != mIdLabelMap.end() ); } +/*! Returns TRUE if \a label is stored in this group, FALSE if not. */ bool CategoryGroup::contains(const QString &label) const { return ( mLabelIdMap.find( label ) != mLabelIdMap.end() ); } -/** Returns label associated with the uid or QString::null if - * not found +/*! Returns label associated with the \a uid or QString::null if + not found */ const QString &CategoryGroup::label(int uid) const { QMap<int,QString>::ConstIterator idIt = mIdLabelMap.find( uid ); if ( idIt == mIdLabelMap.end() ) return QString::null; return *idIt; } -/** Returns the uid associated with label or 0 if not found */ +/*! Returns the uid associated with \a label or 0 if not found */ int CategoryGroup::id(const QString &label) const { QMap<QString,int>::ConstIterator labelIt = mLabelIdMap.find( label ); if ( labelIt == mLabelIdMap.end() ) return 0; return *labelIt; } +/*! Returns a list of all labels stored in this group. */ QStringList CategoryGroup::labels() const { QStringList labels; for ( QMap<int, QString>::ConstIterator it = mIdLabelMap.begin(); it != mIdLabelMap.end(); ++it ) labels += *it; // ### I don't think this is the place for this... // labels.sort(); return labels; } +/*! Returns a list of all labels associated with the \a catids */ QStringList CategoryGroup::labels(const QArray<int> &catids ) const { QStringList labels; if ( catids.count() == 0 ) return labels; for ( QMap<int, QString>::ConstIterator it = mIdLabelMap.begin(); it != mIdLabelMap.end(); ++it ) if ( catids.find( it.key() ) != -1 ) labels += *it; return labels; } /*********************************************************** * * Categories * **********************************************************/ -/** Add the category name as long as it doesn't already exist locally - * or globally. Return TRUE if added, FALSE if conflicts. - */ +/*! + \class Categories categories.h + \brief The Categories class is a database that groups categories and maps ids to names. + + The Categories class is the low level Categories accessor class. To + add a category menu and filter for your application, see CategoryMenu. + + The Categories class allows the developer to add, remove, and rename + categories. Categories can be created for an individual application + such as Todo List or to be used for all applications. Categories + that can be used by all applications are called global + categories. Each PalmtopRecord subclass stores categories as an + QArray<int> using PalmtopRecord::setCategories() and + PalmtopRecord::categories(). This allows each record to be assigned + to multiple categories. This also allows the user to rename a + category and for it to update automatically in all records. + + This class provides several methods to convert between a category id + and it's associated string such as id(), ids(), label() and labels(). A + helper class called CategoryGroup is used to access categories of a + single application group, such as Todo List. Global categories can + also be accessed via CategoryGroup objects. See appGroupMap() and + globalGroup() for the appropriate accessor methods. + + Categories are stored in an xml file in the Settings directory + (Categories.xml). A global function called categoryFileName() will + return to appropriate QString file location to be passed to load() + and save() for the master categories database. + + \ingroup qtopiaemb + \ingroup qtopiadesktop + \warning Categories API will likely change between Qtopia 1.5 and Qtopia 3 + \sa CategoryGroup, CategoryMenu +*/ + + +/*! + Add the category name as long as it doesn't already exist locally or + globally. The \a uid is assigned to the category if successfully + added. Return \a uid if added, 0 if conflicts (error). + + \internal +*/ int Categories::addCategory( const QString &appname, const QString &catname, int uid ) { if ( mGlobalCats.contains(catname) ) return 0; QMap< QString, CategoryGroup >::Iterator appIt = mAppCats.find( appname ); if ( appIt == mAppCats.end() ) { CategoryGroup newgroup; newgroup.add( uid, catname ); mAppCats.insert( appname, newgroup ); emit categoryAdded( *this, appname, uid ); return uid; } CategoryGroup &cats = *appIt; cats.add( uid, catname ); emit categoryAdded( *this, appname, uid ); return uid; } +/*! + Add the category name as long as it doesn't already exist locally or + globally. Return UID if added, 0 if conflicts (error). +*/ + int Categories::addCategory( const QString &appname, const QString &catname ) { if ( mGlobalCats.contains(catname) ) return 0; QMap< QString, CategoryGroup >::Iterator appIt = mAppCats.find( appname ); if ( appIt == mAppCats.end() ) { CategoryGroup newgroup; int uid = newgroup.add( catname ); mAppCats.insert( appname, newgroup ); emit categoryAdded( *this, appname, uid ); return uid; } CategoryGroup &cats = *appIt; int uid = cats.add( catname ); if ( !uid ) return 0; emit categoryAdded( *this, appname, uid ); return uid; } +/*! + \internal +*/ int Categories::addGlobalCategory( const QString &catname, int uid ) { mGlobalCats.add( uid, catname ); emit categoryAdded( *this, QString::null, uid ); return uid; } +/*! + Add the global category \a catname while checking that it doesn't + already exist globally. Return UID if added, 0 if conflicts. + + \sa addCategory() + */ int Categories::addGlobalCategory( const QString &catname ) { int uid = mGlobalCats.add( catname ); if ( !uid ) return 0; emit categoryAdded( *this, QString::null, uid ); return uid; } -/** Removes the category from the application; if it is not found - * in the application, then it attempts to remove it from - * the global list - */ +/*! + + Removes the \a catname from the application group. If it is not + found in the application group and \a checkGlobal is TRUE, then it + attempts to remove it from the global list +*/ bool Categories::removeCategory( const QString &appname, const QString &catname, bool checkGlobal ) { QMap< QString, CategoryGroup >::Iterator appIt = mAppCats.find( appname ); if ( appIt != mAppCats.end() ) { CategoryGroup &cats = *appIt; int uid = cats.id( catname ); if ( cats.remove( uid ) ) { emit categoryRemoved( *this, appname, uid ); return TRUE; } } if ( !checkGlobal ) return FALSE; return removeGlobalCategory( catname ); } + +/*! + Removes the \a uid from the application group \a appname. Returns TRUE + if success, FALSE if not found. +*/ bool Categories::removeCategory( const QString &appname, int uid ) { QMap< QString, CategoryGroup >::Iterator appIt = mAppCats.find( appname ); if ( appIt != mAppCats.end() ) { CategoryGroup &cats = *appIt; if ( cats.remove( uid ) ) { emit categoryRemoved( *this, appname, uid ); return TRUE; } } return FALSE; } +/*! + Removes the global category \a catname. Returns TRUE + if success, FALSE if not found. +*/ bool Categories::removeGlobalCategory( const QString &catname ) { int uid = mGlobalCats.id( catname ); if ( mGlobalCats.remove( uid ) ) { emit categoryRemoved( *this, QString::null, uid ); return TRUE; } return FALSE; } - +/*! + Removes the global category \a uid. Returns TRUE + if success, FALSE if not found. +*/ bool Categories::removeGlobalCategory( int uid ) { if ( mGlobalCats.remove( uid ) ) { emit categoryRemoved( *this, QString::null, uid ); return TRUE; } return FALSE; } -/** Returns the sorted list of all categories that are associated with - * the app. If includeGlobal parameter is TRUE then the returned - * categories will include the global category items. +/*! + Returns the sorted list of all categories that are associated with + the \a app. If \a includeGlobal is TRUE then the returned + categories will include the global category items. */ QStringList Categories::labels( const QString &app, bool includeGlobal, ExtraLabels extra ) const { QMap< QString, CategoryGroup >::ConstIterator appIt = mAppCats.find( app ); QStringList cats; if ( appIt != mAppCats.end() ) cats += (*appIt).labels(); - else qDebug("Categories::labels didn't find app %s", app.latin1() ); + //else qDebug("Categories::labels didn't find app %s", app.latin1() ); if ( includeGlobal ) cats += mGlobalCats.labels(); cats.sort(); switch ( extra ) { case NoExtra: break; case AllUnfiled: cats.append( tr("All") ); cats.append( tr("Unfiled") ); break; case AllLabel: cats.append( tr("All") ); break; case UnfiledLabel: cats.append( tr("Unfiled") ); break; } return cats; } +/*! + Returns the label associated with the id +*/ QString Categories::label( const QString &app, int id ) const { if ( mGlobalCats.contains( id ) ) return mGlobalCats.label( id ); QMap< QString, CategoryGroup >::ConstIterator appIt = mAppCats.find( app ); if ( appIt == mAppCats.end() ) return QString::null; return (*appIt).label( id ); } -/** Returns a single string associated with the cat ids for display in - * a combobox or any area that requires one string. If catids are empty - * then "Unfiled" will be returned. If multiple categories are assigned - * the first cat id is shown with " (multi)" appended to the string. - */ +/*! + Returns a single string associated with \a catids for display in a + combobox or any area that requires one string. If \a catids are empty + then "Unfiled" will be returned. If multiple categories are + assigned then the behavior depends on the DisplaySingle type. + + If \a display is set to ShowMulti then " (multi)" appended to the + first string. If \a display is set to ShowAll, then a space + seperated string is returned with all categories. If ShowFirst is + set, the just the first string is returned. +*/ QString Categories::displaySingle( const QString &app, const QArray<int> &catids, DisplaySingle display ) const { QStringList strs = labels( app, catids ); if ( !strs.count() ) return tr("Unfiled"); strs.sort(); QString r; if ( strs.count() > 1 ) { switch ( display ) { case ShowFirst: r = strs.first(); break; case ShowMulti: r = strs.first() + tr(" (multi.)"); break; case ShowAll: r = strs.join(" "); break; } } else r = strs.first(); return r; } +/*! + + Returns all ids associated with the application CategoryGroup \a app + and the passed in \a labels in that group. +*/ QArray<int> Categories::ids( const QString &app, const QStringList &labels) const { QArray<int> results; QStringList::ConstIterator it; int i; - + for ( i=0, it=labels.begin(); it!=labels.end(); i++, ++it ) { int value = id( app, *it ); if ( value != 0 ) { int tmp = results.size(); results.resize( tmp + 1 ); results[ tmp ] = value; } } return results; } +/*! + Returns the id associated with the app. If the id is not found in the + application CategoryGroup, then it searches the global CategoryGroup. + If it is not found it either, 0 is returned. +*/ int Categories::id( const QString &app, const QString &cat ) const { if ( cat == tr("Unfiled") || cat.contains( tr(" (multi.)") ) ) return 0; int uid = mGlobalCats.id( cat ); if ( uid != 0 ) return uid; return mAppCats[app].id( cat ); } -/** Return TRUE if renaming succeeded; FALSE if app name not found, - * or if there was a name conflict +/*! + Return TRUE if renaming succeeded; FALSE if \a appname or \a oldName + is not found, or if \a newName conflicts with an existing category + in the CategoryGroup. + + It will first search the CategoryGroup associated with \a appname + and if not found it will try to replace in global CategoryGroup. */ bool Categories::renameCategory( const QString &appname, const QString &oldName, const QString &newName ) { QMap< QString, CategoryGroup >::Iterator appIt = mAppCats.find( appname ); if ( appIt != mAppCats.end() ) { CategoryGroup &cats = *appIt; int id = cats.id( oldName ); if ( id != 0 && cats.rename( id, newName ) ) { emit categoryRenamed( *this, appname, id ); return TRUE; } } return renameGlobalCategory( oldName, newName ); } +/*! + Return TRUE if renaming succeeded; FALSE if \a appname or \a oldName + is not found, or if \a newName conflicts with an existing category + in the CategoryGroup. This function will only rename categories found + in the global CategoryGroup. + */ bool Categories::renameGlobalCategory( const QString &oldName, const QString &newName ) { int uid = mGlobalCats.id( oldName ); if ( uid != 0 && mGlobalCats.rename( uid, newName ) ) { emit categoryRenamed( *this, QString::null, uid ); return TRUE; } return FALSE; } +/*! + Changes the grouping of a category. If a category was global and \a global + is set to TRUE, then the \a catname will be moved to the \a appname group. +*/ void Categories::setGlobal( const QString &appname, const QString &catname, bool global ) { // if in global and should be in app; then move it if ( mGlobalCats.contains( catname ) && !global ) { mGlobalCats.remove( catname ); addCategory( appname, catname ); return ; } // if in app and should be in global, then move it if ( !global ) return; if ( removeCategory( appname, catname, FALSE ) ) addGlobalCategory( catname ); } +/*! + Returns TRUE if the \a catname is in the global CategoryGroup, FALSE if not. +*/ bool Categories::isGlobal( const QString &catname ) const { return mGlobalCats.contains( catname ); } -/** Returns true if the catname is associated with any application +/*! + Returns true if the \a catname is associated with any CategoryGroup, + including global. */ bool Categories::exists( const QString &catname ) const { if ( isGlobal(catname) ) return TRUE; for ( QMap<QString, CategoryGroup>::ConstIterator appsIt = mAppCats.begin(); appsIt != mAppCats.end(); ++appsIt ) if ( exists( appsIt.key(), catname ) ) return TRUE; return FALSE; } +/*! + Returns TRUE if the \a catname is associated with the \a appname + CategoryGroup, FALSE if not found. + */ bool Categories::exists( const QString &appname, const QString &catname) const { QMap< QString, CategoryGroup >::ConstIterator appIt = mAppCats.find( appname ); if ( appIt == mAppCats.end() ) return FALSE; return (*appIt).contains( catname ); } +/*! + Saves the Categories database to the \a fname. See categoryFileName() + for the default file name string used for the shared category database. + Returns FALSE if there is error writing the file or TRUE on success. + */ bool Categories::save( const QString &fname ) const { QString strNewFile = fname + ".new"; QFile f( strNewFile ); QString out; int total_written; if ( !f.open( IO_WriteOnly|IO_Raw ) ) { qWarning("Unable to write to %s", fname.latin1()); return FALSE; } out = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; out += "<!DOCTYPE CategoryList>\n"; out += "<Categories>\n"; for ( QMap<int, QString>::ConstIterator git = mGlobalCats.idMap().begin(); git != mGlobalCats.idMap().end(); ++git ) out += "<Category id=\"" + QString::number(git.key()) + "\"" + " name=\"" + escapeString(*git) + "\" />\n"; for ( QMap<QString, CategoryGroup>::ConstIterator appsIt=mAppCats.begin(); appsIt != mAppCats.end(); ++appsIt ) { const QString &app = appsIt.key(); const QMap<int, QString> &appcats = (*appsIt).idMap(); for ( QMap<int, QString>::ConstIterator appcatit = appcats.begin(); appcatit != appcats.end(); ++appcatit ) out += "<Category id=\"" + QString::number(appcatit.key()) + "\"" + " app=\"" + escapeString(app) + "\"" + " name=\"" + escapeString(*appcatit) + "\" />\n"; } out += "</Categories>\n"; QCString cstr = out.utf8(); total_written = f.writeBlock( cstr.data(), cstr.length() ); if ( total_written != int(cstr.length()) ) { f.close(); QFile::remove( strNewFile ); return FALSE; } f.close(); +#ifdef Q_OS_WIN32 + QFile::remove( fname ); +#endif if ( ::rename( strNewFile.latin1(), fname.latin1() ) < 0 ) { qWarning( "problem renaming file %s to %s", strNewFile.latin1(), fname.latin1()); // remove the tmp file... QFile::remove( strNewFile ); } return TRUE; } +/*! + Loads the Categories database using \a fname. See categoryFileName() + for the default file name string used for the shared category database. + + Returns FALSE if there is error reading the file or TRUE on success. + */ bool Categories::load( const QString &fname ) { QFile file( fname ); if ( !file.open( IO_ReadOnly ) ) { qWarning("Unable to open %s", fname.latin1()); addGlobalCategory(tr("Business")); addGlobalCategory(tr("Personal")); save(fname); return FALSE; } clear(); QByteArray ba = file.readAll(); QString data = QString::fromUtf8( ba.data(), ba.size() ); QChar *uc = (QChar *)data.unicode(); int len = data.length(); // QTime t; // t.start(); QString name; QString id; QString app; int i = 0; while ( (i = data.find( "<Category ", i)) != -1 ) { i += 10; name = QString::null; app = QString::null; while ( 1 ) { // skip white space while ( i < len && (uc[i] == ' ' || uc[i] == '\n' || uc[i] == '\r') ) i++; // if at the end, then done if ( i >= len-2 || (uc[i] == '/' && uc[i+1] == '>') ) break; // we have another attribute read it. int j = i; while ( j < len && uc[j] != '=' ) j++; QString attr = QConstString( uc+i, j-i ).string(); i = ++j; // skip = while ( i < len && uc[i] != '"' ) i++; j = ++i; while ( j < len && uc[j] != '"' ) j++; QString value = Qtopia::plainString( QConstString( uc+i, j-i ).string() ); i = j + 1; // qDebug("attr='%s' value='%s'", attr.latin1(), value.latin1() ); if ( attr == "id" ) id = value; else if ( attr == "app" ) app = value; else if ( attr == "name" ) name = value; } if ( name.isNull() || id.isNull() ) { qWarning("No name or id in the category"); continue; } if ( app.isNull() ) mGlobalCats.add( id.toInt(), name ); else mAppCats[ app ].add( id.toInt(), name ); } return TRUE; } +/*! + Clear the categories in memory. Equivelent to creating an empty Categories + object. +*/ void Categories::clear() { mGlobalCats.clear(); mAppCats.clear(); } +/*! + Dump the contents to standard out. Used for debugging only. +*/ void Categories::dump() const { qDebug("\tglobal categories = %s", mGlobalCats.labels().join(", ").latin1() ); for ( QMap<QString, CategoryGroup>::ConstIterator appsIt = mAppCats.begin(); appsIt != mAppCats.end(); ++appsIt ) { const QString &app = appsIt.key(); QStringList appcats = (*appsIt).labels(); qDebug("\tapp = %s\tcategories = %s", app.latin1(), appcats.join(", ").latin1() ); } } QStringList CheckedListView::checked() const { QStringList strs; for ( QCheckListItem *i = (QCheckListItem *) firstChild(); i; i = (QCheckListItem *)i->nextSibling() ) if ( i->isOn() ) strs += i->text( 0 ); return strs; } void CheckedListView::addCheckableList( const QStringList &options ) { for ( QStringList::ConstIterator it = options.begin(); it != options.end(); ++it ) { (void) new QCheckListItem( this, *it, QCheckListItem::CheckBox ); } } void CheckedListView::setChecked( const QStringList &checked ) { // iterate over all items bool showingChecked = FALSE; for ( QCheckListItem *i = (QCheckListItem *) firstChild(); i; i = (QCheckListItem *)i->nextSibling() ) // see if the item should be checked by searching the // checked list if ( checked.find( i->text( 0 ) ) != checked.end() ) { i->setOn( TRUE ); // make sure it is showing at least one checked item if ( !showingChecked ) { ensureItemVisible( i ); showingChecked = TRUE; } } else i->setOn( FALSE ); } + +/*! \fn Categories &Categories::operator= ( const Categories &c ) + + Performs deep copy. + */ + + +/*! \fn QStringList Categories::labels( const QString & app, const QArray<int> &catids ) const + + Returns list of labels associated with the application and catids +*/ + +/*! \fn QStringList Categories::globalCategories() const + + Returns list of all global category labels +*/ + +/*! \fn const QMap<QString, CategoryGroup> &Categories::appGroupMap() const + + Returns a map of application names to CategoryGroup. The CategoryGroup + class defines a map of ids to category labels and category labels to ids. +*/ + +/*! \fn const CategoryGroup &Categories::globalGroup() const + + Returns the global CategoryGroup. The CategoryGroup + class defines a map of ids to category labels and category labels to ids. +*/ + +/*! \fn void Categories::categoryAdded( const Categories &cats, const QString &appname, int uid) + + Emitted if a category is added. + + \a cats is a const reference to this object + \a appname is the CategoryGroup application name that the category was added to or QString::null if it was global + \a uid is the unique identifier associated with the added category +*/ + +/*! \fn void Categories::categoryRemoved( const Categories &cats, const QString &appname, + int uid) + + Emitted if removed category is removed. + + \a cats is a const reference to this object + \a appname is the CategoryGroup application name that the category was removed from or QString::null if it was the global CategoryGroup + \a uid is the unique identifier associated with the removed category +*/ + + +/*! \fn void Categories::categoryRenamed( const Categories &cats, const QString &appname, + int uid) + + Emitted if \a uid in the \a appname CategoryGroup is renamed in \a cats + object. + + \a cats is a const reference to this object + \a appname is the CategoryGroup application name that the category was renamed in or QString::null if it was the global CategoryGroup + \a uid is the unique identifier associated with the renamed category +*/ + +/*! \fn Categories::Categories( QObject *parent=0, const char *name = 0 ) + + Constructor for an empty Categories object. +*/ + +/*! \fn Categories::Categories( const Categories ©From ) + + Deep copy constructor +*/ + +/*! \fn Categories::~Categories() + + Empty destructor. Call save() before destruction if there are changes + that need to be saved. +*/ + +/*! \fn CategoryGroup::clear() + \internal +*/ + +/*! \fn const QMap<int, QString> &CategoryGroup::idMap() const + + Returns a const reference to the id to label QMap +*/ + +/*! \fn CategoryGroup::CategoryGroup() + \internal +*/ + +/*! \fn CategoryGroup::CategoryGroup(const CategoryGroup &c) + \internal +*/ + diff --git a/library/backend/contact.cpp b/library/backend/contact.cpp index b10b19a..3f4934a 100644 --- a/library/backend/contact.cpp +++ b/library/backend/contact.cpp @@ -1,117 +1,495 @@ /********************************************************************** -** Copyright (C) 2001 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #define QTOPIA_INTERNAL_CONTACT_MRE #include "contact.h" #include "vobject_p.h" #include "qfiledirect_p.h" #include <qpe/stringutil.h> #include <qpe/timeconversion.h> #include <qobject.h> #include <qregexp.h> #include <qstylesheet.h> #include <qfileinfo.h> #include <stdio.h> +/*! + \class Contact contact.h + \brief The Contact class holds the data of an address book entry. + + This data includes information the name of the person, contact + information, and business information such as deparment and job title. + + \ingroup qtopiaemb + \ingroup qtopiadesktop +*/ + Qtopia::UidGen Contact::sUidGen( Qtopia::UidGen::Qtopia ); +/*! + Creates a new, empty contact. +*/ Contact::Contact() : Record(), mMap(), d( 0 ) { } +/*! + \internal + Creates a new contact. The properties of the contact are + set from \a fromMap. +*/ Contact::Contact( const QMap<int, QString> &fromMap ) : Record(), mMap( fromMap ), d( 0 ) { QString cats = mMap[ Qtopia::AddressCategory ]; if ( !cats.isEmpty() ) setCategories( idsFromString( cats ) ); QString uidStr = find( Qtopia::AddressUid ); + if ( uidStr.isEmpty() ) setUid( uidGen().generate() ); else setUid( uidStr.toInt() ); + + if ( !uidStr.isEmpty() ) + setUid( uidStr.toInt() ); } +/*! + Destroys a contact. +*/ Contact::~Contact() { } +/*! \fn void Contact::setTitle( const QString &str ) + Sets the title of the contact to \a str. +*/ + +/*! \fn void Contact::setFirstName( const QString &str ) + Sets the first name of the contact to \a str. +*/ + +/*! \fn void Contact::setMiddleName( const QString &str ) + Sets the middle name of the contact to \a str. +*/ + +/*! \fn void Contact::setLastName( const QString &str ) + Sets the last name of the contact to \a str. +*/ + +/*! \fn void Contact::setSuffix( const QString &str ) + Sets the suffix of the contact to \a str. +*/ + +/*! \fn void Contact::setFileAs( const QString &str ) + Sets the contact to filed as \a str. +*/ + +/*! \fn void Contact::setDefaultEmail( const QString &str ) + Sets the default email of the contact to \a str. +*/ + +/*! \fn void Contact::setHomeStreet( const QString &str ) + Sets the home street address of the contact to \a str. +*/ + +/*! \fn void Contact::setHomeCity( const QString &str ) + Sets the home city of the contact to \a str. +*/ + +/*! \fn void Contact::setHomeState( const QString &str ) + Sets the home state of the contact to \a str. +*/ + +/*! \fn void Contact::setHomeZip( const QString &str ) + Sets the home zip code of the contact to \a str. +*/ + +/*! \fn void Contact::setHomeCountry( const QString &str ) + Sets the home country of the contact to \a str. +*/ + +/*! \fn void Contact::setHomePhone( const QString &str ) + Sets the home phone number of the contact to \a str. +*/ + +/*! \fn void Contact::setHomeFax( const QString &str ) + Sets the home fax number of the contact to \a str. +*/ + +/*! \fn void Contact::setHomeMobile( const QString &str ) + Sets the home mobile phone number of the contact to \a str. +*/ + +/*! \fn void Contact::setHomeWebpage( const QString &str ) + Sets the home webpage of the contact to \a str. +*/ + +/*! \fn void Contact::setCompany( const QString &str ) + Sets the company for contact to \a str. +*/ + +/*! \fn void Contact::setJobTitle( const QString &str ) + Sets the job title of the contact to \a str. +*/ + +/*! \fn void Contact::setDepartment( const QString &str ) + Sets the department for contact to \a str. +*/ + +/*! \fn void Contact::setOffice( const QString &str ) + Sets the office for contact to \a str. +*/ + +/*! \fn void Contact::setBusinessStreet( const QString &str ) + Sets the business street address of the contact to \a str. +*/ + +/*! \fn void Contact::setBusinessCity( const QString &str ) + Sets the business city of the contact to \a str. +*/ + +/*! \fn void Contact::setBusinessState( const QString &str ) + Sets the business state of the contact to \a str. +*/ + +/*! \fn void Contact::setBusinessZip( const QString &str ) + Sets the business zip code of the contact to \a str. +*/ + +/*! \fn void Contact::setBusinessCountry( const QString &str ) + Sets the business country of the contact to \a str. +*/ + +/*! \fn void Contact::setBusinessPhone( const QString &str ) + Sets the business phone number of the contact to \a str. +*/ + +/*! \fn void Contact::setBusinessFax( const QString &str ) + Sets the business fax number of the contact to \a str. +*/ + +/*! \fn void Contact::setBusinessMobile( const QString &str ) + Sets the business mobile phone number of the contact to \a str. +*/ + +/*! \fn void Contact::setBusinessPager( const QString &str ) + Sets the business pager number of the contact to \a str. +*/ + +/*! \fn void Contact::setBusinessWebpage( const QString &str ) + Sets the business webpage of the contact to \a str. +*/ + +/*! \fn void Contact::setProfession( const QString &str ) + Sets the profession of the contact to \a str. +*/ + +/*! \fn void Contact::setAssistant( const QString &str ) + Sets the assistant of the contact to \a str. +*/ + +/*! \fn void Contact::setManager( const QString &str ) + Sets the manager of the contact to \a str. +*/ + +/*! \fn void Contact::setSpouse( const QString &str ) + Sets the spouse of the contact to \a str. +*/ + +/*! \fn void Contact::setGender( const QString &str ) + Sets the gender of the contact to \a str. +*/ + +/*! \fn void Contact::setBirthday( const QString &str ) + Sets the birthday for the contact to \a str. +*/ + +/*! \fn void Contact::setAnniversary( const QString &str ) + Sets the anniversary of the contact to \a str. +*/ + +/*! \fn void Contact::setNickname( const QString &str ) + Sets the nickname of the contact to \a str. +*/ + +/*! \fn void Contact::setNotes( const QString &str ) + Sets the notes about the contact to \a str. +*/ + +/*! \fn QString Contact::title() const + Returns the title of the contact. +*/ + +/*! \fn QString Contact::firstName() const + Returns the first name of the contact. +*/ + +/*! \fn QString Contact::middleName() const + Returns the middle name of the contact. +*/ + +/*! \fn QString Contact::lastName() const + Returns the last name of the contact. +*/ + +/*! \fn QString Contact::suffix() const + Returns the suffix of the contact. +*/ + +/*! \fn QString Contact::fileAs() const + Returns the string the contact is filed as. +*/ + +/*! \fn QString Contact::defaultEmail() const + Returns the default email address of the contact. +*/ + +/*! \fn QString Contact::emails() const + Returns the list of email address for a contact separated by ';'s in a single + string. +*/ + +/*! \fn QString Contact::homeStreet() const + Returns the home street address of the contact. +*/ + +/*! \fn QString Contact::homeCity() const + Returns the home city of the contact. +*/ + +/*! \fn QString Contact::homeState() const + Returns the home state of the contact. +*/ + +/*! \fn QString Contact::homeZip() const + Returns the home zip of the contact. +*/ + +/*! \fn QString Contact::homeCountry() const + Returns the home country of the contact. +*/ + +/*! \fn QString Contact::homePhone() const + Returns the home phone number of the contact. +*/ + +/*! \fn QString Contact::homeFax() const + Returns the home fax number of the contact. +*/ + +/*! \fn QString Contact::homeMobile() const + Returns the home mobile number of the contact. +*/ + +/*! \fn QString Contact::homeWebpage() const + Returns the home webpage of the contact. +*/ + +/*! \fn QString Contact::company() const + Returns the company for the contact. +*/ + +/*! \fn QString Contact::department() const + Returns the department for the contact. +*/ + +/*! \fn QString Contact::office() const + Returns the office for the contact. +*/ + +/*! \fn QString Contact::jobTitle() const + Returns the job title of the contact. +*/ + +/*! \fn QString Contact::profession() const + Returns the profession of the contact. +*/ + +/*! \fn QString Contact::assistant() const + Returns the assistant of the contact. +*/ + +/*! \fn QString Contact::manager() const + Returns the manager of the contact. +*/ + +/*! \fn QString Contact::businessStreet() const + Returns the business street address of the contact. +*/ + +/*! \fn QString Contact::businessCity() const + Returns the business city of the contact. +*/ + +/*! \fn QString Contact::businessState() const + Returns the business state of the contact. +*/ + +/*! \fn QString Contact::businessZip() const + Returns the business zip of the contact. +*/ + +/*! \fn QString Contact::businessCountry() const + Returns the business country of the contact. +*/ + +/*! \fn QString Contact::businessPhone() const + Returns the business phone number of the contact. +*/ + +/*! \fn QString Contact::businessFax() const + Returns the business fax number of the contact. +*/ + +/*! \fn QString Contact::businessMobile() const + Returns the business mobile number of the contact. +*/ + +/*! \fn QString Contact::businessPager() const + Returns the business pager number of the contact. +*/ + +/*! \fn QString Contact::businessWebpage() const + Returns the business webpage of the contact. +*/ + +/*! \fn QString Contact::spouse() const + Returns the spouse of the contact. +*/ + +/*! \fn QString Contact::gender() const + Returns the gender of the contact. +*/ + +/*! \fn QString Contact::birthday() const + Returns the birthday of the contact. +*/ + +/*! \fn QString Contact::anniversary() const + Returns the anniversary of the contact. +*/ + +/*! \fn QString Contact::nickname() const + Returns the nickname of the contact. +*/ + +/*! \fn QString Contact::children() const + Returns the children of the contact. +*/ + +/*! \fn QString Contact::notes() const + Returns the notes relating to the the contact. +*/ + +/*! \fn QString Contact::groups() const + \internal + Returns the groups for the contact. +*/ + +/*! \fn QStringList Contact::groupList() const + \internal +*/ + +/*! \fn QString Contact::field(int) const + \internal +*/ + +/*! \fn void Contact::saveJournal( journal_action, const QString & = QString::null ) + \internal +*/ + +/*! \fn void Contact::setUid( int id ) + \internal + Sets the uid for this record to \a id. +*/ + +/*! \enum Contact::journal_action + \internal +*/ + +/*! + \internal +*/ QMap<int, QString> Contact::toMap() const { QMap<int, QString> map = mMap; - map.insert( Qtopia::AddressCategory, idsToString( categories() )); + QString cats = idsToString( categories() ); + if ( !cats.isEmpty() ) + map.insert( Qtopia::AddressCategory, cats ); return map; } /*! - Returns a rich text formatted QString of the Contact. + Returns a rich text formatted QString representing the contents the contact. */ QString Contact::toRichText() const { QString text; QString value, comp, state; // name, jobtitle and company if ( !(value = fullName()).isEmpty() ) text += "<b>" + Qtopia::escapeString(value) + "</b><br>"; if ( !(value = jobTitle()).isEmpty() ) text += Qtopia::escapeString(value) + "<br>"; comp = company(); if ( !(value = department()).isEmpty() ) { text += Qtopia::escapeString(value); if ( comp ) text += ", "; else text += "<br>"; } if ( !comp.isEmpty() ) text += Qtopia::escapeString(comp) + "<br>"; // business address if ( !businessStreet().isEmpty() || !businessCity().isEmpty() || !businessZip().isEmpty() || !businessCountry().isEmpty() ) { text += "<br>"; text += QObject::tr( "<b>Work Address:</b>" ); text += "<br>"; } if ( !(value = businessStreet()).isEmpty() ) text += Qtopia::escapeString(value) + "<br>"; state = businessState(); if ( !(value = businessCity()).isEmpty() ) { text += Qtopia::escapeString(value); if ( state ) text += ", " + Qtopia::escapeString(state); text += "<br>"; } else if ( !state.isEmpty() ) text += Qtopia::escapeString(state) + "<br>"; if ( !(value = businessZip()).isEmpty() ) text += Qtopia::escapeString(value) + "<br>"; if ( !(value = businessCountry()).isEmpty() ) text += Qtopia::escapeString(value) + "<br>"; // home address if ( !homeStreet().isEmpty() || !homeCity().isEmpty() || @@ -186,387 +564,482 @@ QString Contact::toRichText() const if ( !str.isEmpty() ) text += "<b>" + QObject::tr("Profession: ") + "</b>" + Qtopia::escapeString(str) + "<br>"; str = assistant(); if ( !str.isEmpty() ) text += "<b>" + QObject::tr("Assistant: ") + "</b>" + Qtopia::escapeString(str) + "<br>"; str = manager(); if ( !str.isEmpty() ) text += "<b>" + QObject::tr("Manager: ") + "</b>" + Qtopia::escapeString(str) + "<br>"; str = gender(); if ( !str.isEmpty() && str.toInt() != 0 ) { if ( str.toInt() == 1 ) str = QObject::tr( "Male" ); else if ( str.toInt() == 2 ) str = QObject::tr( "Female" ); text += "<b>" + QObject::tr("Gender: ") + "</b>" + str + "<br>"; } str = spouse(); if ( !str.isEmpty() ) text += "<b>" + QObject::tr("Spouse: ") + "</b>" + Qtopia::escapeString(str) + "<br>"; str = birthday(); if ( !str.isEmpty() ) text += "<b>" + QObject::tr("Birthday: ") + "</b>" + Qtopia::escapeString(str) + "<br>"; str = anniversary(); if ( !str.isEmpty() ) text += "<b>" + QObject::tr("Anniversary: ") + "</b>" + Qtopia::escapeString(str) + "<br>"; str = nickname(); if ( !str.isEmpty() ) text += "<b>" + QObject::tr("Nickname: ") + "</b>" + Qtopia::escapeString(str) + "<br>"; // notes last if ( (value = notes()) ) { QRegExp reg("\n"); //QString tmp = Qtopia::escapeString(value); QString tmp = QStyleSheet::convertFromPlainText(value); //tmp.replace( reg, "<br>" ); text += "<br>" + tmp + "<br>"; } return text; } +/*! + \internal +*/ void Contact::insert( int key, const QString &v ) { QString value = v.stripWhiteSpace(); if ( value.isEmpty() ) mMap.remove( key ); else mMap.insert( key, value ); } +/*! + \internal +*/ void Contact::replace( int key, const QString & v ) { QString value = v.stripWhiteSpace(); if ( value.isEmpty() ) mMap.remove( key ); else mMap.replace( key, value ); } +/*! + \internal +*/ QString Contact::find( int key ) const { return mMap[key]; } +/*! + \internal +*/ QString Contact::displayAddress( const QString &street, const QString &city, const QString &state, const QString &zip, const QString &country ) const { QString s = street; if ( !street.isEmpty() ) s+= "\n"; s += city; if ( !city.isEmpty() && !state.isEmpty() ) s += ", "; s += state; if ( !state.isEmpty() && !zip.isEmpty() ) s += " "; s += zip; if ( !country.isEmpty() && !s.isEmpty() ) s += "\n"; s += country; return s; } +/*! + \internal +*/ QString Contact::displayBusinessAddress() const { return displayAddress( businessStreet(), businessCity(), businessState(), businessZip(), businessCountry() ); } +/*! + \internal +*/ QString Contact::displayHomeAddress() const { return displayAddress( homeStreet(), homeCity(), homeState(), homeZip(), homeCountry() ); } +/*! + Returns the full name of the contact +*/ QString Contact::fullName() const { QString title = find( Qtopia::Title ); QString firstName = find( Qtopia::FirstName ); QString middleName = find( Qtopia::MiddleName ); QString lastName = find( Qtopia::LastName ); QString suffix = find( Qtopia::Suffix ); QString name = title; if ( !firstName.isEmpty() ) { if ( !name.isEmpty() ) name += " "; name += firstName; } if ( !middleName.isEmpty() ) { if ( !name.isEmpty() ) name += " "; name += middleName; } if ( !lastName.isEmpty() ) { if ( !name.isEmpty() ) name += " "; name += lastName; } if ( !suffix.isEmpty() ) { if ( !name.isEmpty() ) name += " "; name += suffix; } return name.simplifyWhiteSpace(); } +/*! + Returns a list of the names of the children of the contact. +*/ QStringList Contact::childrenList() const { return QStringList::split( " ", find( Qtopia::Children ) ); } +/*! \fn void Contact::insertEmail( const QString &email ) + + Insert \a email into the email list. Ensures \a email can only be added + once. If there is no default email address set, it sets it to the \a email. +*/ + +/*! \fn void Contact::removeEmail( const QString &email ) + + Removes the \a email from the email list. If the default email was \a email, + then the default email address is assigned to the first email in the + email list +*/ + +/*! \fn void Contact::clearEmails() + + Clears the email list. + */ + +/*! \fn void Contact::insertEmails( const QStringList &emailList ) + + Appends the \a emailList to the exiting email list + */ + +/*! + Returns a list of email addresses belonging to the contact, including + the default email address. +*/ QStringList Contact::emailList() const { - return QStringList::split( ";", find( Qtopia::Emails ) ); + QString emailStr = emails(); + + QStringList r; + if ( !emailStr.isEmpty() ) { + qDebug(" emailstr "); + QStringList l = QStringList::split( emailSeparator(), emailStr ); + for ( QStringList::ConstIterator it = l.begin();it != l.end();++it ) + r += (*it).simplifyWhiteSpace(); + } + + return r; } +/*! + \overload + + Generates the string for the contact to be filed as from the first, + middle and last name of the contact. +*/ void Contact::setFileAs() { QString lastName, firstName, middleName, fileas; lastName = find( Qtopia::LastName ); firstName = find( Qtopia::FirstName ); middleName = find( Qtopia::MiddleName ); if ( !lastName.isEmpty() && !firstName.isEmpty() && !middleName.isEmpty() ) fileas = lastName + ", " + firstName + " " + middleName; else if ( !lastName.isEmpty() && !firstName.isEmpty() ) fileas = lastName + ", " + firstName; else if ( !lastName.isEmpty() || !firstName.isEmpty() || !middleName.isEmpty() ) fileas = firstName + ( firstName.isEmpty() ? "" : " " ) + middleName + ( middleName.isEmpty() ? "" : " " ) + lastName; replace( Qtopia::FileAs, fileas ); } +/*! + \internal + Appends the contact information to \a buf. +*/ void Contact::save( QString &buf ) const { static const QStringList SLFIELDS = fields(); // I'm expecting "<Contact " in front of this... for ( QMap<int, QString>::ConstIterator it = mMap.begin(); it != mMap.end(); ++it ) { const QString &value = it.data(); int key = it.key(); if ( !value.isEmpty() ) { if ( key == Qtopia::AddressCategory || key == Qtopia::AddressUid) continue; key -= Qtopia::AddressCategory+1; buf += SLFIELDS[key]; buf += "=\"" + Qtopia::escapeString(value) + "\" "; } } buf += customToXml(); if ( categories().count() > 0 ) buf += "Categories=\"" + idsToString( categories() ) + "\" "; buf += "Uid=\"" + QString::number( uid() ) + "\" "; // You need to close this yourself } +/*! + \internal + Returns the list of fields belonging to a contact +*/ QStringList Contact::fields() { QStringList list; list.append( "Title" ); // Not Used! list.append( "FirstName" ); list.append( "MiddleName" ); list.append( "LastName" ); list.append( "Suffix" ); list.append( "FileAs" ); list.append( "JobTitle" ); list.append( "Department" ); list.append( "Company" ); list.append( "BusinessPhone" ); list.append( "BusinessFax" ); list.append( "BusinessMobile" ); list.append( "DefaultEmail" ); list.append( "Emails" ); list.append( "HomePhone" ); list.append( "HomeFax" ); list.append( "HomeMobile" ); list.append( "BusinessStreet" ); list.append( "BusinessCity" ); list.append( "BusinessState" ); list.append( "BusinessZip" ); list.append( "BusinessCountry" ); list.append( "BusinessPager" ); list.append( "BusinessWebPage" ); list.append( "Office" ); list.append( "Profession" ); list.append( "Assistant" ); list.append( "Manager" ); list.append( "HomeStreet" ); list.append( "HomeCity" ); list.append( "HomeState" ); list.append( "HomeZip" ); list.append( "HomeCountry" ); list.append( "HomeWebPage" ); list.append( "Spouse" ); list.append( "Gender" ); list.append( "Birthday" ); list.append( "Anniversary" ); list.append( "Nickname" ); list.append( "Children" ); list.append( "Notes" ); list.append( "Groups" ); return list; } +/*! + \internal + Returns a translated list of field names for a contact. +*/ QStringList Contact::trfields() { QStringList list; list.append( QObject::tr( "Name Title") ); list.append( QObject::tr( "First Name" ) ); list.append( QObject::tr( "Middle Name" ) ); list.append( QObject::tr( "Last Name" ) ); list.append( QObject::tr( "Suffix" ) ); list.append( QObject::tr( "File As" ) ); list.append( QObject::tr( "Job Title" ) ); list.append( QObject::tr( "Department" ) ); list.append( QObject::tr( "Company" ) ); list.append( QObject::tr( "Business Phone" ) ); list.append( QObject::tr( "Business Fax" ) ); list.append( QObject::tr( "Business Mobile" ) ); list.append( QObject::tr( "Default Email" ) ); list.append( QObject::tr( "Emails" ) ); list.append( QObject::tr( "Home Phone" ) ); list.append( QObject::tr( "Home Fax" ) ); list.append( QObject::tr( "Home Mobile" ) ); list.append( QObject::tr( "Business Street" ) ); list.append( QObject::tr( "Business City" ) ); list.append( QObject::tr( "Business State" ) ); list.append( QObject::tr( "Business Zip" ) ); list.append( QObject::tr( "Business Country" ) ); list.append( QObject::tr( "Business Pager" ) ); list.append( QObject::tr( "Business WebPage" ) ); list.append( QObject::tr( "Office" ) ); list.append( QObject::tr( "Profession" ) ); list.append( QObject::tr( "Assistant" ) ); list.append( QObject::tr( "Manager" ) ); list.append( QObject::tr( "Home Street" ) ); list.append( QObject::tr( "Home City" ) ); list.append( QObject::tr( "Home State" ) ); list.append( QObject::tr( "Home Zip" ) ); list.append( QObject::tr( "Home Country" ) ); list.append( QObject::tr( "Home Web Page" ) ); list.append( QObject::tr( "Spouse" ) ); list.append( QObject::tr( "Gender" ) ); list.append( QObject::tr( "Birthday" ) ); list.append( QObject::tr( "Anniversary" ) ); list.append( QObject::tr( "Nickname" ) ); list.append( QObject::tr( "Children" ) ); list.append( QObject::tr( "Notes" ) ); list.append( QObject::tr( "Groups" ) ); return list; } -void Contact::setEmails( const QString &v ) +/*! + Sets the list of email address for contact to those contained in \a str. + Email address should be separated by ';'s. +*/ +void Contact::setEmails( const QString &str ) { - replace( Qtopia::Emails, v ); - if ( v.isEmpty() ) + replace( Qtopia::Emails, str ); + if ( str.isEmpty() ) setDefaultEmail( QString::null ); } -void Contact::setChildren( const QString &v ) +/*! + Sets the list of children for the contact to those contained in \a str. +*/ +void Contact::setChildren( const QString &str ) { - replace( Qtopia::Children, v ); + replace( Qtopia::Children, str ); } // vcard conversion code +/*! + \internal +*/ static inline VObject *safeAddPropValue( VObject *o, const char *prop, const QString &value ) { VObject *ret = 0; if ( o && !value.isEmpty() ) ret = addPropValue( o, prop, value.latin1() ); return ret; } +/*! + \internal +*/ static inline VObject *safeAddProp( VObject *o, const char *prop) { VObject *ret = 0; if ( o ) ret = addProp( o, prop ); return ret; } +/*! + \internal +*/ static VObject *createVObject( const Contact &c ) { VObject *vcard = newVObject( VCCardProp ); safeAddPropValue( vcard, VCVersionProp, "2.1" ); safeAddPropValue( vcard, VCLastRevisedProp, TimeConversion::toISO8601( QDateTime::currentDateTime() ) ); safeAddPropValue( vcard, VCUniqueStringProp, QString::number(c.uid()) ); // full name safeAddPropValue( vcard, VCFullNameProp, c.fullName() ); // name properties VObject *name = safeAddProp( vcard, VCNameProp ); safeAddPropValue( name, VCFamilyNameProp, c.lastName() ); safeAddPropValue( name, VCGivenNameProp, c.firstName() ); safeAddPropValue( name, VCAdditionalNamesProp, c.middleName() ); safeAddPropValue( name, VCNamePrefixesProp, c.title() ); safeAddPropValue( name, VCNameSuffixesProp, c.suffix() ); // home properties VObject *home_adr= safeAddProp( vcard, VCAdrProp ); safeAddProp( home_adr, VCHomeProp ); safeAddPropValue( home_adr, VCStreetAddressProp, c.homeStreet() ); safeAddPropValue( home_adr, VCCityProp, c.homeCity() ); safeAddPropValue( home_adr, VCRegionProp, c.homeState() ); safeAddPropValue( home_adr, VCPostalCodeProp, c.homeZip() ); safeAddPropValue( home_adr, VCCountryNameProp, c.homeCountry() ); VObject *home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homePhone() ); safeAddProp( home_phone, VCHomeProp ); home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeMobile() ); safeAddProp( home_phone, VCHomeProp ); safeAddProp( home_phone, VCCellularProp ); home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeFax() ); safeAddProp( home_phone, VCHomeProp ); safeAddProp( home_phone, VCFaxProp ); VObject *url = safeAddPropValue( vcard, VCURLProp, c.homeWebpage() ); safeAddProp( url, VCHomeProp ); // work properties VObject *work_adr= safeAddProp( vcard, VCAdrProp ); safeAddProp( work_adr, VCWorkProp ); safeAddPropValue( work_adr, VCStreetAddressProp, c.businessStreet() ); safeAddPropValue( work_adr, VCCityProp, c.businessCity() ); safeAddPropValue( work_adr, VCRegionProp, c.businessState() ); safeAddPropValue( work_adr, VCPostalCodeProp, c.businessZip() ); safeAddPropValue( work_adr, VCCountryNameProp, c.businessCountry() ); @@ -577,102 +1050,103 @@ static VObject *createVObject( const Contact &c ) safeAddProp( work_phone, VCCellularProp ); work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessFax() ); safeAddProp( work_phone, VCWorkProp ); safeAddProp( work_phone, VCFaxProp ); work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPager() ); safeAddProp( work_phone, VCWorkProp ); safeAddProp( work_phone, VCPagerProp ); url = safeAddPropValue( vcard, VCURLProp, c.businessWebpage() ); safeAddProp( url, VCWorkProp ); VObject *title = safeAddPropValue( vcard, VCTitleProp, c.jobTitle() ); safeAddProp( title, VCWorkProp ); QStringList emails = c.emailList(); emails.prepend( c.defaultEmail() ); for( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) { VObject *email = safeAddPropValue( vcard, VCEmailAddressProp, *it ); safeAddProp( email, VCInternetProp ); } safeAddPropValue( vcard, VCNoteProp, c.notes() ); safeAddPropValue( vcard, VCBirthDateProp, c.birthday() ); if ( !c.company().isEmpty() || !c.department().isEmpty() || !c.office().isEmpty() ) { VObject *org = safeAddProp( vcard, VCOrgProp ); safeAddPropValue( org, VCOrgNameProp, c.company() ); safeAddPropValue( org, VCOrgUnitProp, c.department() ); safeAddPropValue( org, VCOrgUnit2Prop, c.office() ); } // some values we have to export as custom fields safeAddPropValue( vcard, "X-Qtopia-Profession", c.profession() ); safeAddPropValue( vcard, "X-Qtopia-Manager", c.manager() ); safeAddPropValue( vcard, "X-Qtopia-Assistant", c.assistant() ); safeAddPropValue( vcard, "X-Qtopia-Spouse", c.spouse() ); safeAddPropValue( vcard, "X-Qtopia-Gender", c.gender() ); safeAddPropValue( vcard, "X-Qtopia-Anniversary", c.anniversary() ); safeAddPropValue( vcard, "X-Qtopia-Nickname", c.nickname() ); safeAddPropValue( vcard, "X-Qtopia-Children", c.children() ); return vcard; } +/*! + \internal +*/ static Contact parseVObject( VObject *obj ) { Contact c; - bool haveDefaultEmail = FALSE; - VObjectIterator it; initPropIterator( &it, obj ); while( moreIteration( &it ) ) { VObject *o = nextVObject( &it ); QCString name = vObjectName( o ); QCString value = vObjectStringZValue( o ); if ( name == VCNameProp ) { VObjectIterator nit; initPropIterator( &nit, o ); while( moreIteration( &nit ) ) { VObject *o = nextVObject( &nit ); QCString name = vObjectTypeInfo( o ); QString value = vObjectStringZValue( o ); if ( name == VCNamePrefixesProp ) c.setTitle( value ); else if ( name == VCNameSuffixesProp ) c.setSuffix( value ); else if ( name == VCFamilyNameProp ) c.setLastName( value ); else if ( name == VCGivenNameProp ) c.setFirstName( value ); else if ( name == VCAdditionalNamesProp ) c.setMiddleName( value ); } } else if ( name == VCAdrProp ) { bool work = TRUE; // default address is work address QString street; QString city; QString region; QString postal; QString country; VObjectIterator nit; initPropIterator( &nit, o ); while( moreIteration( &nit ) ) { VObject *o = nextVObject( &nit ); QCString name = vObjectName( o ); QString value = vObjectStringZValue( o ); if ( name == VCHomeProp ) work = FALSE; else if ( name == VCWorkProp ) work = TRUE; else if ( name == VCStreetAddressProp ) street = value; else if ( name == VCCityProp ) city = value; else if ( name == VCRegionProp ) @@ -722,203 +1196,213 @@ static Contact parseVObject( VObject *obj ) else if ( name == VCCellularProp ) type |= CELL; else if ( name == VCFaxProp ) type |= FAX; else if ( name == VCPagerProp ) type |= PAGER; else if ( name == VCPreferredProp ) ; else type |= UNKNOWN; } if ( (type & UNKNOWN) != UNKNOWN ) { if ( ( type & (HOME|WORK) ) == 0 ) // default type |= HOME; if ( ( type & (VOICE|CELL|FAX|PAGER) ) == 0 ) // default type |= VOICE; if ( (type & (VOICE|HOME) ) == (VOICE|HOME) ) c.setHomePhone( value ); if ( ( type & (FAX|HOME) ) == (FAX|HOME) ) c.setHomeFax( value ); if ( ( type & (CELL|HOME) ) == (CELL|HOME) ) c.setHomeMobile( value ); if ( ( type & (VOICE|WORK) ) == (VOICE|WORK) ) c.setBusinessPhone( value ); if ( ( type & (FAX|WORK) ) == (FAX|WORK) ) c.setBusinessFax( value ); if ( ( type & (CELL|WORK) ) == (CELL|WORK) ) c.setBusinessMobile( value ); if ( ( type & (PAGER|WORK) ) == (PAGER|WORK) ) c.setBusinessPager( value ); } } else if ( name == VCEmailAddressProp ) { QString email = vObjectStringZValue( o ); bool valid = TRUE; VObjectIterator nit; initPropIterator( &nit, o ); while( moreIteration( &nit ) ) { VObject *o = nextVObject( &nit ); QCString name = vObjectTypeInfo( o ); if ( name != VCInternetProp && name != VCHomeProp && name != VCWorkProp && name != VCPreferredProp ) // ### preffered should map to default email valid = FALSE; } if ( valid ) { - if ( haveDefaultEmail ) { - QString str = c.emails(); - if ( !str.isEmpty() ) - str += ","+email; - c.setEmails( str ); - } else { - c.setDefaultEmail( email ); - } + c.insertEmail( email ); } } else if ( name == VCURLProp ) { VObjectIterator nit; initPropIterator( &nit, o ); while( moreIteration( &nit ) ) { VObject *o = nextVObject( &nit ); QCString name = vObjectTypeInfo( o ); if ( name == VCHomeProp ) c.setHomeWebpage( value ); else if ( name == VCWorkProp ) c.setBusinessWebpage( value ); } } else if ( name == VCOrgProp ) { VObjectIterator nit; initPropIterator( &nit, o ); while( moreIteration( &nit ) ) { VObject *o = nextVObject( &nit ); QCString name = vObjectName( o ); QString value = vObjectStringZValue( o ); if ( name == VCOrgNameProp ) c.setCompany( value ); else if ( name == VCOrgUnitProp ) c.setDepartment( value ); else if ( name == VCOrgUnit2Prop ) c.setOffice( value ); } } else if ( name == VCTitleProp ) { c.setJobTitle( value ); } else if ( name == "X-Qtopia-Profession" ) { c.setProfession( value ); } else if ( name == "X-Qtopia-Manager" ) { c.setManager( value ); } else if ( name == "X-Qtopia-Assistant" ) { c.setAssistant( value ); } else if ( name == "X-Qtopia-Spouse" ) { c.setSpouse( value ); } else if ( name == "X-Qtopia-Gender" ) { c.setGender( value ); } else if ( name == "X-Qtopia-Anniversary" ) { c.setAnniversary( value ); } else if ( name == "X-Qtopia-Nickname" ) { c.setNickname( value ); } else if ( name == "X-Qtopia-Children" ) { c.setChildren( value ); } #if 0 else { printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) ); VObjectIterator nit; initPropIterator( &nit, o ); while( moreIteration( &nit ) ) { VObject *o = nextVObject( &nit ); QCString name = vObjectName( o ); QString value = vObjectStringZValue( o ); printf(" subprop: %s = %s\n", name.data(), value.latin1() ); } } #endif } c.setFileAs(); return c; } +/*! + Writes the list of \a contacts as a set of VCards to the file \a filename. +*/ void Contact::writeVCard( const QString &filename, const QValueList<Contact> &contacts) { QFileDirect f( filename.utf8().data() ); if ( !f.open( IO_WriteOnly ) ) { qWarning("Unable to open vcard write"); return; } QValueList<Contact>::ConstIterator it; for( it = contacts.begin(); it != contacts.end(); ++it ) { VObject *obj = createVObject( *it ); writeVObject(f.directHandle() , obj ); cleanVObject( obj ); } cleanStrTbl(); } +/*! + writes \a contact as a VCard to the file \a filename. +*/ void Contact::writeVCard( const QString &filename, const Contact &contact) { QFileDirect f( filename.utf8().data() ); if ( !f.open( IO_WriteOnly ) ) { qWarning("Unable to open vcard write"); return; } VObject *obj = createVObject( contact ); writeVObject( f.directHandle() , obj ); cleanVObject( obj ); cleanStrTbl(); } - +/*! + Returns the set of contacts read as VCards from the file \a filename. +*/ QValueList<Contact> Contact::readVCard( const QString &filename ) { qDebug("trying to open %s, exists=%d", filename.utf8().data(), QFileInfo( filename.utf8().data() ).size() ); VObject *obj = Parse_MIME_FromFileName( (char *)filename.utf8().data() ); qDebug("vobject = %p", obj ); QValueList<Contact> contacts; while ( obj ) { contacts.append( parseVObject( obj ) ); VObject *t = obj; obj = nextVObjectInList(obj); cleanVObject( t ); } return contacts; } +/*! + Returns TRUE if the contact matches the regular expression \a regexp. + Otherwise returns FALSE. +*/ bool Contact::match( const QString ®exp ) const { return match(QRegExp(regexp)); } +/*! + \overload + Returns TRUE if the contact matches the regular expression \a regexp. + Otherwise returns FALSE. +*/ bool Contact::match( const QRegExp &r ) const { bool match; match = false; QMap<int, QString>::ConstIterator it; for ( it = mMap.begin(); it != mMap.end(); ++it ) { if ( (*it).find( r ) > -1 ) { match = true; break; } } return match; } diff --git a/library/backend/contact.h b/library/backend/contact.h index a74cbbe..4999430 100644 --- a/library/backend/contact.h +++ b/library/backend/contact.h @@ -1,222 +1,306 @@ /********************************************************************** -** Copyright (C) 2001 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef __CONTACT_H__ #define __CONTACT_H__ -#include <qpe/palmtoprecord.h> -#include <qpe/recordfields.h> +#include <qtopia/private/palmtoprecord.h> +#include <qtopia/private/recordfields.h> #include <qstringlist.h> #if defined(QPC_TEMPLATEDLL) // MOC_SKIP_BEGIN -template class QPC_EXPORT QMap<int, QString>; +QPC_TEMPLATEEXTERN template class QPC_EXPORT QMap<int, QString>; // MOC_SKIP_END #endif class ContactPrivate; class QPC_EXPORT Contact : public Qtopia::Record { friend class DataSet; public: Contact(); Contact( const QMap<int, QString> &fromMap ); virtual ~Contact(); static void writeVCard( const QString &filename, const QValueList<Contact> &contacts); static void writeVCard( const QString &filename, const Contact &c ); static QValueList<Contact> readVCard( const QString &filename ); enum journal_action { ACTION_ADD, ACTION_REMOVE, ACTION_REPLACE }; void setTitle( const QString &v ) { replace( Qtopia::Title, v ); } void setFirstName( const QString &v ) { replace( Qtopia::FirstName, v ); } void setMiddleName( const QString &v ) { replace( Qtopia::MiddleName, v ); } void setLastName( const QString &v ) { replace( Qtopia::LastName, v ); } void setSuffix( const QString &v ) { replace( Qtopia::Suffix, v ); } void setFileAs( const QString &v ) { replace( Qtopia::FileAs, v ); } void setFileAs(); // default email address - void setDefaultEmail( const QString &v ) { replace( Qtopia::DefaultEmail, v ); } - // the emails should be seperated by a semicolon - void setEmails( const QString &v ); + void setDefaultEmail( const QString &v ); + // inserts email to list and ensure's doesn't already exist + void insertEmail( const QString &v ); + void removeEmail( const QString &v ); + void clearEmails(); + void insertEmails( const QStringList &v ); // home void setHomeStreet( const QString &v ) { replace( Qtopia::HomeStreet, v ); } void setHomeCity( const QString &v ) { replace( Qtopia::HomeCity, v ); } void setHomeState( const QString &v ) { replace( Qtopia::HomeState, v ); } void setHomeZip( const QString &v ) { replace( Qtopia::HomeZip, v ); } void setHomeCountry( const QString &v ) { replace( Qtopia::HomeCountry, v ); } void setHomePhone( const QString &v ) { replace( Qtopia::HomePhone, v ); } void setHomeFax( const QString &v ) { replace( Qtopia::HomeFax, v ); } void setHomeMobile( const QString &v ) { replace( Qtopia::HomeMobile, v ); } void setHomeWebpage( const QString &v ) { replace( Qtopia::HomeWebPage, v ); } // business void setCompany( const QString &v ) { replace( Qtopia::Company, v ); } void setBusinessStreet( const QString &v ) { replace( Qtopia::BusinessStreet, v ); } void setBusinessCity( const QString &v ) { replace( Qtopia::BusinessCity, v ); } void setBusinessState( const QString &v ) { replace( Qtopia::BusinessState, v ); } void setBusinessZip( const QString &v ) { replace( Qtopia::BusinessZip, v ); } void setBusinessCountry( const QString &v ) { replace( Qtopia::BusinessCountry, v ); } void setBusinessWebpage( const QString &v ) { replace( Qtopia::BusinessWebPage, v ); } void setJobTitle( const QString &v ) { replace( Qtopia::JobTitle, v ); } void setDepartment( const QString &v ) { replace( Qtopia::Department, v ); } void setOffice( const QString &v ) { replace( Qtopia::Office, v ); } void setBusinessPhone( const QString &v ) { replace( Qtopia::BusinessPhone, v ); } void setBusinessFax( const QString &v ) { replace( Qtopia::BusinessFax, v ); } void setBusinessMobile( const QString &v ) { replace( Qtopia::BusinessMobile, v ); } void setBusinessPager( const QString &v ) { replace( Qtopia::BusinessPager, v ); } void setProfession( const QString &v ) { replace( Qtopia::Profession, v ); } void setAssistant( const QString &v ) { replace( Qtopia::Assistant, v ); } void setManager( const QString &v ) { replace( Qtopia::Manager, v ); } // personal void setSpouse( const QString &v ) { replace( Qtopia::Spouse, v ); } void setGender( const QString &v ) { replace( Qtopia::Gender, v ); } void setBirthday( const QString &v ) { replace( Qtopia::Birthday, v ); } void setAnniversary( const QString &v ) { replace( Qtopia::Anniversary, v ); } void setNickname( const QString &v ) { replace( Qtopia::Nickname, v ); } void setChildren( const QString &v ); // other void setNotes( const QString &v ) { replace( Qtopia::Notes, v); } bool match( const QString ®exp ) const; // DON'T ATTEMPT TO USE THIS #ifdef QTOPIA_INTERNAL_CONTACT_MRE bool match( const QRegExp ®exp ) const; #endif // // custom // void setCustomField( const QString &key, const QString &v ) // { replace(Custom- + key, v ); } // name QString fullName() const; QString title() const { return find( Qtopia::Title ); } QString firstName() const { return find( Qtopia::FirstName ); } QString middleName() const { return find( Qtopia::MiddleName ); } QString lastName() const { return find( Qtopia::LastName ); } QString suffix() const { return find( Qtopia::Suffix ); } QString fileAs() const { return find( Qtopia::FileAs ); } // email QString defaultEmail() const { return find( Qtopia::DefaultEmail ); } - QString emails() const { return find( Qtopia::Emails ); } QStringList emailList() const; // home QString homeStreet() const { return find( Qtopia::HomeStreet ); } QString homeCity() const { return find( Qtopia::HomeCity ); } QString homeState() const { return find( Qtopia::HomeState ); } QString homeZip() const { return find( Qtopia::HomeZip ); } QString homeCountry() const { return find( Qtopia::HomeCountry ); } QString homePhone() const { return find( Qtopia::HomePhone ); } QString homeFax() const { return find( Qtopia::HomeFax ); } QString homeMobile() const { return find( Qtopia::HomeMobile ); } QString homeWebpage() const { return find( Qtopia::HomeWebPage ); } /** Multi line string containing all non-empty address info in the form * Street * City, State Zip * Country */ QString displayHomeAddress() const; // business QString company() const { return find( Qtopia::Company ); } QString businessStreet() const { return find( Qtopia::BusinessStreet ); } QString businessCity() const { return find( Qtopia::BusinessCity ); } QString businessState() const { return find( Qtopia::BusinessState ); } QString businessZip() const { return find( Qtopia::BusinessZip ); } QString businessCountry() const { return find( Qtopia::BusinessCountry ); } QString businessWebpage() const { return find( Qtopia::BusinessWebPage ); } QString jobTitle() const { return find( Qtopia::JobTitle ); } QString department() const { return find( Qtopia::Department ); } QString office() const { return find( Qtopia::Office ); } QString businessPhone() const { return find( Qtopia::BusinessPhone ); } QString businessFax() const { return find( Qtopia::BusinessFax ); } QString businessMobile() const { return find( Qtopia::BusinessMobile ); } QString businessPager() const { return find( Qtopia::BusinessPager ); } QString profession() const { return find( Qtopia::Profession ); } QString assistant() const { return find( Qtopia::Assistant ); } QString manager() const { return find( Qtopia::Manager ); } /** Multi line string containing all non-empty address info in the form * Street * City, State Zip * Country */ QString displayBusinessAddress() const; //personal QString spouse() const { return find( Qtopia::Spouse ); } QString gender() const { return find( Qtopia::Gender ); } QString birthday() const { return find( Qtopia::Birthday ); } QString anniversary() const { return find( Qtopia::Anniversary ); } QString nickname() const { return find( Qtopia::Nickname ); } QString children() const { return find( Qtopia::Children ); } QStringList childrenList() const; // other QString notes() const { return find( Qtopia::Notes ); } QString groups() const { return find( Qtopia::Groups ); } QStringList groupList() const; // // custom // const QString &customField( const QString &key ) // { return find( Custom- + key ); } static QStringList fields(); static QStringList trfields(); QString toRichText() const; QMap<int, QString> toMap() const; QString field( int key ) const { return find( key ); } // journaling... void saveJournal( journal_action action, const QString &key = QString::null ); void save( QString &buf ) const; void setUid( int i ) { Record::setUid(i); replace( Qtopia::AddressUid , QString::number(i)); } private: + friend class AbEditor; friend class AbTable; + friend class AddressBookAccessPrivate; + friend class XMLIO; + + QString emailSeparator() const { return " "; } + // the emails should be seperated by a comma + void setEmails( const QString &v ); + QString emails() const { return find( Qtopia::Emails ); } + void insert( int key, const QString &value ); void replace( int key, const QString &value ); QString find( int key ) const; QString displayAddress( const QString &street, const QString &city, const QString &state, const QString &zip, const QString &country ) const; Qtopia::UidGen &uidGen() { return sUidGen; } static Qtopia::UidGen sUidGen; QMap<int, QString> mMap; ContactPrivate *d; }; +// these methods are inlined to keep binary compatability with Qtopia 1.5 +inline void Contact::insertEmail( const QString &v ) +{ + //qDebug("insertEmail %s", v.latin1()); + QString e = v.simplifyWhiteSpace(); + QString def = defaultEmail(); + + // if no default, set it as the default email and don't insert + if ( def.isEmpty() ) { + setDefaultEmail( e ); // will insert into the list for us + return; + } + + // otherwise, insert assuming doesn't already exist + QString emailsStr = find( Qtopia::Emails ); + if ( emailsStr.contains( e )) + return; + if ( !emailsStr.isEmpty() ) + emailsStr += emailSeparator(); + emailsStr += e; + replace( Qtopia::Emails, emailsStr ); +} + +inline void Contact::removeEmail( const QString &v ) +{ + QString e = v.simplifyWhiteSpace(); + QString def = defaultEmail(); + QString emailsStr = find( Qtopia::Emails ); + QStringList emails = emailList(); + + // otherwise, must first contain it + if ( !emailsStr.contains( e ) ) + return; + + // remove it + //qDebug(" removing email from list %s", e.latin1()); + emails.remove( e ); + // reset the string + emailsStr = emails.join(emailSeparator()); // Sharp's brain dead separator + replace( Qtopia::Emails, emailsStr ); + + // if default, then replace the default email with the first one + if ( def == e ) { + //qDebug("removeEmail is default; setting new default"); + if ( !emails.count() ) + clearEmails(); + else // setDefaultEmail will remove e from the list + setDefaultEmail( emails.first() ); + } +} +inline void Contact::clearEmails() +{ + mMap.remove( Qtopia::DefaultEmail ); + mMap.remove( Qtopia::Emails ); +} +inline void Contact::setDefaultEmail( const QString &v ) +{ + QString e = v.simplifyWhiteSpace(); + + //qDebug("Contact::setDefaultEmail %s", e.latin1()); + replace( Qtopia::DefaultEmail, e ); + + if ( !e.isEmpty() ) + insertEmail( e ); + +} + +inline void Contact::insertEmails( const QStringList &v ) +{ + for ( QStringList::ConstIterator it = v.begin(); it != v.end(); ++it ) + insertEmail( *it ); +} + #endif diff --git a/library/backend/event.cpp b/library/backend/event.cpp index 50a663d..7110717 100644 --- a/library/backend/event.cpp +++ b/library/backend/event.cpp @@ -1,643 +1,1108 @@ /********************************************************************** -** Copyright (C) 2001 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ -#include "event.h"
+#include "event.h" #include "qfiledirect_p.h" -#include <qpe/timeconversion.h> -#include <qpe/stringutil.h> -#include <qpe/recordfields.h> +#include <qtopia/timeconversion.h> +#include <qtopia/stringutil.h> +#include <qtopia/private/recordfields.h> #include <qbuffer.h> #include <time.h> #include "vobject_p.h" #include <stdio.h> using namespace Qtopia; static void write( QString& buf, const Event::RepeatPattern &r ) { buf += " rtype=\""; switch ( r.type ) { case Event::Daily: buf += "Daily"; break; case Event::Weekly: buf += "Weekly"; break; case Event::MonthlyDay: buf += "MonthlyDay"; break; case Event::MonthlyDate: buf += "MonthlyDate"; break; case Event::Yearly: buf += "Yearly"; break; default: buf += "NoRepeat"; break; } buf += "\""; if ( r.days > 0 ) buf += " rweekdays=\"" + QString::number( static_cast<int>( r.days ) ) + "\""; if ( r.position != 0 ) buf += " rposition=\"" + QString::number( r.position ) + "\""; buf += " rfreq=\"" + QString::number( r.frequency ) + "\""; buf += " rhasenddate=\"" + QString::number( static_cast<int>( r.hasEndDate ) ) + "\""; if ( r.hasEndDate ) buf += " enddt=\"" + QString::number( r.endDateUTC ? r.endDateUTC : time( 0 ) ) + "\""; buf += " created=\"" + QString::number( r.createTime ) + "\""; } Qtopia::UidGen Event::sUidGen( Qtopia::UidGen::Qtopia ); +/*! + \class Event event.h + \brief The Event class holds the data of a calendar event. + + This data includes descriptive data of the event and schedualing information. + + \ingroup qtopiaemb + \ingroup qtopiadesktop +*/ + +/*! + \class Event::RepeatPattern + \class The Event::RepeatPattern class is internal. + \internal +*/ + +/*! + \enum Event::Days + \internal +*/ + +/*! + \enum Event::Type + \internal +*/ + +/*! + \enum Event::SoundTypeChoice + + This enum type defines what kind of sound is made when an alarm occurs + for an event. The currently defined types are: + + <ul> + <li>\c Silent - No sound is produced. + <li>\c Loud - A loud sound is produced. + </ul> +*/ + +/*! + \fn bool Event::operator<( const Event & ) const + \internal +*/ + +/*! + \fn bool Event::operator<=( const Event & ) const + \internal +*/ + +/*! + \fn bool Event::operator!=( const Event & ) const + \internal +*/ + +/*! + \fn bool Event::operator>( const Event & ) const + \internal +*/ + +/*! + \fn bool Event::operator>=( const Event & ) const + \internal +*/ + +/*! + \enum Event::RepeatType + + This enum defines how a event will repeat, if at all. + + <ul> + <li>\c NoRepeat - Event does not repeat. + <li>\c Daily - Event occurs every n days. + <li>\c Weekly - Event occurs every n weeks. + <li>\c MonthlyDay - Event occurs every n months. Event will always occur in + the same week and same day of week as the first event. + <li>\c MonthlyDate - Event occurs every n months. Event will always occur + on the same day of the month as the first event. + <li>\c Yearly - Event occurs every n years. + </ul> +*/ + +/*! + \fn bool Event::isAllDay() const + + Returns TRUE if the event is an all day event. Otherwise returns FALSE. +*/ + +/*! + \fn void Event::setAllDay(bool allday) + + If \a allday is TRUE, will set the event to be an all day event. + Otherwise sets the event to not be an all day event. + + \warning This function may affect the start and end times of the event. +*/ + +/*! + \fn QDateTime Event::start() const + + Returns the start date and time of the first occurance of the event. +*/ + +/*! + \fn QDateTime Event::end() const + + Returns the end date and time of the first occurance of the event. +*/ + +/*! + \fn time_t Event::startTime() const + \internal +*/ + +/*! + \fn time_t Event::endTime() const + \internal +*/ + +/*! + \fn void Event::setAlarm(int delay, SoundTypeChoice s) + + Sets the alarm delay of the event to \a delay and the sound type of the + alarm to \a s. +*/ + +/*! + \fn void Event::clearAlarm() + + Clears the alarm for the event. +*/ + +/*! + \fn int Event::alarmDelay() const + + Returns the delay in minutes between the alarm for an event and the + start of the event. +*/ + +/*! + \fn Event::RepeatType Event::repeatType() const + + Returns the repeat pattern type for the event. + + \sa frequency() +*/ + +/*! + \fn int Event::weekOffset() const + + Returns the number of weeks from the start of the month that this event + occurs. +*/ + +/*! + \fn QDate Event::repeatTill() const + + Returns the date that the event will continue to repeat until. If the event + repeats forever the value returned is undefined. + + \sa repeatForever() +*/ + +/*! + \fn bool Event::repeatForever() const + + Returns FALSE if there is a date set for the event to continue until. + Otherwise returns TRUE. +*/ + +/*! + \fn bool Event::doRepeat() const + \internal +*/ + +/*! + \fn bool Event::repeatOnWeekDay(int day) const + + Returns TRUE if the event has a RepeatType of Weekly and is set to occur on + \a day each week. Otherwise returns FALSE. + + \sa QDate::dayName() +*/ + +/*! + \fn void Event::setRepeatOnWeekDay(int day, bool enable) + + If \a enable is TRUE then sets the event to occur on \a day each week. + Otherwise sets the event not to occur on \a day. + + \warning this function is only relavent for a event with RepeatType of + Weekly. + + \sa QDate::dayName() +*/ + +/*! + \fn int Event::frequency() const + + Returns how often the event repeats. + + \sa repeatType() +*/ + +/*! + \fn void Event::setRepeatType(RepeatType t) + + Sets the repeat pattern type of the event to \a t. + + \sa setFrequency() +*/ + +/*! + \fn void Event::setFrequency(int n) + + Sets how often the event occurs with in its repeat pattern. + + \sa setRepeatType() +*/ + +/*! + \fn void Event::setRepeatTill(const QDate &d) + + Sets the event to repeat until \a d. +*/ + +/*! + \fn void Event::setRepeatForever(bool enable) + + If \a enable is TRUE, sets the event to repeat forever. Otherwise + sets the event to stop repeating at some date. + + \warning This function may affect the specific date the event will repeat + till. +*/ + +/*! + \fn bool Event::match(const QRegExp &r) const + + Returns TRUE if the event matches the regular expression \a r. + Otherwise returns FALSE. +*/ + +/*! + \fn char Event::day(int) + \internal +*/ + +/*! + Creates a new, empty event. +*/ Event::Event() : Record() { startUTC = endUTC = time( 0 ); typ = Normal; hAlarm = FALSE; hRepeat = FALSE; aMinutes = 0; aSound = Silent; pattern.type = NoRepeat; pattern.frequency = -1; } +/*! + \internal +*/ Event::Event( const QMap<int, QString> &map ) { setDescription( map[DatebookDescription] ); setLocation( map[Location] ); setCategories( idsFromString( map[DatebookCategory] ) ); setTimeZone( map[TimeZone] ); setNotes( map[Note] ); setStart( TimeConversion::fromUTC( map[StartDateTime].toUInt() ) ); setEnd( TimeConversion::fromUTC( map[EndDateTime].toUInt() ) ); setType( (Event::Type) map[DatebookType].toInt() ); setAlarm( ( map[HasAlarm] == "1" ? TRUE : FALSE ), map[AlarmTime].toInt(), (Event::SoundTypeChoice)map[SoundType].toInt() ); Event::RepeatPattern p; p.type = (Event::RepeatType) map[ RepeatPatternType ].toInt(); p.frequency = map[ RepeatPatternFrequency ].toInt(); p.position = map[ RepeatPatternPosition ].toInt(); p.days = map[ RepeatPatternDays ].toInt(); p.hasEndDate = map[ RepeatPatternHasEndDate ].toInt(); p.endDateUTC = map[ RepeatPatternEndDate ].toUInt(); setRepeat( p ); setUid( map[ DatebookUid ].toInt() ); } +/*! + Destroys an event. +*/ Event::~Event() { } +/*! + \internal +*/ int Event::week( const QDate& date ) { // Calculates the week this date is in within that // month. Equals the "row" is is in in the month view int week = 1; QDate tmp( date.year(), date.month(), 1 ); if ( date.dayOfWeek() < tmp.dayOfWeek() ) ++week; week += ( date.day() - 1 ) / 7; return week; } +/*! + \internal +*/ int Event::occurrence( const QDate& date ) { // calculates the number of occurrances of this day of the // week till the given date (e.g 3rd Wednesday of the month) return ( date.day() - 1 ) / 7 + 1; } +/*! + \internal +*/ int Event::dayOfWeek( char day ) { int dayOfWeek = 1; char i = Event::MON; while ( !( i & day ) && i <= Event::SUN ) { i <<= 1; ++dayOfWeek; } return dayOfWeek; } +/*! + \internal +*/ int Event::monthDiff( const QDate& first, const QDate& second ) { return ( second.year() - first.year() ) * 12 + second.month() - first.month(); } +/*! + \internal +*/ QMap<int, QString> Event::toMap() const { QMap<int, QString> m; - m.insert( DatebookDescription, description() ); - m.insert ( Location, location() ); - m.insert ( DatebookCategory, idsToString( categories() ) ); - m.insert ( TimeZone, timeZone() ); - m.insert ( Note, notes() ); + + if ( !description().isEmpty() ) + m.insert( DatebookDescription, description() ); + if ( !location().isEmpty() ) + m.insert ( Location, location() ); + if ( categories().count() ) + m.insert ( DatebookCategory, idsToString( categories() ) ); + if ( !timeZone().isEmpty() ) + m.insert ( TimeZone, timeZone() ); + if ( !notes().isEmpty() ) + m.insert ( Note, notes() ); + m.insert ( StartDateTime, QString::number( TimeConversion::toUTC( start() ) ) ); m.insert ( EndDateTime, QString::number( TimeConversion::toUTC( end() ) ) ); m.insert ( DatebookType, QString::number( (int)type() ) ); m.insert ( HasAlarm, ( hasAlarm() ? "1" : "0" ) ); m.insert ( SoundType, QString::number( (int)alarmSound() ) ); m.insert ( AlarmTime, QString::number( alarmTime() ) ); m.insert ( RepeatPatternType, QString::number( static_cast<int>( repeatPattern().type ) ) ); m.insert ( RepeatPatternFrequency, QString::number( repeatPattern().frequency ) ); m.insert ( RepeatPatternPosition, QString::number( repeatPattern().position ) ); m.insert ( RepeatPatternDays, QString::number( repeatPattern().days ) ); m.insert ( RepeatPatternHasEndDate, QString::number( static_cast<int>( repeatPattern().hasEndDate ) ) ); m.insert ( RepeatPatternEndDate, QString::number( repeatPattern().endDateUTC ) ); m.insert( DatebookUid, QString::number( uid()) ); return m; } +/*! + \internal +*/ void Event::setRepeat( const RepeatPattern &p ) { setRepeat( p.type != NoRepeat, p ); } +/*! + Sets the description of the event to \a s. +*/ void Event::setDescription( const QString &s ) { descript = s; } +/*! + Sets the location of the event to \a s. +*/ void Event::setLocation( const QString &s ) { locat = s; } // void Event::setCategory( const QString &s ) // { // categ = s; // } +/*! + \internal +*/ void Event::setType( Type t ) { typ = t; } +/*! + Sets the start date and time of the first or only occurance of this event + to the date and time \a d. \a d should be in local time. +*/ void Event::setStart( const QDateTime &d ) { startUTC = TimeConversion::toUTC( d ); } +/*! + \internal +*/ void Event::setStart( time_t time ) { startUTC = time; } +/*! + Sets the end date and time of the first or only occurance of this event + to the date and time \a d. \a d should be in local time. +*/ void Event::setEnd( const QDateTime &d ) { endUTC = TimeConversion::toUTC( d ); } +/*! + \internal +*/ void Event::setEnd( time_t time ) { endUTC = time; } +/*! + \internal +*/ void Event::setTimeZone( const QString &z ) { tz = z; } +/*! + \internal +*/ void Event::setAlarm( bool b, int minutes, SoundTypeChoice s ) { hAlarm = b; aMinutes = minutes; aSound = s; } +/*! + \internal +*/ void Event::setRepeat( bool b, const RepeatPattern &p ) { hRepeat = b; pattern = p; } +/*! + Sets the notes for the event to \a n. +*/ void Event::setNotes( const QString &n ) { note = n; } +/*! + Returns the description of the event. +*/ const QString &Event::description() const { return descript; } +/*! + Returns the location of the event. +*/ const QString &Event::location() const { return locat; } // QString Event::category() const // { // return categ; // } +/*! + \internal +*/ Event::Type Event::type() const { return typ; } +/*! + \internal +*/ QDateTime Event::start( bool actual ) const { QDateTime dt = (startUTC > 0) ? TimeConversion::fromUTC( startUTC ) : QDateTime::currentDateTime(); if ( actual && typ == AllDay ) { QTime t = dt.time(); t.setHMS( 0, 0, 0 ); dt.setTime( t ); } return dt; } +/*! + \internal +*/ QDateTime Event::end( bool actual ) const { QDateTime dt = (endUTC > 0) ? TimeConversion::fromUTC( endUTC ) : QDateTime::currentDateTime(); if ( actual && typ == AllDay ) { QTime t = dt.time(); t.setHMS( 23, 59, 59 ); dt.setTime( t ); } return dt; } +/*! + \internal +*/ const QString &Event::timeZone() const { return tz; } +/*! + \internal +*/ bool Event::hasAlarm() const { return hAlarm; } +/*! + \internal +*/ int Event::alarmTime() const { return aMinutes; } +/*! + Returns the sound type for the alarm of this event. +*/ Event::SoundTypeChoice Event::alarmSound() const { return aSound; } +/*! + \internal +*/ bool Event::hasRepeat() const { return doRepeat(); } +/*! + \internal +*/ const Event::RepeatPattern &Event::repeatPattern() const { return pattern; } +/*! + \internal +*/ Event::RepeatPattern &Event::repeatPattern() { return pattern; } +/*! + Returns the notes for the event. +*/ const QString &Event::notes() const { return note; } +/*! + \internal +*/ bool Event::operator==( const Event &e ) const { + if ( uid() && e.uid() == uid() ) + return TRUE; return ( e.descript == descript && e.locat == locat && e.categ == categ && e.typ == typ && e.startUTC == startUTC && e.endUTC == endUTC && e.tz == tz && e.hAlarm == hAlarm && e.aMinutes == aMinutes && e.aSound == aSound && e.hRepeat == hRepeat && e.pattern == pattern && e.note == note ); } +/*! + \internal + Appends the contact information to \a buf. +*/ void Event::save( QString& buf ) { buf += " description=\"" + Qtopia::escapeString(descript) + "\""; if ( !locat.isEmpty() ) buf += " location=\"" + Qtopia::escapeString(locat) + "\""; // save the categoies differently.... QString strCats = idsToString( categories() ); buf += " categories=\"" + Qtopia::escapeString(strCats) + "\""; buf += " uid=\"" + QString::number( uid() ) + "\""; if ( (Type)typ != Normal ) buf += " type=\"AllDay\""; if ( hAlarm ) { buf += " alarm=\"" + QString::number( aMinutes ) + "\" sound=\""; if ( aSound == Event::Loud ) buf += "loud"; else buf += "silent"; buf += "\""; } if ( hRepeat ) write( buf, pattern ); buf += " start=\"" + QString::number( startUTC ) + "\""; buf += " end=\"" + QString::number( endUTC ) + "\""; if ( !note.isEmpty() ) buf += " note=\"" + Qtopia::escapeString( note ) + "\""; buf += customToXml(); } +/*! + \internal +*/ bool Event::RepeatPattern::operator==( const Event::RepeatPattern &right ) const { // *sigh* return ( type == right.type && frequency == right.frequency && position == right.position && days == right.days && hasEndDate == right.hasEndDate && endDateUTC == right.endDateUTC && createTime == right.createTime ); } +/*! + \class EffectiveEvent + \brief The EffectiveEvent class the data for a single occurance of an event. + + This class describes the event for a single occurance of it. For example if + an Event occurs every week, the effective event might represent the third + occurance of this Event. + + \ingroup qtopiaemb + \ingroup qtopiadesktop + \warning This class will be phased out in Qtopia 3.x +*/ + +/*! + \enum EffectiveEvent::Position + \internal +*/ + +/*! + \fn EffectiveEvent &EffectiveEvent::operator=(const EffectiveEvent &) + \internal +*/ class EffectiveEventPrivate { public: //currently the existence of the d pointer means multi-day repeating, //msut be changed if we use the d pointer for anything else. QDate startDate; QDate endDate; }; - +/*! + \internal +*/ EffectiveEvent::EffectiveEvent() { mDate = QDate::currentDate(); mStart = mEnd = QTime::currentTime(); d = 0; } +/*! + \internal +*/ EffectiveEvent::EffectiveEvent( const Event &e, const QDate &date, Position pos ) { mEvent = e; mDate = date; if ( pos & Start ) mStart = e.start( TRUE ).time(); else mStart = QTime( 0, 0, 0 ); if ( pos & End ) mEnd = e.end( TRUE ).time(); else mEnd = QTime( 23, 59, 59 ); d = 0; } +/*! + \internal +*/ EffectiveEvent::~EffectiveEvent() { delete d; } +/*! + \internal +*/ EffectiveEvent::EffectiveEvent( const EffectiveEvent &e ) { d = 0; *this = e; } EffectiveEvent& EffectiveEvent::operator=( const EffectiveEvent & e ) { if ( &e == this ) return *this; delete d; if ( e.d ) { d = new EffectiveEventPrivate; d->startDate = e.d->startDate; d->endDate = e.d->endDate; } else { d = 0; } mEvent = e.mEvent; mDate = e.mDate; mStart = e.mStart; mEnd = e.mEnd; return *this; } // QString EffectiveEvent::category() const // { // return mEvent.category(); // } +/*! + Returns the description of the event for this effective event. +*/ const QString &EffectiveEvent::description( ) const { return mEvent.description(); } +/*! +\internal +*/ const QString &EffectiveEvent::location( ) const { return mEvent.location(); } +/*! +\internal +*/ const QString &EffectiveEvent::notes() const { return mEvent.notes(); } +/*! + Returns the event associated with this effective event. +*/ const Event &EffectiveEvent::event() const { return mEvent; } +/*! + \internal +*/ const QTime &EffectiveEvent::end() const { return mEnd; } +/*! + \internal +*/ const QTime &EffectiveEvent::start() const { return mStart; } +/*! + Returns the date the effective event occurs on. +*/ const QDate &EffectiveEvent::date() const { return mDate; } +/*! + \internal +*/ int EffectiveEvent::length() const { return (mEnd.hour() * 60 - mStart.hour() * 60) + QABS(mStart.minute() - mEnd.minute() ); } +/*! + \internal +*/ void EffectiveEvent::setDate( const QDate &dt ) { mDate = dt; } +/*! + \internal +*/ void EffectiveEvent::setStart( const QTime &start ) { mStart = start; } +/*! + \internal +*/ void EffectiveEvent::setEnd( const QTime &end ) { mEnd = end; } +/*! + \internal +*/ void EffectiveEvent::setEvent( Event e ) { mEvent = e; } +/*! + \internal +*/ bool EffectiveEvent::operator<( const EffectiveEvent &e ) const { if ( mDate < e.date() ) return TRUE; if ( mDate == e.date() ) return ( mStart < e.start() ); else return FALSE; } +/*! + \internal +*/ bool EffectiveEvent::operator<=( const EffectiveEvent &e ) const { return (mDate <= e.date() ); } +/*! + \internal +*/ bool EffectiveEvent::operator==( const EffectiveEvent &e ) const { return ( mDate == e.date() && mStart == e.start() && mEnd == e.end() && mEvent == e.event() ); } +/*! + \internal +*/ bool EffectiveEvent::operator!=( const EffectiveEvent &e ) const { return !(*this == e); } +/*! + \internal +*/ bool EffectiveEvent::operator>( const EffectiveEvent &e ) const { return !(*this <= e ); } +/*! + \internal +*/ bool EffectiveEvent::operator>=(const EffectiveEvent &e) const { return !(*this < e); } +/*! + \internal +*/ void EffectiveEvent::setEffectiveDates( const QDate &from, const QDate &to ) { if ( !from.isValid() ) { delete d; d = 0; return; } if ( !d ) d = new EffectiveEventPrivate; d->startDate = from; d->endDate = to; } +/*! + \internal +*/ QDate EffectiveEvent::startDate() const { if ( d ) return d->startDate; else if ( mEvent.hasRepeat() ) return mDate; // single day, since multi-day should have a d pointer else return mEvent.start().date(); } +/*! + \internal +*/ QDate EffectiveEvent::endDate() const { if ( d ) return d->endDate; else if ( mEvent.hasRepeat() ) return mDate; // single day, since multi-day should have a d pointer else return mEvent.end().date(); } +/*! + \internal +*/ int EffectiveEvent::size() const { return ( mEnd.hour() - mStart.hour() ) * 3600 + (mEnd.minute() - mStart.minute() * 60 + mEnd.second() - mStart.second() ); } // vcal conversion code static inline VObject *safeAddPropValue( VObject *o, const char *prop, const QString &value ) { VObject *ret = 0; if ( o && !value.isEmpty() ) ret = addPropValue( o, prop, value.latin1() ); return ret; } static inline VObject *safeAddProp( VObject *o, const char *prop) { VObject *ret = 0; if ( o ) ret = addProp( o, prop ); return ret; } static VObject *createVObject( const Event &e ) { VObject *vcal = newVObject( VCCalProp ); safeAddPropValue( vcal, VCVersionProp, "1.0" ); VObject *event = safeAddProp( vcal, VCEventProp ); safeAddPropValue( event, VCDTstartProp, TimeConversion::toISO8601( e.start() ) ); safeAddPropValue( event, VCDTendProp, TimeConversion::toISO8601( e.end() ) ); safeAddPropValue( event, "X-Qtopia-NOTES", e.description() ); safeAddPropValue( event, VCDescriptionProp, e.description() ); safeAddPropValue( event, VCLocationProp, e.location() ); if ( e.hasAlarm() ) { VObject *alarm = safeAddProp( event, VCAAlarmProp ); QDateTime dt = e.start(); dt = dt.addSecs( -e.alarmTime()*60 ); safeAddPropValue( alarm, VCRunTimeProp, TimeConversion::toISO8601( dt ) ); safeAddPropValue( alarm, VCAudioContentProp, (e.alarmSound() == Event::Silent ? "silent" : "alarm" ) ); } safeAddPropValue( event, "X-Qtopia-TIMEZONE", e.timeZone() ); @@ -695,131 +1160,151 @@ static Event parseVObject( VObject *obj ) QCString value = vObjectStringZValue( o ); if ( name == VCRunTimeProp ) alarmTime = TimeConversion::fromISO8601( value ); else if ( name == VCAudioContentProp ) { if ( value == "silent" ) soundType = Event::Silent; else soundType = Event::Loud; } } } else if ( name == "X-Qtopia-TIMEZONE") { e.setTimeZone( value ); } else if ( name == "X-Qtopia-AllDay" ) { e.setType( Event::AllDay ); } #if 0 else { printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) ); VObjectIterator nit; initPropIterator( &nit, o ); while( moreIteration( &nit ) ) { VObject *o = nextVObject( &nit ); QCString name = vObjectName( o ); QString value = vObjectStringZValue( o ); printf(" subprop: %s = %s\n", name.data(), value.latin1() ); } } #endif } if ( !haveStart && !haveEnd ) e.setStart( QDateTime::currentDateTime() ); if ( !haveEnd ) { e.setType( Event::AllDay ); e.setEnd( e.start() ); } if ( haveAlarm ) { int minutes = alarmTime.secsTo( e.start() ) / 60; e.setAlarm( TRUE, minutes, soundType ); } return e; } - +/*! + Writes the list of \a events as a set of VCards to the file \a filename. +*/ void Event::writeVCalendar( const QString &filename, const QValueList<Event> &events) -{
- QFileDirect f( filename.utf8().data() );
- if ( !f.open( IO_WriteOnly ) ) {
- qWarning("Unable to open vcard write");
- return;
- }
+{ + + QFileDirect f( filename.utf8().data() ); + + if ( !f.open( IO_WriteOnly ) ) { + + qWarning("Unable to open vcard write"); + + return; + + } + QValueList<Event>::ConstIterator it; for( it = events.begin(); it != events.end(); ++it ) { VObject *obj = createVObject( *it ); writeVObject( f.directHandle() , obj ); cleanVObject( obj ); - }
+ } + cleanStrTbl(); } +/*! + Writes \a event as a VCard to the file \a filename. +*/ void Event::writeVCalendar( const QString &filename, const Event &event) -{
- QFileDirect f( filename.utf8().data() );
- if ( !f.open( IO_WriteOnly ) ) {
- qWarning("Unable to open vcard write");
- return;
- }
+{ + + QFileDirect f( filename.utf8().data() ); + + if ( !f.open( IO_WriteOnly ) ) { + + qWarning("Unable to open vcard write"); + + return; + + } + VObject *obj = createVObject( event ); writeVObject( f.directHandle() , obj ); cleanVObject( obj ); cleanStrTbl(); } - +/*! + Returns the set of events read as VCards from the file \a filename. +*/ QValueList<Event> Event::readVCalendar( const QString &filename ) { VObject *obj = Parse_MIME_FromFileName( (char *)filename.utf8().data() ); QValueList<Event> events; while ( obj ) { QCString name = vObjectName( obj ); if ( name == VCCalProp ) { VObjectIterator nit; initPropIterator( &nit, obj ); while( moreIteration( &nit ) ) { VObject *o = nextVObject( &nit ); QCString name = vObjectName( o ); if ( name == VCEventProp ) events.append( parseVObject( o ) ); } } else if ( name == VCEventProp ) { // shouldn't happen, but just to be sure events.append( parseVObject( obj ) ); } VObject *t = obj; obj = nextVObjectInList(obj); cleanVObject( t ); } return events; } bool Event::match( const QRegExp &r ) const { bool returnMe; returnMe = false; if ( descript.find( r ) > -1 ) returnMe = true; else if ( locat.find( r ) > -1 ) returnMe = true; else if ( TimeConversion::fromUTC( startUTC ).toString().find( r ) > -1 ) returnMe = true; else if ( TimeConversion::fromUTC( endUTC ).toString().find( r ) > -1 ) returnMe = true; else if ( tz.find( r ) > -1 ) returnMe = true; else if ( note.find( r ) > -1 ) returnMe = true; else if ( doRepeat() ) { if ( pattern.hasEndDate ) diff --git a/library/backend/event.h b/library/backend/event.h index 277aadd..7fe41a5 100644 --- a/library/backend/event.h +++ b/library/backend/event.h @@ -1,234 +1,375 @@ /********************************************************************** -** Copyright (C) 2001 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef __EVENT_H__ #define __EVENT_H__ #include <qdatetime.h> #include <qvaluelist.h> +#include <qcolor.h> #ifdef PALMTOPCENTER #include <qpc/qsorter.h> #endif -#include <qpe/palmtoprecord.h> +#include <qtopia/private/palmtoprecord.h> #include <qpe/timeconversion.h> +static const QColor colorNormal = QColor(255, 0 , 0 ); +static const QColor colorRepeat = QColor(0 , 0 , 255); +static const QColor colorNormalLight = QColor(255, 220, 220); +static const QColor colorRepeatLight = QColor(200, 200, 255); + class EventPrivate; class QPC_EXPORT Event : public Qtopia::Record { public: enum RepeatType { NoRepeat = -1, Daily, Weekly, MonthlyDay, MonthlyDate, Yearly }; + + // Don't use this. enum Days { MON = 0x01, TUE = 0x02, WED = 0x04, THU = 0x08, FRI = 0x10, SAT = 0x20, SUN = 0x40 }; + // Don't use this. struct QPC_EXPORT RepeatPattern { RepeatPattern() { type = NoRepeat; frequency = -1; days = 0; position = 0; createTime = -1; hasEndDate = FALSE; endDateUTC = 0; } bool operator ==( const RepeatPattern &right ) const; RepeatType type; int frequency; int position; // the posistion in the month (e.g. the first sunday, etc) positive, count from the front negative count from the end... char days; // a mask for days OR in your days! bool hasEndDate; QDate endDate() const { return TimeConversion::fromUTC( endDateUTC ).date(); } void setEndDate( const QDate &dt ) { endDateUTC = TimeConversion::toUTC( dt ); } time_t endDateUTC; time_t createTime; }; Event(); Event( const QMap<int, QString > & map ); virtual ~Event(); QMap<int, QString> toMap() const; static void writeVCalendar( const QString &filename, const QValueList<Event> &events); static void writeVCalendar( const QString &filename, const Event &event); static QValueList<Event> readVCalendar( const QString &filename ); enum Type { Normal, AllDay }; enum SoundTypeChoice { Silent, Loud }; + // Don't use these, there are essentially meaningless. bool operator<( const Event &e1) const { return start() < e1.start(); }; bool operator<=( const Event &e1 ) const { return start() <= e1.start(); }; bool operator!=( const Event &e1 ) const { return !( *this == e1 ); }; bool operator>( const Event &e1 ) const { return start() > e1.start(); }; bool operator>=(const Event &e1 ) const { return start() >= e1.start(); }; bool operator==( const Event &e ) const; void setDescription( const QString &s ); const QString &description() const; void setLocation( const QString &s ); const QString &location() const; - void setType( Type t ); - Type type() const; + void setNotes( const QString &n ); + const QString ¬es() const; + + void setType( Type t ); // Don't use me. + Type type() const; // Don't use me. + + void setAllDay(bool); + bool isAllDay() const; + void setStart( const QDateTime &d ); - void setStart( time_t time ); - QDateTime start( bool actual = FALSE ) const; - time_t startTime() const { return startUTC; } + void setStart( time_t time ); // don't use me. + QDateTime start( ) const; + QDateTime start( bool actual ) const; // don't use me. + time_t startTime() const { return startUTC; } // don't use me. void setEnd( const QDateTime &e ); - void setEnd( time_t time ); - QDateTime end( bool actual = FALSE ) const; - time_t endTime() const { return endUTC; } + void setEnd( time_t time ); // don't use me + QDateTime end( ) const; + QDateTime end( bool actual ) const; // don't use me. + time_t endTime() const { return endUTC; } // don't use me. void setTimeZone( const QString & ); const QString &timeZone() const; - void setAlarm( bool b, int minutes, SoundTypeChoice ); + void setAlarm( int minutes, SoundTypeChoice ); + void clearAlarm(); + void setAlarm( bool b, int minutes, SoundTypeChoice ); // Don't use me. bool hasAlarm() const; - int alarmTime() const; + int alarmDelay() const; + int alarmTime() const; // Don't use me. SoundTypeChoice alarmSound() const; + + RepeatType repeatType() const; + int frequency() const; + int weekOffset() const; + QDate repeatTill() const; + bool repeatForever() const; + bool repeatOnWeekDay(int day) const; + + void setRepeatType(RepeatType); + void setFrequency(int); + void setRepeatTill(const QDate &); + void setRepeatForever(bool); + void setRepeatOnWeekDay(int day, bool enable); + + // Don't use any of these. void setRepeat( bool b, const RepeatPattern &p ); void setRepeat( const RepeatPattern &p ); bool hasRepeat() const; const RepeatPattern &repeatPattern() const; RepeatPattern &repeatPattern(); - void setNotes( const QString &n ); - const QString ¬es() const; bool doRepeat() const { return pattern.type != NoRepeat; } void save( QString& buf ); //void load( Node *n ); + bool match( const QRegExp &r ) const; + + // Don't use these either. Functionality will be moved elsewhere. + // helper function to calculate the week of the given date static int week( const QDate& date ); // calculates the number of occurrences of the week day of // the given date from the start of the month static int occurrence( const QDate& date ); // returns a proper days-char for a given dayOfWeek() static char day( int dayOfWeek ) { return 1 << ( dayOfWeek - 1 ); } // returns the dayOfWeek for the *first* day it finds (ignores // any further days!). Returns 1 (Monday) if there isn't any day found static int dayOfWeek( char day ); // returns the difference of months from first to second. static int monthDiff( const QDate& first, const QDate& second ); - bool match( const QRegExp &r ) const; private: Qtopia::UidGen &uidGen() { return sUidGen; } static Qtopia::UidGen sUidGen; QString descript, locat, categ; Type typ : 4; bool startTimeDirty : 1; bool endTimeDirty : 1; time_t startUTC, endUTC; QString tz; bool hAlarm, hRepeat; int aMinutes; SoundTypeChoice aSound; RepeatPattern pattern; QString note; // ADDITION int mRid; // Recode ID int mRinfo; // Recode Info // EventPrivate *d; }; // Since an event spans multiple day, it is better to have this // class to represent a day instead of creating many // dummy events... class EffectiveEventPrivate; class QPC_EXPORT EffectiveEvent { public: // If we calculate the effective event of a multi-day event // we have to figure out whether we are at the first day, // at the end, or anywhere else ("middle"). This is important // for the start/end times (00:00/23:59) // MidWay: 00:00 -> 23:59, as we are "in the middle" of a multi- // day event // Start: start time -> 23:59 // End: 00:00 -> end time // Start | End == StartEnd: for single-day events (default) // here we draw start time -> end time enum Position { MidWay = 0, Start = 1, End = 2, StartEnd = 3 }; EffectiveEvent(); EffectiveEvent( const Event &event, const QDate &startDate, Position pos = StartEnd ); EffectiveEvent( const EffectiveEvent & ); EffectiveEvent& operator=( const EffectiveEvent & ); ~EffectiveEvent(); bool operator<( const EffectiveEvent &e ) const; bool operator<=( const EffectiveEvent &e ) const; bool operator==( const EffectiveEvent &e ) const; bool operator!=( const EffectiveEvent &e ) const; bool operator>( const EffectiveEvent &e ) const; bool operator>= ( const EffectiveEvent &e ) const; void setStart( const QTime &start ); void setEnd( const QTime &end ); void setEvent( Event e ); void setDate( const QDate &date ); void setEffectiveDates( const QDate &from, const QDate &to ); // QString category() const; const QString &description() const; const QString &location() const; const QString ¬es() const; const Event &event() const; const QTime &start() const; const QTime &end() const; const QDate &date() const; int length() const; int size() const; QDate startDate() const; QDate endDate() const; private: class EffectiveEventPrivate *d; Event mEvent; QDate mDate; QTime mStart, mEnd; }; +inline void Event::setAlarm( int minutes, SoundTypeChoice s ) +{ + setAlarm(TRUE, minutes, s); +} + +inline void Event::clearAlarm() +{ + setAlarm(FALSE, 0, Silent); +} + +inline int Event::alarmDelay() const +{ + return alarmTime(); +} + +inline void Event::setAllDay(bool enable) +{ + if (enable) + setType(AllDay); + else + setType(Normal); +}; + +inline bool Event::isAllDay() const +{ + return type() == AllDay; +} + +inline Event::RepeatType Event::repeatType() const +{ + return repeatPattern().type; +} + +inline int Event::frequency() const +{ + return repeatPattern().frequency; +} + +inline int Event::weekOffset() const +{ + if (start().date().day() == 1) + return 1; + return (start().date().day() - 1) / 7 + 1; +} + +inline QDate Event::repeatTill() const +{ + return repeatPattern().endDate(); +} + +inline bool Event::repeatForever() const +{ + return !repeatPattern().hasEndDate; +} + +inline void Event::setRepeatType(RepeatType t) +{ + pattern.type = t; +} + +inline void Event::setFrequency(int f) +{ + pattern.frequency = f; +} + +inline void Event::setRepeatTill(const QDate &d) +{ + pattern.setEndDate(d); + pattern.hasEndDate = TRUE; +} + +inline void Event::setRepeatForever(bool b) +{ + if (!b == pattern.hasEndDate) + return; + if (!b && !pattern.hasEndDate) + pattern.setEndDate(end().date()); + pattern.hasEndDate = !b; +} + +inline bool Event::repeatOnWeekDay(int day) const +{ + if (pattern.type != Weekly) + return FALSE; + return ( (1 << (day - 1)) & pattern.days ) != 0; +} + +inline void Event::setRepeatOnWeekDay(int day, bool enable) +{ + if ( repeatOnWeekDay( day ) != enable ) + pattern.days ^= 1 << (day - 1); +} + +inline QDateTime Event::start( ) const +{ + return start(FALSE); +} + +inline QDateTime Event::end( ) const +{ + return end(FALSE); +} + #ifdef PALMTOPCENTER class QPC_EXPORT EffectiveEventSizeSorter : public QSorter<EffectiveEvent> { public: int compare( const EffectiveEvent& a, const EffectiveEvent& b ) const { return a.size() - b.size(); } }; class QPC_EXPORT EffectiveEventTimeSorter : public QSorter<EffectiveEvent> { public: int compare( const EffectiveEvent& a, const EffectiveEvent& b ) const { return a.start().secsTo( b.start() ); } }; #endif #endif diff --git a/library/backend/palmtoprecord.cpp b/library/backend/palmtoprecord.cpp index 0d57699..3cfa874 100644 --- a/library/backend/palmtoprecord.cpp +++ b/library/backend/palmtoprecord.cpp @@ -1,127 +1,141 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included -** in the packaging of this file. +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. ** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING -** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A -** PARTICULAR PURPOSE. +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ -#include "palmtoprecord.h" -#include "stringutil.h" +#include <qtopia/private/palmtoprecord.h> +#include <qtopia/stringutil.h> #include <qstringlist.h> +/*! \class Qtopia::PalmtopRecord palmtoprecord.h + \brief The Qtopia::PalmtopRecord class is the base class for all PIM records. + + Provides unique id and category support for all PIM records. + + \ingroup qtopiaemb + \ingroup qtopiadesktop +*/ + + namespace Qtopia { + + Record &Record::operator=( const Record &c ) { mUid = c.mUid; mCats = c.mCats; customMap = c.customMap; return *this; } void Record::setCategories( int single ) { if ( single == 0 ) return; mCats.resize(1); mCats[0] = single; } // convenience methods provided for loading and saving to xml -QString Record::idsToString( const QArray<int> &cats ) +QString Record::idsToString( const QArray<int> &catsUnsorted ) { + QArray<int> cats = catsUnsorted; + cats.sort(); + QString str; for ( uint i = 0; i < cats.size(); i++ ) if ( i == 0 ) str = QString::number( cats[int(i)] ); else str += ";" + QString::number( cats[int(i)] ); return str; } // convenience methods provided for loading and saving to xml QArray<int> Record::idsFromString( const QString &str ) { QStringList catStrs = QStringList::split( ";", str ); QArray<int> cats( catStrs.count() ); uint i = 0; for ( QStringList::ConstIterator it = catStrs.begin(); it != catStrs.end(); ++it ) { cats[int(i)] = (*it).toInt(); i++; } return cats; } /*! Returns the string stored for the custom field \a key. Returns a null string if the field does not exist. */ QString Record::customField( const QString &key) const { if (customMap.contains(key)) return customMap[key]; return QString::null; } /*! Sets the string stored for the custom field \a key to \a value. */ void Record::setCustomField( const QString &key, const QString &value) { - qWarning("setting custom " + key + " to " + value); +// qWarning("setting custom " + key + " to " + value); if (customMap.contains(key)) customMap.replace(key, value); else customMap.insert(key, value); - qWarning(QString("custom size %1").arg(customMap.count())); +// qWarning(QString("custom size %1").arg(customMap.count())); } /*! Removes the custom field \a key. */ void Record::removeCustomField(const QString &key) { customMap.remove(key); } QString Record::customToXml() const { //qWarning(QString("writing custom %1").arg(customMap.count())); QString buf(" "); for ( QMap<QString, QString>::ConstIterator cit = customMap.begin(); cit != customMap.end(); ++cit) { - qWarning(".ITEM."); +// qWarning(".ITEM."); buf += cit.key(); buf += "=\""; buf += escapeString(cit.data()); buf += "\" "; } return buf; } void Record::dump( const QMap<int, QString> &map ) { QMap<int, QString>::ConstIterator it; for( it = map.begin(); it != map.end(); ++it ) qDebug("%d : %s", it.key(), it.data().local8Bit().data() ); } } diff --git a/library/backend/palmtoprecord.h b/library/backend/palmtoprecord.h index 0372011..72f7d1c 100644 --- a/library/backend/palmtoprecord.h +++ b/library/backend/palmtoprecord.h @@ -1,94 +1,95 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included -** in the packaging of this file. +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. ** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING -** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A -** PARTICULAR PURPOSE. +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ - #ifndef QTPALMTOP_RECORD_H #define QTPALMTOP_RECORD_H - #include <qglobal.h> #include "qpcglobal.h" #include "palmtopuidgen.h" #include <qarray.h> #include <qmap.h> #if defined(QPC_TEMPLATEDLL) // MOC_SKIP_BEGIN -template class QPC_EXPORT QMap<QString, QString>; +QPC_TEMPLATEEXTERN template class QPC_EXPORT QMap<QString, QString>; // MOC_SKIP_END #endif class QRegExp; namespace Qtopia { class RecordPrivate; class QPC_EXPORT Record { public: Record() : mUid(0), mCats() { } Record( const Record &c ) : mUid( c.mUid ), mCats ( c.mCats ), customMap(c.customMap) { } virtual ~Record() { } Record &operator=( const Record &c ); virtual bool match( const QRegExp & ) const { return FALSE; } - void setCategories( const QArray<int> &v ) { mCats = v; } + void setCategories( const QArray<int> &v ) { mCats = v; mCats.sort(); } void setCategories( int single ); const QArray<int> &categories() const { return mCats; } + void reassignCategoryId( int oldId, int newId ) + { + int index = mCats.find( oldId ); + if ( index >= 0 ) + mCats[index] = newId; + } + int uid() const { return mUid; }; virtual void setUid( int i ) { mUid = i; uidGen().store( mUid ); } bool isValidUid() const { return mUid != 0; } void assignUid() { setUid( uidGen().generate() ); } virtual QString customField(const QString &) const; virtual void setCustomField(const QString &, const QString &); virtual void removeCustomField(const QString &); virtual bool operator == ( const Record &r ) const { return mUid == r.mUid; } virtual bool operator != ( const Record &r ) const { return mUid != r.mUid; } // convenience methods provided for loading and saving to xml static QString idsToString( const QArray<int> &ids ); // convenience methods provided for loading and saving to xml static QArray<int> idsFromString( const QString &str ); // for debugging static void dump( const QMap<int, QString> &map ); protected: virtual UidGen &uidGen() = 0; - virtual QString customToXml() const; - private: int mUid; QArray<int> mCats; - QMap<QString, QString> customMap; - RecordPrivate *d; }; } #endif + diff --git a/library/backend/palmtopuidgen.h b/library/backend/palmtopuidgen.h index 1a16681..c3fbcb9 100644 --- a/library/backend/palmtopuidgen.h +++ b/library/backend/palmtopuidgen.h @@ -1,78 +1,78 @@ -#ifndef QTPALMTOP_UIDGEN_H -#define QTPALMTOP_UIDGEN_H /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** -** Licensees holding valid Qtopia Developer license may use this -** file in accordance with the Qtopia Developer License Agreement -** provided with the Software. +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. ** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING -** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR -** PURPOSE. +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** -** email sales@trolltech.com for information about Qtopia License -** Agreements. +** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ +#ifndef QTPALMTOP_UIDGEN_H +#define QTPALMTOP_UIDGEN_H + #include <time.h> #include <qmap.h> #include "qpcglobal.h" #if defined(QPC_TEMPLATEDLL) // MOC_SKIP_BEGIN -template class QPC_EXPORT QMap< int, bool >; +QPC_TEMPLATEEXTERN template class QPC_EXPORT QMap< int, bool >; // MOC_SKIP_END #endif namespace Qtopia { class QPC_EXPORT UidGen { public: enum Type { Qtopia, PalmtopCenter }; UidGen() : type( Qtopia ), sign( -1 ), ids() { #ifdef PALMTOPCENTER type = PalmtopCenter; sign = 1; #endif } UidGen( Type t ) : type(t), sign(1), ids() { if ( t == Qtopia ) sign = -1; } virtual ~UidGen() { } int generate() const { int id = sign * (int) ::time(NULL); while ( ids.contains( id ) ) { id += sign; // check for overflow cases; if so, wrap back to beginning of // set ( -1 or 1 ) if ( sign == -1 && id > 0 || sign == 1 && id < 0 ) id = sign; } return id; } void store(int id) { ids.insert(id, TRUE); } bool isUnique(int id) const { return (!ids.contains(id)); } private: Type type; int sign; QMap<int, bool> ids; diff --git a/library/backend/qfiledirect_p.h b/library/backend/qfiledirect_p.h index 3ade622..976c69f 100644 --- a/library/backend/qfiledirect_p.h +++ b/library/backend/qfiledirect_p.h @@ -1,37 +1,35 @@ -/**********************************************************************
-** Copyright (C) 2001 Trolltech AS. All rights reserved.
-**
-** This file is part of the Qtopia Environment.
-**
-** Licensees holding valid Qtopia Developer license may use this
-** file in accordance with the Qtopia Developer License Agreement
-** provided with the Software.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
-** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE.
-**
-** email sales@trolltech.com for information about Qtopia License
-** Agreements.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-#ifndef QFILE_DIRECT_H
-#define QFILE_DIRECT_H
-#include <qfile.h>
-#include <qpe/qpcglobal.h>
-
-class QPC_EXPORT QFileDirect : public QFile
-{
-public:
- QFileDirect() : QFile() { }
- QFileDirect( const QString &name ) : QFile(name) { }
-
- FILE *directHandle() { return fh; }
-};
-
-#endif
-
+/********************************************************************** +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. +** +** This file is part of the Qtopia Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#ifndef QFILE_DIRECT_H +#define QFILE_DIRECT_H +#include <qfile.h> +#include <qtopia/private/qpcglobal.h> + +class QPC_EXPORT QFileDirect : public QFile +{ +public: + QFileDirect() : QFile() { } + QFileDirect( const QString &name ) : QFile(name) { } + + FILE *directHandle() { return fh; } +}; + +#endif diff --git a/library/backend/qpcglobal.h b/library/backend/qpcglobal.h index 0d60272..7b71f06 100644 --- a/library/backend/qpcglobal.h +++ b/library/backend/qpcglobal.h @@ -1,50 +1,53 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** Licensees holding valid Qtopia Developer license may use this ** file in accordance with the Qtopia Developer License Agreement ** provided with the Software. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING ** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR ** PURPOSE. ** ** email sales@trolltech.com for information about Qtopia License ** Agreements. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef QPC_GLOBAL_H #define QPC_GLOBAL_H -#if ( defined(Q_OS_WIN32) || defined(Q_OS_WIN64) ) && defined(PALMTOPCENTER) #include <qglobal.h> + +#if ( defined(Q_OS_WIN32) || defined(Q_OS_WIN64) ) && defined(PALMTOPCENTER) // # if defined(QT_NODLL) //# undef QPC_MAKEDLL //# undef QPC_DLL # if defined(QPC_MAKEDLL) /* create a Qt DLL library */ # if defined(QPC_DLL) # undef QPC_DLL # endif # define QPC_EXPORT __declspec(dllexport) +# define QPC_TEMPLATEEXTERN # define QPC_TEMPLATEDLL # undef QPC_DISABLE_COPY /* avoid unresolved externals */ # elif defined(QPC_DLL) /* use a Qt DLL library */ # define QPC_EXPORT __declspec(dllimport) +# define QPC_TEMPLATEEXTERN extern # define QPC_TEMPLATEDLL # undef QPC_DISABLE_COPY /* avoid unresolved externals */ # endif #else # undef QPC_MAKEDLL /* ignore these for other platforms */ # undef QPC_DLL #endif #endif #ifndef QPC_EXPORT # define QPC_EXPORT #endif diff --git a/library/backend/recordfields.h b/library/backend/recordfields.h index 4196c8b..1167ed3 100644 --- a/library/backend/recordfields.h +++ b/library/backend/recordfields.h @@ -1,141 +1,141 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** -** Licensees holding valid Qtopia Developer license may use this -** file in accordance with the Qtopia Developer License Agreement -** provided with the Software. +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. ** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING -** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR -** PURPOSE. +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** -** email sales@trolltech.com for information about Qtopia License -** Agreements. +** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef QPC_RECORD_FIELDS_H #define QPC_RECORD_FIELDS_H #include "qpcglobal.h" // dataset = "addressbook" namespace Qtopia { static const int UID_ID = 0; static const int CATEGORY_ID = 1; enum AddressBookFields { AddressUid = UID_ID, AddressCategory = CATEGORY_ID, // NOTE: Order of fields dependency in backend/contact.cpp Title, FirstName, MiddleName, LastName, Suffix, FileAs, JobTitle, Department, Company, BusinessPhone, BusinessFax, BusinessMobile, // email DefaultEmail, Emails, HomePhone, HomeFax, HomeMobile, // business BusinessStreet, BusinessCity, BusinessState, BusinessZip, BusinessCountry, BusinessPager, BusinessWebPage, Office, Profession, Assistant, Manager, // home HomeStreet, HomeCity, HomeState, HomeZip, HomeCountry, HomeWebPage, //personal Spouse, Gender, Birthday, Anniversary, Nickname, Children, // other Notes, - Groups - ,rid, + // used for internal record keeping, not for end user. + Groups, + rid, rinfo }; // dataset = "todolist" enum TaskFields { TaskUid = UID_ID, TaskCategory = CATEGORY_ID, HasDate, Completed, TaskDescription, Priority, Date, TaskRid, TaskRinfo }; // dataset = "categories" for todos enum CategoryFields { CatUid = UID_ID, CatName, CatAppGroup }; // dataset = "datebook" enum DatebookFields { DatebookUid = UID_ID, DatebookCategory = CATEGORY_ID, DatebookDescription, Location, TimeZone, Note, StartDateTime, EndDateTime, DatebookType, HasAlarm, SoundType, AlarmTime, RepeatPatternType, RepeatPatternFrequency, RepeatPatternPosition, RepeatPatternDays, RepeatPatternHasEndDate, RepeatPatternEndDate, diff --git a/library/backend/stringutil.cpp b/library/backend/stringutil.cpp deleted file mode 100644 index df58f54..0000000 --- a/library/backend/stringutil.cpp +++ b/dev/null @@ -1,415 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. -** -** This file is part of Qtopia Environment. -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included -** in the packaging of this file. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING -** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A -** PARTICULAR PURPOSE. -** -** See http://www.trolltech.com/gpl/ for GPL licensing information. -** -** Contact info@trolltech.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ - -#include "stringutil.h" -#include <qregexp.h> -#include <qstringlist.h> - -namespace Qtopia -{ - - - -/* - Very, very simple Latin-1 only collation guaranteed to displease anyone - who actually uses the non-ASCII characters. - */ - -static const char collationHack[] = { -0x00, //C-@ -0x01, //C-A -0x02, //C-B -0x03, //C-C -0x04, //C-D -0x05, //C-E -0x06, //C-F -0x07, //C-G -0x08, //C-H -0x09, //C-I -0x0a, //C-J -0x0b, //C-K -0x0c, //C-L -0x0d, //C-M -0x0e, //C-N -0x0f, //C-O -0x10, //C-P -0x11, //C-Q -0x12, //C-R -0x13, //C-S -0x14, //C-T -0x15, //C-U -0x16, //C-V -0x17, //C-W -0x18, //C-X -0x19, //C-Y -0x1a, //C-Z -0x1b, //C-[ -0x1c, //C-\ -0x1d, //C-] -0x1e, //C-^ -0x1f, //C-_ -' ', // -'!', //! -'"', //" -'#', //# -'$', //$ -'%', //% -'&', //& -'\'', //' -'(', //( -')', //) -'*', //* -'+', //+ -',', //, -'-', //- -'.', //. -'/', /// -0x80, //0 -0x81, //1 -0x82, //2 -0x83, //3 -0x84, //4 -0x85, //5 -0x86, //6 -0x87, //7 -0x88, //8 -0x89, //9 -':', //: -';', //; -'<', //< -'=', //= -'>', //> -'?', //? -'@', //@ -'A', //A -'B', //B -'C', //C -'D', //D -'E', //E -'F', //F -'G', //G -'H', //H -'I', //I -'J', //J -'K', //K -'L', //L -'M', //M -'N', //N -'O', //O -'P', //P -'Q', //Q -'R', //R -'S', //S -'T', //T -'U', //U -'V', //V -'W', //W -'X', //X -'Y', //Y -'Z', //Z -'[', //[ -'\\', //\ -']', //] -'^', //^ -'_', //_ -'`', //` -'A', //a -'B', //b -'C', //c -'D', //d -'E', //e -'F', //f -'G', //g -'H', //h -'I', //i -'J', //j -'K', //k -'L', //l -'M', //m -'N', //n -'O', //o -'P', //p -'Q', //q -'R', //r -'S', //s -'T', //t -'U', //u -'V', //v -'W', //w -'X', //x -'Y', //y -'Z', //z -'{', //{ -'|', //| -'}', //} -'~', //~ -'', // -0x80, //C-M-@ -0x81, //C-M-A -0x82, //C-M-B -0x83, //C-M-C -0x84, //C-M-D -0x85, //C-M-E -0x86, //C-M-F -0x87, //C-M-G -0x88, //C-M-H -0x89, //C-M-I -0x8a, //C-M-J -0x8b, //C-M-K -0x8c, //C-M-L -0x8d, //C-M-M -0x8e, //C-M-N -0x8f, //C-M-O -0x90, //C-M-P -0x91, //C-M-Q -0x92, //C-M-R -0x93, //C-M-S -0x94, //C-M-T -0x95, //C-M-U -0x96, //C-M-V -0x97, //C-M-W -0x98, //C-M-X -0x99, //C-M-Y -0x9a, //C-M-Z -0x9b, //C-M-[ -0x9c, //C-M-\ -0x9d, //C-M-] -0x9e, //C-M-^ -0x9f, //C-M-_ -' ', // -'¡', //¡ -'¢', //¢ -'£', //£ -'¤', //¤ -'¥', //¥ -'¦', //¦ -'§', //§ -'¨', //¨ -'©', //© -'A', //ª -'«', //« -'¬', //¬ -'', // -'®', //® -'¯', //¯ -'O', //° -'±', //± -'²', //² -'³', //³ -'´', //´ -'µ', //µ -'P', //¶ -'·', //· -'¸', //¸ -'¹', //¹ -'O', //º -'»', //» -'¼', //¼ -'½', //½ -'¾', //¾ -'¿', //¿ -'A', //À -'A', //Á -'A', //Â -'A', //Ã -'A', //Ä -'A', //Å -'A', //Æ -'C', //Ç -'E', //È -'E', //É -'E', //Ê -'E', //Ë -'I', //Ì -'I', //Í -'I', //Î -'I', //Ï -'D', //Ð -'N', //Ñ -'O', //Ò -'O', //Ó -'O', //Ô -'O', //Õ -'O', //Ö -'×', //× -'O', //Ø -'U', //Ù -'U', //Ú -'U', //Û -'U', //Ü -'Y', //Ý -'T', //Þ -'S', //ß -'A', //à -'A', //á -'A', //â -'A', //ã -'A', //ä -'A', //å -'A', //æ -'C', //ç -'E', //è -'E', //é -'E', //ê -'E', //ë -'I', //ì -'I', //í -'I', //î -'I', //ï -'D', //ð -'N', //ñ -'O', //ò -'O', //ó -'O', //ô -'O', //õ -'O', //ö -'÷', //÷ -'O', //ø -'U', //ù -'U', //ú -'U', //û -'U', //ü -'Y', //ý -'T', //þ -'Y', //ÿ -}; - - - - - -static void hackString ( QString &s ) -{ - int len = s.length(); - const QChar* uc = s.unicode(); - for ( int i = 0; i < len; i++ ) { - if ( !uc++->row() ) - s[i] = collationHack[s[i].cell()]; - } -} - -QString buildSortKey( const QString & s ) -{ - QString res = s; - hackString( res ); - return res; -} - -QString buildSortKey( const QString & s1, const QString & s2 ) -{ - QString res = s1 + QChar( '\0' ) + s2; - hackString( res ); - return res; -} - -QString buildSortKey( const QString & s1, const QString & s2, - const QString & s3 ) -{ - QString res = s1 + QChar( '\0' ) + s2 + QChar( '\0' ) + s3; - hackString( res ); - return res; -} - -static inline QChar coll( QChar u ) -{ - return u.row() ? u : QChar(collationHack[ u.cell() ]); -} - - -int compare( const QString & s1, const QString & s2 ) -{ - const QChar* u1 = s1.unicode(); - const QChar* u2 = s2.unicode(); - - if ( u1 == u2 ) - return 0; - if ( u1 == 0 ) - return 1; - if ( u2 == 0 ) - return -1; - int l=QMIN(s1.length(),s2.length()); - while ( l-- && coll(*u1) == coll(*u2) ) - u1++,u2++; - if ( l==-1 ) - return ( s1.length()-s2.length() ); - return u1->unicode() - u2->unicode(); -} - -QString simplifyMultiLineSpace( const QString &multiLine ) -{ - QString result; - QStringList lines = QStringList::split("\n", multiLine); - for ( QStringList::Iterator it = lines.begin(); it != lines.end(); ++it ) { - if ( it != lines.begin() ) - result += "\n"; - result += (*it).simplifyWhiteSpace(); - } - return result; -} - -QString escapeString( const QString& plain ) -{ - QString tmp(plain); - int pos = tmp.length(); - const QChar *uc = plain.unicode(); - while ( pos-- ) { - unsigned char ch = uc[pos].latin1(); - if ( ch == '&' ) - tmp.replace( pos, 1, "&" ); - else if ( ch == '<' ) - tmp.replace( pos, 1, "<" ); - else if ( ch == '>' ) - tmp.replace( pos, 1, ">" ); - else if ( ch == '\"' ) - tmp.replace( pos, 1, """ ); - } - return tmp; -} - -QString plainString( const char* escaped, unsigned int length ) -{ - return plainString( QString::fromUtf8( escaped, length ) ); -} - -QString plainString( const QCString& string ) -{ - // We first have to pass it through a ::fromUtf8() - return plainString( string.data(), string.length() ); -} - -QString plainString( const QString& string ) -{ - QString tmp( string ); - int pos = -1; - while ( (pos = tmp.find( "&", pos +1 ) ) != -1 ) { - if ( tmp.find( "&", pos ) == pos ) - tmp.replace( pos, 5, "&" ); - else if ( tmp.find( "<", pos ) == pos ) - tmp.replace( pos, 4, "<" ); - else if( tmp.find( ">", pos ) == pos ) - tmp.replace( pos, 4, ">" ); - else if ( tmp.find( """, pos ) == pos ) - tmp.replace( pos, 6, "\"" ); - } - return tmp; -} - -} // namespace QPC diff --git a/library/backend/task.cpp b/library/backend/task.cpp index f0a38f1..a00adb3 100644 --- a/library/backend/task.cpp +++ b/library/backend/task.cpp @@ -1,272 +1,409 @@ /********************************************************************** -** Copyright (C) 2001 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ -#include <qpe/task.h> -#include <qregexp.h> -#include <qstring.h> -#include <qpe/recordfields.h> +#include "task.h" +#include "recordfields.h" #include "vobject_p.h" -#include "timeconversion.h" #include "qfiledirect_p.h" +#include <qtopia/timeconversion.h> + +#include <qregexp.h> +#include <qstring.h> + #include <stdio.h> using namespace Qtopia; UidGen Task::sUidGen( UidGen::Qtopia ); +/*! + \class Task + \brief The Task class holds the data of a todo entry. + + This data includes the priority of the task, a description, an optional due + date, and whether the task is completed or not. + + \ingroup qtopiaemb + \ingroup qtopiadesktop +*/ + +/*! + Creates a new, empty task. +*/ Task::Task() : Record(), mDue( FALSE ), mDueDate( QDate::currentDate() ), mCompleted( FALSE ), mPriority( 3 ), mDesc() { } +/*! + \fn void Task::setPriority( int priority ) + + Sets the priority of the task to \a priority. +*/ + +/*! + \fn int Task::priority() const + + Returns the priority of the task. +*/ + +/*! + \fn void Task::setDescription( const QString &description ) + + Sets the description of the task to \a description. + */ + +/*! + \fn const QString &Task::description() const + + Returns the description of the task. + */ + +/*! + \fn void Task::setDueDate( const QDate &date, bool hasDue ) + + \internal + If \a hasDue is TRUE sets the due date of the task to \a date. + Otherwise clears the due date of the task. +*/ + +/*! + \fn void Task::setDueDate( const QDate &date ) + + Sets the due date of the task to \a date. +*/ + +/*! + \fn void Task::clearDueDate( ) + + Clears the due date of the task. +*/ + +/*! + \fn void Task::setCompleted( bool b ) + + If \a b is TRUE marks the task as completed. Otherwise marks the task as + uncompleted. +*/ + +/*! + \fn bool Task::isCompleted() const + + Returns TRUE if the task is completed. Otherwise returns FALSE. +*/ + +/*! + \fn const QDate &Task::dueDate() const + + Returns the due date of the task. + */ + +/*! + \fn bool Task::hasDueDate() const + + Returns TRUE if there is a due date set for the task. Otherwise returns + FALSE. +*/ + +/*! + \fn void Task::setHasDueDate( bool b ) + + \internal + Just don't ask. I really can't justify the function. +*/ + + +/*! + \internal + Creates a new task. The properties of the task are set from \a m. +*/ + Task::Task( const QMap<int, QString> &m ) : Record(), mDue( FALSE ), mDueDate( QDate::currentDate() ), mCompleted( FALSE ), mPriority( 3 ), mDesc() { //qDebug("Task::Task fromMap"); //dump( m ); for ( QMap<int,QString>::ConstIterator it = m.begin(); it != m.end();++it ) switch ( (TaskFields) it.key() ) { case HasDate: if ( *it == "1" ) mDue = TRUE; break; case Completed: setCompleted( *it == "1" ); break; case TaskCategory: setCategories( idsFromString( *it ) ); break; case TaskDescription: setDescription( *it ); break; case Priority: setPriority( (*it).toInt() ); break; case Date: mDueDate = TimeConversion::fromString( (*it) ); break; case TaskUid: setUid( (*it).toInt() ); break; - default: break; + case TaskRid: + case TaskRinfo: + break; } } +/*! + Destroys a task. +*/ Task::~Task() { } +/*! + \internal + Returns the task as a map of field ids to property values. +*/ QMap<int, QString> Task::toMap() const { QMap<int, QString> m; m.insert( HasDate, hasDueDate() ? "1" : "0" ); m.insert( Completed, isCompleted() ? "1" : "0" ); - m.insert( TaskCategory, idsToString( categories() ) ); - m.insert( TaskDescription, description() ); + if ( categories().count() ) + m.insert( TaskCategory, idsToString( categories() ) ); + if ( !description().isEmpty() ) + m.insert( TaskDescription, description() ); m.insert( Priority, QString::number( priority() ) ); - m.insert( Date, TimeConversion::toString( dueDate() ) ); + if ( hasDueDate() ) + m.insert( Date, TimeConversion::toString( dueDate() ) ); m.insert( TaskUid, QString::number(uid()) ); //qDebug("Task::toMap"); //dump( m ); return m; } +/*! + \internal + Appends the task information to \a buf. +*/ void Task::save( QString& buf ) const { buf += " Completed=\""; // qDebug( "writing %d", complete ); buf += QString::number( (int)mCompleted ); buf += "\""; buf += " HasDate=\""; // qDebug( "writing %d", ); buf += QString::number( (int)mDue ); buf += "\""; buf += " Priority=\""; // qDebug ("writing %d", prior ); buf += QString::number( mPriority ); buf += "\""; buf += " Categories=\""; buf += Qtopia::Record::idsToString( categories() ); buf += "\""; buf += " Description=\""; // qDebug( "writing note %s", note.latin1() ); buf += Qtopia::escapeString( mDesc ); buf += "\""; if ( mDue ) { // qDebug("saving ymd %d %d %d", mDueDate.year(), mDueDate.month(), // mDueDate.day() ); buf += " DateYear=\""; buf += QString::number( mDueDate.year() ); buf += "\""; buf += " DateMonth=\""; buf += QString::number( mDueDate.month() ); buf += "\""; buf += " DateDay=\""; buf += QString::number( mDueDate.day() ); buf += "\""; } buf += customToXml(); // qDebug ("writing uid %d", uid() ); buf += " Uid=\""; buf += QString::number( uid() ); // terminate it in the application... buf += "\""; } -bool Task::match ( const QRegExp &r ) const +/*! + Returns TRUE if the task matches the regular expressions \a regexp. + Otherwise returns FALSE. +*/ +bool Task::match ( const QRegExp ®exp ) const { // match on priority, description on due date... bool match; match = false; - if ( QString::number( mPriority ).find( r ) > -1 ) + if ( QString::number( mPriority ).find( regexp ) > -1 ) match = true; - else if ( mDue && mDueDate.toString().find( r ) > -1 ) + else if ( mDue && mDueDate.toString().find( regexp ) > -1 ) match = true; - else if ( mDesc.find( r ) > -1 ) + else if ( mDesc.find( regexp ) > -1 ) match = true; return match; } +/*! + \internal +*/ static inline VObject *safeAddPropValue( VObject *o, const char *prop, const QString &value ) { VObject *ret = 0; if ( o && !value.isEmpty() ) ret = addPropValue( o, prop, value.latin1() ); return ret; } +/*! + \internal +*/ static inline VObject *safeAddProp( VObject *o, const char *prop) { VObject *ret = 0; if ( o ) ret = addProp( o, prop ); return ret; } +/*! + \internal +*/ static VObject *createVObject( const Task &t ) { VObject *vcal = newVObject( VCCalProp ); safeAddPropValue( vcal, VCVersionProp, "1.0" ); VObject *task = safeAddProp( vcal, VCTodoProp ); if ( t.hasDueDate() ) safeAddPropValue( task, VCDueProp, TimeConversion::toISO8601( t.dueDate() ) ); safeAddPropValue( task, VCDescriptionProp, t.description() ); if ( t.isCompleted() ) safeAddPropValue( task, VCStatusProp, "COMPLETED" ); safeAddPropValue( task, VCPriorityProp, QString::number( t.priority() ) ); return vcal; } - +/*! + \internal +*/ static Task parseVObject( VObject *obj ) { Task t; VObjectIterator it; initPropIterator( &it, obj ); while( moreIteration( &it ) ) { VObject *o = nextVObject( &it ); QCString name = vObjectName( o ); QCString value = vObjectStringZValue( o ); if ( name == VCDueProp ) { t.setDueDate( TimeConversion::fromISO8601( value ).date(), TRUE ); } else if ( name == VCDescriptionProp ) { t.setDescription( value ); } else if ( name == VCStatusProp ) { if ( value == "COMPLETED" ) t.setCompleted( TRUE ); } else if ( name == VCPriorityProp ) { t.setPriority( value.toInt() ); } #if 0 else { printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) ); VObjectIterator nit; initPropIterator( &nit, o ); while( moreIteration( &nit ) ) { VObject *o = nextVObject( &nit ); QCString name = vObjectName( o ); QString value = vObjectStringZValue( o ); printf(" subprop: %s = %s\n", name.data(), value.latin1() ); } } #endif } return t; } - +/*! + Writes the list of \a tasks as a set of VCards to the file \a filename. +*/ void Task::writeVCalendar( const QString &filename, const QValueList<Task> &tasks) { QFileDirect f( filename.utf8().data() ); if ( !f.open( IO_WriteOnly ) ) { qWarning("Unable to open vcard write"); return; } QValueList<Task>::ConstIterator it; for( it = tasks.begin(); it != tasks.end(); ++it ) { VObject *obj = createVObject( *it ); writeVObject(f.directHandle() , obj ); cleanVObject( obj ); } cleanStrTbl(); } +/*! + Writes \a task as a VCard to the file \a filename. +*/ void Task::writeVCalendar( const QString &filename, const Task &task) { QFileDirect f( filename.utf8().data() ); if ( !f.open( IO_WriteOnly ) ) { qWarning("Unable to open vcard write"); return; } VObject *obj = createVObject( task ); writeVObject(f.directHandle() , obj ); cleanVObject( obj ); cleanStrTbl(); } - +/*! + Returns the set of tasks read as VCards from the file \a filename. +*/ QValueList<Task> Task::readVCalendar( const QString &filename ) { VObject *obj = Parse_MIME_FromFileName( (char *)filename.utf8().data() ); QValueList<Task> tasks; while ( obj ) { QCString name = vObjectName( obj ); if ( name == VCCalProp ) { VObjectIterator nit; initPropIterator( &nit, obj ); while( moreIteration( &nit ) ) { VObject *o = nextVObject( &nit ); QCString name = vObjectName( o ); if ( name == VCTodoProp ) tasks.append( parseVObject( o ) ); } } else if ( name == VCTodoProp ) { // shouldn't happen, but just to be sure tasks.append( parseVObject( obj ) ); } VObject *t = obj; obj = nextVObjectInList(obj); cleanVObject( t ); } return tasks; } diff --git a/library/backend/task.h b/library/backend/task.h index 6f383b8..091f2e9 100644 --- a/library/backend/task.h +++ b/library/backend/task.h @@ -1,81 +1,92 @@ /********************************************************************** -** Copyright (C) 2001 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef __TASK_H__ #define __TASK_H__ -#include <qpe/palmtoprecord.h> -#include <qpe/stringutil.h> +#include <qtopia/private/palmtoprecord.h> +#include <qtopia/stringutil.h> #include <qvaluelist.h> #include <qdatetime.h> class TaskPrivate; class QPC_EXPORT Task : public Qtopia::Record { public: Task(); Task( const QMap<int, QString> &fromMap ); ~Task(); QMap<int, QString> toMap() const; static void writeVCalendar( const QString &filename, const QValueList<Task> &tasks); static void writeVCalendar( const QString &filename, const Task &task); static QValueList<Task> readVCalendar( const QString &filename ); + enum PriorityValue { VeryHigh=1, High, Normal, Low, VeryLow }; + void setPriority( int priority ) { mPriority = priority; } int priority() const { return mPriority; } // void setCategory( const QString& category ) // { mCategory = category.stripWhiteSpace(); } // const QString &category() const { return mCategory; } void setDescription( const QString& description ) { mDesc = Qtopia::simplifyMultiLineSpace(description); } const QString &description() const { return mDesc; } + // Use THESE functions + void setDueDate( const QDate &date); + void clearDueDate(); + + // Instead of these functions. void setDueDate( const QDate& date, bool hasDue ) { mDueDate = date; mDue = hasDue; } + void setHasDueDate( bool b ) { mDue = b; } + const QDate &dueDate() const { return mDueDate; } bool hasDueDate() const { return mDue; } - void setHasDueDate( bool b ) { mDue = b; } void setCompleted( bool b ) { mCompleted = b; } bool isCompleted() const { return mCompleted; } void save( QString& buf ) const; bool match( const QRegExp &r ) const; private: Qtopia::UidGen &uidGen() { return sUidGen; } static Qtopia::UidGen sUidGen; bool mDue; QDate mDueDate; bool mCompleted; int mPriority; QString mDesc; TaskPrivate *d; // ADDITION int recordId; int recordInfo; // }; +// MUST be inline. (forwards compatability). +inline void Task::setDueDate( const QDate &date) { setDueDate(date, date.isValid()); } +inline void Task::clearDueDate() { setHasDueDate( FALSE ); } #endif diff --git a/library/backend/timeconversion.cpp b/library/backend/timeconversion.cpp deleted file mode 100644 index a4a2547..0000000 --- a/library/backend/timeconversion.cpp +++ b/dev/null @@ -1,237 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. -** -** This file is part of Qtopia Environment. -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -** See http://www.trolltech.com/gpl/ for GPL licensing information. -** -** Contact info@trolltech.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ - -#include <qglobal.h> -#include "timeconversion.h" -#include <qregexp.h> -#include <stdlib.h> - -QString TimeConversion::toString( const QDate &d ) -{ - QString r = QString::number( d.day() ) + "." + - QString::number( d.month() ) + "." + - QString::number( d.year() ); - //qDebug("TimeConversion::toString %s", r.latin1()); - return r; -} - -QDate TimeConversion::fromString( const QString &datestr ) -{ - int monthPos = datestr.find('.'); - int yearPos = datestr.find('.', monthPos+1 ); - if ( monthPos == -1 || yearPos == -1 ) { - qDebug("fromString didn't find . in str = %s; mpos = %d ypos = %d", datestr.latin1(), monthPos, yearPos ); - return QDate(); - } - int d = datestr.left( monthPos ).toInt(); - int m = datestr.mid( monthPos+1, yearPos - monthPos - 1 ).toInt(); - int y = datestr.mid( yearPos+1 ).toInt(); - QDate date ( y,m,d ); - //qDebug("TimeConversion::fromString ymd = %s => %d %d %d; mpos = %d ypos = %d", datestr.latin1(), y, m, d, monthPos, yearPos); - return date; -} - -time_t TimeConversion::toUTC( const QDateTime& dt ) -{ - time_t tmp; - struct tm *lt; - -#if defined(_OS_WIN32) || defined (Q_OS_WIN32) || defined (Q_OS_WIN64) - _tzset(); -#else - tzset(); -#endif - - // get a tm structure from the system to get the correct tz_name - tmp = time( 0 ); - lt = localtime( &tmp ); - - lt->tm_sec = dt.time().second(); - lt->tm_min = dt.time().minute(); - lt->tm_hour = dt.time().hour(); - lt->tm_mday = dt.date().day(); - lt->tm_mon = dt.date().month() - 1; // 0-11 instead of 1-12 - lt->tm_year = dt.date().year() - 1900; // year - 1900 - //lt->tm_wday = dt.date().dayOfWeek(); ignored anyway - //lt->tm_yday = dt.date().dayOfYear(); ignored anyway - lt->tm_wday = -1; - lt->tm_yday = -1; - // tm_isdst negative -> mktime will find out about DST - lt->tm_isdst = -1; - // keep tm_zone and tm_gmtoff - tmp = mktime( lt ); - return tmp; -} - -QDateTime TimeConversion::fromUTC( time_t time ) -{ - struct tm *lt; - -#if defined(_OS_WIN32) || defined (Q_OS_WIN32) || defined (Q_OS_WIN64) - _tzset(); -#else - tzset(); -#endif - lt = localtime( &time ); - QDateTime dt; - dt.setDate( QDate( lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday ) ); - dt.setTime( QTime( lt->tm_hour, lt->tm_min, lt->tm_sec ) ); - return dt; -} - - -int TimeConversion::secsTo( const QDateTime &from, const QDateTime &to ) -{ - return toUTC( to ) - toUTC( from ); -} - -QCString TimeConversion::toISO8601( const QDate &d ) -{ - time_t tmp = toUTC( d ); - struct tm *utc = gmtime( &tmp ); - - QCString str; - str.sprintf("%04d%02d%02d", (utc->tm_year + 1900), utc->tm_mon+1, utc->tm_mday ); - return str; -} - -QCString TimeConversion::toISO8601( const QDateTime &dt ) -{ - time_t tmp = toUTC( dt ); - struct tm *utc = gmtime( &tmp ); - - QCString str; - str.sprintf("%04d%02d%02dT%02d%02d%02dZ", - (utc->tm_year + 1900), utc->tm_mon+1, utc->tm_mday, - utc->tm_hour, utc->tm_min, utc->tm_sec ); - return str; -} - -QDateTime TimeConversion::fromISO8601( const QCString &s ) -{ - -#if defined(_OS_WIN32) || defined (Q_OS_WIN32) || defined (Q_OS_WIN64) - _tzset(); -#else - tzset(); -#endif - - struct tm *thetime = new tm; - - QCString str = s.copy(); - str.replace(QRegExp("-"), "" ); - str.replace(QRegExp(":"), "" ); - str.stripWhiteSpace(); - str = str.lower(); - - int i = str.find( "t" ); - QCString date; - QCString timestr; - if ( i != -1 ) { - date = str.left( i ); - timestr = str.mid( i+1 ); - } else { - date = str; - } - -// qDebug("--- parsing ISO time---"); - thetime->tm_year = 100; - thetime->tm_mon = 0; - thetime->tm_mday = 0; - thetime->tm_hour = 0; - thetime->tm_min = 0; - thetime->tm_sec = 0; - -// qDebug("date = %s", date.data() ); - - switch( date.length() ) { - case 8: - thetime->tm_mday = date.right( 2 ).toInt(); - case 6: - thetime->tm_mon = date.mid( 4, 2 ).toInt() - 1; - case 4: - thetime->tm_year = date.left( 4 ).toInt(); - thetime->tm_year -= 1900; - break; - default: - break; - } - - int tzoff = 0; - bool inLocalTime = FALSE; - if ( timestr.find( 'z' ) == (int)timestr.length() - 1 ) - // UTC - timestr = timestr.left( timestr.length() -1 ); - else { - int plus = timestr.find( "+" ); - int minus = timestr.find( "-" ); - if ( plus != -1 || minus != -1 ) { - // have a timezone offset - plus = (plus != -1) ? plus : minus; - QCString off = timestr.mid( plus ); - timestr = timestr.left( plus ); - - int tzoffhour = 0; - int tzoffmin = 0; - switch( off.length() ) { - case 5: - tzoffmin = off.mid(3).toInt(); - case 3: - tzoffhour = off.left(3).toInt(); - default: - break; - } - tzoff = 60*tzoffhour + tzoffmin; - } else - inLocalTime = TRUE; - } - - // get the time: - switch( timestr.length() ) { - case 6: - thetime->tm_sec = timestr.mid( 4 ).toInt(); - case 4: - thetime->tm_min = timestr.mid( 2, 2 ).toInt(); - case 2: - thetime->tm_hour = timestr.left( 2 ).toInt(); - default: - break; - } - - int tzloc = 0; - time_t tmp = time( 0 ); - if ( !inLocalTime ) { - // have to get the offset between gmt and local time - struct tm *lt = localtime( &tmp ); - tzloc = mktime( lt ); - struct tm *ut = gmtime( &tmp ); - tzloc -= mktime( ut ); - } -// qDebug("time: %d %d %d, tzloc=%d, tzoff=%d", thetime->tm_hour, thetime->tm_min, thetime->tm_sec, -// tzloc, tzoff ); - - tmp = mktime( thetime ); - tmp += 60*(-tzloc + tzoff); - - delete thetime; - - return fromUTC( tmp ); -} - diff --git a/library/backend/timeconversion.h b/library/backend/timeconversion.h deleted file mode 100644 index 1724812..0000000 --- a/library/backend/timeconversion.h +++ b/dev/null @@ -1,45 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. -** -** This file is part of Qtopia Environment. -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -** See http://www.trolltech.com/gpl/ for GPL licensing information. -** -** Contact info@trolltech.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ - -#ifndef __timeconversion_h__ -#define __timeconversion_h__ - -#include <time.h> -#include <sys/types.h> -#include <qdatetime.h> - -#include <qpe/qpcglobal.h> - -class QPC_EXPORT TimeConversion -{ -public: - static QString toString( const QDate &d ); - static QDate fromString( const QString &datestr ); - - static time_t toUTC( const QDateTime& dt ); - static QDateTime fromUTC( time_t time ); - static int secsTo( const QDateTime &from, const QDateTime &to ); - - static QCString toISO8601( const QDate & ); - static QCString toISO8601( const QDateTime & ); - static QDateTime fromISO8601( const QCString & ); -}; - -#endif // __timeconversion_h__ diff --git a/library/backend/vcc.y b/library/backend/vcc.y index e326a64..5bcf0cb 100644 --- a/library/backend/vcc.y +++ b/library/backend/vcc.y @@ -1,1199 +1,1208 @@ -%{ - -/*************************************************************************** -(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. - -For purposes of this license notice, the term Licensors shall mean, -collectively, Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. -The term Licensor shall mean any of the Licensors. - -Subject to acceptance of the following conditions, permission is hereby -granted by Licensors without the need for written agreement and without -license or royalty fees, to use, copy, modify and distribute this -software for any purpose. - -The above copyright notice and the following four paragraphs must be -reproduced in all copies of this software and any software including -this software. - -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE -ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR -MODIFICATIONS. - -IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, -INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT -OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. - -The software is provided with RESTRICTED RIGHTS. Use, duplication, or -disclosure by the government are subject to restrictions set forth in -DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. - -***************************************************************************/ - -/* - * src: vcc.c - * doc: Parser for vCard and vCalendar. Note that this code is - * generated by a yacc parser generator. Generally it should not - * be edited by hand. The real source is vcc.y. The #line directives - * can be commented out here to make it easier to trace through - * in a debugger. However, if a bug is found it should - * be fixed in vcc.y and this file regenerated. - */ - - -/* debugging utilities */ -#if __DEBUG -#define DBG_(x) printf x -#else -#define DBG_(x) -#endif - -/**** External Functions ****/ - -/* assign local name to parser variables and functions so that - we can use more than one yacc based parser. -*/ - -#if 0 -#define yyparse mime_parse -#define yylex mime_lex -#define yyerror mime_error -#define yychar mime_char -/* #define p_yyval p_mime_val */ -#undef yyval -#define yyval mime_yyval -/* #define p_yylval p_mime_lval */ -#undef yylval -#define yylval mime_yylval -#define yydebug mime_debug -#define yynerrs mime_nerrs -#define yyerrflag mime_errflag -#define yyss mime_ss -#define yyssp mime_ssp -#define yyvs mime_vs -#define yyvsp mime_vsp -#define yylhs mime_lhs -#define yylen mime_len -#define yydefred mime_defred -#define yydgoto mime_dgoto -#define yysindex mime_sindex -#define yyrindex mime_rindex -#define yygindex mime_gindex -#define yytable mime_table -#define yycheck mime_check -#define yyname mime_name -#define yyrule mime_rule -#ifdef YYPREFIX -#undef YYPREFIX -#endif -#define YYPREFIX "mime_" -#endif - - -#ifndef _NO_LINE_FOLDING -#define _SUPPORT_LINE_FOLDING 1 -#endif - -/* undef below if compile with MFC */ -/* #define INCLUDEMFC 1 */ - -#if defined(WIN32) || defined(_WIN32) -#ifdef INCLUDEMFC -#include <afx.h> -#endif -#endif - -#include <string.h> -#ifndef __MWERKS__ -#include <stdlib.h> -#endif -#include <stdio.h> -#include <stdlib.h> -#include <ctype.h> - -//#ifdef PALMTOPCENTER -//#include <qpe/vobject_p.h> -//#else -#include "vobject_p.h" -//#endif - -/**** Types, Constants ****/ - -#define YYDEBUG 0 /* 1 to compile in some debugging code */ -#define MAXTOKEN 256 /* maximum token (line) length */ -#define YYSTACKSIZE 100 // ~unref ? -#define MAXLEVEL 10 /* max # of nested objects parseable */ - /* (includes outermost) */ - - -/**** Global Variables ****/ -int mime_lineNum, mime_numErrors; /* yyerror() can use these */ -static VObject* vObjList; -static VObject *curProp; -static VObject *curObj; -static VObject* ObjStack[MAXLEVEL]; -static int ObjStackTop; - - -/* A helpful utility for the rest of the app. */ -#if __CPLUSPLUS__ -extern "C" { -#endif - - extern void yyerror(char *s); - -#if __CPLUSPLUS__ - }; -#endif - -int yyparse(); - -enum LexMode { - L_NORMAL, - L_VCARD, - L_VCAL, - L_VEVENT, - L_VTODO, - L_VALUES, - L_BASE64, - L_QUOTED_PRINTABLE - }; - -/**** Private Forward Declarations ****/ -static int pushVObject(const char *prop); -static VObject* popVObject(); -static void lexPopMode(int top); -static int lexWithinMode(enum LexMode mode); -static void lexPushMode(enum LexMode mode); -static void enterProps(const char *s); -static void enterAttr(const char *s1, const char *s2); -static void enterValues(const char *value); -#define mime_error yyerror -void mime_error(char *s); -void mime_error_(char *s); - -%} - -/***************************************************************************/ -/*** The grammar ****/ -/***************************************************************************/ - -%union { - char *str; - VObject *vobj; - } - -%token - EQ COLON DOT SEMICOLON SPACE HTAB LINESEP NEWLINE - BEGIN_VCARD END_VCARD BEGIN_VCAL END_VCAL - BEGIN_VEVENT END_VEVENT BEGIN_VTODO END_VTODO - ID - -/* - * NEWLINE is the token that would occur outside a vCard, - * while LINESEP is the token that would occur inside a vCard. - */ - -%token <str> - STRING ID - -%type <str> name value - -%type <vobj> vcard vcal vobject - -%start mime - -%% - - -mime: vobjects - ; - -vobjects: vobjects vobject - { addList(&vObjList, $2); curObj = 0; } - | vobject - { addList(&vObjList, $1); curObj = 0; } - ; - -vobject: vcard - | vcal - ; - -vcard: - BEGIN_VCARD - { - lexPushMode(L_VCARD); - if (!pushVObject(VCCardProp)) YYERROR; - } - items END_VCARD - { - lexPopMode(0); - $$ = popVObject(); - } - | BEGIN_VCARD - { - lexPushMode(L_VCARD); - if (!pushVObject(VCCardProp)) YYERROR; - } - END_VCARD - { - lexPopMode(0); - $$ = popVObject(); - } - ; - -items: items item - | item - ; - -item: prop COLON - { - lexPushMode(L_VALUES); - } - values LINESEP - { - if (lexWithinMode(L_BASE64) || lexWithinMode(L_QUOTED_PRINTABLE)) - lexPopMode(0); - lexPopMode(0); - } - | error - ; - -prop: name - { - enterProps($1); - } - attr_params - | name - { - enterProps($1); - } - ; - -attr_params: attr_params attr_param - | attr_param - ; - -attr_param: SEMICOLON attr - ; - -attr: name - { - enterAttr($1,0); - } - | name EQ name - { - enterAttr($1,$3); - - } - ; - -name: ID - ; - -values: value SEMICOLON { enterValues($1); } values - | value - { enterValues($1); } - ; - -value: STRING - | - { $$ = 0; } - ; - -vcal: - BEGIN_VCAL - { if (!pushVObject(VCCalProp)) YYERROR; } - calitems - END_VCAL - { $$ = popVObject(); } - | BEGIN_VCAL - { if (!pushVObject(VCCalProp)) YYERROR; } - END_VCAL - { $$ = popVObject(); } - ; - -calitems: calitems calitem - | calitem - ; - -calitem: - eventitem - | todoitem - | items - ; - -eventitem: - BEGIN_VEVENT - { - lexPushMode(L_VEVENT); - if (!pushVObject(VCEventProp)) YYERROR; - } - items - END_VEVENT - { - lexPopMode(0); - popVObject(); - } - | BEGIN_VEVENT - { - lexPushMode(L_VEVENT); - if (!pushVObject(VCEventProp)) YYERROR; - } - END_VEVENT - { - lexPopMode(0); - popVObject(); - } - ; - -todoitem: - BEGIN_VTODO - { - lexPushMode(L_VTODO); - if (!pushVObject(VCTodoProp)) YYERROR; - } - items - END_VTODO - { - lexPopMode(0); - popVObject(); - } - | BEGIN_VTODO - { - lexPushMode(L_VTODO); - if (!pushVObject(VCTodoProp)) YYERROR; - } - END_VTODO - { - lexPopMode(0); - popVObject(); - } - ; - -%% -/*------------------------------------*/ -static int pushVObject(const char *prop) - { - VObject *newObj; - if (ObjStackTop == MAXLEVEL) - return FALSE; - - ObjStack[++ObjStackTop] = curObj; - - if (curObj) { - newObj = addProp(curObj,prop); - curObj = newObj; - } - else - curObj = newVObject(prop); - - return TRUE; - } - - -/*---------------------------------------*/ -/* This pops the recently built vCard off the stack and returns it. */ -static VObject* popVObject() - { - VObject *oldObj; - if (ObjStackTop < 0) { - yyerror("pop on empty Object Stack\n"); - return 0; - } - oldObj = curObj; - curObj = ObjStack[ObjStackTop--]; - - return oldObj; - } - - -static void enterValues(const char *value) - { - if (fieldedProp && *fieldedProp) { - if (value) { - addPropValue(curProp,*fieldedProp,value); - } - /* else this field is empty, advance to next field */ - fieldedProp++; - } - else { - if (value) { - setVObjectStringZValue_(curProp,strdup( value )); - } - } - deleteStr(value); - } - -static void enterProps(const char *s) - { - curProp = addGroup(curObj,s); - deleteStr(s); - } - -static void enterAttr(const char *s1, const char *s2) - { - const char *p1, *p2; - p1 = lookupProp_(s1); - if (s2) { - VObject *a; - p2 = lookupProp_(s2); - a = addProp(curProp,p1); - setVObjectStringZValue(a,p2); - } - else - addProp(curProp,p1); - if (qstricmp(p1,VCBase64Prop) == 0 || (s2 && qstricmp(p2,VCBase64Prop)==0)) - lexPushMode(L_BASE64); - else if (qstricmp(p1,VCQuotedPrintableProp) == 0 - || (s2 && qstricmp(p2,VCQuotedPrintableProp)==0)) - lexPushMode(L_QUOTED_PRINTABLE); - deleteStr(s1); deleteStr(s2); - } - - -#define MAX_LEX_LOOKAHEAD_0 32 -#define MAX_LEX_LOOKAHEAD 64 -#define MAX_LEX_MODE_STACK_SIZE 10 -#define LEXMODE() (lexBuf.lexModeStack[lexBuf.lexModeStackTop]) - -struct LexBuf { - /* input */ -#ifdef INCLUDEMFC - CFile *inputFile; -#else - FILE *inputFile; -#endif - char *inputString; - unsigned long curPos; - unsigned long inputLen; - /* lookahead buffer */ - /* -- lookahead buffer is short instead of char so that EOF - / can be represented correctly. - */ - unsigned long len; - short buf[MAX_LEX_LOOKAHEAD]; - unsigned long getPtr; - /* context stack */ - unsigned long lexModeStackTop; - enum LexMode lexModeStack[MAX_LEX_MODE_STACK_SIZE]; - /* token buffer */ - unsigned long maxToken; - char *strs; - unsigned long strsLen; - } lexBuf; - -static void lexPushMode(enum LexMode mode) - { - if (lexBuf.lexModeStackTop == (MAX_LEX_MODE_STACK_SIZE-1)) - yyerror("lexical context stack overflow"); - else { - lexBuf.lexModeStack[++lexBuf.lexModeStackTop] = mode; - } - } - -static void lexPopMode(int top) - { - /* special case of pop for ease of error recovery -- this - version will never underflow */ - if (top) - lexBuf.lexModeStackTop = 0; - else - if (lexBuf.lexModeStackTop > 0) lexBuf.lexModeStackTop--; - } - -static int lexWithinMode(enum LexMode mode) { - unsigned long i; - for (i=0;i<lexBuf.lexModeStackTop;i++) - if (mode == lexBuf.lexModeStack[i]) return 1; - return 0; - } - -static char lexGetc_() - { - /* get next char from input, no buffering. */ - if (lexBuf.curPos == lexBuf.inputLen) - return EOF; - else if (lexBuf.inputString) - return *(lexBuf.inputString + lexBuf.curPos++); - else { -#ifdef INCLUDEMFC - char result; - return lexBuf.inputFile->Read(&result, 1) == 1 ? result : EOF; -#else - return fgetc(lexBuf.inputFile); -#endif - } - } - -static int lexGeta() - { - ++lexBuf.len; - return (lexBuf.buf[lexBuf.getPtr] = lexGetc_()); - } - -static int lexGeta_(int i) - { - ++lexBuf.len; - return (lexBuf.buf[(lexBuf.getPtr+i)%MAX_LEX_LOOKAHEAD] = lexGetc_()); - } - -static void lexSkipLookahead() { - if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { - /* don't skip EOF. */ - lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; - lexBuf.len--; - } - } - -static int lexLookahead() { - int c = (lexBuf.len)? - lexBuf.buf[lexBuf.getPtr]: - lexGeta(); - /* do the \r\n -> \n or \r -> \n translation here */ - if (c == '\r') { - int a = (lexBuf.len>1)? - lexBuf.buf[(lexBuf.getPtr+1)%MAX_LEX_LOOKAHEAD]: - lexGeta_(1); - if (a == '\n') { - lexSkipLookahead(); - } - lexBuf.buf[lexBuf.getPtr] = c = '\n'; - } - else if (c == '\n') { - int a = (lexBuf.len>1)? - lexBuf.buf[lexBuf.getPtr+1]: - lexGeta_(1); - if (a == '\r') { - lexSkipLookahead(); - } - lexBuf.buf[lexBuf.getPtr] = '\n'; - } - return c; - } - -static int lexGetc() { - int c = lexLookahead(); - if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { - /* EOF will remain in lookahead buffer */ - lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; - lexBuf.len--; - } - return c; - } - -static void lexSkipLookaheadWord() { - if (lexBuf.strsLen <= lexBuf.len) { - lexBuf.len -= lexBuf.strsLen; - lexBuf.getPtr = (lexBuf.getPtr + lexBuf.strsLen) % MAX_LEX_LOOKAHEAD; - } - } - -static void lexClearToken() - { - lexBuf.strsLen = 0; - } - -static void lexAppendc(int c) - { - lexBuf.strs[lexBuf.strsLen] = c; - /* append up to zero termination */ - if (c == 0) return; - lexBuf.strsLen++; - if (lexBuf.strsLen > lexBuf.maxToken) { - /* double the token string size */ - lexBuf.maxToken <<= 1; - lexBuf.strs = (char*) realloc(lexBuf.strs,(size_t)lexBuf.maxToken); - } - } - -static char* lexStr() { - return dupStr(lexBuf.strs,(size_t)lexBuf.strsLen+1); - } - -static void lexSkipWhite() { - int c = lexLookahead(); - while (c == ' ' || c == '\t') { - lexSkipLookahead(); - c = lexLookahead(); - } - } - -static char* lexGetWord() { - int c; - lexSkipWhite(); - lexClearToken(); - c = lexLookahead(); - while (c != EOF && !strchr("\t\n ;:=",c)) { - lexAppendc(c); - lexSkipLookahead(); - c = lexLookahead(); - } - lexAppendc(0); - return lexStr(); - } - -static void lexPushLookaheadc(int c) { - int putptr; - /* can't putback EOF, because it never leaves lookahead buffer */ - if (c == EOF) return; - putptr = (int)lexBuf.getPtr - 1; - if (putptr < 0) putptr += MAX_LEX_LOOKAHEAD; - lexBuf.getPtr = putptr; - lexBuf.buf[putptr] = c; - lexBuf.len += 1; - } - -static char* lexLookaheadWord() { - /* this function can lookahead word with max size of MAX_LEX_LOOKAHEAD_0 - / and thing bigger than that will stop the lookahead and return 0; - / leading white spaces are not recoverable. - */ - int c; - int len = 0; - int curgetptr = 0; - lexSkipWhite(); - lexClearToken(); - curgetptr = (int)lexBuf.getPtr; // remember! - while (len < (MAX_LEX_LOOKAHEAD_0)) { - c = lexGetc(); - len++; - if (c == EOF || strchr("\t\n ;:=", c)) { - lexAppendc(0); - /* restore lookahead buf. */ - lexBuf.len += len; - lexBuf.getPtr = curgetptr; - return lexStr(); - } - else - lexAppendc(c); - } - lexBuf.len += len; /* char that has been moved to lookahead buffer */ - lexBuf.getPtr = curgetptr; - return 0; - } - -#ifdef _SUPPORT_LINE_FOLDING -static void handleMoreRFC822LineBreak(int c) { - /* suport RFC 822 line break in cases like - * ADR: foo; - * morefoo; - * more foo; - */ - if (c == ';') { - int a; - lexSkipLookahead(); - /* skip white spaces */ - a = lexLookahead(); - while (a == ' ' || a == '\t') { - lexSkipLookahead(); - a = lexLookahead(); - } - if (a == '\n') { - lexSkipLookahead(); - a = lexLookahead(); - if (a == ' ' || a == '\t') { - /* continuation, throw away all the \n and spaces read so - * far - */ - lexSkipWhite(); - lexPushLookaheadc(';'); - } - else { - lexPushLookaheadc('\n'); - lexPushLookaheadc(';'); - } - } - else { - lexPushLookaheadc(';'); - } - } - } - -static char* lexGet1Value() { - int c; - lexSkipWhite(); - c = lexLookahead(); - lexClearToken(); - while (c != EOF && c != ';') { - if (c == '\\' ) { - int a; - lexSkipLookahead(); - a = lexLookahead(); - if ( a != ';' ) { - lexAppendc('\\'); - } else { - lexAppendc( ';' ); - lexSkipLookahead(); - } - } else if (c == '\n') { - int a; - lexSkipLookahead(); - a = lexLookahead(); - if (a == ' ' || a == '\t') { - lexAppendc(' '); - lexSkipLookahead(); - } - else { - lexPushLookaheadc('\n'); - break; - } - } - else { - lexAppendc(c); - lexSkipLookahead(); - } - c = lexLookahead(); - } - lexAppendc(0); - handleMoreRFC822LineBreak(c); - return c==EOF?0:lexStr(); - } -#endif - -static int match_begin_name(int end) { - char *n = lexLookaheadWord(); - int token = ID; - if (n) { - if (!qstricmp(n,"vcard")) token = end?END_VCARD:BEGIN_VCARD; - else if (!qstricmp(n,"vcalendar")) token = end?END_VCAL:BEGIN_VCAL; - else if (!qstricmp(n,"vevent")) token = end?END_VEVENT:BEGIN_VEVENT; - else if (!qstricmp(n,"vtodo")) token = end?END_VTODO:BEGIN_VTODO; - deleteStr(n); - return token; - } - return 0; - } - - -#ifdef INCLUDEMFC -void initLex(const char *inputstring, unsigned long inputlen, CFile *inputfile) -#else -void initLex(const char *inputstring, unsigned long inputlen, FILE *inputfile) -#endif - { - // initialize lex mode stack - lexBuf.lexModeStack[lexBuf.lexModeStackTop=0] = L_NORMAL; - - // iniatialize lex buffer. - lexBuf.inputString = (char*) inputstring; - lexBuf.inputLen = inputlen; - lexBuf.curPos = 0; - lexBuf.inputFile = inputfile; - - lexBuf.len = 0; - lexBuf.getPtr = 0; - - lexBuf.maxToken = MAXTOKEN; - lexBuf.strs = (char*)malloc(MAXTOKEN); - lexBuf.strsLen = 0; - - } - -static void finiLex() { - free(lexBuf.strs); - } - - -/*-----------------------------------*/ -/* This parses and converts the base64 format for binary encoding into - * a decoded buffer (allocated with new). See RFC 1521. - */ -static char * lexGetDataFromBase64() - { - unsigned long bytesLen = 0, bytesMax = 0; - int quadIx = 0, pad = 0; - unsigned long trip = 0; - unsigned char b; - int c; - unsigned char *bytes = NULL; - unsigned char *oldBytes = NULL; - - DBG_(("db: lexGetDataFromBase64\n")); - while (1) { - c = lexGetc(); - if (c == '\n') { - ++mime_lineNum; - if (lexLookahead() == '\n') { - /* a '\n' character by itself means end of data */ - break; - } - else continue; /* ignore '\n' */ - } - else { - if ((c >= 'A') && (c <= 'Z')) - b = (unsigned char)(c - 'A'); - else if ((c >= 'a') && (c <= 'z')) - b = (unsigned char)(c - 'a') + 26; - else if ((c >= '0') && (c <= '9')) - b = (unsigned char)(c - '0') + 52; - else if (c == '+') - b = 62; - else if (c == '/') - b = 63; - else if (c == '=') { - b = 0; - pad++; - } else if ((c == ' ') || (c == '\t')) { - continue; - } else { /* error condition */ - if (bytes) free(bytes); - else if (oldBytes) free(oldBytes); - // error recovery: skip until 2 adjacent newlines. - DBG_(("db: invalid character 0x%x '%c'\n", c,c)); - if (c != EOF) { - c = lexGetc(); - while (c != EOF) { - if (c == '\n' && lexLookahead() == '\n') { - ++mime_lineNum; - break; - } - c = lexGetc(); - } - } - return NULL; - } - trip = (trip << 6) | b; - if (++quadIx == 4) { - unsigned char outBytes[3]; - int numOut; - int i; - for (i = 0; i < 3; i++) { - outBytes[2-i] = (unsigned char)(trip & 0xFF); - trip >>= 8; - } - numOut = 3 - pad; - if (bytesLen + numOut > bytesMax) { - if (!bytes) { - bytesMax = 1024; - bytes = (unsigned char*)malloc((size_t)bytesMax); - } - else { - bytesMax <<= 2; - oldBytes = bytes; - bytes = (unsigned char*)realloc(bytes,(size_t)bytesMax); - } - if (bytes == 0) { - mime_error("out of memory while processing BASE64 data\n"); - } - } - if (bytes) { - memcpy(bytes + bytesLen, outBytes, numOut); - bytesLen += numOut; - } - trip = 0; - quadIx = 0; - } - } - } /* while */ - DBG_(("db: bytesLen = %d\n", bytesLen)); - /* kludge: all this won't be necessary if we have tree form - representation */ - if (bytes) { - setValueWithSize(curProp,bytes,(unsigned int)bytesLen); - free(bytes); - } - else if (oldBytes) { - setValueWithSize(curProp,oldBytes,(unsigned int)bytesLen); - free(oldBytes); - } - return 0; - } - -static int match_begin_end_name(int end) { - int token; - lexSkipWhite(); - if (lexLookahead() != ':') return ID; - lexSkipLookahead(); - lexSkipWhite(); - token = match_begin_name(end); - if (token == ID) { - lexPushLookaheadc(':'); - DBG_(("db: ID '%s'\n", yylval.str)); - return ID; - } - else if (token != 0) { - lexSkipLookaheadWord(); - deleteStr(yylval.str); - DBG_(("db: begin/end %d\n", token)); - return token; - } - return 0; - } - -static char* lexGetQuotedPrintable() - { - char cur; - - lexClearToken(); - do { - cur = lexGetc(); - switch (cur) { - case '=': { - int c = 0; - int next[2]; - int i; - for (i = 0; i < 2; i++) { - next[i] = lexGetc(); - if (next[i] >= '0' && next[i] <= '9') - c = c * 16 + next[i] - '0'; - else if (next[i] >= 'A' && next[i] <= 'F') - c = c * 16 + next[i] - 'A' + 10; - else - break; - } - if (i == 0) { - /* single '=' follow by LINESEP is continuation sign? */ - if (next[0] == '\n') { - ++mime_lineNum; - } - else { - lexPushLookaheadc('='); - goto EndString; - } - } - else if (i == 1) { - lexPushLookaheadc(next[1]); - lexPushLookaheadc(next[0]); - lexAppendc('='); - } else { - lexAppendc(c); - } - break; - } /* '=' */ - case '\n': { - lexPushLookaheadc('\n'); - goto EndString; - } - case (char)EOF: - break; - default: - lexAppendc(cur); - break; - } /* switch */ - } while (cur != (char)EOF); - -EndString: - lexAppendc(0); - return lexStr(); - } /* LexQuotedPrintable */ - -static int yylex() { - - int lexmode = LEXMODE(); - if (lexmode == L_VALUES) { - int c = lexGetc(); - if (c == ';') { - DBG_(("db: SEMICOLON\n")); - lexPushLookaheadc(c); - handleMoreRFC822LineBreak(c); - lexSkipLookahead(); - return SEMICOLON; - } - else if (strchr("\n",c)) { - ++mime_lineNum; - /* consume all line separator(s) adjacent to each other */ - c = lexLookahead(); - while (strchr("\n",c)) { - lexSkipLookahead(); - c = lexLookahead(); - ++mime_lineNum; - } - DBG_(("db: LINESEP\n")); - return LINESEP; - } - else { - char *p = 0; - lexPushLookaheadc(c); - if (lexWithinMode(L_BASE64)) { - /* get each char and convert to bin on the fly... */ - p = lexGetDataFromBase64(); - yylval.str = p; - return STRING; - } - else if (lexWithinMode(L_QUOTED_PRINTABLE)) { - p = lexGetQuotedPrintable(); - } - else { -#ifdef _SUPPORT_LINE_FOLDING - p = lexGet1Value(); -#else - p = lexGetStrUntil(";\n"); -#endif - } - if (p) { - DBG_(("db: STRING: '%s'\n", p)); - yylval.str = p; - return STRING; - } - else return 0; - } - } - else { - /* normal mode */ - while (1) { - int c = lexGetc(); - switch(c) { - case ':': { - /* consume all line separator(s) adjacent to each other */ - /* ignoring linesep immediately after colon. */ - c = lexLookahead(); - while (strchr("\n",c)) { - lexSkipLookahead(); - c = lexLookahead(); - ++mime_lineNum; - } - DBG_(("db: COLON\n")); - return COLON; - } - case ';': - DBG_(("db: SEMICOLON\n")); - return SEMICOLON; - case '=': - DBG_(("db: EQ\n")); - return EQ; - /* ignore whitespace in this mode */ - case '\t': - case ' ': continue; - case '\n': { - ++mime_lineNum; - continue; - } - case EOF: return 0; - break; - default: { - lexPushLookaheadc(c); - if (isalnum(c)) { - char *t = lexGetWord(); - yylval.str = t; - if (!qstricmp(t, "begin")) { - return match_begin_end_name(0); - } - else if (!qstricmp(t,"end")) { - return match_begin_end_name(1); - } - else { - DBG_(("db: ID '%s'\n", t)); - return ID; - } - } - else { - /* unknow token */ - return 0; - } - break; - } - } - } - } - return 0; - } - - -/***************************************************************************/ -/*** Public Functions ****/ -/***************************************************************************/ - -static VObject* Parse_MIMEHelper() - { - ObjStackTop = -1; - mime_numErrors = 0; - mime_lineNum = 1; - vObjList = 0; - curObj = 0; - - if (yyparse() != 0) - return 0; - - finiLex(); - return vObjList; - } - -/*--------------------------------------------*/ -DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len) - { - initLex(input, len, 0); - return Parse_MIMEHelper(); - } - - -#if INCLUDEMFC - -DLLEXPORT(VObject*) Parse_MIME_FromFile(CFile *file) - { - unsigned long startPos; - VObject *result; - - initLex(0,-1,file); - startPos = file->GetPosition(); - if (!(result = Parse_MIMEHelper())) - file->Seek(startPos, CFile::begin); - return result; - } - -#else - -VObject* Parse_MIME_FromFile(FILE *file) - { - VObject *result; - long startPos; - - initLex(0,(unsigned long)-1,file); - startPos = ftell(file); - if (!(result = Parse_MIMEHelper())) { - fseek(file,startPos,SEEK_SET); - } - return result; - } - -DLLEXPORT(VObject*) Parse_MIME_FromFileName(char *fname) - { - FILE *fp = fopen(fname,"r"); - if (fp) { - VObject* o = Parse_MIME_FromFile(fp); - fclose(fp); - return o; - } - else { - char msg[80]; - sprintf(msg, "can't open file '%s' for reading\n", fname); - mime_error_(msg); - return 0; - } - } - -#endif - -/*-------------------------------------*/ - -static MimeErrorHandler mimeErrorHandler; - -DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler me) - { - mimeErrorHandler = me; - } - -void mime_error(char *s) - { - char msg[256]; - if (mimeErrorHandler) { - sprintf(msg,"%s at line %d", s, mime_lineNum); - mimeErrorHandler(msg); - } - } - -void mime_error_(char *s) - { - if (mimeErrorHandler) { - mimeErrorHandler(s); - } - } - +%{
+
+/***************************************************************************
+(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International
+Business Machines Corporation and Siemens Rolm Communications Inc.
+
+For purposes of this license notice, the term Licensors shall mean,
+collectively, Apple Computer, Inc., AT&T Corp., International
+Business Machines Corporation and Siemens Rolm Communications Inc.
+The term Licensor shall mean any of the Licensors.
+
+Subject to acceptance of the following conditions, permission is hereby
+granted by Licensors without the need for written agreement and without
+license or royalty fees, to use, copy, modify and distribute this
+software for any purpose.
+
+The above copyright notice and the following four paragraphs must be
+reproduced in all copies of this software and any software including
+this software.
+
+THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE
+ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR
+MODIFICATIONS.
+
+IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT,
+INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
+OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+
+EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.
+
+The software is provided with RESTRICTED RIGHTS. Use, duplication, or
+disclosure by the government are subject to restrictions set forth in
+DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
+
+***************************************************************************/
+
+/*
+ * src: vcc.c
+ * doc: Parser for vCard and vCalendar. Note that this code is
+ * generated by a yacc parser generator. Generally it should not
+ * be edited by hand. The real source is vcc.y. The #line directives
+ * can be commented out here to make it easier to trace through
+ * in a debugger. However, if a bug is found it should
+ * be fixed in vcc.y and this file regenerated.
+ */
+
+
+/* debugging utilities */
+#if __DEBUG
+#define DBG_(x) printf x
+#else
+#define DBG_(x)
+#endif
+
+/**** External Functions ****/
+
+/* assign local name to parser variables and functions so that
+ we can use more than one yacc based parser.
+*/
+
+#if 0
+#define yyparse mime_parse
+#define yylex mime_lex
+#define yyerror mime_error
+#define yychar mime_char
+/* #define p_yyval p_mime_val */
+#undef yyval
+#define yyval mime_yyval
+/* #define p_yylval p_mime_lval */
+#undef yylval
+#define yylval mime_yylval
+#define yydebug mime_debug
+#define yynerrs mime_nerrs
+#define yyerrflag mime_errflag
+#define yyss mime_ss
+#define yyssp mime_ssp
+#define yyvs mime_vs
+#define yyvsp mime_vsp
+#define yylhs mime_lhs
+#define yylen mime_len
+#define yydefred mime_defred
+#define yydgoto mime_dgoto
+#define yysindex mime_sindex
+#define yyrindex mime_rindex
+#define yygindex mime_gindex
+#define yytable mime_table
+#define yycheck mime_check
+#define yyname mime_name
+#define yyrule mime_rule
+#ifdef YYPREFIX
+#undef YYPREFIX
+#endif
+#define YYPREFIX "mime_"
+#endif
+
+
+#ifndef _NO_LINE_FOLDING
+#define _SUPPORT_LINE_FOLDING 1
+#endif
+
+/* undef below if compile with MFC */
+/* #define INCLUDEMFC 1 */
+
+#if defined(WIN32) || defined(_WIN32)
+#ifdef INCLUDEMFC
+#include <afx.h>
+#endif
+#endif
+
+#include <string.h>
+#ifndef __MWERKS__
+#include <stdlib.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+//#ifdef PALMTOPCENTER
+//#include <qpe/vobject_p.h>
+//#else
+#include "vobject_p.h"
+//#endif
+
+/**** Types, Constants ****/
+
+#define YYDEBUG 0 /* 1 to compile in some debugging code */
+#define MAXTOKEN 256 /* maximum token (line) length */
+#define YYSTACKSIZE 100 // ~unref ?
+#define MAXLEVEL 10 /* max # of nested objects parseable */
+ /* (includes outermost) */
+
+
+/**** Global Variables ****/
+int mime_lineNum, mime_numErrors; /* yyerror() can use these */
+static VObject* vObjList;
+static VObject *curProp;
+static VObject *curObj;
+static VObject* ObjStack[MAXLEVEL];
+static int ObjStackTop;
+
+
+/* A helpful utility for the rest of the app. */
+#if __CPLUSPLUS__
+extern "C" {
+#endif
+
+ extern void yyerror(char *s);
+
+#if __CPLUSPLUS__
+ };
+#endif
+
+int yyparse();
+
+enum LexMode {
+ L_NORMAL,
+ L_VCARD,
+ L_VCAL,
+ L_VEVENT,
+ L_VTODO,
+ L_VALUES,
+ L_BASE64,
+ L_QUOTED_PRINTABLE
+ };
+
+/**** Private Forward Declarations ****/
+static int pushVObject(const char *prop);
+static VObject* popVObject();
+static void lexPopMode(int top);
+static int lexWithinMode(enum LexMode mode);
+static void lexPushMode(enum LexMode mode);
+static void enterProps(const char *s);
+static void enterAttr(const char *s1, const char *s2);
+static void enterValues(const char *value);
+#define mime_error yyerror
+void mime_error(char *s);
+void mime_error_(char *s);
+
+%}
+
+/***************************************************************************/
+/*** The grammar ****/
+/***************************************************************************/
+
+%union {
+ char *str;
+ VObject *vobj;
+ }
+
+%token
+ EQ COLON DOT SEMICOLON SPACE HTAB LINESEP NEWLINE
+ BEGIN_VCARD END_VCARD BEGIN_VCAL END_VCAL
+ BEGIN_VEVENT END_VEVENT BEGIN_VTODO END_VTODO
+ ID
+
+/*
+ * NEWLINE is the token that would occur outside a vCard,
+ * while LINESEP is the token that would occur inside a vCard.
+ */
+
+%token <str>
+ STRING ID
+
+%type <str> name value
+
+%type <vobj> vcard vcal vobject
+
+%start mime
+
+%%
+
+
+mime: vobjects
+ ;
+
+vobjects: vobjects vobject
+ { addList(&vObjList, $2); curObj = 0; }
+ | vobject
+ { addList(&vObjList, $1); curObj = 0; }
+ ;
+
+vobject: vcard
+ | vcal
+ ;
+
+vcard:
+ BEGIN_VCARD
+ {
+ lexPushMode(L_VCARD);
+ if (!pushVObject(VCCardProp)) YYERROR;
+ }
+ items END_VCARD
+ {
+ lexPopMode(0);
+ $$ = popVObject();
+ }
+ | BEGIN_VCARD
+ {
+ lexPushMode(L_VCARD);
+ if (!pushVObject(VCCardProp)) YYERROR;
+ }
+ END_VCARD
+ {
+ lexPopMode(0);
+ $$ = popVObject();
+ }
+ ;
+
+items: items item
+ | item
+ ;
+
+item: prop COLON
+ {
+ lexPushMode(L_VALUES);
+ }
+ values LINESEP
+ {
+ if (lexWithinMode(L_BASE64) || lexWithinMode(L_QUOTED_PRINTABLE))
+ lexPopMode(0);
+ lexPopMode(0);
+ }
+ | error
+ ;
+
+prop: name
+ {
+ enterProps($1);
+ }
+ attr_params
+ | name
+ {
+ enterProps($1);
+ }
+ ;
+
+attr_params: attr_params attr_param
+ | attr_param
+ ;
+
+attr_param: SEMICOLON attr
+ ;
+
+attr: name
+ {
+ enterAttr($1,0);
+ }
+ | name EQ name
+ {
+ enterAttr($1,$3);
+
+ }
+ ;
+
+name: ID
+ ;
+
+values: value SEMICOLON { enterValues($1); } values
+ | value
+ { enterValues($1); }
+ ;
+
+value: STRING
+ |
+ { $$ = 0; }
+ ;
+
+vcal:
+ BEGIN_VCAL
+ { if (!pushVObject(VCCalProp)) YYERROR; }
+ calitems
+ END_VCAL
+ { $$ = popVObject(); }
+ | BEGIN_VCAL
+ { if (!pushVObject(VCCalProp)) YYERROR; }
+ END_VCAL
+ { $$ = popVObject(); }
+ ;
+
+calitems: calitems calitem
+ | calitem
+ ;
+
+calitem:
+ eventitem
+ | todoitem
+ | items
+ ;
+
+eventitem:
+ BEGIN_VEVENT
+ {
+ lexPushMode(L_VEVENT);
+ if (!pushVObject(VCEventProp)) YYERROR;
+ }
+ items
+ END_VEVENT
+ {
+ lexPopMode(0);
+ popVObject();
+ }
+ | BEGIN_VEVENT
+ {
+ lexPushMode(L_VEVENT);
+ if (!pushVObject(VCEventProp)) YYERROR;
+ }
+ END_VEVENT
+ {
+ lexPopMode(0);
+ popVObject();
+ }
+ ;
+
+todoitem:
+ BEGIN_VTODO
+ {
+ lexPushMode(L_VTODO);
+ if (!pushVObject(VCTodoProp)) YYERROR;
+ }
+ items
+ END_VTODO
+ {
+ lexPopMode(0);
+ popVObject();
+ }
+ | BEGIN_VTODO
+ {
+ lexPushMode(L_VTODO);
+ if (!pushVObject(VCTodoProp)) YYERROR;
+ }
+ END_VTODO
+ {
+ lexPopMode(0);
+ popVObject();
+ }
+ ;
+
+%%
+/*------------------------------------*/
+static int pushVObject(const char *prop)
+ {
+ VObject *newObj;
+ if (ObjStackTop == MAXLEVEL)
+ return FALSE;
+
+ ObjStack[++ObjStackTop] = curObj;
+
+ if (curObj) {
+ newObj = addProp(curObj,prop);
+ curObj = newObj;
+ }
+ else
+ curObj = newVObject(prop);
+
+ return TRUE;
+ }
+
+
+/*---------------------------------------*/
+/* This pops the recently built vCard off the stack and returns it. */
+static VObject* popVObject()
+ {
+ VObject *oldObj;
+ if (ObjStackTop < 0) {
+ yyerror("pop on empty Object Stack\n");
+ return 0;
+ }
+ oldObj = curObj;
+ curObj = ObjStack[ObjStackTop--];
+
+ return oldObj;
+ }
+
+
+static void enterValues(const char *value)
+ {
+ if (fieldedProp && *fieldedProp) {
+ if (value) {
+ addPropValue(curProp,*fieldedProp,value);
+ }
+ /* else this field is empty, advance to next field */
+ fieldedProp++;
+ }
+ else {
+ if (value) {
+ setVObjectStringZValue_(curProp,strdup( value ));
+ }
+ }
+ deleteStr(value);
+ }
+
+static void enterProps(const char *s)
+ {
+ curProp = addGroup(curObj,s);
+ deleteStr(s);
+ }
+
+static void enterAttr(const char *s1, const char *s2)
+ {
+ const char *p1, *p2;
+ p1 = lookupProp_(s1);
+ if (s2) {
+ VObject *a;
+ p2 = lookupProp_(s2);
+ a = addProp(curProp,p1);
+ setVObjectStringZValue(a,p2);
+ }
+ else
+ addProp(curProp,p1);
+ if (qstricmp(p1,VCBase64Prop) == 0 || (s2 && qstricmp(p2,VCBase64Prop)==0))
+ lexPushMode(L_BASE64);
+ else if (qstricmp(p1,VCQuotedPrintableProp) == 0
+ || (s2 && qstricmp(p2,VCQuotedPrintableProp)==0))
+ lexPushMode(L_QUOTED_PRINTABLE);
+ deleteStr(s1); deleteStr(s2);
+ }
+
+
+#define MAX_LEX_LOOKAHEAD_0 32
+#define MAX_LEX_LOOKAHEAD 64
+#define MAX_LEX_MODE_STACK_SIZE 10
+#define LEXMODE() (lexBuf.lexModeStack[lexBuf.lexModeStackTop])
+
+struct LexBuf {
+ /* input */
+#ifdef INCLUDEMFC
+ CFile *inputFile;
+#else
+ FILE *inputFile;
+#endif
+ char *inputString;
+ unsigned long curPos;
+ unsigned long inputLen;
+ /* lookahead buffer */
+ /* -- lookahead buffer is short instead of char so that EOF
+ / can be represented correctly.
+ */
+ unsigned long len;
+ short buf[MAX_LEX_LOOKAHEAD];
+ unsigned long getPtr;
+ /* context stack */
+ unsigned long lexModeStackTop;
+ enum LexMode lexModeStack[MAX_LEX_MODE_STACK_SIZE];
+ /* token buffer */
+ unsigned long maxToken;
+ char *strs;
+ unsigned long strsLen;
+ } lexBuf;
+
+static void lexPushMode(enum LexMode mode)
+ {
+ if (lexBuf.lexModeStackTop == (MAX_LEX_MODE_STACK_SIZE-1))
+ yyerror("lexical context stack overflow");
+ else {
+ lexBuf.lexModeStack[++lexBuf.lexModeStackTop] = mode;
+ }
+ }
+
+static void lexPopMode(int top)
+ {
+ /* special case of pop for ease of error recovery -- this
+ version will never underflow */
+ if (top)
+ lexBuf.lexModeStackTop = 0;
+ else
+ if (lexBuf.lexModeStackTop > 0) lexBuf.lexModeStackTop--;
+ }
+
+static int lexWithinMode(enum LexMode mode) {
+ unsigned long i;
+ for (i=0;i<lexBuf.lexModeStackTop;i++)
+ if (mode == lexBuf.lexModeStack[i]) return 1;
+ return 0;
+ }
+
+static int lexGetc_()
+ {
+ /* get next char from input, no buffering. */
+ if (lexBuf.curPos == lexBuf.inputLen)
+ return EOF;
+ else if (lexBuf.inputString)
+ return *(lexBuf.inputString + lexBuf.curPos++);
+ else {
+#ifdef INCLUDEMFC
+ char result;
+ return lexBuf.inputFile->Read(&result, 1) == 1 ? result : EOF;
+#else
+ return fgetc(lexBuf.inputFile);
+#endif
+ }
+ }
+
+static int lexGeta()
+ {
+ ++lexBuf.len;
+ return (lexBuf.buf[lexBuf.getPtr] = lexGetc_());
+ }
+
+static int lexGeta_(int i)
+ {
+ ++lexBuf.len;
+ return (lexBuf.buf[(lexBuf.getPtr+i)%MAX_LEX_LOOKAHEAD] = lexGetc_());
+ }
+
+static void lexSkipLookahead() {
+ if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) {
+ /* don't skip EOF. */
+ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD;
+ lexBuf.len--;
+ }
+ }
+
+static int lexLookahead() {
+ int c = (lexBuf.len)?
+ lexBuf.buf[lexBuf.getPtr]:
+ lexGeta();
+ /* do the \r\n -> \n or \r -> \n translation here */
+ if (c == '\r') {
+ int a = (lexBuf.len>1)?
+ lexBuf.buf[(lexBuf.getPtr+1)%MAX_LEX_LOOKAHEAD]:
+ lexGeta_(1);
+ if (a == '\n') {
+ lexSkipLookahead();
+ }
+ lexBuf.buf[lexBuf.getPtr] = c = '\n';
+ }
+ else if (c == '\n') {
+ int a = (lexBuf.len>1)?
+ lexBuf.buf[lexBuf.getPtr+1]:
+ lexGeta_(1);
+ if (a == '\r') {
+ lexSkipLookahead();
+ }
+ lexBuf.buf[lexBuf.getPtr] = '\n';
+ }
+ return c;
+ }
+
+static int lexGetc() {
+ int c = lexLookahead();
+ if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) {
+ /* EOF will remain in lookahead buffer */
+ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD;
+ lexBuf.len--;
+ }
+ return c;
+ }
+
+static void lexSkipLookaheadWord() {
+ if (lexBuf.strsLen <= lexBuf.len) {
+ lexBuf.len -= lexBuf.strsLen;
+ lexBuf.getPtr = (lexBuf.getPtr + lexBuf.strsLen) % MAX_LEX_LOOKAHEAD;
+ }
+ }
+
+static void lexClearToken()
+ {
+ lexBuf.strsLen = 0;
+ }
+
+static void lexAppendc(int c)
+ {
+ lexBuf.strs[lexBuf.strsLen] = c;
+ /* append up to zero termination */
+ if (c == 0) return;
+ lexBuf.strsLen++;
+ if (lexBuf.strsLen > lexBuf.maxToken) {
+ /* double the token string size */
+ lexBuf.maxToken <<= 1;
+ lexBuf.strs = (char*) realloc(lexBuf.strs,(size_t)lexBuf.maxToken);
+ }
+ }
+
+static char* lexStr() {
+ return dupStr(lexBuf.strs,(size_t)lexBuf.strsLen+1);
+ }
+
+static void lexSkipWhite() {
+ int c = lexLookahead();
+ while (c == ' ' || c == '\t') {
+ lexSkipLookahead();
+ c = lexLookahead();
+ }
+ }
+
+static char* lexGetWord() {
+ int c;
+ lexSkipWhite();
+ lexClearToken();
+ c = lexLookahead();
+ while (c != EOF && !strchr("\t\n ;:=",c)) {
+ lexAppendc(c);
+ lexSkipLookahead();
+ c = lexLookahead();
+ }
+ lexAppendc(0);
+ return lexStr();
+ }
+
+static void lexPushLookaheadc(int c) {
+ int putptr;
+ /* can't putback EOF, because it never leaves lookahead buffer */
+ if (c == EOF) return;
+ putptr = (int)lexBuf.getPtr - 1;
+ if (putptr < 0) putptr += MAX_LEX_LOOKAHEAD;
+ lexBuf.getPtr = putptr;
+ lexBuf.buf[putptr] = c;
+ lexBuf.len += 1;
+ }
+
+static char* lexLookaheadWord() {
+ /* this function can lookahead word with max size of MAX_LEX_LOOKAHEAD_0
+ / and thing bigger than that will stop the lookahead and return 0;
+ / leading white spaces are not recoverable.
+ */
+ int c;
+ int len = 0;
+ int curgetptr = 0;
+ lexSkipWhite();
+ lexClearToken();
+ curgetptr = (int)lexBuf.getPtr; // remember!
+ while (len < (MAX_LEX_LOOKAHEAD_0)) {
+ c = lexGetc();
+ len++;
+ if (c == EOF || strchr("\t\n ;:=", c)) {
+ lexAppendc(0);
+ /* restore lookahead buf. */
+ lexBuf.len += len;
+ lexBuf.getPtr = curgetptr;
+ return lexStr();
+ }
+ else
+ lexAppendc(c);
+ }
+ lexBuf.len += len; /* char that has been moved to lookahead buffer */
+ lexBuf.getPtr = curgetptr;
+ return 0;
+ }
+
+#ifdef _SUPPORT_LINE_FOLDING
+static void handleMoreRFC822LineBreak(int c) {
+ /* suport RFC 822 line break in cases like
+ * ADR: foo;
+ * morefoo;
+ * more foo;
+ */
+ if (c == ';') {
+ int a;
+ lexSkipLookahead();
+ /* skip white spaces */
+ a = lexLookahead();
+ while (a == ' ' || a == '\t') {
+ lexSkipLookahead();
+ a = lexLookahead();
+ }
+ if (a == '\n') {
+ lexSkipLookahead();
+ a = lexLookahead();
+ if (a == ' ' || a == '\t') {
+ /* continuation, throw away all the \n and spaces read so
+ * far
+ */
+ lexSkipWhite();
+ lexPushLookaheadc(';');
+ }
+ else {
+ lexPushLookaheadc('\n');
+ lexPushLookaheadc(';');
+ }
+ }
+ else {
+ lexPushLookaheadc(';');
+ }
+ }
+ }
+
+static char* lexGet1Value() {
+ int c;
+ lexSkipWhite();
+ c = lexLookahead();
+ lexClearToken();
+ while (c != EOF && c != ';') {
+ if (c == '\\' ) {
+ int a;
+ lexSkipLookahead();
+ a = lexLookahead();
+ if ( a != ';' ) {
+ lexAppendc('\\');
+ } else {
+ lexAppendc( ';' );
+ lexSkipLookahead();
+ }
+ } else if (c == '\n') {
+ int a;
+ lexSkipLookahead();
+ a = lexLookahead();
+ if (a == ' ' || a == '\t') {
+ lexAppendc(' ');
+ lexSkipLookahead();
+ }
+ else {
+ lexPushLookaheadc('\n');
+ break;
+ }
+ }
+ else {
+ lexAppendc(c);
+ lexSkipLookahead();
+ }
+ c = lexLookahead();
+ }
+ lexAppendc(0);
+ handleMoreRFC822LineBreak(c);
+ return c==EOF?0:lexStr();
+ }
+#endif
+
+static int match_begin_name(int end) {
+ char *n = lexLookaheadWord();
+ int token = ID;
+ if (n) {
+ if (!qstricmp(n,"vcard")) token = end?END_VCARD:BEGIN_VCARD;
+ else if (!qstricmp(n,"vcalendar")) token = end?END_VCAL:BEGIN_VCAL;
+ else if (!qstricmp(n,"vevent")) token = end?END_VEVENT:BEGIN_VEVENT;
+ else if (!qstricmp(n,"vtodo")) token = end?END_VTODO:BEGIN_VTODO;
+ deleteStr(n);
+ return token;
+ }
+ return 0;
+ }
+
+
+#ifdef INCLUDEMFC
+void initLex(const char *inputstring, unsigned long inputlen, CFile *inputfile)
+#else
+void initLex(const char *inputstring, unsigned long inputlen, FILE *inputfile)
+#endif
+ {
+ // initialize lex mode stack
+ lexBuf.lexModeStack[lexBuf.lexModeStackTop=0] = L_NORMAL;
+
+ // iniatialize lex buffer.
+ lexBuf.inputString = (char*) inputstring;
+ lexBuf.inputLen = inputlen;
+ lexBuf.curPos = 0;
+ lexBuf.inputFile = inputfile;
+
+ lexBuf.len = 0;
+ lexBuf.getPtr = 0;
+
+ lexBuf.maxToken = MAXTOKEN;
+ lexBuf.strs = (char*)malloc(MAXTOKEN);
+ lexBuf.strsLen = 0;
+
+ }
+
+static void finiLex() {
+ free(lexBuf.strs);
+ }
+
+
+/*-----------------------------------*/
+/* This parses and converts the base64 format for binary encoding into
+ * a decoded buffer (allocated with new). See RFC 1521.
+ */
+static char * lexGetDataFromBase64()
+ {
+ unsigned long bytesLen = 0, bytesMax = 0;
+ int quadIx = 0, pad = 0;
+ unsigned long trip = 0;
+ unsigned char b;
+ int c;
+ unsigned char *bytes = NULL;
+ unsigned char *oldBytes = NULL;
+
+ DBG_(("db: lexGetDataFromBase64\n"));
+ while (1) {
+ c = lexGetc();
+ if (c == '\n') {
+ ++mime_lineNum;
+ if (lexLookahead() == '\n') {
+ /* a '\n' character by itself means end of data */
+ break;
+ }
+ else continue; /* ignore '\n' */
+ }
+ else {
+ if ((c >= 'A') && (c <= 'Z'))
+ b = (unsigned char)(c - 'A');
+ else if ((c >= 'a') && (c <= 'z'))
+ b = (unsigned char)(c - 'a') + 26;
+ else if ((c >= '0') && (c <= '9'))
+ b = (unsigned char)(c - '0') + 52;
+ else if (c == '+')
+ b = 62;
+ else if (c == '/')
+ b = 63;
+ else if (c == '=') {
+ b = 0;
+ pad++;
+ } else if ((c == ' ') || (c == '\t')) {
+ continue;
+ } else { /* error condition */
+ if (bytes) free(bytes);
+ else if (oldBytes) free(oldBytes);
+ // error recovery: skip until 2 adjacent newlines.
+ DBG_(("db: invalid character 0x%x '%c'\n", c,c));
+ if (c != EOF) {
+ c = lexGetc();
+ while (c != EOF) {
+ if (c == '\n' && lexLookahead() == '\n') {
+ ++mime_lineNum;
+ break;
+ }
+ c = lexGetc();
+ }
+ }
+ return NULL;
+ }
+ trip = (trip << 6) | b;
+ if (++quadIx == 4) {
+ unsigned char outBytes[3];
+ int numOut;
+ int i;
+ for (i = 0; i < 3; i++) {
+ outBytes[2-i] = (unsigned char)(trip & 0xFF);
+ trip >>= 8;
+ }
+ numOut = 3 - pad;
+ if (bytesLen + numOut > bytesMax) {
+ if (!bytes) {
+ bytesMax = 1024;
+ bytes = (unsigned char*)malloc((size_t)bytesMax);
+ }
+ else {
+ bytesMax <<= 2;
+ oldBytes = bytes;
+ bytes = (unsigned char*)realloc(bytes,(size_t)bytesMax);
+ }
+ if (bytes == 0) {
+ mime_error("out of memory while processing BASE64 data\n");
+ }
+ }
+ if (bytes) {
+ memcpy(bytes + bytesLen, outBytes, numOut);
+ bytesLen += numOut;
+ }
+ trip = 0;
+ quadIx = 0;
+ }
+ }
+ } /* while */
+ DBG_(("db: bytesLen = %d\n", bytesLen));
+ /* kludge: all this won't be necessary if we have tree form
+ representation */
+ if (bytes) {
+ setValueWithSize(curProp,bytes,(unsigned int)bytesLen);
+ free(bytes);
+ }
+ else if (oldBytes) {
+ setValueWithSize(curProp,oldBytes,(unsigned int)bytesLen);
+ free(oldBytes);
+ }
+ return 0;
+ }
+
+static int match_begin_end_name(int end) {
+ int token;
+ lexSkipWhite();
+ if (lexLookahead() != ':') return ID;
+ lexSkipLookahead();
+ lexSkipWhite();
+ token = match_begin_name(end);
+ if (token == ID) {
+ lexPushLookaheadc(':');
+ DBG_(("db: ID '%s'\n", yylval.str));
+ return ID;
+ }
+ else if (token != 0) {
+ lexSkipLookaheadWord();
+ deleteStr(yylval.str);
+ DBG_(("db: begin/end %d\n", token));
+ return token;
+ }
+ return 0;
+ }
+
+static char* lexGetQuotedPrintable()
+{
+ int c;
+ lexSkipWhite();
+ c = lexLookahead();
+ lexClearToken();
+
+ while (c != EOF && c != ';') {
+ if (c == '\n') {
+ // break, leave '\n' on remaining chars.
+ break;
+ } else if (c == '=') {
+ int cur = 0;
+ int next;
+
+ lexSkipLookahead(); // skip '='
+ next = lexLookahead();
+
+ if (next == '\n') {
+ // skip and only skip the \n
+ lexSkipLookahead();
+ c = lexLookahead();
+ ++mime_lineNum; // aid in error reporting
+ continue;
+ } else if (next >= '0' && next <= '9') {
+ cur = next - '0';
+ } else if (next >= 'A' && next <= 'F') {
+ cur = next - 'A' + 10;
+ } else {
+ // we have been sent buggy stuff. doesn't matter
+ // what we do so long as we keep going.
+ // should probably spit an error here
+ c = lexLookahead();
+ continue;
+ }
+
+ lexSkipLookahead(); // skip A-Z0-9
+ next = lexLookahead();
+
+ cur = cur * 16;
+ // this time really just expecting 0-9A-F
+ if (next >= '0' && next <= '9') {
+ cur += next - '0';
+ } else if (next >= 'A' && next <= 'F') {
+ cur += next - 'A' + 10;
+ } else {
+ // we have been sent buggy stuff. doesn't matter
+ // what we do so long as we keep going.
+ // should probably spit an error here
+ c = lexLookahead();
+ continue;
+ }
+
+ // got a valid escaped =. append it.
+ lexSkipLookahead(); // skip second 0-9A-F
+ lexAppendc(cur);
+ } else {
+ lexSkipLookahead(); // skip whatever we just read.
+ lexAppendc(c); // and append it.
+ }
+ c = lexLookahead();
+ }
+ lexAppendc(0);
+ return c==EOF?0:lexStr();
+}
+
+static int yylex() {
+
+ int lexmode = LEXMODE();
+ if (lexmode == L_VALUES) {
+ int c = lexGetc();
+ if (c == ';') {
+ DBG_(("db: SEMICOLON\n"));
+ lexPushLookaheadc(c);
+ handleMoreRFC822LineBreak(c);
+ lexSkipLookahead();
+ return SEMICOLON;
+ }
+ else if (strchr("\n",c)) {
+ ++mime_lineNum;
+ /* consume all line separator(s) adjacent to each other */
+ c = lexLookahead();
+ while (strchr("\n",c)) {
+ lexSkipLookahead();
+ c = lexLookahead();
+ ++mime_lineNum;
+ }
+ DBG_(("db: LINESEP\n"));
+ return LINESEP;
+ }
+ else {
+ char *p = 0;
+ lexPushLookaheadc(c);
+ if (lexWithinMode(L_BASE64)) {
+ /* get each char and convert to bin on the fly... */
+ p = lexGetDataFromBase64();
+ yylval.str = p;
+ return STRING;
+ }
+ else if (lexWithinMode(L_QUOTED_PRINTABLE)) {
+ p = lexGetQuotedPrintable();
+ }
+ else {
+#ifdef _SUPPORT_LINE_FOLDING
+ p = lexGet1Value();
+#else
+ p = lexGetStrUntil(";\n");
+#endif
+ }
+ if (p) {
+ DBG_(("db: STRING: '%s'\n", p));
+ yylval.str = p;
+ return STRING;
+ }
+ else return 0;
+ }
+ }
+ else {
+ /* normal mode */
+ while (1) {
+ int c = lexGetc();
+ switch(c) {
+ case ':': {
+ /* consume all line separator(s) adjacent to each other */
+ /* ignoring linesep immediately after colon. */
+ c = lexLookahead();
+ while (strchr("\n",c)) {
+ lexSkipLookahead();
+ c = lexLookahead();
+ ++mime_lineNum;
+ }
+ DBG_(("db: COLON\n"));
+ return COLON;
+ }
+ case ';':
+ DBG_(("db: SEMICOLON\n"));
+ return SEMICOLON;
+ case '=':
+ DBG_(("db: EQ\n"));
+ return EQ;
+ /* ignore whitespace in this mode */
+ case '\t':
+ case ' ': continue;
+ case '\n': {
+ ++mime_lineNum;
+ continue;
+ }
+ case EOF: return 0;
+ break;
+ default: {
+ lexPushLookaheadc(c);
+ if (isalnum(c)) {
+ char *t = lexGetWord();
+ yylval.str = t;
+ if (!qstricmp(t, "begin")) {
+ return match_begin_end_name(0);
+ }
+ else if (!qstricmp(t,"end")) {
+ return match_begin_end_name(1);
+ }
+ else {
+ DBG_(("db: ID '%s'\n", t));
+ return ID;
+ }
+ }
+ else {
+ /* unknow token */
+ return 0;
+ }
+ break;
+ }
+ }
+ }
+ }
+ return 0;
+ }
+
+
+/***************************************************************************/
+/*** Public Functions ****/
+/***************************************************************************/
+
+static VObject* Parse_MIMEHelper()
+ {
+ ObjStackTop = -1;
+ mime_numErrors = 0;
+ mime_lineNum = 1;
+ vObjList = 0;
+ curObj = 0;
+
+ if (yyparse() != 0)
+ return 0;
+
+ finiLex();
+ return vObjList;
+ }
+
+/*--------------------------------------------*/
+DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len)
+ {
+ initLex(input, len, 0);
+ return Parse_MIMEHelper();
+ }
+
+
+#if INCLUDEMFC
+
+DLLEXPORT(VObject*) Parse_MIME_FromFile(CFile *file)
+ {
+ unsigned long startPos;
+ VObject *result;
+
+ initLex(0,-1,file);
+ startPos = file->GetPosition();
+ if (!(result = Parse_MIMEHelper()))
+ file->Seek(startPos, CFile::begin);
+ return result;
+ }
+
+#else
+
+VObject* Parse_MIME_FromFile(FILE *file)
+ {
+ VObject *result;
+ long startPos;
+
+ initLex(0,(unsigned long)-1,file);
+ startPos = ftell(file);
+ if (!(result = Parse_MIMEHelper())) {
+ fseek(file,startPos,SEEK_SET);
+ }
+ return result;
+ }
+
+DLLEXPORT(VObject*) Parse_MIME_FromFileName(char *fname)
+ {
+ FILE *fp = fopen(fname,"r");
+ if (fp) {
+ VObject* o = Parse_MIME_FromFile(fp);
+ fclose(fp);
+ return o;
+ }
+ else {
+ char msg[80];
+ sprintf(msg, "can't open file '%s' for reading\n", fname);
+ mime_error_(msg);
+ return 0;
+ }
+ }
+
+#endif
+
+/*-------------------------------------*/
+
+static MimeErrorHandler mimeErrorHandler;
+
+DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler me)
+ {
+ mimeErrorHandler = me;
+ }
+
+void mime_error(char *s)
+ {
+ char msg[256];
+ if (mimeErrorHandler) {
+ sprintf(msg,"%s at line %d", s, mime_lineNum);
+ mimeErrorHandler(msg);
+ }
+ }
+
+void mime_error_(char *s)
+ {
+ if (mimeErrorHandler) {
+ mimeErrorHandler(s);
+ }
+ }
+
diff --git a/library/backend/vcc_yacc.cpp b/library/backend/vcc_yacc.cpp index cb24631..19a108f 100644 --- a/library/backend/vcc_yacc.cpp +++ b/library/backend/vcc_yacc.cpp @@ -1,423 +1,449 @@ #ifndef lint -static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; +/*static char yysccsid[] = "from: @(#)yaccpar 1.9 (Berkeley) 02/21/93";*/ +static char yyrcsid[] = "$Id$"; #endif #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 #define yyclearin (yychar=(-1)) #define yyerrok (yyerrflag=0) #define YYRECOVERING (yyerrflag!=0) -#define YYPREFIX "yy" -#line 1 "vcc.y" +#define yyparse vccparse +#define yylex vcclex +#define yyerror vccerror +#define yychar vccchar +#define yyval vccval +#define yylval vcclval +#define yydebug vccdebug +#define yynerrs vccnerrs +#define yyerrflag vccerrflag +#define yyss vccss +#define yyssp vccssp +#define yyvs vccvs +#define yyvsp vccvsp +#define yylhs vcclhs +#define yylen vcclen +#define yydefred vccdefred +#define yydgoto vccdgoto +#define yysindex vccsindex +#define yyrindex vccrindex +#define yygindex vccgindex +#define yytable vcctable +#define yycheck vcccheck +#define yyname vccname +#define yyrule vccrule +#define YYPREFIX "vcc" +#line 1 "backend/vcc.y" /***************************************************************************
(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International
Business Machines Corporation and Siemens Rolm Communications Inc.
For purposes of this license notice, the term Licensors shall mean,
collectively, Apple Computer, Inc., AT&T Corp., International
Business Machines Corporation and Siemens Rolm Communications Inc.
The term Licensor shall mean any of the Licensors.
Subject to acceptance of the following conditions, permission is hereby
granted by Licensors without the need for written agreement and without
license or royalty fees, to use, copy, modify and distribute this
software for any purpose.
The above copyright notice and the following four paragraphs must be
reproduced in all copies of this software and any software including
this software.
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE
ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR
MODIFICATIONS.
IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT,
INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.
The software is provided with RESTRICTED RIGHTS. Use, duplication, or
disclosure by the government are subject to restrictions set forth in
DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
***************************************************************************/
/*
* src: vcc.c
* doc: Parser for vCard and vCalendar. Note that this code is
* generated by a yacc parser generator. Generally it should not
* be edited by hand. The real source is vcc.y. The #line directives
* can be commented out here to make it easier to trace through
* in a debugger. However, if a bug is found it should
* be fixed in vcc.y and this file regenerated.
*/
/* debugging utilities */
#if __DEBUG
#define DBG_(x) printf x
#else
#define DBG_(x)
#endif
/**** External Functions ****/
/* assign local name to parser variables and functions so that
we can use more than one yacc based parser.
*/
+#if 0
#define yyparse mime_parse
#define yylex mime_lex
#define yyerror mime_error
#define yychar mime_char
/* #define p_yyval p_mime_val */
#undef yyval
#define yyval mime_yyval
/* #define p_yylval p_mime_lval */
#undef yylval
#define yylval mime_yylval
#define yydebug mime_debug
#define yynerrs mime_nerrs
#define yyerrflag mime_errflag
#define yyss mime_ss
#define yyssp mime_ssp
#define yyvs mime_vs
#define yyvsp mime_vsp
#define yylhs mime_lhs
#define yylen mime_len
#define yydefred mime_defred
#define yydgoto mime_dgoto
#define yysindex mime_sindex
#define yyrindex mime_rindex
#define yygindex mime_gindex
#define yytable mime_table
#define yycheck mime_check
#define yyname mime_name
#define yyrule mime_rule
#ifdef YYPREFIX
#undef YYPREFIX
#endif
#define YYPREFIX "mime_"
+#endif
#ifndef _NO_LINE_FOLDING
#define _SUPPORT_LINE_FOLDING 1
#endif
/* undef below if compile with MFC */
/* #define INCLUDEMFC 1 */
#if defined(WIN32) || defined(_WIN32)
#ifdef INCLUDEMFC
#include <afx.h>
#endif
#endif
#include <string.h>
#ifndef __MWERKS__
#include <stdlib.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
-#ifdef PALMTOPCENTER -#include <qpe/vobject_p.h>
-#include <qpe/qfiledirect_p.h> -#else +/*#ifdef PALMTOPCENTER
*/ +/*#include <qpe/vobject_p.h>
*/ +/*#else
*/ #include "vobject_p.h"
-#include "qfiledirect_p.h" -#endif +/*#endif
*/ /**** Types, Constants ****/
#define YYDEBUG 0 /* 1 to compile in some debugging code */
#define MAXTOKEN 256 /* maximum token (line) length */
-#define YYSTACKSIZE 100 /* ~unref ? -*/ +#define YYSTACKSIZE 100 /* ~unref ?
*/ #define MAXLEVEL 10 /* max # of nested objects parseable */
/* (includes outermost) */
/**** Global Variables ****/
int mime_lineNum, mime_numErrors; /* yyerror() can use these */
static VObject* vObjList;
static VObject *curProp;
static VObject *curObj;
static VObject* ObjStack[MAXLEVEL];
static int ObjStackTop;
/* A helpful utility for the rest of the app. */
#if __CPLUSPLUS__
extern "C" {
#endif
extern void yyerror(char *s);
#if __CPLUSPLUS__
};
#endif
int yyparse();
enum LexMode {
L_NORMAL,
L_VCARD,
L_VCAL,
L_VEVENT,
L_VTODO,
L_VALUES,
L_BASE64,
L_QUOTED_PRINTABLE
};
/**** Private Forward Declarations ****/
static int pushVObject(const char *prop);
static VObject* popVObject();
static void lexPopMode(int top);
static int lexWithinMode(enum LexMode mode);
static void lexPushMode(enum LexMode mode);
static void enterProps(const char *s);
static void enterAttr(const char *s1, const char *s2);
static void enterValues(const char *value);
+#define mime_error yyerror
+void mime_error(char *s);
void mime_error_(char *s);
-#line 185 "vcc.y" +#line 189 "backend/vcc.y" typedef union {
char *str;
VObject *vobj;
} YYSTYPE; -#line 196 "y.tab.c" +#line 225 "y.tab.c" #define EQ 257 #define COLON 258 #define DOT 259 #define SEMICOLON 260 #define SPACE 261 #define HTAB 262 #define LINESEP 263 #define NEWLINE 264 #define BEGIN_VCARD 265 #define END_VCARD 266 #define BEGIN_VCAL 267 #define END_VCAL 268 #define BEGIN_VEVENT 269 #define END_VEVENT 270 #define BEGIN_VTODO 271 #define END_VTODO 272 #define ID 273 #define STRING 274 #define YYERRCODE 256 -short yylhs[] = { -1, +short vcclhs[] = { -1, 0, 6, 6, 5, 5, 8, 3, 9, 3, 7, 7, 13, 10, 10, 15, 11, 11, 14, 14, 16, 17, 17, 1, 18, 12, 12, 2, 2, 20, 4, 21, 4, 19, 19, 22, 22, 22, 25, 23, 26, 23, 27, 24, 28, 24, }; -short yylen[] = { 2, +short vcclen[] = { 2, 1, 2, 1, 1, 1, 0, 4, 0, 3, 2, 1, 0, 5, 1, 0, 3, 1, 2, 1, 2, 1, 3, 1, 0, 4, 1, 1, 0, 0, 4, 0, 3, 2, 1, 1, 1, 1, 0, 4, 0, 3, 0, 4, 0, 3, }; -short yydefred[] = { 0, +short vccdefred[] = { 0, 0, 0, 0, 4, 5, 3, 0, 0, 0, 0, 0, 2, 14, 23, 0, 0, 11, 0, 9, 0, 0, 0, 0, 34, 35, 36, 32, 0, 7, 10, 12, 0, 0, 0, 0, 30, 33, 0, 0, 19, 0, 0, 41, 0, 45, 0, 20, 18, 27, 0, 0, 39, 43, 0, 24, 13, 22, 0, 25, }; -short yydgoto[] = { 3, +short vccdgoto[] = { 3, 15, 50, 4, 5, 6, 7, 22, 8, 9, 17, 18, 51, 41, 39, 28, 40, 47, 58, 23, 10, 11, 24, 25, 26, 32, 33, 34, 35, }; -short yysindex[] = { -262, +short vccsindex[] = { -262, 0, 0, 0, 0, 0, 0, -262, -252, -219, -249, -256, 0, 0, 0, 0, -227, 0, -242, 0, 0, 0, -252, -254, 0, 0, 0, 0, -208, 0, 0, 0, -252, -228, -252, -213, 0, 0, -212, -208, 0, -214, -233, 0, -224, 0, -195, 0, 0, 0, -197, -199, 0, 0, -212, 0, 0, 0, -214, 0, }; -short yyrindex[] = { 0, +short vccrindex[] = { 0, -222, -238, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, -215, 0, 0, 0, 0, -220, -218, -260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, 0, -250, 0, 0, 0, 0, -202, 0, 0, 0, -196, 0, 0, 0, 0, 0, 0, 0, -250, 0, }; -short yygindex[] = { 0, +short vccgindex[] = { 0, 3, 0, 0, 0, 61, 0, -7, 0, 0, -16, 0, 11, 0, 0, 0, 31, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, }; #define YYTABLESIZE 71 -short yytable[] = { 30, +short vcctable[] = { 30, 16, 13, 1, 13, 2, 30, 13, 37, 37, 28, 37, 27, 28, 36, 20, 31, 21, 29, 14, 20, 14, 21, 13, 14, 42, 30, 44, 30, 13, 31, 29, 13, 29, 6, 29, 38, 52, 42, 29, 14, 46, 43, 17, 8, 15, 14, 19, 53, 14, 40, 6, 38, 38, 44, 42, 21, 57, 21, 45, 49, 14, 54, 55, 56, 1, 16, 26, 12, 59, 48, 37, }; -short yycheck[] = { 16, +short vcccheck[] = { 16, 8, 256, 265, 256, 267, 22, 256, 268, 269, 260, 271, 268, 263, 268, 269, 258, 271, 256, 273, 269, 273, 271, 256, 273, 32, 42, 34, 44, 256, 268, 269, 256, 271, 256, 273, 256, 270, 256, 266, 273, 38, 270, 258, 266, 260, 273, 266, 272, 273, 270, 273, 260, 273, 272, 273, 258, 54, 260, 272, 274, 273, 257, 260, 263, 0, 258, 263, 7, 58, 39, 23, }; #define YYFINAL 3 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 274 #if YYDEBUG -char *yyname[] = { +char *vccname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"EQ","COLON","DOT","SEMICOLON", "SPACE","HTAB","LINESEP","NEWLINE","BEGIN_VCARD","END_VCARD","BEGIN_VCAL", "END_VCAL","BEGIN_VEVENT","END_VEVENT","BEGIN_VTODO","END_VTODO","ID","STRING", }; -char *yyrule[] = { +char *vccrule[] = { "$accept : mime", "mime : vobjects", "vobjects : vobjects vobject", "vobjects : vobject", "vobject : vcard", "vobject : vcal", "$$1 :", "vcard : BEGIN_VCARD $$1 items END_VCARD", "$$2 :", "vcard : BEGIN_VCARD $$2 END_VCARD", "items : items item", "items : item", "$$3 :", "item : prop COLON $$3 values LINESEP", "item : error", "$$4 :", "prop : name $$4 attr_params", "prop : name", "attr_params : attr_params attr_param", "attr_params : attr_param", "attr_param : SEMICOLON attr", "attr : name", "attr : name EQ name", "name : ID", "$$5 :", "values : value SEMICOLON $$5 values", "values : value", "value : STRING", "value :", "$$6 :", "vcal : BEGIN_VCAL $$6 calitems END_VCAL", "$$7 :", "vcal : BEGIN_VCAL $$7 END_VCAL", "calitems : calitems calitem", "calitems : calitem", "calitem : eventitem", "calitem : todoitem", "calitem : items", "$$8 :", "eventitem : BEGIN_VEVENT $$8 items END_VEVENT", "$$9 :", "eventitem : BEGIN_VEVENT $$9 END_VEVENT", "$$10 :", "todoitem : BEGIN_VTODO $$10 items END_VTODO", "$$11 :", "todoitem : BEGIN_VTODO $$11 END_VTODO", }; #endif #ifdef YYSTACKSIZE #undef YYMAXDEPTH #define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 500 #define YYMAXDEPTH 500 #endif #endif int yydebug; int yynerrs; int yyerrflag; int yychar; short *yyssp; YYSTYPE *yyvsp; YYSTYPE yyval; YYSTYPE yylval; short yyss[YYSTACKSIZE]; YYSTYPE yyvs[YYSTACKSIZE]; #define yystacksize YYSTACKSIZE -#line 378 "vcc.y" +#line 382 "backend/vcc.y" /*------------------------------------*/
static int pushVObject(const char *prop)
{
VObject *newObj;
if (ObjStackTop == MAXLEVEL)
return FALSE;
ObjStack[++ObjStackTop] = curObj;
if (curObj) {
newObj = addProp(curObj,prop);
curObj = newObj;
}
else
curObj = newVObject(prop);
return TRUE;
}
/*---------------------------------------*/
/* This pops the recently built vCard off the stack and returns it. */
static VObject* popVObject()
{
VObject *oldObj;
if (ObjStackTop < 0) {
yyerror("pop on empty Object Stack\n");
return 0;
}
oldObj = curObj;
curObj = ObjStack[ObjStackTop--];
return oldObj;
}
static void enterValues(const char *value)
{
if (fieldedProp && *fieldedProp) {
if (value) {
addPropValue(curProp,*fieldedProp,value);
}
/* else this field is empty, advance to next field */
fieldedProp++;
}
else {
if (value) {
@@ -466,97 +492,97 @@ struct LexBuf { #else
FILE *inputFile;
#endif
char *inputString;
unsigned long curPos;
unsigned long inputLen;
/* lookahead buffer */
/* -- lookahead buffer is short instead of char so that EOF
/ can be represented correctly.
*/
unsigned long len;
short buf[MAX_LEX_LOOKAHEAD];
unsigned long getPtr;
/* context stack */
unsigned long lexModeStackTop;
enum LexMode lexModeStack[MAX_LEX_MODE_STACK_SIZE];
/* token buffer */
unsigned long maxToken;
char *strs;
unsigned long strsLen;
} lexBuf;
static void lexPushMode(enum LexMode mode)
{
if (lexBuf.lexModeStackTop == (MAX_LEX_MODE_STACK_SIZE-1))
yyerror("lexical context stack overflow");
else {
lexBuf.lexModeStack[++lexBuf.lexModeStackTop] = mode;
}
}
static void lexPopMode(int top)
{
/* special case of pop for ease of error recovery -- this
version will never underflow */
if (top)
lexBuf.lexModeStackTop = 0;
else
if (lexBuf.lexModeStackTop > 0) lexBuf.lexModeStackTop--;
}
static int lexWithinMode(enum LexMode mode) {
unsigned long i;
for (i=0;i<lexBuf.lexModeStackTop;i++)
if (mode == lexBuf.lexModeStack[i]) return 1;
return 0;
}
-static char lexGetc_()
+static int lexGetc_()
{
/* get next char from input, no buffering. */
if (lexBuf.curPos == lexBuf.inputLen)
return EOF;
else if (lexBuf.inputString)
return *(lexBuf.inputString + lexBuf.curPos++);
else {
#ifdef INCLUDEMFC
char result;
return lexBuf.inputFile->Read(&result, 1) == 1 ? result : EOF;
#else
return fgetc(lexBuf.inputFile);
#endif
}
}
static int lexGeta()
{
++lexBuf.len;
return (lexBuf.buf[lexBuf.getPtr] = lexGetc_());
}
static int lexGeta_(int i)
{
++lexBuf.len;
return (lexBuf.buf[(lexBuf.getPtr+i)%MAX_LEX_LOOKAHEAD] = lexGetc_());
}
static void lexSkipLookahead() {
if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) {
/* don't skip EOF. */
lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD;
lexBuf.len--;
}
}
static int lexLookahead() {
int c = (lexBuf.len)?
lexBuf.buf[lexBuf.getPtr]:
lexGeta();
/* do the \r\n -> \n or \r -> \n translation here */
if (c == '\r') {
int a = (lexBuf.len>1)?
lexBuf.buf[(lexBuf.getPtr+1)%MAX_LEX_LOOKAHEAD]:
lexGeta_(1);
if (a == '\n') {
lexSkipLookahead();
}
@@ -880,145 +906,145 @@ static char * lexGetDataFromBase64() }
}
if (bytes) {
memcpy(bytes + bytesLen, outBytes, numOut);
bytesLen += numOut;
}
trip = 0;
quadIx = 0;
}
}
} /* while */
DBG_(("db: bytesLen = %d\n", bytesLen));
/* kludge: all this won't be necessary if we have tree form
representation */
if (bytes) {
setValueWithSize(curProp,bytes,(unsigned int)bytesLen);
free(bytes);
}
else if (oldBytes) {
setValueWithSize(curProp,oldBytes,(unsigned int)bytesLen);
free(oldBytes);
}
return 0;
}
static int match_begin_end_name(int end) {
int token;
lexSkipWhite();
if (lexLookahead() != ':') return ID;
lexSkipLookahead();
lexSkipWhite();
token = match_begin_name(end);
if (token == ID) {
lexPushLookaheadc(':');
DBG_(("db: ID '%s'\n", yylval.str));
return ID;
}
else if (token != 0) {
lexSkipLookaheadWord();
deleteStr(yylval.str);
DBG_(("db: begin/end %d\n", token));
return token;
}
return 0;
}
static char* lexGetQuotedPrintable()
{
- char cur;
+ int cur;
lexClearToken();
do {
cur = lexGetc();
switch (cur) {
case '=': {
int c = 0;
int next[2];
int i;
for (i = 0; i < 2; i++) {
next[i] = lexGetc();
if (next[i] >= '0' && next[i] <= '9')
c = c * 16 + next[i] - '0';
else if (next[i] >= 'A' && next[i] <= 'F')
c = c * 16 + next[i] - 'A' + 10;
else
break;
}
if (i == 0) {
/* single '=' follow by LINESEP is continuation sign? */
if (next[0] == '\n') {
++mime_lineNum;
}
else {
lexPushLookaheadc('=');
goto EndString;
}
}
else if (i == 1) {
lexPushLookaheadc(next[1]);
lexPushLookaheadc(next[0]);
lexAppendc('=');
} else {
lexAppendc(c);
}
break;
} /* '=' */
case '\n': {
lexPushLookaheadc('\n');
goto EndString;
}
- case (char)EOF:
+ case (int)EOF:
break;
default:
lexAppendc(cur);
break;
} /* switch */
- } while (cur != (char)EOF);
+ } while (cur != (int)EOF);
EndString:
lexAppendc(0);
return lexStr();
} /* LexQuotedPrintable */
static int yylex() {
int lexmode = LEXMODE();
if (lexmode == L_VALUES) {
int c = lexGetc();
if (c == ';') {
DBG_(("db: SEMICOLON\n"));
lexPushLookaheadc(c);
handleMoreRFC822LineBreak(c);
lexSkipLookahead();
return SEMICOLON;
}
else if (strchr("\n",c)) {
++mime_lineNum;
/* consume all line separator(s) adjacent to each other */
c = lexLookahead();
while (strchr("\n",c)) {
lexSkipLookahead();
c = lexLookahead();
++mime_lineNum;
}
DBG_(("db: LINESEP\n"));
return LINESEP;
}
else {
char *p = 0;
lexPushLookaheadc(c);
if (lexWithinMode(L_BASE64)) {
/* get each char and convert to bin on the fly... */
p = lexGetDataFromBase64();
yylval.str = p;
return STRING;
}
else if (lexWithinMode(L_QUOTED_PRINTABLE)) {
p = lexGetQuotedPrintable();
}
else {
#ifdef _SUPPORT_LINE_FOLDING
p = lexGet1Value();
#else
p = lexGetStrUntil(";\n");
#endif
@@ -1105,433 +1131,438 @@ static VObject* Parse_MIMEHelper() curObj = 0;
if (yyparse() != 0)
return 0;
finiLex();
return vObjList;
}
/*--------------------------------------------*/
DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len)
{
initLex(input, len, 0);
return Parse_MIMEHelper();
}
#if INCLUDEMFC
DLLEXPORT(VObject*) Parse_MIME_FromFile(CFile *file)
{
unsigned long startPos;
VObject *result;
initLex(0,-1,file);
startPos = file->GetPosition();
if (!(result = Parse_MIMEHelper()))
file->Seek(startPos, CFile::begin);
return result;
}
#else
VObject* Parse_MIME_FromFile(FILE *file)
{
VObject *result;
long startPos;
initLex(0,(unsigned long)-1,file);
startPos = ftell(file);
if (!(result = Parse_MIMEHelper())) {
fseek(file,startPos,SEEK_SET);
}
return result;
}
DLLEXPORT(VObject*) Parse_MIME_FromFileName(char *fname)
{
- QFileDirect f( fname );
- if ( !f.open( IO_ReadOnly ) ) {
- qWarning("Unable to open mime for reading %s", fname);
- return 0;
+ FILE *fp = fopen(fname,"r");
+ if (fp) {
+ VObject* o = Parse_MIME_FromFile(fp);
+ fclose(fp);
+ return o;
+ }
+ else {
+ char msg[80];
+ sprintf(msg, "can't open file '%s' for reading\n", fname);
+ mime_error_(msg);
+ return 0;
}
-
- return Parse_MIME_FromFile( f.directHandle() );
}
#endif
/*-------------------------------------*/
static MimeErrorHandler mimeErrorHandler;
DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler me)
{
mimeErrorHandler = me;
}
void mime_error(char *s)
{
char msg[256];
if (mimeErrorHandler) {
sprintf(msg,"%s at line %d", s, mime_lineNum);
mimeErrorHandler(msg);
}
}
void mime_error_(char *s)
{
if (mimeErrorHandler) {
mimeErrorHandler(s);
}
}
-#line 1192 "y.tab.c" +#line 1221 "y.tab.c" #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab int +#if defined(__STDC__) +yyparse(void) +#else yyparse() +#endif { register int yym, yyn, yystate; #if YYDEBUG register char *yys; extern char *getenv(); if (yys = getenv("YYDEBUG")) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } #endif yynerrs = 0; yyerrflag = 0; yychar = (-1); yyssp = yyss; yyvsp = yyvs; *yyssp = yystate = 0; yyloop: - if (yyn = yydefred[yystate]) goto yyreduce; + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif if (yyssp >= yyss + yystacksize - 1) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; yychar = (-1); if (yyerrflag > 0) --yyerrflag; goto yyloop; } if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag) goto yyinrecovery; -#ifdef lint - goto yynewerror; -#endif -yynewerror: yyerror("syntax error"); #ifdef lint goto yyerrlab; #endif yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); #endif if (yyssp >= yyss + yystacksize - 1) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; goto yyloop; } else { #if YYDEBUG if (yydebug) printf("%sdebug: error recovery discarding state %d\n", YYPREFIX, *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; --yyvsp; } } } else { if (yychar == 0) goto yyabort; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, error recovery discards token %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif yychar = (-1); goto yyloop; } yyreduce: #if YYDEBUG if (yydebug) printf("%sdebug: state %d, reducing by rule %d (%s)\n", YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; yyval = yyvsp[1-yym]; switch (yyn) { case 2: -#line 217 "vcc.y" +#line 221 "backend/vcc.y" { addList(&vObjList, yyvsp[0].vobj); curObj = 0; } break; case 3: -#line 219 "vcc.y" +#line 223 "backend/vcc.y" { addList(&vObjList, yyvsp[0].vobj); curObj = 0; } break; case 6: -#line 228 "vcc.y" +#line 232 "backend/vcc.y" {
lexPushMode(L_VCARD);
if (!pushVObject(VCCardProp)) YYERROR;
} break; case 7: -#line 233 "vcc.y" +#line 237 "backend/vcc.y" {
lexPopMode(0);
yyval.vobj = popVObject();
} break; case 8: -#line 238 "vcc.y" +#line 242 "backend/vcc.y" {
lexPushMode(L_VCARD);
if (!pushVObject(VCCardProp)) YYERROR;
} break; case 9: -#line 243 "vcc.y" +#line 247 "backend/vcc.y" {
lexPopMode(0);
yyval.vobj = popVObject();
} break; case 12: -#line 254 "vcc.y" +#line 258 "backend/vcc.y" {
lexPushMode(L_VALUES);
} break; case 13: -#line 258 "vcc.y" +#line 262 "backend/vcc.y" {
if (lexWithinMode(L_BASE64) || lexWithinMode(L_QUOTED_PRINTABLE))
lexPopMode(0);
lexPopMode(0);
} break; case 15: -#line 267 "vcc.y" +#line 271 "backend/vcc.y" {
enterProps(yyvsp[0].str);
} break; case 17: -#line 272 "vcc.y" +#line 276 "backend/vcc.y" {
enterProps(yyvsp[0].str);
} break; case 21: -#line 285 "vcc.y" +#line 289 "backend/vcc.y" {
enterAttr(yyvsp[0].str,0);
} break; case 22: -#line 289 "vcc.y" +#line 293 "backend/vcc.y" {
enterAttr(yyvsp[-2].str,yyvsp[0].str);
} break; case 24: -#line 298 "vcc.y" +#line 302 "backend/vcc.y" { enterValues(yyvsp[-1].str); } break; case 26: -#line 300 "vcc.y" +#line 304 "backend/vcc.y" { enterValues(yyvsp[0].str); } break; case 28: -#line 305 "vcc.y" +#line 309 "backend/vcc.y" { yyval.str = 0; } break; case 29: -#line 310 "vcc.y" +#line 314 "backend/vcc.y" { if (!pushVObject(VCCalProp)) YYERROR; } break; case 30: -#line 313 "vcc.y" +#line 317 "backend/vcc.y" { yyval.vobj = popVObject(); } break; case 31: -#line 315 "vcc.y" +#line 319 "backend/vcc.y" { if (!pushVObject(VCCalProp)) YYERROR; } break; case 32: -#line 317 "vcc.y" +#line 321 "backend/vcc.y" { yyval.vobj = popVObject(); } break; case 38: -#line 332 "vcc.y" +#line 336 "backend/vcc.y" {
lexPushMode(L_VEVENT);
if (!pushVObject(VCEventProp)) YYERROR;
} break; case 39: -#line 338 "vcc.y" +#line 342 "backend/vcc.y" {
lexPopMode(0);
popVObject();
} break; case 40: -#line 343 "vcc.y" +#line 347 "backend/vcc.y" {
lexPushMode(L_VEVENT);
if (!pushVObject(VCEventProp)) YYERROR;
} break; case 41: -#line 348 "vcc.y" +#line 352 "backend/vcc.y" {
lexPopMode(0);
popVObject();
} break; case 42: -#line 356 "vcc.y" +#line 360 "backend/vcc.y" {
lexPushMode(L_VTODO);
if (!pushVObject(VCTodoProp)) YYERROR;
} break; case 43: -#line 362 "vcc.y" +#line 366 "backend/vcc.y" {
lexPopMode(0);
popVObject();
} break; case 44: -#line 367 "vcc.y" +#line 371 "backend/vcc.y" {
lexPushMode(L_VTODO);
if (!pushVObject(VCTodoProp)) YYERROR;
} break; case 45: -#line 372 "vcc.y" +#line 376 "backend/vcc.y" {
lexPopMode(0);
popVObject();
} break; -#line 1492 "y.tab.c" +#line 1521 "y.tab.c" } yyssp -= yym; yystate = *yyssp; yyvsp -= yym; yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state 0 to\ state %d\n", YYPREFIX, YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; *++yyvsp = yyval; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == 0) goto yyaccept; goto yyloop; } if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", YYPREFIX, *yyssp, yystate); #endif if (yyssp >= yyss + yystacksize - 1) { goto yyoverflow; } *++yyssp = yystate; *++yyvsp = yyval; diff --git a/library/backend/vobject.cpp b/library/backend/vobject.cpp index 9c2ba3b..e6f6b78 100644 --- a/library/backend/vobject.cpp +++ b/library/backend/vobject.cpp @@ -1,1219 +1,1315 @@ -/***************************************************************************
-(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-
-For purposes of this license notice, the term Licensors shall mean,
-collectively, Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-The term Licensor shall mean any of the Licensors.
-
-Subject to acceptance of the following conditions, permission is hereby
-granted by Licensors without the need for written agreement and without
-license or royalty fees, to use, copy, modify and distribute this
-software for any purpose.
-
-The above copyright notice and the following four paragraphs must be
-reproduced in all copies of this software and any software including
-this software.
-
-THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE
-ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR
-MODIFICATIONS.
-
-IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT,
-INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
-OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED,
-INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.
-
-The software is provided with RESTRICTED RIGHTS. Use, duplication, or
-disclosure by the government are subject to restrictions set forth in
-DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
-
-***************************************************************************/
-
-/*
- * src: vobject.c
- * doc: vobject and APIs to construct vobject, APIs pretty print
- * vobject, and convert a vobject into its textual representation.
- */
-
-#ifndef MWERKS
-#include <malloc.h>
-#endif
-
-#include "vobject_p.h"
-#include "qfiledirect_p.h"
-#include <string.h>
-#include <stdio.h>
-#include <fcntl.h>
-//#include <io.h>
-
-
-#define NAME_OF(o) o->id
-#define VALUE_TYPE(o) o->valType
-#define STRINGZ_VALUE_OF(o) o->val.strs
-#define INTEGER_VALUE_OF(o) o->val.i
-#define LONG_VALUE_OF(o) o->val.l
-#define ANY_VALUE_OF(o) o->val.any
-#define VOBJECT_VALUE_OF(o) o->val.vobj
-
-typedef union ValueItem {
- const char *strs;
- unsigned int i;
- unsigned long l;
- void *any;
- VObject *vobj;
- } ValueItem;
-
-struct VObject {
- VObject *next;
- const char *id;
- VObject *prop;
- unsigned short valType;
- ValueItem val;
- };
-
-typedef struct StrItem StrItem;
-
-struct StrItem {
- StrItem *next;
- const char *s;
- unsigned int refCnt;
- };
-
-const char** fieldedProp;
-
-
-
-/*----------------------------------------------------------------------
- The following functions involve with memory allocation:
- newVObject
- deleteVObject
- dupStr
- deleteStr
- newStrItem
- deleteStrItem
- ----------------------------------------------------------------------*/
-
-DLLEXPORT(VObject*) newVObject_(const char *id)
-{
- VObject *p = (VObject*)malloc(sizeof(VObject));
- p->next = 0;
- p->id = id;
- p->prop = 0;
- VALUE_TYPE(p) = 0;
- ANY_VALUE_OF(p) = 0;
- return p;
-}
-
-DLLEXPORT(VObject*) newVObject(const char *id)
-{
- return newVObject_(lookupStr(id));
-}
-
-DLLEXPORT(void) deleteVObject(VObject *p)
-{
- unUseStr(p->id);
- free(p);
-}
-
-DLLEXPORT(char*) dupStr(const char *s, unsigned int size)
-{
- char *t;
- if (size == 0) {
- size = strlen(s);
- }
- t = (char*)malloc(size+1);
- if (t) {
- memcpy(t,s,size);
- t[size] = 0;
- return t;
- }
- else {
- return (char*)0;
- }
-}
-
-DLLEXPORT(void) deleteStr(const char *p)
-{
- if (p) free((void*)p);
-}
-
-
-static StrItem* newStrItem(const char *s, StrItem *next)
-{
- StrItem *p = (StrItem*)malloc(sizeof(StrItem));
- p->next = next;
- p->s = s;
- p->refCnt = 1;
- return p;
-}
-
-static void deleteStrItem(StrItem *p)
-{
- free((void*)p);
-}
-
-
-/*----------------------------------------------------------------------
- The following function provide accesses to VObject's value.
- ----------------------------------------------------------------------*/
-
-DLLEXPORT(const char*) vObjectName(VObject *o)
-{
- return NAME_OF(o);
-}
-
-DLLEXPORT(void) setVObjectName(VObject *o, const char* id)
-{
- NAME_OF(o) = id;
-}
-
-DLLEXPORT(const char*) vObjectStringZValue(VObject *o)
-{
- return STRINGZ_VALUE_OF(o);
-}
-
-DLLEXPORT(void) setVObjectStringZValue(VObject *o, const char *s)
-{
- STRINGZ_VALUE_OF(o) = dupStr(s,0);
- VALUE_TYPE(o) = VCVT_STRINGZ;
-}
-
-DLLEXPORT(void) setVObjectStringZValue_(VObject *o, const char *s)
-{
- STRINGZ_VALUE_OF(o) = s;
- VALUE_TYPE(o) = VCVT_STRINGZ;
-}
-
-DLLEXPORT(unsigned int) vObjectIntegerValue(VObject *o)
-{
- return INTEGER_VALUE_OF(o);
-}
-
-DLLEXPORT(void) setVObjectIntegerValue(VObject *o, unsigned int i)
-{
- INTEGER_VALUE_OF(o) = i;
- VALUE_TYPE(o) = VCVT_UINT;
-}
-
-DLLEXPORT(unsigned long) vObjectLongValue(VObject *o)
-{
- return LONG_VALUE_OF(o);
-}
-
-DLLEXPORT(void) setVObjectLongValue(VObject *o, unsigned long l)
-{
- LONG_VALUE_OF(o) = l;
- VALUE_TYPE(o) = VCVT_ULONG;
-}
-
-DLLEXPORT(void*) vObjectAnyValue(VObject *o)
-{
- return ANY_VALUE_OF(o);
-}
-
-DLLEXPORT(void) setVObjectAnyValue(VObject *o, void *t)
-{
- ANY_VALUE_OF(o) = t;
- VALUE_TYPE(o) = VCVT_RAW;
-}
-
-DLLEXPORT(VObject*) vObjectVObjectValue(VObject *o)
-{
- return VOBJECT_VALUE_OF(o);
-}
-
-DLLEXPORT(void) setVObjectVObjectValue(VObject *o, VObject *p)
-{
- VOBJECT_VALUE_OF(o) = p;
- VALUE_TYPE(o) = VCVT_VOBJECT;
-}
-
-DLLEXPORT(int) vObjectValueType(VObject *o)
-{
- return VALUE_TYPE(o);
-}
-
-
-/*----------------------------------------------------------------------
- The following functions can be used to build VObject.
- ----------------------------------------------------------------------*/
-
-DLLEXPORT(VObject*) addVObjectProp(VObject *o, VObject *p)
-{
- /* circular link list pointed to tail */
- /*
- o {next,id,prop,val}
- V
- pn {next,id,prop,val}
- V
- ...
- p1 {next,id,prop,val}
- V
- pn
- -->
- o {next,id,prop,val}
- V
- pn {next,id,prop,val}
- V
- p {next,id,prop,val}
- ...
- p1 {next,id,prop,val}
- V
- pn
- */
-
- VObject *tail = o->prop;
- if (tail) {
- p->next = tail->next;
- o->prop = tail->next = p;
- }
- else {
- o->prop = p->next = p;
- }
- return p;
-}
-
-DLLEXPORT(VObject*) addProp(VObject *o, const char *id)
-{
- return addVObjectProp(o,newVObject(id));
-}
-
-DLLEXPORT(VObject*) addProp_(VObject *o, const char *id)
-{
- return addVObjectProp(o,newVObject_(id));
-}
-
-DLLEXPORT(void) addList(VObject **o, VObject *p)
-{
- p->next = 0;
- if (*o == 0) {
- *o = p;
- }
- else {
- VObject *t = *o;
- while (t->next) {
- t = t->next;
- }
- t->next = p;
- }
-}
-
-DLLEXPORT(VObject*) nextVObjectInList(VObject *o)
-{
- return o->next;
-}
-
-DLLEXPORT(VObject*) setValueWithSize_(VObject *prop, void *val, unsigned int size)
-{
- VObject *sizeProp;
- setVObjectAnyValue(prop, val);
- sizeProp = addProp(prop,VCDataSizeProp);
- setVObjectLongValue(sizeProp, size);
- return prop;
-}
-
-DLLEXPORT(VObject*) setValueWithSize(VObject *prop, void *val, unsigned int size)
-{
- void *p = dupStr((const char *)val,size);
- return setValueWithSize_(prop,p,p?size:0);
-}
-
-DLLEXPORT(void) initPropIterator(VObjectIterator *i, VObject *o)
-{
- i->start = o->prop;
- i->next = 0;
-}
-
-DLLEXPORT(void) initVObjectIterator(VObjectIterator *i, VObject *o)
-{
- i->start = o->next;
- i->next = 0;
-}
-
-DLLEXPORT(int) moreIteration(VObjectIterator *i)
-{
- return (i->start && (i->next==0 || i->next!=i->start));
-}
-
-DLLEXPORT(VObject*) nextVObject(VObjectIterator *i)
-{
- if (i->start && i->next != i->start) {
- if (i->next == 0) {
- i->next = i->start->next;
- return i->next;
- }
- else {
- i->next = i->next->next;
- return i->next;
- }
- }
- else return (VObject*)0;
-}
-
-DLLEXPORT(VObject*) isAPropertyOf(VObject *o, const char *id)
-{
- VObjectIterator i;
- initPropIterator(&i,o);
- while (moreIteration(&i)) {
- VObject *each = nextVObject(&i);
- if (!qstricmp(id,each->id))
- return each;
- }
- return (VObject*)0;
-}
-
-DLLEXPORT(VObject*) addGroup(VObject *o, const char *g)
-{
- /*
- a.b.c
- -->
- prop(c)
- prop(VCGrouping=b)
- prop(VCGrouping=a)
- */
- char *dot = strrchr(g,'.');
- if (dot) {
- VObject *p, *t;
- char *gs, *n = dot+1;
- gs = dupStr(g,0); /* so we can write to it. */
- /* used to be
- * t = p = addProp_(o,lookupProp_(n));
- */
- t = p = addProp_(o,lookupProp(n));
- dot = strrchr(gs,'.');
- *dot = 0;
- do {
- dot = strrchr(gs,'.');
- if (dot) {
- n = dot+1;
- *dot=0;
- }
- else
- n = gs;
- /* property(VCGroupingProp=n);
- * and the value may have VCGrouping property
- */
- t = addProp(t,VCGroupingProp);
- setVObjectStringZValue(t,lookupProp_(n));
- } while (n != gs);
- deleteStr(gs);
- return p;
- }
- else
- return addProp_(o,lookupProp(g));
-}
-
-DLLEXPORT(VObject*) addPropValue(VObject *o, const char *p, const char *v)
-{
- VObject *prop;
- prop = addProp(o,p);
- setVObjectStringZValue_(prop, strdup( v ) );
- return prop;
-}
-
-DLLEXPORT(VObject*) addPropSizedValue_(VObject *o, const char *p, const char *v,
- unsigned int size)
-{
- VObject *prop;
- prop = addProp(o,p);
- setValueWithSize_(prop, (void*)v, size);
- return prop;
-}
-
-DLLEXPORT(VObject*) addPropSizedValue(VObject *o, const char *p, const char *v,
- unsigned int size)
-{
- return addPropSizedValue_(o,p,dupStr(v,size),size);
-}
-
-
-DLLEXPORT(void) cleanVObject(VObject *o)
-{
- if (o == 0) return;
- if (o->prop) {
- /* destroy time: cannot use the iterator here.
- Have to break the cycle in the circular link
- list and turns it into regular NULL-terminated
- list -- since at some point of destruction,
- the reference entry for the iterator to work
- will not longer be valid.
- */
- VObject *p;
- p = o->prop->next;
- o->prop->next = 0;
- do {
- VObject *t = p->next;
- cleanVObject(p);
- p = t;
- } while (p);
- }
- switch (VALUE_TYPE(o)) {
- case VCVT_STRINGZ:
- case VCVT_RAW:
- // assume they are all allocated by malloc.
- free((char*)STRINGZ_VALUE_OF(o));
- break;
- case VCVT_VOBJECT:
- cleanVObject(VOBJECT_VALUE_OF(o));
- break;
- }
- deleteVObject(o);
-}
-
-DLLEXPORT(void) cleanVObjects(VObject *list)
-{
- while (list) {
- VObject *t = list;
- list = nextVObjectInList(list);
- cleanVObject(t);
- }
-}
-
-/*----------------------------------------------------------------------
- The following is a String Table Facilities.
- ----------------------------------------------------------------------*/
-
-#define STRTBLSIZE 255
-
-static StrItem *strTbl[STRTBLSIZE];
-
-static unsigned int hashStr(const char *s)
-{
- unsigned int h = 0;
- int i;
- for (i=0;s[i];i++) {
- h += s[i]*i;
- }
- return h % STRTBLSIZE;
-}
-
-DLLEXPORT(const char*) lookupStr(const char *s)
-{
- StrItem *t;
- unsigned int h = hashStr(s);
- if ((t = strTbl[h]) != 0) {
- do {
- if (qstricmp(t->s,s) == 0) {
- t->refCnt++;
- return t->s;
- }
- t = t->next;
- } while (t);
- }
- s = dupStr(s,0);
- strTbl[h] = newStrItem(s,strTbl[h]);
- return s;
-}
-
-DLLEXPORT(void) unUseStr(const char *s)
-{
- StrItem *t, *p;
- unsigned int h = hashStr(s);
- if ((t = strTbl[h]) != 0) {
- p = t;
- do {
- if (qstricmp(t->s,s) == 0) {
- t->refCnt--;
- if (t->refCnt == 0) {
- if (p == strTbl[h]) {
- strTbl[h] = t->next;
- }
- else {
- p->next = t->next;
- }
- deleteStr(t->s);
- deleteStrItem(t);
- return;
- }
- }
- p = t;
- t = t->next;
- } while (t);
- }
-}
-
-DLLEXPORT(void) cleanStrTbl()
-{
- int i;
- for (i=0; i<STRTBLSIZE;i++) {
- StrItem *t = strTbl[i];
- while (t) {
- StrItem *p;
- deleteStr(t->s);
- p = t;
- t = t->next;
- deleteStrItem(p);
- } while (t);
- strTbl[i] = 0;
- }
-}
-
-
-struct PreDefProp {
- const char *name;
- const char *alias;
- const char** fields;
- unsigned int flags;
- };
-
-/* flags in PreDefProp */
-#define PD_BEGIN 0x1
-#define PD_INTERNAL 0x2
-
-static const char *adrFields[] = {
- VCPostalBoxProp,
- VCExtAddressProp,
- VCStreetAddressProp,
- VCCityProp,
- VCRegionProp,
- VCPostalCodeProp,
- VCCountryNameProp,
- 0
-};
-
-static const char *nameFields[] = {
- VCFamilyNameProp,
- VCGivenNameProp,
- VCAdditionalNamesProp,
- VCNamePrefixesProp,
- VCNameSuffixesProp,
- NULL
- };
-
-static const char *orgFields[] = {
- VCOrgNameProp,
- VCOrgUnitProp,
- VCOrgUnit2Prop,
- VCOrgUnit3Prop,
- VCOrgUnit4Prop,
- NULL
- };
-
-static const char *AAlarmFields[] = {
- VCRunTimeProp,
- VCSnoozeTimeProp,
- VCRepeatCountProp,
- VCAudioContentProp,
- 0
- };
-
-/* ExDate -- has unamed fields */
-/* RDate -- has unamed fields */
-
-static const char *DAlarmFields[] = {
- VCRunTimeProp,
- VCSnoozeTimeProp,
- VCRepeatCountProp,
- VCDisplayStringProp,
- 0
- };
-
-static const char *MAlarmFields[] = {
- VCRunTimeProp,
- VCSnoozeTimeProp,
- VCRepeatCountProp,
- VCEmailAddressProp,
- VCNoteProp,
- 0
- };
-
-static const char *PAlarmFields[] = {
- VCRunTimeProp,
- VCSnoozeTimeProp,
- VCRepeatCountProp,
- VCProcedureNameProp,
- 0
- };
-
-static struct PreDefProp propNames[] = {
- { VC7bitProp, 0, 0, 0 },
- { VC8bitProp, 0, 0, 0 },
- { VCAAlarmProp, 0, AAlarmFields, 0 },
- { VCAdditionalNamesProp, 0, 0, 0 },
- { VCAdrProp, 0, adrFields, 0 },
- { VCAgentProp, 0, 0, 0 },
- { VCAIFFProp, 0, 0, 0 },
- { VCAOLProp, 0, 0, 0 },
- { VCAppleLinkProp, 0, 0, 0 },
- { VCAttachProp, 0, 0, 0 },
- { VCAttendeeProp, 0, 0, 0 },
- { VCATTMailProp, 0, 0, 0 },
- { VCAudioContentProp, 0, 0, 0 },
- { VCAVIProp, 0, 0, 0 },
- { VCBase64Prop, 0, 0, 0 },
- { VCBBSProp, 0, 0, 0 },
- { VCBirthDateProp, 0, 0, 0 },
- { VCBMPProp, 0, 0, 0 },
- { VCBodyProp, 0, 0, 0 },
- { VCBusinessRoleProp, 0, 0, 0 },
- { VCCalProp, 0, 0, PD_BEGIN },
- { VCCaptionProp, 0, 0, 0 },
- { VCCardProp, 0, 0, PD_BEGIN },
- { VCCarProp, 0, 0, 0 },
- { VCCategoriesProp, 0, 0, 0 },
- { VCCellularProp, 0, 0, 0 },
- { VCCGMProp, 0, 0, 0 },
- { VCCharSetProp, 0, 0, 0 },
- { VCCIDProp, VCContentIDProp, 0, 0 },
- { VCCISProp, 0, 0, 0 },
- { VCCityProp, 0, 0, 0 },
- { VCClassProp, 0, 0, 0 },
- { VCCommentProp, 0, 0, 0 },
- { VCCompletedProp, 0, 0, 0 },
- { VCContentIDProp, 0, 0, 0 },
- { VCCountryNameProp, 0, 0, 0 },
- { VCDAlarmProp, 0, DAlarmFields, 0 },
- { VCDataSizeProp, 0, 0, PD_INTERNAL },
- { VCDayLightProp, 0, 0, 0 },
- { VCDCreatedProp, 0, 0, 0 },
- { VCDeliveryLabelProp, 0, 0, 0 },
- { VCDescriptionProp, 0, 0, 0 },
- { VCDIBProp, 0, 0, 0 },
- { VCDisplayStringProp, 0, 0, 0 },
- { VCDomesticProp, 0, 0, 0 },
- { VCDTendProp, 0, 0, 0 },
- { VCDTstartProp, 0, 0, 0 },
- { VCDueProp, 0, 0, 0 },
- { VCEmailAddressProp, 0, 0, 0 },
- { VCEncodingProp, 0, 0, 0 },
- { VCEndProp, 0, 0, 0 },
- { VCEventProp, 0, 0, PD_BEGIN },
- { VCEWorldProp, 0, 0, 0 },
- { VCExNumProp, 0, 0, 0 },
- { VCExpDateProp, 0, 0, 0 },
- { VCExpectProp, 0, 0, 0 },
- { VCExtAddressProp, 0, 0, 0 },
- { VCFamilyNameProp, 0, 0, 0 },
- { VCFaxProp, 0, 0, 0 },
- { VCFullNameProp, 0, 0, 0 },
- { VCGeoLocationProp, 0, 0, 0 },
- { VCGeoProp, 0, 0, 0 },
- { VCGIFProp, 0, 0, 0 },
- { VCGivenNameProp, 0, 0, 0 },
- { VCGroupingProp, 0, 0, 0 },
- { VCHomeProp, 0, 0, 0 },
- { VCIBMMailProp, 0, 0, 0 },
- { VCInlineProp, 0, 0, 0 },
- { VCInternationalProp, 0, 0, 0 },
- { VCInternetProp, 0, 0, 0 },
- { VCISDNProp, 0, 0, 0 },
- { VCJPEGProp, 0, 0, 0 },
- { VCLanguageProp, 0, 0, 0 },
- { VCLastModifiedProp, 0, 0, 0 },
- { VCLastRevisedProp, 0, 0, 0 },
- { VCLocationProp, 0, 0, 0 },
- { VCLogoProp, 0, 0, 0 },
- { VCMailerProp, 0, 0, 0 },
- { VCMAlarmProp, 0, MAlarmFields, 0 },
- { VCMCIMailProp, 0, 0, 0 },
- { VCMessageProp, 0, 0, 0 },
- { VCMETProp, 0, 0, 0 },
- { VCModemProp, 0, 0, 0 },
- { VCMPEG2Prop, 0, 0, 0 },
- { VCMPEGProp, 0, 0, 0 },
- { VCMSNProp, 0, 0, 0 },
- { VCNamePrefixesProp, 0, 0, 0 },
- { VCNameProp, 0, nameFields, 0 },
- { VCNameSuffixesProp, 0, 0, 0 },
- { VCNoteProp, 0, 0, 0 },
- { VCOrgNameProp, 0, 0, 0 },
- { VCOrgProp, 0, orgFields, 0 },
- { VCOrgUnit2Prop, 0, 0, 0 },
- { VCOrgUnit3Prop, 0, 0, 0 },
- { VCOrgUnit4Prop, 0, 0, 0 },
- { VCOrgUnitProp, 0, 0, 0 },
- { VCPagerProp, 0, 0, 0 },
- { VCPAlarmProp, 0, PAlarmFields, 0 },
- { VCParcelProp, 0, 0, 0 },
- { VCPartProp, 0, 0, 0 },
- { VCPCMProp, 0, 0, 0 },
- { VCPDFProp, 0, 0, 0 },
- { VCPGPProp, 0, 0, 0 },
- { VCPhotoProp, 0, 0, 0 },
- { VCPICTProp, 0, 0, 0 },
- { VCPMBProp, 0, 0, 0 },
- { VCPostalBoxProp, 0, 0, 0 },
- { VCPostalCodeProp, 0, 0, 0 },
- { VCPostalProp, 0, 0, 0 },
- { VCPowerShareProp, 0, 0, 0 },
- { VCPreferredProp, 0, 0, 0 },
- { VCPriorityProp, 0, 0, 0 },
- { VCProcedureNameProp, 0, 0, 0 },
- { VCProdIdProp, 0, 0, 0 },
- { VCProdigyProp, 0, 0, 0 },
- { VCPronunciationProp, 0, 0, 0 },
- { VCPSProp, 0, 0, 0 },
- { VCPublicKeyProp, 0, 0, 0 },
- { VCQPProp, VCQuotedPrintableProp, 0, 0 },
- { VCQuickTimeProp, 0, 0, 0 },
- { VCQuotedPrintableProp, 0, 0, 0 },
- { VCRDateProp, 0, 0, 0 },
- { VCRegionProp, 0, 0, 0 },
- { VCRelatedToProp, 0, 0, 0 },
- { VCRepeatCountProp, 0, 0, 0 },
- { VCResourcesProp, 0, 0, 0 },
- { VCRNumProp, 0, 0, 0 },
- { VCRoleProp, 0, 0, 0 },
- { VCRRuleProp, 0, 0, 0 },
- { VCRSVPProp, 0, 0, 0 },
- { VCRunTimeProp, 0, 0, 0 },
- { VCSequenceProp, 0, 0, 0 },
- { VCSnoozeTimeProp, 0, 0, 0 },
- { VCStartProp, 0, 0, 0 },
- { VCStatusProp, 0, 0, 0 },
- { VCStreetAddressProp, 0, 0, 0 },
- { VCSubTypeProp, 0, 0, 0 },
- { VCSummaryProp, 0, 0, 0 },
- { VCTelephoneProp, 0, 0, 0 },
- { VCTIFFProp, 0, 0, 0 },
- { VCTimeZoneProp, 0, 0, 0 },
- { VCTitleProp, 0, 0, 0 },
- { VCTLXProp, 0, 0, 0 },
- { VCTodoProp, 0, 0, PD_BEGIN },
- { VCTranspProp, 0, 0, 0 },
- { VCUniqueStringProp, 0, 0, 0 },
- { VCURLProp, 0, 0, 0 },
- { VCURLValueProp, 0, 0, 0 },
- { VCValueProp, 0, 0, 0 },
- { VCVersionProp, 0, 0, 0 },
- { VCVideoProp, 0, 0, 0 },
- { VCVoiceProp, 0, 0, 0 },
- { VCWAVEProp, 0, 0, 0 },
- { VCWMFProp, 0, 0, 0 },
- { VCWorkProp, 0, 0, 0 },
- { VCX400Prop, 0, 0, 0 },
- { VCX509Prop, 0, 0, 0 },
- { VCXRuleProp, 0, 0, 0 },
- { 0,0,0,0 }
- };
-
-
-static struct PreDefProp* lookupPropInfo(const char* str)
-{
- /* brute force for now, could use a hash table here. */
- int i;
-
- for (i = 0; propNames[i].name; i++)
- if (qstricmp(str, propNames[i].name) == 0) {
- return &propNames[i];
- }
-
- return 0;
-}
-
-
-DLLEXPORT(const char*) lookupProp_(const char* str)
-{
- int i;
-
- for (i = 0; propNames[i].name; i++)
- if (qstricmp(str, propNames[i].name) == 0) {
- const char* s;
- s = propNames[i].alias?propNames[i].alias:propNames[i].name;
- return lookupStr(s);
- }
- return lookupStr(str);
-}
-
-
-DLLEXPORT(const char*) lookupProp(const char* str)
-{
- int i;
-
- for (i = 0; propNames[i].name; i++)
- if (qstricmp(str, propNames[i].name) == 0) {
- const char *s;
- fieldedProp = propNames[i].fields;
- s = propNames[i].alias?propNames[i].alias:propNames[i].name;
- return lookupStr(s);
- }
- fieldedProp = 0;
- return lookupStr(str);
-}
-
-
-/*----------------------------------------------------------------------
- APIs to Output text form.
- ----------------------------------------------------------------------*/
-#define OFILE_REALLOC_SIZE 256
-typedef struct OFile {
- FILE *fp;
- char *s;
- int len;
- int limit;
- int alloc:1;
- int fail:1;
- } OFile;
-
-#if 0
-static void appendsOFile(OFile *fp, const char *s)
-{
- int slen;
- if (fp->fail) return;
- slen = strlen(s);
- if (fp->fp) {
- fwrite(s,1,slen,fp->fp);
- }
- else {
-stuff:
- if (fp->len + slen < fp->limit) {
- memcpy(fp->s+fp->len,s,slen);
- fp->len += slen;
- return;
- }
- else if (fp->alloc) {
- fp->limit = fp->limit + OFILE_REALLOC_SIZE;
- if (OFILE_REALLOC_SIZE <= slen) fp->limit += slen;
- fp->s = (char *) realloc(fp->s,fp->limit);
- if (fp->s) goto stuff;
- }
- if (fp->alloc)
- free(fp->s);
- fp->s = 0;
- fp->fail = 1;
- }
-}
-
-static void appendcOFile(OFile *fp, char c)
-{
- if (fp->fail) return;
- if (fp->fp) {
- fputc(c,fp->fp);
- }
- else {
-stuff:
- if (fp->len+1 < fp->limit) {
- fp->s[fp->len] = c;
- fp->len++;
- return;
- }
- else if (fp->alloc) {
- fp->limit = fp->limit + OFILE_REALLOC_SIZE;
- fp->s = (char *) realloc(fp->s,fp->limit);
- if (fp->s) goto stuff;
- }
- if (fp->alloc)
- free(fp->s);
- fp->s = 0;
- fp->fail = 1;
- }
-}
-#else
-static void appendcOFile_(OFile *fp, char c)
-{
- if (fp->fail) return;
- if (fp->fp) {
- fputc(c,fp->fp);
- }
- else {
-stuff:
- if (fp->len+1 < fp->limit) {
- fp->s[fp->len] = c;
- fp->len++;
- return;
- }
- else if (fp->alloc) {
- fp->limit = fp->limit + OFILE_REALLOC_SIZE;
- fp->s = (char *)realloc(fp->s,fp->limit);
- if (fp->s) goto stuff;
- }
- if (fp->alloc)
- free(fp->s);
- fp->s = 0;
- fp->fail = 1;
- }
-}
-
-static void appendcOFile(OFile *fp, char c)
-{
- if (c == '\n') {
- /* write out as <CR><LF> */
- appendcOFile_(fp,0xd);
- appendcOFile_(fp,0xa);
- }
- else
- appendcOFile_(fp,c);
-}
-
-static void appendsOFile(OFile *fp, const char *s)
-{
- int i, slen;
- slen = strlen(s);
- for (i=0; i<slen; i++) {
- appendcOFile(fp,s[i]);
- }
-}
-
-#endif
-
-static void initOFile(OFile *fp, FILE *ofp)
-{
- fp->fp = ofp;
- fp->s = 0;
- fp->len = 0;
- fp->limit = 0;
- fp->alloc = 0;
- fp->fail = 0;
-}
-
-static int writeBase64(OFile *fp, unsigned char *s, long len)
-{
- long cur = 0;
- int i, numQuads = 0;
- unsigned long trip;
- unsigned char b;
- char quad[5];
-#define MAXQUADS 16
-
- quad[4] = 0;
-
- while (cur < len) {
- // collect the triplet of bytes into 'trip'
- trip = 0;
- for (i = 0; i < 3; i++) {
- b = (cur < len) ? *(s + cur) : 0;
- cur++;
- trip = trip << 8 | b;
- }
- // fill in 'quad' with the appropriate four characters
- for (i = 3; i >= 0; i--) {
- b = (unsigned char)(trip & 0x3F);
- trip = trip >> 6;
- if ((3 - i) < (cur - len))
- quad[i] = '='; // pad char
- else if (b < 26) quad[i] = (char)b + 'A';
- else if (b < 52) quad[i] = (char)(b - 26) + 'a';
- else if (b < 62) quad[i] = (char)(b - 52) + '0';
- else if (b == 62) quad[i] = '+';
- else quad[i] = '/';
- }
- // now output 'quad' with appropriate whitespace and line ending
- appendsOFile(fp, (numQuads == 0 ? " " : ""));
- appendsOFile(fp, quad);
- appendsOFile(fp, ((cur >= len)?"\n" :(numQuads==MAXQUADS-1?"\n" : "")));
- numQuads = (numQuads + 1) % MAXQUADS;
- }
- appendcOFile(fp,'\n');
-
- return 1;
-}
-
-static void writeQPString(OFile *fp, const char *s)
-{
- const char *p = s;
- while (*p) {
- if (*p == '\n') {
- if (p[1]) appendsOFile(fp,"=0A=");
- }
- appendcOFile(fp,*p);
- p++;
- }
-}
-
-
-
-static void writeVObject_(OFile *fp, VObject *o);
-
-static void writeValue(OFile *fp, VObject *o, unsigned long size)
-{
- if (o == 0) return;
- switch (VALUE_TYPE(o)) {
- case VCVT_STRINGZ: {
- writeQPString(fp, STRINGZ_VALUE_OF(o));
- break;
- }
- case VCVT_UINT: {
- char buf[16];
- sprintf(buf,"%u", INTEGER_VALUE_OF(o));
- appendsOFile(fp,buf);
- break;
- }
- case VCVT_ULONG: {
- char buf[16];
- sprintf(buf,"%lu", LONG_VALUE_OF(o));
- appendsOFile(fp,buf);
- break;
- }
- case VCVT_RAW: {
- appendcOFile(fp,'\n');
- writeBase64(fp,(unsigned char*)(ANY_VALUE_OF(o)),size);
- break;
- }
- case VCVT_VOBJECT:
- appendcOFile(fp,'\n');
- writeVObject_(fp,VOBJECT_VALUE_OF(o));
- break;
- }
-}
-
-static void writeAttrValue(OFile *fp, VObject *o)
-{
- if (NAME_OF(o)) {
- struct PreDefProp *pi;
- pi = lookupPropInfo(NAME_OF(o));
- if (pi && ((pi->flags & PD_INTERNAL) != 0)) return;
- appendcOFile(fp,';');
- appendsOFile(fp,NAME_OF(o));
- }
- else
- appendcOFile(fp,';');
- if (VALUE_TYPE(o)) {
- appendcOFile(fp,'=');
- writeValue(fp,o,0);
- }
-}
-
-static void writeGroup(OFile *fp, VObject *o)
-{
- char buf1[256];
- char buf2[256];
- strcpy(buf1,NAME_OF(o));
- while ((o=isAPropertyOf(o,VCGroupingProp)) != 0) {
- strcpy(buf2,STRINGZ_VALUE_OF(o));
- strcat(buf2,".");
- strcat(buf2,buf1);
- strcpy(buf1,buf2);
- }
- appendsOFile(fp,buf1);
-}
-
-static int inList(const char **list, const char *s)
-{
- if (list == 0) return 0;
- while (*list) {
- if (qstricmp(*list,s) == 0) return 1;
- list++;
- }
- return 0;
-}
-
-static void writeProp(OFile *fp, VObject *o)
-{
- if (NAME_OF(o)) {
- struct PreDefProp *pi;
- VObjectIterator t;
- const char **fields_ = 0;
- pi = lookupPropInfo(NAME_OF(o));
- if (pi && ((pi->flags & PD_BEGIN) != 0)) {
- writeVObject_(fp,o);
- return;
- }
- if (isAPropertyOf(o,VCGroupingProp))
- writeGroup(fp,o);
- else
- appendsOFile(fp,NAME_OF(o));
- if (pi) fields_ = pi->fields;
- initPropIterator(&t,o);
- while (moreIteration(&t)) {
- const char *s;
- VObject *eachProp = nextVObject(&t);
- s = NAME_OF(eachProp);
- if (qstricmp(VCGroupingProp,s) && !inList(fields_,s))
- writeAttrValue(fp,eachProp);
- }
- if (fields_) {
- int i = 0, n = 0;
- const char** fields = fields_;
- /* output prop as fields */
- appendcOFile(fp,':');
- while (*fields) {
- VObject *t = isAPropertyOf(o,*fields);
- i++;
- if (t) n = i;
- fields++;
- }
- fields = fields_;
- for (i=0;i<n;i++) {
- writeValue(fp,isAPropertyOf(o,*fields),0);
- fields++;
- if (i<(n-1)) appendcOFile(fp,';');
- }
- }
- }
-
- if (VALUE_TYPE(o)) {
- unsigned long size = 0;
- VObject *p = isAPropertyOf(o,VCDataSizeProp);
- if (p) size = LONG_VALUE_OF(p);
- appendcOFile(fp,':');
- writeValue(fp,o,size);
- }
-
- appendcOFile(fp,'\n');
-}
-
-static void writeVObject_(OFile *fp, VObject *o)
-{
- if (NAME_OF(o)) {
- struct PreDefProp *pi;
- pi = lookupPropInfo(NAME_OF(o));
-
- if (pi && ((pi->flags & PD_BEGIN) != 0)) {
- VObjectIterator t;
- const char *begin = NAME_OF(o);
- appendsOFile(fp,"BEGIN:");
- appendsOFile(fp,begin);
- appendcOFile(fp,'\n');
- initPropIterator(&t,o);
- while (moreIteration(&t)) {
- VObject *eachProp = nextVObject(&t);
- writeProp(fp, eachProp);
- }
- appendsOFile(fp,"END:");
- appendsOFile(fp,begin);
- appendsOFile(fp,"\n\n");
- }
- }
-}
-
-void writeVObject(FILE *fp, VObject *o)
-{
- OFile ofp;
- // #####
- //_setmode(_fileno(fp), _O_BINARY);
- initOFile(&ofp,fp);
- writeVObject_(&ofp,o);
-}
-
-DLLEXPORT(void) writeVObjectToFile(char *fname, VObject *o)
-{
- QFileDirect f( fname);
- if ( !f.open( IO_WriteOnly ) ) {
- qWarning("Unable to open vobject write %s", fname);
- return;
- }
-
- writeVObject( f.directHandle(),o );
-}
-
-DLLEXPORT(void) writeVObjectsToFile(char *fname, VObject *list)
-{
- QFileDirect f( fname);
- if ( !f.open( IO_WriteOnly ) ) {
- qWarning("Unable to open vobject write %s", fname);
- return;
- }
-
- while (list) {
- writeVObject(f.directHandle(),list);
- list = nextVObjectInList(list);
- }
-}
-
-DLLEXPORT(const char *) vObjectTypeInfo(VObject *o)
-{
- const char *type = vObjectName( o );
- if ( strcmp( type, "TYPE" ) == 0 )
- type = vObjectStringZValue( o );
- return type;
-}
-
-
-// end of source file vobject.c
+/*************************************************************************** +(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International +Business Machines Corporation and Siemens Rolm Communications Inc. + +For purposes of this license notice, the term Licensors shall mean, +collectively, Apple Computer, Inc., AT&T Corp., International +Business Machines Corporation and Siemens Rolm Communications Inc. +The term Licensor shall mean any of the Licensors. + +Subject to acceptance of the following conditions, permission is hereby +granted by Licensors without the need for written agreement and without +license or royalty fees, to use, copy, modify and distribute this +software for any purpose. + +The above copyright notice and the following four paragraphs must be +reproduced in all copies of this software and any software including +this software. + +THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE +ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR +MODIFICATIONS. + +IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, +INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT +OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. + +The software is provided with RESTRICTED RIGHTS. Use, duplication, or +disclosure by the government are subject to restrictions set forth in +DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. + +***************************************************************************/ + +/* + * src: vobject.c + * doc: vobject and APIs to construct vobject, APIs pretty print + * vobject, and convert a vobject into its textual representation. + */ + +#ifndef MWERKS +#include <malloc.h> +#endif + +#include "vobject_p.h" +#include "qfiledirect_p.h" +#include <string.h> +#include <stdio.h> +#include <fcntl.h> +//#include <io.h> + + +#define NAME_OF(o) o->id +#define VALUE_TYPE(o) o->valType +#define STRINGZ_VALUE_OF(o) o->val.strs +#define INTEGER_VALUE_OF(o) o->val.i +#define LONG_VALUE_OF(o) o->val.l +#define ANY_VALUE_OF(o) o->val.any +#define VOBJECT_VALUE_OF(o) o->val.vobj + +typedef union ValueItem { + const char *strs; + unsigned int i; + unsigned long l; + void *any; + VObject *vobj; + } ValueItem; + +struct VObject { + VObject *next; + const char *id; + VObject *prop; + unsigned short valType; + ValueItem val; + }; + +typedef struct StrItem StrItem; + +struct StrItem { + StrItem *next; + const char *s; + unsigned int refCnt; + }; + +const char** fieldedProp; + + + +/*---------------------------------------------------------------------- + The following functions involve with memory allocation: + newVObject + deleteVObject + dupStr + deleteStr + newStrItem + deleteStrItem + ----------------------------------------------------------------------*/ + +DLLEXPORT(VObject*) newVObject_(const char *id) +{ + VObject *p = (VObject*)malloc(sizeof(VObject)); + p->next = 0; + p->id = id; + p->prop = 0; + VALUE_TYPE(p) = 0; + ANY_VALUE_OF(p) = 0; + return p; +} + +DLLEXPORT(VObject*) newVObject(const char *id) +{ + return newVObject_(lookupStr(id)); +} + +DLLEXPORT(void) deleteVObject(VObject *p) +{ + unUseStr(p->id); + free(p); +} + +DLLEXPORT(char*) dupStr(const char *s, unsigned int size) +{ + char *t; + if (size == 0) { + size = strlen(s); + } + t = (char*)malloc(size+1); + if (t) { + memcpy(t,s,size); + t[size] = 0; + return t; + } + else { + return (char*)0; + } +} + +DLLEXPORT(void) deleteStr(const char *p) +{ + if (p) free((void*)p); +} + + +static StrItem* newStrItem(const char *s, StrItem *next) +{ + StrItem *p = (StrItem*)malloc(sizeof(StrItem)); + p->next = next; + p->s = s; + p->refCnt = 1; + return p; +} + +static void deleteStrItem(StrItem *p) +{ + free((void*)p); +} + + +/*---------------------------------------------------------------------- + The following function provide accesses to VObject's value. + ----------------------------------------------------------------------*/ + +DLLEXPORT(const char*) vObjectName(VObject *o) +{ + return NAME_OF(o); +} + +DLLEXPORT(void) setVObjectName(VObject *o, const char* id) +{ + NAME_OF(o) = id; +} + +DLLEXPORT(const char*) vObjectStringZValue(VObject *o) +{ + return STRINGZ_VALUE_OF(o); +} + +DLLEXPORT(void) setVObjectStringZValue(VObject *o, const char *s) +{ + STRINGZ_VALUE_OF(o) = dupStr(s,0); + VALUE_TYPE(o) = VCVT_STRINGZ; +} + +DLLEXPORT(void) setVObjectStringZValue_(VObject *o, const char *s) +{ + STRINGZ_VALUE_OF(o) = s; + VALUE_TYPE(o) = VCVT_STRINGZ; +} + +DLLEXPORT(unsigned int) vObjectIntegerValue(VObject *o) +{ + return INTEGER_VALUE_OF(o); +} + +DLLEXPORT(void) setVObjectIntegerValue(VObject *o, unsigned int i) +{ + INTEGER_VALUE_OF(o) = i; + VALUE_TYPE(o) = VCVT_UINT; +} + +DLLEXPORT(unsigned long) vObjectLongValue(VObject *o) +{ + return LONG_VALUE_OF(o); +} + +DLLEXPORT(void) setVObjectLongValue(VObject *o, unsigned long l) +{ + LONG_VALUE_OF(o) = l; + VALUE_TYPE(o) = VCVT_ULONG; +} + +DLLEXPORT(void*) vObjectAnyValue(VObject *o) +{ + return ANY_VALUE_OF(o); +} + +DLLEXPORT(void) setVObjectAnyValue(VObject *o, void *t) +{ + ANY_VALUE_OF(o) = t; + VALUE_TYPE(o) = VCVT_RAW; +} + +DLLEXPORT(VObject*) vObjectVObjectValue(VObject *o) +{ + return VOBJECT_VALUE_OF(o); +} + +DLLEXPORT(void) setVObjectVObjectValue(VObject *o, VObject *p) +{ + VOBJECT_VALUE_OF(o) = p; + VALUE_TYPE(o) = VCVT_VOBJECT; +} + +DLLEXPORT(int) vObjectValueType(VObject *o) +{ + return VALUE_TYPE(o); +} + + +/*---------------------------------------------------------------------- + The following functions can be used to build VObject. + ----------------------------------------------------------------------*/ + +DLLEXPORT(VObject*) addVObjectProp(VObject *o, VObject *p) +{ + /* circular link list pointed to tail */ + /* + o {next,id,prop,val} + V + pn {next,id,prop,val} + V + ... + p1 {next,id,prop,val} + V + pn + --> + o {next,id,prop,val} + V + pn {next,id,prop,val} + V + p {next,id,prop,val} + ... + p1 {next,id,prop,val} + V + pn + */ + + VObject *tail = o->prop; + if (tail) { + p->next = tail->next; + o->prop = tail->next = p; + } + else { + o->prop = p->next = p; + } + return p; +} + +DLLEXPORT(VObject*) addProp(VObject *o, const char *id) +{ + return addVObjectProp(o,newVObject(id)); +} + +DLLEXPORT(VObject*) addProp_(VObject *o, const char *id) +{ + return addVObjectProp(o,newVObject_(id)); +} + +DLLEXPORT(void) addList(VObject **o, VObject *p) +{ + p->next = 0; + if (*o == 0) { + *o = p; + } + else { + VObject *t = *o; + while (t->next) { + t = t->next; + } + t->next = p; + } +} + +DLLEXPORT(VObject*) nextVObjectInList(VObject *o) +{ + return o->next; +} + +DLLEXPORT(VObject*) setValueWithSize_(VObject *prop, void *val, unsigned int size) +{ + VObject *sizeProp; + setVObjectAnyValue(prop, val); + sizeProp = addProp(prop,VCDataSizeProp); + setVObjectLongValue(sizeProp, size); + return prop; +} + +DLLEXPORT(VObject*) setValueWithSize(VObject *prop, void *val, unsigned int size) +{ + void *p = dupStr((const char *)val,size); + return setValueWithSize_(prop,p,p?size:0); +} + +DLLEXPORT(void) initPropIterator(VObjectIterator *i, VObject *o) +{ + i->start = o->prop; + i->next = 0; +} + +DLLEXPORT(void) initVObjectIterator(VObjectIterator *i, VObject *o) +{ + i->start = o->next; + i->next = 0; +} + +DLLEXPORT(int) moreIteration(VObjectIterator *i) +{ + return (i->start && (i->next==0 || i->next!=i->start)); +} + +DLLEXPORT(VObject*) nextVObject(VObjectIterator *i) +{ + if (i->start && i->next != i->start) { + if (i->next == 0) { + i->next = i->start->next; + return i->next; + } + else { + i->next = i->next->next; + return i->next; + } + } + else return (VObject*)0; +} + +DLLEXPORT(VObject*) isAPropertyOf(VObject *o, const char *id) +{ + VObjectIterator i; + initPropIterator(&i,o); + while (moreIteration(&i)) { + VObject *each = nextVObject(&i); + if (!qstricmp(id,each->id)) + return each; + } + return (VObject*)0; +} + +DLLEXPORT(VObject*) addGroup(VObject *o, const char *g) +{ + /* + a.b.c + --> + prop(c) + prop(VCGrouping=b) + prop(VCGrouping=a) + */ + char *dot = strrchr(g,'.'); + if (dot) { + VObject *p, *t; + char *gs, *n = dot+1; + gs = dupStr(g,0); /* so we can write to it. */ + /* used to be + * t = p = addProp_(o,lookupProp_(n)); + */ + t = p = addProp_(o,lookupProp(n)); + dot = strrchr(gs,'.'); + *dot = 0; + do { + dot = strrchr(gs,'.'); + if (dot) { + n = dot+1; + *dot=0; + } + else + n = gs; + /* property(VCGroupingProp=n); + * and the value may have VCGrouping property + */ + t = addProp(t,VCGroupingProp); + setVObjectStringZValue(t,lookupProp_(n)); + } while (n != gs); + deleteStr(gs); + return p; + } + else + return addProp_(o,lookupProp(g)); +} + +DLLEXPORT(VObject*) addPropValue(VObject *o, const char *p, const char *v) +{ + VObject *prop; + prop = addProp(o,p); + setVObjectStringZValue_(prop, strdup( v ) ); + return prop; +} + +DLLEXPORT(VObject*) addPropSizedValue_(VObject *o, const char *p, const char *v, + unsigned int size) +{ + VObject *prop; + prop = addProp(o,p); + setValueWithSize_(prop, (void*)v, size); + return prop; +} + +DLLEXPORT(VObject*) addPropSizedValue(VObject *o, const char *p, const char *v, + unsigned int size) +{ + return addPropSizedValue_(o,p,dupStr(v,size),size); +} + + +DLLEXPORT(void) cleanVObject(VObject *o) +{ + if (o == 0) return; + if (o->prop) { + /* destroy time: cannot use the iterator here. + Have to break the cycle in the circular link + list and turns it into regular NULL-terminated + list -- since at some point of destruction, + the reference entry for the iterator to work + will not longer be valid. + */ + VObject *p; + p = o->prop->next; + o->prop->next = 0; + do { + VObject *t = p->next; + cleanVObject(p); + p = t; + } while (p); + } + switch (VALUE_TYPE(o)) { + case VCVT_STRINGZ: + case VCVT_RAW: + // assume they are all allocated by malloc. + free((char*)STRINGZ_VALUE_OF(o)); + break; + case VCVT_VOBJECT: + cleanVObject(VOBJECT_VALUE_OF(o)); + break; + } + deleteVObject(o); +} + +DLLEXPORT(void) cleanVObjects(VObject *list) +{ + while (list) { + VObject *t = list; + list = nextVObjectInList(list); + cleanVObject(t); + } +} + +/*---------------------------------------------------------------------- + The following is a String Table Facilities. + ----------------------------------------------------------------------*/ + +#define STRTBLSIZE 255 + +static StrItem *strTbl[STRTBLSIZE]; + +static unsigned int hashStr(const char *s) +{ + unsigned int h = 0; + int i; + for (i=0;s[i];i++) { + h += s[i]*i; + } + return h % STRTBLSIZE; +} + +DLLEXPORT(const char*) lookupStr(const char *s) +{ + StrItem *t; + unsigned int h = hashStr(s); + if ((t = strTbl[h]) != 0) { + do { + if (qstricmp(t->s,s) == 0) { + t->refCnt++; + return t->s; + } + t = t->next; + } while (t); + } + s = dupStr(s,0); + strTbl[h] = newStrItem(s,strTbl[h]); + return s; +} + +DLLEXPORT(void) unUseStr(const char *s) +{ + StrItem *t, *p; + unsigned int h = hashStr(s); + if ((t = strTbl[h]) != 0) { + p = t; + do { + if (qstricmp(t->s,s) == 0) { + t->refCnt--; + if (t->refCnt == 0) { + if (p == strTbl[h]) { + strTbl[h] = t->next; + } + else { + p->next = t->next; + } + deleteStr(t->s); + deleteStrItem(t); + return; + } + } + p = t; + t = t->next; + } while (t); + } +} + +DLLEXPORT(void) cleanStrTbl() +{ + int i; + for (i=0; i<STRTBLSIZE;i++) { + StrItem *t = strTbl[i]; + while (t) { + StrItem *p; + deleteStr(t->s); + p = t; + t = t->next; + deleteStrItem(p); + } while (t); + strTbl[i] = 0; + } +} + + +struct PreDefProp { + const char *name; + const char *alias; + const char** fields; + unsigned int flags; + }; + +/* flags in PreDefProp */ +#define PD_BEGIN 0x1 +#define PD_INTERNAL 0x2 + +static const char *adrFields[] = { + VCPostalBoxProp, + VCExtAddressProp, + VCStreetAddressProp, + VCCityProp, + VCRegionProp, + VCPostalCodeProp, + VCCountryNameProp, + 0 +}; + +static const char *nameFields[] = { + VCFamilyNameProp, + VCGivenNameProp, + VCAdditionalNamesProp, + VCNamePrefixesProp, + VCNameSuffixesProp, + NULL + }; + +static const char *orgFields[] = { + VCOrgNameProp, + VCOrgUnitProp, + VCOrgUnit2Prop, + VCOrgUnit3Prop, + VCOrgUnit4Prop, + NULL + }; + +static const char *AAlarmFields[] = { + VCRunTimeProp, + VCSnoozeTimeProp, + VCRepeatCountProp, + VCAudioContentProp, + 0 + }; + +/* ExDate -- has unamed fields */ +/* RDate -- has unamed fields */ + +static const char *DAlarmFields[] = { + VCRunTimeProp, + VCSnoozeTimeProp, + VCRepeatCountProp, + VCDisplayStringProp, + 0 + }; + +static const char *MAlarmFields[] = { + VCRunTimeProp, + VCSnoozeTimeProp, + VCRepeatCountProp, + VCEmailAddressProp, + VCNoteProp, + 0 + }; + +static const char *PAlarmFields[] = { + VCRunTimeProp, + VCSnoozeTimeProp, + VCRepeatCountProp, + VCProcedureNameProp, + 0 + }; + +static struct PreDefProp propNames[] = { + { VC7bitProp, 0, 0, 0 }, + { VC8bitProp, 0, 0, 0 }, + { VCAAlarmProp, 0, AAlarmFields, 0 }, + { VCAdditionalNamesProp, 0, 0, 0 }, + { VCAdrProp, 0, adrFields, 0 }, + { VCAgentProp, 0, 0, 0 }, + { VCAIFFProp, 0, 0, 0 }, + { VCAOLProp, 0, 0, 0 }, + { VCAppleLinkProp, 0, 0, 0 }, + { VCAttachProp, 0, 0, 0 }, + { VCAttendeeProp, 0, 0, 0 }, + { VCATTMailProp, 0, 0, 0 }, + { VCAudioContentProp, 0, 0, 0 }, + { VCAVIProp, 0, 0, 0 }, + { VCBase64Prop, 0, 0, 0 }, + { VCBBSProp, 0, 0, 0 }, + { VCBirthDateProp, 0, 0, 0 }, + { VCBMPProp, 0, 0, 0 }, + { VCBodyProp, 0, 0, 0 }, + { VCBusinessRoleProp, 0, 0, 0 }, + { VCCalProp, 0, 0, PD_BEGIN }, + { VCCaptionProp, 0, 0, 0 }, + { VCCardProp, 0, 0, PD_BEGIN }, + { VCCarProp, 0, 0, 0 }, + { VCCategoriesProp, 0, 0, 0 }, + { VCCellularProp, 0, 0, 0 }, + { VCCGMProp, 0, 0, 0 }, + { VCCharSetProp, 0, 0, 0 }, + { VCCIDProp, VCContentIDProp, 0, 0 }, + { VCCISProp, 0, 0, 0 }, + { VCCityProp, 0, 0, 0 }, + { VCClassProp, 0, 0, 0 }, + { VCCommentProp, 0, 0, 0 }, + { VCCompletedProp, 0, 0, 0 }, + { VCContentIDProp, 0, 0, 0 }, + { VCCountryNameProp, 0, 0, 0 }, + { VCDAlarmProp, 0, DAlarmFields, 0 }, + { VCDataSizeProp, 0, 0, PD_INTERNAL }, + { VCDayLightProp, 0, 0, 0 }, + { VCDCreatedProp, 0, 0, 0 }, + { VCDeliveryLabelProp, 0, 0, 0 }, + { VCDescriptionProp, 0, 0, 0 }, + { VCDIBProp, 0, 0, 0 }, + { VCDisplayStringProp, 0, 0, 0 }, + { VCDomesticProp, 0, 0, 0 }, + { VCDTendProp, 0, 0, 0 }, + { VCDTstartProp, 0, 0, 0 }, + { VCDueProp, 0, 0, 0 }, + { VCEmailAddressProp, 0, 0, 0 }, + { VCEncodingProp, 0, 0, 0 }, + { VCEndProp, 0, 0, 0 }, + { VCEventProp, 0, 0, PD_BEGIN }, + { VCEWorldProp, 0, 0, 0 }, + { VCExNumProp, 0, 0, 0 }, + { VCExpDateProp, 0, 0, 0 }, + { VCExpectProp, 0, 0, 0 }, + { VCExtAddressProp, 0, 0, 0 }, + { VCFamilyNameProp, 0, 0, 0 }, + { VCFaxProp, 0, 0, 0 }, + { VCFullNameProp, 0, 0, 0 }, + { VCGeoLocationProp, 0, 0, 0 }, + { VCGeoProp, 0, 0, 0 }, + { VCGIFProp, 0, 0, 0 }, + { VCGivenNameProp, 0, 0, 0 }, + { VCGroupingProp, 0, 0, 0 }, + { VCHomeProp, 0, 0, 0 }, + { VCIBMMailProp, 0, 0, 0 }, + { VCInlineProp, 0, 0, 0 }, + { VCInternationalProp, 0, 0, 0 }, + { VCInternetProp, 0, 0, 0 }, + { VCISDNProp, 0, 0, 0 }, + { VCJPEGProp, 0, 0, 0 }, + { VCLanguageProp, 0, 0, 0 }, + { VCLastModifiedProp, 0, 0, 0 }, + { VCLastRevisedProp, 0, 0, 0 }, + { VCLocationProp, 0, 0, 0 }, + { VCLogoProp, 0, 0, 0 }, + { VCMailerProp, 0, 0, 0 }, + { VCMAlarmProp, 0, MAlarmFields, 0 }, + { VCMCIMailProp, 0, 0, 0 }, + { VCMessageProp, 0, 0, 0 }, + { VCMETProp, 0, 0, 0 }, + { VCModemProp, 0, 0, 0 }, + { VCMPEG2Prop, 0, 0, 0 }, + { VCMPEGProp, 0, 0, 0 }, + { VCMSNProp, 0, 0, 0 }, + { VCNamePrefixesProp, 0, 0, 0 }, + { VCNameProp, 0, nameFields, 0 }, + { VCNameSuffixesProp, 0, 0, 0 }, + { VCNoteProp, 0, 0, 0 }, + { VCOrgNameProp, 0, 0, 0 }, + { VCOrgProp, 0, orgFields, 0 }, + { VCOrgUnit2Prop, 0, 0, 0 }, + { VCOrgUnit3Prop, 0, 0, 0 }, + { VCOrgUnit4Prop, 0, 0, 0 }, + { VCOrgUnitProp, 0, 0, 0 }, + { VCPagerProp, 0, 0, 0 }, + { VCPAlarmProp, 0, PAlarmFields, 0 }, + { VCParcelProp, 0, 0, 0 }, + { VCPartProp, 0, 0, 0 }, + { VCPCMProp, 0, 0, 0 }, + { VCPDFProp, 0, 0, 0 }, + { VCPGPProp, 0, 0, 0 }, + { VCPhotoProp, 0, 0, 0 }, + { VCPICTProp, 0, 0, 0 }, + { VCPMBProp, 0, 0, 0 }, + { VCPostalBoxProp, 0, 0, 0 }, + { VCPostalCodeProp, 0, 0, 0 }, + { VCPostalProp, 0, 0, 0 }, + { VCPowerShareProp, 0, 0, 0 }, + { VCPreferredProp, 0, 0, 0 }, + { VCPriorityProp, 0, 0, 0 }, + { VCProcedureNameProp, 0, 0, 0 }, + { VCProdIdProp, 0, 0, 0 }, + { VCProdigyProp, 0, 0, 0 }, + { VCPronunciationProp, 0, 0, 0 }, + { VCPSProp, 0, 0, 0 }, + { VCPublicKeyProp, 0, 0, 0 }, + { VCQPProp, VCQuotedPrintableProp, 0, 0 }, + { VCQuickTimeProp, 0, 0, 0 }, + { VCQuotedPrintableProp, 0, 0, 0 }, + { VCRDateProp, 0, 0, 0 }, + { VCRegionProp, 0, 0, 0 }, + { VCRelatedToProp, 0, 0, 0 }, + { VCRepeatCountProp, 0, 0, 0 }, + { VCResourcesProp, 0, 0, 0 }, + { VCRNumProp, 0, 0, 0 }, + { VCRoleProp, 0, 0, 0 }, + { VCRRuleProp, 0, 0, 0 }, + { VCRSVPProp, 0, 0, 0 }, + { VCRunTimeProp, 0, 0, 0 }, + { VCSequenceProp, 0, 0, 0 }, + { VCSnoozeTimeProp, 0, 0, 0 }, + { VCStartProp, 0, 0, 0 }, + { VCStatusProp, 0, 0, 0 }, + { VCStreetAddressProp, 0, 0, 0 }, + { VCSubTypeProp, 0, 0, 0 }, + { VCSummaryProp, 0, 0, 0 }, + { VCTelephoneProp, 0, 0, 0 }, + { VCTIFFProp, 0, 0, 0 }, + { VCTimeZoneProp, 0, 0, 0 }, + { VCTitleProp, 0, 0, 0 }, + { VCTLXProp, 0, 0, 0 }, + { VCTodoProp, 0, 0, PD_BEGIN }, + { VCTranspProp, 0, 0, 0 }, + { VCUniqueStringProp, 0, 0, 0 }, + { VCURLProp, 0, 0, 0 }, + { VCURLValueProp, 0, 0, 0 }, + { VCValueProp, 0, 0, 0 }, + { VCVersionProp, 0, 0, 0 }, + { VCVideoProp, 0, 0, 0 }, + { VCVoiceProp, 0, 0, 0 }, + { VCWAVEProp, 0, 0, 0 }, + { VCWMFProp, 0, 0, 0 }, + { VCWorkProp, 0, 0, 0 }, + { VCX400Prop, 0, 0, 0 }, + { VCX509Prop, 0, 0, 0 }, + { VCXRuleProp, 0, 0, 0 }, + { 0,0,0,0 } + }; + + +static struct PreDefProp* lookupPropInfo(const char* str) +{ + /* brute force for now, could use a hash table here. */ + int i; + + for (i = 0; propNames[i].name; i++) + if (qstricmp(str, propNames[i].name) == 0) { + return &propNames[i]; + } + + return 0; +} + + +DLLEXPORT(const char*) lookupProp_(const char* str) +{ + int i; + + for (i = 0; propNames[i].name; i++) + if (qstricmp(str, propNames[i].name) == 0) { + const char* s; + s = propNames[i].alias?propNames[i].alias:propNames[i].name; + return lookupStr(s); + } + return lookupStr(str); +} + + +DLLEXPORT(const char*) lookupProp(const char* str) +{ + int i; + + for (i = 0; propNames[i].name; i++) + if (qstricmp(str, propNames[i].name) == 0) { + const char *s; + fieldedProp = propNames[i].fields; + s = propNames[i].alias?propNames[i].alias:propNames[i].name; + return lookupStr(s); + } + fieldedProp = 0; + return lookupStr(str); +} + + +/*---------------------------------------------------------------------- + APIs to Output text form. + ----------------------------------------------------------------------*/ +#define OFILE_REALLOC_SIZE 256 +typedef struct OFile { + FILE *fp; + char *s; + int len; + int limit; + int alloc:1; + int fail:1; + } OFile; + +#if 0 +static void appendsOFile(OFile *fp, const char *s) +{ + int slen; + if (fp->fail) return; + slen = strlen(s); + if (fp->fp) { + fwrite(s,1,slen,fp->fp); + } + else { +stuff: + if (fp->len + slen < fp->limit) { + memcpy(fp->s+fp->len,s,slen); + fp->len += slen; + return; + } + else if (fp->alloc) { + fp->limit = fp->limit + OFILE_REALLOC_SIZE; + if (OFILE_REALLOC_SIZE <= slen) fp->limit += slen; + fp->s = (char *) realloc(fp->s,fp->limit); + if (fp->s) goto stuff; + } + if (fp->alloc) + free(fp->s); + fp->s = 0; + fp->fail = 1; + } +} + +static void appendcOFile(OFile *fp, char c) +{ + if (fp->fail) return; + if (fp->fp) { + fputc(c,fp->fp); + } + else { +stuff: + if (fp->len+1 < fp->limit) { + fp->s[fp->len] = c; + fp->len++; + return; + } + else if (fp->alloc) { + fp->limit = fp->limit + OFILE_REALLOC_SIZE; + fp->s = (char *) realloc(fp->s,fp->limit); + if (fp->s) goto stuff; + } + if (fp->alloc) + free(fp->s); + fp->s = 0; + fp->fail = 1; + } +} +#else +static void appendcOFile_(OFile *fp, char c) +{ + if (fp->fail) return; + if (fp->fp) { + fputc(c,fp->fp); + } + else { +stuff: + if (fp->len+1 < fp->limit) { + fp->s[fp->len] = c; + fp->len++; + return; + } + else if (fp->alloc) { + fp->limit = fp->limit + OFILE_REALLOC_SIZE; + fp->s = (char *)realloc(fp->s,fp->limit); + if (fp->s) goto stuff; + } + if (fp->alloc) + free(fp->s); + fp->s = 0; + fp->fail = 1; + } +} + +static void appendcOFile(OFile *fp, char c) +{ + if (c == '\n') { + /* write out as <CR><LF> */ + appendcOFile_(fp,0xd); + appendcOFile_(fp,0xa); + } + else + appendcOFile_(fp,c); +} + +static void appendsOFile(OFile *fp, const char *s) +{ + int i, slen; + slen = strlen(s); + for (i=0; i<slen; i++) { + appendcOFile(fp,s[i]); + } +} + +#endif + +static void initOFile(OFile *fp, FILE *ofp) +{ + fp->fp = ofp; + fp->s = 0; + fp->len = 0; + fp->limit = 0; + fp->alloc = 0; + fp->fail = 0; +} + +static int writeBase64(OFile *fp, unsigned char *s, long len) +{ + long cur = 0; + int i, numQuads = 0; + unsigned long trip; + unsigned char b; + char quad[5]; +#define MAXQUADS 16 + + quad[4] = 0; + + while (cur < len) { + // collect the triplet of bytes into 'trip' + trip = 0; + for (i = 0; i < 3; i++) { + b = (cur < len) ? *(s + cur) : 0; + cur++; + trip = trip << 8 | b; + } + // fill in 'quad' with the appropriate four characters + for (i = 3; i >= 0; i--) { + b = (unsigned char)(trip & 0x3F); + trip = trip >> 6; + if ((3 - i) < (cur - len)) + quad[i] = '='; // pad char + else if (b < 26) quad[i] = (char)b + 'A'; + else if (b < 52) quad[i] = (char)(b - 26) + 'a'; + else if (b < 62) quad[i] = (char)(b - 52) + '0'; + else if (b == 62) quad[i] = '+'; + else quad[i] = '/'; + } + // now output 'quad' with appropriate whitespace and line ending + appendsOFile(fp, (numQuads == 0 ? " " : "")); + appendsOFile(fp, quad); + appendsOFile(fp, ((cur >= len)?"\n" :(numQuads==MAXQUADS-1?"\n" : ""))); + numQuads = (numQuads + 1) % MAXQUADS; + } + appendcOFile(fp,'\n'); + + return 1; +} + +static const char *replaceChar(unsigned char c) +{ + if (c == '\n') { + return "=0A=\n"; + } else if ( + (c >= 'A' && c <= 'Z') + || + (c >= 'a' && c <= 'z') + || + (c >= '0' && c <= '9') + || + (c >= '\'' && c <= ')') + || + (c >= '+' && c <= '-') + || + (c == '/') + || + (c == '?') + || + (c == ' ')) + { + return 0; + } + + static char trans[4]; + trans[0] = '='; + trans[3] = '\0'; + int rem = c % 16; + int div = c / 16; + + if (div < 10) + trans[1] = '0' + div; + else + trans[1] = 'A' + (div - 10); + + if (rem < 10) + trans[2] = '0' + rem; + else + trans[2] = 'A' + (rem - 10); + + return trans; +} + +static void writeQPString(OFile *fp, const char *s) +{ + /* + only A-Z, 0-9 and + "'" (ASCII code 39) + "(" (ASCII code 40) + ")" (ASCII code 41) + "+" (ASCII code 43) + "," (ASCII code 44) + "-" (ASCII code 45) + "/" (ASCII code 47) + "?" (ASCII code 63) + + should remain un-encoded. + '=' needs to be encoded as it is the escape character. + ';' needs to be as it is a field separator. + + */ + const char *p = s; + while (*p) { + const char *rep = replaceChar(*p); + if (rep) + appendsOFile(fp, rep); + else + appendcOFile(fp, *p); + p++; + } +} + +static bool includesUnprintable(VObject *o) +{ + if (o) { + if (VALUE_TYPE(o) == VCVT_STRINGZ) { + const char *p = STRINGZ_VALUE_OF(o); + if (p) { + while (*p) { + if (replaceChar(*p)) + return TRUE; + p++; + } + } + } + } + return FALSE; +} + +static void writeVObject_(OFile *fp, VObject *o); + +static void writeValue(OFile *fp, VObject *o, unsigned long size) +{ + if (o == 0) return; + switch (VALUE_TYPE(o)) { + case VCVT_STRINGZ: { + writeQPString(fp, STRINGZ_VALUE_OF(o)); + break; + } + case VCVT_UINT: { + char buf[16]; + sprintf(buf,"%u", INTEGER_VALUE_OF(o)); + appendsOFile(fp,buf); + break; + } + case VCVT_ULONG: { + char buf[16]; + sprintf(buf,"%lu", LONG_VALUE_OF(o)); + appendsOFile(fp,buf); + break; + } + case VCVT_RAW: { + appendcOFile(fp,'\n'); + writeBase64(fp,(unsigned char*)(ANY_VALUE_OF(o)),size); + break; + } + case VCVT_VOBJECT: + appendcOFile(fp,'\n'); + writeVObject_(fp,VOBJECT_VALUE_OF(o)); + break; + } +} + +static void writeAttrValue(OFile *fp, VObject *o) +{ + if (NAME_OF(o)) { + struct PreDefProp *pi; + pi = lookupPropInfo(NAME_OF(o)); + if (pi && ((pi->flags & PD_INTERNAL) != 0)) return; + if ( includesUnprintable(o) ) { + appendsOFile(fp, ";" VCEncodingProp "=" VCQuotedPrintableProp); + appendsOFile(fp, ";" VCCharSetProp "=" "UTF-8"); + } + appendcOFile(fp,';'); + appendsOFile(fp,NAME_OF(o)); + } + else + appendcOFile(fp,';'); + if (VALUE_TYPE(o)) { + appendcOFile(fp,'='); + writeValue(fp,o,0); + } +} + +static void writeGroup(OFile *fp, VObject *o) +{ + char buf1[256]; + char buf2[256]; + strcpy(buf1,NAME_OF(o)); + while ((o=isAPropertyOf(o,VCGroupingProp)) != 0) { + strcpy(buf2,STRINGZ_VALUE_OF(o)); + strcat(buf2,"."); + strcat(buf2,buf1); + strcpy(buf1,buf2); + } + appendsOFile(fp,buf1); +} + +static int inList(const char **list, const char *s) +{ + if (list == 0) return 0; + while (*list) { + if (qstricmp(*list,s) == 0) return 1; + list++; + } + return 0; +} + +static void writeProp(OFile *fp, VObject *o) +{ + if (NAME_OF(o)) { + struct PreDefProp *pi; + VObjectIterator t; + const char **fields_ = 0; + pi = lookupPropInfo(NAME_OF(o)); + if (pi && ((pi->flags & PD_BEGIN) != 0)) { + writeVObject_(fp,o); + return; + } + if (isAPropertyOf(o,VCGroupingProp)) + writeGroup(fp,o); + else + appendsOFile(fp,NAME_OF(o)); + if (pi) fields_ = pi->fields; + initPropIterator(&t,o); + while (moreIteration(&t)) { + const char *s; + VObject *eachProp = nextVObject(&t); + s = NAME_OF(eachProp); + if (qstricmp(VCGroupingProp,s) && !inList(fields_,s)) + writeAttrValue(fp,eachProp); + } + if (fields_) { + int i = 0, n = 0; + const char** fields = fields_; + /* output prop as fields */ + bool printable = TRUE; + while (*fields && printable) { + VObject *t = isAPropertyOf(o,*fields); + if (includesUnprintable(t)) + printable = FALSE; + fields++; + } + fields = fields_; + if (!printable) { + appendsOFile(fp, ";" VCEncodingProp "=" VCQuotedPrintableProp); + appendsOFile(fp, ";" VCCharSetProp "=" "UTF-8"); + } + appendcOFile(fp,':'); + while (*fields) { + VObject *t = isAPropertyOf(o,*fields); + i++; + if (t) n = i; + fields++; + } + fields = fields_; + for (i=0;i<n;i++) { + writeValue(fp,isAPropertyOf(o,*fields),0); + fields++; + if (i<(n-1)) appendcOFile(fp,';'); + } + } + } + + + if (VALUE_TYPE(o)) { + if ( includesUnprintable(o) ) { + appendsOFile(fp, ";" VCEncodingProp "=" VCQuotedPrintableProp); + appendsOFile(fp, ";" VCCharSetProp "=" "UTF-8"); + } + unsigned long size = 0; + VObject *p = isAPropertyOf(o,VCDataSizeProp); + if (p) size = LONG_VALUE_OF(p); + appendcOFile(fp,':'); + writeValue(fp,o,size); + } + + appendcOFile(fp,'\n'); +} + +static void writeVObject_(OFile *fp, VObject *o) +{ + if (NAME_OF(o)) { + struct PreDefProp *pi; + pi = lookupPropInfo(NAME_OF(o)); + + if (pi && ((pi->flags & PD_BEGIN) != 0)) { + VObjectIterator t; + const char *begin = NAME_OF(o); + appendsOFile(fp,"BEGIN:"); + appendsOFile(fp,begin); + appendcOFile(fp,'\n'); + initPropIterator(&t,o); + while (moreIteration(&t)) { + VObject *eachProp = nextVObject(&t); + writeProp(fp, eachProp); + } + appendsOFile(fp,"END:"); + appendsOFile(fp,begin); + appendsOFile(fp,"\n\n"); + } + } +} + +void writeVObject(FILE *fp, VObject *o) +{ + OFile ofp; + // ##### + //_setmode(_fileno(fp), _O_BINARY); + initOFile(&ofp,fp); + writeVObject_(&ofp,o); +} + +DLLEXPORT(void) writeVObjectToFile(char *fname, VObject *o) +{ + QFileDirect f( fname); + if ( !f.open( IO_WriteOnly ) ) { + qWarning("Unable to open vobject write %s", fname); + return; + } + + writeVObject( f.directHandle(),o ); +} + +DLLEXPORT(void) writeVObjectsToFile(char *fname, VObject *list) +{ + QFileDirect f( fname); + if ( !f.open( IO_WriteOnly ) ) { + qWarning("Unable to open vobject write %s", fname); + return; + } + + while (list) { + writeVObject(f.directHandle(),list); + list = nextVObjectInList(list); + } +} + +DLLEXPORT(const char *) vObjectTypeInfo(VObject *o) +{ + const char *type = vObjectName( o ); + if ( strcmp( type, "TYPE" ) == 0 ) + type = vObjectStringZValue( o ); + return type; +} + + +// end of source file vobject.c diff --git a/library/backend/vobject_p.h b/library/backend/vobject_p.h index a0d921e..0d0a2a8 100644 --- a/library/backend/vobject_p.h +++ b/library/backend/vobject_p.h @@ -1,404 +1,406 @@ -/***************************************************************************
-(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-
-For purposes of this license notice, the term Licensors shall mean,
-collectively, Apple Computer, Inc., AT&T Corp., International
-Business Machines Corporation and Siemens Rolm Communications Inc.
-The term Licensor shall mean any of the Licensors.
-
-Subject to acceptance of the following conditions, permission is hereby
-granted by Licensors without the need for written agreement and without
-license or royalty fees, to use, copy, modify and distribute this
-software for any purpose.
-
-The above copyright notice and the following four paragraphs must be
-reproduced in all copies of this software and any software including
-this software.
-
-THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE
-ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR
-MODIFICATIONS.
-
-IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT,
-INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
-OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED,
-INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.
-
-The software is provided with RESTRICTED RIGHTS. Use, duplication, or
-disclosure by the government are subject to restrictions set forth in
-DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
-
-***************************************************************************/
-
-/*
-
-The vCard/vCalendar C interface is implemented in the set
-of files as follows:
-
-vcc.y, yacc source, and vcc.c, the yacc output you will use
-implements the core parser
-
-vobject.c implements an API that insulates the caller from
-the parser and changes in the vCard/vCalendar BNF
-
-port.h defines compilation environment dependent stuff
-
-vcc.h and vobject.h are header files for their .c counterparts
-
-vcaltmp.h and vcaltmp.c implement vCalendar "macro" functions
-which you may find useful.
-
-test.c is a standalone test driver that exercises some of
-the features of the APIs provided. Invoke test.exe on a
-VCARD/VCALENDAR input text file and you will see the pretty
-print output of the internal representation (this pretty print
-output should give you a good idea of how the internal
-representation looks like -- there is one such output in the
-following too). Also, a file with the .out suffix is generated
-to show that the internal representation can be written back
-in the original text format.
-
-For more information on this API see the readme.txt file
-which accompanied this distribution.
-
- Also visit:
-
- http://www.versit.com
- http://www.ralden.com
-
-*/
-
-
-#ifndef __VOBJECT_H__
-#define __VOBJECT_H__ 1
-
-#include <qstring.h>
-
-#define vCardClipboardFormat "+//ISBN 1-887687-00-9::versit::PDI//vCard"
-#define vCalendarClipboardFormat "+//ISBN 1-887687-00-9::versit::PDI//vCalendar"
-
-/* The above strings vCardClipboardFormat and vCalendarClipboardFormat
-are globally unique IDs which can be used to generate clipboard format
-ID's as per the requirements of a specific platform. For example, in
-Windows they are used as the parameter in a call to RegisterClipboardFormat.
-For example:
-
- CLIPFORMAT foo = RegisterClipboardFormat(vCardClipboardFormat);
-
-*/
-
-#define vCardMimeType "text/x-vCard"
-#define vCalendarMimeType "text/x-vCalendar"
-
-#undef DLLEXPORT
-#include <qglobal.h>
-#if defined(Q_WS_WIN)
-#define DLLEXPORT(t) __declspec(dllexport) t
-#else
-#define DLLEXPORT(t) t
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-
-
-#define VC7bitProp "7BIT"
-#define VC8bitProp "8BIT"
-#define VCAAlarmProp "AALARM"
-#define VCAdditionalNamesProp "ADDN"
-#define VCAdrProp "ADR"
-#define VCAgentProp "AGENT"
-#define VCAIFFProp "AIFF"
-#define VCAOLProp "AOL"
-#define VCAppleLinkProp "APPLELINK"
-#define VCAttachProp "ATTACH"
-#define VCAttendeeProp "ATTENDEE"
-#define VCATTMailProp "ATTMAIL"
-#define VCAudioContentProp "AUDIOCONTENT"
-#define VCAVIProp "AVI"
-#define VCBase64Prop "BASE64"
-#define VCBBSProp "BBS"
-#define VCBirthDateProp "BDAY"
-#define VCBMPProp "BMP"
-#define VCBodyProp "BODY"
-#define VCBusinessRoleProp "ROLE"
-#define VCCalProp "VCALENDAR"
-#define VCCaptionProp "CAP"
-#define VCCardProp "VCARD"
-#define VCCarProp "CAR"
-#define VCCategoriesProp "CATEGORIES"
-#define VCCellularProp "CELL"
-#define VCCGMProp "CGM"
-#define VCCharSetProp "CS"
-#define VCCIDProp "CID"
-#define VCCISProp "CIS"
-#define VCCityProp "L"
-#define VCClassProp "CLASS"
-#define VCCommentProp "NOTE"
-#define VCCompletedProp "COMPLETED"
-#define VCContentIDProp "CONTENT-ID"
-#define VCCountryNameProp "C"
-#define VCDAlarmProp "DALARM"
-#define VCDataSizeProp "DATASIZE"
-#define VCDayLightProp "DAYLIGHT"
-#define VCDCreatedProp "DCREATED"
-#define VCDeliveryLabelProp "LABEL"
-#define VCDescriptionProp "DESCRIPTION"
-#define VCDIBProp "DIB"
-#define VCDisplayStringProp "DISPLAYSTRING"
-#define VCDomesticProp "DOM"
-#define VCDTendProp "DTEND"
-#define VCDTstartProp "DTSTART"
-#define VCDueProp "DUE"
-#define VCEmailAddressProp "EMAIL"
-#define VCEncodingProp "ENCODING"
-#define VCEndProp "END"
-#define VCEventProp "VEVENT"
-#define VCEWorldProp "EWORLD"
-#define VCExNumProp "EXNUM"
-#define VCExpDateProp "EXDATE"
-#define VCExpectProp "EXPECT"
-#define VCExtAddressProp "EXT ADD"
-#define VCFamilyNameProp "F"
-#define VCFaxProp "FAX"
-#define VCFullNameProp "FN"
-#define VCGeoProp "GEO"
-#define VCGeoLocationProp "GEO"
-#define VCGIFProp "GIF"
-#define VCGivenNameProp "G"
-#define VCGroupingProp "Grouping"
-#define VCHomeProp "HOME"
-#define VCIBMMailProp "IBMMail"
-#define VCInlineProp "INLINE"
-#define VCInternationalProp "INTL"
-#define VCInternetProp "INTERNET"
-#define VCISDNProp "ISDN"
-#define VCJPEGProp "JPEG"
-#define VCLanguageProp "LANG"
-#define VCLastModifiedProp "LAST-MODIFIED"
-#define VCLastRevisedProp "REV"
-#define VCLocationProp "LOCATION"
-#define VCLogoProp "LOGO"
-#define VCMailerProp "MAILER"
-#define VCMAlarmProp "MALARM"
-#define VCMCIMailProp "MCIMAIL"
-#define VCMessageProp "MSG"
-#define VCMETProp "MET"
-#define VCModemProp "MODEM"
-#define VCMPEG2Prop "MPEG2"
-#define VCMPEGProp "MPEG"
-#define VCMSNProp "MSN"
-#define VCNamePrefixesProp "NPRE"
-#define VCNameProp "N"
-#define VCNameSuffixesProp "NSUF"
-#define VCNoteProp "NOTE"
-#define VCOrgNameProp "ORGNAME"
-#define VCOrgProp "ORG"
-#define VCOrgUnit2Prop "OUN2"
-#define VCOrgUnit3Prop "OUN3"
-#define VCOrgUnit4Prop "OUN4"
-#define VCOrgUnitProp "OUN"
-#define VCPagerProp "PAGER"
-#define VCPAlarmProp "PALARM"
-#define VCParcelProp "PARCEL"
-#define VCPartProp "PART"
-#define VCPCMProp "PCM"
-#define VCPDFProp "PDF"
-#define VCPGPProp "PGP"
-#define VCPhotoProp "PHOTO"
-#define VCPICTProp "PICT"
-#define VCPMBProp "PMB"
-#define VCPostalBoxProp "BOX"
-#define VCPostalCodeProp "PC"
-#define VCPostalProp "POSTAL"
-#define VCPowerShareProp "POWERSHARE"
-#define VCPreferredProp "PREF"
-#define VCPriorityProp "PRIORITY"
-#define VCProcedureNameProp "PROCEDURENAME"
-#define VCProdIdProp "PRODID"
-#define VCProdigyProp "PRODIGY"
-#define VCPronunciationProp "SOUND"
-#define VCPSProp "PS"
-#define VCPublicKeyProp "KEY"
-#define VCQPProp "QP"
-#define VCQuickTimeProp "QTIME"
-#define VCQuotedPrintableProp "QUOTED-PRINTABLE"
-#define VCRDateProp "RDATE"
-#define VCRegionProp "R"
-#define VCRelatedToProp "RELATED-TO"
-#define VCRepeatCountProp "REPEATCOUNT"
-#define VCResourcesProp "RESOURCES"
-#define VCRNumProp "RNUM"
-#define VCRoleProp "ROLE"
-#define VCRRuleProp "RRULE"
-#define VCRSVPProp "RSVP"
-#define VCRunTimeProp "RUNTIME"
-#define VCSequenceProp "SEQUENCE"
-#define VCSnoozeTimeProp "SNOOZETIME"
-#define VCStartProp "START"
-#define VCStatusProp "STATUS"
-#define VCStreetAddressProp "STREET"
-#define VCSubTypeProp "SUBTYPE"
-#define VCSummaryProp "SUMMARY"
-#define VCTelephoneProp "TEL"
-#define VCTIFFProp "TIFF"
-#define VCTimeZoneProp "TZ"
-#define VCTitleProp "TITLE"
-#define VCTLXProp "TLX"
-#define VCTodoProp "VTODO"
-#define VCTranspProp "TRANSP"
-#define VCUniqueStringProp "UID"
-#define VCURLProp "URL"
-#define VCURLValueProp "URLVAL"
-#define VCValueProp "VALUE"
-#define VCVersionProp "VERSION"
-#define VCVideoProp "VIDEO"
-#define VCVoiceProp "VOICE"
-#define VCWAVEProp "WAVE"
-#define VCWMFProp "WMF"
-#define VCWorkProp "WORK"
-#define VCX400Prop "X400"
-#define VCX509Prop "X509"
-#define VCXRuleProp "XRULE"
-
-
-typedef struct VObject VObject;
-
-typedef struct VObjectIterator {
- VObject* start;
- VObject* next;
- } VObjectIterator;
-
-extern DLLEXPORT(VObject*) newVObject(const char *id);
-extern DLLEXPORT(void) deleteVObject(VObject *p);
-extern DLLEXPORT(char*) dupStr(const char *s, unsigned int size);
-extern DLLEXPORT(void) deleteStr(const char *p);
-extern DLLEXPORT(void) unUseStr(const char *s);
-
-extern DLLEXPORT(void) setVObjectName(VObject *o, const char* id);
-extern DLLEXPORT(void) setVObjectStringZValue(VObject *o, const char *s);
-extern DLLEXPORT(void) setVObjectStringZValue_(VObject *o, const char *s);
-extern DLLEXPORT(void) setVObjectIntegerValue(VObject *o, unsigned int i);
-extern DLLEXPORT(void) setVObjectLongValue(VObject *o, unsigned long l);
-extern DLLEXPORT(void) setVObjectAnyValue(VObject *o, void *t);
-extern DLLEXPORT(VObject*) setValueWithSize(VObject *prop, void *val, unsigned int size);
-extern DLLEXPORT(VObject*) setValueWithSize_(VObject *prop, void *val, unsigned int size);
-
-extern DLLEXPORT(const char*) vObjectName(VObject *o);
-extern DLLEXPORT(const char*) vObjectStringZValue(VObject *o);
-extern DLLEXPORT(unsigned int) vObjectIntegerValue(VObject *o);
-extern DLLEXPORT(unsigned long) vObjectLongValue(VObject *o);
-extern DLLEXPORT(void*) vObjectAnyValue(VObject *o);
-extern DLLEXPORT(VObject*) vObjectVObjectValue(VObject *o);
-extern DLLEXPORT(void) setVObjectVObjectValue(VObject *o, VObject *p);
-
-extern DLLEXPORT(VObject*) addVObjectProp(VObject *o, VObject *p);
-extern DLLEXPORT(VObject*) addProp(VObject *o, const char *id);
-extern DLLEXPORT(VObject*) addProp_(VObject *o, const char *id);
-extern DLLEXPORT(VObject*) addPropValue(VObject *o, const char *p, const char *v);
-extern DLLEXPORT(VObject*) addPropSizedValue_(VObject *o, const char *p, const char *v, unsigned int size);
-extern DLLEXPORT(VObject*) addPropSizedValue(VObject *o, const char *p, const char *v, unsigned int size);
-extern DLLEXPORT(VObject*) addGroup(VObject *o, const char *g);
-extern DLLEXPORT(void) addList(VObject **o, VObject *p);
-
-extern DLLEXPORT(VObject*) isAPropertyOf(VObject *o, const char *id);
-
-extern DLLEXPORT(VObject*) nextVObjectInList(VObject *o);
-extern DLLEXPORT(void) initPropIterator(VObjectIterator *i, VObject *o);
-extern DLLEXPORT(int) moreIteration(VObjectIterator *i);
-extern DLLEXPORT(VObject*) nextVObject(VObjectIterator *i);
-
-extern DLLEXPORT(const char*) lookupStr(const char *s);
-extern DLLEXPORT(void) cleanStrTbl();
-
-extern DLLEXPORT(void) cleanVObject(VObject *o);
-extern DLLEXPORT(void) cleanVObjects(VObject *list);
-
-extern DLLEXPORT(const char*) lookupProp(const char* str);
-extern DLLEXPORT(const char*) lookupProp_(const char* str);
-
-extern DLLEXPORT(void) writeVObjectToFile(char *fname, VObject *o);
-extern DLLEXPORT(void) writeVObjectsToFile(char *fname, VObject *list);
-
-extern DLLEXPORT(int) vObjectValueType(VObject *o);
-
-/* return type of vObjectValueType: */
-#define VCVT_NOVALUE 0
- /* if the VObject has no value associated with it. */
-#define VCVT_STRINGZ 1
- /* if the VObject has value set by setVObjectStringZValue. */
-#define VCVT_UINT 2
- /* if the VObject has value set by setVObjectIntegerValue. */
-#define VCVT_ULONG 3
- /* if the VObject has value set by setVObjectLongValue. */
-#define VCVT_RAW 4
- /* if the VObject has value set by setVObjectAnyValue. */
-#define VCVT_VOBJECT 5
- /* if the VObject has value set by setVObjectVObjectValue. */
-
-extern const char** fieldedProp;
-
-/***************************************************
- * The methods below are implemented in vcc.c (generated from vcc.y )
- ***************************************************/
-
-/* NOTE regarding printVObject and writeVObject
-
-The functions below are not exported from the DLL because they
-take a FILE* as a parameter, which cannot be passed across a DLL
-interface (at least that is my experience). Instead you can use
-their companion functions which take file names or pointers
-to memory. However, if you are linking this code into
-your build directly then you may find them a more convenient API
-and you can go ahead and use them. If you try to use them with
-the DLL LIB you will get a link error.
-*/
-extern void writeVObject(FILE *fp, VObject *o);
-
-
-
-typedef void (*MimeErrorHandler)(char *);
-
-extern DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler);
-
-extern DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len);
-extern DLLEXPORT(VObject*) Parse_MIME_FromFileName(char* fname);
-
-
-/* NOTE regarding Parse_MIME_FromFile
-The function above, Parse_MIME_FromFile, comes in two flavors,
-neither of which is exported from the DLL. Each version takes
-a CFile or FILE* as a parameter, neither of which can be
-passed across a DLL interface (at least that is my experience).
-If you are linking this code into your build directly then
-you may find them a more convenient API that the other flavors
-that take a file name. If you use them with the DLL LIB you
-will get a link error.
-*/
-
-
-#if INCLUDEMFC
-extern VObject* Parse_MIME_FromFile(CFile *file);
-#else
-extern VObject* Parse_MIME_FromFile(FILE *file);
-#endif
-
-extern DLLEXPORT(const char *) vObjectTypeInfo(VObject *o);
-
-
-#endif /* __VOBJECT_H__ */
-
-
+/*************************************************************************** +(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International +Business Machines Corporation and Siemens Rolm Communications Inc. + +For purposes of this license notice, the term Licensors shall mean, +collectively, Apple Computer, Inc., AT&T Corp., International +Business Machines Corporation and Siemens Rolm Communications Inc. +The term Licensor shall mean any of the Licensors. + +Subject to acceptance of the following conditions, permission is hereby +granted by Licensors without the need for written agreement and without +license or royalty fees, to use, copy, modify and distribute this +software for any purpose. + +The above copyright notice and the following four paragraphs must be +reproduced in all copies of this software and any software including +this software. + +THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE +ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR +MODIFICATIONS. + +IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, +INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT +OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. + +The software is provided with RESTRICTED RIGHTS. Use, duplication, or +disclosure by the government are subject to restrictions set forth in +DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. + +***************************************************************************/ + +/* + +The vCard/vCalendar C interface is implemented in the set +of files as follows: + +vcc.y, yacc source, and vcc.c, the yacc output you will use +implements the core parser + +vobject.c implements an API that insulates the caller from +the parser and changes in the vCard/vCalendar BNF + +port.h defines compilation environment dependent stuff + +vcc.h and vobject.h are header files for their .c counterparts + +vcaltmp.h and vcaltmp.c implement vCalendar "macro" functions +which you may find useful. + +test.c is a standalone test driver that exercises some of +the features of the APIs provided. Invoke test.exe on a +VCARD/VCALENDAR input text file and you will see the pretty +print output of the internal representation (this pretty print +output should give you a good idea of how the internal +representation looks like -- there is one such output in the +following too). Also, a file with the .out suffix is generated +to show that the internal representation can be written back +in the original text format. + +For more information on this API see the readme.txt file +which accompanied this distribution. + + Also visit: + + http://www.versit.com + http://www.ralden.com + +*/ + +// No tr() anywhere in this file + + +#ifndef __VOBJECT_H__ +#define __VOBJECT_H__ 1 + +#include <qstring.h> + +#define vCardClipboardFormat "+//ISBN 1-887687-00-9::versit::PDI//vCard" +#define vCalendarClipboardFormat "+//ISBN 1-887687-00-9::versit::PDI//vCalendar" + +/* The above strings vCardClipboardFormat and vCalendarClipboardFormat +are globally unique IDs which can be used to generate clipboard format +ID's as per the requirements of a specific platform. For example, in +Windows they are used as the parameter in a call to RegisterClipboardFormat. +For example: + + CLIPFORMAT foo = RegisterClipboardFormat(vCardClipboardFormat); + +*/ + +#define vCardMimeType "text/x-vCard" +#define vCalendarMimeType "text/x-vCalendar" + +#undef DLLEXPORT +#include <qglobal.h> +#if defined(Q_WS_WIN) +#define DLLEXPORT(t) __declspec(dllexport) t +#else +#define DLLEXPORT(t) t +#endif + +#ifndef FALSE +#define FALSE 0 +#endif +#ifndef TRUE +#define TRUE 1 +#endif + +#include <stdlib.h> +#include <stdio.h> + + +#define VC7bitProp "7BIT" +#define VC8bitProp "8BIT" +#define VCAAlarmProp "AALARM" +#define VCAdditionalNamesProp "ADDN" +#define VCAdrProp "ADR" +#define VCAgentProp "AGENT" +#define VCAIFFProp "AIFF" +#define VCAOLProp "AOL" +#define VCAppleLinkProp "APPLELINK" +#define VCAttachProp "ATTACH" +#define VCAttendeeProp "ATTENDEE" +#define VCATTMailProp "ATTMAIL" +#define VCAudioContentProp "AUDIOCONTENT" +#define VCAVIProp "AVI" +#define VCBase64Prop "BASE64" +#define VCBBSProp "BBS" +#define VCBirthDateProp "BDAY" +#define VCBMPProp "BMP" +#define VCBodyProp "BODY" +#define VCBusinessRoleProp "ROLE" +#define VCCalProp "VCALENDAR" +#define VCCaptionProp "CAP" +#define VCCardProp "VCARD" +#define VCCarProp "CAR" +#define VCCategoriesProp "CATEGORIES" +#define VCCellularProp "CELL" +#define VCCGMProp "CGM" +#define VCCharSetProp "CHARSET" +#define VCCIDProp "CID" +#define VCCISProp "CIS" +#define VCCityProp "L" +#define VCClassProp "CLASS" +#define VCCommentProp "NOTE" +#define VCCompletedProp "COMPLETED" +#define VCContentIDProp "CONTENT-ID" +#define VCCountryNameProp "C" +#define VCDAlarmProp "DALARM" +#define VCDataSizeProp "DATASIZE" +#define VCDayLightProp "DAYLIGHT" +#define VCDCreatedProp "DCREATED" +#define VCDeliveryLabelProp "LABEL" +#define VCDescriptionProp "DESCRIPTION" +#define VCDIBProp "DIB" +#define VCDisplayStringProp "DISPLAYSTRING" +#define VCDomesticProp "DOM" +#define VCDTendProp "DTEND" +#define VCDTstartProp "DTSTART" +#define VCDueProp "DUE" +#define VCEmailAddressProp "EMAIL" +#define VCEncodingProp "ENCODING" +#define VCEndProp "END" +#define VCEventProp "VEVENT" +#define VCEWorldProp "EWORLD" +#define VCExNumProp "EXNUM" +#define VCExpDateProp "EXDATE" +#define VCExpectProp "EXPECT" +#define VCExtAddressProp "EXT ADD" +#define VCFamilyNameProp "F" +#define VCFaxProp "FAX" +#define VCFullNameProp "FN" +#define VCGeoProp "GEO" +#define VCGeoLocationProp "GEO" +#define VCGIFProp "GIF" +#define VCGivenNameProp "G" +#define VCGroupingProp "Grouping" +#define VCHomeProp "HOME" +#define VCIBMMailProp "IBMMail" +#define VCInlineProp "INLINE" +#define VCInternationalProp "INTL" +#define VCInternetProp "INTERNET" +#define VCISDNProp "ISDN" +#define VCJPEGProp "JPEG" +#define VCLanguageProp "LANG" +#define VCLastModifiedProp "LAST-MODIFIED" +#define VCLastRevisedProp "REV" +#define VCLocationProp "LOCATION" +#define VCLogoProp "LOGO" +#define VCMailerProp "MAILER" +#define VCMAlarmProp "MALARM" +#define VCMCIMailProp "MCIMAIL" +#define VCMessageProp "MSG" +#define VCMETProp "MET" +#define VCModemProp "MODEM" +#define VCMPEG2Prop "MPEG2" +#define VCMPEGProp "MPEG" +#define VCMSNProp "MSN" +#define VCNamePrefixesProp "NPRE" +#define VCNameProp "N" +#define VCNameSuffixesProp "NSUF" +#define VCNoteProp "NOTE" +#define VCOrgNameProp "ORGNAME" +#define VCOrgProp "ORG" +#define VCOrgUnit2Prop "OUN2" +#define VCOrgUnit3Prop "OUN3" +#define VCOrgUnit4Prop "OUN4" +#define VCOrgUnitProp "OUN" +#define VCPagerProp "PAGER" +#define VCPAlarmProp "PALARM" +#define VCParcelProp "PARCEL" +#define VCPartProp "PART" +#define VCPCMProp "PCM" +#define VCPDFProp "PDF" +#define VCPGPProp "PGP" +#define VCPhotoProp "PHOTO" +#define VCPICTProp "PICT" +#define VCPMBProp "PMB" +#define VCPostalBoxProp "BOX" +#define VCPostalCodeProp "PC" +#define VCPostalProp "POSTAL" +#define VCPowerShareProp "POWERSHARE" +#define VCPreferredProp "PREF" +#define VCPriorityProp "PRIORITY" +#define VCProcedureNameProp "PROCEDURENAME" +#define VCProdIdProp "PRODID" +#define VCProdigyProp "PRODIGY" +#define VCPronunciationProp "SOUND" +#define VCPSProp "PS" +#define VCPublicKeyProp "KEY" +#define VCQPProp "QP" +#define VCQuickTimeProp "QTIME" +#define VCQuotedPrintableProp "QUOTED-PRINTABLE" +#define VCRDateProp "RDATE" +#define VCRegionProp "R" +#define VCRelatedToProp "RELATED-TO" +#define VCRepeatCountProp "REPEATCOUNT" +#define VCResourcesProp "RESOURCES" +#define VCRNumProp "RNUM" +#define VCRoleProp "ROLE" +#define VCRRuleProp "RRULE" +#define VCRSVPProp "RSVP" +#define VCRunTimeProp "RUNTIME" +#define VCSequenceProp "SEQUENCE" +#define VCSnoozeTimeProp "SNOOZETIME" +#define VCStartProp "START" +#define VCStatusProp "STATUS" +#define VCStreetAddressProp "STREET" +#define VCSubTypeProp "SUBTYPE" +#define VCSummaryProp "SUMMARY" +#define VCTelephoneProp "TEL" +#define VCTIFFProp "TIFF" +#define VCTimeZoneProp "TZ" +#define VCTitleProp "TITLE" +#define VCTLXProp "TLX" +#define VCTodoProp "VTODO" +#define VCTranspProp "TRANSP" +#define VCUniqueStringProp "UID" +#define VCURLProp "URL" +#define VCURLValueProp "URLVAL" +#define VCValueProp "VALUE" +#define VCVersionProp "VERSION" +#define VCVideoProp "VIDEO" +#define VCVoiceProp "VOICE" +#define VCWAVEProp "WAVE" +#define VCWMFProp "WMF" +#define VCWorkProp "WORK" +#define VCX400Prop "X400" +#define VCX509Prop "X509" +#define VCXRuleProp "XRULE" + + +typedef struct VObject VObject; + +typedef struct VObjectIterator { + VObject* start; + VObject* next; + } VObjectIterator; + +extern DLLEXPORT(VObject*) newVObject(const char *id); +extern DLLEXPORT(void) deleteVObject(VObject *p); +extern DLLEXPORT(char*) dupStr(const char *s, unsigned int size); +extern DLLEXPORT(void) deleteStr(const char *p); +extern DLLEXPORT(void) unUseStr(const char *s); + +extern DLLEXPORT(void) setVObjectName(VObject *o, const char* id); +extern DLLEXPORT(void) setVObjectStringZValue(VObject *o, const char *s); +extern DLLEXPORT(void) setVObjectStringZValue_(VObject *o, const char *s); +extern DLLEXPORT(void) setVObjectIntegerValue(VObject *o, unsigned int i); +extern DLLEXPORT(void) setVObjectLongValue(VObject *o, unsigned long l); +extern DLLEXPORT(void) setVObjectAnyValue(VObject *o, void *t); +extern DLLEXPORT(VObject*) setValueWithSize(VObject *prop, void *val, unsigned int size); +extern DLLEXPORT(VObject*) setValueWithSize_(VObject *prop, void *val, unsigned int size); + +extern DLLEXPORT(const char*) vObjectName(VObject *o); +extern DLLEXPORT(const char*) vObjectStringZValue(VObject *o); +extern DLLEXPORT(unsigned int) vObjectIntegerValue(VObject *o); +extern DLLEXPORT(unsigned long) vObjectLongValue(VObject *o); +extern DLLEXPORT(void*) vObjectAnyValue(VObject *o); +extern DLLEXPORT(VObject*) vObjectVObjectValue(VObject *o); +extern DLLEXPORT(void) setVObjectVObjectValue(VObject *o, VObject *p); + +extern DLLEXPORT(VObject*) addVObjectProp(VObject *o, VObject *p); +extern DLLEXPORT(VObject*) addProp(VObject *o, const char *id); +extern DLLEXPORT(VObject*) addProp_(VObject *o, const char *id); +extern DLLEXPORT(VObject*) addPropValue(VObject *o, const char *p, const char *v); +extern DLLEXPORT(VObject*) addPropSizedValue_(VObject *o, const char *p, const char *v, unsigned int size); +extern DLLEXPORT(VObject*) addPropSizedValue(VObject *o, const char *p, const char *v, unsigned int size); +extern DLLEXPORT(VObject*) addGroup(VObject *o, const char *g); +extern DLLEXPORT(void) addList(VObject **o, VObject *p); + +extern DLLEXPORT(VObject*) isAPropertyOf(VObject *o, const char *id); + +extern DLLEXPORT(VObject*) nextVObjectInList(VObject *o); +extern DLLEXPORT(void) initPropIterator(VObjectIterator *i, VObject *o); +extern DLLEXPORT(int) moreIteration(VObjectIterator *i); +extern DLLEXPORT(VObject*) nextVObject(VObjectIterator *i); + +extern DLLEXPORT(const char*) lookupStr(const char *s); +extern DLLEXPORT(void) cleanStrTbl(); + +extern DLLEXPORT(void) cleanVObject(VObject *o); +extern DLLEXPORT(void) cleanVObjects(VObject *list); + +extern DLLEXPORT(const char*) lookupProp(const char* str); +extern DLLEXPORT(const char*) lookupProp_(const char* str); + +extern DLLEXPORT(void) writeVObjectToFile(char *fname, VObject *o); +extern DLLEXPORT(void) writeVObjectsToFile(char *fname, VObject *list); + +extern DLLEXPORT(int) vObjectValueType(VObject *o); + +/* return type of vObjectValueType: */ +#define VCVT_NOVALUE 0 + /* if the VObject has no value associated with it. */ +#define VCVT_STRINGZ 1 + /* if the VObject has value set by setVObjectStringZValue. */ +#define VCVT_UINT 2 + /* if the VObject has value set by setVObjectIntegerValue. */ +#define VCVT_ULONG 3 + /* if the VObject has value set by setVObjectLongValue. */ +#define VCVT_RAW 4 + /* if the VObject has value set by setVObjectAnyValue. */ +#define VCVT_VOBJECT 5 + /* if the VObject has value set by setVObjectVObjectValue. */ + +extern const char** fieldedProp; + +/*************************************************** + * The methods below are implemented in vcc.c (generated from vcc.y ) + ***************************************************/ + +/* NOTE regarding printVObject and writeVObject + +The functions below are not exported from the DLL because they +take a FILE* as a parameter, which cannot be passed across a DLL +interface (at least that is my experience). Instead you can use +their companion functions which take file names or pointers +to memory. However, if you are linking this code into +your build directly then you may find them a more convenient API +and you can go ahead and use them. If you try to use them with +the DLL LIB you will get a link error. +*/ +extern void writeVObject(FILE *fp, VObject *o); + + + +typedef void (*MimeErrorHandler)(char *); + +extern DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler); + +extern DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len); +extern DLLEXPORT(VObject*) Parse_MIME_FromFileName(char* fname); + + +/* NOTE regarding Parse_MIME_FromFile +The function above, Parse_MIME_FromFile, comes in two flavors, +neither of which is exported from the DLL. Each version takes +a CFile or FILE* as a parameter, neither of which can be +passed across a DLL interface (at least that is my experience). +If you are linking this code into your build directly then +you may find them a more convenient API that the other flavors +that take a file name. If you use them with the DLL LIB you +will get a link error. +*/ + + +#if INCLUDEMFC +extern VObject* Parse_MIME_FromFile(CFile *file); +#else +extern VObject* Parse_MIME_FromFile(FILE *file); +#endif + +extern DLLEXPORT(const char *) vObjectTypeInfo(VObject *o); + + +#endif /* __VOBJECT_H__ */ + + diff --git a/library/categoryeditbase_p.ui b/library/categoryeditbase_p.ui index a76e433..e192ae1 100644 --- a/library/categoryeditbase_p.ui +++ b/library/categoryeditbase_p.ui @@ -1,222 +1,242 @@ <!DOCTYPE UI><UI> <class>CategoryEditBase</class> <comment>/********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/</comment> <widget> <class>QWidget</class> <property stdset="1"> <name>name</name> <cstring>CategoryEditBase</cstring> </property> <property stdset="1"> <name>geometry</name> <rect> <x>0</x> <y>0</y> - <width>201</width> + <width>197</width> <height>287</height> </rect> </property> <property stdset="1"> <name>caption</name> <string>Category Edit</string> </property> <property> <name>layoutMargin</name> </property> <property> <name>layoutSpacing</name> </property> <vbox> <property stdset="1"> <name>margin</name> <number>3</number> </property> <property stdset="1"> <name>spacing</name> <number>3</number> </property> <widget> <class>QListView</class> <column> <property> <name>text</name> <string>Categories</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <column> <property> <name>text</name> <string>Application</string> </property> <property> <name>clickable</name> <bool>true</bool> </property> <property> <name>resizeable</name> <bool>true</bool> </property> </column> <item> <property> <name>text</name> <string>Categories Go Here</string> </property> <property> <name>text</name> <string></string> </property> <property> <name>pixmap</name> <pixmap></pixmap> </property> <property> <name>pixmap</name> <pixmap></pixmap> </property> </item> <property stdset="1"> <name>name</name> <cstring>lvView</cstring> </property> + <property> + <name>whatsThis</name> + <string>Check the categories this document belongs to.</string> + </property> </widget> <widget> <class>QLayoutWidget</class> <property stdset="1"> <name>name</name> <cstring>Layout2</cstring> </property> <hbox> <property stdset="1"> <name>margin</name> <number>0</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget> <class>QLineEdit</class> <property stdset="1"> <name>name</name> <cstring>txtCat</cstring> </property> + <property> + <name>whatsThis</name> + <string>Enter a new category here. Press <b>Add</b> to add it to the list.</string> + </property> </widget> <widget> <class>QToolButton</class> <property stdset="1"> <name>name</name> <cstring>cmdAdd</cstring> </property> <property stdset="1"> <name>focusPolicy</name> <enum>TabFocus</enum> </property> <property stdset="1"> <name>text</name> <string>Add</string> </property> + <property> + <name>whatsThis</name> + <string>Enter a new category to the left and press to add it to the list.</string> + </property> </widget> <widget> <class>QToolButton</class> <property stdset="1"> <name>name</name> <cstring>cmdDel</cstring> </property> <property stdset="1"> <name>focusPolicy</name> <enum>TabFocus</enum> </property> <property stdset="1"> <name>text</name> <string></string> </property> <property stdset="1"> <name>pixmap</name> <pixmap>image0</pixmap> </property> + <property> + <name>whatsThis</name> + <string>Press to delete the highlighted category.</string> + </property> </widget> <widget> <class>QCheckBox</class> <property stdset="1"> <name>name</name> <cstring>chkGlobal</cstring> </property> <property stdset="1"> <name>text</name> <string>Global</string> </property> + <property> + <name>whatsThis</name> + <string>Check to make this property available to all applications.</string> + </property> </widget> </hbox> </widget> </vbox> </widget> <images> <image> <name>image0</name> <data format="XPM.GZ" length="499">789ccd904d6ac3301046f73e85f0ec4c71a2ca2a36214748e9b250b2188d4649164e203f8b527af7ea934963e805fa49a0790f4948b368ccfbdbc6348bea72e5eb418cecf96c9a781bc7cf8fedfaabaaed8bc97330b67eaaead688793d1d1535e59a9625c01dd059b77465a7003dfbc13330017bd7dbde0103903bb6dc0115285e9ec503191815031881a9a4bc0121626aa74c8eb2092479a1bba318a3aa26520d74771cb46811a1dfb38939e4a4448ffb0a8ba4dddcc5c0b0ffc1f15f87aee48fa4d28276d6aba92970dfabea074d4776b4</data> </image> </images> <connections> <connection> <sender>lvView</sender> <signal>selectionChanged(QListViewItem*)</signal> <receiver>CategoryEditBase</receiver> <slot>slotSetText( QListViewItem* )</slot> </connection> <connection> <sender>cmdAdd</sender> <signal>clicked()</signal> <receiver>CategoryEditBase</receiver> <slot>slotAdd()</slot> </connection> <connection> <sender>cmdDel</sender> <signal>clicked()</signal> <receiver>CategoryEditBase</receiver> <slot>slotRemove()</slot> </connection> <connection> <sender>txtCat</sender> <signal>textChanged(const QString&)</signal> <receiver>CategoryEditBase</receiver> <slot>slotTextChanged(const QString &)</slot> </connection> <connection> <sender>chkGlobal</sender> <signal>toggled(bool)</signal> <receiver>CategoryEditBase</receiver> <slot>slotSetGlobal( bool )</slot> </connection> <slot access="public">slotSetGlobal( bool )</slot> <slot access="public">slotAdd()</slot> <slot access="public">slotRemove()</slot> <slot access="public">slotSetText( QListViewItem* )</slot> <slot access="public">slotTextChanged(const QString &)</slot> </connections> diff --git a/library/datebookmonth.cpp b/library/datebookmonth.cpp index f4b3e6b..272c223 100644 --- a/library/datebookmonth.cpp +++ b/library/datebookmonth.cpp @@ -1,117 +1,123 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "config.h" #include "datebookmonth.h" #include "datebookdb.h" -#include <qpe/event.h> +#include <qtopia/private/event.h> #include "resource.h" #include "qpeapplication.h" #include "timestring.h" #include <qtoolbutton.h> #include <qspinbox.h> #include <qcombobox.h> #include <qdatetime.h> #include <qpainter.h> #include <qpopupmenu.h> +#include <qvaluestack.h> +#include <qwhatsthis.h> DateBookMonthHeader::DateBookMonthHeader( QWidget *parent, const char *name ) : QHBox( parent, name ) { setBackgroundMode( PaletteButton ); begin = new QToolButton( this ); begin->setFocusPolicy(NoFocus); begin->setPixmap( Resource::loadPixmap( "start" ) ); begin->setAutoRaise( TRUE ); begin->setFixedSize( begin->sizeHint() ); + QWhatsThis::add( begin, tr("Show January in the selected year") ); back = new QToolButton( this ); back->setFocusPolicy(NoFocus); back->setPixmap( Resource::loadPixmap( "back" ) ); back->setAutoRaise( TRUE ); back->setFixedSize( back->sizeHint() ); + QWhatsThis::add( back, tr("Show the previous month") ); month = new QComboBox( FALSE, this ); for ( int i = 0; i < 12; ++i ) month->insertItem( Calendar::nameOfMonth( i + 1 ) ); year = new QSpinBox( 1752, 8000, 1, this ); next = new QToolButton( this ); next->setFocusPolicy(NoFocus); next->setPixmap( Resource::loadPixmap( "forward" ) ); next->setAutoRaise( TRUE ); next->setFixedSize( next->sizeHint() ); + QWhatsThis::add( next, tr("Show the next month") ); end = new QToolButton( this ); end->setFocusPolicy(NoFocus); end->setPixmap( Resource::loadPixmap( "finish" ) ); end->setAutoRaise( TRUE ); end->setFixedSize( end->sizeHint() ); + QWhatsThis::add( end, tr("Show December in the selected year") ); connect( month, SIGNAL( activated( int ) ), this, SLOT( updateDate() ) ); connect( year, SIGNAL( valueChanged( int ) ), this, SLOT( updateDate() ) ); connect( begin, SIGNAL( clicked() ), this, SLOT( firstMonth() ) ); connect( end, SIGNAL( clicked() ), this, SLOT( lastMonth() ) ); connect( back, SIGNAL( clicked() ), this, SLOT( monthBack() ) ); connect( next, SIGNAL( clicked() ), this, SLOT( monthForward() ) ); back->setAutoRepeat( TRUE ); next->setAutoRepeat( TRUE ); } DateBookMonthHeader::~DateBookMonthHeader() { } void DateBookMonthHeader::updateDate() { emit dateChanged( year->value(), month->currentItem() + 1 ); } void DateBookMonthHeader::firstMonth() { emit dateChanged( year->value(), 1 ); month->setCurrentItem( 0 ); } void DateBookMonthHeader::lastMonth() { emit dateChanged( year->value(), 12 ); month->setCurrentItem( 11 ); } void DateBookMonthHeader::monthBack() { if ( month->currentItem() > 0 ) { emit dateChanged( year->value(), month->currentItem() ); month->setCurrentItem( month->currentItem() - 1 ); } else { emit dateChanged( year->value() - 1, 12 ); // we have a signal set to a changed value in year so we only need to change @@ -409,305 +415,336 @@ void DateBookMonth::setDate( int y, int m ) if ( (y != year) || (m != month) ) { year = y; month = m; QDate nd( y, m, 1 ); if ( nd.daysInMonth() < day ) day = nd.daysInMonth(); table->setDate( year, month, day ); } } void DateBookMonth::setDate( int y, int m, int d ) { header->setDate( y, m); table->setDate( y, m, d); year = y; month = m; day = d; } /* called when we wish to close or pass back the date */ void DateBookMonth::finalDate(int y, int m, int d) { setDate( y, m, d ); emit dateClicked(y, m, d); // emit dateClicked(QDate(y, m, d).toString()); if ( autoClose && parentWidget() ) parentWidget()->close(); } void DateBookMonth::setDate( QDate d) { setDate(d.year(), d.month(), d.day()); } void DateBookMonth::redraw() { table->setDate( year, month, day ); table->redraw(); } QDate DateBookMonth::selectedDate() const { if ( !table ) return QDate::currentDate(); int y, m, d; table->getDate( y, m, d ); - qDebug( "got %d %d %d", y, m, d ); return QDate( y, m, d ); } void DateBookMonth::slotWeekChange( bool startOnMonday ) { table->setWeekStart( startOnMonday ); } void DateBookMonth::keyPressEvent( QKeyEvent *e ) { switch(e->key()) { case Key_Up: setDate(QDate(year, month, day).addDays(-7)); break; case Key_Down: setDate(QDate(year, month, day).addDays(7)); break; case Key_Left: setDate(QDate(year, month, day).addDays(-1)); break; case Key_Right: setDate(QDate(year, month, day).addDays(1)); break; case Key_Space: qWarning("space"); emit dateClicked(year, month, day); if ( autoClose && parentWidget() ) parentWidget()->close(); break; default: qWarning("ignore"); e->ignore(); break; } } //--------------------------------------------------------------------------- class DayItemMonthPrivate { public: DayItemMonthPrivate() {}; ~DayItemMonthPrivate() { mDayEvents.clear(); }; QValueList<EffectiveEvent> mDayEvents; }; DayItemMonth::DayItemMonth( QTable *table, EditType et, const QString &t ) : QTableItem( table, et, t ) { d = new DayItemMonthPrivate(); } DayItemMonth::~DayItemMonth() { daysEvents.clear(); delete d; } void DayItemMonth::setEvents( const QValueList<EffectiveEvent> &effEv ) { d->mDayEvents = effEv; } void DayItemMonth::clearEffEvents() { d->mDayEvents.clear(); } void DayItemMonth::paint( QPainter *p, const QColorGroup &cg, const QRect &cr, bool selected ) { + p->save(); + QColorGroup g( cg ); g.setBrush( QColorGroup::Base, back ); g.setColor( QColorGroup::Text, forg ); - p->fillRect( 0, 0, cr.width(), cr.height(), selected ? g.brush( QColorGroup::Highlight ) : g.brush( QColorGroup::Base ) ); - if ( selected ) p->setPen( g.highlightedText() ); else p->setPen( g.text() ); - p->save(); - QFont f = p->font(); - f.setPointSize( ( f.pointSize() / 3 ) * 2 ); - p->setFont( f ); - QFontMetrics fm( f ); - p->drawText( 1, 1 + fm.ascent(), QString::number( day() ) ); - p->restore(); - // Put indicators for something like this, (similar to PalmOS) - // Before noon: item at top of the day - // At noon: put a small item at the middle - // After noon: put an indicator at the bottom of the day - // an all day event: mark with a circle in the middle (a la DateBook+) - bool beforeNoon = false; - bool atNoon = false; - bool afterNoon = false; - bool bAllDay = false; - bool bRepeatAfter = false; - bool bRepeatBefore = false; - bool bRepeatNoon = false; - bool straddleAfter = false; - bool straddleBefore = false; + QValueStack<int> normalLine; + QValueStack<int> repeatLine; + QValueStack<int> travelLine; + + bool normalAllDay = FALSE; + bool repeatAllDay = FALSE; + bool travelAllDay = FALSE; + QValueListIterator<EffectiveEvent> itDays = d->mDayEvents.begin(); + for ( ; itDays != d->mDayEvents.end(); ++itDays ) { - if ( (*itDays).event().type() == Event::AllDay ) - bAllDay = TRUE; - else if ( (*itDays).start().hour() < 12 ) { - beforeNoon = TRUE; - if ( (*itDays).end().hour() > 12 ) { - atNoon = TRUE; - straddleBefore = TRUE; + int w = cr.width(); + Event ev = (*itDays).event(); + + int f = (*itDays).start().hour(); // assume Effective event + int t = (*itDays).end().hour(); // is truncated. + + if (ev.isAllDay()) { + if (!ev.hasRepeat()) + normalAllDay = TRUE; + else + repeatAllDay = TRUE; + } else { + int sLine, eLine; + if (f == 0) + sLine = 0; + else if (f < 8 ) + sLine = 1; + else if (f >= 17) + sLine = w - 4; + else { + sLine = (f - 8) * (w - 8); + if (sLine) + sLine /= 8; + sLine += 4; } - if ( (*itDays).end().hour() > 14 || - (*itDays).end().hour() == 14 && (*itDays).end().minute() > 0 ) { - afterNoon = TRUE; - straddleAfter = TRUE; + if (t == 23) + eLine = w; + else if (t < 8) + eLine = 4; + else if (t >= 17) + eLine = w - 1; + else { + eLine = (t - 8) * (w - 8); + if (eLine) + eLine /= 8; + eLine += 4; } - if ( (*itDays).event().hasRepeat() ) - bRepeatBefore = TRUE; - } else if ( (*itDays).start().hour() == 12 ) { - if ( !atNoon ) - atNoon = TRUE; - if ( (*itDays).event().hasRepeat() ) - bRepeatNoon = TRUE; - if ( (*itDays).end().hour() > 14 || - (*itDays).end().hour() == 14 && (*itDays).end().minute() > 0 ) { - afterNoon = TRUE; - straddleAfter = TRUE; + if (!ev.hasRepeat()) { + normalLine.push(sLine); + normalLine.push(eLine); + } else { + repeatLine.push(sLine); + repeatLine.push(eLine); } - } else if ( (*itDays).start().hour() > 12 ) { - afterNoon = TRUE; - if ( (*itDays).event().hasRepeat() ) - bRepeatAfter = TRUE; } } - int x = cr.width() - 13; - if ( beforeNoon ) { - p->setBrush( blue ); - p->drawRect( x, 2, 10, 10 ); - if ( bRepeatBefore ) - p->fillRect( x + 5, 4, 3, 3, white ); - } - if ( atNoon ) { - p->setBrush( blue ); - p->drawRect( x, 14, 10, 5 ); - if ( bRepeatNoon ) - p->fillRect( x + 5, 16, 3, 2, white ); - } - if ( straddleBefore ) { - p->drawLine( x, 11, x, 14 ); - p->fillRect( x + 1, 11, 8, 4, blue ); - p->drawLine( x + 9, 11, x + 9, 14 ); - } - if ( afterNoon ) { - p->setBrush( blue ); - p->drawRect( x, 21, 10, 10 ); - if ( bRepeatAfter ) - p->fillRect( x + 5, 23, 3, 3, white ); + + // draw the background + if (normalAllDay || repeatAllDay || travelAllDay) { + p->save(); + + if (normalAllDay) + if (repeatAllDay) { + p->fillRect( 0, 0, cr.width(), cr.height() / 2, + colorNormalLight ); + p->fillRect( 0, cr.height() / 2, cr.width(), cr.height() / 2, + colorRepeatLight ); + } else + p->fillRect( 0, 0, cr.width(), cr.height(), + colorNormalLight ); + else if (repeatAllDay) + p->fillRect( 0, 0, cr.width(), cr.height(), + colorRepeatLight ); + } else { + p->fillRect( 0, 0, cr.width(), + cr.height(), selected + ? g.brush( QColorGroup::Highlight ) + : g.brush( QColorGroup::Base ) ); } - if ( straddleAfter ) { - p->drawLine( x, 18, x, 21 ); - p->fillRect( x + 1, 18, 8, 4, blue ); - p->drawLine( x + 9, 18, x + 9, 21 ); + + // The lines + // now for the lines. + int h = 5; + int y = cr.height() / 2 - h; + + while(normalLine.count() >= 2) { + int x2 = normalLine.pop(); + int x1 = normalLine.pop(); + if (x2 < x1 + 2) + x2 = x1 + 2; + p->fillRect(x1, y, x2 - x1, h, colorNormal); } - if ( bAllDay ) { - p->setBrush( green ); - p->drawEllipse( cr.width() / 2 - 7, cr.height() / 2 - 5, 10, 10 ); + + y += h; + + while(repeatLine.count() >= 2) { + int x2 = repeatLine.pop(); + int x1 = repeatLine.pop(); + if (x2 < x1 + 2) + x2 = x1 + 2; + p->fillRect(x1, y, x2 - x1, h, colorRepeat); } + + + // Finally, draw the number. + QFont f = p->font(); + f.setPointSize( ( f.pointSize() / 3 ) * 2 ); + p->setFont( f ); + QFontMetrics fm( f ); + p->drawText( 1, 1 + fm.ascent(), QString::number( day() ) ); + + p->restore(); } void DayItemMonth::setType( Calendar::Day::Type t ) { switch ( t ) { case Calendar::Day::PrevMonth: case Calendar::Day::NextMonth: back = QBrush( QColor( 224, 224, 224 ) ); forg = black; break; case Calendar::Day::ThisMonth: back = QBrush( white ); forg = black; break; } typ = t; } DateButton::DateButton( bool longDate, QWidget *parent, const char * name ) :QPushButton( parent, name ) { longFormat = longDate; df = DateFormat('/', DateFormat::MonthDayYear, DateFormat::MonthDayYear); setDate( QDate::currentDate() ); connect(this,SIGNAL(pressed()),this,SLOT(pickDate())); } void DateButton::pickDate() { static QPopupMenu *m1 = 0; static DateBookMonth *picker = 0; if ( !m1 ) { m1 = new QPopupMenu( this ); picker = new DateBookMonth( m1, 0, TRUE ); m1->insertItem( picker ); connect( picker, SIGNAL( dateClicked( int, int, int ) ), this, SLOT( setDate( int, int, int ) ) ); connect( picker, SIGNAL( dateClicked( int, int, int ) ), this, SIGNAL( dateSelected( int, int, int ) ) ); connect( m1, SIGNAL( aboutToHide() ), this, SLOT( gotHide() ) ); } picker->slotWeekChange( weekStartsMonday ); picker->setDate( currDate.year(), currDate.month(), currDate.day() ); m1->popup(mapToGlobal(QPoint(0,height()))); picker->setFocus(); } void DateButton::gotHide() { // we have to redo the button... setDown( false ); } // void dateSelected( int year, int month, int day ); void DateButton::setWeekStartsMonday( int b ) { weekStartsMonday = b; } void DateButton::setDate( int y, int m, int d ) { setDate( QDate( y,m,d) ); } void DateButton::setDate( QDate d ) { currDate = d; setText( longFormat ? TimeString::longDateString( d, df ) : TimeString::shortDate( d, df ) ); } void DateButton::setDateFormat( DateFormat f ) { df = f; setDate( currDate ); } + +bool DateButton::customWhatsThis() const +{ + return TRUE; +} + diff --git a/library/datebookmonth.h b/library/datebookmonth.h index a7647ae..3c57c19 100644 --- a/library/datebookmonth.h +++ b/library/datebookmonth.h @@ -1,71 +1,71 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef DATEBOOKMONTH #define DATEBOOKMONTH -#include <qpe/event.h> +#include <qtopia/private/event.h> #include <qvbox.h> #include <qhbox.h> #include <qdatetime.h> #include <qvaluelist.h> #include <qtable.h> #include <qpushbutton.h> #include "calendar.h" #include "timestring.h" class QToolButton; class QComboBox; class QSpinBox; class Event; class DateBookDB; class DateBookMonthHeaderPrivate; class DateBookMonthHeader : public QHBox { Q_OBJECT public: DateBookMonthHeader( QWidget *parent = 0, const char *name = 0 ); ~DateBookMonthHeader(); void setDate( int year, int month ); signals: void dateChanged( int year, int month ); protected slots: void keyPressEvent(QKeyEvent *e ) { e->ignore(); } private slots: void updateDate(); void firstMonth(); void lastMonth(); void monthBack(); void monthForward(); private: QToolButton *begin, *back, *next, *end; QComboBox *month; QSpinBox *year; DateBookMonthHeaderPrivate *d; int focus; @@ -142,70 +142,72 @@ private: DateBookDB *db; DateBookMonthTablePrivate *d; }; class DateBookMonthPrivate; class DateBookMonth : public QVBox { Q_OBJECT public: DateBookMonth( QWidget *parent = 0, const char *name = 0, bool ac = FALSE, DateBookDB *data = 0 ); ~DateBookMonth(); QDate selectedDate() const; signals: void dateClicked( int year, int month, int day ); public slots: void setDate( int y, int m ); void setDate( int y, int m, int d ); void setDate( QDate ); void redraw(); void slotWeekChange( bool ); protected slots: virtual void keyPressEvent(QKeyEvent *e); private slots: void forwardDateClicked( int y, int m, int d ) { emit dateClicked( y, m, d ); } void finalDate(int, int, int); private: DateBookMonthHeader *header; DateBookMonthTable *table; int year, month, day; bool autoClose; class DateBookMonthPrivate *d; }; class DateButton : public QPushButton { Q_OBJECT public: DateButton( bool longDate, QWidget *parent, const char * name = 0 ); QDate date() const { return currDate; } + bool customWhatsThis() const; + signals: void dateSelected( int year, int month, int day ); public slots: void setDate( int y, int m, int d ); void setDate( QDate ); void setWeekStartsMonday( int ); void setDateFormat( DateFormat ); private slots: void pickDate(); void gotHide(); private: bool longFormat; bool weekStartsMonday; QDate currDate; DateFormat df; }; #endif diff --git a/library/fileselector.cpp b/library/fileselector.cpp index 013f43a..382012f 100644 --- a/library/fileselector.cpp +++ b/library/fileselector.cpp @@ -1,353 +1,563 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ // WARNING: Do *NOT* define this yourself. The SL5xxx from SHARP does NOT // have this class. #define QTOPIA_INTERNAL_FSLP #include "fileselector.h" #include "fileselector_p.h" #include "global.h" #include "resource.h" #include "config.h" #include "applnk.h" #include "storage.h" #include "qpemenubar.h" +#ifdef QWS #include "qcopchannel_qws.h" +#endif #include "lnkproperties.h" #include "applnk.h" #include "qpeapplication.h" #include "categorymenu.h" +#include "categoryselect.h" +#include "mimetype.h" +#include "categories.h" #include <stdlib.h> #include <qdir.h> #include <qwidget.h> #include <qpopupmenu.h> #include <qtoolbutton.h> #include <qpushbutton.h> #include <qheader.h> #include <qtooltip.h> +#include <qwhatsthis.h> +class TypeCombo : public QComboBox +{ + Q_OBJECT +public: + TypeCombo( QWidget *parent, const char *name=0 ) + : QComboBox( parent, name ) + { + connect( this, SIGNAL(activated(int)), this, SLOT(selectType(int)) ); + } + + void reread( DocLnkSet &files, const QString &filter ); + +signals: + void selected( const QString & ); + +protected slots: + void selectType( int idx ) { + emit selected( typelist[idx] ); + } + +protected: + QStringList typelist; + QString prev; +}; + +void TypeCombo::reread( DocLnkSet &files, const QString &filter ) +{ + typelist.clear(); + QStringList filters = QStringList::split( ';', filter ); + int pos = filter.find( '/' ); + //### do for each filter + if ( filters.count() == 1 && pos >= 0 && filter[pos+1] != '*' ) { + typelist.append( filter ); + clear(); + QString minor = filter.mid( pos+1 ); + minor[0] = minor[0].upper(); + insertItem( tr("%1 files").arg(minor) ); + setCurrentItem(0); + setEnabled( FALSE ); + return; + } + + QListIterator<DocLnk> dit( files.children() ); + for ( ; dit.current(); ++dit ) { + if ( !typelist.contains( (*dit)->type() ) ) + typelist.append( (*dit)->type() ); + } + + QStringList types; + QStringList::ConstIterator it; + for (it = typelist.begin(); it!=typelist.end(); ++it) { + QString t = *it; + if ( t.left(12) == "application/" ) { + MimeType mt(t); + const AppLnk* app = mt.application(); + if ( app ) + t = app->name(); + else + t = t.mid(12); + } else { + QString major, minor; + int pos = t.find( '/' ); + if ( pos >= 0 ) { + major = t.left( pos ); + minor = t.mid( pos+1 ); + } + if ( minor.find( "x-" ) == 0 ) + minor = minor.mid( 2 ); + minor[0] = minor[0].upper(); + major[0] = major[0].upper(); + if ( filters.count() > 1 ) + t = tr("%1 %2", "minor mimetype / major mimetype").arg(minor).arg(major); + else + t = minor; + } + types += tr("%1 files").arg(t); + } + for (it = filters.begin(); it!=filters.end(); ++it) { + typelist.append( *it ); + int pos = (*it).find( '/' ); + if ( pos >= 0 ) { + QString maj = (*it).left( pos ); + maj[0] = maj[0].upper(); + types << tr("All %1 files").arg(maj); + } + } + if ( filters.count() > 1 ) { + typelist.append( filter ); + types << tr("All files"); + } + prev = currentText(); + clear(); + insertStringList(types); + for (int i=0; i<count(); i++) { + if ( text(i) == prev ) { + setCurrentItem(i); + break; + } + } + if ( prev.isNull() ) + setCurrentItem(count()-1); + setEnabled( TRUE ); +} + + +//=========================================================================== FileSelectorItem::FileSelectorItem( QListView *parent, const DocLnk &f ) : QListViewItem( parent ), fl( f ) { setText( 0, f.name() ); setPixmap( 0, f.pixmap() ); } FileSelectorItem::~FileSelectorItem() { } -class FileSelectorViewPrivate -{ -public: - CategoryMenu *cm; - bool m_noItems:1; -}; - -FileSelectorView::FileSelectorView( const QString &f, QWidget *parent, const char *name ) - : QListView( parent, name ), filter( f ), count( 0 ) +FileSelectorView::FileSelectorView( QWidget *parent, const char *name ) + : QListView( parent, name ) { - d = new FileSelectorViewPrivate(); - d->cm = 0; - d->m_noItems = false; setAllColumnsShowFocus( TRUE ); addColumn( tr( "Name" ) ); header()->hide(); - - fileManager = new FileManager; - reread(); - QCopChannel *channel = new QCopChannel( "QPE/Card", this ); - connect( channel, SIGNAL(received(const QCString &, const QByteArray &)), - this, SLOT(cardMessage( const QCString &, const QByteArray &)) ); } FileSelectorView::~FileSelectorView() { } -void FileSelectorView::reread() -{ - QString oldFile; - FileSelectorItem *item; - if( !d->m_noItems ) { // there are items - item = (FileSelectorItem *)selectedItem(); - if ( item ) - oldFile = item->file().file(); - } - clear(); - DocLnkSet files; - Global::findDocuments(&files, filter); - count = files.children().count(); - if(count == 0 ){ // No Documents - d->m_noItems = true; - QListViewItem *it = new QListViewItem(this, tr("There are no files in this directory." ), "empty" ); - it->setSelectable(FALSE ); - return; - } - QListIterator<DocLnk> dit( files.children() ); - for ( ; dit.current(); ++dit ) { - if (d->cm) - if (!d->cm->isSelected((**dit).categories())) - continue; - item = new FileSelectorItem( this, **dit ); - if ( item->file().file() == oldFile ) - setCurrentItem( item ); - } - if ( !selectedItem() ) - setCurrentItem( firstChild() ); -} - -void FileSelectorView::setCategoryFilter(CategoryMenu *cm) -{ - d->cm = cm; - connect(cm, SIGNAL(categoryChange()), this, SLOT(categoryChanged()) ); -} - -void FileSelectorView::categoryChanged() { reread(); } - -void FileSelectorView::cardMessage( const QCString &msg, const QByteArray &) -{ - if ( msg == "mtabChanged()" ) - reread(); -} - void FileSelectorView::keyPressEvent( QKeyEvent *e ) { QString txt = e->text(); if (e->key() == Key_Space) emit returnPressed( currentItem() ); else if ( !txt.isNull() && txt[0] > ' ' && e->key() < 0x1000 ) e->ignore(); else QListView::keyPressEvent(e); } +class NewDocItem : public FileSelectorItem +{ +public: + NewDocItem( QListView *parent, const DocLnk &f ) + : FileSelectorItem( parent, f ) { + setText( 0, QObject::tr("New Document") ); + QImage img( Resource::loadImage( "new" ) ); + QPixmap pm; + pm = img.smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize() ); + setPixmap( 0, pm ); + } + QString key ( int, bool ) const { + return QString("\n"); + } + + void paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int alignment ) { + QFont oldFont = p->font(); + QFont newFont = p->font(); + newFont.setWeight( QFont::Bold ); + p->setFont( newFont ); + FileSelectorItem::paintCell( p, cg, column, width, alignment ); + p->setFont( oldFont ); + } + + int width( const QFontMetrics &fm, const QListView *v, int c ) const { + return FileSelectorItem::width( fm, v, c )*4/3; // allow for bold font + } +}; + +//=========================================================================== + class FileSelectorPrivate { public: - CategoryMenu *cm; - QMenuBar *mb; + TypeCombo *typeCombo; + CategorySelect *catSelect; + QValueList<QRegExp> mimeFilters; + int catId; + bool showNew; + NewDocItem *newDocItem; + DocLnkSet files; + QHBox *toolbar; }; /*! \class FileSelector fileselector.h \brief The FileSelector widget allows the user to select DocLnk objects. + + This class presents a file selection dialog to the user. This widget + is usually the first widget seen in a \link docwidget.html + document-oriented application\endlink. The developer will most often + create this widget in combination with a <a + href="../qt/qwidgetstack.html"> QWidgetStack</a> and the appropriate + editor and/or viewer widget for their application. This widget + should be shown first and the user can the select which document + they wish to operate on. Please refer to the implementation of + texteditor for an example of how to tie these classes together. + + Use setNewVisible() depending on whether the application can be used + to create new files or not. Use setCloseVisible() depending on + whether the user may leave the dialog without creating or selecting + a document or not. The number of files in the view is available from + fileCount(). To force the view to be updated call reread(). + + If the user presses the 'New Document' button the newSelected() + signal is emitted. If the user selects an existing file the + fileSelected() signal is emitted. The selected file's \link + doclnk.html DocLnk\endlink is available from the selected() + function. If the file selector is no longer necessary the closeMe() + signal is emitted. + + \ingroup qtopiaemb + \sa FileManager */ /*! Constructs a FileSelector with mime filter \a f. The standard Qt \a parent and \a name parameters are passed to the - parent. + parent widget. - If \a newVisible is TRUE, the widget has an button allowing the user - the create "new" documents - editor applications will have this while - viewer applications will not. + If \a newVisible is TRUE, the widget has a button to allow the user + the create "new" documents; this is useful for applications that can + create and edit documents but not suitable for applications that + only provide viewing. - If \a closeVisible is TRUE, the widget has an button allowinf the user - to select "no document". + \a closeVisible is deprecated \sa DocLnkSet::DocLnkSet() */ FileSelector::FileSelector( const QString &f, QWidget *parent, const char *name, bool newVisible, bool closeVisible ) : QVBox( parent, name ), filter( f ) { setMargin( 0 ); setSpacing( 0 ); - QHBox *top = new QHBox( this ); - top->setBackgroundMode( PaletteButton ); // same colour as toolbars - top->setSpacing( 0 ); - - QWidget *spacer = new QWidget( top ); - spacer->setBackgroundMode( PaletteButton ); d = new FileSelectorPrivate(); - d->mb = new QMenuBar(spacer); - d->cm = new CategoryMenu("Document View", this); - QPEMenuToolFocusManager::manager()->addWidget( d->mb ); - d->mb->insertItem(tr("View"), d->cm); + d->newDocItem = 0; + d->showNew = newVisible; + d->catId = -2; // All files + d->toolbar = new QHBox( this ); + d->toolbar->setBackgroundMode( PaletteButton ); // same colour as toolbars + d->toolbar->setSpacing( 0 ); + d->toolbar->hide(); - QToolButton *tb = new QToolButton( top ); - tb->setPixmap( Resource::loadPixmap( "new" ) ); - connect( tb, SIGNAL( clicked() ), this, SLOT( createNew() ) ); - buttonNew = tb; - tb->setFixedSize( 18, 20 ); // tb->sizeHint() ); - tb->setAutoRaise( TRUE ); - QToolTip::add( tb, tr( "Create a new Document" ) ); - QPEMenuToolFocusManager::manager()->addWidget( tb ); + QWidget *spacer = new QWidget( d->toolbar ); + spacer->setBackgroundMode( PaletteButton ); - tb = new QToolButton( top ); + QToolButton *tb = new QToolButton( d->toolbar ); tb->setPixmap( Resource::loadPixmap( "close" ) ); connect( tb, SIGNAL( clicked() ), this, SIGNAL( closeMe() ) ); buttonClose = tb; tb->setFixedSize( 18, 20 ); // tb->sizeHint() ); tb->setAutoRaise( TRUE ); QToolTip::add( tb, tr( "Close the File Selector" ) ); QPEMenuToolFocusManager::manager()->addWidget( tb ); - view = new FileSelectorView( filter, this, "fileview" ); - view->setCategoryFilter(d->cm); + view = new FileSelectorView( this, "fileview" ); QPEApplication::setStylusOperation( view->viewport(), QPEApplication::RightOnHold ); connect( view, SIGNAL( mouseButtonClicked( int, QListViewItem *, const QPoint &, int ) ), this, SLOT( fileClicked( int, QListViewItem *, const QPoint &, int ) ) ); connect( view, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint &, int ) ), this, SLOT( filePressed( int, QListViewItem *, const QPoint &, int ) ) ); connect( view, SIGNAL( returnPressed( QListViewItem * ) ), this, SLOT( fileClicked( QListViewItem * ) ) ); - setNewVisible( newVisible ); + QHBox *hb = new QHBox( this ); + d->typeCombo = new TypeCombo( hb ); + connect( d->typeCombo, SIGNAL(selected(const QString&)), + this, SLOT(typeSelected(const QString&)) ); + QWhatsThis::add( d->typeCombo, tr("Show documents of this type") ); + + Categories c; + c.load(categoryFileName()); + QArray<int> vl( 0 ); + d->catSelect = new CategorySelect( hb ); + d->catSelect->setRemoveCategoryEdit( TRUE ); + d->catSelect->setCategories( vl, "Document View", tr("Document View") ); + d->catSelect->setAllCategories( TRUE ); + connect( d->catSelect, SIGNAL(signalSelected(int)), this, SLOT(catSelected(int)) ); + QWhatsThis::add( d->catSelect, tr("Show documents in this category") ); + setCloseVisible( closeVisible ); + + QCopChannel *channel = new QCopChannel( "QPE/Card", this ); + connect( channel, SIGNAL(received(const QCString &, const QByteArray &)), + this, SLOT(cardMessage( const QCString &, const QByteArray &)) ); + + reread(); + updateWhatsThis(); } /*! Destroys the widget. */ FileSelector::~FileSelector() { - + delete d; } /*! - Returns the number of files in the view. If this is zero, and editor - application might avoid using the selector and immediately start with + Returns the number of files in the view. If this is zero, an editor + application might bypass the selector and immediately start with a "new" document. */ int FileSelector::fileCount() { - return view->fileCount(); + return d->files.children().count();; } /*! - Causes the file selector to act as if the "new" button was chosen. + Calling this function is the programmatic equivalent of the user + pressing the "new" button. \sa newSelected(), closeMe() */ void FileSelector::createNew() { DocLnk f; emit newSelected( f ); emit closeMe(); } void FileSelector::fileClicked( int button, QListViewItem *i, const QPoint &, int ) { if ( !i ) return; - if(i->text(1) == QString::fromLatin1("empty" ) ) - return; - if ( button == Qt::LeftButton ) { fileClicked( i ); } } void FileSelector::filePressed( int button, QListViewItem *i, const QPoint &, int ) { - if ( !i ) + if ( !i || i == d->newDocItem ) return; - if(i->text(1) == QString::fromLatin1("empty" ) ) - return; - if ( button == Qt::RightButton ) { DocLnk l = ((FileSelectorItem *)i)->file(); LnkProperties prop( &l ); prop.showMaximized(); prop.exec(); - d->cm->reload(); reread(); } } void FileSelector::fileClicked( QListViewItem *i ) { if ( !i ) return; - emit fileSelected( ( (FileSelectorItem*)i )->file() ); - emit closeMe(); + if ( i == d->newDocItem ) { + createNew(); + } else { + emit fileSelected( ( (FileSelectorItem*)i )->file() ); + emit closeMe(); + } +} + +void FileSelector::typeSelected( const QString &type ) +{ + d->mimeFilters.clear(); + QStringList subFilter = QStringList::split(";", type); + for( QStringList::Iterator it = subFilter.begin(); it != subFilter.end(); ++it ) + d->mimeFilters.append( QRegExp(*it, FALSE, TRUE) ); + updateView(); } +void FileSelector::catSelected( int c ) +{ + d->catId = c; + updateView(); +} + +void FileSelector::cardMessage( const QCString &msg, const QByteArray &) +{ + if ( msg == "mtabChanged()" ) + reread(); +} + + /*! - Returns the selected DocLnk. The caller is responsible for deleting - the returned value. + Returns the selected \link doclnk.html DocLnk\endlink. The caller is + responsible for deleting the returned value. */ const DocLnk *FileSelector::selected() { FileSelectorItem *item = (FileSelectorItem *)view->selectedItem(); - if ( item ) + if ( item && item != d->newDocItem ) return new DocLnk( item->file() ); return NULL; } /*! \fn void FileSelector::fileSelected( const DocLnk &f ) - This signal is emitted when the user selects a file. - \a f is the file. + This signal is emitted when the user selects a document. + \a f is the document. */ /*! \fn void FileSelector::newSelected( const DocLnk &f ) - This signal is emitted when the user selects "new" file. - \a f is a DocLnk for the file. You will need to set the type - of the value after copying it. + This signal is emitted when the user selects a "new" document. + \a f is a DocLnk for the document. You will need to set the type + of the document after copying it. */ /*! \fn void FileSelector::closeMe() This signal is emitted when the user no longer needs to view the widget. */ /*! - Sets whether a "new document" button is visible, according to \a b. + If \a b is TRUE a "new document" entry is visible; if \a b is FALSE + this entry is not visible and the user is unable to create new + documents from the dialog. */ void FileSelector::setNewVisible( bool b ) { - if ( b ) - buttonNew->show(); - else - buttonNew->hide(); + if ( d->showNew != b ) { + d->showNew = b; + updateView(); + updateWhatsThis(); + } } /*! - Sets whether a "no document" button is visible, according to \a b. + If \a b is TRUE a "close" or "no document" button is visible; if \a + b is FALSE this button is not visible and the user is unable to + leave the dialog without creating or selecting a document. + + This function is deprecated. */ void FileSelector::setCloseVisible( bool b ) { - if ( b ) - buttonClose->show(); + if ( b ) + d->toolbar->show(); else - buttonClose->hide(); + d->toolbar->hide(); } /*! - Rereads the list of files. + Rereads the list of documents. */ void FileSelector::reread() { - view->reread(); + d->files.clear(); + Global::findDocuments(&d->files, filter); + d->typeCombo->reread( d->files, filter ); + updateView(); } +void FileSelector::updateView() +{ + FileSelectorItem *item = (FileSelectorItem *)view->selectedItem(); + if ( item == d->newDocItem ) + item = 0; + QString oldFile; + if ( item ) + oldFile = item->file().file(); + view->clear(); + QListIterator<DocLnk> dit( d->files.children() ); + for ( ; dit.current(); ++dit ) { + bool mimeMatch = FALSE; + if ( d->mimeFilters.count() ) { + QValueList<QRegExp>::Iterator it; + for ( it = d->mimeFilters.begin(); it != d->mimeFilters.end(); ++it ) { + if ( (*it).match((*dit)->type()) >= 0 ) { + mimeMatch = TRUE; + break; + } + } + } else { + mimeMatch = TRUE; + } + if ( mimeMatch && + (d->catId == -2 || (*dit)->categories().contains(d->catId) || + (d->catId == -1 && (*dit)->categories().isEmpty())) ) { + item = new FileSelectorItem( view, **dit ); + if ( item->file().file() == oldFile ) + view->setCurrentItem( item ); + } + } + + if ( d->showNew ) + d->newDocItem = new NewDocItem( view, DocLnk() ); + else + d->newDocItem = 0; + + if ( !view->selectedItem() || view->childCount() == 1 ) { + view->setCurrentItem( view->firstChild() ); + view->setSelected( view->firstChild(), TRUE ); + } +} + +void FileSelector::updateWhatsThis() +{ + QWhatsThis::remove( this ); + QString text = tr("Click to select a document from the list"); + if ( d->showNew ) + text += tr(", or select <b>New Document</b> to create a new document."); + text += tr("<br><br>Click and hold for document properties."); + QWhatsThis::add( this, text ); +} + +#include "fileselector.moc" + diff --git a/library/fileselector.h b/library/fileselector.h index 8cfdf13..1a6ace2 100644 --- a/library/fileselector.h +++ b/library/fileselector.h @@ -1,80 +1,112 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef FILESELECTOR_H #define FILESELECTOR_H #include <qhbox.h> #include <qvbox.h> #include <qtoolbutton.h> #include <qlistview.h> #include "filemanager.h" #include "applnk.h" class QPopupMenu; class QPushButton; class FileSelectorView; class FileSelectorItem : public QListViewItem { public: FileSelectorItem( QListView *parent, const DocLnk& f ); ~FileSelectorItem(); DocLnk file() const { return fl; } private: DocLnk fl; }; class FileSelectorPrivate; class FileSelector : public QVBox { Q_OBJECT public: - FileSelector( const QString &mimefilter, QWidget *parent, const char *name, bool newVisible = TRUE, bool closeVisible = TRUE ); + FileSelector( const QString &mimefilter, QWidget *parent, const char *name=0, bool newVisible = TRUE, bool closeVisible = TRUE ); ~FileSelector(); void setNewVisible( bool b ); void setCloseVisible( bool b ); void reread(); int fileCount(); - const DocLnk *selected(); + DocLnk selectedDocument() const + { + const DocLnk* rp = ((FileSelector*)this)->selected(); + if (!rp) { + DocLnk r; + return r; + } + DocLnk r(*rp); + delete rp; + return r; + } + + QValueList<DocLnk> fileList() const + { + ((FileSelector*)this)->fileCount(); // ensure all loaded when this is extended + + QValueList<DocLnk> list; + FileSelectorItem *item = (FileSelectorItem *)((QListView*)view)->firstChild(); + while (item) { + list.append(item->file()); + item = (FileSelectorItem *)item->nextSibling(); + } + + return list; + } signals: void fileSelected( const DocLnk & ); void newSelected( const DocLnk & ); void closeMe(); private slots: void createNew(); void fileClicked( int, QListViewItem *, const QPoint &, int ); // pressed to get 'right down' void filePressed( int, QListViewItem *, const QPoint &, int ); void fileClicked( QListViewItem *); + void typeSelected( const QString &type ); + void catSelected( int ); + void cardMessage( const QCString &, const QByteArray &); + +private: + void updateView(); + void updateWhatsThis(); private: + const DocLnk *selected(); // use selectedDocument() FileSelectorView *view; QString filter; QToolButton *buttonNew, *buttonClose; FileSelectorPrivate *d; }; #endif diff --git a/library/fileselector_p.h b/library/fileselector_p.h index 6bab485..13933ba 100644 --- a/library/fileselector_p.h +++ b/library/fileselector_p.h @@ -1,56 +1,38 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef FILESELECTOR_P_H #define FILESELECTOR_P_H #include <qlistview.h> -class FileManager; -class CategoryMenu; -class FileSelectorViewPrivate; - class FileSelectorView : public QListView { Q_OBJECT public: - FileSelectorView( const QString &mimefilter, QWidget *parent, const char *name ); + FileSelectorView( QWidget *parent, const char *name ); ~FileSelectorView(); - void reread(); - int fileCount() { return count; } - void setCategoryFilter(CategoryMenu *); protected: void keyPressEvent( QKeyEvent *e ); - -protected slots: - void cardMessage( const QCString &, const QByteArray &); - - void categoryChanged(); - -private: - QString filter; - FileManager *fileManager; - int count; - FileSelectorViewPrivate *d; }; #endif diff --git a/library/finddialog.cpp b/library/finddialog.cpp index 904e952..d9f430a 100644 --- a/library/finddialog.cpp +++ b/library/finddialog.cpp @@ -1,77 +1,78 @@ /********************************************************************** -** Copyright (C) 2001 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ // WARNING: Do *NOT* define this yourself. The SL5xxx from SHARP does NOT // have this class. #define QTOPIA_INTERNAL_FD #include "finddialog.h" #include "findwidget_p.h" #include <qlayout.h> #include <qpushbutton.h> FindDialog::FindDialog( const QString &appName, QWidget *parent, const char *name, bool modal ) : QDialog( parent, name, modal ) { + setCaption( tr("Find") ); QVBoxLayout *vb; vb = new QVBoxLayout( this ); fw = new FindWidget( appName, this, "Find Widget" ); vb->addWidget( fw ); QObject::connect( fw, SIGNAL(signalFindClicked(const QString&, bool,bool,int)), this, SIGNAL(signalFindClicked(const QString&, bool,bool,int)) ); QObject::connect( fw, SIGNAL(signalFindClicked(const QString&,const QDate&, bool,bool,int)), this, SIGNAL(signalFindClicked(const QString&, const QDate&,bool,bool,int)) ); d = 0; } FindDialog::~FindDialog() { } QString FindDialog::findText() const { return fw->findText(); } void FindDialog::setUseDate( bool show ) { fw->setUseDate( show ); } void FindDialog::setDate( const QDate &dt ) { fw->setDate( dt ); } void FindDialog::slotNotFound() { fw->slotNotFound(); } void FindDialog::slotWrapAround() { fw->slotWrapAround(); } diff --git a/library/finddialog.h b/library/finddialog.h index 00c7b45..2512533 100644 --- a/library/finddialog.h +++ b/library/finddialog.h @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2001 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ // // DO NOT ATTEMPT TO USE THIS CLASS // #ifndef __FINDDIALOG_H__ #define __FINDDIALOG_H__ #include <qdatetime.h> #include <qdialog.h> class FindWidget; class FindDialogPrivate; class FindDialog : public QDialog { Q_OBJECT public: // WARNING: Do *NOT* define this yourself. The SL5xxx from SHARP does NOT // have this class. #ifdef QTOPIA_INTERNAL_FD FindDialog( const QString &appName, QWidget *parent = 0, const char *name = 0, bool modal = TRUE ); ~FindDialog(); #endif QString findText() const; void setUseDate( bool show ); void setDate( const QDate &dt ); diff --git a/library/findwidget_p.cpp b/library/findwidget_p.cpp index 7ed8bca..9ecaa40 100644 --- a/library/findwidget_p.cpp +++ b/library/findwidget_p.cpp @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2001 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "findwidget_p.h" #include <qpe/categories.h> #include <qpe/categoryselect.h> #include <qpe/datebookmonth.h> #include <qpe/timestring.h> #include <qcheckbox.h> #include <qlabel.h> #include <qlineedit.h> #include <qmessagebox.h> #include <qpushbutton.h> #include <qpopupmenu.h> #include <qtoolbutton.h> FindWidget::FindWidget( const QString &appName, QWidget *parent, const char *name ) : FindWidgetBase( parent, name ), mStrApp( appName ), mDate( QDate::currentDate() ) { setMaximumSize( sizeHint() ); QArray<int> vl(0); cmbCat->setCategories( vl, mStrApp ); cmbCat->setRemoveCategoryEdit( TRUE ); cmbCat->setAllCategories( TRUE ); // hide junk for the moment... lblStartDate->hide(); cmdStartDate->hide(); QPopupMenu *m1 = new QPopupMenu( this ); dtPicker = new DateBookMonth( m1, 0, TRUE ); dtPicker->setDate( mDate.year(), mDate.month(), mDate.day() ); diff --git a/library/findwidget_p.h b/library/findwidget_p.h index 418242c..e1329da 100644 --- a/library/findwidget_p.h +++ b/library/findwidget_p.h @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2001 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef __FINDWIDGET_H__ #define __FINDWIDGET_H__ #include "findwidgetbase_p.h" #include <qdatetime.h> class Categories; class DateBookMonth; class FindWidgetPrivate; class FindWidget : public FindWidgetBase { Q_OBJECT public: FindWidget( const QString &appName, QWidget *parent = 0, const char *name = 0 ); ~FindWidget(); QString findText() const; void setUseDate( bool show ); void setDate( const QDate &dt ); public slots: void slotNotFound(); void slotWrapAround(); void slotDateChanged( int year, int month, int day ); signals: void signalFindClicked( const QString &txt, bool caseSensitive, bool backwards, int category ); void signalFindClicked( const QString &txt, const QDate &dt, diff --git a/library/findwidgetbase_p.ui b/library/findwidgetbase_p.ui index 5eceaad..393365e 100644 --- a/library/findwidgetbase_p.ui +++ b/library/findwidgetbase_p.ui @@ -1,141 +1,141 @@ <!DOCTYPE UI><UI> <class>FindWidgetBase</class> <widget> <class>QWidget</class> <property stdset="1"> <name>name</name> <cstring>FindWidgetBase</cstring> </property> <property stdset="1"> <name>geometry</name> <rect> <x>0</x> <y>0</y> - <width>245</width> - <height>183</height> + <width>246</width> + <height>203</height> </rect> </property> <property stdset="1"> <name>sizePolicy</name> <sizepolicy> <hsizetype>1</hsizetype> <vsizetype>1</vsizetype> </sizepolicy> </property> <property stdset="1"> <name>caption</name> <string>Find</string> </property> <property> <name>layoutMargin</name> </property> <property> <name>layoutSpacing</name> </property> <vbox> <property stdset="1"> <name>margin</name> - <number>0</number> + <number>6</number> </property> <property stdset="1"> <name>spacing</name> - <number>0</number> + <number>4</number> </property> <widget> <class>QLayoutWidget</class> <property stdset="1"> <name>name</name> <cstring>Layout1</cstring> </property> <hbox> <property stdset="1"> <name>margin</name> <number>0</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget> <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>lblFindWhat</cstring> </property> <property stdset="1"> <name>frameShape</name> <enum>MShape</enum> </property> <property stdset="1"> <name>frameShadow</name> <enum>MShadow</enum> </property> <property stdset="1"> <name>text</name> <string>Find what:</string> </property> </widget> <widget> <class>QLineEdit</class> <property stdset="1"> <name>name</name> <cstring>txtFind</cstring> </property> </widget> <widget> <class>QPushButton</class> <property stdset="1"> <name>name</name> <cstring>cmdFind</cstring> </property> <property stdset="1"> <name>text</name> - <string>&Find</string> + <string>Find</string> </property> <property stdset="1"> <name>default</name> <bool>true</bool> </property> </widget> </hbox> </widget> <widget> <class>QLayoutWidget</class> <property stdset="1"> <name>name</name> <cstring>Layout2</cstring> </property> <hbox> <property stdset="1"> <name>margin</name> <number>0</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget> <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>lblCategory</cstring> </property> <property stdset="1"> <name>text</name> <string>Category:</string> </property> </widget> <widget> <class>CategorySelect</class> <property stdset="1"> <name>name</name> <cstring>cmbCat</cstring> </property> </widget> </hbox> </widget> <widget> <class>QFrame</class> <property stdset="1"> <name>name</name> <cstring>Frame3</cstring> @@ -185,77 +185,85 @@ <class>QPushButton</class> <property stdset="1"> <name>name</name> <cstring>cmdStartDate</cstring> </property> <property stdset="1"> <name>sizePolicy</name> <sizepolicy> <hsizetype>1</hsizetype> <vsizetype>1</vsizetype> </sizepolicy> </property> <property stdset="1"> <name>text</name> <string>Dec 02 01</string> </property> </widget> </hbox> </widget> <widget> <class>QCheckBox</class> <property stdset="1"> <name>name</name> <cstring>chkCase</cstring> </property> <property stdset="1"> <name>text</name> <string>Case Sensitive</string> </property> </widget> <widget> <class>QCheckBox</class> <property stdset="1"> <name>name</name> <cstring>chkBackwards</cstring> </property> <property stdset="1"> <name>text</name> <string>Search Backwards</string> </property> </widget> <widget> <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>lblStatus</cstring> </property> <property stdset="1"> + <name>frameShape</name> + <enum>Panel</enum> + </property> + <property stdset="1"> + <name>frameShadow</name> + <enum>Sunken</enum> + </property> + <property stdset="1"> <name>text</name> <string></string> </property> </widget> </vbox> </widget> <customwidgets> <customwidget> <class>CategorySelect</class> <header location="global">qpe/categoryselect.h</header> <sizehint> <width>-1</width> <height>-1</height> </sizehint> <container>0</container> <sizepolicy> <hordata>7</hordata> <verdata>1</verdata> </sizepolicy> <pixmap>image0</pixmap> </customwidget> </customwidgets> <images> <image> <name>image0</name> <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data> </image> </images> </UI> diff --git a/library/fontdatabase.cpp b/library/fontdatabase.cpp index 50dcf3d..c64e645 100644 --- a/library/fontdatabase.cpp +++ b/library/fontdatabase.cpp @@ -1,235 +1,232 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "qpeapplication.h" #include "fontfactoryinterface.h" #include "fontdatabase.h" #include <qpe/qlibrary.h> +#ifdef QWS #include <qfontmanager_qws.h> +#endif #include <qdir.h> #include <qdict.h> #include <stdio.h> #include <stdlib.h> static QString fontDir() { QString qtdir = getenv("QTDIR"); if ( qtdir.isEmpty() ) qtdir = "/usr/local/qt-embedded"; return qtdir+"/lib/fonts/"; } #ifdef QT_NO_FONTDATABASE static QString fontFamily( const QString& key ) { int u0 = key.find('_'); int u1 = key.find('_',u0+1); int u2 = key.find('_',u1+1); QString family = key.left(u0); //int pointSize = key.mid(u0+1,u1-u0-1).toInt(); //int weight = key.mid(u1+1,u2-u1-1).toInt(); //bool italic = key.mid(u2-1,1) == "i"; // #### ignores _t and _I fields return family; } #endif QValueList<FontFactory> *FontDatabase::factoryList = 0; /*! \class FontDatabase fontdatabase.h \brief The FontDatabase class provides information about available fonts. - Provides information about available fonts. - - FontDatabase provides information about the available fonts of the - underlying window system. + Most often you will simply want to query the database for the + available font families(). - Most often you will simply want to query the database for all font - families(), and their respective pointSizes(), styles() and charSets(). + Use FontDatabase rather than QFontDatabase when you may need access + to fonts that are not normally available. For example, if the + freetype library and the Qtopia freetype plugin are installed, + TrueType fonts will be available to your application. Font renderer + plugins have greater resource requirements than system fonts so they + should be used only when necessary. You can force the loading of + font renderer plugins with loadRenderers(). - Use FontDatabase rather than QFontDatabase when you may need access to - fonts not normally available. For example, if the freetype library and - Qtopia freetype plugin are installed TrueType fonts will be available - to your application. Font renderer plugins have greater resource - requirements than the system fonts so they should be used only when - necessary. + \ingroup qtopiaemb */ /*! - Constructs the FontDatabase class. + Constructs a FontDatabase object. */ FontDatabase::FontDatabase() #ifndef QT_NO_FONTDATABASE : QFontDatabase() #endif { if ( !factoryList ) loadRenderers(); } /*! - Returns a list of names of all available font families. + Returns a list of names of all the available font families. */ QStringList FontDatabase::families() const { #ifndef QT_NO_FONTDATABASE return QFontDatabase::families(); #else QStringList list; QDict<void> familyDict; QDiskFont *qdf; for ( qdf=qt_fontmanager->diskfonts.first(); qdf!=0; qdf=qt_fontmanager->diskfonts.next()) { QString familyname = qdf->name; if ( !familyDict.find( familyname ) ) { familyDict.insert( familyname, (void *)1 ); list.append( familyname ); } } QDir dir(fontDir(),"*.qpf"); for (int i=0; i<(int)dir.count(); i++) { QString familyname = fontFamily(dir[i]); if ( !familyDict.find( familyname ) ) { familyDict.insert( familyname, (void *)1 ); list.append( familyname ); } } return list; #endif } #ifdef QT_NO_FONTDATABASE /*! Returns a list of standard fontsizes. */ QValueList<int> FontDatabase::standardSizes() { static int s[]={ 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72, 0 }; static bool first = TRUE; static QValueList<int> sList; if ( first ) { first = FALSE; int i = 0; while( s[i] ) sList.append( s[i++] ); } return sList; } #endif /*! - Load any font renderer plugins that are available and make fonts that - the plugins can read available. + Load any font renderer plugins that are available and make the fonts + that the plugins can read available. */ void FontDatabase::loadRenderers() { #ifndef QT_NO_COMPONENT if ( !factoryList ) factoryList = new QValueList<FontFactory>; QValueList<FontFactory>::Iterator mit; for ( mit = factoryList->begin(); mit != factoryList->end(); ++mit ) { qt_fontmanager->factories.setAutoDelete( false ); qt_fontmanager->factories.removeRef( (*mit).factory ); qt_fontmanager->factories.setAutoDelete( true ); (*mit).interface->release(); (*mit).library->unload(); delete (*mit).library; } factoryList->clear(); QString path = QPEApplication::qpeDir() + "/plugins/fontfactories"; QDir dir( path, "lib*.so" ); QStringList list = dir.entryList(); QStringList::Iterator it; for ( it = list.begin(); it != list.end(); ++it ) { FontFactoryInterface *iface = 0; QLibrary *lib = new QLibrary( path + "/" + *it ); if ( lib->queryInterface( IID_FontFactory, (QUnknownInterface**)&iface ) == QS_OK ) { FontFactory factory; factory.library = lib; factory.interface = iface; factory.factory = factory.interface->fontFactory(); factoryList->append( factory ); qt_fontmanager->factories.append( factory.factory ); readFonts( factory.factory ); } else { delete lib; } } #endif } /*! \internal */ void FontDatabase::readFonts( QFontFactory *factory ) { - // Load in font definition file QString fn = fontDir() + "fontdir"; FILE* fontdef=fopen(fn.local8Bit(),"r"); if(!fontdef) { QCString temp=fn.local8Bit(); qWarning("Cannot find font definition file %s - is $QTDIR set correctly?", temp.data()); return; } char buf[200]=""; char name[200]=""; char render[200]=""; char file[200]=""; char flags[200]=""; char isitalic[10]=""; fgets(buf,200,fontdef); while(!feof(fontdef)) { if ( buf[0] != '#' ) { int weight=50; int size=0; flags[0]=0; sscanf(buf,"%s %s %s %s %d %d %s",name,file,render,isitalic,&weight,&size,flags); QString filename; if ( file[0] != '/' ) filename = fontDir(); filename += file; if ( QFile::exists(filename) ) { if( factory->name() == render ) { QDiskFont * qdf=new QDiskFont(factory,name,isitalic[0]=='y', weight,size,flags,filename); qt_fontmanager->diskfonts.append(qdf); -#ifndef QT_NO_FONTDATABASE #if QT_VERSION >= 232 QFontDatabase::qwsAddDiskFont( qdf ); #endif -#endif } } } fgets(buf,200,fontdef); } fclose(fontdef); } diff --git a/library/fontdatabase.h b/library/fontdatabase.h index 9160ab0..10aec91 100644 --- a/library/fontdatabase.h +++ b/library/fontdatabase.h @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef FONTFACTORY_H #define FONTFACTORY_H #include <qpe/fontfactoryinterface.h> #include <qfontdatabase.h> #include <qvaluelist.h> class QLibrary; struct FontFactory { #ifndef QT_NO_COMPONENT QLibrary *library; #endif FontFactoryInterface *interface; QFontFactory *factory; }; class FontDatabase #ifndef QT_NO_FONTDATABASE : public QFontDatabase #endif { public: FontDatabase(); // minimal functionality QStringList families () const; #ifdef QT_NO_FONTDATABASE static QValueList<int> standardSizes (); #endif diff --git a/library/fontmanager.cpp b/library/fontmanager.cpp index adbe57b..28a5212 100644 --- a/library/fontmanager.cpp +++ b/library/fontmanager.cpp @@ -1,101 +1,103 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ +#ifdef QWS #include "fontmanager.h" #include <qfile.h> #include <stdlib.h> #include <qgfx_qws.h> /* QFontInfo doesn't work in QWS at the moment, otherwise we would just have used that to check the real values For now, there are only two Unicode fonts in the known universe... */ bool FontManager::hasUnicodeFont() { QString fontDir = getenv("QTDIR") + QString("/lib/fonts/"); QString suffix; if ( qt_screen->isTransformed() ) { suffix += "_t"; QPoint a = qt_screen->mapToDevice(QPoint(0,0),QSize(2,2)); QPoint b = qt_screen->mapToDevice(QPoint(1,1),QSize(2,2)); suffix += QString::number( a.x()*8+a.y()*4+(1-b.x())*2+(1-b.y()) ); } suffix += ".qpf"; return QFile::exists( fontDir+"cyberbit_120_50"+suffix ) || QFile::exists( fontDir+"unifont_160_50"+suffix ) || QFile::exists( fontDir+"arial_140_50" + suffix ); } QFont FontManager::unicodeFont( Spacing sp ) { QString key; QString fontName; QString fontDir = getenv("QTDIR") + QString("/lib/fonts/"); int size; if ( sp == Proportional ) { fontName = "Arial"; size=14; key = "arial_140_50"; } else { fontName = "Unifont"; size=16; key = "unifont_160_50"; } QString suffix; if ( qt_screen->isTransformed() ) { suffix += "_t"; QPoint a = qt_screen->mapToDevice(QPoint(0,0),QSize(2,2)); QPoint b = qt_screen->mapToDevice(QPoint(1,1),QSize(2,2)); suffix += QString::number( a.x()*8+a.y()*4+(1-b.x())*2+(1-b.y()) ); } suffix += ".qpf"; // if we cannot find it, try the other one if ( !QFile::exists(fontDir+key+suffix) ) { key = (sp == Fixed ) ? "arial_140_50" : "unifont_160_50"; if ( QFile::exists(fontDir+key+suffix) ) { fontName = (sp == Fixed) ? "Arial" : "Unifont"; size = (sp == Fixed) ? 14 : 16; } else { key = "cyberbit_120_50"; if ( QFile::exists(fontDir+key+suffix) ) { fontName = "Cyberbit"; size = 12; } else { fontName = "Helvetica"; size = 14; } } } return QFont(fontName,size); } +#endif diff --git a/library/fontmanager.h b/library/fontmanager.h index 7498df8..c4d2c78 100644 --- a/library/fontmanager.h +++ b/library/fontmanager.h @@ -1,36 +1,36 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef FONTMANAGER_H #define FONTMANAGER_H #include <qfont.h> class FontManager { public: enum Spacing { Fixed, Proportional }; static bool hasUnicodeFont(); static QFont unicodeFont( Spacing ); }; #endif diff --git a/library/global.cpp b/library/global.cpp index ab27b3f..7438891 100644 --- a/library/global.cpp +++ b/library/global.cpp @@ -1,730 +1,813 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #define QTOPIA_INTERNAL_LANGLIST #include <qpe/qpedebug.h> #include <qpe/global.h> #include <qpe/qdawg.h> #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include <qpe/storage.h> #include <qpe/applnk.h> #if defined(Q_WS_QWS) && !defined(QT_NO_COP) #include "qpe/qcopenvelope_qws.h" #endif #include <qfile.h> #include <qlabel.h> #include <qtimer.h> #include <qmap.h> #include <qdict.h> #include <qdir.h> #include <qmessagebox.h> #include <qregexp.h> #include <stdlib.h> #include <sys/stat.h> #include <sys/wait.h> #include <sys/types.h> #include <fcntl.h> #include <unistd.h> +#ifdef QWS #include <qwindowsystem_qws.h> // for qwsServer +#endif #include <qdatetime.h> #include <qfile.h> namespace { // checks if the storage should be searched bool checkStorage(const QString &path ){ // this is a small Config replacement cause config is too limited -zecke QFile file(path ); if(!file.open(IO_ReadOnly ) ) return true; - + QByteArray array = file.readAll(); QStringList list = QStringList::split('\n', QString( array ) ); for(QStringList::Iterator it = list.begin(); it != list.end(); ++it ){ if( (*it).startsWith("autocheck = 0" ) ){ return false; }else if( (*it).startsWith("autocheck = 1" ) ){ return true; } } return true; } } //#include "quickexec_p.h" class Emitter : public QObject { Q_OBJECT public: Emitter( QWidget* receiver, const QString& document ) { connect(this, SIGNAL(setDocument(const QString&)), receiver, SLOT(setDocument(const QString&))); emit setDocument(document); disconnect(this, SIGNAL(setDocument(const QString&)), receiver, SLOT(setDocument(const QString&))); } signals: void setDocument(const QString&); }; class StartingAppList : public QObject { Q_OBJECT public: static void add( const QString& name ); static bool isStarting( const QString name ); private slots: void handleNewChannel( const QString &); private: StartingAppList( QObject *parent=0, const char* name=0 ) ; QDict<QTime> dict; static StartingAppList *appl; }; StartingAppList* StartingAppList::appl = 0; StartingAppList::StartingAppList( QObject *parent, const char* name ) :QObject( parent, name ) { +#ifdef QWS #if QT_VERSION >= 232 && !defined(QT_NO_COP) connect( qwsServer, SIGNAL( newChannel(const QString&)), this, SLOT( handleNewChannel(const QString&)) ); dict.setAutoDelete( TRUE ); #endif +#endif } void StartingAppList::add( const QString& name ) { #if QT_VERSION >= 232 && !defined(QT_NO_COP) if ( !appl ) appl = new StartingAppList; QTime *t = new QTime; t->start(); appl->dict.insert( "QPE/Application/" + name, t ); #endif } bool StartingAppList::isStarting( const QString name ) { #if QT_VERSION >= 232 && !defined(QT_NO_COP) if ( appl ) { QTime *t = appl->dict.find( "QPE/Application/" + name ); if ( !t ) return FALSE; if ( t->elapsed() > 10000 ) { // timeout in case of crash or something appl->dict.remove( "QPE/Application/" + name ); return FALSE; } return TRUE; } #endif return FALSE; } void StartingAppList::handleNewChannel( const QString & name ) { #if QT_VERSION >= 232 && !defined(QT_NO_COP) dict.remove( name ); #endif } static bool docDirCreated = FALSE; static QDawg* fixed_dawg = 0; static QDict<QDawg> *named_dawg = 0; static QString qpeDir() { QString dir = getenv("OPIEDIR"); if ( dir.isEmpty() ) dir = ".."; return dir; } static QString dictDir() { return qpeDir() + "/etc/dict"; } /*! \class Global global.h - \brief The Global class collects application-wide global functions. + \brief The Global class provides application-wide global functions. + + The Global functions are grouped as follows: + \tableofcontents + + \section1 User Interface + + The statusMessage() function provides short-duration messages to the + user. The showInputMethod() function shows the current input method, + and hideInputMethod() hides the input method. + + \section1 Document related + + The findDocuments() function creates a set of \link doclnk.html + DocLnk\endlink objects in a particular folder. + + \section1 Filesystem related + + Global provides an applicationFileName() function that returns the + full path of an application-specific file. + + The execute() function runs an application. + + \section1 Word list related + + A list of words relevant to the current locale is maintained by the + system. The list is held in a \link qdawg.html DAWG\endlink + (implemented by the QDawg class). This list is used, for example, by + the pickboard input method. + + The global QDawg is returned by fixedDawg(); this cannot be updated. + An updatable copy of the global QDawg is returned by addedDawg(). + Applications may have their own word lists stored in \l{QDawg}s + which are returned by dawg(). Use addWords() to add words to the + updateable copy of the global QDawg or to named application + \l{QDawg}s. + + \section1 Quoting + + The shellQuote() function quotes a string suitable for passing to a + shell. The stringQuote() function backslash escapes '\' and '"' + characters. + + \section1 Hardware + + The writeHWClock() function sets the hardware clock to the system + clock's date and time. + + \ingroup qtopiaemb */ /*! \internal */ Global::Global() { } /*! Returns the unchangeable QDawg that contains general words for the current locale. \sa addedDawg() */ const QDawg& Global::fixedDawg() { if ( !fixed_dawg ) { if ( !docDirCreated ) createDocDir(); fixed_dawg = new QDawg; QString dawgfilename = dictDir() + "/dawg"; QString words_lang; QStringList langs = Global::languageList(); for (QStringList::ConstIterator it = langs.begin(); it!=langs.end(); ++it) { QString lang = *it; words_lang = dictDir() + "/words." + lang; QString dawgfilename_lang = dawgfilename + "." + lang; if ( QFile::exists(dawgfilename_lang) || QFile::exists(words_lang) ) { dawgfilename = dawgfilename_lang; break; } } QFile dawgfile(dawgfilename); if ( !dawgfile.exists() ) { QString fn = dictDir() + "/words"; if ( QFile::exists(words_lang) ) fn = words_lang; QFile in(fn); if ( in.open(IO_ReadOnly) ) { fixed_dawg->createFromWords(&in); dawgfile.open(IO_WriteOnly); fixed_dawg->write(&dawgfile); dawgfile.close(); } } else { fixed_dawg->readFile(dawgfilename); } } return *fixed_dawg; } /*! Returns the changeable QDawg that contains general words for the current locale. \sa fixedDawg() */ const QDawg& Global::addedDawg() { return dawg("local"); } /*! Returns the QDawg with the given \a name. This is an application-specific word list. \a name should not contain "/". */ const QDawg& Global::dawg(const QString& name) { createDocDir(); if ( !named_dawg ) named_dawg = new QDict<QDawg>; QDawg* r = named_dawg->find(name); if ( !r ) { r = new QDawg; named_dawg->insert(name,r); - QString dawgfilename = dictDir() + "/" + name + ".dawg"; + QString dawgfilename = applicationFileName("Dictionary", name ) + ".dawg"; QFile dawgfile(dawgfilename); if ( dawgfile.open(IO_ReadOnly) ) r->readFile(dawgfilename); } return *r; } /*! + \overload Adds \a wordlist to the addedDawg(). + + Note that the addition of words persists between program executions + (they are saved in the dictionary files), so you should confirm the + words with the user before adding them. */ void Global::addWords(const QStringList& wordlist) { addWords("local",wordlist); } /*! - Adds \a wordlist to the dawg() named \a dictname. + \overload + Adds \a wordlist to the addedDawg(). + + Note that the addition of words persists between program executions + (they are saved in the dictionary files), so you should confirm the + words with the user before adding them. */ void Global::addWords(const QString& dictname, const QStringList& wordlist) { QDawg& d = (QDawg&)dawg(dictname); QStringList all = d.allWords() + wordlist; d.createFromWords(all); - QString dawgfilename = dictDir() + "/" + dictname + ".dawg"; + QString dawgfilename = applicationFileName("Dictionary", dictname) + ".dawg"; QFile dawgfile(dawgfilename); if ( dawgfile.open(IO_WriteOnly) ) { d.write(&dawgfile); dawgfile.close(); } // #### Re-read the dawg here if we use mmap(). // #### Signal other processes to re-read. } /*! - Returns a full path for the application named \a appname, with the - given \a filename or QString::null if there was a problem creating - the directory tree for \a appname. - If \a filename contains "/", it is the caller's responsibility to - ensure those directories exist. + Returns the full path for the application called \a appname, with the + given \a filename. Returns QString::null if there was a problem creating + the directory tree for \a appname. + If \a filename contains "/", it is the caller's responsibility to + ensure that those directories exist. */ QString Global::applicationFileName(const QString& appname, const QString& filename) { QDir d; QString r = getenv("HOME"); r += "/Applications/"; if ( !QFile::exists( r ) ) if ( d.mkdir(r) == false ) return QString::null; r += appname; if ( !QFile::exists( r ) ) if ( d.mkdir(r) == false ) return QString::null; r += "/"; r += filename; return r; } /*! \internal */ void Global::createDocDir() { if ( !docDirCreated ) { docDirCreated = TRUE; mkdir( QPEApplication::documentDir().latin1(), 0755 ); } } /*! - Displays a status \a message to the user. This generally appears - in the taskbar for some amount of time, then disappears. + Displays a status \a message to the user. This usually appears + in the taskbar for a short amount of time, then disappears. */ void Global::statusMessage(const QString& message) { #if defined(Q_WS_QWS) && !defined(QT_NO_COP) QCopEnvelope e( "QPE/TaskBar", "message(QString)" ); e << message; #endif } /*! \internal */ void Global::applyStyle() { #if defined(Q_WS_QWS) && !defined(QT_NO_COP) QCopChannel::send( "QPE/System", "applyStyle()" ); #else ((QPEApplication *)qApp)->applyStyle(); // apply without needing QCop for floppy version #endif } /*! \internal */ QWidget *Global::shutdown( bool ) { #if defined(Q_WS_QWS) && !defined(QT_NO_COP) QCopChannel::send( "QPE/System", "shutdown()" ); #endif return 0; } /*! \internal */ QWidget *Global::restart( bool ) { #if defined(Q_WS_QWS) && !defined(QT_NO_COP) QCopChannel::send( "QPE/System", "restart()" ); #endif return 0; } /*! Explicitly show the current input method. + + Input methods are indicated in the taskbar by a small icon. If the + input method is activated (shown) then it takes up some proportion + of the bottom of the screen, to allow the user to interact (input + characters) with it. + + \sa hideInputMethod() */ void Global::showInputMethod() { #if defined(Q_WS_QWS) && !defined(QT_NO_COP) QCopChannel::send( "QPE/TaskBar", "showInputMethod()" ); #endif } /*! Explicitly hide the current input method. + + The current input method is still indicated in the taskbar, but no + longer takes up screen space, and can no longer be interacted with. + + \sa showInputMethod() */ void Global::hideInputMethod() { #if defined(Q_WS_QWS) && !defined(QT_NO_COP) QCopChannel::send( "QPE/TaskBar", "hideInputMethod()" ); #endif } /*! \internal */ bool Global::isBuiltinCommand( const QString &name ) { if(!builtin) return FALSE; // yes, it can happen for (int i = 0; builtin[i].file; i++) { if ( builtin[i].file == name ) { return TRUE; } } return FALSE; } Global::Command* Global::builtin=0; QGuardedPtr<QWidget> *Global::running=0; /*! \class Global::Command \brief The Global::Command class is internal. \internal */ /*! \internal */ void Global::setBuiltinCommands( Command* list ) { if ( running ) delete [] running; builtin = list; int count = 0; if (!builtin) return; while ( builtin[count].file ) count++; running = new QGuardedPtr<QWidget> [ count ]; } /*! \internal */ void Global::setDocument( QWidget* receiver, const QString& document ) { Emitter emitter(receiver,document); } /*! \internal */ bool Global::terminateBuiltin( const QString& n ) { if (!builtin) return FALSE; for (int i = 0; builtin[i].file; i++) { if ( builtin[i].file == n ) { delete running[i]; return TRUE; } } return FALSE; } /*! \internal */ void Global::terminate( const AppLnk* app ) { //if ( terminateBuiltin(app->exec()) ) return; // maybe? haven't tried this +#ifndef QT_NO_COP QCString channel = "QPE/Application/" + app->exec().utf8(); if ( QCopChannel::isRegistered(channel) ) { QCopEnvelope e(channel, "quit()"); } +#endif } /*! - Low-level function to run command \a c. Not recommended. + Low-level function to run command \a c. + + \warning Do not use this function. Use execute instead. + + \sa execute() */ -void Global::invoke(const QString &c) +void Global::invoke(const QString &c) { // Convert the command line in to a list of arguments QStringList list = QStringList::split(QRegExp(" *"),c); #if defined(Q_WS_QWS) && !defined(QT_NO_COP) QString ap=list[0]; // see if the application is already running - // XXX should lock file /tmp/qcop-msg-ap + // XXX should lock file /tmp/qcop-msg-ap if ( QCopChannel::isRegistered( ("QPE/Application/" + ap).latin1() ) ) { QCopEnvelope e("QPE/System", "notBusy(QString)" ); e << ap; return; } - // XXX should unlock file /tmp/qcop-msg-ap + // XXX should unlock file /tmp/qcop-msg-ap //see if it is being started if ( StartingAppList::isStarting( ap ) ) { QCopEnvelope e("QPE/System", "notBusy(QString)" ); e << ap; return; } #endif #ifdef QT_NO_QWS_MULTIPROCESS QMessageBox::warning( 0, "Error", "Could not find the application " + c, "Ok", 0, 0, 0, 1 ); #else QStrList slist; unsigned int j; for ( j = 0; j < list.count(); j++ ) slist.append( list[j].utf8() ); const char **args = new (const char *)[slist.count() + 1]; for ( j = 0; j < slist.count(); j++ ) args[j] = slist.at(j); args[j] = NULL; #if defined(Q_WS_QWS) && !defined(QT_NO_COP) // an attempt to show a wait... // more logic should be used, but this will be fine for the moment... QCopEnvelope ( "QPE/System", "busy()" ); #endif #ifdef HAVE_QUICKEXEC QString libexe = qpeDir()+"/binlib/lib"+args[0] + ".so"; qDebug("libfile = %s", libexe.latin1() ); if ( QFile::exists( libexe ) ) { qDebug("calling quickexec %s", libexe.latin1() ); quickexecv( libexe.utf8().data(), (const char **)args ); - } else + } else #endif { if ( !::vfork() ) { for ( int fd = 3; fd < 100; fd++ ) ::close( fd ); ::setpgid( ::getpid(), ::getppid() ); // Try bindir first, so that foo/bar works too ::execv( qpeDir()+"/bin/"+args[0], (char * const *)args ); ::execvp( args[0], (char * const *)args ); _exit( -1 ); } } StartingAppList::add( list[0] ); #endif //QT_NO_QWS_MULTIPROCESS } + /*! - Executes application identfied by \a c, passing \a document. + Executes the application identfied by \a c, passing \a + document if it isn't null. - Note that you might be better off sending a QCop message to - the application's QPE/Application/<i>appname</i> channel. + Note that a better approach might be to send a QCop message to the + application's QPE/Application/\e{appname} channel. */ void Global::execute( const QString &c, const QString& document ) { if ( qApp->type() != QApplication::GuiServer ) { // ask the server to do the work #if defined(Q_WS_QWS) && !defined(QT_NO_COP) if ( document.isNull() ) { QCopEnvelope e( "QPE/System", "execute(QString)" ); e << c; } else { QCopEnvelope e( "QPE/System", "execute(QString,QString)" ); e << c << document; } #endif return; } // Attempt to execute the app using a builtin class for the app first // else try and find it in the bin directory if (builtin) { for (int i = 0; builtin[i].file; i++) { if ( builtin[i].file == c ) { if ( running[i] ) { if ( !document.isNull() && builtin[i].documentary ) setDocument(running[i], document); running[i]->raise(); running[i]->show(); running[i]->setActiveWindow(); } else { running[i] = builtin[i].func( builtin[i].maximized ); } +#ifndef QT_NO_COP QCopEnvelope e("QPE/System", "notBusy(QString)" ); e << c; // that was quick ;-) +#endif return; } } } //Global::invoke(c, document); // Convert the command line in to a list of arguments QStringList list = QStringList::split(QRegExp(" *"),c); #if defined(Q_WS_QWS) && !defined(QT_NO_COP) QString ap=list[0]; qDebug("executing %s", ap.latin1() ); if ( ap == "suspend" ) { - QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); + QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); return; } - /* if need be, sending a qcop message will result in an invoke, see + /* if need be, sending a qcop message will result in an invoke, see preceeding function */ - { QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); } + invoke( ap ); + //{ QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); } if ( !document.isEmpty() ) { QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "setDocument(QString)" ); env << document; } #endif } /*! - Returns the string \a s with the characters backslash, ", and $ - quoted by a preceeding backslash. + Returns the string \a s with the characters '\', '"', and '$' quoted + by a preceeding '\'. + + \sa stringQuote() */ QString Global::shellQuote(const QString& s) { QString r="\""; for (int i=0; i<(int)s.length(); i++) { char c = s[i].latin1(); switch (c) { case '\\': case '"': case '$': r+="\\"; } r += s[i]; } r += "\""; return r; } /*! - Returns the string \a s with the characters backslash and " - quoted by a preceeding backslash. + Returns the string \a s with the characters '\' and '"' quoted by a + preceeding '\'. + + \sa shellQuote() */ QString Global::stringQuote(const QString& s) { QString r="\""; for (int i=0; i<(int)s.length(); i++) { char c = s[i].latin1(); switch (c) { case '\\': case '"': r+="\\"; } r += s[i]; } r += "\""; return r; } /*! Finds all documents on the system's document directories which match the filter \a mimefilter, and appends the resulting DocLnk objects to \a folder. */ void Global::findDocuments(DocLnkSet* folder, const QString &mimefilter) { QString homedocs = QString(getenv("HOME")) + "/Documents"; DocLnkSet d(homedocs,mimefilter); folder->appendFrom(d); /** let's do intellegint way of searching these files * a) the user don't want to check mediums global * b) the user wants to check but use the global options for it * c) the user wants to check it but not this medium * d) the user wants to check and this medium as well - * - * In all cases we need to apply a different mimefilter to + * + * In all cases we need to apply a different mimefilter to * the medium. * a) mimefilter.isEmpty() we need to apply the responding filter * either the global or the one on the medium * * b) mimefilter is set to an application we need to find out if the * mimetypes are included in the mime mask of the medium */ StorageInfo storage; const QList<FileSystem> &fs = storage.fileSystems(); QListIterator<FileSystem> it ( fs ); for ( ; it.current(); ++it ) { if ( (*it)->isRemovable() ) { // let's find out if we should search on it - // this is a candidate look at the cf and see if we should search on it + // this is a candidate look at the cf and see if we should search on it QString path = (*it)->path(); if( !checkStorage((*it)->path() + "/.opiestorage.cf" ) ) continue; DocLnkSet ide( path, mimefilter ); folder->appendFrom(ide); } else if ( (*it)->disk() == "/dev/mtdblock6" || (*it)->disk() == "tmpfs" ) { QString path = (*it)->path() + "/Documents"; DocLnkSet ide( path, mimefilter ); folder->appendFrom(ide); } } } QStringList Global::languageList() { QString lang = getenv("LANG"); QStringList langs; langs.append(lang); int i = lang.find("."); if ( i > 0 ) lang = lang.left( i ); i = lang.find( "_" ); if ( i > 0 ) langs.append(lang.left(i)); return langs; } QStringList Global::helpPath() { QStringList path; QStringList langs = Global::languageList(); for (QStringList::ConstIterator it = langs.fromLast(); it!=langs.end(); --it) { QString lang = *it; if ( !lang.isEmpty() ) path += QPEApplication::qpeDir() + "/help/" + lang + "/html"; } path += QPEApplication::qpeDir() + "/pics"; - path += QPEApplication::qpeDir() + "/help/en/html"; + path += QPEApplication::qpeDir() + "/help/html"; path += QPEApplication::qpeDir() + "/docs"; - QString dir = QDir::current().canonicalPath(); - if ( dir == "/" ) - dir += "/docs"; - else { - path += dir + "/../pics"; - dir += "/../docs"; - path += dir; - } + + return path; } #include "global.moc" diff --git a/library/global.h b/library/global.h index fdf8754..1136b12 100644 --- a/library/global.h +++ b/library/global.h @@ -1,93 +1,90 @@ /********************************************************************** -** Copyright (C) 2002 Holger 'zecke' Freyther <freyther@kde.org> -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef GLOBAL_H #define GLOBAL_H #include <qstringlist.h> #include <qguardedptr.h> class QDawg; class QLabel; class QWidget; class AppLnk; class DocLnkSet; class Global { public: Global(); // Dictionaries static const QDawg& fixedDawg(); static const QDawg& addedDawg(); static const QDawg& dawg(const QString& name); static void addWords(const QStringList& word); static void addWords(const QString& dictname, const QStringList& word); // static void removeWords(const QStringList& word); -- if someone wants it static void createDocDir(); static void findDocuments(DocLnkSet* folder, const QString &mimefilter=QString::null); - // we don't need a mimefilter. Same as above but this is fast as light speed or not ;) - //static void findNewDocuments( DocLnkSet* folder ); static QString applicationFileName(const QString& appname, const QString& filename); struct Command { const char *file; QWidget *(*func)( bool ); bool maximized; bool documentary; }; static void setBuiltinCommands( Command* ); - static void invoke( const QString &exec); static void execute( const QString &exec, const QString &document=QString::null ); static void setDocument( QWidget* receiver, const QString& document ); static bool terminateBuiltin( const QString& ); static void terminate( const AppLnk* ); static bool isBuiltinCommand( const QString &name ); // system messaging static void applyStyle(); static void statusMessage(const QString&); static QWidget *shutdown( bool = FALSE ); static QWidget *restart( bool = FALSE ); static void hideInputMethod(); static void showInputMethod(); static void writeHWClock(); static QString shellQuote(const QString& s); static QString stringQuote(const QString& s); #ifdef QTOPIA_INTERNAL_LANGLIST static QStringList languageList(); static QStringList helpPath(); #endif private: + static void invoke( const QString &exec); static Command* builtin; static QGuardedPtr<QWidget> *running; }; #endif diff --git a/library/imagecodecinterface.h b/library/imagecodecinterface.h new file mode 100644 index 0000000..8306b68 --- a/dev/null +++ b/library/imagecodecinterface.h @@ -0,0 +1,39 @@ +/********************************************************************** +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. +** +** This file is part of the Qtopia Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ +#ifndef IMAGECODECINTERFACE_H +#define IMAGECODECINTERFACE_H + +#include <qstringlist.h> +#include <qpe/qcom.h> + +#ifndef QT_NO_COMPONENT +#ifndef IID_QtopiaImageCodec +#define IID_QtopiaImageCodec QUuid(0x09bf6906, 0x1549, 0xbb4a, 0x18, 0xba, 0xb9, 0xe7, 0x0a, 0x6e, 0x4d, 0x1e) +#endif +#endif + +struct ImageCodecInterface : public QUnknownInterface +{ +public: + virtual QStringList keys() const = 0; + virtual bool installIOHandler( const QString &format ) = 0; +}; + +#endif diff --git a/library/imageedit.cpp b/library/imageedit.cpp index 0c22448..caa538a 100644 --- a/library/imageedit.cpp +++ b/library/imageedit.cpp @@ -1,71 +1,71 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "imageedit.h" #include <qpainter.h> -ImageEdit::ImageEdit( QWidget *parent, const char *name ) +ImageEdit::ImageEdit( QWidget *parent, const char *name) : QScrollView( parent, name, WNorthWestGravity | WResizeNoErase ), buffer() { buffer.resize( size() ); buffer.fill( colorGroup().color( QColorGroup::Base ) ); } ImageEdit::~ImageEdit() { } void ImageEdit::contentsMousePressEvent( QMouseEvent *e ) { lastPos = e->pos(); } void ImageEdit::contentsMouseMoveEvent( QMouseEvent *e ) { QPainter pw( viewport() ); QPainter pb( &buffer ); pb.drawLine( lastPos, e->pos() ); pw.drawLine( contentsToViewport( lastPos ), contentsToViewport( e->pos() ) ); lastPos = e->pos(); } void ImageEdit::contentsMouseReleaseEvent( QMouseEvent * ) { } void ImageEdit::viewportResizeEvent( QResizeEvent *e ) { enlargeBuffer(e->size()); } void ImageEdit::enlargeBuffer( const QSize& sz ) { QSize osz = buffer.size(); QSize nsz( QMAX( osz.width(), sz.width() ), QMAX( osz.height(), sz.height() ) ); buffer.resize( nsz.width(), nsz.height() ); // clear new area QPainter p( &buffer ); if ( sz.width() > osz.width() ) p.fillRect( osz.width(), 0, sz.width() - osz.width(), nsz.height(), colorGroup().color( QColorGroup::Base ) ); if ( sz.height() > osz.height() ) p.fillRect( 0, osz.height(), nsz.width(), sz.height() - osz.height(), colorGroup().color( QColorGroup::Base ) ); p.end(); } diff --git a/library/imageedit.h b/library/imageedit.h index ccedbcd..780aac9 100644 --- a/library/imageedit.h +++ b/library/imageedit.h @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef IMAGEEDIT_H #define IMAGEEDIT_H #include <qscrollview.h> #include <qpixmap.h> class ImageEditPrivate; class ImageEdit : public QScrollView { Q_OBJECT public: ImageEdit( QWidget *parent = 0, const char *name = 0 ); ~ImageEdit(); void setPixmap( const QPixmap &pm ); QPixmap pixmap() const; protected: void drawContents( QPainter *p, int cx, int cy, int cw, int ch ); void contentsMousePressEvent( QMouseEvent *e ); void contentsMouseMoveEvent( QMouseEvent *e ); void contentsMouseReleaseEvent( QMouseEvent *e ); void viewportResizeEvent( QResizeEvent *e ); private: QPoint lastPos; QPixmap buffer; ImageEditPrivate *d; void enlargeBuffer( const QSize& sz ); }; #endif diff --git a/library/inlinepics_p.h b/library/inlinepics_p.h index c3b5ad1..52d184b 100644 --- a/library/inlinepics_p.h +++ b/library/inlinepics_p.h @@ -1,70 +1,70 @@ -#ifndef _1804289383 -#define _1804289383 +/* Generated by qembed */ +#ifndef _1733461185 +#define _1733461185 #include <qimage.h> -#include <qdict.h> +#include <stdlib.h> static const QRgb _to1_data[] = { 0x2000000,0x5000000,0x9000000,0xd000000,0x11000000,0x12000000,0xe000000,0xc000000,0xc000000,0xc000000,0xd000000,0x11000000,0x12000000,0xe000000, 0x6000000,0xf000000,0x1d000000,0x3a000000,0x4c000000,0x39000000,0x21000000,0x1c000000,0x1c000000,0x22000000,0x3a000000,0x4c000000,0x39000000,0x1f000000, - 0x10000000,0x25000000,0x51000000,0xb4595959,0xffffffff,0x76000000,0x42000000,0x3b000000,0x3e000000,0x5b000000,0xb4595959,0xffffffff,0x72000000,0x38000000, - 0x1e000000,0x54000000,0xbc555555,0xffffffff,0xffffffff,0xa6000000,0x6d000000,0x65000000,0x7a000000,0xc4525252,0xffffffff,0xffffffff,0x9d000000,0x57000000, - 0x45000000,0xb5595959,0xffffffff,0xffffffff,0xffffffff,0xcf000000,0xaa000000,0xa3000000,0xce4e4e4e,0xffffffff,0xffffffff,0xffffffff,0xb8000000,0x74000000, - 0x88767676,0xffffffff,0xf4999999,0xffffffff,0xffffffff,0xf2424242,0xffffffff,0xdc494949,0xffffffff,0xf7979797,0xffffffff,0xffffffff,0xcd000000,0x8a000000, - 0x48000000,0x84000000,0xc6000000,0xffffffff,0xffffffff,0xfa404040,0xf9c6c6c6,0xd5000000,0xcd000000,0xdd000000,0xffffffff,0xffffffff,0xd9000000,0x97000000, + 0x10000000,0x25000000,0x51000000,0xb46b6b6b,0xffffffff,0x76000000,0x42000000,0x3b000000,0x3e000000,0x5b000000,0xb46b6b6b,0xffffffff,0x72000000,0x38000000, + 0x1e000000,0x54000000,0xbc676767,0xffffffff,0xffffffff,0xa6000000,0x6d000000,0x65000000,0x7a000000,0xc4646464,0xffffffff,0xffffffff,0x9d000000,0x57000000, + 0x45000000,0xb56b6b6b,0xffffffff,0xffffffff,0xffffffff,0xcf000000,0xaa000000,0xa3000000,0xce606060,0xffffffff,0xffffffff,0xffffffff,0xb8000000,0x74000000, + 0x88878787,0xffffffff,0xf4a7a7a7,0xffffffff,0xffffffff,0xf2535353,0xffffffff,0xdc5b5b5b,0xffffffff,0xf7a5a5a5,0xffffffff,0xffffffff,0xcd000000,0x8a000000, + 0x48000000,0x84000000,0xc6000000,0xffffffff,0xffffffff,0xfa515151,0xf9cfcfcf,0xd5000000,0xcd000000,0xdd000000,0xffffffff,0xffffffff,0xd9000000,0x97000000, 0x2c000000,0x5e000000,0xb1000000,0xffffffff,0xffffffff,0xf8000000,0xdc000000,0xcc000000,0xc3000000,0xd3000000,0xffffffff,0xffffffff,0xdb000000,0x9a000000, 0x25000000,0x53000000,0xa7000000,0xffffffff,0xffffffff,0xf0000000,0xd2000000,0xc2000000,0xb6000000,0xc8000000,0xffffffff,0xffffffff,0xd3000000,0x92000000, - 0x1d000000,0x44000000,0x99000000,0xffffffff,0xffffffff,0xf1434343,0xf5c9c9c9,0xbc000000,0xa3000000,0xba000000,0xffffffff,0xffffffff,0xc4000000,0x83000000, - 0x14000000,0x34000000,0x7d000000,0xffffffff,0xffffffff,0xe5464646,0xffffffff,0xab000000,0x8c000000,0x9e000000,0xffffffff,0xffffffff,0xa8000000,0x6e000000, + 0x1d000000,0x44000000,0x99000000,0xffffffff,0xffffffff,0xf1545454,0xf5d1d1d1,0xbc000000,0xa3000000,0xba000000,0xffffffff,0xffffffff,0xc4000000,0x83000000, + 0x14000000,0x34000000,0x7d000000,0xffffffff,0xffffffff,0xe5585858,0xffffffff,0xab000000,0x8c000000,0x9e000000,0xffffffff,0xffffffff,0xa8000000,0x6e000000, 0xc000000,0x25000000,0x4d000000,0x84000000,0xa0000000,0xa2000000,0x92000000,0x7f000000,0x6c000000,0x6f000000,0x88000000,0x94000000,0x79000000,0x56000000, 0x8000000,0x18000000,0x2a000000,0x41000000,0x58000000,0x5e000000,0x55000000,0x50000000,0x4a000000,0x43000000,0x45000000,0x4e000000,0x49000000,0x39000000, 0x5000000,0xf000000,0x19000000,0x28000000,0x36000000,0x3b000000,0x36000000,0x34000000,0x2f000000,0x2a000000,0x2b000000,0x30000000,0x2c000000,0x22000000 }; -/* Generated by qembed */ static const QRgb AddressBook_data[] = { 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000, 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000, 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000, 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000, 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff040437,0xff040437,0xff040437,0xff040434, 0xff04042f,0xff030327,0xff05043c,0xff070565,0xff0a068a,0xff0a068a,0xff080574,0xff07055c,0xff06044c,0xff06044b,0xff05044a,0xff080569,0xff090682,0xff0a068a, 0xff0a068a,0xff080567,0xff03032c,0xff01030b,0xff010309,0xff010307,0xff010303,0xff010300,0xff010300,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000, 0xff040437,0xff70b365,0xff67a75d,0xff58904e,0xff678f61,0xffc8d4c6,0xffffffff,0xffffffff,0xffa3b8a0,0xff5b8854,0xff4a8342,0xff4c8a42,0xff4a8b3f,0xff46893b, 0xff408434,0xff387c2d,0xff2c6e22,0xff789b72,0xffeff3ef,0xffffffff,0xffffffff,0xff7fa07a,0xff166c09,0xff157e04,0xff148400,0xff138100,0xff010300,0x5c000000, 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff040436,0xff65a45b,0xff518849,0xff94ad91,0xffffffff,0xffffffff,0xffc8d3c6,0xff5b8754,0xff548d4b,0xff5d9d53, 0xff60a454,0xff5da551,0xff57a24a,0xff509f43,0xff4b9d3d,0xff429735,0xff378c29,0xff2a781d,0xff2a6720,0xffd1dad0,0xffffffff,0xffffffff,0xff6c9466,0xff0f6a00, 0xff127a00,0xff127c00,0xff010300,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff040431,0xff4f8547,0xffaebfac,0xffffffff,0xffffffff,0xffaebfab, 0xff4c8244,0xff5e9b54,0xff67a95c,0xff68ae5d,0xff63a957,0xff59a24d,0xff529c45,0xff4a963d,0xff469738,0xff3e942f,0xff368f27,0xff2a841c,0xff1f7111,0xff3f7337, 0xffffffff,0xffffffff,0xffeef2ee,0xff2a6a20,0xff0f6d00,0xff117600,0xff010300,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff030326,0xffadbfab, 0xffffffff,0xffffffff,0xff92aa8e,0xff4f8647,0xff62a158,0xff6bae60,0xff69ae5e,0xff61a556,0xff539548,0xff47873d,0xff548b4c,0xff6b9964,0xff327627,0xff2d7722, 0xff26731a,0xff206f13,0xff1a6b0d,0xff125d06,0xff9cb199,0xffffffff,0xffffffff,0xff8da889,0xff0e6100,0xff106f00,0xff010300,0x93000000,0x62000000,0x3b000000, 0x1f000000,0x3d000000,0xff07045d,0xffffffff,0xffffffff,0xffacbdaa,0xff4e8546,0xff63a359,0xff6db061,0xff69ad5e,0xff5e9f54,0xff4b8542,0xff88a883,0xffe4ebe3, 0xffffffff,0xffffffff,0xffd3dcd2,0xff819b7e,0xffffffff,0xffffffff,0xffbed1bb,0xff0f5e02,0xff5b8455,0xffffffff,0xffffffff,0xffdfe5de,0xff0c5700,0xff0f6900, 0xff010200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xffe3e8e3,0xff53834b,0xff609f56,0xff6cb061,0xff6aae5f,0xff5b9b52, 0xff52854a,0xffc8d4c6,0xffffffff,0xff8da98a,0xff396d32,0xff86a082,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff6c9566,0xff0e6200,0xff1a5b10,0xffffffff, 0xffffffff,0xffffffff,0xff0a4e00,0xff0e6200,0xff010200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xff6f926a,0xff599550, 0xff69ac5e,0xff69ad5d,0xff5b9c52,0xff4f8248,0xffd6dfd5,0xffffffff,0xff9eb49a,0xff3a7831,0xff397d2e,0xff255e1c,0xffffffff,0xffffffff,0xffffffff,0xffffffff, 0xff1b6210,0xff0f6a00,0xff0c5600,0xffffffff,0xffffffff,0xffffffff,0xff4b7744,0xff0d5b00,0xff010200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000, 0xff0a068a,0xffc5d0c4,0xff4d8344,0xff64a55a,0xff69ad5d,0xff5d9e53,0xff518449,0xffd6ded5,0xffffffff,0xffe3e8e2,0xff457d3d,0xff448d38,0xff3c8730,0xff407538, 0xffffffff,0xffffffff,0xffffffff,0xff9cb399,0xff0d6300,0xff106d00,0xff0c5700,0xffffffff,0xffffffff,0xffffffff,0xff4a7444,0xff0d5700,0xff010200,0x99000000, 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xff7a9a76,0xff58964e,0xff66ab5b,0xff5fa355,0xff48823f,0xffb8c7b6,0xffffffff,0xffffffff,0xff819f7d, 0xff438738,0xff449437,0xff368029,0xff769871,0xffffffff,0xffffffff,0xffffffff,0xff5c8855,0xff0f6800,0xff0f6a00,0xff0b5200,0xffffffff,0xffffffff,0xffffffff, 0xff376530,0xff0c5400,0xff010200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff090682,0xff447b3c,0xff5da051,0xff60a655,0xff4f8f44,0xff90aa8c, 0xffffffff,0xffffffff,0xfff0f3f0,0xff38752f,0xff459238,0xff3c8d2f,0xff286d1d,0xffbfccbd,0xffffffff,0xffffffff,0xffeef2ee,0xff0c5600,0xff0f6900,0xff0e6300, 0xff376930,0xffffffff,0xffffffff,0xffffffff,0xff094400,0xff0c5300,0xff010200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff070562,0xff49853f, 0xff5aa24f,0xff539948,0xff487f41,0xfff0f3f0,0xffffffff,0xffffffff,0xff9ab096,0xff3a802f,0xff3d8f2f,0xff2f7d23,0xff668e60,0xffffffff,0xffffffff,0xffffffff, 0xff9cb199,0xff0d5c00,0xff0f6700,0xff0c5800,0xff698865,0xffffffff,0xffffffff,0xffacbaaa,0xff0a4600,0xff0c5200,0xff000200,0x99000000,0x66000000,0x3d000000, 0x1f000000,0x3d000000,0xff05044a,0xff498a3f,0xff549c47,0xff478a3c,0xff8ca788,0xffffffff,0xffffffff,0xffffffff,0xff51804b,0xff38852b,0xff318324,0xff2e7025, 0xffe0e6df,0xffffffff,0xffffffff,0xffffffff,0xff5b8455,0xff0d5f00,0xff0e6100,0xff0a4c00,0xffacb9aa,0xffffffff,0xffffffff,0xff496c44,0xff0b4900,0xff0c4f00, 0xff000200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff040334,0xff478b3c,0xff4a943e,0xff38772e,0xfff0f3ef,0xffffffff,0xffffffff,0xffffffff, 0xff296a1f,0xff2f7f23,0xff236e17,0xffb0c3ad,0xffeef1ee,0xffffffff,0xffffffff,0xffffffff,0xff0a4e00,0xff0d5d00,0xff0c5500,0xff275620,0xffffffff,0xffffffff, 0xffbbc6ba,0xff083e00,0xff0b4b00,0xff0c4d00,0xff000200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff040333,0xff428836,0xff418a34,0xff648e5d, 0xffffffff,0xffffffff,0xffffffff,0xffbfcabe,0xff216217,0xff216a15,0xff729a6c,0xffd0dacf,0xff9aa899,0xffffffff,0xffffffff,0xffbcc8ba,0xff0a4d00,0xff0c5400, 0xff094600,0xff9bac99,0xffffffff,0xffeef1ee,0xff265120,0xff0a4600,0xff0b4b00,0xff0b4b00,0xff000200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000, 0xff040332,0xff3b8330,0xff37812b,0xff87a583,0xffffffff,0xffffffff,0xffffffff,0xffd0d8cf,0xff144d0c,0xff70976a,0xffeff3ee,0xff265420,0xffeef1ee,0xffffffff, 0xffffffff,0xff8b9f89,0xff094300,0xff094300,0xff698465,0xffffffff,0xffeef1ee,0xff365a30,0xff0a4200,0xff0a4800,0xff0b4900,0xff0b4800,0xff000200,0x99000000, 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff040338,0xff347e28,0xff317f25,0xff86a681,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffd0dacf,0xffeff3ee, 0xff397130,0xff285b20,0xffffffff,0xffffffff,0xffffffff,0xff8b9c89,0xff073600,0xff789175,0xffffffff,0xffbcc6ba,0xff265020,0xff094000,0xff0a4700,0xff0b4900, 0xff0a4700,0xff0a4500,0xff000200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff050445,0xff2b7620,0xff2d801f,0xff3c7b32,0xffeff3ef,0xffffffff, 0xffffffff,0xffffffff,0xffbdceba,0xff1b6410,0xff0d5f00,0xff397130,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffacbbaa,0xff5a7855,0xff083b00, 0xff094200,0xff0a4600,0xff0b4800,0xff0a4600,0xff0a4500,0xff0a4200,0xff000200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080571,0xff226717, 0xff287f19,0xff217913,0xff35772a,0xff7da278,0xff7ba076,0xff2a6e20,0xff0e6500,0xff106e00,0xff106c00,0xff0d5f00,0xff4b7a44,0xff799475,0xff799375,0xff496e44, @@ -133,104 +133,104 @@ static const QRgb Appearance_data[] = { 0x36000000,0xf38388c5,0xff878cc6,0xff494c6a,0xffb3a7a8,0xffdbd1d1,0xffe4e3e3,0xffececec,0xfff3f3f3,0xfff8f8f8,0xff0076a8,0xff007cb1,0xff121212,0xff1e1e1e, 0xff1e1e1e,0xff121212,0xff060606,0xff000000,0xff00324a,0xff006e9c,0xff006691,0xff2d6e91,0xff848484,0xff737272,0xff645657,0xff552f2f,0xff4a1212,0xff562628, 0xff1b1b1b,0xff03030e,0x95000000,0x60000000,0x3a000000,0xfe8489c6,0xff474a6b,0xffb88081,0xffce8687,0xffd8b7b8,0xffe1dada,0xffe9e8e8,0xffefefef,0xfff3f3f3, 0xff0073a4,0xff0079ad,0xff034966,0xff030303,0xff000000,0xff000000,0xff000000,0xff000000,0xff005c83,0xff006c99,0xff00648f,0xff286c8f,0xff797879,0xff6a6666, 0xff5a4c4a,0xff4c2023,0xff400c0f,0xff400909,0xff383232,0xff000003,0x9c000000,0x67000000,0x3d000000,0xf4767cbb,0xffb87278,0xffc1494c,0xffca6061,0xffd39c9c, 0xffdccfcf,0xffe3e1e1,0xffe8e8e8,0xffebecec,0xff729dbb,0xff0075a6,0xff0074a6,0xff004c6d,0xff000000,0xff000000,0xff000f18,0xff004d6e,0xff006f9d,0xff006794, 0xff00628b,0xff53758c,0xff6e6e6e,0xff5d5b5b,0xff504646,0xff3e2020,0xff381212,0xff413240,0xff0c1250,0xfc0e1754,0x9e000000,0x68000000,0x3c000000,0xe2676dae, 0xff9b85a2,0xffaa7a8b,0xffc76365,0xffce9999,0xffd6c8c8,0xffdcdbdb,0xffe1e1e1,0xffe4e4e4,0xffccd3d9,0xff1b76a2,0xff0073a4,0xff0076a8,0xff0076a8,0xff0076a8, 0xff0073a4,0xff006f9d,0xff006a96,0xff00648e,0xff1b678d,0xff717171,0xff636363,0xff535353,0xff464343,0xff3e3234,0xff282846,0xff0c1553,0xff0f1b60,0xf5101558, 0x9b000000,0x66000000,0x39000000,0xc854589b,0xff6a70b5,0xff6166a8,0xff696b9c,0xffaea3b0,0xffcfc8c8,0xffd2d1d1,0xffd4d4d4,0xffd4d5d4,0xffd3d3d3,0xff8da7ba, 0xff15719d,0xff006e9c,0xff006f9d,0xff006e9c,0xff006c99,0xff006794,0xff00648e,0xff12658c,0xff657581,0xff6b6b6b,0xff5d5d5d,0xff515151,0xff3c3e49,0xff090f46, 0xff0c1250,0xff0f185a,0xff121e63,0xe9091048,0x94000000,0x60000000,0x33000000,0xa43c437f,0xff646cb8,0xff5c63ad,0xff535aa0,0xff474e92,0xff555a8d,0xffa8a8b3, 0xffc3c3c4,0xffc4c4c4,0xffc3c3c3,0xffbebebe,0xffa4aeb5,0xff5282a1,0xff006692,0xff006691,0xff00648f,0xff266586,0xff5e7585,0xff7a7b7d,0xff727272,0xff636364, 0xff464651,0xff181e46,0xff0c1249,0xff0c1252,0xff0f185a,0xff121b61,0xff151e69,0xd6080b34,0x88000000,0x57000000,0x2c000000,0x741d224e,0xf85b62b3,0xff5861b2, 0xff5058a8,0xff46509f,0xff3a4593,0xff2d3886,0xff202d7b,0xff777992,0xff95969e,0xffa0a0a3,0xffaaaaa9,0xffa3a3a3,0xff9e9d9e,0xff989899,0xff919191,0xff888989, 0xff787979,0xff636369,0xff404355,0xff0c0f47,0xff0c124c,0xff0c1552,0xff0f1557,0xff12185c,0xff121b62,0xff151e66,0xfc141d66,0xb9010419,0x79000000,0x4c000000, 0x23000000,0x42000000,0xc83d4593,0xff535cb5,0xff4c55af,0xff414da9,0xff3443a0,0xff283897,0xff202f8e,0xff1b2b83,0xff182679,0xff152070,0xff151e67,0xff121b61, 0xff0f185b,0xff0c1556,0xff0c1553,0xff0c1551,0xff0c1551,0xff0c1552,0xff0f1553,0xff0f1556,0xff0f185a,0xff12185d,0xff121b61,0xff121e65,0xff121e69,0xff121e6c, 0xe70e1047,0x96000000,0x69000000,0x40000000,0x19000000,0x34000000,0x891e2562,0xf84852b1,0xff4350b3,0xff3a46af,0xff2b3ea9,0xff2838a1,0xff23369b,0xff233292, 0xff1e2d8a,0xff1e2883,0xff1b267b,0xff182375,0xff15206f,0xff151e6b,0xff121e66,0xff121b64,0xff121b62,0xff121b61,0xff121b61,0xff121b62,0xff121b64,0xff151e66, 0xff121e69,0xff121e6a,0xff151e6c,0xfc141d69,0xc4050824,0x82000000,0x56000000,0x33000000,0x12000000,0x26000000,0x45000000,0xbc273184,0xff3a47b5,0xff2d40b0, 0xff2b3cac,0xff283ca7,0xff2838a1,0xff23349b,0xff233295,0xff202d8f,0xff1e2d88,0xff1b2b82,0xff18287c,0xff182377,0xff182373,0xff152370,0xff15206d,0xff121e6b, 0xff15206b,0xff151e6a,0xff15206a,0xff121e6c,0xff151e6c,0xff15206d,0xff15206e,0xdf060f3f,0x94000000,0x6c000000,0x45000000,0x26000000,0xb000000,0x1b000000, 0x33000000,0x6c090b35,0xd71e2d91,0xff2b3eaf,0xff2b3eac,0xff2b3ca8,0xff2838a4,0xff2636a0,0xff23369a,0xff233294,0xff202f8f,0xff1e2d89,0xff1e2b84,0xff1b287f, 0xff1b267b,0xff182377,0xff182374,0xff152370,0xff152070,0xff18206e,0xff15206e,0xff15206e,0xff15206e,0xff15206f,0xed0c1350,0xae010310,0x7b000000,0x55000000, 0x33000000,0x1b000000,0x6000000,0x11000000,0x23000000,0x3e000000,0x850a1048,0xe0202d92,0xff2b3caa,0xff283aa8,0xff2838a4,0xff2638a0,0xff26369b,0xff233496, 0xff233291,0xff202d8d,0xff1e2b87,0xff1e2883,0xff1b287f,0xff1b287b,0xff182678,0xff182374,0xff182372,0xff152371,0xff15206f,0xff15206f,0xff15206f,0xf00f1655, 0xbc03041c,0x85000000,0x60000000,0x3e000000,0x23000000,0x11000000,0x3000000,0xa000000,0x16000000,0x2a000000,0x46000000,0x8a0a0f43,0xdb1a2886,0xff2838a4, 0xff2638a0,0xff26369d,0xff23349a,0xff233296,0xff203291,0xff202f8d,0xff1e2d88,0xff1e2b84,0xff1b2880,0xff1b267c,0xff182678,0xff182375,0xff182372,0xff152071, 0xff152070,0xff15206f,0xed0c1350,0xbc03041c,0x88000000,0x66000000,0x46000000,0x2a000000,0x16000000,0xa000000,0x1000000,0x5000000,0xd000000,0x1a000000, 0x2e000000,0x48000000,0x7b050829,0xc8131e6d,0xf9253298,0xff23349a,0xff233497,0xff203293,0xff202f8f,0xff1e2d8a,0xff1e2b86,0xff1b2b82,0xff1b287e,0xff18267b, 0xff182677,0xff182374,0xff182372,0xff152071,0xfc141d6b,0xdf080f41,0xae010310,0x85000000,0x66000000,0x48000000,0x2e000000,0x1a000000,0xd000000,0x5000000, 0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x2e000000,0x46000000,0x60000000,0xa20a0e42,0xd7141e6e,0xfa222d8e,0xff202f90,0xff202f8d,0xff1e2d88, 0xff1e2b85,0xff1b2881,0xff1b287d,0xff18267a,0xff182677,0xff182375,0xfc171f6d,0xe60e124b,0xc3050824,0x94000000,0x7b000000,0x60000000,0x46000000,0x2e000000, 0x1b000000,0xe000000,0x6000000,0x2000000,0xffffff,0x1000000,0x2000000,0x7000000,0xe000000,0x1a000000,0x2a000000,0x3e000000,0x55000000,0x6c000000, 0x9b06082c,0xc20b134d,0xde121b64,0xef182374,0xf91a267d,0xfe1b2881,0xfa1a2475,0xf2121c67,0xe50e1552,0xd1080d39,0xb503061b,0x93000000,0x81000000,0x6c000000, 0x55000000,0x3e000000,0x2a000000,0x1a000000,0xe000000,0x7000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000, 0x16000000,0x23000000,0x33000000,0x45000000,0x56000000,0x67000000,0x75000000,0x81000000,0x89000000,0x8e000000,0x90000000,0x8e000000,0x89000000,0x81000000, 0x75000000,0x67000000,0x56000000,0x45000000,0x33000000,0x23000000,0x16000000,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff, 0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,0x33000000,0x3f000000,0x4a000000,0x53000000,0x59000000,0x5e000000, 0x5f000000,0x5e000000,0x59000000,0x53000000,0x4a000000,0x3f000000,0x33000000,0x26000000,0x1b000000,0x11000000,0xa000000,0x5000000,0x2000000,0x1000000, 0xffffff,0xffffff }; static const QRgb AppsIcon_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0x6c000000,0x5c000000,0xff000000,0xff000000,0xff000000,0xff000000,0x24000000,0xc000000, - 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0x9c000000,0x6c000000,0xff99cc00,0xff99cc00,0xff99cc00,0xff000000,0x6b000000,0x24000000, - 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xb4000000,0x74000000,0xff99cc00,0xff99cc00,0xff99cc00,0xff000000,0x8f000000,0x30000000, - 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xb4000000,0x74000000,0xff99cc00,0xff99cc00,0xff99cc00,0xff000000,0x8f000000,0x30000000, + 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0x9c000000,0x6c000000,0xffa7d400,0xffa7d400,0xffa7d400,0xff000000,0x6b000000,0x24000000, + 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xb4000000,0x74000000,0xffa7d400,0xffa7d400,0xffa7d400,0xff000000,0x8f000000,0x30000000, + 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xb4000000,0x74000000,0xffa7d400,0xffa7d400,0xffa7d400,0xff000000,0x8f000000,0x30000000, 0xffffff,0xffffff,0x6c000000,0x9c000000,0xb4000000,0xb4000000,0x9c000000,0x6c000000,0x6c000000,0x9c000000,0xb4000000,0xb4000000,0x6b000000,0x24000000, 0xffffff,0xffffff,0x5c000000,0x6c000000,0x74000000,0x74000000,0x6c000000,0x5c000000,0x5c000000,0x6c000000,0x74000000,0x74000000,0x24000000,0xc000000, - 0xffffff,0xffffff,0xff000000,0xff99cc00,0xff99cc00,0xff99cc00,0x6c000000,0x5c000000,0xff99cc00,0xff99cc00,0xff99cc00,0xff000000,0x24000000,0xc000000, - 0xffffff,0xffffff,0xff000000,0xff99cc00,0xff99cc00,0xff99cc00,0x9c000000,0x6c000000,0xff99cc00,0xff99cc00,0xff99cc00,0xff000000,0x6b000000,0x24000000, - 0xffffff,0xffffff,0xff000000,0xff99cc00,0xff99cc00,0xff99cc00,0xb4000000,0x74000000,0xff99cc00,0xff99cc00,0xff99cc00,0xff000000,0x8f000000,0x30000000, + 0xffffff,0xffffff,0xff000000,0xffa7d400,0xffa7d400,0xffa7d400,0x6c000000,0x5c000000,0xffa7d400,0xffa7d400,0xffa7d400,0xff000000,0x24000000,0xc000000, + 0xffffff,0xffffff,0xff000000,0xffa7d400,0xffa7d400,0xffa7d400,0x9c000000,0x6c000000,0xffa7d400,0xffa7d400,0xffa7d400,0xff000000,0x6b000000,0x24000000, + 0xffffff,0xffffff,0xff000000,0xffa7d400,0xffa7d400,0xffa7d400,0xb4000000,0x74000000,0xffa7d400,0xffa7d400,0xffa7d400,0xff000000,0x8f000000,0x30000000, 0xffffff,0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xb4000000,0x74000000,0xff000000,0xff000000,0xff000000,0xff000000,0x8f000000,0x30000000, 0xffffff,0xffffff,0x24000000,0x6b000000,0x8f000000,0x8f000000,0x6b000000,0x24000000,0x24000000,0x6b000000,0x8f000000,0x8f000000,0x6b000000,0x24000000, 0xffffff,0xffffff,0xc000000,0x24000000,0x30000000,0x30000000,0x24000000,0xc000000,0xc000000,0x24000000,0x30000000,0x30000000,0x24000000,0xc000000 }; static const QRgb Calculator_data[] = { 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000, 0x1f000000,0x1f000000,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x1d000000,0x1b000000, 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000, 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3e040404,0x3f080808,0x3f080808,0x3f0c0c0c,0x3f0c0c0c,0x3f0c0c0c,0x3f0c0c0c,0x3f0c0c0c,0x3f080808, 0x3f080808,0x3e040404,0x3c040404,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff447420,0xff447421,0xff457521,0xff457521, 0xff457521,0xff457521,0xff457521,0xff457521,0xff447421,0xff437220,0xff41711e,0xff3f6e1d,0xff3d6c1c,0xff3a6a1a,0xff376518,0xff356316,0xff315f14,0xff2d5b11, 0xff2b570f,0xff29550e,0xff26520c,0xff234f0a,0xff1f4b07,0xff1c4805,0xff184303,0xff153f00,0xff133c00,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000, 0xff447421,0xff7f9a69,0xff7f9a69,0xff809a6a,0xff809a6a,0xff809a6a,0xff7f9a69,0xff7f9a69,0xff7e9867,0xff7b9664,0xff799461,0xff74915b,0xff6f8d56,0xff6a8a51, 0xff65844a,0xff608044,0xff597b3c,0xff527634,0xff4c712d,0xff476d27,0xff426921,0xff3b6419,0xff355f12,0xff2d5909,0xff285403,0xff265002,0xff133b00,0x5c000000, 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff457521,0xff7f9a69,0xff809a6a,0xff809a6a,0xff809a6a,0xff809a6a,0xff7f9a69,0xff7e9867,0xff7e9867,0xff7b9664, 0xff77935f,0xff738f5a,0xff6e8c54,0xff68874e,0xff638448,0xff5e7f42,0xff577939,0xff507431,0xff4a702a,0xff446b24,0xff3f671e,0xff396216,0xff315c0d,0xff2c5608, 0xff295306,0xff264f04,0xff133801,0x75020202,0x4f030303,0x2e000000,0x1b000000,0x36000000,0xff457521,0xff809a6a,0xff809a6a,0xff809a6a,0xff809a6a,0xff7f9969, 0xff7f9969,0xff7e9767,0xff7e9767,0xff7b9664,0xff779360,0xff718d58,0xff6d8a54,0xff68854d,0xff628147,0xff5b7d3e,0xff557837,0xff4e722f,0xff486e28,0xff436a23, 0xff3e661b,0xff376014,0xff325b0f,0xff2e570c,0xff2b5209,0xff284e07,0xff133801,0x88060606,0x5b030303,0x37050505,0x1d000000,0x3b000000,0xff7db049,0xffe1e1e1, 0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada, 0xffdadada,0xffdadada,0xffdadada,0xffd6d6d6,0xffb2b9ad,0xff5d7747,0xff345c14,0xff315711,0xff2d520e,0xff294c0a,0xff133602,0x95070707,0x63050505,0x3c040404, 0x1f000000,0x3d000000,0xff7aab47,0xffd8d8d8,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece, 0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcccccc,0xffb1b1b1,0xff666c61,0xff375a19,0xff345616,0xff2e5111,0xff2a4c0e, 0xff143603,0x9b0a0a0a,0x68070707,0x3e040404,0x1f000000,0x3d000000,0xff76a645,0xffcecece,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2, 0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc1c1c1,0xffbfbfbf,0xff909090,0xff444543, 0xff37561c,0xff345319,0xff2f4f15,0xff2b4a11,0xff163404,0x9c0d0d0d,0x690c0c0c,0x3f080808,0x1f000000,0x3d000000,0xff50712f,0xff6a6a6a,0xff616161,0xff626262, 0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff737373,0xff9d9d9d, 0xffbdbdbd,0xffbdbdbd,0xff848484,0xff363735,0xff324c1c,0xff324b1b,0xff2e4918,0xff2b4714,0xff163405,0x9d121212,0x6a0e0e0e,0x3f0c0c0c,0x1f000000,0x3d000000, 0xff3d5524,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xffc2c2c2,0xffb8b8b8,0xff7d7d7d,0xff30342d,0xff293d18,0xff2a3e19,0xff2a4118,0xff294115,0xff163106,0x9e151515, 0x6b131313,0x40101010,0x1f000000,0x3d000000,0xff3b5323,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0xff73716b,0xffe5e1d5,0xff000000,0xff73716b,0xffe5e1d5,0xff73716b,0xff000000,0xffc2c2c2,0xffb7b7b7,0xff7a7a7a,0xff2e312b,0xff1e2c13,0xff213015, 0xff253517,0xff273a16,0xff152e06,0xa01b1b1b,0x6c181818,0x41141414,0x1f000000,0x3d000000,0xff3c5423,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffe5e1d5,0xff000000,0xffe5e1d5,0xff000000,0xffe5e1d5,0xff000000,0xffc2c2c2,0xffb7b7b7, 0xff7a7a7a,0xff2e302d,0xff131c0c,0xff182210,0xff1e2a13,0xff223216,0xff132b07,0xa1202020,0x6d1c1c1c,0x42171717,0x20000000,0x3f000000,0xff456128,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff6e6d67,0xffdcd8cd,0xff6e6d67,0xff6e6d67,0xffddd9cd, 0xff706e68,0xff000000,0xffc0c0c0,0xffb6b6b6,0xff7a7a7a,0xff2d2e2c,0xff0c1108,0xff11180c,0xff192211,0xff202d15,0xff132807,0xa2232323,0x6e202020,0x421b1b1b, 0x21000000,0x41000000,0xff5c8136,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffbababa,0xffb3b3b3,0xff797979,0xff2c2d2c,0xff080b05,0xff0e130a,0xff171e10,0xff1f2a15, 0xff132707,0xa3262626,0x6f222222,0x44222222,0x22000000,0x46040404,0xff6a953e,0xffb7b7b7,0xffa2a2a2,0xff9a9a9a,0xff959595,0xff959595,0xff939393,0xff939393, 0xff939393,0xff959595,0xff939393,0xff939393,0xff939393,0xff959595,0xff959595,0xff9a9a9a,0xffa2a2a2,0xffacacac,0xffb3b3b3,0xffb0b0b0,0xff797979,0xff2c2c2b, 0xff060804,0xff0c1009,0xff161c10,0xff1e2916,0xff132607,0xa3292929,0x70242424,0x44222222,0x24070707,0x4a070707,0xff68933d,0xff383838,0xff303030,0xff2c2c2c, 0xff2a2a2a,0xff2a2a2a,0xff292929,0xff292929,0xff292929,0xff2a2a2a,0xff292929,0xff292929,0xff292929,0xff2a2a2a,0xff2a2a2a,0xff2c2c2c,0xff303030,0xff353535, 0xffacacac,0xffacacac,0xff787878,0xff2b2c2b,0xff050704,0xff0c1009,0xff161c10,0xff1e2916,0xff132507,0xa3292929,0x70242424,0x44222222,0x26070707,0x4f060606, 0xff628a3a,0xff333333,0xffffffe9,0xfffeffdd,0xffe4e5ad,0xff202020,0xffffffe9,0xfffeffdd,0xffe4e5ad,0xff202020,0xffffffe9,0xfffeffdd,0xffe4e5ad,0xff202020, 0xffffffe9,0xfffeffdd,0xffe4e5ad,0xff303030,0xffa2a2a2,0xffa8a8a8,0xff777777,0xff2b2c2b,0xff050704,0xff0c0f09,0xff161c11,0xff1e2816,0xff132508,0xa3272727, 0x6f222222,0x431e1e1e,0x28060606,0x53090909,0xff5e8437,0xff2f2f2f,0xfffeffdd,0xfffeffc1,0xff575742,0xff191919,0xfffeffdd,0xfffeffc1,0xff575742,0xff191919, @@ -456,107 +456,107 @@ static const QRgb Clock_data[] = { 0xffe4e4d9,0xfffefefd,0xfffdfdfc,0xffffffff,0xfffefefe,0xffececec,0xffd4d4d4,0xff17148e,0xffb2b2c5,0xffe6e6e6,0xfffcfcfc,0xfffbfbf8,0xffeeeee3,0xffe5e5d5, 0xfff0f0e8,0xffe2e2d4,0xffc0bfa1,0xffbebea1,0xffe0e0d4,0xffeeeee7,0xffc7c6b7,0xff39386c,0xff050351,0xff050353,0xff00002c,0x99000000,0x66000000,0x3d000000, 0x1f000000,0x3d000000,0xff060444,0xffadad8e,0xffe3e3d8,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xffe8e8e8,0xffc5c5ca,0xff0a068a,0xff908fb3,0xffdfdfdf, 0xfff9f9f9,0xffffffff,0xfffefefd,0xffffffff,0xfff9f9f5,0xffc7c7a9,0xffb3b38f,0xffaeae8a,0xffb9b99c,0xfff3f3ef,0xffdeddd1,0xff6b6a86,0xff04034b,0xff05034d, 0xff00002a,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080560,0xffd9d9cb,0xfff7f7f3,0xffffffff,0xffffffff,0xffffffff,0xfffcfcfc,0xffe3e3e3, 0xffa7a7ba,0xff0a068a,0xff7271a6,0xffd9d9d9,0xfff7f7f7,0xffffffff,0xffffffff,0xffffffff,0xfffcfcfa,0xffd2d2ba,0xffb4b490,0xffafaf8c,0xffc2c1a8,0xfff5f5f1, 0xffedece5,0xff9797a2,0xff040346,0xff050249,0xff000028,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a0687,0xfffdfdfd,0xffffffff,0xffffffff, 0xffffffff,0xffffffff,0xfffafafa,0xffdfdfdf,0xff8c8bad,0xff0a068a,0xff57559b,0xffd4d4d4,0xfff4f4f4,0xffffffff,0xffffffff,0xffffffff,0xfffefefd,0xfff2f2ea, 0xffd5d5c1,0xffcfcfba,0xffe9e9e0,0xfffdfdfc,0xfff7f7f2,0xffbdbcbc,0xff040242,0xff040245,0xff000026,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000, 0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff7f7f7,0xffdadada,0xff706fa1,0xff0a068a,0xff3b3992,0xffcecece,0xfff1f1f1,0xffffffff, 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfc,0xffefefe8,0xffd7d7c7,0xffe0e0d4,0xfff2f2ed,0xffd8d8d1,0xff03023e,0xff040242,0xff000024,0x99000000, 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff5f5f5,0xffd6d6d6,0xff5a5899,0xff0a068a, 0xff2a278e,0xffcacaca,0xffefefef,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff9faf7,0xffc5c5ab,0xffa7a784,0xffa2a280,0xffbebfaa,0xffd6d6d0, 0xff03023a,0xff04023f,0xff000023,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, 0xfff5f5f5,0xffd7d7d7,0xff494696,0xff0a068a,0xff15118b,0xffc3c3c3,0xffe4e4e4,0xfff5f5f5,0xfff8f8f8,0xfffcfcfc,0xfffefefe,0xffffffff,0xfff6f6f1,0xffb2b292, 0xffa5a482,0xff9f9f7d,0xff9f9f81,0xffd3d4cf,0xff030239,0xff04023c,0xff000022,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff, 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff8f8f8,0xffdddddd,0xff5c5a9f,0xff0a068a,0xff2b288f,0xffb9b9b9,0xffcbcbcb,0xffd6d6d6,0xffdddddd,0xffe9e9e9, 0xfff2f2f2,0xfff8f8f8,0xfff8f8f6,0xffd1d1bf,0xffa7a786,0xffa1a180,0xffbdbdac,0xffdfdfdc,0xff030238,0xff04023c,0xff000021,0x99000000,0x66000000,0x3d000000, 0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xffe9e9e9,0xffcacace,0xff272492,0xff9595ac,0xff8c8ba8, 0xff1c188e,0xff4b4898,0xff8786aa,0xffc8c8c8,0xffd8d8d8,0xffe6e6e6,0xfff1f1f1,0xfff1f1ee,0xfff2f2ee,0xfff5f5f1,0xfff8f8f5,0xffd0d0d4,0xff030238,0xff04023c, 0xff000021,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfff5f5f5, 0xffebebeb,0xffd0d0d7,0xffcccccc,0xff3c3996,0xff0a068a,0xff0a068a,0xff0a068a,0xff16128d,0xff5350a0,0xff9b9abe,0xffcfcfc6,0xffc3c3b1,0xffe3e3db,0xfffefefe, 0xfffafaf8,0xffadacba,0xff030239,0xff04023c,0xff000022,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xffffffff,0xffffffff, 0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffafafa,0xfff2f2f2,0xffe3e3e3,0xffa1a0bd,0xff4e4c9b,0xff4a4796,0xff4a4897,0xff4e4c9b,0xff5350a0,0xff5654a2, 0xff504e88,0xff777778,0xffaaaa90,0xfff8f8f7,0xfff9f9f6,0xff7e7e96,0xff040239,0xff04033d,0xff000022,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000, 0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffcfcfc,0xfff5f5f5,0xffe7e7e7,0xffdadada,0xffd3d3d3, 0xffd1d1d1,0xffd4d4d4,0xffdadada,0xffd7d7d5,0xff969678,0xff919171,0xff9a9a7b,0xffededea,0xfff9f9f8,0xff45456b,0xff04023b,0xff04033e,0xff000023,0x99000000, 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe, 0xfffdfdfd,0xfff9f9f9,0xfff5f5f5,0xfff3f3f3,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xffefefee,0xffbebeac,0xff9b9b7d,0xffc1c1b1,0xfff3f3f1,0xffacabbb,0xff040339, 0xff04023d,0xff040340,0xff000024,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffafaf8,0xffe3e3da,0xffd7d7ca,0xffecece5,0xfff6f6f3, 0xfff9f9f8,0xfff6f5f6,0xff585779,0xff04023a,0xff04033e,0xff050342,0xff000024,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff090575,0xffffffff, 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff3f3f0,0xffc8c8b7, 0xff9d9e7f,0xff969575,0xffc2c2b0,0xfff0f0f0,0xfffdfcfc,0xff8f8fa5,0xff030238,0xff04023d,0xff040341,0xff050342,0xff000025,0x87000000,0x5a000000,0x36000000, 0x17000000,0x2e000000,0xff07045b,0xff090577,0xff0a068a,0xff0a068a,0xff0a068a,0xff0a068a,0xff0a068a,0xff0a068a,0xff0a068a,0xff0a068a,0xff0a068a,0xff0a068a, 0xff0a068a,0xff0a0689,0xff090574,0xff060444,0xff06033c,0xff06033b,0xff060448,0xff0a0684,0xff070465,0xff01012c,0xff000020,0xff000022,0xff000024,0xff000025, 0xff000026,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000, 0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000, 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000, 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000, 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000, 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000, 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000, 0x18000000,0xf000000 }; static const QRgb CloseButton_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0x3ed5d5d5,0x93d4d4d4,0xd5d8d8d8,0xfad5d5d5,0xd8c8c8c8,0x9ebebebe,0x508e8e8e,0xc000000,0x3000000,0xffffff,0xffffff, - 0xffffff,0xffffff,0x60d5d5d5,0xdbdddddd,0xffdcdcdc,0xffcbcbcb,0xffc5c5c5,0xffc4c4c4,0xffd0d0d0,0xe6bbbbbb,0x837d7d7d,0x18000000,0x4000000,0xffffff, - 0xffffff,0x3ed6d5d5,0xdbd3d3d3,0xffc1c1c1,0xff262626,0xff777777,0xffb7b6b7,0xff767576,0xff252525,0xffa4a5a4,0xec8f8e8f,0x75474747,0x18000000,0x3000000, - 0xffffff,0x94cdcecd,0xffc8c7c7,0xff7b7b7b,0xff000000,0xff000000,0xff484848,0xff000000,0xff000000,0xff757675,0xff9d9c9c,0xc84f4f4f,0x3d000000,0xc000000, - 0xffffff,0xd5c2c2c2,0xffafafaf,0xffa0a0a0,0xff686868,0xff000000,0xff000000,0xff000000,0xff656565,0xffa4a4a4,0xffa4a4a4,0xef4f4f4f,0x61000000,0x1a000000, - 0xffffff,0xfab4b4b4,0xff9d9d9d,0xff959595,0xff696969,0xff000000,0xff000000,0xff000000,0xff626262,0xffa1a1a1,0xff939393,0xfd4b4b4b,0x7c000000,0x25000000, - 0xffffff,0xd9a3a3a3,0xff919191,0xff6c6c6c,0xff000000,0xff000000,0xff393939,0xff000000,0xff000000,0xff696969,0xff7b7b7b,0xf2373737,0x85000000,0x2b000000, - 0xffffff,0xa0848484,0xff8c8c8b,0xff858686,0xff292929,0xff585858,0xff929291,0xff5c5c5c,0xff262626,0xff868786,0xff585758,0xdf272727,0x7c000000,0x25000000, - 0xffffff,0x515d5d5d,0xe7707070,0xff7c7c7c,0xff848484,0xff898a8a,0xff8c8c8c,0xff8f8f8f,0xff7f7f7f,0xff616061,0xf5313131,0xbb101010,0x61000000,0x1a000000, - 0xffffff,0xc000000,0x843f3f3f,0xed505050,0xff5d5c5c,0xff6a6a69,0xff6c6c6c,0xff646364,0xff515051,0xf5313130,0xcd141414,0x83000000,0x3d000000,0xc000000, - 0xffffff,0x3000000,0x18000000,0x76212121,0xc92b2b2b,0xf0303030,0xfd353535,0xf32a2a2a,0xdf1d1d1d,0xbb0d0d0d,0x83000000,0x4b000000,0x18000000,0x3000000, + 0xffffff,0xffffff,0xffffff,0x3edcdcdc,0x93dbdbdb,0xd5dedede,0xfadcdcdc,0xd8d1d1d1,0x9ec8c8c8,0x509d9d9d,0xc000000,0x3000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0x60dcdcdc,0xdbe3e3e3,0xffe2e2e2,0xffd3d3d3,0xffcecece,0xffcdcdcd,0xffd7d7d7,0xe6c5c5c5,0x838d8d8d,0x18000000,0x4000000,0xffffff, + 0xffffff,0x3edddcdc,0xdbdadada,0xffcbcbcb,0xff353535,0xff888888,0xffc2c1c2,0xff878687,0xff343434,0xffb1b2b1,0xec9e9d9e,0x75595959,0x18000000,0x3000000, + 0xffffff,0x94d5d6d5,0xffd1d0d0,0xff8c8c8c,0xff000000,0xff000000,0xff5a5a5a,0xff000000,0xff000000,0xff868786,0xffabaaaa,0xc8616161,0x3d000000,0xc000000, + 0xffffff,0xd5cbcbcb,0xffbbbbbb,0xffadadad,0xff7a7a7a,0xff000000,0xff000000,0xff000000,0xff777777,0xffb1b1b1,0xffb1b1b1,0xef616161,0x61000000,0x1a000000, + 0xffffff,0xfabfbfbf,0xffababab,0xffa4a4a4,0xff7a7a7a,0xff000000,0xff000000,0xff000000,0xff747474,0xffaeaeae,0xffa2a2a2,0xfd5d5d5d,0x7c000000,0x25000000, + 0xffffff,0xd9b0b0b0,0xffa0a0a0,0xff7d7d7d,0xff000000,0xff000000,0xff4a4a4a,0xff000000,0xff000000,0xff7a7a7a,0xff8c8c8c,0xf2484848,0x85000000,0x2b000000, + 0xffffff,0xa0949494,0xff9b9b9a,0xff959696,0xff383838,0xff6a6a6a,0xffa1a1a0,0xff6e6e6e,0xff353535,0xff969796,0xff6a696a,0xdf363636,0x7c000000,0x25000000, + 0xffffff,0x516f6f6f,0xe7818181,0xff8d8d8d,0xff949494,0xff999a9a,0xff9b9b9b,0xff9e9e9e,0xff8f8f8f,0xff737273,0xf5414141,0xbb1a1a1a,0x61000000,0x1a000000, + 0xffffff,0xc000000,0x84505050,0xed626262,0xff6f6e6e,0xff7b7b7a,0xff7d7d7d,0xff767576,0xff636263,0xf5414140,0xcd1f1f1f,0x83000000,0x3d000000,0xc000000, + 0xffffff,0x3000000,0x18000000,0x762f2f2f,0xc93b3b3b,0xf0404040,0xfd464646,0xf3393939,0xdf2a2a2a,0xbb161616,0x83000000,0x4b000000,0x18000000,0x3000000, 0xffffff,0xffffff,0x4000000,0x18000000,0x3d000000,0x61000000,0x7c000000,0x85000000,0x7c000000,0x61000000,0x3d000000,0x18000000,0x4000000,0xffffff, 0xffffff,0xffffff,0xffffff,0x3000000,0xc000000,0x1a000000,0x25000000,0x2b000000,0x25000000,0x1a000000,0xc000000,0x3000000,0xffffff,0xffffff }; static const QRgb DateBook_data[] = { 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000, 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000, 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000, 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000, 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff0b471e,0xff0b471e,0xff0b471e,0xff0b471e, 0xff0b461e,0xff0b461e,0xff0b461d,0xff0b451d,0xff0a441c,0xff0a431c,0xff0a411b,0xff093f1a,0xff093d19,0xff083a17,0xff083716,0xff073514,0xff073213,0xff062e11, 0xff052b0f,0xff05280e,0xff04250c,0xff03220b,0xff031f09,0xff021708,0xff011305,0xff011705,0xff011504,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000, 0xff0b471e,0xffd8d9d8,0xffd7d8d8,0xffd4d7d5,0xffd2d4d2,0xffced2cf,0xffc9cecb,0xffc4cbc6,0xffbdc6bf,0xffb4bfb8,0xffabb9af,0xffa0b0a5,0xff93a699,0xff879d8d, 0xff7a9481,0xff6c8975,0xff5e7f69,0xff52775d,0xff466c52,0xff3a6347,0xff2b4e37,0xff465658,0xff9492ae,0xffe1daff,0xff6a6b7f,0xff0d3a1b,0xff011404,0x5c000000, 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff0b461e,0xffd4d7d5,0xffd1d3d2,0xffccd0cd,0xffc5ccc7,0xffbfc6c1,0xffb6c1b9,0xffaebab2,0xffa3b3a7,0xff97ab9d, 0xff8aa191,0xff7e9785,0xff708d78,0xff61836c,0xff567961,0xff4a7056,0xff3f684b,0xff2b4e35,0xff4a5c59,0xff7d7f95,0xffd9d2fd,0xffd3ccf2,0xffcfc8ee,0xffcac3ef, 0xffaba6c9,0xff072510,0xff011303,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff0b451d,0xffccd1ce,0xffc4cbc6,0xffbac4bd,0xffb1bdb4,0xffa5b4aa, 0xff9aada0,0xff8ea495,0xff819b89,0xff73917d,0xff678771,0xff597d65,0xff4d7458,0xff406b4e,0xff2e533b,0xff354c42,0xff8a8ba1,0xffb6aed4,0xffc4bde8,0xffc1bbe8, 0xffbdb6d9,0xffbbb7d9,0xffbbb5da,0xffb9b2dc,0xffcfc9f1,0xff23322f,0xff001103,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff0a431c,0xffc0c7c2, 0xffb2beb5,0xffa2b3a7,0xff93a799,0xff859d8c,0xff769480,0xff698a74,0xff5c8168,0xff50785c,0xff436f52,0xff355d42,0xff2e463b,0xff83889a,0xffb8b3d9,0xffd8d0fb, 0xffc2bae2,0xffbcb7db,0xffb4afd3,0xffb7b0d5,0xffbcb6d7,0xffbbb4dc,0xffb0aad3,0xffc0b8e1,0xffd3cdef,0xff6a6a7b,0xff000e03,0x93000000,0x62000000,0x3b000000, 0x1f000000,0x3d000000,0xff0a411b,0xffaebbb2,0xff98ac9e,0xff849d8c,0xff71907b,0xff61846b,0xff527b5f,0xff467154,0xff396346,0xff344d41,0xff58626a,0xffbfb8df, 0xffcfcaf5,0xffc2bde6,0xff908aaa,0xffb5afd3,0xffccc4ea,0xffc1bee1,0xffc1bbdc,0xffbeb8db,0xffbab2da,0xffbeb9dd,0xffc5c0e6,0xffbdb8e0,0xffbfb9df,0xffb9b4d5, 0xff000a02,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff093e19,0xff98ac9e,0xff7d9886,0xff648770,0xff51785d,0xff3d664a,0xff325340,0xff57626a, 0xffbdb8d8,0xffc0bae2,0xffccc5ed,0xffc0b9e2,0xffbab2d8,0xff34303f,0xff33313d,0xff9c95b1,0xffb1a8ce,0xffa49fc1,0xffb5afd6,0xffbfb8e1,0xffb8b2db,0xffc6c2e9, 0xffa9a5c7,0xffafa8c9,0xffc1bbe3,0xffd0c9f1,0xff020f06,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff083a17,0xff829d8b,0xff63856e,0xff3b5945, 0xff626d76,0xff9390ab,0xffcec8f0,0xffccc6f1,0xffc1badd,0xffc0badd,0xffb9b2d2,0xffb1a7c7,0xffbfb7d6,0xff5d5c6e,0xff464356,0xffaba3c5,0xffc3bddf,0xffc4c0e7, 0xffcdcaf5,0xffb5afd5,0xff9f96b0,0xff82777f,0xff5a4b38,0xff9f959f,0xffc9c2ee,0xffd5cff7,0xff062814,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000, 0xff073615,0xff6f8e79,0xff4d635a,0xffe7e1ff,0xffc4bfe6,0xffc4bde5,0xffb5b0d4,0xffb8b3d5,0xffb9b2d7,0xffb3accc,0xffbab3d1,0xffb4abd2,0xffc6c0e7,0xffd5cff2, 0xffcec8ef,0xffc6c0e9,0xffb3aed4,0xff8f899e,0xff83787e,0xff726767,0xff6f5d43,0xffaaa1b5,0xff56432a,0xff948687,0xffc3bee8,0xffc7c0e2,0xff0a3c1e,0x99000000, 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff073313,0xff60856d,0xff7a7b89,0xffbdb7da,0xffbab5db,0xffbdb8dc,0xffb9b2d7,0xffbdb7dd,0xffc5bee6,0xffc0bae0, 0xffc9c3e8,0xffc5bfe6,0xffb7b4db,0xffafabce,0xffa5a0c4,0xff847c8e,0xff7a7074,0xff999098,0xff5e4f41,0xff766866,0xff716458,0xffcecaee,0xff746a76,0xff8d7f7c, 0xffbfbade,0xffb6b0d3,0xff0b4221,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff063112,0xff4f615b,0xffb1aac4,0xffa49ec1,0xffb9b3dc,0xffc8c1e7, 0xffbeb9dd,0xffbbb5dd,0xff9f97ac,0xffc7c1e1,0xffb7b2d3,0xffb8b2d7,0xff79707c,0xff615546,0xff8b828f,0xff655850,0xff6c5e50,0xff756859,0xff655545,0xff7c6e61, 0xffa097a7,0xffc5c2eb,0xff8f8799,0xffa79fb5,0xffb7b2dd,0xffbfbbe0,0xff0b4322,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff063012,0xff43594c, 0xffb4aecd,0xffa59dbc,0xffcbc5ea,0xffbdb6db,0xffbbb5dc,0xffb0abd3,0xff4e4034,0xff9c939a,0xff83787e,0xff786a5d,0xff817675,0xff6f6254,0xff877a71,0xff7f757b, 0xff6c5b45,0xffa79da9,0xffafa6c2,0xffc7c2eb,0xffa9a4d2,0xff7f7585,0xff786c68,0xff6e5e54,0xff7d6f6f,0xffb7aed2,0xff0a3f20,0x99000000,0x66000000,0x3d000000, 0x1f000000,0x3d000000,0xff063112,0xff557861,0xff8581a0,0xff9f97b5,0xffc0badd,0xffbdb7d8,0xffb4add0,0xffbfbaea,0xff716878,0xff75665f,0xff887e8d,0xff5f4e36, 0xff736458,0xff867b77,0xffa195a0,0xffb1a9cb,0xffc6bfe2,0xffc6c0e7,0xffc6c2ea,0xff787082,0xff4f3d2c,0xff523d1d,0xff513d1a,0xff624b27,0xff604c2a,0xff74624a, 0xff0a3a1c,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff073213,0xff5f816a,0xff445454,0xffb9b0cd,0xffa39dba,0xffbeb9dd,0xffc4c0e3,0xffafaac7, 0xff6c6267,0xff615440,0xff8d8087,0xff7f7067,0xffc4bccf,0xffd6d4f8,0xffd6d1fe,0xffd2cbf2,0xffc1bbde,0xffc9c1eb,0xff7d7488,0xff3e2b0e,0xff67502e,0xff7a684f, 0xff8f817f,0xff74645c,0xff624e33,0xff604b27,0xff082f13,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff073414,0xff698873,0xff405b4c,0xffb6b0d1, 0xffaea6c3,0xffb9b3dc,0xffc0badf,0xffbcb5d1,0xff776964,0xffaca0a8,0xffd2cef9,0xffc4bfe8,0xffa199ad,0xff8c8186,0xff7b7073,0xff9b95ac,0xffcdcaf5,0xffbbb7e0, 0xff4f4339,0xff624b28,0xff736047,0xffbbb5cc,0xffcbc6f5,0xffaca6d3,0xff544336,0xff5b4525,0xff072b11,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000, 0xff083615,0xff748f7d,0xff4f745b,0xff908ea8,0xffaca2bd,0xffb8b0d6,0xffb9b0d5,0xffbeb6d8,0xffcac3e6,0xffcbc6ee,0xff817a91,0xff554737,0xff544122,0xff533f1e, 0xff4d3817,0xff5a472c,0xff8b7c74,0xffb5b0d4,0xff4c4035,0xff51390e,0xff837155,0xffd7d3f8,0xffc4bee7,0xff797286,0xff56432d,0xff715d3d,0xff093a1a,0x99000000, 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff083816,0xff7e9585,0xff5b7c66,0xff435152,0xffbab3d3,0xffaca3c1,0xffb8b0d4,0xffb8b3d6,0xffc6bfe1,0xff696172, 0xff4b391c,0xff685432,0xff6b5739,0xff6f5d44,0xff685336,0xff675336,0xff5e4724,0xffa09699,0xff8a7e7c,0xff97897e,0xffb7aebc,0xffb5adce,0xff5b4e44,0xff5c4826, @@ -626,491 +626,491 @@ static const QRgb DateTime_data[] = { 0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xff9caf9f,0xff2f5674,0xdf15334b,0x75000000,0x4a000000,0x2f000000,0xde5c85a5,0xff6590b3,0xff354c5e, 0xfffeffc1,0xffcfd0a6,0xffbbbd9b,0xfff3f5bb,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xff87a2a7,0xff0f448d,0xff0f448d,0xffcdd9b6, 0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffd1d2a7,0xffbbbd9b,0xfff2f4ba,0xfffeffc1,0xffc3ceac,0xff3c5d79,0xf01c3f59,0x81000000,0x53000000, 0x34000000,0xf35c88ac,0xff5f8cb1,0xff324a5e,0xfffeffc1,0xffadaf93,0xffadaf93,0xffbabc9b,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1, 0xff5d819e,0xff0f448d,0xff0f448d,0xffcedab7,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfff1f3ba,0xffadaf93,0xffadaf93,0xffbabc9b,0xfffeffc1,0xffd0d9b1, 0xff44627b,0xfa224360,0x89000000,0x59000000,0x37000000,0xfe5a87ad,0xff5a88ae,0xff2f485c,0xfffeffc1,0xffadaf93,0xffadaf93,0xffd0d1a7,0xfffeffc1,0xfffeffc1, 0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffcedab7,0xff15488e,0xff0f448d,0xffd5dfb8,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffadaf93, 0xffadaf93,0xffd6d8ab,0xfffeffc1,0xffd2dab1,0xff47647b,0xfe244662,0x8e000000,0x5e000000,0x38000000,0xf3507fa5,0xff5283aa,0xff2d485e,0xfffeffc1,0xfffeffc1, 0xfffafbbf,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xff92abaa,0xff3c6797,0xff436c98,0xfffeffc1,0xfffeffc1, 0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffafbbf,0xfffeffc1,0xfffeffc1,0xffd3dab1,0xff4b667c,0xfb24425b,0x90000000,0x5f000000,0x37000000,0xe047759a, 0xff4c7ea7,0xff2c4b65,0xfff1f3bb,0xfffeffc1,0xfffeffc1,0xfff3f5bb,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xff0f448d, 0xff0f448d,0xff0f448d,0xff0f448d,0xff5c809e,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffbfcbf,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffb6c1a7,0xff4d667b,0xf3213b51, 0x8e000000,0x5e000000,0x34000000,0xc43a6689,0xff4378a3,0xff2e5371,0xffbbc6a4,0xfffeffc1,0xffb4b697,0xffadaf93,0xffc1c39f,0xfffeffc1,0xfffeffc1,0xfffeffc1, 0xfffeffc1,0xfffeffc1,0xfffeffc1,0xff809da6,0xff164a8f,0xff0f448d,0xff0f448d,0xff0f448d,0xff0f448d,0xffadbeac,0xffadaf93,0xffadaf93,0xffecedb7,0xfffeffc1, 0xfffeffc1,0xff90a099,0xff486074,0xe7193143,0x89000000,0x59000000,0x2f000000,0x9f2c5371,0xff3c739f,0xff2d5b7f,0xff768e8a,0xfffeffc1,0xffadaf93,0xffadaf93, 0xffb4b697,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfff8fbc0,0xff61859f,0xff0f448d,0xff0f448d,0xff2c5a92, 0xffadaf93,0xffadaf93,0xffd5d7aa,0xfffeffc1,0xfff4f6bd,0xff687d89,0xff3b556b,0xd311222f,0x81000000,0x53000000,0x29000000,0x701b354a,0xf7346b98,0xff2d618c, 0xff224d71,0xffe2e8b6,0xffe4e5b2,0xffbabc9b,0xfff3f5bb,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1, 0xfffeffc1,0xfffeffc1,0xff7695a3,0xffecf1bd,0xffc2c49f,0xffc1c39f,0xfffeffc1,0xfffeffc1,0xffc6cdad,0xff596f80,0xfc2b4559,0xb6061118,0x75000000,0x4a000000, 0x21000000,0x3f000000,0xc625557b,0xff296391,0xff1f537d,0xff6e8c8d,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffedeeb7,0xffb4b697,0xffc8caa2,0xfffeffc1,0xfffeffc1, 0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffe4e5b2,0xffb4b697,0xffc9cba3,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfff5f7be,0xff71838d,0xff485f71, 0xe8192d3e,0x93020202,0x67000000,0x3f000000,0x19000000,0x33000000,0x88163752,0xf8225d8d,0xff1b5888,0xff144b76,0xffb3c5a8,0xfffeffc1,0xfffeffc1,0xffb3b596, 0xffadaf93,0xffadaf93,0xfff2f4ba,0xfffeffc1,0xffd0d1a7,0xffbabc9b,0xfff3f5bb,0xfffeffc1,0xffb4b697,0xffadaf93,0xffadaf93,0xfff9fabe,0xfffeffc1,0xfffeffc1, 0xfffeffc1,0xff9ba79e,0xff596d7e,0xfc2c4558,0xc409151f,0x81000000,0x56000000,0x33000000,0x12000000,0x26000000,0x45000000,0xbc14446a,0xff17578b,0xff104e80, 0xff1e537b,0xffd1dcb3,0xfffeffc1,0xffe4e5b2,0xffadaf93,0xffb4b697,0xfffeffc1,0xfffafbbf,0xffadaf93,0xffadaf93,0xffbbbd9b,0xfffeffc1,0xffe6e7b3,0xffadaf93, 0xffb3b596,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffa5b0a2,0xff607383,0xff395165,0xe1122432,0x94020202,0x6c000000,0x45000000,0x26000000,0xb000000,0x1b000000, 0x33000000,0x6c071c2e,0xd70e446e,0xff105083,0xff0f4c7d,0xff1e547d,0xffb3c6aa,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffadaf93,0xffadaf93, 0xffcfd0a6,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffa5b0a2,0xff627584,0xff3e5668,0xee1a2d3f,0xaf040a10,0x7b000000,0x55000000, 0x33000000,0x1b000000,0x6000000,0x11000000,0x23000000,0x3e000000,0x8508233a,0xe00e436d,0xff104d7e,0xff0f4b7b,0xff134b79,0xff709195,0xffe3e9b8,0xfffeffc1, 0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffd8deb3,0xff869595,0xff5d7181,0xff3d5568,0xf11a3042, 0xbd071018,0x85000000,0x60000000,0x3e000000,0x23000000,0x11000000,0x3000000,0xa000000,0x16000000,0x2a000000,0x46000000,0x8a071f36,0xdb0d3e64,0xff104978, 0xff144a76,0xff1b4d76,0xff235278,0xff7a9694,0xffbfccab,0xfff2f5bd,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffeaedb9,0xffb9c3a8,0xff809192,0xff5e7282, 0xff4f6476,0xff334b5f,0xee182b3d,0xbd071018,0x88000000,0x66000000,0x46000000,0x2a000000,0x16000000,0xa000000,0x1000000,0x5000000,0xd000000,0x1a000000, 0x2e000000,0x48000000,0x7b041522,0xc80a3052,0xf90f436d,0xff13456e,0xff19496f,0xff244f71,0xff335978,0xff40617d,0xff47667f,0xff4b687f,0xff4c677c,0xff4f687d, 0xff536a7e,0xff536a7c,0xff486072,0xff344d61,0xfc1f3b4e,0xe00e202f,0xaf040a10,0x85000000,0x66000000,0x48000000,0x2e000000,0x1a000000,0xd000000,0x5000000, 0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x2e000000,0x46000000,0x60000000,0xa2061f33,0xd7092f4e,0xfa0e3d62,0xff133f64,0xff1b4567,0xff244a68, 0xff294c69,0xff2b4c66,0xff2b4b65,0xff2b4962,0xff29465d,0xff224058,0xfc18354c,0xe70d2234,0xc305111b,0x94000000,0x7b000000,0x60000000,0x46000000,0x2e000000, 0x1b000000,0xe000000,0x6000000,0x2000000,0xffffff,0x1000000,0x2000000,0x7000000,0xe000000,0x1a000000,0x2a000000,0x3e000000,0x55000000,0x6c000000, 0x9b041522,0xc2072137,0xde082943,0xef092e4b,0xf9092f4f,0xfe0a304f,0xfa092b48,0xf208253e,0xe5061f33,0xd1051725,0xb5020c14,0x93000000,0x81000000,0x6c000000, 0x55000000,0x3e000000,0x2a000000,0x1a000000,0xe000000,0x7000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000, 0x16000000,0x23000000,0x33000000,0x45000000,0x56000000,0x67000000,0x75000000,0x81000000,0x89000000,0x8e000000,0x90000000,0x8e000000,0x89000000,0x81000000, 0x75000000,0x67000000,0x56000000,0x45000000,0x33000000,0x23000000,0x16000000,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff, 0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,0x33000000,0x3f000000,0x4a000000,0x53000000,0x59000000,0x5e000000, 0x5f000000,0x5e000000,0x59000000,0x53000000,0x4a000000,0x3f000000,0x33000000,0x26000000,0x1b000000,0x11000000,0xa000000,0x5000000,0x2000000,0x1000000, 0xffffff,0xffffff }; static const QRgb DocsIcon_data[] = { - 0xffffff,0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff555555,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffdfdfdf,0xffb3b3b3,0xffffffff,0xff555555,0x3c000000,0xc000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffd4d4d4,0xff898989,0xffffffff,0xffffffff,0xff555555,0x3c000000,0xc000000,0xffffff,0xffffff, - 0xffffff,0xffffff,0xff000000,0xfffdfdfd,0xfffdfdfd,0xffd2d2d2,0xff7d7d7d,0xffffffff,0xffffffff,0xffffffff,0xff555555,0x3c000000,0xc000000,0xffffff, - 0xffffff,0xffffff,0xff000000,0xfffbfbfb,0xfffbfbfb,0xffd0d0d0,0xff7b7b7b,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff555555,0x3c000000,0xc000000, - 0xffffff,0xffffff,0xff000000,0xfff8f8f8,0xfff6f6f6,0xffd6d6d6,0xff999999,0xff797979,0xff797979,0xff848484,0xffaeaeae,0xff000000,0x77000000,0x24000000, - 0xffffff,0xffffff,0xff000000,0xfff3f3f3,0xfff1f1f1,0xffe5e5e5,0xffd0d0d0,0xffc6c6c6,0xffc7c7c7,0xffc8c8c8,0xffd5d5d5,0xff000000,0x8f000000,0x30000000, - 0xffffff,0xffffff,0xff000000,0xffededed,0xffe9e9e9,0xffe7e7e7,0xffe5e5e5,0xffe5e5e5,0xffe7e7e7,0xffe9e9e9,0xffededed,0xff000000,0x8f000000,0x30000000, - 0xffffff,0xffffff,0xff000000,0xffe7e7e7,0xffe2e2e2,0xffdedede,0xffdcdcdc,0xffdcdcdc,0xffdedede,0xffe2e2e2,0xffe7e7e7,0xff000000,0x8f000000,0x30000000, - 0xffffff,0xffffff,0xff000000,0xffe0e0e0,0xffdadada,0xffd5d5d5,0xffd3d3d3,0xffd3d3d3,0xffd5d5d5,0xffdadada,0xffe0e0e0,0xff000000,0x8f000000,0x30000000, - 0xffffff,0xffffff,0xff000000,0xffd9d9d9,0xffd1d1d1,0xffcbcbcb,0xffc8c8c8,0xffc8c8c8,0xffcbcbcb,0xffd1d1d1,0xffd9d9d9,0xff000000,0x8f000000,0x30000000, - 0xffffff,0xffffff,0xff000000,0xffd9d9d9,0xffd1d1d1,0xffcbcbcb,0xffc8c8c8,0xffc8c8c8,0xffcbcbcb,0xffd1d1d1,0xffd9d9d9,0xff000000,0x8f000000,0x30000000, + 0xffffff,0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff676767,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffe4e4e4,0xffbebebe,0xffffffff,0xff676767,0x3c000000,0xc000000,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffdbdbdb,0xff999999,0xffffffff,0xffffffff,0xff676767,0x3c000000,0xc000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xff000000,0xfffdfdfd,0xfffdfdfd,0xffd9d9d9,0xff8d8d8d,0xffffffff,0xffffffff,0xffffffff,0xff676767,0x3c000000,0xc000000,0xffffff, + 0xffffff,0xffffff,0xff000000,0xfffcfcfc,0xfffcfcfc,0xffd7d7d7,0xff8c8c8c,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff676767,0x3c000000,0xc000000, + 0xffffff,0xffffff,0xff000000,0xfff9f9f9,0xfff8f8f8,0xffdddddd,0xffa7a7a7,0xff8a8a8a,0xff8a8a8a,0xff949494,0xffbababa,0xff000000,0x77000000,0x24000000, + 0xffffff,0xffffff,0xff000000,0xfff5f5f5,0xfff3f3f3,0xffe9e9e9,0xffd7d7d7,0xffcfcfcf,0xffd0d0d0,0xffd1d1d1,0xffdcdcdc,0xff000000,0x8f000000,0x30000000, + 0xffffff,0xffffff,0xff000000,0xfff0f0f0,0xffededed,0xffebebeb,0xffe9e9e9,0xffe9e9e9,0xffebebeb,0xffededed,0xfff0f0f0,0xff000000,0x8f000000,0x30000000, + 0xffffff,0xffffff,0xff000000,0xffebebeb,0xffe7e7e7,0xffe3e3e3,0xffe2e2e2,0xffe2e2e2,0xffe3e3e3,0xffe7e7e7,0xffebebeb,0xff000000,0x8f000000,0x30000000, + 0xffffff,0xffffff,0xff000000,0xffe5e5e5,0xffe0e0e0,0xffdcdcdc,0xffdadada,0xffdadada,0xffdcdcdc,0xffe0e0e0,0xffe5e5e5,0xff000000,0x8f000000,0x30000000, + 0xffffff,0xffffff,0xff000000,0xffdfdfdf,0xffd8d8d8,0xffd3d3d3,0xffd1d1d1,0xffd1d1d1,0xffd3d3d3,0xffd8d8d8,0xffdfdfdf,0xff000000,0x8f000000,0x30000000, + 0xffffff,0xffffff,0xff000000,0xffdfdfdf,0xffd8d8d8,0xffd3d3d3,0xffd1d1d1,0xffd1d1d1,0xffd3d3d3,0xffd8d8d8,0xffdfdfdf,0xff000000,0x8f000000,0x30000000, 0xffffff,0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x8f000000,0x30000000, 0xffffff,0xffffff,0x24000000,0x6b000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x6b000000,0x24000000 }; static const QRgb DocumentTypeExcel_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000200,0x2000200,0x5000200,0x9000200,0x10000200,0x18000200,0x22000200, - 0x2c000200,0x36000200,0x3f000200,0x45000200,0x4a000200,0x4d000200,0x4e000200,0x4e000200,0x4e000200,0x4c000200,0x49000200,0x45000200,0x3f000200,0x37000200, - 0x2e000200,0x25000200,0x1c000200,0x13000200,0xd000200,0x8000200,0x4000200,0x2000200,0xffffff,0xffffff,0xffffff,0x1000200,0x3000200,0x7000200, - 0xd000200,0x16000200,0x22000200,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, - 0xff000000,0xff000000,0xfd282828,0x72434543,0x44000200,0x37000200,0x2b000200,0x1f000200,0x15000200,0xd000200,0x8000200,0x4000200,0xffffff,0xffffff, - 0xffffff,0x1000200,0x4000200,0x9000200,0x11000200,0x1d000200,0x2c000200,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe, - 0xfffefefe,0xfffcfcfc,0xfff9f9f9,0xfff3f3f3,0xffe9e9e9,0xffdedede,0xffc8c8c8,0xfd272727,0x76303230,0x4e000200,0x3d000200,0x2e000200,0x21000200,0x16000200, - 0xe000200,0x8000200,0xffffff,0xffffff,0xffffff,0x2000200,0x5000200,0xb000200,0x15000200,0x24000200,0x36000200,0xff000000,0xffffffff,0xffffffff, - 0xffffffff,0xffffffff,0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffcfcfc,0xfff6f6f6,0xffededed,0xffdedede,0xffcccccc,0xfffefefe,0xffb3b3b3,0xfd292929,0x802e302e, - 0x53000200,0x40000200,0x2f000200,0x21000200,0x16000200,0xd000200,0xffffff,0xffffff,0xffffff,0x2000200,0x6000200,0xd000200,0x18000200,0x29000200, - 0x3f000200,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffcfcfc,0xfffafafa,0xfff4f4f4,0xffe9e9e9,0xffd4d4d4,0xffbcbcbc, - 0xffffffff,0xfffcfcfc,0xffa1a1a1,0xfd2b2b2b,0x7e262826,0x55000200,0x41000200,0x2f000200,0x20000200,0x15000200,0xffffff,0xffffff,0x1000200,0x2000200, - 0x6000200,0xe000200,0x1b000200,0x2d000200,0x45000200,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffdfdfd,0xfffbfbfb,0xfff9f9f9, - 0xfff2f2f2,0xffe4e4e4,0xffcdcdcd,0xffaeaeae,0xffffffff,0xffffffff,0xfffcfcfc,0xff949494,0xfd2e2e2e,0x7a1d1f1d,0x55000200,0x40000200,0x2d000200,0x1e000200, - 0xffffff,0xffffff,0x1000200,0x2000200,0x7000200,0xf000200,0x1d000200,0x30000200,0x4a000200,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff, - 0xfffdfdfd,0xfffcfcfc,0xfffbfbfb,0xfff7f7f7,0xfff0f0f0,0xffe2e2e2,0xffc8c8c8,0xffa7a7a7,0xffffffff,0xffffffff,0xffffffff,0xfff9f9f9,0xff8e8e8e,0xfd343434, - 0x781e1e1e,0x52000200,0x3c000200,0x29000200,0xffffff,0xffffff,0x1000200,0x3000200,0x7000200,0x10000200,0x1e000200,0x32000200,0x4d000200,0xff000000, - 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffcfcfc,0xfffbfbfb,0xfffafafa,0xfff7f7f7,0xfff0f0f0,0xffe1e1e1,0xffc8c8c8,0xffa6a6a6,0xffffffff,0xffffffff, - 0xffffffff,0xffffffff,0xfff8f8f8,0xff8f8f8f,0xfc3b3b3b,0x70141714,0x4c000200,0x36000200,0x1000000,0x2000000,0x5000000,0x9000000,0xf000000,0x18000000, - 0x27000000,0x3b000000,0x55000300,0xff000000,0xfff5f5f5,0xfff5f5f5,0xfff5f5f5,0xfff6f6f6,0xfff4f4f4,0xfff5f5f5,0xfff5f5f5,0xfff4f4f4,0xffefefef,0xffe4e4e4, - 0xffcccccc,0xffadadad,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff929292,0xfb434343,0x5c000200,0x42000200,0x4000000,0x7000000, - 0xd000000,0x16000000,0x1e000000,0x2a000000,0x39000000,0x4d000000,0x65000000,0xff000000,0xffdedede,0xffdedede,0xffe0e0e0,0xffe3e3e3,0xffe3e3e3,0xffe7e7e7, - 0xffececec,0xfff0f0f0,0xffededed,0xffe6e6e6,0xffd7d7d7,0xffbfbfbf,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff2e2e2e, - 0x6a000200,0x4e000200,0x7000000,0xf000000,0x1b000000,0x2b000000,0x39000000,0x49000000,0x58000000,0x69000000,0x7e000200,0xff000000,0xffb9b9b9,0xffb9b9b9, - 0xffbcbcbc,0xffc3c3c3,0xffcbcbcb,0xffd4d4d4,0xffe1e1e1,0xffe8e8e8,0xffececec,0xffececec,0xffe2e2e2,0xffbbbbbb,0xff909090,0xff6e6e6e,0xff5d5d5d,0xff595959, - 0xff5f5f5f,0xff7b7b7b,0xffa8a8a8,0xff000000,0x76000200,0x58000200,0xc000000,0x19000000,0xffee5358,0xffe84f53,0xffec8689,0xffe05a5e,0xffd84045,0xffdc5257, - 0xffe47a7d,0xffd43337,0xffde5b60,0xffe16e72,0xffdb3a3f,0xffdc1c21,0xffdd191f,0xffbababa,0xffd0d0d0,0xffe0e0e0,0xffebebeb,0xffefefef,0xffc6c6c6,0xff919191, - 0xff7c7c7c,0xff717171,0xff717171,0xff6c6c6c,0xff5f5f5f,0xff5e5e5e,0xff626262,0xff000000,0x80000200,0x60000200,0x12000000,0x26000000,0xffea5054,0xffee9a9c, - 0xffffffff,0xffe9b1b3,0xffc2363a,0xffe6aeaf,0xffffffff,0xffd98689,0xffe9b6b7,0xffffffff,0xffd66669,0xffca171c,0xffce171d,0xff999999,0xffbcbcbc,0xffd5d5d5, - 0xffe8e8e8,0xffd2d2d2,0xff9d9d9d,0xff8b8b8b,0xff959595,0xffb5b5b5,0xffc5c5c5,0xffc6c6c6,0xffbababa,0xff818181,0xff5c5c5c,0xff000000,0x87000200,0x66000200, - 0x17000000,0x2f000000,0xffe84c50,0xffde5b5f,0xfffefafa,0xfffefbfb,0xffbe6366,0xfffdfbfb,0xfffdfafa,0xffad3a3e,0xffe1b3b4,0xffffffff,0xffc66265,0xffb71519, - 0xffbf161a,0xff818181,0xffaaaaaa,0xffcecece,0xffd8d8d8,0xffb1b1b1,0xff9a9a9a,0xffa8a8a8,0xffe1e1e1,0xfff1f1f1,0xfff5f5f5,0xfff0f0f0,0xffc9c9c9,0xffe2e2e2, - 0xff909090,0xff000000,0x8b000200,0x6a000200,0x1b000000,0x37000000,0xffe8484d,0xffd63f44,0xffe8b3b4,0xffffffff,0xfff1e2e3,0xffffffff,0xffd3a9aa,0xff8f171a, - 0xffdcb1b2,0xffffffff,0xffbb6163,0xffa71317,0xffb31519,0xff6d6d6d,0xff9e9e9e,0xffc5c5c5,0xffc1c1c1,0xffa6a6a6,0xffa4a4a4,0xffdedede,0xfff9f9f9,0xfff6f6f6, - 0xfff5f5f5,0xffa2a2a2,0xff686868,0xffa9a9a9,0xffdbdbdb,0xff000000,0x8e000200,0x6d000200,0x1d000000,0x3c000000,0xffe84449,0xffd83b3f,0xffca5053,0xfffefcfc, - 0xffffffff,0xfffdfcfc,0xff91383a,0xff851114,0xffd9afb0,0xffffffff,0xffb46062,0xff9c1215,0xffaa1317,0xff616161,0xff979797,0xffbebebe,0xffb5b5b5,0xffa5a5a5, - 0xffbbbbbb,0xfff3f3f3,0xfffafafa,0xfff9f9f9,0xffaaaaaa,0xff6b6b6b,0xff656565,0xff8c8c8c,0xffececec,0xff000000,0x8f000200,0x6e000200,0x1f000000,0x3e000000, - 0xffea3f44,0xffdb373b,0xffc12c30,0xfff4e7e7,0xffffffff,0xfff0e5e5,0xff781012,0xff810f12,0xffd7afb0,0xffffffff,0xffb16062,0xff961115,0xffa41216,0xff5c5c5c, - 0xff939393,0xffbbbbbb,0xffaeaeae,0xffa5a5a5,0xffc5c5c5,0xfffcfcfc,0xfffbfbfb,0xffaeaeae,0xff717171,0xff696969,0xff6f6f6f,0xffdfdfdf,0xffffffff,0xff000000, - 0x90000200,0x6e000200,0x1f000000,0x3d000000,0xffec3b40,0xffdb3236,0xffcf5256,0xfffffefe,0xffffffff,0xfffefefe,0xff913e40,0xff7e0e11,0xffd6afb0,0xffffffff, - 0xffad5f62,0xff901114,0xff9d1216,0xff5b5b5b,0xff929292,0xffbbbbbb,0xffb1b1b1,0xffa1a1a1,0xffbcbcbc,0xfff8f8f8,0xffb0b0b0,0xff757575,0xff6d6d6d,0xff656565, - 0xff626262,0xff959595,0xfff2f2f2,0xff000000,0x90000200,0x6f000200,0x1f000000,0x3e000000,0xffe9353a,0xffd92c31,0xffecbfc1,0xffffffff,0xfff3e9e9,0xffffffff, - 0xffd6baba,0xff770e11,0xffd4afb0,0xffffffff,0xffa85e60,0xff850f13,0xff931114,0xff595959,0xff909090,0xffbdbdbd,0xffbcbcbc,0xff9a9a9a,0xff9f9f9f,0xffe6e6e6, - 0xffadadad,0xff6d6d6d,0xff8c8c8c,0xff8b8b8b,0xff575757,0xff555555,0xff838383,0xff000000,0x90000200,0x6f000200,0x1f000000,0x3e000000,0xffe82e32,0xffdf575b, - 0xffffffff,0xffffffff,0xffaf6a6c,0xffffffff,0xffffffff,0xff954548,0xffd3afb0,0xffffffff,0xffe0c9ca,0xffd4afb0,0xff8b1013,0xff585858,0xff8e8e8e,0xffbdbdbd, - 0xffcccccc,0xff9a9a9a,0xff848484,0xffa8a8a8,0xffededed,0xffbbbbbb,0xffe7e7e7,0xfffbfbfb,0xff8f8f8f,0xff565656,0xff565656,0xff000000,0x90000200,0x6f000200, - 0x1d000000,0x3c000000,0xffe5262c,0xffe2696d,0xfffcf6f6,0xffe5bfc0,0xff850f12,0xffdcbebf,0xfffaf6f6,0xffa75f61,0xffd3afb0,0xffffffff,0xffffffff,0xffffffff, - 0xff860f12,0xff5b5b5b,0xff919191,0xffbcbcbc,0xffdedede,0xffbbbbbb,0xff7c7c7c,0xff707070,0xff979797,0xffd6d6d6,0xffe3e3e3,0xffe6e6e6,0xffc2c2c2,0xff5e5e5e, - 0xff575757,0xff000000,0x90000200,0x6f000200,0x1b000000,0x37000000,0xffe42025,0xffd5181e,0xffc3262b,0xffb13033,0xff941115,0xff9c2d31,0xff8f2024,0xff860f12, - 0xff850f13,0xff7e0e12,0xff7d0e11,0xff820f12,0xff881013,0xff686868,0xff979797,0xffbfbfbf,0xffdfdfdf,0xffebebeb,0xffababab,0xff6c6c6c,0xff646464,0xff676767, - 0xff757575,0xff757575,0xff6b6b6b,0xff5b5b5b,0xff5b5b5b,0xff000000,0x90000200,0x6f000200,0x17000000,0x2f000000,0xffe41a20,0xffd4181d,0xffc4161c,0xffb41419, - 0xffa61317,0xffa21217,0xff9b1215,0xff981215,0xff951115,0xff8f1114,0xff8d1013,0xff8e1014,0xff911015,0xff7c7c7c,0xffa5a5a5,0xffc8c8c8,0xffdedede,0xfff0f0f0, - 0xfff3f3f3,0xffbdbdbd,0xff868686,0xff606060,0xff606060,0xff606060,0xff606060,0xff838383,0xffb3b3b3,0xff000000,0x90000200,0x6e000200,0x12000000,0x26000000, - 0x41000000,0x64000000,0x7f000000,0x98000000,0xa9000000,0xb5000000,0xbf000000,0xff000000,0xff5c5c5c,0xff5b5b5b,0xff616161,0xff6c6c6c,0xff7d7d7d,0xff989898, - 0xffb8b8b8,0xffd0d0d0,0xffe4e4e4,0xffececec,0xfff5f5f5,0xfff8f8f8,0xffe7e7e7,0xffcfcfcf,0xffbfbfbf,0xffbfbfbf,0xffcecece,0xffe6e6e6,0xfff9f9f9,0xff000000, - 0x8e000200,0x6d000200,0xc000000,0x18000000,0x2b000000,0x41000000,0x55000000,0x68000000,0x78000000,0x88000000,0x98000000,0xff000000,0xff949494,0xff939393, - 0xff979797,0xff9f9f9f,0xffaaaaaa,0xffbababa,0xffcecece,0xffdedede,0xffe9e9e9,0xffefefef,0xfff2f2f2,0xfff3f3f3,0xfff6f6f6,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, - 0xfff7f7f7,0xfff5f5f5,0xfff2f2f2,0xff000000,0x8c000200,0x6b000200,0x7000000,0xf000000,0x19000000,0x27000000,0x34000000,0x43000000,0x52000000,0x63000000, - 0x76000000,0xff000000,0xffc2c2c2,0xffc2c2c2,0xffc4c4c4,0xffc9c9c9,0xffcecece,0xffd5d5d5,0xffe1e1e1,0xffe8e8e8,0xffefefef,0xfff3f3f3,0xfff4f4f4,0xfff4f4f4, - 0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xff000000,0x87000200,0x68000200,0x4000000,0x7000000,0xd000000,0x14000000, - 0x1c000000,0x28000000,0x35000000,0x47000000,0x5c000300,0xff000000,0xffe0e0e0,0xffe0e0e0,0xffe2e2e2,0xffe4e4e4,0xffe4e4e4,0xffe8e8e8,0xffeeeeee,0xfff1f1f1, - 0xfff3f3f3,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xff000000,0x7f000200,0x61000200, - 0x1000000,0x2000000,0x4000000,0x8000000,0xe000000,0x16000000,0x21000000,0x31000000,0x47000000,0xff000000,0xfff5f5f5,0xfff5f5f5,0xfff5f5f5,0xfff6f6f6, - 0xfff7f7f7,0xfff9f9f9,0xfffbfbfb,0xfffdfdfd,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, - 0xffffffff,0xff000000,0x73000200,0x58000200,0xffffff,0xffffff,0xffffff,0x2000200,0x5000200,0xb000200,0x15000200,0x24000200,0x36000200,0xff000000, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000500,0x2000500,0x5000500,0x9000500,0x10000500,0x18000500,0x22000500, + 0x2c000500,0x36000500,0x3f000500,0x45000500,0x4a000500,0x4d000500,0x4e000500,0x4e000500,0x4e000500,0x4c000500,0x49000500,0x45000500,0x3f000500,0x37000500, + 0x2e000500,0x25000500,0x1c000500,0x13000500,0xd000500,0x8000500,0x4000500,0x2000500,0xffffff,0xffffff,0xffffff,0x1000500,0x3000500,0x7000500, + 0xd000500,0x16000500,0x22000500,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, + 0xff000000,0xff000000,0xfd373737,0x72545754,0x44000500,0x37000500,0x2b000500,0x1f000500,0x15000500,0xd000500,0x8000500,0x4000500,0xffffff,0xffffff, + 0xffffff,0x1000500,0x4000500,0x9000500,0x11000500,0x1d000500,0x2c000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe, + 0xfffefefe,0xfffdfdfd,0xfffafafa,0xfff5f5f5,0xffededed,0xffe3e3e3,0xffd1d1d1,0xfd363636,0x76404240,0x4e000500,0x3d000500,0x2e000500,0x21000500,0x16000500, + 0xe000500,0x8000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xb000500,0x15000500,0x24000500,0x36000500,0xff000000,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffdfdfd,0xfff8f8f8,0xfff0f0f0,0xffe3e3e3,0xffd4d4d4,0xfffefefe,0xffbebebe,0xfd383838,0x803e403e, + 0x53000500,0x40000500,0x2f000500,0x21000500,0x16000500,0xd000500,0xffffff,0xffffff,0xffffff,0x2000500,0x6000500,0xd000500,0x18000500,0x29000500, + 0x3f000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffdfdfd,0xfffbfbfb,0xfff6f6f6,0xffededed,0xffdbdbdb,0xffc6c6c6, + 0xffffffff,0xfffdfdfd,0xffaeaeae,0xfd3b3b3b,0x7e353735,0x55000500,0x41000500,0x2f000500,0x20000500,0x15000500,0xffffff,0xffffff,0x1000500,0x2000500, + 0x6000500,0xe000500,0x1b000500,0x2d000500,0x45000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfffafafa, + 0xfff4f4f4,0xffe8e8e8,0xffd5d5d5,0xffbababa,0xffffffff,0xffffffff,0xfffdfdfd,0xffa3a3a3,0xfd3e3e3e,0x7a2a2d2a,0x55000500,0x40000500,0x2d000500,0x1e000500, + 0xffffff,0xffffff,0x1000500,0x2000500,0x7000500,0xf000500,0x1d000500,0x30000500,0x4a000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfff8f8f8,0xfff3f3f3,0xffe7e7e7,0xffd1d1d1,0xffb4b4b4,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff9d9d9d,0xfd454545, + 0x782b2b2b,0x52000500,0x3c000500,0x29000500,0xffffff,0xffffff,0x1000500,0x3000500,0x7000500,0x10000500,0x1e000500,0x32000500,0x4d000500,0xff000000, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffcfcfc,0xfffbfbfb,0xfff8f8f8,0xfff3f3f3,0xffe6e6e6,0xffd1d1d1,0xffb3b3b3,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xfff9f9f9,0xff9e9e9e,0xfc4c4c4c,0x701f231f,0x4c000500,0x36000500,0x1000000,0x2000000,0x5000000,0x9000000,0xf000000,0x18000000, + 0x27000000,0x3b000000,0x55000600,0xff000000,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8,0xfff6f6f6,0xfff7f7f7,0xfff7f7f7,0xfff6f6f6,0xfff2f2f2,0xffe8e8e8, + 0xffd4d4d4,0xffb9b9b9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xffa1a1a1,0xfb545454,0x5c000500,0x42000500,0x4000000,0x7000000, + 0xd000000,0x16000000,0x1e000000,0x2a000000,0x39000000,0x4d000000,0x65000000,0xff000000,0xffe3e3e3,0xffe3e3e3,0xffe5e5e5,0xffe8e8e8,0xffe8e8e8,0xffebebeb, + 0xffefefef,0xfff3f3f3,0xfff0f0f0,0xffeaeaea,0xffdddddd,0xffc9c9c9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xff3e3e3e, + 0x6a000500,0x4e000500,0x7000000,0xf000000,0x1b000000,0x2b000000,0x39000000,0x49000000,0x58000000,0x69000000,0x7e000500,0xff000000,0xffc4c4c4,0xffc4c4c4, + 0xffc6c6c6,0xffcccccc,0xffd3d3d3,0xffdbdbdb,0xffe6e6e6,0xffececec,0xffefefef,0xffefefef,0xffe7e7e7,0xffc5c5c5,0xff9f9f9f,0xff7f7f7f,0xff6f6f6f,0xff6b6b6b, + 0xff717171,0xff8c8c8c,0xffb5b5b5,0xff000000,0x76000500,0x58000500,0xc000000,0x19000000,0xfff1656a,0xffec6165,0xffef9699,0xffe56c70,0xffde5157,0xffe26469, + 0xffe88b8d,0xffdb4348,0xffe36d72,0xffe67f83,0xffe14b50,0xffe2292f,0xffe3252d,0xffc4c4c4,0xffd7d7d7,0xffe5e5e5,0xffeeeeee,0xfff2f2f2,0xffcfcfcf,0xffa0a0a0, + 0xff8d8d8d,0xff828282,0xff828282,0xff7d7d7d,0xff717171,0xff707070,0xff747474,0xff000000,0x80000500,0x60000500,0x12000000,0x26000000,0xffee6266,0xfff1a8aa, + 0xffffffff,0xffedbdbe,0xffcb474b,0xffeababb,0xffffffff,0xffdf9699,0xffedc1c2,0xffffffff,0xffdd787a,0xffd22329,0xffd6232a,0xffa7a7a7,0xffc6c6c6,0xffdcdcdc, + 0xffececec,0xffd9d9d9,0xffababab,0xff9a9a9a,0xffa4a4a4,0xffc0c0c0,0xffcecece,0xffcfcfcf,0xffc4c4c4,0xff919191,0xff6e6e6e,0xff000000,0x87000500,0x66000500, + 0x17000000,0x2f000000,0xffec5e62,0xffe36d71,0xfffefbfb,0xfffefcfc,0xffc87578,0xfffdfcfc,0xfffdfbfb,0xffb94b4f,0xffe6bebf,0xffffffff,0xffcf7477,0xffc22025, + 0xffc92227,0xff919191,0xffb6b6b6,0xffd6d6d6,0xffdedede,0xffbdbdbd,0xffa8a8a8,0xffb5b5b5,0xffe6e6e6,0xfff3f3f3,0xfff7f7f7,0xfff3f3f3,0xffd1d1d1,0xffe7e7e7, + 0xff9f9f9f,0xff000000,0x8b000500,0x6a000500,0x1b000000,0x37000000,0xffec5a5f,0xffdd5056,0xffecbebf,0xffffffff,0xfff3e7e8,0xffffffff,0xffdab6b6,0xff9e2327, + 0xffe2bdbd,0xffffffff,0xffc57375,0xffb41e23,0xffbe2025,0xff7e7e7e,0xffacacac,0xffcecece,0xffcbcbcb,0xffb3b3b3,0xffb1b1b1,0xffe3e3e3,0xfffafafa,0xfff8f8f8, + 0xfff7f7f7,0xffafafaf,0xff7a7a7a,0xffb6b6b6,0xffe1e1e1,0xff000000,0x8e000500,0x6d000500,0x1d000000,0x3c000000,0xffec565b,0xffde4c50,0xffd26265,0xfffefdfd, + 0xffffffff,0xfffdfdfd,0xffa0494b,0xff951b1f,0xffdfbbbc,0xffffffff,0xffbf7274,0xffaa1d20,0xffb61e23,0xff737373,0xffa5a5a5,0xffc8c8c8,0xffc0c0c0,0xffb2b2b2, + 0xffc5c5c5,0xfff5f5f5,0xfffbfbfb,0xfffafafa,0xffb6b6b6,0xff7c7c7c,0xff777777,0xff9b9b9b,0xffefefef,0xff000000,0x8f000500,0x6e000500,0x1f000000,0x3e000000, + 0xffee5056,0xffe1484c,0xffcb3c40,0xfff6ebeb,0xffffffff,0xfff3e9e9,0xff891a1d,0xff91191d,0xffddbbbc,0xffffffff,0xffbd7274,0xffa41b20,0xffb11d22,0xff6e6e6e, + 0xffa2a2a2,0xffc5c5c5,0xffbababa,0xffb2b2b2,0xffcecece,0xfffdfdfd,0xfffcfcfc,0xffbababa,0xff828282,0xff7a7a7a,0xff808080,0xffe4e4e4,0xffffffff,0xff000000, + 0x90000500,0x6e000500,0x1f000000,0x3d000000,0xffef4c51,0xffe14247,0xffd76468,0xfffffefe,0xffffffff,0xfffefefe,0xffa04f51,0xff8e171b,0xffddbbbc,0xffffffff, + 0xffb97174,0xff9f1b1f,0xffab1d22,0xff6d6d6d,0xffa1a1a1,0xffc5c5c5,0xffbdbdbd,0xffaeaeae,0xffc6c6c6,0xfff9f9f9,0xffbcbcbc,0xff868686,0xff7e7e7e,0xff777777, + 0xff747474,0xffa4a4a4,0xfff4f4f4,0xff000000,0x90000500,0x6f000500,0x1f000000,0x3e000000,0xffed464b,0xffdf3c41,0xffefc9cb,0xffffffff,0xfff5eded,0xffffffff, + 0xffddc4c4,0xff88171b,0xffdbbbbc,0xffffffff,0xffb57072,0xff95191e,0xffa21b1f,0xff6b6b6b,0xff9f9f9f,0xffc7c7c7,0xffc6c6c6,0xffa8a8a8,0xffadadad,0xffeaeaea, + 0xffb9b9b9,0xff7e7e7e,0xff9b9b9b,0xff9a9a9a,0xff696969,0xff676767,0xff939393,0xff000000,0x90000500,0x6f000500,0x1f000000,0x3e000000,0xffec3e42,0xffe4696d, + 0xffffffff,0xffffffff,0xffbb7b7d,0xffffffff,0xffffffff,0xffa4575a,0xffdabbbc,0xffffffff,0xffe5d1d2,0xffdbbbbc,0xff9a1a1e,0xff6a6a6a,0xff9d9d9d,0xffc7c7c7, + 0xffd4d4d4,0xffa8a8a8,0xff949494,0xffb5b5b5,0xfff0f0f0,0xffc5c5c5,0xffebebeb,0xfffcfcfc,0xff9e9e9e,0xff686868,0xff686868,0xff000000,0x90000500,0x6f000500, + 0x1d000000,0x3c000000,0xffe9353c,0xffe77a7e,0xfffdf8f8,0xffe9c9ca,0xff95191d,0xffe2c8c9,0xfffbf8f8,0xffb47173,0xffdabbbc,0xffffffff,0xffffffff,0xffffffff, + 0xff96191d,0xff6d6d6d,0xffa0a0a0,0xffc6c6c6,0xffe3e3e3,0xffc5c5c5,0xff8d8d8d,0xff818181,0xffa5a5a5,0xffdddddd,0xffe8e8e8,0xffeaeaea,0xffcbcbcb,0xff707070, + 0xff696969,0xff000000,0x90000500,0x6f000500,0x1b000000,0x37000000,0xffe82e34,0xffdc242b,0xffcc353b,0xffbd4043,0xffa31b20,0xffaa3d41,0xff9e2e33,0xff96191d, + 0xff95191e,0xff8e171d,0xff8d171b,0xff92191d,0xff981a1e,0xff7a7a7a,0xffa5a5a5,0xffc9c9c9,0xffe4e4e4,0xffeeeeee,0xffb7b7b7,0xff7d7d7d,0xff767676,0xff797979, + 0xff868686,0xff868686,0xff7c7c7c,0xff6d6d6d,0xff6d6d6d,0xff000000,0x90000500,0x6f000500,0x17000000,0x2f000000,0xffe8272e,0xffdb242a,0xffcd2229,0xffbf1f25, + 0xffb31e23,0xffaf1d23,0xffa91d20,0xffa61d20,0xffa41b20,0xff9e1b1f,0xff9c1a1e,0xff9d1a1f,0xffa01a20,0xff8d8d8d,0xffb2b2b2,0xffd1d1d1,0xffe3e3e3,0xfff3f3f3, + 0xfff5f5f5,0xffc7c7c7,0xff969696,0xff727272,0xff727272,0xff727272,0xff727272,0xff939393,0xffbebebe,0xff000000,0x90000500,0x6e000500,0x12000000,0x26000000, + 0x41000000,0x64000000,0x7f000000,0x98000000,0xa9000000,0xb5000000,0xbf000000,0xff000000,0xff6e6e6e,0xff6d6d6d,0xff737373,0xff7d7d7d,0xff8d8d8d,0xffa6a6a6, + 0xffc3c3c3,0xffd7d7d7,0xffe8e8e8,0xffefefef,0xfff7f7f7,0xfff9f9f9,0xffebebeb,0xffd7d7d7,0xffc9c9c9,0xffc9c9c9,0xffd6d6d6,0xffeaeaea,0xfffafafa,0xff000000, + 0x8e000500,0x6d000500,0xc000000,0x18000000,0x2b000000,0x41000000,0x55000000,0x68000000,0x78000000,0x88000000,0x98000000,0xff000000,0xffa3a3a3,0xffa2a2a2, + 0xffa5a5a5,0xffadadad,0xffb6b6b6,0xffc4c4c4,0xffd6d6d6,0xffe3e3e3,0xffededed,0xfff2f2f2,0xfff4f4f4,0xfff5f5f5,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8, + 0xfff8f8f8,0xfff7f7f7,0xfff4f4f4,0xff000000,0x8c000500,0x6b000500,0x7000000,0xf000000,0x19000000,0x27000000,0x34000000,0x43000000,0x52000000,0x63000000, + 0x76000000,0xff000000,0xffcbcbcb,0xffcbcbcb,0xffcdcdcd,0xffd1d1d1,0xffd6d6d6,0xffdcdcdc,0xffe6e6e6,0xffececec,0xfff2f2f2,0xfff5f5f5,0xfff6f6f6,0xfff6f6f6, + 0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xff000000,0x87000500,0x68000500,0x4000000,0x7000000,0xd000000,0x14000000, + 0x1c000000,0x28000000,0x35000000,0x47000000,0x5c000600,0xff000000,0xffe5e5e5,0xffe5e5e5,0xffe7e7e7,0xffe8e8e8,0xffe8e8e8,0xffececec,0xfff1f1f1,0xfff3f3f3, + 0xfff5f5f5,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xff000000,0x7f000500,0x61000500, + 0x1000000,0x2000000,0x4000000,0x8000000,0xe000000,0x16000000,0x21000000,0x31000000,0x47000000,0xff000000,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8, + 0xfff8f8f8,0xfffafafa,0xfffcfcfc,0xfffdfdfd,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xff000000,0x73000500,0x58000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xb000500,0x15000500,0x24000500,0x36000500,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, - 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x63000200,0x4c000200,0xffffff,0xffffff,0xffffff,0x1000200,0x4000200,0x9000200, - 0x11000200,0x1d000200,0x2c000200,0x3e000200,0x51000200,0x63000200,0x73000200,0x7f000200,0x87000200,0x8c000200,0x8e000200,0x90000200,0x90000200,0x90000200, - 0x90000200,0x90000200,0x90000200,0x90000200,0x8e000200,0x8c000200,0x87000200,0x7f000200,0x73000200,0x63000200,0x51000200,0x3e000200,0xffffff,0xffffff, - 0xffffff,0x1000200,0x3000200,0x7000200,0xd000200,0x16000200,0x22000200,0x30000200,0x3e000200,0x4c000200,0x58000200,0x61000200,0x68000200,0x6b000200, - 0x6d000200,0x6e000200,0x6f000200,0x6f000200,0x6f000200,0x6f000200,0x6f000200,0x6e000200,0x6d000200,0x6b000200,0x68000200,0x61000200,0x58000200,0x4c000200, - 0x3e000200,0x30000200 + 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x63000500,0x4c000500,0xffffff,0xffffff,0xffffff,0x1000500,0x4000500,0x9000500, + 0x11000500,0x1d000500,0x2c000500,0x3e000500,0x51000500,0x63000500,0x73000500,0x7f000500,0x87000500,0x8c000500,0x8e000500,0x90000500,0x90000500,0x90000500, + 0x90000500,0x90000500,0x90000500,0x90000500,0x8e000500,0x8c000500,0x87000500,0x7f000500,0x73000500,0x63000500,0x51000500,0x3e000500,0xffffff,0xffffff, + 0xffffff,0x1000500,0x3000500,0x7000500,0xd000500,0x16000500,0x22000500,0x30000500,0x3e000500,0x4c000500,0x58000500,0x61000500,0x68000500,0x6b000500, + 0x6d000500,0x6e000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6e000500,0x6d000500,0x6b000500,0x68000500,0x61000500,0x58000500,0x4c000500, + 0x3e000500,0x30000500 }; static const QRgb DocumentTypeNone_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000200,0x2000200,0x5000200,0x9000200,0x10000200,0x18000200,0x22000200, - 0x2c000200,0x36000200,0x3f000200,0x45000200,0x4a000200,0x4d000200,0x4e000200,0x4e000200,0x4e000200,0x4c000200,0x49000200,0x45000200,0x3f000200,0x37000200, - 0x2e000200,0x25000200,0x1c000200,0x13000200,0xd000200,0x8000200,0x4000200,0x2000200,0xffffff,0xffffff,0xffffff,0x1000200,0x3000200,0x7000200, - 0xd000200,0x16000200,0x22000200,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, - 0xff000000,0xff000000,0xfd282828,0x72434543,0x44000200,0x37000200,0x2b000200,0x1f000200,0x15000200,0xd000200,0x8000200,0x4000200,0xffffff,0xffffff, - 0xffffff,0x1000200,0x4000200,0x9000200,0x11000200,0x1d000200,0x2c000200,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe, - 0xfffefefe,0xfffcfcfc,0xfff9f9f9,0xfff3f3f3,0xffe9e9e9,0xffdedede,0xffc8c8c8,0xfd272727,0x76303230,0x4e000200,0x3d000200,0x2e000200,0x21000200,0x16000200, - 0xe000200,0x8000200,0xffffff,0xffffff,0xffffff,0x2000200,0x5000200,0xb000200,0x15000200,0x24000200,0x36000200,0xff000000,0xfffefefe,0xfffefefe, - 0xffffffff,0xffffffff,0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffcfcfc,0xfff6f6f6,0xffededed,0xffdedede,0xffcccccc,0xfffefefe,0xffb3b3b3,0xfd292929,0x802e302e, - 0x53000200,0x40000200,0x2f000200,0x21000200,0x16000200,0xd000200,0xffffff,0xffffff,0xffffff,0x3000200,0x7000200,0xe000200,0x19000200,0x2a000200, - 0x40000200,0xff000000,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfffbfbfb,0xfffafafa,0xfff4f4f4,0xffe9e9e9,0xffd4d4d4,0xffbcbcbc, - 0xffffffff,0xfffcfcfc,0xffa1a1a1,0xfd2b2b2b,0x7e262826,0x55000200,0x41000200,0x2f000200,0x20000200,0x15000200,0x1000200,0x1000200,0x3000200,0x4000200, - 0x9000200,0x11000200,0x1e000200,0x2f000200,0x47000200,0xff000000,0xfff8f8f8,0xfff9f9f9,0xfff9f9f9,0xfffafafa,0xfff9f9f9,0xfffafafa,0xfff9f9f9,0xfff8f8f8, - 0xfff1f1f1,0xffe4e4e4,0xffcdcdcd,0xffaeaeae,0xffffffff,0xffffffff,0xfffcfcfc,0xff949494,0xfd2e2e2e,0x7a1d1f1d,0x55000200,0x40000200,0x2d000200,0x1e000200, - 0x2000200,0x3000200,0x5000200,0x7000200,0xd000200,0x16000200,0x23000200,0x36000200,0x50000200,0xff000000,0xfff0f0f0,0xfff1f1f1,0xfff2f2f2,0xfff4f4f4, - 0xfff4f4f4,0xfff5f5f5,0xfff6f6f6,0xfff4f4f4,0xffeeeeee,0xffe1e1e1,0xffc8c8c8,0xffa7a7a7,0xffffffff,0xffffffff,0xffffffff,0xfff9f9f9,0xff8e8e8e,0xfd343434, - 0x781e1e1e,0x52000200,0x3c000200,0x29000200,0x4000200,0x6000200,0x9000200,0xd000200,0x13000200,0x1c000200,0x2a000200,0x3e000200,0x57000200,0xff000000, - 0xffe2e2e2,0xffe4e4e4,0xffe7e7e7,0xffeaeaea,0xffebebeb,0xffeeeeee,0xfff1f1f1,0xfff1f1f1,0xffededed,0xffdfdfdf,0xffc7c7c7,0xffa6a6a6,0xffffffff,0xffffffff, - 0xffffffff,0xffffffff,0xfff8f8f8,0xff8f8f8f,0xfc3b3b3b,0x70141714,0x4c000200,0x36000200,0x8000200,0xb000200,0xf000200,0x15000200,0x1a000200,0x25000200, - 0x33000200,0x47000200,0x5f000200,0xff000000,0xffcfcfcf,0xffd2d2d2,0xffd6d6d6,0xffdbdbdb,0xffdfe0df,0xffe5e6e5,0xffe9eae9,0xffececec,0xffeaeaea,0xffe1e1e1, - 0xffcbcbcb,0xffadadad,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff929292,0xfb434343,0x5c000200,0x42000200,0xc000200,0x11000200, - 0x17000200,0x1e000200,0x25000200,0x30000200,0x3f000200,0x51000200,0x69000200,0xff000100,0xffb5b6b5,0xffbabbba,0xffc0c0c0,0xffc9c9c9,0xffd0d0d0,0xffd9d9d9, - 0xffe1e1e1,0xffe8e8e8,0xffe8e9e8,0xffe2e3e2,0xffd5d5d5,0xffbebebe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff2e2e2e, - 0x6a000200,0x4e000200,0x11000200,0x18000200,0x20000200,0x29000200,0x32000200,0x3d000200,0x4c000200,0x5d000200,0x74000200,0xff000100,0xff979897,0xff9e9f9e, - 0xffa7a8a7,0xffb3b4b3,0xffbebebe,0xffcbcbcb,0xffd8d8d8,0xffe1e1e1,0xffe7e7e7,0xffe7e8e7,0xffdfdfdf,0xffbababa,0xff909090,0xff6e6e6e,0xff5d5d5d,0xff595959, - 0xff5f5f5f,0xff7b7b7b,0xffa8a8a8,0xff000000,0x76000200,0x58000200,0x16000200,0x1f000200,0xf8fefefe,0xf0fbfbfb,0xecf9f9f9,0xecf6f6f6,0xedf5f5f5,0xeff3f3f3, - 0xf1f1f1f1,0xffe4e4e4,0xfff1f1f1,0xfff2f2f2,0xfff4f4f4,0xfff8f8f8,0xfffcfcfc,0xffbdbebd,0xffcecece,0xffdbdbdb,0xffe7e7e7,0xffeaeaea,0xffc3c3c3,0xff909090, - 0xff7c7c7c,0xff717171,0xff717171,0xff6c6c6c,0xff5f5f5f,0xff5e5e5e,0xff626262,0xff000000,0x80000200,0x60000200,0x1b000200,0x26000200,0xf0fbfbfb,0xe0f4f4f4, - 0xd8ececec,0xd8e7e7e7,0xdbe3e3e3,0xdfdedede,0xe3dadbda,0xffc2c3c2,0xffd8d8d8,0xffdbdbdb,0xffe1e1e1,0xffececec,0xfff8f8f8,0xffafafaf,0xffc4c5c4,0xffd6d6d6, - 0xffe5e6e5,0xffcecece,0xff9a9a9a,0xff8a8a8a,0xff959595,0xffb5b5b5,0xffc5c5c5,0xffc6c6c6,0xffbababa,0xff818181,0xff5c5c5c,0xff000000,0x87000200,0x66000200, - 0x1f000200,0x2c000200,0xecf9f9f9,0xd8ededed,0xcee0e0e0,0xced9d9d9,0xd3d3d3d3,0xd7cfcfcf,0xddc9cac9,0xffaeafae,0xffc3c3c3,0xffc8c8c8,0xffd0d0d0,0xffe1e1e1, - 0xfff3f4f3,0xffa3a4a3,0xffbbbbbb,0xffd3d3d3,0xffd7d7d7,0xffaeaeae,0xff969696,0xffa7a7a7,0xffe1e1e1,0xfff1f1f1,0xfff5f5f5,0xfff0f0f0,0xffc9c9c9,0xffe2e2e2, - 0xff909090,0xff000000,0x8b000200,0x6a000200,0x22000200,0x30000200,0xebf8f8f8,0xd6e9e9e9,0xcddadada,0xced3d3d3,0xd3cdcdcd,0xd8c9c9c9,0xddc4c4c4,0xffaaabaa, - 0xffb9bab9,0xffbebfbe,0xffc8c8c8,0xffdbdbdb,0xfff2f2f2,0xff9a9b9a,0xffb6b6b6,0xffcecece,0xffc1c1c1,0xffa3a3a3,0xffa0a0a0,0xffdcdcdc,0xfff8f8f8,0xfff6f6f6, - 0xfff5f5f5,0xffa2a2a2,0xff686868,0xffa9a9a9,0xffdbdbdb,0xff000000,0x8e000200,0x6d000200,0x25000200,0x33000200,0xebf7f7f7,0xd7e7e8e7,0xced8d8d8,0xd0d0d0d0, - 0xd5cccccc,0xdac7c7c7,0xdfc2c2c2,0xffaaabaa,0xffb5b6b5,0xffb9bab9,0xffc3c4c3,0xffd8d8d8,0xfff0f1f0,0xff949594,0xffb1b1b1,0xffc9c9c9,0xffb5b5b5,0xffa2a2a2, - 0xffb6b6b6,0xfff1f1f1,0xfff9f9f9,0xfff9f9f9,0xffaaaaaa,0xff6b6b6b,0xff656565,0xff8c8c8c,0xffececec,0xff000000,0x8f000200,0x6e000200,0x26000200,0x35000200, - 0xebf7f7f7,0xd7e7e7e7,0xced7d8d7,0xd1cfcfcf,0xd6cbcbcb,0xdbc6c6c6,0xe0c2c2c2,0xffaaabaa,0xffb3b3b3,0xffb7b8b7,0xffc1c2c1,0xffd7d7d7,0xfff0f0f0,0xff919291, - 0xffafafaf,0xffc6c6c6,0xffafafaf,0xffa1a1a1,0xffc0c0c0,0xfff9f9f9,0xfffafafa,0xffaeaeae,0xff717171,0xff696969,0xff6f6f6f,0xffdfdfdf,0xffffffff,0xff000000, - 0x90000200,0x6e000200,0x26000200,0x35000200,0xebf7f7f7,0xd7e7e7e7,0xced7d8d7,0xd1cfcfcf,0xd6cbcbcb,0xdbc6c6c6,0xe0c2c2c2,0xffaaabaa,0xffb3b3b3,0xffb7b8b7, - 0xffc1c2c1,0xffd7d7d7,0xfff0f0f0,0xff919291,0xffafafaf,0xffc7c7c7,0xffb2b2b2,0xff9d9e9d,0xffb7b7b7,0xfff5f5f5,0xffafafaf,0xff757575,0xff6d6d6d,0xff656565, - 0xff626262,0xff959595,0xfff2f2f2,0xff000000,0x90000200,0x6f000200,0x25000200,0x33000200,0xebf7f7f7,0xd7e7e8e7,0xced8d8d8,0xd0d0d0d0,0xd5cccccc,0xdac7c7c7, - 0xdfc2c2c2,0xffaaabaa,0xffb5b6b5,0xffb9bab9,0xffc3c4c3,0xffd8d8d8,0xfff0f1f0,0xff949594,0xffb1b1b1,0xffcbcbcb,0xffbebebe,0xff979797,0xff9b9b9b,0xffe4e4e4, - 0xffacacac,0xff6d6d6d,0xff8c8c8c,0xff8b8b8b,0xff575757,0xff555555,0xff838383,0xff000000,0x90000200,0x6f000200,0x22000200,0x30000200,0xebf8f8f8,0xd6e9e9e9, - 0xcddadada,0xced3d3d3,0xd3cdcdcd,0xd8c9c9c9,0xddc4c4c4,0xffaaabaa,0xffb9bab9,0xffbebfbe,0xffc8c8c8,0xffdbdbdb,0xfff2f2f2,0xff9a9b9a,0xffb5b5b5,0xffcfcfcf, - 0xffcfd0cf,0xff979797,0xff818181,0xffa7a7a7,0xffececec,0xffbbbbbb,0xffe7e7e7,0xfffbfbfb,0xff8f8f8f,0xff565656,0xff565656,0xff000000,0x90000200,0x6f000200, - 0x1f000200,0x2c000200,0xecf9f9f9,0xd8ededed,0xcee0e0e0,0xced9d9d9,0xd3d3d3d3,0xd7cfcfcf,0xddc9cac9,0xffaeafae,0xffc3c3c3,0xffc8c8c8,0xffd0d0d0,0xffe1e1e1, - 0xfff3f4f3,0xffa3a4a3,0xffbbbcbb,0xffd0d0d0,0xffe2e3e2,0xffb9b9b9,0xff797979,0xff6f6f6f,0xff979797,0xffd6d6d6,0xffe3e3e3,0xffe6e6e6,0xffc2c2c2,0xff5e5e5e, - 0xff575757,0xff000000,0x90000200,0x6f000200,0x1b000200,0x26000200,0xf0fbfbfb,0xe0f4f4f4,0xd8ececec,0xd8e7e7e7,0xdbe3e3e3,0xdfdedede,0xe3dadbda,0xffc2c3c2, - 0xffd8d8d8,0xffdbdbdb,0xffe1e1e1,0xffececec,0xfff8f8f8,0xffafb0af,0xffc3c4c3,0xffd3d4d3,0xffe4e5e4,0xffe9eae9,0xffa8a8a8,0xff6b6b6b,0xff646464,0xff676767, - 0xff757575,0xff757575,0xff6b6b6b,0xff5b5b5b,0xff5b5b5b,0xff000000,0x90000200,0x6f000200,0x16000200,0x1f000200,0xf8fefefe,0xf0fbfbfb,0xecf9f9f9,0xecf6f6f6, - 0xedf5f5f5,0xeff3f3f3,0xf1f1f1f1,0xffe4e4e4,0xfff1f1f1,0xfff2f2f2,0xfff4f4f4,0xfff8f8f8,0xfffcfcfc,0xffbcbdbc,0xffcdcecd,0xffdadada,0xffe4e4e4,0xffefefef, - 0xffefefef,0xffbcbcbc,0xff868686,0xff606060,0xff606060,0xff606060,0xff606060,0xff838383,0xffb3b3b3,0xff000000,0x90000200,0x6e000200,0x11000200,0x18000200, - 0x20000200,0x29000200,0x32000200,0x3d000200,0x4c000200,0x5d000200,0x73000200,0xff000100,0xff979897,0xff9e9f9e,0xffa7a8a7,0xffb3b4b3,0xffbdbebd,0xffcacbca, - 0xffd6d6d6,0xffe1e1e1,0xffe9e9e9,0xffebebeb,0xfff2f2f2,0xfff7f7f7,0xffe7e7e7,0xffcfcfcf,0xffbfbfbf,0xffbfbfbf,0xffcecece,0xffe6e6e6,0xfff9f9f9,0xff000000, - 0x8e000200,0x6d000200,0xc000200,0x11000200,0x17000200,0x1e000200,0x25000200,0x30000200,0x3f000200,0x51000200,0x68000200,0xff000100,0xffb5b6b5,0xffbabbba, - 0xffc0c0c0,0xffc9c9c9,0xffd0d0d0,0xffd8d8d8,0xffe1e1e1,0xffe7e7e7,0xffececec,0xffeeeeee,0xfff0f0f0,0xfff2f2f2,0xfff6f6f6,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, - 0xfff7f7f7,0xfff5f5f5,0xfff2f2f2,0xff000000,0x8c000200,0x6b000200,0x8000200,0xb000200,0xf000200,0x14000200,0x1a000200,0x24000200,0x32000200,0x44000200, - 0x5c000200,0xff000000,0xffcfcfcf,0xffd2d2d2,0xffd6d6d6,0xffdbdbdb,0xffdedfde,0xffe4e4e4,0xffe8e9e8,0xffededed,0xfff0f0f0,0xfff2f2f2,0xfff3f3f3,0xfff4f4f4, - 0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xff000000,0x87000200,0x68000200,0x4000200,0x6000200,0x9000200,0xc000200, - 0x12000200,0x1a000200,0x28000200,0x39000200,0x50000200,0xff000000,0xffe2e2e2,0xffe4e4e4,0xffe7e7e7,0xffeaeaea,0xffeaeaea,0xffededed,0xfff1f1f1,0xfff2f2f2, - 0xfff4f4f4,0xfff5f5f5,0xfff5f5f5,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xff000000,0x7f000200,0x61000200, - 0x2000200,0x3000200,0x4000200,0x7000200,0xc000200,0x14000200,0x1e000200,0x30000200,0x45000200,0xff000000,0xfff0f0f0,0xfff1f1f1,0xfff2f2f2,0xfff4f4f4, - 0xfff6f6f6,0xfff8f8f8,0xfffafafa,0xfffcfcfc,0xfffdfdfd,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, - 0xffffffff,0xff000000,0x73000200,0x58000200,0x1000200,0x1000200,0x2000200,0x4000200,0x8000200,0xe000200,0x18000200,0x27000200,0x38000200,0xff000000, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000500,0x2000500,0x5000500,0x9000500,0x10000500,0x18000500,0x22000500, + 0x2c000500,0x36000500,0x3f000500,0x45000500,0x4a000500,0x4d000500,0x4e000500,0x4e000500,0x4e000500,0x4c000500,0x49000500,0x45000500,0x3f000500,0x37000500, + 0x2e000500,0x25000500,0x1c000500,0x13000500,0xd000500,0x8000500,0x4000500,0x2000500,0xffffff,0xffffff,0xffffff,0x1000500,0x3000500,0x7000500, + 0xd000500,0x16000500,0x22000500,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, + 0xff000000,0xff000000,0xfd373737,0x72545754,0x44000500,0x37000500,0x2b000500,0x1f000500,0x15000500,0xd000500,0x8000500,0x4000500,0xffffff,0xffffff, + 0xffffff,0x1000500,0x4000500,0x9000500,0x11000500,0x1d000500,0x2c000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe, + 0xfffefefe,0xfffdfdfd,0xfffafafa,0xfff5f5f5,0xffededed,0xffe3e3e3,0xffd1d1d1,0xfd363636,0x76404240,0x4e000500,0x3d000500,0x2e000500,0x21000500,0x16000500, + 0xe000500,0x8000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xb000500,0x15000500,0x24000500,0x36000500,0xff000000,0xfffefefe,0xfffefefe, + 0xffffffff,0xffffffff,0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffdfdfd,0xfff8f8f8,0xfff0f0f0,0xffe3e3e3,0xffd4d4d4,0xfffefefe,0xffbebebe,0xfd383838,0x803e403e, + 0x53000500,0x40000500,0x2f000500,0x21000500,0x16000500,0xd000500,0xffffff,0xffffff,0xffffff,0x3000500,0x7000500,0xe000500,0x19000500,0x2a000500, + 0x40000500,0xff000000,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfffbfbfb,0xfff6f6f6,0xffededed,0xffdbdbdb,0xffc6c6c6, + 0xffffffff,0xfffdfdfd,0xffaeaeae,0xfd3b3b3b,0x7e353735,0x55000500,0x41000500,0x2f000500,0x20000500,0x15000500,0x1000500,0x1000500,0x3000500,0x4000500, + 0x9000500,0x11000500,0x1e000500,0x2f000500,0x47000500,0xff000000,0xfff9f9f9,0xfffafafa,0xfffafafa,0xfffbfbfb,0xfffafafa,0xfffbfbfb,0xfffafafa,0xfff9f9f9, + 0xfff3f3f3,0xffe8e8e8,0xffd5d5d5,0xffbababa,0xffffffff,0xffffffff,0xfffdfdfd,0xffa3a3a3,0xfd3e3e3e,0x7a2a2d2a,0x55000500,0x40000500,0x2d000500,0x1e000500, + 0x2000500,0x3000500,0x5000500,0x7000500,0xd000500,0x16000500,0x23000500,0x36000500,0x50000500,0xff000000,0xfff3f3f3,0xfff3f3f3,0xfff4f4f4,0xfff6f6f6, + 0xfff6f6f6,0xfff7f7f7,0xfff8f8f8,0xfff6f6f6,0xfff1f1f1,0xffe6e6e6,0xffd1d1d1,0xffb4b4b4,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff9d9d9d,0xfd454545, + 0x782b2b2b,0x52000500,0x3c000500,0x29000500,0x4000500,0x6000500,0x9000500,0xd000500,0x13000500,0x1c000500,0x2a000500,0x3e000500,0x57000500,0xff000000, + 0xffe7e7e7,0xffe8e8e8,0xffebebeb,0xffeeeeee,0xffeeeeee,0xfff1f1f1,0xfff3f3f3,0xfff3f3f3,0xfff0f0f0,0xffe4e4e4,0xffd0d0d0,0xffb3b3b3,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xfff9f9f9,0xff9e9e9e,0xfc4c4c4c,0x701f231f,0x4c000500,0x36000500,0x8000500,0xb000500,0xf000500,0x15000500,0x1a000500,0x25000500, + 0x33000500,0x47000500,0x5f000500,0xff000000,0xffd7d7d7,0xffd9d9d9,0xffdddddd,0xffe1e1e1,0xffe4e5e4,0xffe9eae9,0xffedeeed,0xffefefef,0xffeeeeee,0xffe6e6e6, + 0xffd3d3d3,0xffb9b9b9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xffa1a1a1,0xfb545454,0x5c000500,0x42000500,0xc000500,0x11000500, + 0x17000500,0x1e000500,0x25000500,0x30000500,0x3f000500,0x51000500,0x69000500,0xff000300,0xffc0c1c0,0xffc4c5c4,0xffcacaca,0xffd1d1d1,0xffd7d7d7,0xffdfdfdf, + 0xffe6e6e6,0xffececec,0xffecedec,0xffe7e8e7,0xffdcdcdc,0xffc8c8c8,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xff3e3e3e, + 0x6a000500,0x4e000500,0x11000500,0x18000500,0x20000500,0x29000500,0x32000500,0x3d000500,0x4c000500,0x5d000500,0x74000500,0xff000300,0xffa5a6a5,0xffacadac, + 0xffb4b5b4,0xffbebfbe,0xffc8c8c8,0xffd3d3d3,0xffdedede,0xffe6e6e6,0xffebebeb,0xffebeceb,0xffe4e4e4,0xffc4c4c4,0xff9f9f9f,0xff7f7f7f,0xff6f6f6f,0xff6b6b6b, + 0xff717171,0xff8c8c8c,0xffb5b5b5,0xff000000,0x76000500,0x58000500,0x16000500,0x1f000500,0xf8fefefe,0xf0fcfcfc,0xecfafafa,0xecf8f8f8,0xedf7f7f7,0xeff5f5f5, + 0xf1f3f3f3,0xffe8e8e8,0xfff3f3f3,0xfff4f4f4,0xfff6f6f6,0xfff9f9f9,0xfffdfdfd,0xffc7c8c7,0xffd6d6d6,0xffe1e1e1,0xffebebeb,0xffeeeeee,0xffcccccc,0xff9f9f9f, + 0xff8d8d8d,0xff828282,0xff828282,0xff7d7d7d,0xff717171,0xff707070,0xff747474,0xff000000,0x80000500,0x60000500,0x1b000500,0x26000500,0xf0fcfcfc,0xe0f6f6f6, + 0xd8efefef,0xd8ebebeb,0xdbe8e8e8,0xdfe3e3e3,0xe3e0e1e0,0xffcbcccb,0xffdedede,0xffe1e1e1,0xffe6e6e6,0xffefefef,0xfff9f9f9,0xffbbbbbb,0xffcdcecd,0xffdddddd, + 0xffe9eae9,0xffd6d6d6,0xffa8a8a8,0xff9a9a9a,0xffa4a4a4,0xffc0c0c0,0xffcecece,0xffcfcfcf,0xffc4c4c4,0xff919191,0xff6e6e6e,0xff000000,0x87000500,0x66000500, + 0x1f000500,0x2c000500,0xecfafafa,0xd8f0f0f0,0xcee5e5e5,0xcedfdfdf,0xd3dadada,0xd7d7d7d7,0xddd1d2d1,0xffbabbba,0xffcccccc,0xffd1d1d1,0xffd7d7d7,0xffe6e6e6, + 0xfff5f6f5,0xffb0b1b0,0xffc5c5c5,0xffdadada,0xffdddddd,0xffbababa,0xffa4a4a4,0xffb4b4b4,0xffe6e6e6,0xfff3f3f3,0xfff7f7f7,0xfff3f3f3,0xffd1d1d1,0xffe7e7e7, + 0xff9f9f9f,0xff000000,0x8b000500,0x6a000500,0x22000500,0x30000500,0xebf9f9f9,0xd6ededed,0xcde0e0e0,0xcedadada,0xd3d5d5d5,0xd8d1d1d1,0xddcdcdcd,0xffb6b7b6, + 0xffc4c4c4,0xffc8c9c8,0xffd1d1d1,0xffe1e1e1,0xfff4f4f4,0xffa8a9a8,0xffc1c1c1,0xffd6d6d6,0xffcbcbcb,0xffb0b0b0,0xffadadad,0xffe2e2e2,0xfff9f9f9,0xfff8f8f8, + 0xfff7f7f7,0xffafafaf,0xff7a7a7a,0xffb6b6b6,0xffe1e1e1,0xff000000,0x8e000500,0x6d000500,0x25000500,0x33000500,0xebf8f8f8,0xd7ebeceb,0xcededede,0xd0d7d7d7, + 0xd5d4d4d4,0xdad0d0d0,0xdfcbcbcb,0xffb6b7b6,0xffc0c1c0,0xffc4c4c4,0xffcccdcc,0xffdedede,0xfff3f3f3,0xffa3a4a3,0xffbdbdbd,0xffd1d1d1,0xffc0c0c0,0xffafafaf, + 0xffc1c1c1,0xfff3f3f3,0xfffafafa,0xfffafafa,0xffb6b6b6,0xff7c7c7c,0xff777777,0xff9b9b9b,0xffefefef,0xff000000,0x8f000500,0x6e000500,0x26000500,0x35000500, + 0xebf8f8f8,0xd7ebebeb,0xcedddedd,0xd1d7d7d7,0xd6d3d3d3,0xdbcfcfcf,0xe0cbcbcb,0xffb6b7b6,0xffbebebe,0xffc2c3c2,0xffcbcbcb,0xffdddddd,0xfff3f3f3,0xffa0a1a0, + 0xffbbbbbb,0xffcfcfcf,0xffbbbbbb,0xffaeaeae,0xffcacaca,0xfffafafa,0xfffbfbfb,0xffbababa,0xff828282,0xff7a7a7a,0xff808080,0xffe4e4e4,0xffffffff,0xff000000, + 0x90000500,0x6e000500,0x26000500,0x35000500,0xebf8f8f8,0xd7ebebeb,0xcedddedd,0xd1d7d7d7,0xd6d3d3d3,0xdbcfcfcf,0xe0cbcbcb,0xffb6b7b6,0xffbebebe,0xffc2c3c2, + 0xffcbcbcb,0xffdddddd,0xfff3f3f3,0xffa0a1a0,0xffbbbbbb,0xffd0d0d0,0xffbdbdbd,0xffabacab,0xffc2c2c2,0xfff7f7f7,0xffbbbbbb,0xff868686,0xff7e7e7e,0xff777777, + 0xff747474,0xffa4a4a4,0xfff4f4f4,0xff000000,0x90000500,0x6f000500,0x25000500,0x33000500,0xebf8f8f8,0xd7ebeceb,0xcededede,0xd0d7d7d7,0xd5d4d4d4,0xdad0d0d0, + 0xdfcbcbcb,0xffb6b7b6,0xffc0c1c0,0xffc4c4c4,0xffcccdcc,0xffdedede,0xfff3f3f3,0xffa3a4a3,0xffbdbdbd,0xffd3d3d3,0xffc8c8c8,0xffa5a5a5,0xffa9a9a9,0xffe8e8e8, + 0xffb8b8b8,0xff7e7e7e,0xff9b9b9b,0xff9a9a9a,0xff696969,0xff676767,0xff939393,0xff000000,0x90000500,0x6f000500,0x22000500,0x30000500,0xebf9f9f9,0xd6ededed, + 0xcde0e0e0,0xcedadada,0xd3d5d5d5,0xd8d1d1d1,0xddcdcdcd,0xffb6b7b6,0xffc4c4c4,0xffc8c9c8,0xffd1d1d1,0xffe1e1e1,0xfff4f4f4,0xffa8a9a8,0xffc0c0c0,0xffd7d7d7, + 0xffd7d7d7,0xffa5a5a5,0xff919191,0xffb4b4b4,0xffefefef,0xffc5c5c5,0xffebebeb,0xfffcfcfc,0xff9e9e9e,0xff686868,0xff686868,0xff000000,0x90000500,0x6f000500, + 0x1f000500,0x2c000500,0xecfafafa,0xd8f0f0f0,0xcee5e5e5,0xcedfdfdf,0xd3dadada,0xd7d7d7d7,0xddd1d2d1,0xffbabbba,0xffcccccc,0xffd1d1d1,0xffd7d7d7,0xffe6e6e6, + 0xfff5f6f5,0xffb0b1b0,0xffc5c6c5,0xffd7d7d7,0xffe7e8e7,0xffc4c4c4,0xff8a8a8a,0xff808080,0xffa5a5a5,0xffdddddd,0xffe8e8e8,0xffeaeaea,0xffcbcbcb,0xff707070, + 0xff696969,0xff000000,0x90000500,0x6f000500,0x1b000500,0x26000500,0xf0fcfcfc,0xe0f6f6f6,0xd8efefef,0xd8ebebeb,0xdbe8e8e8,0xdfe3e3e3,0xe3e0e1e0,0xffcbcccb, + 0xffdedede,0xffe1e1e1,0xffe6e6e6,0xffefefef,0xfff9f9f9,0xffbbbcbb,0xffcccdcc,0xffdadbda,0xffe8e9e8,0xffedeeed,0xffb5b5b5,0xff7c7c7c,0xff767676,0xff797979, + 0xff868686,0xff868686,0xff7c7c7c,0xff6d6d6d,0xff6d6d6d,0xff000000,0x90000500,0x6f000500,0x16000500,0x1f000500,0xf8fefefe,0xf0fcfcfc,0xecfafafa,0xecf8f8f8, + 0xedf7f7f7,0xeff5f5f5,0xf1f3f3f3,0xffe8e8e8,0xfff3f3f3,0xfff4f4f4,0xfff6f6f6,0xfff9f9f9,0xfffdfdfd,0xffc6c7c6,0xffd5d6d5,0xffe0e0e0,0xffe8e8e8,0xfff2f2f2, + 0xfff2f2f2,0xffc6c6c6,0xff969696,0xff727272,0xff727272,0xff727272,0xff727272,0xff939393,0xffbebebe,0xff000000,0x90000500,0x6e000500,0x11000500,0x18000500, + 0x20000500,0x29000500,0x32000500,0x3d000500,0x4c000500,0x5d000500,0x73000500,0xff000300,0xffa5a6a5,0xffacadac,0xffb4b5b4,0xffbebfbe,0xffc7c8c7,0xffd2d3d2, + 0xffdddddd,0xffe6e6e6,0xffededed,0xffeeeeee,0xfff4f4f4,0xfff8f8f8,0xffebebeb,0xffd7d7d7,0xffc9c9c9,0xffc9c9c9,0xffd6d6d6,0xffeaeaea,0xfffafafa,0xff000000, + 0x8e000500,0x6d000500,0xc000500,0x11000500,0x17000500,0x1e000500,0x25000500,0x30000500,0x3f000500,0x51000500,0x68000500,0xff000300,0xffc0c1c0,0xffc4c5c4, + 0xffcacaca,0xffd1d1d1,0xffd7d7d7,0xffdedede,0xffe6e6e6,0xffebebeb,0xffefefef,0xfff1f1f1,0xfff3f3f3,0xfff4f4f4,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8, + 0xfff8f8f8,0xfff7f7f7,0xfff4f4f4,0xff000000,0x8c000500,0x6b000500,0x8000500,0xb000500,0xf000500,0x14000500,0x1a000500,0x24000500,0x32000500,0x44000500, + 0x5c000500,0xff000000,0xffd7d7d7,0xffd9d9d9,0xffdddddd,0xffe1e1e1,0xffe3e4e3,0xffe8e8e8,0xffecedec,0xfff0f0f0,0xfff3f3f3,0xfff4f4f4,0xfff5f5f5,0xfff6f6f6, + 0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xff000000,0x87000500,0x68000500,0x4000500,0x6000500,0x9000500,0xc000500, + 0x12000500,0x1a000500,0x28000500,0x39000500,0x50000500,0xff000000,0xffe7e7e7,0xffe8e8e8,0xffebebeb,0xffeeeeee,0xffeeeeee,0xfff0f0f0,0xfff3f3f3,0xfff4f4f4, + 0xfff6f6f6,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xff000000,0x7f000500,0x61000500, + 0x2000500,0x3000500,0x4000500,0x7000500,0xc000500,0x14000500,0x1e000500,0x30000500,0x45000500,0xff000000,0xfff3f3f3,0xfff3f3f3,0xfff4f4f4,0xfff6f6f6, + 0xfff8f8f8,0xfff9f9f9,0xfffbfbfb,0xfffdfdfd,0xfffdfdfd,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xff000000,0x73000500,0x58000500,0x1000500,0x1000500,0x2000500,0x4000500,0x8000500,0xe000500,0x18000500,0x27000500,0x38000500,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, - 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x63000200,0x4c000200,0xffffff,0xffffff,0xffffff,0x2000200,0x5000200,0xa000200, - 0x12000200,0x1e000200,0x2d000200,0x3f000200,0x52000200,0x64000200,0x74000200,0x80000200,0x87000200,0x8c000200,0x8e000200,0x90000200,0x90000200,0x90000200, - 0x90000200,0x90000200,0x90000200,0x90000200,0x8e000200,0x8c000200,0x87000200,0x7f000200,0x73000200,0x63000200,0x51000200,0x3e000200,0xffffff,0xffffff, - 0xffffff,0x1000200,0x3000200,0x7000200,0xd000200,0x16000200,0x22000200,0x30000200,0x3e000200,0x4c000200,0x58000200,0x61000200,0x68000200,0x6b000200, - 0x6d000200,0x6e000200,0x6f000200,0x6f000200,0x6f000200,0x6f000200,0x6f000200,0x6e000200,0x6d000200,0x6b000200,0x68000200,0x61000200,0x58000200,0x4c000200, - 0x3e000200,0x30000200 + 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x63000500,0x4c000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xa000500, + 0x12000500,0x1e000500,0x2d000500,0x3f000500,0x52000500,0x64000500,0x74000500,0x80000500,0x87000500,0x8c000500,0x8e000500,0x90000500,0x90000500,0x90000500, + 0x90000500,0x90000500,0x90000500,0x90000500,0x8e000500,0x8c000500,0x87000500,0x7f000500,0x73000500,0x63000500,0x51000500,0x3e000500,0xffffff,0xffffff, + 0xffffff,0x1000500,0x3000500,0x7000500,0xd000500,0x16000500,0x22000500,0x30000500,0x3e000500,0x4c000500,0x58000500,0x61000500,0x68000500,0x6b000500, + 0x6d000500,0x6e000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6e000500,0x6d000500,0x6b000500,0x68000500,0x61000500,0x58000500,0x4c000500, + 0x3e000500,0x30000500 }; static const QRgb DocumentTypePowerPoint_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000200,0x2000200,0x5000200,0x9000200,0x10000200,0x18000200,0x22000200, - 0x2c000200,0x36000200,0x3f000200,0x45000200,0x4a000200,0x4d000200,0x4e000200,0x4e000200,0x4e000200,0x4c000200,0x49000200,0x45000200,0x3f000200,0x37000200, - 0x2e000200,0x25000200,0x1c000200,0x13000200,0xd000200,0x8000200,0x4000200,0x2000200,0xffffff,0xffffff,0xffffff,0x1000200,0x3000200,0x7000200, - 0xd000200,0x16000200,0x22000200,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, - 0xff000000,0xff000000,0xfd282828,0x72434543,0x44000200,0x37000200,0x2b000200,0x1f000200,0x15000200,0xd000200,0x8000200,0x4000200,0xffffff,0xffffff, - 0xffffff,0x1000200,0x4000200,0x9000200,0x11000200,0x1d000200,0x2c000200,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe, - 0xfffefefe,0xfffcfcfc,0xfff9f9f9,0xfff3f3f3,0xffe9e9e9,0xffdedede,0xffc8c8c8,0xfd272727,0x76303230,0x4e000200,0x3d000200,0x2e000200,0x21000200,0x16000200, - 0xe000200,0x8000200,0xffffff,0xffffff,0xffffff,0x2000200,0x5000200,0xb000200,0x15000200,0x24000200,0x36000200,0xff000000,0xffffffff,0xffffffff, - 0xffffffff,0xffffffff,0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffcfcfc,0xfff6f6f6,0xffededed,0xffdedede,0xffcccccc,0xfffefefe,0xffb3b3b3,0xfd292929,0x802e302e, - 0x53000200,0x40000200,0x2f000200,0x21000200,0x16000200,0xd000200,0xffffff,0xffffff,0xffffff,0x2000200,0x6000200,0xd000200,0x18000200,0x29000200, - 0x3f000200,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffcfcfc,0xfffafafa,0xfff4f4f4,0xffe9e9e9,0xffd4d4d4,0xffbcbcbc, - 0xffffffff,0xfffcfcfc,0xffa1a1a1,0xfd2b2b2b,0x7e262826,0x55000200,0x41000200,0x2f000200,0x20000200,0x15000200,0xffffff,0xffffff,0x1000200,0x2000200, - 0x6000200,0xe000200,0x1b000200,0x2d000200,0x45000200,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffdfdfd,0xfffbfbfb,0xfff9f9f9, - 0xfff2f2f2,0xffe4e4e4,0xffcdcdcd,0xffaeaeae,0xffffffff,0xffffffff,0xfffcfcfc,0xff949494,0xfd2e2e2e,0x7a1d1f1d,0x55000200,0x40000200,0x2d000200,0x1e000200, - 0xffffff,0xffffff,0x1000200,0x2000200,0x7000200,0xf000200,0x1d000200,0x30000200,0x4a000200,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff, - 0xfffdfdfd,0xfffcfcfc,0xfffbfbfb,0xfff7f7f7,0xfff0f0f0,0xffe2e2e2,0xffc8c8c8,0xffa7a7a7,0xffffffff,0xffffffff,0xffffffff,0xfff9f9f9,0xff8e8e8e,0xfd343434, - 0x781e1e1e,0x52000200,0x3c000200,0x29000200,0xffffff,0xffffff,0x1000200,0x3000200,0x7000200,0x10000200,0x1e000200,0x32000200,0x4d000200,0xff000000, - 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffcfcfc,0xfffbfbfb,0xfffafafa,0xfff7f7f7,0xfff0f0f0,0xffe1e1e1,0xffc8c8c8,0xffa6a6a6,0xffffffff,0xffffffff, - 0xffffffff,0xffffffff,0xfff8f8f8,0xff8f8f8f,0xfc3b3b3b,0x70141714,0x4c000200,0x36000200,0x1000000,0x2000000,0x5000000,0x9000000,0xf000000,0x18000000, - 0x27000000,0x3b000000,0x55000300,0xff000000,0xfff5f5f5,0xfff5f5f5,0xfff5f5f5,0xfff6f6f6,0xfff4f4f4,0xfff5f5f5,0xfff5f5f5,0xfff4f4f4,0xffefefef,0xffe4e4e4, - 0xffcccccc,0xffadadad,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff929292,0xfb434343,0x5c000200,0x42000200,0x4000000,0x7000000, - 0xd000000,0x15000000,0x1d000000,0x29000000,0x38000000,0x4c000000,0x64000000,0xff000000,0xffe0e0e0,0xffe0e0e0,0xffe2e2e2,0xffe4e4e4,0xffe4e4e4,0xffe8e8e8, - 0xffececec,0xfff0f0f0,0xffededed,0xffe6e6e6,0xffd7d7d7,0xffbfbfbf,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff2e2e2e, - 0x6a000200,0x4e000200,0x7000000,0xf000000,0x19000000,0x28000000,0x34000000,0x43000000,0x52000000,0x64000000,0x79000200,0xff000000,0xffc2c2c2,0xffc2c2c2, - 0xffc4c4c4,0xffc9c9c9,0xffcecece,0xffd6d6d6,0xffe2e2e2,0xffe8e8e8,0xffececec,0xffececec,0xffe2e2e2,0xffbbbbbb,0xff909090,0xff6e6e6e,0xff5d5d5d,0xff595959, - 0xff5f5f5f,0xff7b7b7b,0xffa8a8a8,0xff000000,0x76000200,0x58000200,0xc000000,0x19000000,0xff66c66a,0xff63c466,0xff5fc163,0xff5cbe60,0xff57bb5b,0xff55bb59, - 0xff50ba54,0xff4cba51,0xff46b64b,0xff40b445,0xff3cb13f,0xff34b039,0xff32ad37,0xffbcbcbc,0xffd0d0d0,0xffe0e0e0,0xffebebeb,0xffefefef,0xffc6c6c6,0xff919191, - 0xff7c7c7c,0xff717171,0xff717171,0xff6c6c6c,0xff5f5f5f,0xff5e5e5e,0xff626262,0xff000000,0x80000200,0x60000200,0x12000000,0x27000000,0xff62c265,0xff5dbc61, - 0xff58b65b,0xff52b056,0xff4fae53,0xff4bac4e,0xff47ad4b,0xff42ab45,0xff3ca841,0xff37a53b,0xff31a336,0xff2ea033,0xff2e9f32,0xff999999,0xffb9b9b9,0xffd4d4d4, - 0xffe8e8e8,0xffd2d2d2,0xff9d9d9d,0xff8b8b8b,0xff959595,0xffb5b5b5,0xffc5c5c5,0xffc6c6c6,0xffbababa,0xff818181,0xff5c5c5c,0xff000000,0x87000200,0x66000200, - 0x17000000,0x31000000,0xff5dbc61,0xffffffff,0xffffffff,0xffffffff,0xfff2f8f3,0xff97c899,0xff3b993e,0xffffffff,0xffffffff,0xffffffff,0xfff1f8f1,0xff8bc28d, - 0xff2a8f2d,0xff7c7c7c,0xffa4a4a4,0xffcbcbcb,0xffd7d7d7,0xffb1b1b1,0xff9a9a9a,0xffa8a8a8,0xffe1e1e1,0xfff1f1f1,0xfff5f5f5,0xfff0f0f0,0xffc9c9c9,0xffe2e2e2, - 0xff909090,0xff000000,0x8b000200,0x6a000200,0x1b000000,0x3c000000,0xff57b45a,0xffffffff,0xffdaeadb,0xff6ea871,0xffbcd6bd,0xffffffff,0xff66a369,0xffffffff, - 0xffd5e6d6,0xff5d9b60,0xffb5d2b6,0xffffffff,0xff5e9f61,0xff646464,0xff939393,0xffbebebe,0xffc0c0c0,0xffa6a6a6,0xffa4a4a4,0xffdedede,0xfff9f9f9,0xfff6f6f6, - 0xfff5f5f5,0xffa2a2a2,0xff686868,0xffa9a9a9,0xffdbdbdb,0xff000000,0x8e000200,0x6d000200,0x1d000000,0x43000000,0xff50ae54,0xffffffff,0xffc9deca,0xff317833, - 0xff659966,0xffffffff,0xff89b18a,0xffffffff,0xffc2d6c3,0xff1d6520,0xff59905b,0xffffffff,0xff86b088,0xff545454,0xff878787,0xffb4b4b4,0xffb4b4b4,0xffa5a5a5, - 0xffbbbbbb,0xfff3f3f3,0xfffafafa,0xfff9f9f9,0xffaaaaaa,0xff6b6b6b,0xff656565,0xff8c8c8c,0xffececec,0xff000000,0x8f000200,0x6e000200,0x1f000000,0x45000000, - 0xff4caa4f,0xffffffff,0xffc8dcc9,0xff2b6f2d,0xff8ab08b,0xffffffff,0xff77a279,0xffffffff,0xffc1d3c2,0xff1a5a1c,0xff83a785,0xffffffff,0xff77a378,0xff4e4e4e, - 0xff818181,0xffb0b0b0,0xffacacac,0xffa5a5a5,0xffc5c5c5,0xfffcfcfc,0xfffbfbfb,0xffaeaeae,0xff717171,0xff696969,0xff6f6f6f,0xffdfdfdf,0xffffffff,0xff000000, - 0x90000200,0x6e000200,0x1f000000,0x46000000,0xff46a64b,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffd4e2d5,0xff2a6d2d,0xffffffff,0xffffffff,0xffffffff, - 0xffffffff,0xffd3e0d4,0xff2b6f2e,0xff4f4f4f,0xff828282,0xffb2b2b2,0xffafafaf,0xffa1a1a1,0xffbcbcbc,0xfff8f8f8,0xffb0b0b0,0xff757575,0xff6d6d6d,0xff656565, - 0xff626262,0xff959595,0xfff2f2f2,0xff000000,0x90000200,0x6f000200,0x1f000000,0x46000000,0xff42a545,0xffffffff,0xffd6e5d7,0xff5e9561,0xff4b8a4d,0xff1f6c22, - 0xff1e6921,0xffffffff,0xffd3dfd3,0xff568358,0xff457b48,0xff1c601e,0xff1e6921,0xff535353,0xff868686,0xffb7b7b7,0xffbbbbbb,0xff9a9a9a,0xff9f9f9f,0xffe6e6e6, - 0xffadadad,0xff6d6d6d,0xff8c8c8c,0xff8b8b8b,0xff575757,0xff555555,0xff838383,0xff000000,0x90000200,0x6f000200,0x1f000000,0x46000000,0xff3da240,0xffffffff, - 0xffc5dbc5,0xff217225,0xff227625,0xff217525,0xff217324,0xffffffff,0xffc1d4c2,0xff1b5d1d,0xff1c611e,0xff1e6821,0xff217124,0xff595959,0xff8c8c8c,0xffbbbbbb, - 0xffcbcbcb,0xff9a9a9a,0xff848484,0xffa8a8a8,0xffededed,0xffbbbbbb,0xffe7e7e7,0xfffbfbfb,0xff8f8f8f,0xff565656,0xff565656,0xff000000,0x90000200,0x6f000200, - 0x1d000000,0x43000000,0xff38a33d,0xffffffff,0xffc4dcc5,0xff237725,0xff247d28,0xff257e28,0xff237b27,0xffffffff,0xffc2d5c3,0xff1c631f,0xff1e6921,0xff206e23, - 0xff237725,0xff636363,0xff959595,0xffbdbdbd,0xffdddddd,0xffbbbbbb,0xff7c7c7c,0xff707070,0xff979797,0xffd6d6d6,0xffe3e3e3,0xffe6e6e6,0xffc2c2c2,0xff5e5e5e, - 0xff575757,0xff000000,0x90000200,0x6f000200,0x1b000000,0x3e000000,0xff34a437,0xffffffff,0xffc4ddc5,0xff257f28,0xff26842a,0xff26852a,0xff258129,0xffffffff, - 0xffc2d7c3,0xff1f6a22,0xff206f23,0xff227625,0xff247c28,0xff747474,0xff9f9f9f,0xffc1c1c1,0xffdfdfdf,0xffebebeb,0xffababab,0xff6c6c6c,0xff646464,0xff676767, - 0xff757575,0xff757575,0xff6b6b6b,0xff5b5b5b,0xff5b5b5b,0xff000000,0x90000200,0x6f000200,0x17000000,0x34000000,0xff2fa534,0xff2b952f,0xff27892b,0xff27862a, - 0xff278a2c,0xff27892b,0xff26852a,0xff247e28,0xff217324,0xff217223,0xff227525,0xff237926,0xff247e28,0xff878787,0xffacacac,0xffcacaca,0xffdedede,0xfff0f0f0, - 0xfff3f3f3,0xffbdbdbd,0xff868686,0xff606060,0xff606060,0xff606060,0xff606060,0xff838383,0xffb3b3b3,0xff000000,0x90000200,0x6e000200,0x12000000,0x28000000, - 0x47000000,0x6b000000,0x87000000,0x9a000000,0xa7000000,0xb2000000,0xbc000000,0xff000000,0xff5b5b5b,0xff5c5c5c,0xff646464,0xff737373,0xff868686,0xff9f9f9f, - 0xffbcbcbc,0xffd2d2d2,0xffe4e4e4,0xffececec,0xfff5f5f5,0xfff8f8f8,0xffe7e7e7,0xffcfcfcf,0xffbfbfbf,0xffbfbfbf,0xffcecece,0xffe6e6e6,0xfff9f9f9,0xff000000, - 0x8e000200,0x6d000200,0xc000000,0x1a000000,0x2f000000,0x47000000,0x5b000000,0x6c000000,0x79000000,0x87000000,0x97000000,0xff000000,0xff919191,0xff919191, - 0xff979797,0xffa2a2a2,0xffaeaeae,0xffbdbdbd,0xffd0d0d0,0xffdfdfdf,0xffe9e9e9,0xffefefef,0xfff2f2f2,0xfff3f3f3,0xfff6f6f6,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, - 0xfff7f7f7,0xfff5f5f5,0xfff2f2f2,0xff000000,0x8c000200,0x6b000200,0x7000000,0x10000000,0x1b000000,0x2a000000,0x37000000,0x45000000,0x53000000,0x63000000, - 0x76000000,0xff000000,0xffbfbfbf,0xffbfbfbf,0xffc2c2c2,0xffc8c8c8,0xffcdcdcd,0xffd5d5d5,0xffe1e1e1,0xffe8e8e8,0xffefefef,0xfff3f3f3,0xfff4f4f4,0xfff4f4f4, - 0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xff000000,0x87000200,0x68000200,0x4000000,0x7000000,0xd000000,0x14000000, - 0x1c000000,0x28000000,0x35000000,0x47000000,0x5c000300,0xff000000,0xffe0e0e0,0xffe0e0e0,0xffe2e2e2,0xffe4e4e4,0xffe4e4e4,0xffe8e8e8,0xffeeeeee,0xfff1f1f1, - 0xfff3f3f3,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xff000000,0x7f000200,0x61000200, - 0x1000000,0x2000000,0x4000000,0x8000000,0xe000000,0x16000000,0x21000000,0x31000000,0x47000000,0xff000000,0xfff5f5f5,0xfff5f5f5,0xfff5f5f5,0xfff6f6f6, - 0xfff7f7f7,0xfff9f9f9,0xfffbfbfb,0xfffdfdfd,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, - 0xffffffff,0xff000000,0x73000200,0x58000200,0xffffff,0xffffff,0xffffff,0x2000200,0x5000200,0xb000200,0x15000200,0x24000200,0x36000200,0xff000000, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000500,0x2000500,0x5000500,0x9000500,0x10000500,0x18000500,0x22000500, + 0x2c000500,0x36000500,0x3f000500,0x45000500,0x4a000500,0x4d000500,0x4e000500,0x4e000500,0x4e000500,0x4c000500,0x49000500,0x45000500,0x3f000500,0x37000500, + 0x2e000500,0x25000500,0x1c000500,0x13000500,0xd000500,0x8000500,0x4000500,0x2000500,0xffffff,0xffffff,0xffffff,0x1000500,0x3000500,0x7000500, + 0xd000500,0x16000500,0x22000500,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, + 0xff000000,0xff000000,0xfd373737,0x72545754,0x44000500,0x37000500,0x2b000500,0x1f000500,0x15000500,0xd000500,0x8000500,0x4000500,0xffffff,0xffffff, + 0xffffff,0x1000500,0x4000500,0x9000500,0x11000500,0x1d000500,0x2c000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe, + 0xfffefefe,0xfffdfdfd,0xfffafafa,0xfff5f5f5,0xffededed,0xffe3e3e3,0xffd1d1d1,0xfd363636,0x76404240,0x4e000500,0x3d000500,0x2e000500,0x21000500,0x16000500, + 0xe000500,0x8000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xb000500,0x15000500,0x24000500,0x36000500,0xff000000,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffdfdfd,0xfff8f8f8,0xfff0f0f0,0xffe3e3e3,0xffd4d4d4,0xfffefefe,0xffbebebe,0xfd383838,0x803e403e, + 0x53000500,0x40000500,0x2f000500,0x21000500,0x16000500,0xd000500,0xffffff,0xffffff,0xffffff,0x2000500,0x6000500,0xd000500,0x18000500,0x29000500, + 0x3f000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffdfdfd,0xfffbfbfb,0xfff6f6f6,0xffededed,0xffdbdbdb,0xffc6c6c6, + 0xffffffff,0xfffdfdfd,0xffaeaeae,0xfd3b3b3b,0x7e353735,0x55000500,0x41000500,0x2f000500,0x20000500,0x15000500,0xffffff,0xffffff,0x1000500,0x2000500, + 0x6000500,0xe000500,0x1b000500,0x2d000500,0x45000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfffafafa, + 0xfff4f4f4,0xffe8e8e8,0xffd5d5d5,0xffbababa,0xffffffff,0xffffffff,0xfffdfdfd,0xffa3a3a3,0xfd3e3e3e,0x7a2a2d2a,0x55000500,0x40000500,0x2d000500,0x1e000500, + 0xffffff,0xffffff,0x1000500,0x2000500,0x7000500,0xf000500,0x1d000500,0x30000500,0x4a000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfff8f8f8,0xfff3f3f3,0xffe7e7e7,0xffd1d1d1,0xffb4b4b4,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff9d9d9d,0xfd454545, + 0x782b2b2b,0x52000500,0x3c000500,0x29000500,0xffffff,0xffffff,0x1000500,0x3000500,0x7000500,0x10000500,0x1e000500,0x32000500,0x4d000500,0xff000000, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffcfcfc,0xfffbfbfb,0xfff8f8f8,0xfff3f3f3,0xffe6e6e6,0xffd1d1d1,0xffb3b3b3,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xfff9f9f9,0xff9e9e9e,0xfc4c4c4c,0x701f231f,0x4c000500,0x36000500,0x1000000,0x2000000,0x5000000,0x9000000,0xf000000,0x18000000, + 0x27000000,0x3b000000,0x55000600,0xff000000,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8,0xfff6f6f6,0xfff7f7f7,0xfff7f7f7,0xfff6f6f6,0xfff2f2f2,0xffe8e8e8, + 0xffd4d4d4,0xffb9b9b9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xffa1a1a1,0xfb545454,0x5c000500,0x42000500,0x4000000,0x7000000, + 0xd000000,0x15000000,0x1d000000,0x29000000,0x38000000,0x4c000000,0x64000000,0xff000000,0xffe5e5e5,0xffe5e5e5,0xffe7e7e7,0xffe8e8e8,0xffe8e8e8,0xffececec, + 0xffefefef,0xfff3f3f3,0xfff0f0f0,0xffeaeaea,0xffdddddd,0xffc9c9c9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xff3e3e3e, + 0x6a000500,0x4e000500,0x7000000,0xf000000,0x19000000,0x28000000,0x34000000,0x43000000,0x52000000,0x64000000,0x79000500,0xff000000,0xffcbcbcb,0xffcbcbcb, + 0xffcdcdcd,0xffd1d1d1,0xffd6d6d6,0xffdddddd,0xffe7e7e7,0xffececec,0xffefefef,0xffefefef,0xffe7e7e7,0xffc5c5c5,0xff9f9f9f,0xff7f7f7f,0xff6f6f6f,0xff6b6b6b, + 0xff717171,0xff8c8c8c,0xffb5b5b5,0xff000000,0x76000500,0x58000500,0xc000000,0x19000000,0xff78cf7b,0xff75cd78,0xff71cb75,0xff6ec872,0xff69c56d,0xff67c56b, + 0xff62c466,0xff5ec463,0xff58c15d,0xff51bf57,0xff4dbd50,0xff45bc4a,0xff42b948,0xffc6c6c6,0xffd7d7d7,0xffe5e5e5,0xffeeeeee,0xfff2f2f2,0xffcfcfcf,0xffa0a0a0, + 0xff8d8d8d,0xff828282,0xff828282,0xff7d7d7d,0xff717171,0xff707070,0xff747474,0xff000000,0x80000500,0x60000500,0x12000000,0x27000000,0xff74cb77,0xff6fc673, + 0xff6ac16d,0xff64bc68,0xff61ba65,0xff5db860,0xff59b95d,0xff53b757,0xff4db552,0xff48b24c,0xff41b047,0xff3ead43,0xff3ead42,0xffa7a7a7,0xffc4c4c4,0xffdbdbdb, + 0xffececec,0xffd9d9d9,0xffababab,0xff9a9a9a,0xffa4a4a4,0xffc0c0c0,0xffcecece,0xffcfcfcf,0xffc4c4c4,0xff919191,0xff6e6e6e,0xff000000,0x87000500,0x66000500, + 0x17000000,0x31000000,0xff6fc673,0xffffffff,0xffffffff,0xffffffff,0xfff4f9f5,0xffa5d1a7,0xff4ca74f,0xffffffff,0xffffffff,0xffffffff,0xfff3f9f3,0xff9acb9c, + 0xff399e3d,0xff8d8d8d,0xffb1b1b1,0xffd3d3d3,0xffdddddd,0xffbdbdbd,0xffa8a8a8,0xffb5b5b5,0xffe6e6e6,0xfff3f3f3,0xfff7f7f7,0xfff3f3f3,0xffd1d1d1,0xffe7e7e7, + 0xff9f9f9f,0xff000000,0x8b000500,0x6a000500,0x1b000000,0x3c000000,0xff69bf6c,0xffffffff,0xffe0eee1,0xff7fb582,0xffc6ddc7,0xffffffff,0xff78b07a,0xffffffff, + 0xffdceadd,0xff6fa972,0xffc0d9c1,0xffffffff,0xff70ad73,0xff767676,0xffa2a2a2,0xffc8c8c8,0xffcacaca,0xffb3b3b3,0xffb1b1b1,0xffe3e3e3,0xfffafafa,0xfff8f8f8, + 0xfff7f7f7,0xffafafaf,0xff7a7a7a,0xffb6b6b6,0xffe1e1e1,0xff000000,0x8e000500,0x6d000500,0x1d000000,0x43000000,0xff62ba66,0xffffffff,0xffd1e3d2,0xff418943, + 0xff77a778,0xffffffff,0xff99bd9a,0xffffffff,0xffcbddcc,0xff2a772e,0xff6b9f6d,0xffffffff,0xff96bc98,0xff666666,0xff979797,0xffbfbfbf,0xffbfbfbf,0xffb2b2b2, + 0xffc5c5c5,0xfff5f5f5,0xfffbfbfb,0xfffafafa,0xffb6b6b6,0xff7c7c7c,0xff777777,0xff9b9b9b,0xffefefef,0xff000000,0x8f000500,0x6e000500,0x1f000000,0x45000000, + 0xff5eb661,0xffffffff,0xffd1e2d1,0xff3b803d,0xff9abc9a,0xffffffff,0xff88af8a,0xffffffff,0xffcbdacb,0xff276c29,0xff93b495,0xffffffff,0xff88b089,0xff606060, + 0xff919191,0xffbcbcbc,0xffb8b8b8,0xffb2b2b2,0xffcecece,0xfffdfdfd,0xfffcfcfc,0xffbababa,0xff828282,0xff7a7a7a,0xff808080,0xffe4e4e4,0xffffffff,0xff000000, + 0x90000500,0x6e000500,0x1f000000,0x46000000,0xff58b35d,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffdbe7dc,0xff397e3d,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffdae5db,0xff3b803e,0xff616161,0xff929292,0xffbdbdbd,0xffbbbbbb,0xffaeaeae,0xffc6c6c6,0xfff9f9f9,0xffbcbcbc,0xff868686,0xff7e7e7e,0xff777777, + 0xff747474,0xffa4a4a4,0xfff4f4f4,0xff000000,0x90000500,0x6f000500,0x1f000000,0x46000000,0xff53b257,0xffffffff,0xffdde9dd,0xff70a473,0xff5d9a5f,0xff2d7d30, + 0xff2b7a2f,0xffffffff,0xffdae4da,0xff68936a,0xff578c5a,0xff29722b,0xff2b7a2f,0xff656565,0xff969696,0xffc2c2c2,0xffc5c5c5,0xffa8a8a8,0xffadadad,0xffeaeaea, + 0xffb9b9b9,0xff7e7e7e,0xff9b9b9b,0xff9a9a9a,0xff696969,0xff676767,0xff939393,0xff000000,0x90000500,0x6f000500,0x1f000000,0x46000000,0xff4eaf51,0xffffffff, + 0xffcee1ce,0xff2f8334,0xff308734,0xff2f8634,0xff2f8433,0xffffffff,0xffcbdbcb,0xff286f2a,0xff29732b,0xff2b7a2f,0xff2f8233,0xff6b6b6b,0xff9b9b9b,0xffc5c5c5, + 0xffd3d3d3,0xffa8a8a8,0xff949494,0xffb5b5b5,0xfff0f0f0,0xffc5c5c5,0xffebebeb,0xfffcfcfc,0xff9e9e9e,0xff686868,0xff686868,0xff000000,0x90000500,0x6f000500, + 0x1d000000,0x43000000,0xff49b04e,0xffffffff,0xffcde2ce,0xff318834,0xff338d37,0xff348e37,0xff318c36,0xffffffff,0xffcbdccc,0xff29752d,0xff2b7a2f,0xff2e7f31, + 0xff318834,0xff757575,0xffa4a4a4,0xffc7c7c7,0xffe3e3e3,0xffc5c5c5,0xff8d8d8d,0xff818181,0xffa5a5a5,0xffdddddd,0xffe8e8e8,0xffeaeaea,0xffcbcbcb,0xff707070, + 0xff696969,0xff000000,0x90000500,0x6f000500,0x1b000000,0x3e000000,0xff45b148,0xffffffff,0xffcde3ce,0xff348f37,0xff359439,0xff359539,0xff349138,0xffffffff, + 0xffcbddcc,0xff2d7b30,0xff2e8031,0xff308734,0xff338d37,0xff858585,0xffadadad,0xffcbcbcb,0xffe4e4e4,0xffeeeeee,0xffb7b7b7,0xff7d7d7d,0xff767676,0xff797979, + 0xff868686,0xff868686,0xff7c7c7c,0xff6d6d6d,0xff6d6d6d,0xff000000,0x90000500,0x6f000500,0x17000000,0x34000000,0xff3fb245,0xff3ba43f,0xff36993b,0xff369639, + 0xff369a3c,0xff36993b,0xff359539,0xff338e37,0xff2f8433,0xff2f8331,0xff308634,0xff318a35,0xff338e37,0xff979797,0xffb8b8b8,0xffd2d2d2,0xffe3e3e3,0xfff3f3f3, + 0xfff5f5f5,0xffc7c7c7,0xff969696,0xff727272,0xff727272,0xff727272,0xff727272,0xff939393,0xffbebebe,0xff000000,0x90000500,0x6e000500,0x12000000,0x28000000, + 0x47000000,0x6b000000,0x87000000,0x9a000000,0xa7000000,0xb2000000,0xbc000000,0xff000000,0xff6d6d6d,0xff6e6e6e,0xff767676,0xff848484,0xff969696,0xffadadad, + 0xffc6c6c6,0xffd9d9d9,0xffe8e8e8,0xffefefef,0xfff7f7f7,0xfff9f9f9,0xffebebeb,0xffd7d7d7,0xffc9c9c9,0xffc9c9c9,0xffd6d6d6,0xffeaeaea,0xfffafafa,0xff000000, + 0x8e000500,0x6d000500,0xc000000,0x1a000000,0x2f000000,0x47000000,0x5b000000,0x6c000000,0x79000000,0x87000000,0x97000000,0xff000000,0xffa0a0a0,0xffa0a0a0, + 0xffa5a5a5,0xffafafaf,0xffbababa,0xffc7c7c7,0xffd7d7d7,0xffe4e4e4,0xffededed,0xfff2f2f2,0xfff4f4f4,0xfff5f5f5,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8, + 0xfff8f8f8,0xfff7f7f7,0xfff4f4f4,0xff000000,0x8c000500,0x6b000500,0x7000000,0x10000000,0x1b000000,0x2a000000,0x37000000,0x45000000,0x53000000,0x63000000, + 0x76000000,0xff000000,0xffc9c9c9,0xffc9c9c9,0xffcbcbcb,0xffd1d1d1,0xffd5d5d5,0xffdcdcdc,0xffe6e6e6,0xffececec,0xfff2f2f2,0xfff5f5f5,0xfff6f6f6,0xfff6f6f6, + 0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xff000000,0x87000500,0x68000500,0x4000000,0x7000000,0xd000000,0x14000000, + 0x1c000000,0x28000000,0x35000000,0x47000000,0x5c000600,0xff000000,0xffe5e5e5,0xffe5e5e5,0xffe7e7e7,0xffe8e8e8,0xffe8e8e8,0xffececec,0xfff1f1f1,0xfff3f3f3, + 0xfff5f5f5,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xff000000,0x7f000500,0x61000500, + 0x1000000,0x2000000,0x4000000,0x8000000,0xe000000,0x16000000,0x21000000,0x31000000,0x47000000,0xff000000,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8, + 0xfff8f8f8,0xfffafafa,0xfffcfcfc,0xfffdfdfd,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xff000000,0x73000500,0x58000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xb000500,0x15000500,0x24000500,0x36000500,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, - 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x63000200,0x4c000200,0xffffff,0xffffff,0xffffff,0x1000200,0x4000200,0x9000200, - 0x11000200,0x1d000200,0x2c000200,0x3e000200,0x51000200,0x63000200,0x73000200,0x7f000200,0x87000200,0x8c000200,0x8e000200,0x90000200,0x90000200,0x90000200, - 0x90000200,0x90000200,0x90000200,0x90000200,0x8e000200,0x8c000200,0x87000200,0x7f000200,0x73000200,0x63000200,0x51000200,0x3e000200,0xffffff,0xffffff, - 0xffffff,0x1000200,0x3000200,0x7000200,0xd000200,0x16000200,0x22000200,0x30000200,0x3e000200,0x4c000200,0x58000200,0x61000200,0x68000200,0x6b000200, - 0x6d000200,0x6e000200,0x6f000200,0x6f000200,0x6f000200,0x6f000200,0x6f000200,0x6e000200,0x6d000200,0x6b000200,0x68000200,0x61000200,0x58000200,0x4c000200, - 0x3e000200,0x30000200 + 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x63000500,0x4c000500,0xffffff,0xffffff,0xffffff,0x1000500,0x4000500,0x9000500, + 0x11000500,0x1d000500,0x2c000500,0x3e000500,0x51000500,0x63000500,0x73000500,0x7f000500,0x87000500,0x8c000500,0x8e000500,0x90000500,0x90000500,0x90000500, + 0x90000500,0x90000500,0x90000500,0x90000500,0x8e000500,0x8c000500,0x87000500,0x7f000500,0x73000500,0x63000500,0x51000500,0x3e000500,0xffffff,0xffffff, + 0xffffff,0x1000500,0x3000500,0x7000500,0xd000500,0x16000500,0x22000500,0x30000500,0x3e000500,0x4c000500,0x58000500,0x61000500,0x68000500,0x6b000500, + 0x6d000500,0x6e000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6e000500,0x6d000500,0x6b000500,0x68000500,0x61000500,0x58000500,0x4c000500, + 0x3e000500,0x30000500 }; static const QRgb DocumentTypeWord_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000200,0x2000200,0x5000200,0x9000200,0x10000200,0x18000200,0x22000200, - 0x2c000200,0x36000200,0x3f000200,0x45000200,0x4a000200,0x4d000200,0x4e000200,0x4e000200,0x4e000200,0x4c000200,0x49000200,0x45000200,0x3f000200,0x37000200, - 0x2e000200,0x25000200,0x1c000200,0x13000200,0xd000200,0x8000200,0x4000200,0x2000200,0xffffff,0xffffff,0xffffff,0x1000200,0x3000200,0x7000200, - 0xd000200,0x16000200,0x22000200,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, - 0xff000000,0xff000000,0xfd282828,0x72434543,0x44000200,0x37000200,0x2b000200,0x1f000200,0x15000200,0xd000200,0x8000200,0x4000200,0xffffff,0xffffff, - 0xffffff,0x1000200,0x4000200,0x9000200,0x11000200,0x1d000200,0x2c000200,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe, - 0xfffefefe,0xfffcfcfc,0xfff9f9f9,0xfff3f3f3,0xffe9e9e9,0xffdedede,0xffc8c8c8,0xfd272727,0x76303230,0x4e000200,0x3d000200,0x2e000200,0x21000200,0x16000200, - 0xe000200,0x8000200,0xffffff,0xffffff,0xffffff,0x2000200,0x5000200,0xb000200,0x15000200,0x24000200,0x36000200,0xff000000,0xffffffff,0xffffffff, - 0xffffffff,0xffffffff,0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffcfcfc,0xfff6f6f6,0xffededed,0xffdedede,0xffcccccc,0xfffefefe,0xffb3b3b3,0xfd292929,0x802e302e, - 0x53000200,0x40000200,0x2f000200,0x21000200,0x16000200,0xd000200,0xffffff,0xffffff,0xffffff,0x2000200,0x6000200,0xd000200,0x18000200,0x29000200, - 0x3f000200,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffcfcfc,0xfffafafa,0xfff4f4f4,0xffe9e9e9,0xffd4d4d4,0xffbcbcbc, - 0xffffffff,0xfffcfcfc,0xffa1a1a1,0xfd2b2b2b,0x7e262826,0x55000200,0x41000200,0x2f000200,0x20000200,0x15000200,0xffffff,0xffffff,0x1000200,0x2000200, - 0x6000200,0xe000200,0x1b000200,0x2d000200,0x45000200,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffdfdfd,0xfffbfbfb,0xfff9f9f9, - 0xfff2f2f2,0xffe4e4e4,0xffcdcdcd,0xffaeaeae,0xffffffff,0xffffffff,0xfffcfcfc,0xff949494,0xfd2e2e2e,0x7a1d1f1d,0x55000200,0x40000200,0x2d000200,0x1e000200, - 0xffffff,0xffffff,0x1000200,0x2000200,0x7000200,0xf000200,0x1d000200,0x30000200,0x4a000200,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff, - 0xfffdfdfd,0xfffcfcfc,0xfffbfbfb,0xfff7f7f7,0xfff0f0f0,0xffe2e2e2,0xffc8c8c8,0xffa7a7a7,0xffffffff,0xffffffff,0xffffffff,0xfff9f9f9,0xff8e8e8e,0xfd343434, - 0x781e1e1e,0x52000200,0x3c000200,0x29000200,0xffffff,0xffffff,0x1000200,0x3000200,0x7000200,0x10000200,0x1e000200,0x32000200,0x4d000200,0xff000000, - 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffcfcfc,0xfffbfbfb,0xfffafafa,0xfff7f7f7,0xfff0f0f0,0xffe1e1e1,0xffc8c8c8,0xffa6a6a6,0xffffffff,0xffffffff, - 0xffffffff,0xffffffff,0xfff8f8f8,0xff8f8f8f,0xfc3b3b3b,0x70141714,0x4c000200,0x36000200,0x1000000,0x2000000,0x5000000,0x9000000,0xf000000,0x18000000, - 0x27000000,0x3b000000,0x55000300,0xff000000,0xfff5f5f5,0xfff5f5f5,0xfff5f5f5,0xfff6f6f6,0xfff4f4f4,0xfff5f5f5,0xfff5f5f5,0xfff4f4f4,0xffefefef,0xffe4e4e4, - 0xffcccccc,0xffadadad,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff929292,0xfb434343,0x5c000200,0x42000200,0x4000000,0x7000000, - 0xd000000,0x15000000,0x1d000000,0x29000000,0x38000000,0x4c000000,0x64000000,0xff000000,0xffe0e0e0,0xffe0e0e0,0xffe2e2e2,0xffe4e4e4,0xffe4e4e4,0xffe8e8e8, - 0xffececec,0xfff0f0f0,0xffededed,0xffe6e6e6,0xffd7d7d7,0xffbfbfbf,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff2e2e2e, - 0x6a000200,0x4e000200,0x7000000,0xf000000,0x19000000,0x28000000,0x34000000,0x43000000,0x52000000,0x64000000,0x79000200,0xff000000,0xffc2c2c2,0xffc2c2c2, - 0xffc4c4c4,0xffc9c9c9,0xffcecece,0xffd6d6d6,0xffe2e2e2,0xffe8e8e8,0xffececec,0xffececec,0xffe2e2e2,0xffbbbbbb,0xff909090,0xff6e6e6e,0xff5d5d5d,0xff595959, - 0xff5f5f5f,0xff7b7b7b,0xffa8a8a8,0xff000000,0x76000200,0x58000200,0xc000000,0x18000000,0xff5356f1,0xff5153f1,0xff4d4ff0,0xff494cef,0xff4547ef,0xff4144ef, - 0xff3d3fef,0xff383aee,0xff3235ee,0xff2b2eed,0xff2528ed,0xff1d20eb,0xff191ce6,0xffbdbdbd,0xffd0d0d0,0xffe0e0e0,0xffebebeb,0xffefefef,0xffc6c6c6,0xff919191, - 0xff7c7c7c,0xff717171,0xff717171,0xff6c6c6c,0xff5f5f5f,0xff5e5e5e,0xff626262,0xff000000,0x80000200,0x60000200,0x12000000,0x26000000,0xff5052ee,0xff4c4eeb, - 0xff474ae9,0xff4345e7,0xff3f42e7,0xff3b3de8,0xff3638e7,0xff2e31e7,0xff292ce6,0xff2426e6,0xff1d20e4,0xff181bde,0xff171ad7,0xff9b9b9b,0xffbababa,0xffd4d4d4, - 0xffe8e8e8,0xffd2d2d2,0xff9d9d9d,0xff8b8b8b,0xff959595,0xffb5b5b5,0xffc5c5c5,0xffc6c6c6,0xffbababa,0xff818181,0xff5c5c5c,0xff000000,0x87000200,0x66000200, - 0x17000000,0x30000000,0xff4c4eeb,0xff9b9df1,0xff9899ed,0xff5454de,0xff3739d7,0xff4c4ddd,0xff8c8eea,0xff4244dc,0xff2124d7,0xff383adb,0xff8183e5,0xff8183e3, - 0xff1618c7,0xff818181,0xffa7a7a7,0xffcccccc,0xffd8d8d8,0xffb1b1b1,0xff9a9a9a,0xffa8a8a8,0xffe1e1e1,0xfff1f1f1,0xfff5f5f5,0xfff0f0f0,0xffc9c9c9,0xffe2e2e2, - 0xff909090,0xff000000,0x8b000200,0x6a000200,0x1b000000,0x38000000,0xff474ae8,0xffa7a8ee,0xffffffff,0xff9091e0,0xff2b2dc1,0xff8a8bdd,0xffffffff,0xff8586dc, - 0xff181abd,0xff8081da,0xffffffff,0xff9293dc,0xff1416b5,0xff6a6a6a,0xff9a9a9a,0xffc3c3c3,0xffc1c1c1,0xffa6a6a6,0xffa4a4a4,0xffdedede,0xfff9f9f9,0xfff6f6f6, - 0xfff5f5f5,0xffa2a2a2,0xff686868,0xffa9a9a9,0xffdbdbdb,0xff000000,0x8e000200,0x6d000200,0x1d000000,0x3d000000,0xff4144e5,0xff5354db,0xffffffff,0xffe3e3f5, - 0xff2224a8,0xffe2e2f3,0xffffffff,0xffe1e1f3,0xff11139d,0xffe0e0f2,0xffffffff,0xff2f31ab,0xff1214a6,0xff5d5d5d,0xff919191,0xffbcbcbc,0xffb5b5b5,0xffa5a5a5, - 0xffbbbbbb,0xfff3f3f3,0xfffafafa,0xfff9f9f9,0xffaaaaaa,0xff6b6b6b,0xff656565,0xff8c8c8c,0xffececec,0xff000000,0x8f000200,0x6e000200,0x1f000000,0x3f000000, - 0xff3e40e6,0xff3436d3,0xffb8b9ea,0xffffffff,0xff8384c6,0xffffffff,0xffffffff,0xffffffff,0xff7d7eba,0xffffffff,0xffafafd7,0xff0f118e,0xff12139e,0xff585858, - 0xff8e8e8e,0xffbababa,0xffaeaeae,0xffa5a5a5,0xffc5c5c5,0xfffcfcfc,0xfffbfbfb,0xffaeaeae,0xff717171,0xff696969,0xff6f6f6f,0xffdfdfdf,0xffffffff,0xff000000, - 0x90000200,0x6e000200,0x1f000000,0x3e000000,0xff393ce7,0xff2f32d7,0xff6161d2,0xffffffff,0xffffffff,0xffffffff,0xff4e4f9b,0xffffffff,0xffffffff,0xffffffff, - 0xff4e4f9d,0xff0f1089,0xff11129a,0xff595959,0xff8f8f8f,0xffbbbbbb,0xffb1b1b1,0xffa1a1a1,0xffbcbcbc,0xfff8f8f8,0xffb0b0b0,0xff757575,0xff6d6d6d,0xff656565, - 0xff626262,0xff959595,0xfff2f2f2,0xff000000,0x90000200,0x6f000200,0x1f000000,0x3e000000,0xff3437ea,0xff2c2edd,0xff2124c7,0xffd3d3ef,0xffffffff,0xff9f9fcc, - 0xff0d0f76,0xff9e9fc7,0xffffffff,0xffe0e0ed,0xff0d0f7b,0xff0f118a,0xff11139b,0xff5c5c5c,0xff919191,0xffbdbdbd,0xffbcbcbc,0xff9a9a9a,0xff9f9f9f,0xffe6e6e6, - 0xffadadad,0xff6d6d6d,0xff8c8c8c,0xff8b8b8b,0xff575757,0xff555555,0xff838383,0xff000000,0x90000200,0x6f000200,0x1f000000,0x3d000000,0xff2e30ed,0xff2629e3, - 0xff1e21d2,0xff7273d5,0xffffffff,0xff5051ad,0xff0e1084,0xff4e50a2,0xffffffff,0xff6d6eb0,0xff0e1084,0xff0f1291,0xff11139f,0xff5f5f5f,0xff949494,0xffbfbfbf, - 0xffcccccc,0xff9a9a9a,0xff848484,0xffa8a8a8,0xffededed,0xffbbbbbb,0xffe7e7e7,0xfffbfbfb,0xff8f8f8f,0xff565656,0xff565656,0xff000000,0x90000200,0x6f000200, - 0x1d000000,0x3b000000,0xff272aee,0xff1f22e7,0xff181bd9,0xff1518c4,0xff5253c4,0xff12139f,0xff111398,0xff101292,0xff5050ad,0xff1e2194,0xff0f1291,0xff111399, - 0xff1113a1,0xff666666,0xff989898,0xffbfbfbf,0xffdedede,0xffbbbbbb,0xff7c7c7c,0xff707070,0xff979797,0xffd6d6d6,0xffe3e3e3,0xffe6e6e6,0xffc2c2c2,0xff5e5e5e, - 0xff575757,0xff000000,0x90000200,0x6f000200,0x1b000000,0x36000000,0xff2023ee,0xff1a1dea,0xff181bdc,0xff1619cc,0xff1517bd,0xff1316b1,0xff1215aa,0xff1214a6, - 0xff1213a1,0xff11139e,0xff11139e,0xff1114a2,0xff1214a6,0xff747474,0xffa0a0a0,0xffc2c2c2,0xffdfdfdf,0xffebebeb,0xffababab,0xff6c6c6c,0xff646464,0xff676767, - 0xff757575,0xff757575,0xff6b6b6b,0xff5b5b5b,0xff5b5b5b,0xff000000,0x90000200,0x6f000200,0x17000000,0x2e000000,0xff1a1deb,0xff191ce2,0xff181ad8,0xff1619cf, - 0xff1618c3,0xff1417bc,0xff1316b5,0xff1315b0,0xff1315ab,0xff1314a8,0xff1214a5,0xff1214a6,0xff1315a7,0xff878787,0xffacacac,0xffcacaca,0xffdedede,0xfff0f0f0, - 0xfff3f3f3,0xffbdbdbd,0xff868686,0xff606060,0xff606060,0xff606060,0xff606060,0xff838383,0xffb3b3b3,0xff000000,0x90000200,0x6e000200,0x12000000,0x25000000, - 0x3e000000,0x5e000000,0x79000000,0x91000000,0xa2000000,0xaf000000,0xba000000,0xff000000,0xff636363,0xff636363,0xff6a6a6a,0xff767676,0xff878787,0xff9e9e9e, - 0xffbcbcbc,0xffd2d2d2,0xffe4e4e4,0xffececec,0xfff5f5f5,0xfff8f8f8,0xffe7e7e7,0xffcfcfcf,0xffbfbfbf,0xffbfbfbf,0xffcecece,0xffe6e6e6,0xfff9f9f9,0xff000000, - 0x8e000200,0x6d000200,0xc000000,0x18000000,0x2a000000,0x3f000000,0x52000000,0x65000000,0x75000000,0x84000000,0x94000000,0xff000000,0xff989898,0xff989898, - 0xff9c9c9c,0xffa4a4a4,0xffafafaf,0xffbdbdbd,0xffd0d0d0,0xffdfdfdf,0xffe9e9e9,0xffefefef,0xfff2f2f2,0xfff3f3f3,0xfff6f6f6,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, - 0xfff7f7f7,0xfff5f5f5,0xfff2f2f2,0xff000000,0x8c000200,0x6b000200,0x7000000,0xf000000,0x19000000,0x27000000,0x34000000,0x42000000,0x51000000,0x62000000, - 0x75000000,0xff000000,0xffc2c2c2,0xffc2c2c2,0xffc4c4c4,0xffc9c9c9,0xffcecece,0xffd5d5d5,0xffe1e1e1,0xffe8e8e8,0xffefefef,0xfff3f3f3,0xfff4f4f4,0xfff4f4f4, - 0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xff000000,0x87000200,0x68000200,0x4000000,0x7000000,0xd000000,0x14000000, - 0x1c000000,0x28000000,0x35000000,0x47000000,0x5c000300,0xff000000,0xffe0e0e0,0xffe0e0e0,0xffe2e2e2,0xffe4e4e4,0xffe4e4e4,0xffe8e8e8,0xffeeeeee,0xfff1f1f1, - 0xfff3f3f3,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xff000000,0x7f000200,0x61000200, - 0x1000000,0x2000000,0x4000000,0x8000000,0xe000000,0x16000000,0x21000000,0x31000000,0x47000000,0xff000000,0xfff5f5f5,0xfff5f5f5,0xfff5f5f5,0xfff6f6f6, - 0xfff7f7f7,0xfff9f9f9,0xfffbfbfb,0xfffdfdfd,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, - 0xffffffff,0xff000000,0x73000200,0x58000200,0xffffff,0xffffff,0xffffff,0x2000200,0x5000200,0xb000200,0x15000200,0x24000200,0x36000200,0xff000000, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000500,0x2000500,0x5000500,0x9000500,0x10000500,0x18000500,0x22000500, + 0x2c000500,0x36000500,0x3f000500,0x45000500,0x4a000500,0x4d000500,0x4e000500,0x4e000500,0x4e000500,0x4c000500,0x49000500,0x45000500,0x3f000500,0x37000500, + 0x2e000500,0x25000500,0x1c000500,0x13000500,0xd000500,0x8000500,0x4000500,0x2000500,0xffffff,0xffffff,0xffffff,0x1000500,0x3000500,0x7000500, + 0xd000500,0x16000500,0x22000500,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, + 0xff000000,0xff000000,0xfd373737,0x72545754,0x44000500,0x37000500,0x2b000500,0x1f000500,0x15000500,0xd000500,0x8000500,0x4000500,0xffffff,0xffffff, + 0xffffff,0x1000500,0x4000500,0x9000500,0x11000500,0x1d000500,0x2c000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe, + 0xfffefefe,0xfffdfdfd,0xfffafafa,0xfff5f5f5,0xffededed,0xffe3e3e3,0xffd1d1d1,0xfd363636,0x76404240,0x4e000500,0x3d000500,0x2e000500,0x21000500,0x16000500, + 0xe000500,0x8000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xb000500,0x15000500,0x24000500,0x36000500,0xff000000,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffdfdfd,0xfff8f8f8,0xfff0f0f0,0xffe3e3e3,0xffd4d4d4,0xfffefefe,0xffbebebe,0xfd383838,0x803e403e, + 0x53000500,0x40000500,0x2f000500,0x21000500,0x16000500,0xd000500,0xffffff,0xffffff,0xffffff,0x2000500,0x6000500,0xd000500,0x18000500,0x29000500, + 0x3f000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffdfdfd,0xfffbfbfb,0xfff6f6f6,0xffededed,0xffdbdbdb,0xffc6c6c6, + 0xffffffff,0xfffdfdfd,0xffaeaeae,0xfd3b3b3b,0x7e353735,0x55000500,0x41000500,0x2f000500,0x20000500,0x15000500,0xffffff,0xffffff,0x1000500,0x2000500, + 0x6000500,0xe000500,0x1b000500,0x2d000500,0x45000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfffafafa, + 0xfff4f4f4,0xffe8e8e8,0xffd5d5d5,0xffbababa,0xffffffff,0xffffffff,0xfffdfdfd,0xffa3a3a3,0xfd3e3e3e,0x7a2a2d2a,0x55000500,0x40000500,0x2d000500,0x1e000500, + 0xffffff,0xffffff,0x1000500,0x2000500,0x7000500,0xf000500,0x1d000500,0x30000500,0x4a000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfff8f8f8,0xfff3f3f3,0xffe7e7e7,0xffd1d1d1,0xffb4b4b4,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff9d9d9d,0xfd454545, + 0x782b2b2b,0x52000500,0x3c000500,0x29000500,0xffffff,0xffffff,0x1000500,0x3000500,0x7000500,0x10000500,0x1e000500,0x32000500,0x4d000500,0xff000000, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffcfcfc,0xfffbfbfb,0xfff8f8f8,0xfff3f3f3,0xffe6e6e6,0xffd1d1d1,0xffb3b3b3,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xfff9f9f9,0xff9e9e9e,0xfc4c4c4c,0x701f231f,0x4c000500,0x36000500,0x1000000,0x2000000,0x5000000,0x9000000,0xf000000,0x18000000, + 0x27000000,0x3b000000,0x55000600,0xff000000,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8,0xfff6f6f6,0xfff7f7f7,0xfff7f7f7,0xfff6f6f6,0xfff2f2f2,0xffe8e8e8, + 0xffd4d4d4,0xffb9b9b9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xffa1a1a1,0xfb545454,0x5c000500,0x42000500,0x4000000,0x7000000, + 0xd000000,0x15000000,0x1d000000,0x29000000,0x38000000,0x4c000000,0x64000000,0xff000000,0xffe5e5e5,0xffe5e5e5,0xffe7e7e7,0xffe8e8e8,0xffe8e8e8,0xffececec, + 0xffefefef,0xfff3f3f3,0xfff0f0f0,0xffeaeaea,0xffdddddd,0xffc9c9c9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xff3e3e3e, + 0x6a000500,0x4e000500,0x7000000,0xf000000,0x19000000,0x28000000,0x34000000,0x43000000,0x52000000,0x64000000,0x79000500,0xff000000,0xffcbcbcb,0xffcbcbcb, + 0xffcdcdcd,0xffd1d1d1,0xffd6d6d6,0xffdddddd,0xffe7e7e7,0xffececec,0xffefefef,0xffefefef,0xffe7e7e7,0xffc5c5c5,0xff9f9f9f,0xff7f7f7f,0xff6f6f6f,0xff6b6b6b, + 0xff717171,0xff8c8c8c,0xffb5b5b5,0xff000000,0x76000500,0x58000500,0xc000000,0x18000000,0xff6568f3,0xff6365f3,0xff5f61f3,0xff5b5ef2,0xff5759f2,0xff5256f2, + 0xff4e50f2,0xff494bf1,0xff4246f1,0xff3b3ef0,0xff3437f0,0xff2a2eee,0xff2529ea,0xffc7c7c7,0xffd7d7d7,0xffe5e5e5,0xffeeeeee,0xfff2f2f2,0xffcfcfcf,0xffa0a0a0, + 0xff8d8d8d,0xff828282,0xff828282,0xff7d7d7d,0xff717171,0xff707070,0xff747474,0xff000000,0x80000500,0x60000500,0x12000000,0x26000000,0xff6264f1,0xff5e60ee, + 0xff595ced,0xff5457eb,0xff5053eb,0xff4c4eec,0xff4749eb,0xff3e41eb,0xff383cea,0xff3335ea,0xff2a2ee8,0xff2428e3,0xff2327dd,0xffa9a9a9,0xffc4c4c4,0xffdbdbdb, + 0xffececec,0xffd9d9d9,0xffababab,0xff9a9a9a,0xffa4a4a4,0xffc0c0c0,0xffcecece,0xffcfcfcf,0xffc4c4c4,0xff919191,0xff6e6e6e,0xff000000,0x87000500,0x66000500, + 0x17000000,0x30000000,0xff5e60ee,0xffa9abf3,0xffa6a7f0,0xff6666e3,0xff484add,0xff5e5fe3,0xff9b9dee,0xff5356e2,0xff2f33dd,0xff494be1,0xff9193e9,0xff9193e8, + 0xff2224d0,0xff919191,0xffb4b4b4,0xffd4d4d4,0xffdedede,0xffbdbdbd,0xffa8a8a8,0xffb5b5b5,0xffe6e6e6,0xfff3f3f3,0xfff7f7f7,0xfff3f3f3,0xffd1d1d1,0xffe7e7e7, + 0xff9f9f9f,0xff000000,0x8b000500,0x6a000500,0x1b000000,0x38000000,0xff595cec,0xffb4b5f1,0xffffffff,0xff9fa0e5,0xff3b3dcb,0xff9a9ae3,0xffffffff,0xff9596e2, + 0xff2427c7,0xff9091e0,0xffffffff,0xffa1a2e2,0xff1f22c0,0xff7b7b7b,0xffa8a8a8,0xffcccccc,0xffcbcbcb,0xffb3b3b3,0xffb1b1b1,0xffe3e3e3,0xfffafafa,0xfff8f8f8, + 0xfff7f7f7,0xffafafaf,0xff7a7a7a,0xffb6b6b6,0xffe1e1e1,0xff000000,0x8e000500,0x6d000500,0x1d000000,0x3d000000,0xff5256e9,0xff6566e1,0xffffffff,0xffe8e8f7, + 0xff3033b5,0xffe7e7f5,0xffffffff,0xffe6e6f5,0xff1b1eab,0xffe5e5f4,0xffffffff,0xff3f41b7,0xff1d1fb3,0xff6f6f6f,0xffa0a0a0,0xffc6c6c6,0xffc0c0c0,0xffb2b2b2, + 0xffc5c5c5,0xfff5f5f5,0xfffbfbfb,0xfffafafa,0xffb6b6b6,0xff7c7c7c,0xff777777,0xff9b9b9b,0xffefefef,0xff000000,0x8f000500,0x6e000500,0x1f000000,0x3f000000, + 0xff4f51ea,0xff4547da,0xffc3c4ee,0xffffffff,0xff9394cf,0xffffffff,0xffffffff,0xffffffff,0xff8d8ec4,0xffffffff,0xffbbbbdd,0xff191b9d,0xff1d1eac,0xff6a6a6a, + 0xff9d9d9d,0xffc4c4c4,0xffbababa,0xffb2b2b2,0xffcecece,0xfffdfdfd,0xfffcfcfc,0xffbababa,0xff828282,0xff7a7a7a,0xff808080,0xffe4e4e4,0xffffffff,0xff000000, + 0x90000500,0x6e000500,0x1f000000,0x3e000000,0xff4a4deb,0xff3f42dd,0xff7373d9,0xffffffff,0xffffffff,0xffffffff,0xff6061a9,0xffffffff,0xffffffff,0xffffffff, + 0xff6061ab,0xff191a99,0xff1b1da8,0xff6b6b6b,0xff9e9e9e,0xffc5c5c5,0xffbdbdbd,0xffaeaeae,0xffc6c6c6,0xfff9f9f9,0xffbcbcbc,0xff868686,0xff7e7e7e,0xff777777, + 0xff747474,0xffa4a4a4,0xfff4f4f4,0xff000000,0x90000500,0x6f000500,0x1f000000,0x3e000000,0xff4548ee,0xff3c3ee3,0xff2f33d0,0xffdadaf2,0xffffffff,0xffadadd4, + 0xff161987,0xffacadd0,0xffffffff,0xffe5e5f0,0xff16198c,0xff191b9a,0xff1b1ea9,0xff6e6e6e,0xffa0a0a0,0xffc7c7c7,0xffc6c6c6,0xffa8a8a8,0xffadadad,0xffeaeaea, + 0xffb9b9b9,0xff7e7e7e,0xff9b9b9b,0xff9a9a9a,0xff696969,0xff676767,0xff939393,0xff000000,0x90000500,0x6f000500,0x1f000000,0x3d000000,0xff3e40f0,0xff3538e8, + 0xff2b2fd9,0xff8384dc,0xffffffff,0xff6263b9,0xff171a94,0xff6062af,0xffffffff,0xff7e7fbc,0xff171a94,0xff191da0,0xff1b1ead,0xff717171,0xffa3a3a3,0xffc9c9c9, + 0xffd4d4d4,0xffa8a8a8,0xff949494,0xffb5b5b5,0xfff0f0f0,0xffc5c5c5,0xffebebeb,0xfffcfcfc,0xff9e9e9e,0xff686868,0xff686868,0xff000000,0x90000500,0x6f000500, + 0x1d000000,0x3b000000,0xff3639f1,0xff2d30eb,0xff2428df,0xff2024cd,0xff6465cd,0xff1d1ead,0xff1b1ea6,0xff1a1da1,0xff6262b9,0xff2b2fa3,0xff191da0,0xff1b1ea7, + 0xff1b1eae,0xff787878,0xffa6a6a6,0xffc9c9c9,0xffe3e3e3,0xffc5c5c5,0xff8d8d8d,0xff818181,0xffa5a5a5,0xffdddddd,0xffe8e8e8,0xffeaeaea,0xffcbcbcb,0xff707070, + 0xff696969,0xff000000,0x90000500,0x6f000500,0x1b000000,0x36000000,0xff2e31f1,0xff272aee,0xff2428e2,0xff2225d4,0xff2023c7,0xff1e22bd,0xff1d20b6,0xff1d1fb3, + 0xff1d1eae,0xff1b1eac,0xff1b1eac,0xff1b1faf,0xff1d1fb3,0xff858585,0xffadadad,0xffcbcbcb,0xffe4e4e4,0xffeeeeee,0xffb7b7b7,0xff7d7d7d,0xff767676,0xff797979, + 0xff868686,0xff868686,0xff7c7c7c,0xff6d6d6d,0xff6d6d6d,0xff000000,0x90000500,0x6f000500,0x17000000,0x2e000000,0xff272aee,0xff2529e7,0xff2427de,0xff2225d7, + 0xff2224cc,0xff1f23c6,0xff1e22c0,0xff1e20bc,0xff1e20b7,0xff1e1fb5,0xff1d1fb2,0xff1d1fb3,0xff1e20b4,0xff979797,0xffb8b8b8,0xffd2d2d2,0xffe3e3e3,0xfff3f3f3, + 0xfff5f5f5,0xffc7c7c7,0xff969696,0xff727272,0xff727272,0xff727272,0xff727272,0xff939393,0xffbebebe,0xff000000,0x90000500,0x6e000500,0x12000000,0x25000000, + 0x3e000000,0x5e000000,0x79000000,0x91000000,0xa2000000,0xaf000000,0xba000000,0xff000000,0xff757575,0xff757575,0xff7b7b7b,0xff878787,0xff979797,0xffacacac, + 0xffc6c6c6,0xffd9d9d9,0xffe8e8e8,0xffefefef,0xfff7f7f7,0xfff9f9f9,0xffebebeb,0xffd7d7d7,0xffc9c9c9,0xffc9c9c9,0xffd6d6d6,0xffeaeaea,0xfffafafa,0xff000000, + 0x8e000500,0x6d000500,0xc000000,0x18000000,0x2a000000,0x3f000000,0x52000000,0x65000000,0x75000000,0x84000000,0x94000000,0xff000000,0xffa6a6a6,0xffa6a6a6, + 0xffaaaaaa,0xffb1b1b1,0xffbbbbbb,0xffc7c7c7,0xffd7d7d7,0xffe4e4e4,0xffededed,0xfff2f2f2,0xfff4f4f4,0xfff5f5f5,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8, + 0xfff8f8f8,0xfff7f7f7,0xfff4f4f4,0xff000000,0x8c000500,0x6b000500,0x7000000,0xf000000,0x19000000,0x27000000,0x34000000,0x42000000,0x51000000,0x62000000, + 0x75000000,0xff000000,0xffcbcbcb,0xffcbcbcb,0xffcdcdcd,0xffd1d1d1,0xffd6d6d6,0xffdcdcdc,0xffe6e6e6,0xffececec,0xfff2f2f2,0xfff5f5f5,0xfff6f6f6,0xfff6f6f6, + 0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xff000000,0x87000500,0x68000500,0x4000000,0x7000000,0xd000000,0x14000000, + 0x1c000000,0x28000000,0x35000000,0x47000000,0x5c000600,0xff000000,0xffe5e5e5,0xffe5e5e5,0xffe7e7e7,0xffe8e8e8,0xffe8e8e8,0xffececec,0xfff1f1f1,0xfff3f3f3, + 0xfff5f5f5,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xff000000,0x7f000500,0x61000500, + 0x1000000,0x2000000,0x4000000,0x8000000,0xe000000,0x16000000,0x21000000,0x31000000,0x47000000,0xff000000,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8, + 0xfff8f8f8,0xfffafafa,0xfffcfcfc,0xfffdfdfd,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xff000000,0x73000500,0x58000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xb000500,0x15000500,0x24000500,0x36000500,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, - 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x63000200,0x4c000200,0xffffff,0xffffff,0xffffff,0x1000200,0x4000200,0x9000200, - 0x11000200,0x1d000200,0x2c000200,0x3e000200,0x51000200,0x63000200,0x73000200,0x7f000200,0x87000200,0x8c000200,0x8e000200,0x90000200,0x90000200,0x90000200, - 0x90000200,0x90000200,0x90000200,0x90000200,0x8e000200,0x8c000200,0x87000200,0x7f000200,0x73000200,0x63000200,0x51000200,0x3e000200,0xffffff,0xffffff, - 0xffffff,0x1000200,0x3000200,0x7000200,0xd000200,0x16000200,0x22000200,0x30000200,0x3e000200,0x4c000200,0x58000200,0x61000200,0x68000200,0x6b000200, - 0x6d000200,0x6e000200,0x6f000200,0x6f000200,0x6f000200,0x6f000200,0x6f000200,0x6e000200,0x6d000200,0x6b000200,0x68000200,0x61000200,0x58000200,0x4c000200, - 0x3e000200,0x30000200 + 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x63000500,0x4c000500,0xffffff,0xffffff,0xffffff,0x1000500,0x4000500,0x9000500, + 0x11000500,0x1d000500,0x2c000500,0x3e000500,0x51000500,0x63000500,0x73000500,0x7f000500,0x87000500,0x8c000500,0x8e000500,0x90000500,0x90000500,0x90000500, + 0x90000500,0x90000500,0x90000500,0x90000500,0x8e000500,0x8c000500,0x87000500,0x7f000500,0x73000500,0x63000500,0x51000500,0x3e000500,0xffffff,0xffffff, + 0xffffff,0x1000500,0x3000500,0x7000500,0xd000500,0x16000500,0x22000500,0x30000500,0x3e000500,0x4c000500,0x58000500,0x61000500,0x68000500,0x6b000500, + 0x6d000500,0x6e000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6e000500,0x6d000500,0x6b000500,0x68000500,0x61000500,0x58000500,0x4c000500, + 0x3e000500,0x30000500 }; static const QRgb FileBrowser_data[] = { 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000, 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000, 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000, 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000, - 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff083115,0xff06230f,0xff06230f,0xff06290f, - 0xff06270f,0xff06240f,0xff06230f,0xff06230f,0xff0b471e,0xff0b471e,0xff0b471e,0xff0b461e,0xff0b461e,0xff0b451d,0xff0b451d,0xff0b441d,0xff0b441d,0xff0b431c, - 0xff0a421c,0xff0a421c,0xff0a421c,0xff0a411b,0xff0a411b,0xff0a401b,0xff0a3f1b,0xff0a3e1a,0xff093c19,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000, - 0xff0b431c,0xffc7c7c7,0xff999999,0xff6d6d6d,0xff6d6d6d,0xff778775,0xff768275,0xff727771,0xff6d6d6d,0xff6d6d6d,0xffd9d9d9,0xffd8d8d8,0xffd6d6d6,0xffd5d5d5, - 0xffd3d3d3,0xffd1d1d1,0xffcfcfcf,0xffcdcdcd,0xffcbcbcb,0xffc9c9c9,0xffc8c8c8,0xffc6c6c6,0xffc5c5c5,0xffc3c3c3,0xffbfbfbf,0xffb8b8b8,0xff093a18,0x5c000000, - 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff0a421c,0xffcdcdcd,0xffcecece,0xffc9c9c9,0xff9f9f9f,0xff6d6d6d,0xff6d6d6d,0xff829480,0xff839481,0xff7a8479, - 0xff6c6c6c,0xff6b6b6b,0xffd5d5d5,0xffd3d3d3,0xff696969,0xff686868,0xff666666,0xffcbcbcb,0xffc9c9c9,0xffc8c8c8,0xffc6c6c6,0xffc4c4c4,0xffc3c3c3,0xffbdbdbd, - 0xffb8b8b8,0xffb1b1b1,0xff093817,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff0a3e1a,0xffc8c7c7,0xffcccbcb,0xffcdcdcd,0xffcecece,0xffc9c9c9, - 0xffa2a2a2,0xff6d6d6d,0xff6d6d6d,0xff8da28b,0xff90a48e,0xff859384,0xff6a6a6a,0xff696969,0xff818f80,0xff808e7f,0xff6d706c,0xff656565,0xff646464,0xffc6c6c6, - 0xffc4c4c4,0xffc3c3c3,0xffbdbdbd,0xffb8b8b8,0xffb1b1b1,0xffababab,0xff083517,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff093617,0xffb8b4b4, - 0xffc2c0c0,0xffc8c7c7,0xffcccbcb,0xffcdcdcd,0xffcecece,0xffcacaca,0xffa5a5a5,0xff6c6c6c,0xff6c6c6c,0xff97ad95,0xff98ae96,0xff96ab94,0xff98af96,0xff96ad94, - 0xff94aa92,0xff829181,0xff6b6e6a,0xff626262,0xff616161,0xffbdbdbd,0xffb8b8b8,0xffb2b2b2,0xffababab,0xffa4a4a4,0xff083316,0x93000000,0x62000000,0x3b000000, - 0x1f000000,0x3d000000,0xff072c13,0xff9d9595,0xffaca6a6,0xffb8b4b4,0xffc2c0c0,0xffc8c7c7,0xffcccbcb,0xffcdcdcd,0xffcdcdcd,0xffcbcbcb,0xffa5a5a5,0xff6a6a6a, - 0xff696969,0xff9eb59c,0xff9fb69d,0xff9eb59d,0xff9db49b,0xff9ab298,0xff97ae95,0xff839282,0xff686c67,0xff5c5c5c,0xffb2b2b2,0xffadadad,0xffa6a6a6,0xff9f9f9f, - 0xff083115,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff062510,0xff877c7c,0xff918787,0xff9d9595,0xffaca6a6,0xffb8b4b4,0xffc1bfbf,0xffc8c7c7, - 0xffcbcaca,0xffcccccc,0xffcbcbcb,0xffcbcbcb,0xffa7a7a7,0xff686868,0xff676767,0xffa5bda3,0xffa5bda3,0xffa3bba1,0xffa0b89e,0xff9cb39a,0xff95ac93,0xffbcdabb, - 0xff565656,0xffa7a7a7,0xffa0a0a0,0xff999999,0xff073014,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff06230f,0xff6d6d6d,0xff7b7272,0xff877c7c, - 0xff918787,0xff9d9595,0xffaba6a6,0xffb7b3b3,0xffc0bebe,0xffc7c6c6,0xffc9c9c9,0xffcacaca,0xffc9c9c9,0xffc8c8c8,0xffa6a6a6,0xff656565,0xff636363,0xffa9c3a8, - 0xffa8c1a6,0xffa3bca1,0xff9cb59b,0xffb9d6b7,0xff535353,0xffa1a1a1,0xff9a9a9a,0xff949494,0xff072e13,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3e000000, - 0xff094319,0xff8d988c,0xff6b6b6b,0xff6b6b6b,0xff766e6e,0xff847979,0xff8e8484,0xff9a9292,0xffa9a4a4,0xffb5b1b1,0xffbfbdbd,0xffc4c3c3,0xffc7c6c6,0xffc7c7c7, - 0xffc6c6c6,0xffc5c5c5,0xffa8a8a8,0xff616161,0xff5d5d5d,0xffa7c1a6,0xffa3bda1,0xffb3cfb1,0xff515151,0xff9b9b9b,0xff969696,0xff8f8f8f,0xff072c13,0x99000000, - 0x66000000,0x3d000000,0x21000000,0x42000000,0xff0a4519,0xffb1cbb0,0xffa3baa2,0xff808a7f,0xff5f5f5f,0xff606060,0xff6b6565,0xff7b7171,0xff887f7f,0xff979090, - 0xffa7a2a2,0xffb3afaf,0xffbcbaba,0xffc1c0c0,0xffc3c3c3,0xffc3c3c3,0xffc2c2c2,0xffc0c0c0,0xffa2a2a2,0xff565656,0xffa1bba0,0xffacc7aa,0xff4d4d4d,0xff969696, - 0xff8f8f8f,0xff888888,0xff072a12,0x99000000,0x66000000,0x3d000000,0x2a000000,0x4f000000,0xff083c16,0xff8ea28d,0xff7f907d,0xff748573,0xff6e7d6d,0xff5c655c, - 0xff494949,0xff515151,0xff625c5c,0xff776d6d,0xff887e7e,0xff968e8e,0xffa59f9f,0xffafacac,0xffb8b6b6,0xffbdbcbc,0xffbebebe,0xffbbbaba,0xffb7b7b7,0xff535353, - 0xff99b298,0xffa3bca1,0xff4a4a4a,0xff8e8e8e,0xff888888,0xff818181,0xff062811,0x99000000,0x66000000,0x3d000000,0x40000000,0x6a000000,0xff072c10,0xff5c6a5b, - 0xff495348,0xff3e463d,0xff394139,0xff3b443a,0xff434c42,0xff474e47,0xff424242,0xff515151,0xff656060,0xff7a7070,0xff887e7e,0xff948c8c,0xffa19c9c,0xffaca9a9, - 0xffb3b2b2,0xffb4b4b4,0xffb3b3b3,0xff4e4e4e,0xff8ca38b,0xff99b198,0xff464646,0xff878787,0xff818181,0xff7b7b7b,0xff062610,0x99000000,0x66000000,0x3d000000, - 0x64000000,0x91000000,0xff041b0a,0xff646963,0xffa1a3a0,0xffd7d8d7,0xfffafafa,0xffd7d8d7,0xff9fa29f,0xff5f655f,0xff414b41,0xff525b51,0xff4f4f4f,0xff5c5c5c, - 0xff696565,0xff7a6f6f,0xff867c7c,0xff928b8b,0xffa39f9f,0xffadacac,0xffaeaeae,0xff4b4b4b,0xff7f947e,0xff8fa58d,0xff434343,0xff808080,0xff7a7a7a,0xff747474, - 0xff06240f,0x99000000,0x66000000,0x3d000000,0x92000000,0xb8000000,0xff5d6760,0xffc7c9c7,0xffa6a8a6,0xff8d928d,0xff858b84,0xff8c908c,0xffa4a8a4,0xffc6c7c6, - 0xff767a76,0xff3f483e,0xff606e5f,0xff717d6f,0xff5d5d5d,0xff606060,0xff656060,0xff787070,0xff918b8b,0xffa2a0a0,0xffa8a7a7,0xff474747,0xff728671,0xff869a85, - 0xff3f3f3f,0xff797979,0xff747474,0xff707070,0xff05230f,0x99000000,0x66000000,0x3d000000,0xbd000000,0xdd454545,0xffbdc0bd,0xff969a96,0xff919890,0xff9ea79d, - 0xffa1aaa1,0xff9ca49b,0xff8d948d,0xff939893,0xffc6c7c5,0xff5d615d,0xff495549,0xff6d7e6b,0xff829681,0xff7a8a79,0xff575757,0xff535353,0xff797272,0xff938f8f, - 0xffa09f9f,0xff434343,0xff677965,0xff7b8e7a,0xff3c3c3c,0xff747474,0xff6f6f6f,0xff6b6b6b,0xff05210e,0x99000000,0x66000000,0x3d000000,0xd9000000,0xf0979797, - 0xff949a95,0xff919890,0xffa8b1a7,0xffb0bcaf,0xffb0bcb0,0xffadb8ac,0xffa2aca1,0xff8c928b,0xffa3a6a3,0xff9d9f9d,0xff394239,0xff606f5f,0xff788c77,0xff7d927b, - 0xff788d76,0xff70846e,0xff494949,0xff837d7d,0xff969494,0xff3f3f3f,0xff5c6e5b,0xff728270,0xff383838,0xff6e6e6e,0xff696969,0xff666666,0xff05200d,0x99000000, - 0x66000000,0x3d000000,0xe7000000,0xf9d5d5d5,0xff6f7a72,0xff9da79d,0xffb0bcaf,0xffb3bfb2,0xffb2beb1,0xffb0bcaf,0xffaab5a9,0xff979f97,0xff888d88,0xffd6d7d6, - 0xff303830,0xff546254,0xff70836e,0xff758973,0xff70856e,0xff697d67,0xff444444,0xff696262,0xff888484,0xff3b3b3b,0xff526351,0xff687768,0xff353535,0xff686868, - 0xff646464,0xff626262,0xff051f0d,0x99000000,0x66000000,0x3d000000,0xec000000,0xfefafafa,0xff636965,0xff989e98,0xffb0bcb0,0xffb2beb1,0xffb0bcaf,0xffaebaad, - 0xffabb5aa,0xff99a399,0xff80847f,0xfffafafa,0xff2a302a,0xff4d5a4c,0xff697b67,0xff6d826b,0xff697d67,0xff627660,0xff5c6f5a,0xff3c3c3c,0xff787272,0xff383838, - 0xff495947,0xff5f6d5f,0xff333333,0xff646464,0xff616161,0xff5e5e5e,0xff051e0c,0x99000000,0x66000000,0x3d000000,0xe7000000,0xf9d5d5d5,0xff707a74,0xff858585, - 0xff909090,0xffa5ada4,0xffaebaad,0xffacb8ab,0xffa6b1a6,0xff949c93,0xff868a85,0xffd2d3d2,0xff252c25,0xff455144,0xff5f715d,0xff657863,0xff637762,0xff5d705b, - 0xff566a54,0xff393939,0xff5b5555,0xff353535,0xff40503e,0xff586357,0xff323232,0xff606060,0xff5f5f5f,0xff5d5d5d,0xff051e0c,0x99000000,0x66000000,0x3d000000, - 0xd9000000,0xf0979797,0xff949a96,0xff989898,0xffb3b3b3,0xff909090,0xff909090,0xff9ea59d,0xff9ba59b,0xff868c86,0xff9d9f9c,0xff919391,0xff20261f,0xff394338, - 0xff4f5f4e,0xff5a6c58,0xff5b6e59,0xff576b56,0xff526550,0xff4d5f4a,0xff353535,0xff343434,0xff3b4b39,0xff515a50,0xff303030,0xff606060,0xff5e5e5e,0xff5d5d5d, - 0xff051e0c,0x99000000,0x66000000,0x3d000000,0xbd000000,0xdd454545,0xffbdc0be,0xff9a9a9a,0xff989898,0xffa7a7a7,0xffacacac,0xff838383,0xff7a7a7a,0xff898b89, - 0xffb6b7b6,0xff585958,0xff1f231e,0xff283027,0xff3b4539,0xff475646,0xff4f604d,0xff51644e,0xff4e614c,0xff495b47,0xff343434,0xff333333,0xff364634,0xff495149, - 0xff303030,0xff5f5f5f,0xff5e5e5e,0xff5d5d5d,0xff051e0c,0x99000000,0x66000000,0x3d000000,0x92000000,0xb8000000,0xff5d6760,0xffc8c8c8,0xffa8a8a8,0xff919191, - 0xff898989,0xff8e8e8e,0xffa2a2a2,0xffb5b5b5,0xff6b6b6b,0xffe4e4e4,0xffcacbca,0xff1e231e,0xff232b23,0xff323d31,0xff3f4c3e,0xff455644,0xff475946,0xff445642, - 0xff41533f,0xff323232,0xff334331,0xff424842,0xff2f2f2f,0xff5e5e5e,0xff5d5d5d,0xff5d5d5d,0xff051e0c,0x99000000,0x66000000,0x3d000000,0x64000000,0x91000000, - 0xff04190a,0xff676767,0xffa2a2a2,0xffd8d8d8,0xfffafafa,0xffd5d5d5,0xff979797,0xff4e4e4e,0xffe1e1e1,0xffffffff,0xffffffff,0xffc9c9c9,0xff1a1d19,0xff1e241d, - 0xff2b352a,0xff374436,0xff3e4d3c,0xff3f503d,0xff3e4e3c,0xff303030,0xff324230,0xff3c403c,0xff2f2f2f,0xff5e5e5e,0xff5e5e5e,0xff5d5d5d,0xff051e0d,0x99000000, - 0x66000000,0x3d000000,0x40000000,0x6a000000,0xff072911,0xff606060,0xff4b4b4b,0xff3f3f3f,0xff393939,0xff363636,0xff313131,0xff272727,0xff646464,0xfffafafa, - 0xffffffff,0xffffffff,0xffc8c8c8,0xff161716,0xff191f19,0xff273126,0xff323f31,0xff384735,0xff384a37,0xff394936,0xff2f2f2f,0xff363836,0xff2f2f2f,0xff5e5e5e, - 0xff5e5e5e,0xff5e5e5e,0xff051f0d,0x99000000,0x66000000,0x3d000000,0x28000000,0x4e000000,0xff083517,0xff919191,0xff7d7d7d,0xff707070,0xff696969,0xff636363, - 0xff575757,0xff424242,0xff2b2b2b,0xff626262,0xfffafafa,0xffffffff,0xffffffff,0xffc8c8c8,0xff131313,0xff171b17,0xff263024,0xff303e2e,0xff344432,0xff354633, - 0xff2f2f2f,0xff313231,0xff2f2f2f,0xff5e5e5e,0xff5e5e5e,0xff5f5f5f,0xff051f0d,0x93000000,0x62000000,0x3b000000,0x1d000000,0x3b000000,0xff0a3b19,0xffaaaaaa, - 0xffa0a0a0,0xff989898,0xff909090,0xff888888,0xff797979,0xff606060,0xff424242,0xff252525,0xff5e5e5e,0xfffafafa,0xffffffff,0xffffffff,0xffcacaca,0xff161616, - 0xff181818,0xff262e25,0xff303f2f,0xff334331,0xff334330,0xff2e2e2e,0xff2e2e2e,0xff5e5e5e,0xff5f5f5f,0xff606060,0xff05200d,0x87000000,0x5a000000,0x36000000, - 0x17000000,0x2f000000,0xff093c19,0xff093918,0xff093717,0xff083417,0xff083215,0xff083014,0xff072c13,0xff06260f,0xff041c0c,0xff031208,0xff010a04,0xff545654, - 0xfffafafa,0xffffffff,0xffffffff,0xff676a68,0xff020e06,0xff020a04,0xff020d06,0xff020f06,0xff020f06,0xff020f06,0xff051e0d,0xff051f0d,0xff051f0d,0xff05200d, - 0xff05210e,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x9b000000,0xa1000000, - 0xad000000,0xc0000000,0xd5000000,0xe9000000,0xf8555555,0xfffafafa,0xfa858585,0xe6000000,0xcf000000,0xb7000000,0xa4000000,0x9c000000,0x99000000,0x99000000, + 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff0f4120,0xff0c3119,0xff0c3119,0xff0c3819, + 0xff0c3619,0xff0c3319,0xff0c3119,0xff0c3119,0xff13592b,0xff13592b,0xff13592b,0xff13582b,0xff13582b,0xff13572a,0xff13572a,0xff13562a,0xff13562a,0xff135429, + 0xff125329,0xff125329,0xff125329,0xff125228,0xff125228,0xff125128,0xff125028,0xff124f27,0xff104d25,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000, + 0xff135429,0xffd0d0d0,0xffa7a7a7,0xff7e7e7e,0xff7e7e7e,0xff889786,0xff879286,0xff838882,0xff7e7e7e,0xff7e7e7e,0xffdfdfdf,0xffdedede,0xffdddddd,0xffdcdcdc, + 0xffdadada,0xffd8d8d8,0xffd7d7d7,0xffd5d5d5,0xffd3d3d3,0xffd1d1d1,0xffd1d1d1,0xffcfcfcf,0xffcecece,0xffcccccc,0xffc9c9c9,0xffc3c3c3,0xff104b24,0x5c000000, + 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff125329,0xffd5d5d5,0xffd6d6d6,0xffd1d1d1,0xffadadad,0xff7e7e7e,0xff7e7e7e,0xff92a390,0xff93a391,0xff8b948a, + 0xff7d7d7d,0xff7c7c7c,0xffdcdcdc,0xffdadada,0xff7a7a7a,0xff7a7a7a,0xff787878,0xffd3d3d3,0xffd1d1d1,0xffd1d1d1,0xffcfcfcf,0xffcdcdcd,0xffcccccc,0xffc7c7c7, + 0xffc3c3c3,0xffbdbdbd,0xff104923,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff124f27,0xffd1d0d0,0xffd4d3d3,0xffd5d5d5,0xffd6d6d6,0xffd1d1d1, + 0xffafafaf,0xff7e7e7e,0xff7e7e7e,0xff9caf9a,0xff9fb19d,0xff95a294,0xff7b7b7b,0xff7a7a7a,0xff919e90,0xff909d8f,0xff7e817d,0xff777777,0xff767676,0xffcfcfcf, + 0xffcdcdcd,0xffcccccc,0xffc7c7c7,0xffc3c3c3,0xffbdbdbd,0xffb7b7b7,0xff0f4623,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff104723,0xffc3bfbf, + 0xffcbcaca,0xffd1d0d0,0xffd4d3d3,0xffd5d5d5,0xffd6d6d6,0xffd2d2d2,0xffb2b2b2,0xff7d7d7d,0xff7d7d7d,0xffa5b9a4,0xffa6baa4,0xffa4b7a3,0xffa6bba4,0xffa4b9a3, + 0xffa3b6a1,0xff92a091,0xff7c7f7b,0xff747474,0xff737373,0xffc7c7c7,0xffc3c3c3,0xffbdbdbd,0xffb7b7b7,0xffb1b1b1,0xff0f4322,0x93000000,0x62000000,0x3b000000, + 0x1f000000,0x3d000000,0xff0d3c1e,0xffaba4a4,0xffb8b3b3,0xffc3bfbf,0xffcbcaca,0xffd1d0d0,0xffd4d3d3,0xffd5d5d5,0xffd5d5d5,0xffd3d3d3,0xffb2b2b2,0xff7b7b7b, + 0xff7a7a7a,0xffacc0aa,0xffadc1ab,0xffacc0ab,0xffabbfa9,0xffa8bda6,0xffa5baa4,0xff93a192,0xff7a7d79,0xff6e6e6e,0xffbdbdbd,0xffb9b9b9,0xffb3b3b3,0xffadadad, + 0xff0f4120,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0c341a,0xff978d8d,0xffa09797,0xffaba4a4,0xffb8b3b3,0xffc3bfbf,0xffcbc9c9,0xffd1d0d0, + 0xffd3d2d2,0xffd4d4d4,0xffd3d3d3,0xffd3d3d3,0xffb4b4b4,0xff7a7a7a,0xff797979,0xffb2c7b0,0xffb2c7b0,0xffb0c5ae,0xffadc3ac,0xffaabea8,0xffa4b8a2,0xffc6e0c5, + 0xff686868,0xffb4b4b4,0xffadadad,0xffa7a7a7,0xff0d401f,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0c3119,0xff7e7e7e,0xff8c8383,0xff978d8d, + 0xffa09797,0xffaba4a4,0xffb7b3b3,0xffc2bebe,0xffcac8c8,0xffd0cfcf,0xffd1d1d1,0xffd2d2d2,0xffd1d1d1,0xffd1d1d1,0xffb3b3b3,0xff777777,0xff757575,0xffb6ccb5, + 0xffb5cbb3,0xffb0c6ae,0xffaac0a9,0xffc4ddc2,0xff656565,0xffaeaeae,0xffa8a8a8,0xffa3a3a3,0xff0d3e1e,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3e000000, + 0xff105425,0xff9ca69b,0xff7c7c7c,0xff7c7c7c,0xff877f7f,0xff948a8a,0xff9d9494,0xffa8a1a1,0xffb6b1b1,0xffc0bdbd,0xffc9c7c7,0xffcdcccc,0xffd0cfcf,0xffd0d0d0, + 0xffcfcfcf,0xffcecece,0xffb5b5b5,0xff737373,0xff6f6f6f,0xffb4cbb3,0xffb0c7ae,0xffbed7bd,0xff636363,0xffa9a9a9,0xffa4a4a4,0xff9e9e9e,0xff0d3c1e,0x99000000, + 0x66000000,0x3d000000,0x21000000,0x42000000,0xff125725,0xffbdd3bc,0xffb0c4af,0xff909a8f,0xff717171,0xff727272,0xff7c7777,0xff8c8282,0xff988f8f,0xffa59f9f, + 0xffb4afaf,0xffbebbbb,0xffc6c4c4,0xffcbcaca,0xffcccccc,0xffcccccc,0xffcbcbcb,0xffcacaca,0xffafafaf,0xff686868,0xffaec5ad,0xffb8d0b6,0xff5f5f5f,0xffa4a4a4, + 0xff9e9e9e,0xff989898,0xff0d391d,0x99000000,0x66000000,0x3d000000,0x2a000000,0x4f000000,0xff0f4d22,0xff9daf9c,0xff8f9f8d,0xff859584,0xff7f8d7e,0xff6e776e, + 0xff5b5b5b,0xff636363,0xff746e6e,0xff887e7e,0xff988e8e,0xffa49d9d,0xffb2adad,0xffbbb8b8,0xffc3c1c1,0xffc7c6c6,0xffc8c8c8,0xffc5c4c4,0xffc2c2c2,0xff656565, + 0xffa7bda6,0xffb0c6ae,0xff5c5c5c,0xff9d9d9d,0xff989898,0xff919191,0xff0c371b,0x99000000,0x66000000,0x3d000000,0x40000000,0x6a000000,0xff0d3c1a,0xff6e7b6d, + 0xff5b655a,0xff4f584e,0xff4a524a,0xff4c564b,0xff545e53,0xff596059,0xff535353,0xff636363,0xff777272,0xff8b8181,0xff988e8e,0xffa39b9b,0xffaeaaaa,0xffb8b6b6, + 0xffbebdbd,0xffbfbfbf,0xffbebebe,0xff606060,0xff9bb09a,0xffa7bda6,0xff585858,0xff979797,0xff919191,0xff8c8c8c,0xff0c351a,0x99000000,0x66000000,0x3d000000, + 0x64000000,0x91000000,0xff082812,0xff767a75,0xffaeb0ad,0xffdddedd,0xfffbfbfb,0xffdddedd,0xffadafad,0xff717771,0xff525d52,0xff646d63,0xff616161,0xff6e6e6e, + 0xff7a7777,0xff8b8080,0xff968d8d,0xffa19a9a,0xffb0adad,0xffb9b8b8,0xffbababa,0xff5d5d5d,0xff8fa38e,0xff9eb29c,0xff545454,0xff909090,0xff8b8b8b,0xff858585, + 0xff0c3319,0x99000000,0x66000000,0x3d000000,0x92000000,0xb8000000,0xff6f7972,0xffd0d1d0,0xffb3b5b3,0xff9ca19c,0xff959a94,0xff9b9f9b,0xffb1b5b1,0xffcfd0cf, + 0xff878b87,0xff505a4f,0xff727f71,0xff828d80,0xff6f6f6f,0xff727272,0xff777272,0xff898181,0xffa09a9a,0xffafadad,0xffb5b4b4,0xff595959,0xff839682,0xff96a895, + 0xff505050,0xff8a8a8a,0xff858585,0xff818181,0xff0a3119,0x99000000,0x66000000,0x3d000000,0xbd000000,0xdd575757,0xffc7cac7,0xffa4a8a4,0xffa0a69f,0xffacb4ab, + 0xffaeb6ae,0xffaab1a9,0xff9ca39c,0xffa2a6a2,0xffcfd0ce,0xff6f736f,0xff5b675b,0xff7e8e7c,0xff92a491,0xff8b9a8a,0xff696969,0xff656565,0xff8a8383,0xffa29e9e, + 0xffadadad,0xff545454,0xff798a77,0xff8c9d8b,0xff4d4d4d,0xff858585,0xff808080,0xff7c7c7c,0xff0a2f17,0x99000000,0x66000000,0x3d000000,0xd9000000,0xf0a5a5a5, + 0xffa3a8a4,0xffa0a69f,0xffb5bdb4,0xffbcc6bb,0xffbcc6bc,0xffb9c3b8,0xffafb8ae,0xff9ba19a,0xffb0b3b0,0xffabadab,0xff4a534a,0xff728071,0xff899b88,0xff8da18c, + 0xff899c87,0xff81947f,0xff5b5b5b,0xff938d8d,0xffa4a3a3,0xff505050,0xff6e7f6d,0xff839281,0xff494949,0xff7f7f7f,0xff7a7a7a,0xff787878,0xff0a2e16,0x99000000, + 0x66000000,0x3d000000,0xe7000000,0xf9dcdcdc,0xff808b83,0xffabb4ab,0xffbcc6bb,0xffbec9bd,0xffbdc8bd,0xffbcc6bb,0xffb6c0b6,0xffa5ada5,0xff989c98,0xffdddddd, + 0xff404940,0xff667466,0xff81937f,0xff869984,0xff81957f,0xff7a8d79,0xff565656,0xff7a7474,0xff989494,0xff4c4c4c,0xff647563,0xff7a887a,0xff464646,0xff7a7a7a, + 0xff767676,0xff747474,0xff0a2d16,0x99000000,0x66000000,0x3d000000,0xec000000,0xfefbfbfb,0xff757a77,0xffa6aca6,0xffbcc6bc,0xffbdc8bd,0xffbcc6bb,0xffbac4b9, + 0xffb7c0b6,0xffa7b0a7,0xff90948f,0xfffbfbfb,0xff394039,0xff5f6c5e,0xff7a8c79,0xff7e927c,0xff7a8d79,0xff748772,0xff6e806c,0xff4d4d4d,0xff898383,0xff494949, + 0xff5b6b59,0xff717e71,0xff434343,0xff767676,0xff737373,0xff707070,0xff0a2b14,0x99000000,0x66000000,0x3d000000,0xe7000000,0xf9dcdcdc,0xff818b85,0xff959595, + 0xff9f9f9f,0xffb2b9b1,0xffbac4b9,0xffb8c3b7,0xffb3bdb3,0xffa3aaa2,0xff969a95,0xffd9dad9,0xff343c34,0xff576356,0xff71826f,0xff778975,0xff758874,0xff6f816d, + 0xff687b66,0xff4a4a4a,0xff6d6767,0xff464646,0xff51624f,0xff6a7569,0xff424242,0xff727272,0xff717171,0xff6f6f6f,0xff0a2b14,0x99000000,0x66000000,0x3d000000, + 0xd9000000,0xf0a5a5a5,0xffa3a8a4,0xffa6a6a6,0xffbebebe,0xff9f9f9f,0xff9f9f9f,0xffacb2ab,0xffa9b2a9,0xff969b96,0xffabadaa,0xffa0a2a0,0xff2e352d,0xff4a5449, + 0xff617160,0xff6c7d6a,0xff6d7f6b,0xff697c68,0xff647762,0xff5f715c,0xff464646,0xff454545,0xff4c5d4a,0xff636c62,0xff404040,0xff727272,0xff707070,0xff6f6f6f, + 0xff0a2b14,0x99000000,0x66000000,0x3d000000,0xbd000000,0xdd575757,0xffc7cac8,0xffa8a8a8,0xffa6a6a6,0xffb4b4b4,0xffb8b8b8,0xff939393,0xff8b8b8b,0xff999a99, + 0xffc1c2c1,0xff6a6b6a,0xff2d312b,0xff374036,0xff4c574a,0xff596858,0xff61725f,0xff637660,0xff60735e,0xff5b6d59,0xff454545,0xff434343,0xff475845,0xff5b635b, + 0xff404040,0xff717171,0xff707070,0xff6f6f6f,0xff0a2b14,0x99000000,0x66000000,0x3d000000,0x92000000,0xb8000000,0xff6f7972,0xffd1d1d1,0xffb5b5b5,0xffa0a0a0, + 0xff999999,0xff9d9d9d,0xffafafaf,0xffc0c0c0,0xff7c7c7c,0xffe8e8e8,0xffd2d3d2,0xff2b312b,0xff313b31,0xff424e41,0xff505e4f,0xff576856,0xff596b58,0xff566853, + 0xff526550,0xff424242,0xff435441,0xff535a53,0xff3f3f3f,0xff707070,0xff6f6f6f,0xff6f6f6f,0xff0a2b14,0x99000000,0x66000000,0x3d000000,0x64000000,0x91000000, + 0xff082512,0xff797979,0xffafafaf,0xffdedede,0xfffbfbfb,0xffdcdcdc,0xffa5a5a5,0xff606060,0xffe6e6e6,0xffffffff,0xffffffff,0xffd1d1d1,0xff272a25,0xff2b332a, + 0xff3b4639,0xff485647,0xff4f5f4d,0xff50624e,0xff4f604d,0xff404040,0xff425340,0xff4d514d,0xff3f3f3f,0xff707070,0xff707070,0xff6f6f6f,0xff0a2b16,0x99000000, + 0x66000000,0x3d000000,0x40000000,0x6a000000,0xff0d381b,0xff727272,0xff5d5d5d,0xff505050,0xff4a4a4a,0xff474747,0xff414141,0xff363636,0xff767676,0xfffbfbfb, + 0xffffffff,0xffffffff,0xffd1d1d1,0xff222322,0xff252d25,0xff364135,0xff425041,0xff495946,0xff495c48,0xff4a5b47,0xff3f3f3f,0xff474947,0xff3f3f3f,0xff707070, + 0xff707070,0xff707070,0xff0a2d16,0x99000000,0x66000000,0x3d000000,0x28000000,0x4e000000,0xff0f4623,0xffa0a0a0,0xff8d8d8d,0xff818181,0xff7a7a7a,0xff757575, + 0xff696969,0xff535353,0xff3b3b3b,0xff747474,0xfffbfbfb,0xffffffff,0xffffffff,0xffd1d1d1,0xff1e1e1e,0xff232823,0xff354033,0xff404f3e,0xff455642,0xff465843, + 0xff3f3f3f,0xff414241,0xff3f3f3f,0xff707070,0xff707070,0xff717171,0xff0a2d16,0x93000000,0x62000000,0x3b000000,0x1d000000,0x3b000000,0xff124c25,0xffb6b6b6, + 0xffadadad,0xffa6a6a6,0xff9f9f9f,0xff989898,0xff8a8a8a,0xff727272,0xff535353,0xff343434,0xff707070,0xfffbfbfb,0xffffffff,0xffffffff,0xffd2d2d2,0xff222222, + 0xff242424,0xff353e34,0xff40503f,0xff435441,0xff435440,0xff3e3e3e,0xff3e3e3e,0xff707070,0xff717171,0xff727272,0xff0a2e16,0x87000000,0x5a000000,0x36000000, + 0x17000000,0x2f000000,0xff104d25,0xff104a24,0xff104823,0xff0f4523,0xff0f4220,0xff0f401f,0xff0d3c1e,0xff0c3519,0xff082914,0xff061d0f,0xff031208,0xff666866, + 0xfffbfbfb,0xffffffff,0xffffffff,0xff797b7a,0xff05170c,0xff051208,0xff05160c,0xff05190c,0xff05190c,0xff05190c,0xff0a2b16,0xff0a2d16,0xff0a2d16,0xff0a2e16, + 0xff0a2f17,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x9b000000,0xa1000000, + 0xad000000,0xc0000000,0xd5000000,0xe9000000,0xf8676767,0xfffbfbfb,0xfa959595,0xe6000000,0xcf000000,0xb7000000,0xa4000000,0x9c000000,0x99000000,0x99000000, 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000, - 0x62000000,0x66000000,0x67000000,0x6a000000,0x74000000,0x89000000,0xab000000,0xce000000,0xe8000000,0xf4303030,0xeb000000,0xd3000000,0xaf000000,0x8c000000, + 0x62000000,0x66000000,0x67000000,0x6a000000,0x74000000,0x89000000,0xab000000,0xce000000,0xe8000000,0xf4404040,0xeb000000,0xd3000000,0xaf000000,0x8c000000, 0x75000000,0x6a000000,0x67000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000, 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3e000000,0x3f000000,0x44000000,0x4b000000,0x54000000,0x5d000000,0x63000000, 0x65000000,0x60000000,0x57000000,0x4e000000,0x45000000,0x40000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000, 0x18000000,0xf000000 }; static const QRgb Games_data[] = { 0xffffff,0xffffff,0x0,0x3ceee7c6,0x9dd6ceaa,0xf4cac092,0xfff2e396,0xfff2dd78,0xf4cab549,0x9dd6b92f,0x3ceeca15,0x0,0xffffff,0xffffff, 0xffffff,0xfff8d8,0x7ac4c0ac,0xfbdbd6bd,0xfff6eec9,0xfffbefb5,0xffffee9c,0xffffe878,0xfffbdd4f,0xfff6d225,0xfbd9b400,0x7ab79800,0xe4be00,0xffffff, 0x0,0x7ac4c0ac,0xffdbd7c2,0xff84763c,0xff84763c,0xff84763c,0xffac9f5e,0xffac9b47,0xff84763c,0xff84763c,0xff84763c,0xffc09f00,0x7aa28700,0x1000000, 0x38fff8d4,0xfadbd6bd,0xff84763c,0xffa9a9a9,0xffd9d9d9,0xffe0e0e0,0xfff5e594,0xfff5e182,0xffe0e0e0,0xffd9d9d9,0xffa9a9a9,0xff84763c,0xfaa68900,0x33b99a00, 0x9dd6ceaa,0xfffbf3cd,0xff84763c,0xffffffff,0xffa3a3a4,0xff777777,0xffd3bd52,0xffd3ba44,0xff777777,0xffa3a3a4,0xffffffff,0xff84763c,0xffad9000,0x98887100, 0xf4cac092,0xfffbefb5,0xff84763c,0xffd2d0cb,0xff1e1f23,0xff000000,0xffac920f,0xffac9008,0xff000000,0xff1e1f23,0xffd2d0cb,0xff84763c,0xff9d8200,0xf36f5d00, 0xfff2e396,0xffffee9c,0xff84763c,0xff81784c,0xff3b3415,0xff1d1800,0xffb39504,0xffb29400,0xff1d1800,0xff3b3415,0xff81784c,0xff84763c,0xff8e7600,0xfe766300, 0xfff2dd78,0xffffe878,0xffffe66a,0xff8b7511,0xff917a03,0xffc7a500,0xffdab500,0xffd8b400,0xffc7a500,0xff8e7700,0xff7b6600,0xff957c00,0xff7f6a00,0xfe766300, 0xf4cab549,0xfffbdd4f,0xff84763c,0xffd9bb2b,0xffffd816,0xfffdd200,0xfff8ce00,0xfff3ca00,0xffe5be00,0xffc7a500,0xff887100,0xff84763c,0xff7d6800,0xf3625100, 0x9dd6b92f,0xfffbd725,0xff312900,0xff0a0800,0xffc7a500,0xffc7a500,0xffc7a500,0xffc7a500,0xffc7a500,0xffc7a500,0xff0a0800,0xff332b00,0xff7d6800,0x98695800, 0x38ffd816,0xfad9b400,0xfff2c900,0xff8e7600,0xff4b3f00,0xff181500,0xff161200,0xff161200,0xff151300,0xff312a00,0xff645400,0xff7f6a00,0xfa6d5b00,0x337f6a00, 0x0,0x7ab79800,0xffc09f00,0xffd1ae00,0xffc3a200,0xff625200,0xff564900,0xff544700,0xff4d4100,0xff7f6a00,0xff7f6a00,0xff6d5b00,0x7a625100,0x0, 0xffffff,0x8e4be00,0x7aa18700,0xfba68900,0xffaa8d00,0xff9d8200,0xff8e7600,0xff7f6a00,0xff7d6800,0xff7b6600,0xfb6d5b00,0x7a625100,0x7f6a00,0xffffff, 0xffffff,0xffffff,0x0,0x37ab8f00,0x98887100,0xf36f5d00,0xfe766300,0xfe766300,0xf3625100,0x98695800,0x37766200,0x1000000,0xffffff,0xffffff }; static const QRgb Go_black_highlight_data[] = { 0x28999b9c,0x2d949697,0x32959798,0x43868788,0x776f6f70,0x9a626263,0x93606060,0x60646565,0x31818384,0x22969899,0x1e939596,0x1b919394,0x2e9a9b9c,0x369c9d9f, 0x6b7c7d7e,0xbc737474,0xe2696a6a,0xed656565,0xed616162,0xe35a5a5a,0xb24b4c4c,0x51555555,0x25818384,0x1c919394,0x34949697,0x6a848586,0xce7d7e7e,0xf97b7c7d, 0xff767777,0xff767777,0xff727373,0xff5e5e5f,0xfa494a4a,0xcd393939,0x5b414243,0x237d7e7f,0x409c9e9f,0xb97f8080,0xf9838484,0xffaaabac,0xffa6a7a8,0xff9b9c9c, 0xff717272,0xff5e5e5e,0xff505151,0xfc3f3f3f,0xb62e2f2f,0x46464748,0x68848585,0xde828283,0xffa0a1a2,0xffe5e6e6,0xffffffff,0xffa6a8a8,0xff7b7c7c,0xff666666, 0xff545555,0xff434343,0xeb2d2d2e,0x7a2d2d2e,0x82777878,0xea757676,0xff919292,0xffbdbebe,0xffe6e6e7,0xffa2a3a4,0xff7f8080,0xff646565,0xff515152,0xff404040, 0xfa2d2d2d,0xa3232324,0x766f7071,0xea6e6f6f,0xff787a7a,0xff7e8080,0xff949595,0xff757676,0xff646464,0xff575858,0xff4d4d4e,0xff404040,0xfc2d2d2d,0xb2202020, 0x4a7c7e7e,0xda59595a,0xfe565757,0xff6c6d6d,0xff787878,0xff626262,0xff525354,0xff484849,0xff3c3c3c,0xff373838,0xfa242424,0xa91e1e1e,0x2e8d8f90,0x9b464747, 0xf7484949,0xff5a5a5b,0xff636364,0xff515152,0xff454545,0xff3c3c3c,0xff373838,0xff2a2a2a,0xee191919,0x871e1f1f,0x26909293,0x4b585859,0xc0393939,0xfa414141, 0xff4e4e4f,0xff434343,0xff3b3c3c,0xff333334,0xff2a2b2b,0xf81b1b1c,0xc0171717,0x572b2b2c,0x218e9091,0x28818384,0x5d444445,0xb52d2d2d,0xeb2e2f2f,0xfa2d2d2d, 0xfd272728,0xfb1f2020,0xf1181818,0xc4171717,0x6f232424,0x2e4b4c4d,0x1e8e9091,0x1f929495,0x28787a7b,0x4b434445,0x842c2c2c,0xaf232323,0xc01c1d1d,0xb71a1a1b, 0x931c1c1c,0x5c282929,0x2f4a4b4c,0x1b7c7e7e }; static const QRgb Go_black_data[] = { 0x0,0x0,0x0,0x184a4a4a,0x664a4a4a,0x89454545,0x763c3c3c,0x302d2d2d,0x2000000,0x0,0x0,0x0,0x0,0x0, 0x6d505050,0xf5535353,0xff525252,0xff4d4d4d,0xff454545,0xfd393939,0xb3272727,0x18080808,0x1000000,0x0,0x0,0x64505050,0xfe575757,0xff595959, 0xff585858,0xff4d4d4d,0xff464646,0xff3d3d3d,0xff313131,0xce1a1a1a,0x1d000000,0x1000000,0xb474747,0xec525252,0xff575757,0xff989898,0xffa2a2a2,0xff4f4f4f, 0xff434343,0xff3b3b3b,0xff313131,0xff212121,0x98090909,0x12000000,0x48474747,0xff515151,0xff545454,0xff888888,0xff787878,0xff474747,0xff3f3f3f,0xff373737, 0xff2d2d2d,0xff212121,0xe80f0f0f,0x3f000000,0x64424242,0xff4b4b4b,0xff4c4c4c,0xff4c4c4c,0xff474747,0xff404040,0xff3a3a3a,0xff323232,0xff282828,0xff1e1e1e, 0xf8111111,0x6e000000,0x4b363636,0xff434343,0xff444444,0xff424242,0xff3f3f3f,0xff3a3a3a,0xff333333,0xff2b2b2b,0xff222222,0xff1b1b1b,0xfa0e0e0e,0x82000000, 0x101b1b1b,0xf1343434,0xff3b3b3b,0xff3a3a3a,0xff363636,0xff313131,0xff2b2b2b,0xff232323,0xff1c1c1c,0xff1a1a1a,0xf3050505,0x75000000,0x2000000,0x861d1d1d, 0xff2d2d2d,0xff2f2f2f,0xff2c2c2c,0xff282828,0xff212121,0xff1c1c1c,0xff1b1b1b,0xfe0f0f0f,0xd8000000,0x4a000000,0x0,0x15000000,0xb4101010,0xfe1e1e1e, 0xff1f1f1f,0xff1d1d1d,0xff1b1b1b,0xff1a1a1a,0xfe0e0e0e,0xed000000,0x8f000000,0x18000000,0x0,0x2000000,0x28000000,0x97020202,0xe90a0a0a,0xf90d0d0d, 0xfb0a0a0a,0xf6030303,0xdf000000,0x95000000,0x2c000000,0x3000000,0x0,0x0,0x2000000,0x1b000000,0x55000000,0x89000000,0x9c000000,0x8b000000, @@ -1242,262 +1242,262 @@ static const QRgb HelpBrowser_data[] = { 0xff907537,0xff957e3d,0xff9b8642,0xff9c8e45,0xff9d9045,0xff999042,0xff928b3d,0xff858235,0xff79752a,0xff6b6820,0xff5f5b16,0xff5e591c,0xffc3c1ac,0xffffffff, 0xffffffff,0xffffffff,0xffffffff,0xfff1f1ef,0xff443a20,0xff443619,0xff4f4023,0xff564529,0xff59442b,0xff543d26,0xff523e1f,0xf05a5a17,0x881a1a1a,0x58141414, 0x34000000,0xf3aaaa52,0xff86662c,0xff88692d,0xff8d7133,0xff927a39,0xff96813c,0xff98863e,0xff9a8b3e,0xff968b3b,0xff8f8735,0xff86802c,0xff7a7523,0xff6e6819, 0xff7e793c,0xffe9e8df,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffd7d5cf,0xff4d452a,0xff3c3113,0xff473a1d,0xff524226,0xff59472d,0xff59442d,0xff543e2a, 0xff4d3821,0xfa5f5f18,0x901b1b1b,0x5f181818,0x37000000,0xfeabab4f,0xff805d25,0xff856329,0xff8a6d2f,0xff8d7432,0xff917a35,0xff938037,0xff928234,0xff928532, 0xff8c822c,0xff857b23,0xff79711a,0xff7e772f,0xfff4f4ef,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff9f9b8b,0xff3f3517,0xff392e0e,0xff423616,0xff4c3e20, 0xff544429,0xff594830,0xff584630,0xff543f2c,0xff4b3323,0xfe60601a,0x951b1b1b,0x64171717,0x39040404,0xf3a5a545,0xff815e24,0xff815f25,0xff85672a,0xff886e2d, 0xff8c742f,0xff8e792f,0xff8e7d2d,0xff8c7d2a,0xff877a23,0xff7f741b,0xff746a12,0xffd6d3bc,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff837d66,0xff312805, 0xff372c0a,0xff3e3211,0xff47391a,0xff504125,0xff57462d,0xff5b4933,0xff584632,0xff523e2d,0xff4b3623,0xfb5a5a1a,0x971b1b1b,0x65171717,0x38050505,0xe09a9a3d, 0xff816224,0xff7d5b21,0xff816225,0xff846929,0xff866d28,0xff877229,0xff887326,0xff867522,0xff81711a,0xff786a13,0xff766a19,0xffffffff,0xffffffff,0xffffffff, 0xffffffff,0xff908b76,0xff312803,0xff352a07,0xff3b2f0d,0xff423515,0xff4d3d1f,0xff55452b,0xff594a32,0xff5b4935,0xff594735,0xff503d2d,0xff4c3b24,0xf351511a, 0x951a1a1a,0x63151515,0x35050505,0xc58a8a33,0xff846c24,0xff78551c,0xff7c5b20,0xff7e6222,0xff816725,0xff826a24,0xff826c21,0xff7f6b1b,0xff7a6715,0xff72610c, 0xff786a25,0xffa39c77,0xff9b9577,0xff959076,0xff918c76,0xff4c4323,0xff332906,0xff392d0b,0xff403412,0xff493b1c,0xff514226,0xff584830,0xff5c4b36,0xff5c4b39, 0xff574535,0xff4e3b2d,0xff4c3f22,0xe747471a,0x901b1b1b,0x5e161616,0x30050505,0xa0737327,0xff897925,0xff734f17,0xff77561c,0xff7a5c1e,0xff7c6120,0xff7d6420, 0xff7c651d,0xff796318,0xff736011,0xff69570c,0xff7b6e37,0xff7c7349,0xff736b48,0xff6c6447,0xff696148,0xff332907,0xff372c0a,0xff3d3110,0xff453719,0xff4e4023, 0xff56472e,0xff5a4b35,0xff5c4d3a,0xff5a493a,0xff544234,0xff4b372b,0xff4f4620,0xd53b3b1a,0x87191919,0x58141414,0x2a060606,0x724f4f1a,0xf98f8727,0xff714d16, 0xff725018,0xff75561b,0xff765b1c,0xff79601d,0xff78601b,0xff745e17,0xff6d5815,0xff635011,0xffd1cdbe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff352a0c, 0xff3b2f11,0xff433518,0xff4b3d22,0xff53442b,0xff594a34,0xff5c4d3a,0xff5c4d3c,0xff574739,0xff503f32,0xff483528,0xfd4f4c1e,0xbb2c2c1a,0x7b191919,0x4e141414, 0x22080808,0x410c0c0c,0xc77d7d20,0xff7b6317,0xff6d4915,0xff6f4f18,0xff72551b,0xff74591b,0xff745b1c,0xff70591b,0xff695519,0xff604c17,0xffffffff,0xffffffff, 0xffffffff,0xffffffff,0xffc8c5be,0xff372c12,0xff413319,0xff483a21,0xff50422a,0xff574833,0xff5c4d3a,0xff5d4d3d,0xff5a4a3c,0xff544437,0xff4b392e,0xff4a3f24, 0xe943431c,0x9a1a1a1a,0x6c151515,0x420f0f0f,0x1a0a0a0a,0x350e0e0e,0x8a575716,0xfa837717,0xff694612,0xff694814,0xff6d4e17,0xff6f531c,0xff71551f,0xff6d541f, 0xff67521f,0xff706038,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffafaaa1,0xff3c3019,0xff443821,0xff4d3f29,0xff554632,0xff5a4c39,0xff5d4d3d,0xff5c4c3e, 0xff564539,0xff4f3e33,0xff483629,0xfd4c471f,0xc830301b,0x87191919,0x5b141414,0x350e0e0e,0x130d0d0d,0x280d0d0d,0x480e0e0e,0xbe6f6f14,0xff77610f,0xff634011, 0xff674616,0xff694b1c,0xff6c4f20,0xff685022,0xff634e23,0xff92856b,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff958f84,0xff413621,0xff4a3d29,0xff524330, 0xff564937,0xff5b4c3c,0xff5b4b3d,0xff57473b,0xff513f34,0xff48362c,0xff4b4023,0xe23f3f1c,0x9b1c1c1c,0x72161616,0x49111111,0x280d0d0d,0xc151515,0x1d121212, 0x36131313,0x703a3a11,0xdc726d0d,0xff6b520f,0xff603d14,0xff63431a,0xff65481f,0xff644a22,0xff614824,0xff5b4524,0xff524022,0xff493920,0xff433520,0xff413420, 0xff423623,0xff473a28,0xff4f402f,0xff544535,0xff58483a,0xff59493b,0xff554539,0xff514035,0xff4a382e,0xff493b25,0xf146441e,0xb427271c,0x81181818,0x5a141414, 0x350e0e0e,0x1c090909,0x7242424,0x120e0e0e,0x26141414,0x42131313,0x8947470f,0xe66d660d,0xff664d11,0xff5c3a17,0xff5e401c,0xff5f4320,0xff5d4324,0xff594326, 0xff544026,0xff4f3d26,0xff4b3b27,0xff493a28,0xff4a3b2a,0xff4e3e2e,0xff524333,0xff554537,0xff554437,0xff534236,0xff4f3e33,0xff48362c,0xff493b25,0xf446421e, 0xc22e2e1c,0x8c1a1a1a,0x65141414,0x42131313,0x250e0e0e,0x120e0e0e,0x3000000,0xb171717,0x18151515,0x2d111111,0x4a151515,0x8e434310,0xe0686510,0xff685412, 0xff593a17,0xff57391c,0xff583c20,0xff563e24,0xff543d26,0xff523d28,0xff503c29,0xff4d3c2b,0xff4f3d2d,0xff503f30,0xff514032,0xff504032,0xff4f3d31,0xff4b392e, 0xff473629,0xff4b3f23,0xf146441e,0xc22e2e1c,0x8f1b1b1b,0x6b151515,0x4a111111,0x2d111111,0x170b0b0b,0xa000000,0x1000000,0x5000000,0xe121212,0x1c121212, 0x31151515,0x4d171717,0x80333314,0xcb5c5c12,0xfb696013,0xff5f4a17,0xff52361b,0xff51351f,0xff503723,0xff4e3825,0xff4e3827,0xff4e3929,0xff4c392a,0xff4d382b, 0xff4c372c,0xff4a362a,0xff483528,0xff4a3e24,0xfd4c471f,0xe23f3f1c,0xb427271c,0x8c1a1a1a,0x6b151515,0x4c111111,0x30101010,0x1b090909,0xd000000,0x5000000, 0xffffff,0x2000000,0x6000000,0xf111111,0x1d121212,0x31151515,0x4a151515,0x66171717,0xa7424214,0xda5b5b14,0xfb655e15,0xff5c4f18,0xff56441c,0xff4f3b1f, 0xff4b3420,0xff483122,0xff483322,0xff4b3823,0xff4b3f22,0xff504621,0xfd4f4c1e,0xe943431c,0xc830301b,0x9b1c1c1c,0x81181818,0x65141414,0x4a111111,0x30101010, 0x1c090909,0xe000000,0x6000000,0x2000000,0xffffff,0x1000000,0x2000000,0x7000000,0x10202020,0x1d1a1a1a,0x2d171717,0x43171717,0x5a171717,0x72191919, 0xa0343415,0xc6474716,0xe1535317,0xf05a5a17,0xfa5f5f18,0xfe60601a,0xfb5a5a1a,0xf351511a,0xe747471a,0xd53b3b1a,0xbb2c2c1a,0x9a1a1a1a,0x87191919,0x72161616, 0x5a141414,0x42131313,0x2d111111,0x1b090909,0xe000000,0x7000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,0x2000000,0x7242424,0xe121212, 0x18151515,0x26141414,0x37171717,0x49151515,0x5b161616,0x6d171717,0x7b191919,0x881a1a1a,0x901b1b1b,0x951b1b1b,0x971b1b1b,0x951a1a1a,0x901b1b1b,0x87191919, 0x7b191919,0x6c151515,0x5b141414,0x49111111,0x350e0e0e,0x250e0e0e,0x170b0b0b,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff, 0xffffff,0x1000000,0x2000000,0x62b2b2b,0xb171717,0x120e0e0e,0x1d121212,0x29131313,0x36131313,0x43131313,0x4e141414,0x58141414,0x5f181818,0x64171717, 0x65171717,0x63151515,0x5e161616,0x58141414,0x4e141414,0x420f0f0f,0x350e0e0e,0x280d0d0d,0x1c090909,0x120e0e0e,0xa000000,0x5000000,0x2000000,0x1000000, 0xffffff,0xffffff }; static const QRgb HelpButton_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0x3ed5d5d5,0x93d4d4d4,0xd5d8d8d8,0xfad5d5d5,0xd8c8c8c8,0x9ebebebe,0x508e8e8e,0xc000000,0x3000000,0xffffff,0xffffff, - 0xffffff,0xffffff,0x60d5d5d5,0xdbdddddd,0xffdcdcdc,0xffcbcbcb,0xffc5c5c5,0xffc4c4c4,0xffd0d0d0,0xe6bbbbbb,0x837d7d7d,0x18000000,0x4000000,0xffffff, - 0xffffff,0x3ed6d5d5,0xdbd3d3d3,0xffd1d1d1,0xff9c9b9b,0xff333333,0xff323132,0xff565556,0xffbababa,0xffb1b2b1,0xec8f8e8f,0x75474747,0x18000000,0x3000000, - 0xffffff,0x94cdcecd,0xffc8c7c7,0xffb2b2b2,0xff000000,0xff616161,0xffb2b2b2,0xff000000,0xff5f5f5f,0xffaaabaa,0xff9d9c9c,0xc84f4f4f,0x3d000000,0xc000000, - 0xffffff,0xd5c2c2c2,0xffafafaf,0xffa0a0a0,0xff5b5b5b,0xff757575,0xffa8a8a8,0xff000000,0xff585858,0xffa4a4a4,0xffa4a4a4,0xef4f4f4f,0x61000000,0x1a000000, - 0xffffff,0xfab4b4b4,0xff9d9d9d,0xff959595,0xffa5a5a5,0xff989898,0xff434343,0xff1d1d1d,0xff878787,0xffa1a1a1,0xff939393,0xfd4b4b4b,0x7c000000,0x25000000, - 0xffffff,0xd9a3a3a3,0xff919191,0xff989898,0xff909090,0xff4e4e4e,0xff000000,0xff919191,0xff989898,0xff949494,0xff7b7b7b,0xf2373737,0x85000000,0x2b000000, - 0xffffff,0xa0848484,0xff8c8c8b,0xff8a8b8b,0xff979797,0xff8e8e8e,0xff929291,0xff959595,0xff8c8c8c,0xff8b8c8b,0xff585758,0xdf272727,0x7c000000,0x25000000, - 0xffffff,0x515d5d5d,0xe7707070,0xff7c7c7c,0xff848484,0xff434343,0xff262626,0xff8f8f8f,0xff7f7f7f,0xff616061,0xf5313131,0xbb101010,0x61000000,0x1a000000, - 0xffffff,0xc000000,0x843f3f3f,0xed505050,0xff5d5c5c,0xff535353,0xff262626,0xff646364,0xff515051,0xf5313130,0xcd141414,0x83000000,0x3d000000,0xc000000, - 0xffffff,0x3000000,0x18000000,0x76212121,0xc92b2b2b,0xf0303030,0xfd353535,0xf32a2a2a,0xdf1d1d1d,0xbb0d0d0d,0x83000000,0x4b000000,0x18000000,0x3000000, + 0xffffff,0xffffff,0xffffff,0x3edcdcdc,0x93dbdbdb,0xd5dedede,0xfadcdcdc,0xd8d1d1d1,0x9ec8c8c8,0x509d9d9d,0xc000000,0x3000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0x60dcdcdc,0xdbe3e3e3,0xffe2e2e2,0xffd3d3d3,0xffcecece,0xffcdcdcd,0xffd7d7d7,0xe6c5c5c5,0x838d8d8d,0x18000000,0x4000000,0xffffff, + 0xffffff,0x3edddcdc,0xdbdadada,0xffd8d8d8,0xffaaa9a9,0xff434343,0xff424142,0xff686768,0xffc4c4c4,0xffbdbdbd,0xec9e9d9e,0x75595959,0x18000000,0x3000000, + 0xffffff,0x94d5d6d5,0xffd1d0d0,0xffbdbdbd,0xff000000,0xff737373,0xffbdbdbd,0xff000000,0xff717171,0xffb6b7b6,0xffabaaaa,0xc8616161,0x3d000000,0xc000000, + 0xffffff,0xd5cbcbcb,0xffbbbbbb,0xffadadad,0xff6d6d6d,0xff868686,0xffb5b5b5,0xff000000,0xff6a6a6a,0xffb1b1b1,0xffb1b1b1,0xef616161,0x61000000,0x1a000000, + 0xffffff,0xfabfbfbf,0xffababab,0xffa4a4a4,0xffb2b2b2,0xffa6a6a6,0xff545454,0xff2a2a2a,0xff979797,0xffaeaeae,0xffa2a2a2,0xfd5d5d5d,0x7c000000,0x25000000, + 0xffffff,0xd9b0b0b0,0xffa0a0a0,0xffa6a6a6,0xff9f9f9f,0xff606060,0xff000000,0xffa0a0a0,0xffa6a6a6,0xffa3a3a3,0xff8c8c8c,0xf2484848,0x85000000,0x2b000000, + 0xffffff,0xa0949494,0xff9b9b9a,0xff9a9a9a,0xffa5a5a5,0xff9d9d9d,0xffa1a1a0,0xffa4a4a4,0xff9b9b9b,0xff9a9b9a,0xff6a696a,0xdf363636,0x7c000000,0x25000000, + 0xffffff,0x516f6f6f,0xe7818181,0xff8d8d8d,0xff949494,0xff545454,0xff353535,0xff9e9e9e,0xff8f8f8f,0xff737273,0xf5414141,0xbb1a1a1a,0x61000000,0x1a000000, + 0xffffff,0xc000000,0x84505050,0xed626262,0xff6f6e6e,0xff656565,0xff353535,0xff767576,0xff636263,0xf5414140,0xcd1f1f1f,0x83000000,0x3d000000,0xc000000, + 0xffffff,0x3000000,0x18000000,0x762f2f2f,0xc93b3b3b,0xf0404040,0xfd464646,0xf3393939,0xdf2a2a2a,0xbb161616,0x83000000,0x4b000000,0x18000000,0x3000000, 0xffffff,0xffffff,0x4000000,0x18000000,0x3d000000,0x61000000,0x7c000000,0x85000000,0x7c000000,0x61000000,0x3d000000,0x18000000,0x4000000,0xffffff, 0xffffff,0xffffff,0xffffff,0x3000000,0xc000000,0x1a000000,0x25000000,0x2b000000,0x25000000,0x1a000000,0xc000000,0x3000000,0xffffff,0xffffff }; static const QRgb ImageViewer_data[] = { 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000, 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000, 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xfff0dc5c,0xfff0dc5c,0xfff0dc5c,0xfff0dc5c,0xfff0dc5c,0x3b000000,0x3d000000,0x3d000000,0x3d000000, 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000, 0x3d000000,0xfff0dc5c,0xfff0dc5c,0xfff0dc5c,0xfff0dc5c,0xfff0dc5c,0x18000000,0xf000000,0xc000000,0xfff0dc5c,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000, 0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000, 0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xff7c4000,0x29000000,0x18000000,0x12000000,0xfff0dc5c, 0xffbc8000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000, 0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xff9c6000,0xff7c4000, 0x3d000000,0x25000000,0x17000000,0xfff0dc5c,0xffbc8000,0xffac7000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000, 0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000, 0xffd09c14,0xffac7000,0xff9c6000,0xff7c4000,0x4e000000,0x2e000000,0x1b000000,0xfff0dc5c,0xffbc8000,0xffac7000,0xff9c6000,0xff7c4000,0xff7c4000,0xff7c4000, 0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000, 0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xffd09c14,0xffac7000,0xff9c6000,0xff7c4000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xffbc8000,0xffac7000, 0xff9c6000,0xff7c4000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x93000000,0x62000000,0x3b000000, 0x1f000000,0x3d000000,0xffbc8000,0xffac7000,0xff9c6000,0xff7c4000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, 0xffffffff,0xff020204,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000, 0xff9c6000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffbc8000,0xffac7000,0xff9c6000,0xff7c4000,0xffffffff,0xffffffff,0xffffffff,0xffffffff, 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff020204,0xff020204,0xff060507,0xff1f1e1d,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, 0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffbc8000,0xffac7000,0xff9c6000,0xff7c4000, 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff020204,0xff030305,0xff020204,0xff030304,0xff020204,0xff020204,0xffffffff, 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3e000000, 0xffbc8000,0xffac7000,0xff9c6000,0xff7c4000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff020204,0xffd6d6d5,0xff030204, 0xff8a8a89,0xff121214,0xff020204,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000, 0x66000000,0x3d000000,0x21000000,0x42000000,0xffbc8000,0xffac7000,0xff9c6000,0xff7c4000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, 0xffffffff,0xff020204,0xff795407,0xffd7b00b,0xff4d3c06,0xff1d1d1e,0xff020204,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000, 0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0x2a000000,0x4f000000,0xffbc8000,0xffac7000,0xff9c6000,0xff7c4000,0xffffffff,0xffffffff, 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff020204,0xffedb50b,0xfff2d523,0xffb68608,0xff302305,0xff020204,0xffffffff,0xffffffff,0xffffffff, 0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0x40000000,0x6a000000,0xffbc8000,0xffac7000, 0xff645730,0xff524428,0xff7b807b,0xff7c827b,0xff434c42,0xff707570,0xffffffff,0xffffffff,0xffffffff,0xff020204,0xffbdbbba,0xff9c7226,0xffc3c3c2,0xfff4f4f3, 0xff030304,0xff6a696a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000, 0x64000000,0x91000000,0xffbc8000,0xff7c6b42,0xffa1a3a0,0xffd7d8d7,0xfffafafa,0xffd7d8d7,0xff9fa29f,0xff5f655f,0xff808780,0xffffffff,0xff8a8a8b,0xfff9f9f7, 0xfffefefc,0xfffdfdfb,0xfffefefc,0xfffefefc,0xff020204,0xff020204,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000, 0xff9c6000,0x99000000,0x66000000,0x3d000000,0x92000000,0xb8000000,0xff7c6f40,0xffc7c9c7,0xffa28c67,0xff825e35,0xffdcdddb,0xffd3d5d3,0xffc6c8c6,0xffc6c7c6, 0xff767a76,0xff3f483e,0xff020204,0xffd5d5d4,0xfffdfdfb,0xfffdfdfb,0xfff9f9f8,0xffcccccc,0xffd2d2d2,0xff151515,0xff020204,0xffffffff,0xffffffff,0xffffffff, 0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0xbd000000,0xf1454545,0xffbdc0bd,0xffa18344,0xff987029,0xff855d2c, 0xffe4e6e4,0xffe2e4e2,0xffdee0de,0xffcdcfcd,0xffc6c7c5,0xff5d615d,0xff596159,0xfffcfcfa,0xfffcfcfa,0xfffcfcfa,0xfffcfcfa,0xfffdfdfb,0xfffcfcfa,0xff1e1e1d, 0xff080709,0xff343436,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0xef000000,0xfe979797, 0xffa3905c,0xffa47b29,0xff9f772f,0xff8a6332,0xffe8ebe8,0xffe7eae7,0xffe4e7e4,0xffdedfdd,0xffc5c7c5,0xff9d9f9d,0xff394239,0xfffcfcfa,0xffeaeae9,0xfffdfdfb, 0xfffdfdfb,0xfffcfcfa,0xfffdfdfb,0xff1f1f21,0xff2f2f2f,0xff020204,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000, 0x66000000,0x3d000000,0xfd000000,0xffd5d5d5,0xff9f7d2a,0xffa77f2c,0xffa17a32,0xff8b6432,0xffe8ece8,0xffe8ebe8,0xffe6e9e6,0xffe1e3e1,0xff535554,0xffd6d7d6, 0xff303830,0xfffdfdfb,0xffe5e5e5,0xfffcfcfa,0xfffbfbf9,0xfffcfcfb,0xfffcfcfa,0xff454546,0xff070709,0xff020204,0xffffffff,0xffffffff,0xffffffff,0xffbc8000, 0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0xfe000000,0xfffafafa,0xffa2791c,0xffa67d2b,0xffa17a32,0xff8b6432,0xffe8ebe8,0xffe7ebe7, 0xffe6e9e6,0xffe1e4e1,0xffb89031,0xfffafafa,0xff2a302a,0xfffdfdfb,0xffe5e5e5,0xfffdfdfb,0xfffcfcfa,0xfffcfcfa,0xfff4e8c8,0xff654f0c,0xff020204,0xff211f19, 0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0xfd000000,0xffd5d5d5,0xff9f7d2b,0xffa07626, 0xff986d29,0xff875f2e,0xffe7ebe7,0xffe7eae6,0xffe5e8e5,0xffd5af32,0xffcba939,0xffd2d3d2,0xff252c25,0xff4d4d4d,0xfffdfdfb,0xfffcfcfb,0xfffdfdfb,0xfffcfcfa, 0xffccb688,0xffc08708,0xff684907,0xffecb50b,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000, 0xe4000000,0xfe979797,0xffa3905d,0xffa67b2b,0xffa27733,0xff815629,0xffdfdfdf,0xffe3e5e2,0xffe2e5e2,0xffd4ae2e,0xffbeaa65,0xff919391,0xff20261f,0xff020204, 0xfffdfdfb,0xfffcfcfa,0xfffcfcfb,0xfffdfdfb,0xff604309,0xfff3ba0c,0xfff2b90c,0xfff5bd0c,0xfff4bc0c,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000, 0xff9c6000,0x99000000,0x66000000,0x3d000000,0xbd000000,0xe7454545,0xffbdc0be,0xffa38346,0xff9a702b,0xff885d2f,0xffe7e7e7,0xffdbdbdb,0xffa57c29,0xffc2a445, 0xffb6b7b6,0xff585958,0xff1f231e,0xff62561d,0xfff2f2f0,0xfffcfcfa,0xffc0c0be,0xff020204,0xff7d5306,0xfff5bd0c,0xfff5bd0c,0xfff5bc0c,0xffe2a60c,0xffffffff, 0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0x92000000,0xb8000000,0xff9c7720,0xffc8c8c8,0xffa38c68,0xff835e36, 0xffdddddd,0xffd4d4d4,0xffc5c5c5,0xffb5b5b5,0xff6b6b6b,0xffe4e4e4,0xffcacbca,0xff1e231e,0xff262c27,0xff2e2e30,0xff2e2e30,0xff2e2e31,0xff754a04,0xffe2a90a, 0xffd29609,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0x64000000,0x91000000, 0xffbc8000,0xff956d22,0xffa2a2a2,0xffd8d8d8,0xfffafafa,0xffd5d5d5,0xff979797,0xff4e4e4e,0xffe1e1e1,0xffffffff,0xffffffff,0xffc9c9c9,0xff1a1d19,0xff696d68, 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000, 0x66000000,0x3d000000,0x40000000,0xfff0dc5c,0xffbc8000,0xffac7000,0xff815919,0xff926a15,0xff906813,0xff8f6712,0xff8d6510,0xff8a620d,0xff646464,0xfffafafa, 0xffffffff,0xffffffff,0xffc8c8c8,0xff161716,0xff191f19,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000, 0xffd09c14,0xffac7000,0xff9c6000,0xff7c4000,0x66000000,0x3d000000,0x28000000,0xfff0dc5c,0xffbc8000,0xffac7000,0xffd09c14,0xffd09c14,0xffd09c14,0xffd09c14, 0xffd09c14,0xffd09c14,0xff2b2b2b,0xff626262,0xfffafafa,0xffffffff,0xffffffff,0xffc8c8c8,0xff131313,0xff171b17,0xffd09c14,0xffd09c14,0xffd09c14,0xffd09c14, 0xffd09c14,0xffd09c14,0xffd09c14,0xffd09c14,0xffd09c14,0xffac7000,0xff9c6000,0xff7c4000,0x62000000,0x3b000000,0x1d000000,0xfff0dc5c,0xffbc8000,0xffac7000, 0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xff252525,0xff5e5e5e,0xfffafafa,0xffffffff,0xffffffff,0xffcacaca,0xff161616, 0xff181818,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xff9c6000,0xff7c4000,0x5a000000,0x36000000, 0x17000000,0xfff0dc5c,0xffbc8000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff010a04,0xff545654, 0xfffafafa,0xffffffff,0xffffffff,0xff676a68,0xff020e06,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000, 0xff9c6000,0xff7c4000,0x4e000000,0x2e000000,0x12000000,0xfff0dc5c,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0x93000000,0x99000000,0x9b000000,0xa1000000, 0xad000000,0xc0000000,0xd5000000,0xe9000000,0xf8555555,0xfffafafa,0xfa858585,0xe6000000,0xcf000000,0xb7000000,0xa4000000,0x9c000000,0x99000000,0x99000000, 0x99000000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000, 0x62000000,0x66000000,0x67000000,0x6a000000,0x74000000,0x89000000,0xab000000,0xce000000,0xe8000000,0xf4303030,0xeb000000,0xd3000000,0xaf000000,0x8c000000, 0x75000000,0x6a000000,0x67000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000, 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3e000000,0x3f000000,0x44000000,0x4b000000,0x54000000,0x5d000000,0x63000000, 0x65000000,0x60000000,0x57000000,0x4e000000,0x45000000,0x40000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000, 0x18000000,0xf000000 }; static const QRgb Ipkg_data[] = { - 0xffffff,0xffffff,0xffffff,0x1181818,0x1181818,0x2181818,0x3181818,0x4000000,0x7242424,0xf111111,0x1e111111,0x30151515,0x44161616,0x51161616, - 0x59141414,0x5b161616,0x5a141414,0x54121212,0x4a151515,0x3e151515,0x2f161616,0x22161616,0x1a141414,0x120e0e0e,0xb171717,0x8202020,0x4181818,0x3181818, - 0x2181818,0x1181818,0x1181818,0xffffff,0xffffff,0x1181818,0x2181818,0x3181818,0x5181818,0x7181818,0xb171717,0x10101010,0x1a141414,0x2f161616, - 0x50161616,0x75141414,0x94151515,0xa8151515,0xb2141414,0xb3141414,0xaf141414,0xaa151515,0x9d151515,0x8a141414,0x74161616,0x5d161616,0x48121212,0x36181818, - 0x27141414,0x1b131313,0x131b1b1b,0xc181818,0x7181818,0x5181818,0x2181818,0x1181818,0x1181818,0x3181818,0x6181818,0xc181818,0x13181818,0x1b131313, - 0x24151515,0x30151515,0x47161616,0x6d171717,0x9a161616,0xc0151515,0xe4495e64,0xf36f97a2,0xfb89c0d0,0xfe92d6ec,0xf977bacf,0xf1538d9e,0xe6325560,0xd2131313, - 0xc4151515,0xaf161616,0x96141414,0x7d161616,0x64141414,0x4e171717,0x39161616,0x28191919,0x1a181818,0x10181818,0x8181818,0x3181818,0x3181818,0x7181818, - 0x15181818,0x27181818,0x3c181818,0x4f171717,0x61181818,0x75181818,0x90151515,0xb4151515,0xd9242b2d,0xf4658792,0xffa3deee,0xffa4dff1,0xff9dddf0,0xff91d9ee, - 0xff82d3ec,0xff6ecce9,0xff5cc4e4,0xff3c7586,0xfc413229,0xf23d2417,0xda1d1916,0xc7161616,0xb1161616,0x9b171717,0x81181818,0x66191919,0x4c181818,0x32181818, - 0x18181818,0x9181818,0x6181818,0x14181818,0x33181818,0x5f181818,0x83151515,0x9c191919,0xaf171717,0xc1181818,0xd4171717,0xe71e1414,0xf86a828d,0xffa0def0, - 0xffa2def1,0xffa0def0,0xff99dbef,0xff8bd7ed,0xff78d0ea,0xff62c8e7,0xff4ec1e4,0xff3dbbe1,0xff4c7a83,0xff462617,0xff201915,0xfc3f2518,0xf24c2a19,0xdc342218, - 0xc3161616,0xb2181818,0x96181818,0x6d181818,0x3a181818,0x16181818,0xe181818,0x25181818,0x59181818,0x9c1b1717,0xcb2e1313,0xdf3f0d0d,0xec500a0a,0xf65d0505, - 0xfd680202,0xff75454c,0xff93d6ec,0xff99dbef,0xff9adcf0,0xff99dbef,0xff90d8ee,0xff82d3ec,0xff6acbe8,0xff53c3e5,0xff3dbbe1,0xff2db2da,0xff2ba2c5,0xff89674f, - 0xffc3531f,0xff9f481d,0xff6d361b,0xff342119,0xfe322119,0xf6512d1c,0xe34e2c1b,0xa8221c19,0x5e181818,0x24181818,0x21181818,0x3d181818,0x77181818,0xc52d1313, - 0xfd770101,0xff780000,0xff750000,0xff710000,0xff6c0000,0xff778190,0xff87d5ed,0xff8bd7ed,0xff8cd7ed,0xff8bd7ed,0xff82d3ec,0xff70cde9,0xff58c5e5,0xff3ebbe1, - 0xff2cafd6,0xff289ec2,0xff2591b2,0xff586f6f,0xffc0521e,0xffd15920,0xffe16123,0xffed6625,0xffd55f25,0xff9a4921,0xff482a1c,0xd246291c,0x71181818,0x2f181818, - 0x53181818,0x6c181818,0x99181818,0xcc181818,0xed3f0e0e,0xff780000,0xff740000,0xff6f0000,0xff690000,0xff6eadc4,0xff75cfea,0xff76cfea,0xff76cfea,0xff74ceea, - 0xff69cbe8,0xff55c4e5,0xff3abae1,0xff2ba9cf,0xff2696b8,0xff2287a5,0xff1f7b97,0xff326d7c,0xffb64f1e,0xffcb5821,0xffdb5f24,0xffe96628,0xfff36c2b,0xffa04c25, - 0xf9512e1e,0xc1181818,0x7b181818,0x3a181818,0x9a181818,0xab181818,0xc3181818,0xdd181818,0xea181818,0xf6540808,0xff730000,0xff6e0000,0xff670000,0xff5ec3e1, - 0xff5ec7e6,0xff5bc6e6,0xff58c5e5,0xff51c2e4,0xff44bee2,0xff2eb6df,0xff289ec2,0xff2389a8,0xff1f7995,0xff1c6d86,0xff19657b,0xff1a6176,0xff8e401c,0xffc45723, - 0xffd76028,0xffe6682a,0xffe0672c,0xff36241a,0xe7291f1a,0xcc181818,0x92181818,0x5e181818,0xd9593d1f,0xf48a5824,0xf1714a21,0xf0593d1f,0xf13e2e1c,0xf5542e1b, - 0xfd5d0f07,0xfe54160a,0xff461c0c,0xff47a6c1,0xff44bee2,0xff3dbbe1,0xff34b8e0,0xff2db1d9,0xff29a3c7,0xff248fb0,0xff1f7a96,0xff1b6981,0xff175c71,0xff155568, - 0xff144f61,0xff154756,0xff221712,0xff231913,0xff60321c,0xffa54e25,0xff6c3921,0xf64f2e1e,0xed181818,0xe1181818,0xbd181818,0x93181818,0xbd181818,0xe5553a1e, - 0xffa86927,0xffaa6a27,0xffaa6a27,0xffaa6a27,0xffab6124,0xff5c3714,0xff462c10,0xff38808e,0xff2db2da,0xff2ba8ce,0xff289ec1,0xff2591b2,0xff20809d,0xff1c6d86, - 0xff175b70,0xff134d5e,0xff114554,0xff10404f,0xff10404e,0xff0f2f38,0xff101010,0xff131312,0xff271b16,0xfe5e2f19,0xff9a5521,0xffc2812e,0xffd09936,0xfeca9435, - 0xed926d2c,0xbc4b3c20,0x93181818,0xbc181818,0xe24a341d,0xfea66827,0xffaa6a27,0xffaa6a27,0xffaa6a27,0xffae6927,0xff8f4f1d,0xff39524d,0xff289dc0,0xff2593b4, - 0xff2286a4,0xff1e7893,0xff1a677e,0xff165669,0xff124656,0xff0f3a47,0xff0d3541,0xff0d333e,0xff0d3540,0xff151a1e,0xff4d2211,0xff91501e,0xffc1802d,0xffd09936, - 0xffd09936,0xffc5822e,0xf26d5426,0xd926221a,0xb5181818,0x91181818,0x57181818,0x8a181818,0xbc181818,0xde402f1c,0xfda36626,0xffaa6a27,0xffaa6a27,0xffaa6a27, - 0xffaa6a27,0xffaf6425,0xff536157,0xff21829f,0xff1d748e,0xff19647a,0xff155466,0xff114453,0xff0e3743,0xff0c2e39,0xff1b2730,0xff502f23,0xff8f5120,0xffbe802e, - 0xffd09936,0xffd09936,0xffce9635,0xffb06825,0xff75290f,0xff3c0101,0xc9181818,0xa3181818,0x76181818,0x53181818,0x28181818,0x52181818,0x8c181818,0xbe181818, - 0xdf37291b,0xffa26525,0xffaa6a27,0xffaa6a27,0xffaa6a27,0xffaa6a27,0xffad6a27,0xff976134,0xff1e6478,0xff155568,0xff144555,0xff272a33,0xff5a2b1e,0xff965020, - 0xffbf802d,0xffd09936,0xffd09936,0xffd09936,0xffc38930,0xff8a4c1b,0xff3f1006,0xff310000,0xff390101,0xff400202,0x9b191919,0x6a181818,0x40181818,0x25181818, - 0x10181818,0x29181818,0x56181818,0x93181818,0xc5191919,0xff6c4019,0xff82511e,0xff88551f,0xff905a21,0xffa26327,0xffb66e2e,0xffb26b29,0xffb36727,0xff6a2b1b, - 0xff9c4f1e,0xffc0802d,0xffd09936,0xffd09936,0xffd09936,0xffd09936,0xffa4732a,0xff593515,0xff2a0403,0xff320000,0xff3d0000,0xff490000,0xff510101,0xff550707, - 0x7b171717,0x4a181818,0x26181818,0x12181818,0x8181818,0x15181818,0x33181818,0x65181818,0x9d181818,0xffc86637,0xff9e562b,0xff98552b,0xff894f28,0xff7f4b25, - 0xff7c4a24,0xffb9693d,0xfff77f4a,0xffa04e1d,0xffd09936,0xffd09936,0xffd09936,0xffc48e32,0xff81561f,0xff3a1b0d,0xff230909,0xff2d0606,0xff3c0202,0xff4a0000, - 0xff580000,0xff660101,0xff6a0707,0xff680f0f,0x6d171717,0x3f181818,0x1f181818,0xd181818,0x5181818,0xf181818,0x23181818,0x49181818,0x7d181818,0xffd66d3e, - 0xffef7c49,0xfffc8853,0xffff8e5c,0xfffe9261,0xfffd9262,0xfffb9061,0xfff88c5b,0xff460202,0xff7f4d1c,0xffac792b,0xff653a15,0xff2e0502,0xff2c0202,0xff300606, - 0xff320909,0xff400606,0xff550202,0xff670000,0xff770101,0xff7f0808,0xff7f1010,0xff761616,0x6a181818,0x3d181818,0x1e181818,0xd181818,0x4181818,0xd181818, - 0x1e181818,0x3f181818,0x6c181818,0xffd16c3f,0xffed7d4b,0xfffb8956,0xffff915f,0xffff9666,0xfffe9769,0xfffb9567,0xfff88f61,0xff3a0202,0xff360101,0xff350000, - 0xff370000,0xff3c0000,0xff420202,0xff440606,0xff420909,0xff560606,0xff710202,0xff840303,0xff8f0b0b,0xff951212,0xff8d1818,0xff7d1d1d,0x68181818,0x3c181818, - 0x1d181818,0xc181818,0x4181818,0xc181818,0x1d181818,0x3b181818,0x66181818,0xffcb6b3f,0xffeb7d4b,0xfffb8b59,0xffff9362,0xffff9869,0xfffd996c,0xfffa976c, - 0xfff79366,0xff470303,0xff480101,0xff4c0101,0xff500000,0xff570000,0xff5c0202,0xff5a0606,0xff550909,0xff6c0606,0xff890606,0xff990d0d,0xffa11414,0xffa31c1c, - 0xff942121,0xff7c2121,0x68181818,0x3c181818,0x1d181818,0xc181818,0x4181818,0xb181818,0x1b181818,0x39181818,0x63181818,0xffc7693f,0xffe97c4c,0xfffb8b59, - 0xffff9464,0xffff996b,0xfffd9b6e,0xfffa996e,0xfff69469,0xff530505,0xff5b0202,0xff630101,0xff6b0000,0xff720000,0xff760202,0xff6e0606,0xff650a0a,0xff7b0a0a, - 0xff981010,0xffa81818,0xffae2020,0xffab2323,0xff982626,0xff792525,0x67181818,0x3b181818,0x1d181818,0xc181818,0x3181818,0xa181818,0x19181818,0x35181818, - 0x5d181818,0xffc0673e,0xffe57b4b,0xfffa8a59,0xfffe9363,0xffff996b,0xfffd9b6f,0xfff99a6f,0xfff5966a,0xff5d0606,0xff6b0303,0xff780101,0xff800000,0xff890000, - 0xff8a0202,0xff7d0909,0xff6f1010,0xff861313,0xffa21b1b,0xffb12323,0xffb42929,0xffb02d2d,0xff972c2c,0xff752727,0x65181818,0x3a181818,0x1c181818,0xc181818, - 0x3181818,0x9181818,0x16181818,0x2e181818,0x52181818,0xffb8623c,0xffdc7749,0xfff58756,0xfffd9161,0xfffe996a,0xfffc9b6e,0xfff8996f,0xfff4956b,0xff610808, - 0xff750404,0xff880101,0xff920000,0xff9a0000,0xff980505,0xff871111,0xff761717,0xff8d1c1c,0xffaa2626,0xffb62e2e,0xffb83333,0xffb03434,0xff953030,0xff6e2828, - 0x60181818,0x37181818,0x1b181818,0xb181818,0x2181818,0x7181818,0x11181818,0x25181818,0x43181818,0xc69e5d40,0xffcb6f46,0xffe98153,0xfff88d5e,0xfffd9667, - 0xfffb986c,0xfff7986d,0xfff39469,0xff610909,0xff7b0404,0xff920101,0xff9f0000,0xffa60404,0xffa21111,0xff8c1b1b,0xff791f1f,0xff912727,0xffad3131,0xffb73636, - 0xffb53a3a,0xffa93838,0xff8a3131,0xff652929,0x57181818,0x31181818,0x18181818,0xa181818,0x1181818,0x5181818,0xc181818,0x1a181818,0x32181818,0x5a363636, - 0xc59b6247,0xfed4774e,0xffec8759,0xfff99162,0xfffb9669,0xfff59569,0xfff09267,0xff600a0a,0xff800505,0xff9b0101,0xffa90404,0xffad1010,0xffa71e1e,0xff902424, - 0xff7b2828,0xff912f2f,0xffa73838,0xffab3d3d,0xffa03b3b,0xff8d3737,0xff712e2e,0xff582727,0x48181818,0x29181818,0x13181818,0x8181818,0x1181818,0x3181818, - 0x7181818,0x11181818,0x21181818,0x39181818,0x61373737,0xc19c6851,0xfdd97c54,0xffed895c,0xfff69063,0xfff39165,0xffee8e63,0xff600b0b,0xff830505,0xffa10404, - 0xffad1010,0xffb11e1e,0xffa92929,0xff8f2d2d,0xff762d2d,0xff853333,0xff903939,0xff883838,0xff773333,0xfb682f2f,0xd8632c2c,0x834d2424,0x36181818,0x1e181818, - 0xe181818,0x6181818,0xffffff,0x1181818,0x4181818,0xa181818,0x14181818,0x24181818,0x3b181818,0x62373737,0xb9966a55,0xfed97d54,0xffeb885c,0xffed8b5f, - 0xffe9895e,0xff5e0b0b,0xff850707,0xffa31010,0xffad1e1e,0xffaa2929,0xff9c3030,0xff7e3030,0xff622c2c,0xff673030,0xfe683030,0xee673131,0xba592b2b,0x6a241c1c, - 0x4d181818,0x37181818,0x23181818,0x13181818,0x9181818,0x4181818,0xffffff,0x1181818,0x2181818,0x5181818,0xa181818,0x15181818,0x24181818,0x3a181818, - 0x5f333333,0xb3946957,0xfcd87c53,0xffe18256,0xffe18256,0xff5b0d0d,0xff801010,0xff981b1b,0xff9b2727,0xff902e2e,0xff7b3030,0xff5e2c2c,0xfb4d2929,0xd9582c2c, - 0x8d3d2323,0x5e181818,0x4d181818,0x3d181818,0x2d181818,0x1f181818,0x14181818,0xa181818,0x5181818,0x2181818,0xffffff,0xffffff,0x1181818,0x2181818, - 0x5181818,0xb181818,0x14181818,0x23181818,0x38181818,0x5a303030,0xa9896554,0xfacf754f,0xffd7794f,0xff511212,0xff6b1818,0xff792121,0xff732727,0xfe652a2a, - 0xe8602b2b,0xb44d2828,0x691d1919,0x55181818,0x46181818,0x38181818,0x2b181818,0x21181818,0x17181818,0xf181818,0x9181818,0x5181818,0x2181818,0x1181818, - 0xffffff,0xffffff,0xffffff,0x1181818,0x2181818,0x5181818,0xa181818,0x14181818,0x22181818,0x36181818,0x552a2a2a,0x9a836251,0xf7ca7147,0xff441616, - 0xff4e1b1b,0xf65c2121,0xca5b2525,0x7e321e1e,0x5b181818,0x4c181818,0x3d181818,0x31181818,0x26181818,0x1d181818,0x15181818,0xf181818,0xa181818,0x6181818, - 0x4181818,0x2181818,0x1181818,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1181818,0x2181818,0x4181818,0xa181818,0x12181818,0x20181818, - 0x31181818,0x48272727,0xa782493f,0xdb571818,0x974b1c1c,0x5a181818,0x4f181818,0x42181818,0x35181818,0x2a181818,0x20181818,0x18181818,0x12181818,0xd181818, - 0x9181818,0x6181818,0x4181818,0x2181818,0x1181818,0x1181818,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1181818, - 0x2181818,0x4181818,0x9181818,0x10181818,0x1b181818,0x27181818,0x34272727,0x38181818,0x39181818,0x34181818,0x2c181818,0x23181818,0x1b181818,0x14181818, - 0xe181818,0xa181818,0x7181818,0x5181818,0x3181818,0x2181818,0x1181818,0x1181818,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0x1181818,0x2181818,0x4181818,0x7181818,0xd181818,0x14181818,0x19181818,0x1d181818,0x1d181818,0x1a181818, - 0x15181818,0x10181818,0xc181818,0x8181818,0x5181818,0x4181818,0x2181818,0x1181818,0x1181818,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0x1242424,0x1242424,0x2242424,0x3242424,0x4000000,0x7333333,0xf1b1b1b,0x1e1b1b1b,0x30202020,0x44222222,0x51222222, + 0x591f1f1f,0x5b222222,0x5a1f1f1f,0x541d1d1d,0x4a202020,0x3e202020,0x2f222222,0x22222222,0x1a1f1f1f,0x12171717,0xb232323,0x82e2e2e,0x4242424,0x3242424, + 0x2242424,0x1242424,0x1242424,0xffffff,0xffffff,0x1242424,0x2242424,0x3242424,0x5242424,0x7242424,0xb232323,0x101a1a1a,0x1a1f1f1f,0x2f222222, + 0x50222222,0x751f1f1f,0x94202020,0xa8202020,0xb21f1f1f,0xb31f1f1f,0xaf1f1f1f,0xaa202020,0x9d202020,0x8a1f1f1f,0x74222222,0x5d222222,0x481d1d1d,0x36242424, + 0x271f1f1f,0x1b1e1e1e,0x13282828,0xc242424,0x7242424,0x5242424,0x2242424,0x1242424,0x1242424,0x3242424,0x6242424,0xc242424,0x13242424,0x1b1e1e1e, + 0x24202020,0x30202020,0x47222222,0x6d232323,0x9a222222,0xc0202020,0xe45b7076,0xf380a5af,0xfb99cad7,0xfea1ddef,0xf988c4d7,0xf1659cac,0xe6426772,0xd21e1e1e, + 0xc4202020,0xaf222222,0x961f1f1f,0x7d222222,0x641f1f1f,0x4e232323,0x39222222,0x28252525,0x1a242424,0x10242424,0x8242424,0x3242424,0x3242424,0x7242424, + 0x15242424,0x27242424,0x3c242424,0x4f232323,0x61242424,0x75242424,0x90202020,0xb4202020,0xd9333b3d,0xf47797a1,0xffb0e3f1,0xffb1e4f3,0xffabe3f3,0xffa0dff1, + 0xff92daef,0xff7fd4ed,0xff6ecde8,0xff4d8696,0xfc524238,0xf24e3323,0xda2a2522,0xc7222222,0xb1222222,0x9b232323,0x81242424,0x66252525,0x4c242424,0x32242424, + 0x18242424,0x9242424,0x6242424,0x14242424,0x33242424,0x5f242424,0x83202020,0x9c252525,0xaf232323,0xc1242424,0xd4232323,0xe72b1f1f,0xf87b929c,0xffade3f3, + 0xffafe3f3,0xffade3f3,0xffa7e1f2,0xff9addf0,0xff89d7ee,0xff74d1eb,0xff60cbe8,0xff4ec5e6,0xff5e8b93,0xff583523,0xff2e2520,0xfc503424,0xf25e3925,0xdc453024, + 0xc3222222,0xb2242424,0x96242424,0x6d242424,0x3a242424,0x16242424,0xe242424,0x25242424,0x59242424,0x9c282323,0xcb3e1e1e,0xdf501616,0xec621212,0xf66f0a0a, + 0xfd7a0505,0xff86575e,0xffa2ddef,0xffa7e1f2,0xffa8e2f3,0xffa7e1f2,0xff9fdef1,0xff92daef,0xff7bd3ec,0xff65cce9,0xff4ec5e6,0xff3dbde0,0xff3bafce,0xff997961, + 0xffcc652d,0xffad5a2a,0xff7e4728,0xff452f25,0xfe422f25,0xf6633d29,0xe3603c28,0xa8302925,0x5e242424,0x24242424,0x21242424,0x3d242424,0x77242424,0xc53d1e1e, + 0xfd880303,0xff890000,0xff860000,0xff820000,0xff7d0000,0xff88919f,0xff97dcf0,0xff9addf0,0xff9bddf0,0xff9addf0,0xff92daef,0xff81d5ed,0xff6acee9,0xff4fc5e6, + 0xff3cbbdd,0xff37accb,0xff34a0bd,0xff6a8080,0xffca642b,0xffd86b2e,0xffe67331,0xfff07834,0xffdc7134,0xffa85b2f,0xff5a3929,0xd2583829,0x71242424,0x2f242424, + 0x53242424,0x6c242424,0x99242424,0xcc242424,0xed501717,0xff890000,0xff850000,0xff800000,0xff7a0000,0xff7fb9cd,0xff86d7ee,0xff87d7ee,0xff87d7ee,0xff85d6ee, + 0xff7ad3ec,0xff67cde9,0xff4bc4e6,0xff3bb6d7,0xff35a4c3,0xff3097b2,0xff2d8ca5,0xff427e8d,0xffc1612b,0xffd36a2f,0xffe17133,0xffed7837,0xfff57d3b,0xffad5e34, + 0xf9633e2b,0xc1242424,0x7b242424,0x3a242424,0x9a242424,0xab242424,0xc3242424,0xdd242424,0xea242424,0xf6660f0f,0xff840000,0xff7f0000,0xff790000,0xff70cce6, + 0xff70d0ea,0xff6dcfea,0xff6acee9,0xff63cbe8,0xff56c8e7,0xff3ec1e4,0xff37accb,0xff3199b5,0xff2d8aa4,0xff297e96,0xff25778c,0xff277387,0xff9d5129,0xffcd6931, + 0xffdd7237,0xffea7a39,0xffe5793c,0xff473327,0xe7382d27,0xcc242424,0x92242424,0x5e242424,0xd96b4e2d,0xf49a6a33,0xf1825c2f,0xf06b4e2d,0xf14f3e29,0xf5663e28, + 0xfd6f190d,0xfe662212,0xff582914,0xff59b3cb,0xff56c8e7,0xff4ec5e6,0xff45c3e5,0xff3dbddf,0xff38b0d0,0xff339ebc,0xff2d8ba4,0xff287a91,0xff236e82,0xff20677a, + 0xff1f6173,0xff205968,0xff30231d,0xff31251e,0xff724229,0xffb26034,0xff7d4a2f,0xf6613e2b,0xed242424,0xe1242424,0xbd242424,0x93242424,0xbd242424,0xe5674b2b, + 0xffb57a36,0xffb67b36,0xffb67b36,0xffb67b36,0xffb77333,0xff6e481f,0xff583c1a,0xff49909d,0xff3dbde0,0xff3bb5d6,0xff37accb,0xff34a0bd,0xff2e90ab,0xff297e96, + 0xff236d81,0xff1e5f70,0xff1b5766,0xff1a5161,0xff1a5160,0xff193f49,0xff1a1a1a,0xff1e1e1d,0xff362822,0xfe703f25,0xffa8672f,0xffcb913e,0xffd7a747,0xfed2a346, + 0xeda17e3c,0xbc5d4d2e,0x93242424,0xbc242424,0xe25c452a,0xfeb37a36,0xffb67b36,0xffb67b36,0xffb67b36,0xffba7a36,0xff9e612a,0xff4a645f,0xff37abca,0xff34a2bf, + 0xff3096b1,0xff2b89a2,0xff27798e,0xff22687a,0xff1d5868,0xff194b59,0xff164652,0xff16434f,0xff164651,0xff20272b,0xff5f301b,0xffa0622b,0xffcb903d,0xffd7a747, + 0xffd7a747,0xffce923e,0xf27e6635,0xd9353027,0xb5242424,0x91242424,0x57242424,0x8a242424,0xbc242424,0xde513f29,0xfdb07835,0xffb67b36,0xffb67b36,0xffb67b36, + 0xffb67b36,0xffbb7634,0xff657369,0xff2f92ad,0xff2a859d,0xff25768b,0xff206678,0xff1b5665,0xff174854,0xff143e4a,0xff283640,0xff623f31,0xff9e632e,0xffc8903e, + 0xffd7a747,0xffd7a747,0xffd6a446,0xffbc7a34,0xff863819,0xff4d0303,0xc9242424,0xa3242424,0x76242424,0x53242424,0x28242424,0x52242424,0x8c242424,0xbe242424, + 0xdf483828,0xffaf7734,0xffb67b36,0xffb67b36,0xffb67b36,0xffb67b36,0xffb97b36,0xffa57345,0xff2b7689,0xff20677a,0xff1f5767,0xff363943,0xff6c3b2b,0xffa4622e, + 0xffc9903d,0xffd7a747,0xffd7a747,0xffd7a747,0xffcc9940,0xff9a5e28,0xff501a0c,0xff410000,0xff4a0303,0xff510505,0x9b252525,0x6a242424,0x40242424,0x25242424, + 0x10242424,0x29242424,0x56242424,0x93242424,0xc5252525,0xff7d5125,0xff92632b,0xff98672d,0xff9f6c2f,0xffaf7536,0xffc17f3e,0xffbd7c38,0xffbe7936,0xff7b3b28, + 0xffaa612b,0xffca903d,0xffd7a747,0xffd7a747,0xffd7a747,0xffd7a747,0xffb18439,0xff6b4620,0xff390806,0xff420000,0xff4e0000,0xff5b0000,0xff630303,0xff670d0d, + 0x7b232323,0x4a242424,0x26242424,0x12242424,0x8242424,0x15242424,0x33242424,0x65242424,0x9d242424,0xffd17848,0xffac683b,0xffa6673b,0xff996137,0xff8f5d34, + 0xff8d5c33,0xffc47a4e,0xfff88f5c,0xffad602a,0xffd7a747,0xffd7a747,0xffd7a747,0xffcd9d42,0xff91682d,0xff4b2816,0xff311010,0xff3d0c0c,0xff4d0505,0xff5c0000, + 0xff6a0000,0xff780303,0xff7b0d0d,0xff7a1919,0x6d232323,0x3f242424,0x1f242424,0xd242424,0x5242424,0xf242424,0x23242424,0x49242424,0x7d242424,0xffdd7e4f, + 0xfff28d5b,0xfffd9865,0xffff9d6e,0xfffea173,0xfffda174,0xfffc9f73,0xfff99b6d,0xff580505,0xff8f5f29,0xffb88a3b,0xff774b20,0xff3e0a05,0xff3c0505,0xff400c0c, + 0xff421010,0xff510c0c,0xff670505,0xff790000,0xff880303,0xff8f0f0f,0xff8f1a1a,0xff872222,0x6a242424,0x3d242424,0x1e242424,0xd242424,0x4242424,0xd242424, + 0x1e242424,0x3f242424,0x6c242424,0xffd87d50,0xfff08d5d,0xfffc9968,0xffffa071,0xffffa478,0xfffea57a,0xfffca479,0xfff99e73,0xff4b0505,0xff470303,0xff460000, + 0xff480000,0xff4d0000,0xff530505,0xff560c0c,0xff531010,0xff680c0c,0xff820505,0xff940606,0xff9e1313,0xffa41d1d,0xff9c2424,0xff8d2a2a,0x68242424,0x3c242424, + 0x1d242424,0xc242424,0x4242424,0xc242424,0x1d242424,0x3b242424,0x66242424,0xffd37c50,0xffee8d5d,0xfffc9a6b,0xffffa274,0xffffa67a,0xfffda77d,0xfffba57d, + 0xfff8a278,0xff590606,0xff5a0303,0xff5e0303,0xff620000,0xff690000,0xff6e0505,0xff6c0c0c,0xff671010,0xff7d0c0c,0xff990c0c,0xffa71616,0xffae1f1f,0xffb02929, + 0xffa32f2f,0xff8d2f2f,0x68242424,0x3c242424,0x1d242424,0xc242424,0x4242424,0xb242424,0x1b242424,0x39242424,0x63242424,0xffd07a50,0xffed8d5e,0xfffc9a6b, + 0xffffa376,0xffffa77c,0xfffda97f,0xfffba77f,0xfff8a37a,0xff650a0a,0xff6d0505,0xff750303,0xff7c0000,0xff830000,0xff870505,0xff7f0c0c,0xff771212,0xff8c1212, + 0xffa61a1a,0xffb52424,0xffba2e2e,0xffb73131,0xffa63535,0xff8a3434,0x67242424,0x3b242424,0x1d242424,0xc242424,0x3242424,0xa242424,0x19242424,0x35242424, + 0x5d242424,0xffca794f,0xffe98c5d,0xfffb9a6b,0xfffea275,0xffffa77c,0xfffda980,0xfffaa880,0xfff7a47b,0xff6f0c0c,0xff7c0606,0xff890303,0xff900000,0xff990000, + 0xff9a0505,0xff8d1010,0xff801a1a,0xff961e1e,0xffaf2828,0xffbd3131,0xffbf3838,0xffbc3d3d,0xffa53c3c,0xff863636,0x65242424,0x3a242424,0x1c242424,0xc242424, + 0x3242424,0x9242424,0x16242424,0x2e242424,0x52242424,0xffc3744d,0xffe2885b,0xfff79768,0xfffda073,0xfffea77b,0xfffda97f,0xfff9a780,0xfff6a47c,0xff730f0f, + 0xff860808,0xff980303,0xffa10000,0xffa80000,0xffa60a0a,0xff971b1b,0xff872323,0xff9c2929,0xffb63535,0xffc13e3e,0xffc34343,0xffbc4545,0xffa44040,0xff7f3737, + 0x60242424,0x37242424,0x1b242424,0xb242424,0x2242424,0x7242424,0x11242424,0x25242424,0x43242424,0xc6ac6f51,0xffd38058,0xffed9165,0xfff99c70,0xfffda479, + 0xfffca67d,0xfff8a67e,0xfff5a37a,0xff731010,0xff8c0808,0xffa10303,0xffad0000,0xffb30808,0xffaf1b1b,0xff9b2828,0xff8a2d2d,0xffa03636,0xffb94141,0xffc24747, + 0xffc04b4b,0xffb64949,0xff9a4141,0xff773838,0x57242424,0x31242424,0x18242424,0xa242424,0x1242424,0x5242424,0xc242424,0x1a242424,0x32242424,0x5a474747, + 0xc5a97459,0xfedb8860,0xffef976b,0xfffaa074,0xfffca47a,0xfff7a47a,0xfff3a179,0xff721212,0xff900a0a,0xffa90303,0xffb60808,0xffb91a1a,0xffb42b2b,0xff9f3333, + 0xff8c3737,0xffa03f3f,0xffb44949,0xffb74e4e,0xffad4c4c,0xff9c4848,0xff823e3e,0xff6a3636,0x48242424,0x29242424,0x13242424,0x8242424,0x1242424,0x3242424, + 0x7242424,0x11242424,0x21242424,0x39242424,0x61484848,0xc1aa7a63,0xfddf8d66,0xfff0996e,0xfff89f75,0xfff5a077,0xfff19d75,0xff721313,0xff930a0a,0xffae0808, + 0xffb91a1a,0xffbd2b2b,0xffb63838,0xff9e3d3d,0xff873d3d,0xff954343,0xff9f4a4a,0xff984949,0xff884343,0xfb7a3f3f,0xd8753c3c,0x835f3333,0x36242424,0x1e242424, + 0xe242424,0x6242424,0xffffff,0x1242424,0x4242424,0xa242424,0x14242424,0x24242424,0x3b242424,0x62484848,0xb9a47b67,0xfedf8d66,0xffee986e,0xfff09a71, + 0xffed9970,0xff701313,0xff950d0d,0xffb01a1a,0xffb92b2b,0xffb63838,0xffaa4040,0xff8e4040,0xff743c3c,0xff794040,0xfe7a4040,0xee794141,0xba6b3b3b,0x6a332929, + 0x4d242424,0x37242424,0x23242424,0x13242424,0x9242424,0x4242424,0xffffff,0x1242424,0x2242424,0x5242424,0xa242424,0x15242424,0x24242424,0x3a242424, + 0x5f434343,0xb3a37a69,0xfcde8d65,0xffe69268,0xffe69268,0xff6d1616,0xff901a1a,0xffa62828,0xffa93636,0xff9f3e3e,0xff8c4040,0xff703c3c,0xfb5f3838,0xd96a3c3c, + 0x8d4e3131,0x5e242424,0x4d242424,0x3d242424,0x2d242424,0x1f242424,0x14242424,0xa242424,0x5242424,0x2242424,0xffffff,0xffffff,0x1242424,0x2242424, + 0x5242424,0xb242424,0x14242424,0x23242424,0x38242424,0x5a404040,0xa9997766,0xfad78661,0xffdd8a61,0xff631d1d,0xff7c2424,0xff8a2f2f,0xff843636,0xfe773939, + 0xe8723b3b,0xb45f3737,0x692a2525,0x55242424,0x46242424,0x38242424,0x2b242424,0x21242424,0x17242424,0xf242424,0x9242424,0x5242424,0x2242424,0x1242424, + 0xffffff,0xffffff,0xffffff,0x1242424,0x2242424,0x5242424,0xa242424,0x14242424,0x22242424,0x36242424,0x55393939,0x9a937463,0xf7d28259,0xff562222, + 0xff602828,0xf66e2f2f,0xca6d3434,0x7e422b2b,0x5b242424,0x4c242424,0x3d242424,0x31242424,0x26242424,0x1d242424,0x15242424,0xf242424,0xa242424,0x6242424, + 0x4242424,0x2242424,0x1242424,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1242424,0x2242424,0x4242424,0xa242424,0x12242424,0x20242424, + 0x31242424,0x48363636,0xa7925b50,0xdb692424,0x975d2929,0x5a242424,0x4f242424,0x42242424,0x35242424,0x2a242424,0x20242424,0x18242424,0x12242424,0xd242424, + 0x9242424,0x6242424,0x4242424,0x2242424,0x1242424,0x1242424,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1242424, + 0x2242424,0x4242424,0x9242424,0x10242424,0x1b242424,0x27242424,0x34363636,0x38242424,0x39242424,0x34242424,0x2c242424,0x23242424,0x1b242424,0x14242424, + 0xe242424,0xa242424,0x7242424,0x5242424,0x3242424,0x2242424,0x1242424,0x1242424,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0x1242424,0x2242424,0x4242424,0x7242424,0xd242424,0x14242424,0x19242424,0x1d242424,0x1d242424,0x1a242424, + 0x15242424,0x10242424,0xc242424,0x8242424,0x5242424,0x4242424,0x2242424,0x1242424,0x1242424,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff }; static const QRgb Language_data[] = { 0x1000000,0x4000000,0xb000000,0x17000000,0x27000000,0x39000000,0x49000000,0x58000000,0x805f3131,0x90773939,0x90763434,0x73461b1b,0x50000000,0x3d000000, 0x28000000,0x16000000,0xb000000,0x7000000,0xb000000,0x18000000,0x26000000,0x31000000,0x34000000,0x2e000000,0x21000000,0x13000000,0x8000000,0x2000000, 0xffffff,0xffffff,0xffffff,0xffffff,0x4000000,0xd000000,0x1d000000,0x32000000,0x4b000000,0x8c7b4848,0xc8c17272,0xfffc8b8b,0xfffc7576,0xfffb6666, 0xfffb5e5f,0xfffb5859,0xefe94849,0xa6981a1b,0x4c000000,0x2d000000,0x17000000,0x10000000,0x18000000,0x2b000000,0x82a66d6f,0xdfe98d8f,0xfffb777a,0xc5d83c40, 0x47350506,0x22000000,0x10000000,0x5000000,0x1000000,0xffffff,0xffffff,0xffffff,0x9000000,0x19000000,0x32000000,0x5c2b1a1a,0xcfcf8586,0xfffc8787, 0xfffb5253,0xfff90e0f,0xffe40506,0xfff30607,0xfff70607,0xfff70607,0xfff90a0b,0xfff90e0f,0xc7ac0405,0x49000000,0x29000000,0x1d000000,0x26000000,0x5a5a3738, 0xfffd9fa2,0xfffb5a5e,0xfff9282e,0xfff5161c,0xdea50f13,0x33000000,0x19000000,0x8000000,0x1000000,0xffffff,0xffffff,0xffffff,0xe000000,0x23000000, 0x4f341f1f,0xe2e69596,0xfffb6464,0xffc40506,0xff610203,0xf1430202,0xe3490202,0xf9960404,0xffde0506,0xfff70607,0xfff90607,0xfff70607,0xffc60506,0xa1630303, 0x3b000000,0x2b000000,0x36000000,0xa4b46b6d,0xfffb7579,0xfff9161c,0xfff9161c,0xfff7161c,0xff7a0b0e,0x63360506,0x1f000000,0xa000000,0x1000000,0xffffff, 0xffffff,0xffffff,0x10000000,0x28000000,0xcde46667,0xfffb5253,0xff950404,0xe6320102,0x99150000,0x6a000000,0x6e000000,0x83000000,0xdaa10404,0xfff91011, 0xfff90607,0xfff90607,0xffca0506,0xda570204,0x49000000,0x37000000,0x42000000,0xd6db8183,0xfffb5459,0xfff9161c,0xfff9161c,0xffeb151a,0xff5b080a,0x66240304, 0x20000000,0xb000000,0x1000000,0xffffff,0xffffff,0xffffff,0xe000000,0x23000000,0x62740303,0xde900404,0xe1350102,0x67090000,0x53000000,0x4c000000, 0x7d000000,0xb1000000,0xd9000000,0xfffb4849,0xfff90607,0xfff90607,0xffb90405,0xfe380101,0xfb000000,0xf0000000,0xe0000000,0xfffc8f92,0xfffa3035,0xfff9161c, 0xfff9161c,0xffb31014,0xed360506,0x4c000000,0x29000000,0x12000000,0x6000000,0x3000000,0x1000000,0x1000000,0xa000000,0x18000000,0x29000000,0x442c0101, 0x572b0101,0x4b000000,0x89000000,0xc7000000,0xfd000000,0xff000000,0xff000000,0xfffc7f80,0xfff90607,0xfff90607,0xff820304,0xff1f0101,0xff000000,0xff000000, 0xff432627,0xfffc8083,0xfff9161c,0xfff9161c,0xffeb151a,0xff67090c,0xb41a0203,0x52000000,0x31000000,0x1a000000,0xe000000,0x7000000,0x4000000,0x2000000, 0x5000000,0xe000000,0x18000000,0x21000000,0x67000000,0xbe000000,0xff000000,0xff000000,0xff000000,0xff212121,0xff8d6565,0xfffc7778,0xfff90607,0xffb90405, 0xff410202,0xff8f8787,0xffa8a8a8,0xff909090,0xffa97879,0xfffb6a6e,0xfff9161c,0xfff9161c,0xffb31014,0xff340406,0xd9000000,0x8f000000,0x43000000,0x2b000000, 0x1a000000,0x10000000,0x8000000,0x4000000,0x1000000,0x7000000,0xf000000,0x71000000,0xe0000000,0xff000000,0xfc180f0f,0xff765858,0xff8d6d6d,0xffc38888, 0xfffc8787,0xfffa3536,0xffb50405,0xff4f0202,0xff655656,0xffb4b4b4,0xffc4c4c4,0xffb7b7b7,0xffe09496,0xfffb5459,0xfff9161c,0xfff1151b,0xff6a090c,0xfe160606, 0xff000000,0xec000000,0x9d000000,0x46000000,0x30000000,0x1e000000,0x11000000,0x9000000,0xffffff,0x8000000,0x65000000,0xe8000000,0xff000000,0xf9383838, 0xff8d8484,0xfffc8f8f,0xfffb6a6a,0xfffb5e5f,0xfffa2f30,0xffbc0505,0xff540808,0xff625151,0xffaeaeae,0xffcbcbcb,0xffcdcdcd,0xffb7b7b7,0xfffc8f92,0xfffa3035, 0xfff9161c,0xffbc1115,0xff430e10,0xff7b7b7b,0xfc353535,0xff000000,0xf2000000,0x9d000000,0x4d000000,0x33000000,0x1f000000,0x11000000,0xffffff,0x35000000, 0xcd000000,0xff000000,0xf9505050,0xffc1c1c1,0xffc2c2c2,0xffe06768,0xfff91213,0xfff90607,0xffdc0506,0xff860304,0xff624747,0xffa9a9a9,0xffcccccc,0xffdcdcdc, 0xffd6d6d6,0xffccb0b0,0xfffc8083,0xfff9161c,0xfff1151b,0xff740a0d,0xff6e5b5c,0xffc9c9c9,0xffc5c5c5,0xfd4f4f4f,0xff000000,0xe6000000,0x84000000,0x4d000000, 0x31000000,0x1c000000,0xffffff,0x83000000,0xff000000,0xf9212121,0xffc2c2c2,0xffe6e6e6,0xffc9c9c9,0xffca7373,0xffcc0506,0xff700303,0xff4d0202,0xff4a2223, 0xff846969,0xffc1c1c1,0xffdcdcdc,0xffe5e5e5,0xffdadada,0xffda7e81,0xffe7141a,0xffc81217,0xffb31014,0xff471011,0xffb5b1b1,0xffdadada,0xffefefef,0xffc4c4c4, 0xfd202020,0xff000000,0xc3000000,0x69000000,0x47000000,0x2a000000,0xffffff,0xc3000000,0xff000000,0xff787878,0xfffafafa,0xffededed,0xffd7d7d7,0xffc29697, 0xff954040,0xff705a5a,0xff807a7a,0xff909090,0xffacacac,0xffcacaca,0xffe0e0e0,0xffe3e3e3,0xffd6d6d6,0xffc2c2c2,0xffaa9899,0xff8e5c5e,0xff601d1e,0xff7b6667, 0xffd2d2d2,0xffe8e8e8,0xfff6f6f6,0xfffefefe,0xff787878,0xff000000,0xe8000000,0x84000000,0x5c000000,0x38000000,0xffffff,0xef000000,0xff000000,0xffbbbbbb, 0xfffdfdfd,0xfff6f6f6,0xffe7e7e7,0xffcfcfcf,0xffb2b2b2,0xff979797,0xff908788,0xffaa8585,0xffa79999,0xffbdbdbd,0xffd1d1d1,0xffd5d5d5,0xffc9c9c9,0xffb9b9b9, 0xffadadad,0xffafafaf,0xffbcbcbc,0xffd0d0d0,0xffe4e4e4,0xfff3f3f3,0xfffbfbfb,0xfffefefe,0xffbbbbbb,0xff000000,0xfa000000,0x9a000000,0x6f000000,0x46000000, 0xffffff,0xef000000,0xff000000,0xffececec,0xfffefefe,0xfffbfbfb,0xfff0f0f0,0xffd9d9d9,0xffb9b9b9,0xffb69898,0xfff39393,0xfffb6c6c,0xfff02d2e,0xffaa8485, 0xffb9b9b9,0xffbdbdbd,0xffd9abac,0xfff68c8f,0xffef6d71,0xffc76f71,0xffc2c2c2,0xffdbdbdb,0xffeeeeee,0xfff9f9f9,0xfffefefe,0xffffffff,0xffececec,0xff000000, 0xfb000000,0xaa000000,0x7e000000,0x52000000,0xffffff,0xf0000000,0xff000000,0xffececec,0xffffffff,0xfffefefe,0xfff4f4f4,0xffdddddd,0xffb9b9b9,0xfff49292, 0xfffb4c4d,0xfff90e0f,0xffe20606,0xff7a1d1d,0xffa7a7a7,0xffc9a4a5,0xfffc9093,0xfffa4449,0xfff92127,0xff9d0e12,0xffbdabac,0xffdedede,0xfff2f2f2,0xfffdfdfd, 0xffffffff,0xffffffff,0xffececec,0xff000000,0xfc000000,0xb4000000,0x88000000,0x5a000000,0xffffff,0xf0000000,0xff000000,0xffbbbbbb,0xffffffff,0xffffffff, 0xfff5f5f5,0xffdfdfdf,0xffbbbbbb,0xfffb6c6c,0xfff90e0f,0xfff90607,0xffc10506,0xff490a0a,0xffa2a2a2,0xffd88c8e,0xfffb585c,0xfff9161c,0xfff9161c,0xff700a0d, 0xffa49090,0xffe0e0e0,0xfff4f4f4,0xfffefefe,0xffffffff,0xffffffff,0xffbbbbbb,0xff000000,0xfc000000,0xb9000000,0x8c000000,0x5e000000,0xffffff,0xc9000000, 0xff000000,0xff787878,0xffffffff,0xffffffff,0xfff7f7f7,0xffe3e3e3,0xffc4c4c4,0xffe03d3e,0xffc40506,0xffaf0405,0xff580202,0xff5c4646,0xffacacac,0xffca8183, 0xfffa3137,0xffe9151a,0xffb31014,0xff410607,0xffb7aeae,0xffe3e3e3,0xfff5f5f5,0xfffefefe,0xffffffff,0xffffffff,0xff787878,0xff000000,0xf5000000,0xb9000000, 0x8c000000,0x5e000000,0xffffff,0x92000000,0xff000000,0xfb212121,0xffc7c7c7,0xffffffff,0xfffafafa,0xffececec,0xffd6d6d6,0xffbbaeae,0xff985959,0xff672b2b, 0xff705858,0xffb6b6b6,0xffc4c4c4,0xffc1c1c1,0xffb75b5e,0xff65090b,0xff491b1b,0xff847374,0xffd5d5d5,0xffeaeaea,0xfff8f8f8,0xfffefefe,0xffffffff,0xffc7c7c7, 0xff202020,0xff000000,0xe9000000,0xb4000000,0x88000000,0x5a000000,0xffffff,0x4f000000,0xd9000000,0xff000000,0xfc525252,0xffdadada,0xfffcfcfc,0xfff5f5f5, @@ -1876,441 +1876,518 @@ static const QRgb NetHack_data[] = { 0xffa17610,0xff976e0c,0xff8e6708,0xff845f04,0xff7c5702,0xff622300,0xff550000,0xff650000,0xff6f0000,0xff390000,0xff040000,0x99000000,0x66000000,0x3d000000, 0x1f000000,0x3d000000,0xff622200,0xfff37a7a,0xffcd2727,0xff8a0a0a,0xff5e0101,0xffc0a56d,0xffc2ab6f,0xffc1a76a,0xffc0a461,0xffbc7b49,0xffb7312b,0xffb32323, 0xffb01f1f,0xffab1b1b,0xffa51818,0xff9c1b14,0xff954d10,0xff8d670b,0xff846008,0xff7c5904,0xff755302,0xff642e00,0xff540000,0xff630000,0xff6b0000,0xff380000, 0xff030000,0x9a000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff652400,0xfff37a7a,0xffcd2727,0xff8a0a0a,0xff5e0101,0xffb99f65,0xffbca265,0xffbba05e, 0xffb77848,0xffb2322d,0xffaf2626,0xffac2222,0xffa81e1e,0xffa31a1a,0xff9a1717,0xff921313,0xff8a140f,0xff84420b,0xff7b5908,0xff745204,0xff6c4d02,0xff5d2300, 0xff540000,0xff630000,0xff6b0000,0xff380000,0xff030000,0x9a000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff662400,0xfff37a7a,0xffcd2727,0xff8a0a0a, 0xff5e0101,0xffb3985c,0xffb59b5b,0xffb27647,0xffae332e,0xffab2828,0xffa82525,0xffa42121,0xffa01e1e,0xff981a1a,0xff911616,0xff881212,0xff800f0f,0xff780f0b, 0xff723807,0xff6c4d04,0xff664802,0xff591c00,0xff550000,0xff650000,0xff6f0000,0xff390000,0xff040000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000, 0xff692600,0xfff37a7a,0xffcd2727,0xff8a0a0a,0xff5e0101,0xffad9154,0xffae7447,0xffa93631,0xffa62b2b,0xffa32727,0xffa12424,0xff9c2020,0xff951e1c,0xff8d1a19, 0xff861616,0xff7f1212,0xff780e0e,0xff700a0a,0xff690c07,0xff642f04,0xff5f4302,0xff581b00,0xff560000,0xff670000,0xff720000,0xff390000,0xff040000,0x99000000, 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff6b2800,0xfff37a7a,0xffce2727,0xff8b0a0a,0xff5f0101,0xffa48446,0xffa43831,0xffa22d2d,0xff9f2a2a,0xff9c2626, 0xff972323,0xff91211f,0xff8c471c,0xff854618,0xff7c1715,0xff761211,0xff6f0e0e,0xff690a0a,0xff620707,0xff5b0904,0xff5a3e02,0xff541200,0xff570000,0xff690000, 0xff730000,0xff3a0000,0xff040000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff6e2a00,0xfff47a7a,0xffd02727,0xff900a0a,0xff620101,0xff8b5929, 0xff9d2e2e,0xff9b2c2c,0xff982929,0xff922525,0xff8d2222,0xff88461e,0xff83651b,0xff7c5e18,0xff753d14,0xff6d1211,0xff670e0e,0xff600a0a,0xff5b0707,0xff560404, 0xff563402,0xff510300,0xff580000,0xff6d0000,0xff770000,0xff3b0000,0xff040000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff712b00,0xfff57b7a, 0xffd82727,0xff9d0a0a,0xff6c0101,0xff621308,0xff8f3526,0xff922b2b,0xff8d2828,0xff882724,0xff844821,0xff80631d,0xff7a5e1a,0xff735817,0xff6d5314,0xff663610, 0xff5f100d,0xff590909,0xff550707,0xff520604,0xff521901,0xff520000,0xff5c0000,0xff760000,0xff800000,0xff3c0000,0xff040000,0x99000000,0x66000000,0x3d000000, 0x1f000000,0x3d000000,0xff732d00,0xfff87c7c,0xffe22727,0xffb20a0a,0xff7f0101,0xff5f0000,0xff621709,0xff853123,0xff842827,0xff814823,0xff7c6120,0xff775c1c, 0xff715719,0xff6b5216,0xff664d13,0xff604810,0xff5a2e0d,0xff540b09,0xff500806,0xff511202,0xff510000,0xff550000,0xff680000,0xff870000,0xff8c0000,0xff3f0000, 0xff040000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff752e00,0xfffa7d7d,0xffed2727,0xffcd0a0a,0xff9d0101,0xff730000,0xff5c0000,0xff5b0d05, 0xff79401b,0xff7b6021,0xff765c1f,0xff70581c,0xff6b5318,0xff664e15,0xff614a13,0xff5b450f,0xff57410c,0xff532909,0xff521303,0xff510000,0xff540000,0xff610000, 0xff7d0000,0xffa00000,0xff980000,0xff400000,0xff040000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff782f00,0xfffc7d7d,0xfff62727,0xffe40a0a, 0xffc10101,0xff960000,0xff720000,0xff5d0000,0xff540000,0xff693110,0xff71521b,0xff6d541b,0xff685018,0xff624c16,0xff5e4812,0xff59430e,0xff583209,0xff541403, 0xff510000,0xff550000,0xff600000,0xff790000,0xffa10000,0xffbd0000,0xffa20000,0xff410000,0xff040000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000, 0xff7a3100,0xfffb7d7d,0xfff72727,0xfff10a0a,0xffde0101,0xffbe0000,0xff980000,0xff760000,0xff600000,0xff550000,0xff591006,0xff663710,0xff6d5416,0xff664e14, 0xff5d370d,0xff571d06,0xff500000,0xff510000,0xff560000,0xff620000,0xff7a0000,0xffa00000,0xffc60000,0xffd20000,0xffa80000,0xff410000,0xff040000,0x99000000, 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff783100,0xfff07a7a,0xffe92727,0xffe50a0a,0xffdf0101,0xffd00000,0xffb60000,0xff960000,0xff780000,0xff610000, 0xff540000,0xff4d0000,0xff6c4700,0xff684400,0xff4b0000,0xff4c0000,0xff4e0000,0xff560000,0xff630000,0xff7a0000,0xff990000,0xffbb0000,0xffd20000,0xffd00000, 0xff9f0000,0xff3e0000,0xff040000,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff6d2e00,0xffcb6f71,0xffba2727,0xffb00a0a,0xffac0101,0xffa80000, 0xffa00000,0xff900000,0xff7c0000,0xff650000,0xff520000,0xff460000,0xff3e0000,0xff3c0000,0xff3c0000,0xff410000,0xff480000,0xff550000,0xff670000,0xff7d0000, 0xff920000,0xffa10000,0xffa80000,0xff9f0000,0xff790000,0xff330000,0xff040000,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff5a2100,0xff934848, 0xff5e2424,0xff490909,0xff430101,0xff420000,0xff410000,0xff3f0000,0xff3b0000,0xff340000,0xff2d0000,0xff250000,0xff200000,0xff1d0000,0xff1e0000,0xff220000, 0xff270000,0xff2e0000,0xff350000,0xff3b0000,0xff3f0000,0xff410000,0xff410000,0xff3e0000,0xff320000,0xff190000,0xff000000,0x87000000,0x5a000000,0x36000000, 0x17000000,0x2e000000,0xff4c1100,0xff2a1200,0xff110900,0xff070200,0xff040000,0xff030000,0xff030000,0xff040000,0xff040000,0xff030000,0xff030000,0xff030000, 0xff030000,0xff030000,0xff030000,0xff030000,0xff030000,0xff030000,0xff030000,0xff040000,0xff040000,0xff040000,0xff040000,0xff040000,0xff040000,0xff000000, 0xff000000,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000, 0x9a000000,0x9b020000,0x9f030200,0xa4050200,0xab090300,0xb00a0400,0xaf0a0400,0xa9080500,0xa2050200,0x9d020000,0x9b020200,0x99000000,0x99000000,0x99000000, 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000, 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x67020000,0x67000000,0x69020000,0x6c050200,0x6e070200,0x6d050200,0x6b050200,0x68000000,0x67020000, 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000, 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3e000000,0x3e000000, 0x3e000000,0x3e000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000, 0x18000000,0xf000000 }; static const QRgb OKButton_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0x3ed5d5d5,0x93d4d4d4,0xd5d9d9d9,0xfed8d8d8,0xf8d2d2d2,0xeed5d5d5,0xe1d1d1d1,0xdcd3d3d3,0xe1d3d3d3,0xe6d4d4d4, - 0xecd6d6d6,0xf1d5d5d5,0xf6d5d5d5,0xfbd6d6d6,0xfed7d7d7,0xffd8d8d8,0xffd6d6d6,0xd9cacaca,0xa1bebebe,0x518f8f8f,0xc000000,0x3000000,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0x5fd5d5d5,0xdbdddddd,0xffdcdcdc,0xffcbcbcb,0xffc5c5c5,0xffc3c3c3,0xffcdcdcd,0xffc7c7c7,0xffc4c4c4,0xffc5c5c5,0xffc5c5c5, - 0xffc4c4c4,0xffc3c3c3,0xffc4c4c4,0xffc5c5c5,0xffc8c8c8,0xffcacaca,0xffcbcbcb,0xffcccccc,0xffd5d5d5,0xe7bdbdbd,0x847e7e7e,0x18000000,0x4000000,0xffffff, - 0xffffff,0xffffff,0x3ed6d5d5,0xdbd3d3d3,0xffd1d1d1,0xffc0bfbf,0xffbcbcbc,0xffb7b6b7,0xffb9b8b9,0xff989898,0xff313131,0xff323232,0xff555555,0xffbababa, - 0xff969696,0xff323232,0xff989798,0xffc1c0c1,0xff797879,0xffa6a5a6,0xffcecdce,0xffcecdce,0xffcbcbcb,0xffbbbcbb,0xed939293,0x76484848,0x18000000,0x3000000, - 0xffffff,0xffffff,0x93cccdcc,0xffc8c7c7,0xffb0b0b0,0xffaeadad,0xffb2b2b2,0xffb0b0b0,0xffafaeae,0xff000000,0xff5b5c5b,0xffb2b1b1,0xff000000,0xff606060, - 0xff828282,0xff000000,0xff878787,0xff6a6a6a,0xff1a1a1a,0xffa4a4a4,0xffc8c8c8,0xffc9c8c8,0xffc7c7c7,0xffbdbebd,0xffa6a5a5,0xc9505050,0x3d000000,0xc000000, - 0xffffff,0xffffff,0xd5c1c1c1,0xffacacac,0xff999999,0xffa1a1a1,0xff9b9a9a,0xffa4a4a4,0xff989898,0xff000000,0xff565656,0xffa9a9a9,0xff000000,0xff565656, - 0xff757575,0xff000000,0xff474747,0xff191919,0xff8e8e8e,0xffbababa,0xffb5b5b5,0xffb0b0b0,0xffbcbcbc,0xffbbbbbb,0xffafafaf,0xf0545454,0x61000000,0x1a000000, - 0xffffff,0xffffff,0xfab3b3b3,0xff969696,0xff878787,0xff9a9a9a,0xff919191,0xff8c8c8c,0xff929292,0xff000000,0xff515151,0xff959595,0xff000000,0xff4d4d4d, - 0xff686868,0xff000000,0xff000000,0xff909090,0xffafafaf,0xff9f9f9f,0xff999999,0xffa5a5a5,0xffb0b0b0,0xffb7b7b7,0xff9f9f9f,0xfd505050,0x7c000000,0x25000000, - 0xffffff,0xffffff,0xd8a0a0a0,0xff888888,0xff858585,0xff7a7a7a,0xff838383,0xff8a8a8a,0xff838383,0xff000000,0xff464646,0xff878787,0xff000000,0xff494949, - 0xff636363,0xff000000,0xff1e1e1e,0xff212121,0xff9b9b9b,0xffa6a6a6,0xff9f9f9f,0xffa0a0a0,0xffacacac,0xffa7a7a7,0xff858585,0xf2393939,0x85000000,0x2b000000, - 0xffffff,0xffffff,0x9e818181,0xff848483,0xff757676,0xff7b7b7b,0xff707070,0xff777776,0xff797979,0xff000000,0xff434443,0xff737273,0xff000000,0xff3e3e3e, - 0xff555554,0xff000000,0xff616160,0xff3d3d3c,0xff2c2c2c,0xff8f8f8f,0xffa1a1a1,0xffa5a5a5,0xff9e9e9e,0xff979897,0xff5e5d5e,0xdf282828,0x7c000000,0x25000000, - 0xffffff,0xffffff,0x505b5b5b,0xe66a6a6a,0xff6c6c6c,0xff686868,0xff656666,0xff656565,0xff6c6d6c,0xff373737,0xff0d0d0d,0xff1c1c1c,0xff131414,0xff585959, - 0xff4a4a4a,0xff000000,0xff4f4f4f,0xff727272,0xff373737,0xff6d6d6d,0xff979797,0xff989998,0xff878787,0xff666566,0xf5333333,0xbb101010,0x61000000,0x1a000000, - 0xffffff,0xffffff,0xc000000,0x833c3c3c,0xec474747,0xff4c4b4b,0xff535352,0xff575757,0xff575657,0xff595859,0xff585857,0xff545453,0xff525251,0xff535352, - 0xff545454,0xff565656,0xff5a5a5a,0xff606060,0xff696969,0xff717171,0xff707070,0xff666566,0xff535253,0xf5323231,0xce161616,0x83000000,0x3d000000,0xc000000, - 0xffffff,0xffffff,0x3000000,0x18000000,0x751f1f1f,0xc8262626,0xef272727,0xff2e2e2e,0xfd282828,0xfa262626,0xf5242424,0xf3232323,0xf5262626,0xf7262626, - 0xf9282828,0xfa292929,0xfc2c2c2c,0xfe2d2d2d,0xff323232,0xff343434,0xff343434,0xf3292929,0xdf1d1d1d,0xbb0d0d0d,0x83000000,0x4b000000,0x18000000,0x3000000, + 0xffffff,0xffffff,0xffffff,0xffffff,0x3edcdcdc,0x93dbdbdb,0xd5dfdfdf,0xfededede,0xf8d9d9d9,0xeedcdcdc,0xe1d8d8d8,0xdcdadada,0xe1dadada,0xe6dbdbdb, + 0xecdddddd,0xf1dcdcdc,0xf6dcdcdc,0xfbdddddd,0xfedddddd,0xffdedede,0xffdddddd,0xd9d2d2d2,0xa1c8c8c8,0x519e9e9e,0xc000000,0x3000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0x5fdcdcdc,0xdbe3e3e3,0xffe2e2e2,0xffd3d3d3,0xffcecece,0xffcccccc,0xffd5d5d5,0xffd0d0d0,0xffcdcdcd,0xffcecece,0xffcecece, + 0xffcdcdcd,0xffcccccc,0xffcdcdcd,0xffcecece,0xffd1d1d1,0xffd2d2d2,0xffd3d3d3,0xffd4d4d4,0xffdcdcdc,0xe7c7c7c7,0x848e8e8e,0x18000000,0x4000000,0xffffff, + 0xffffff,0xffffff,0x3edddcdc,0xdbdadada,0xffd8d8d8,0xffcac9c9,0xffc6c6c6,0xffc2c1c2,0xffc4c3c4,0xffa6a6a6,0xff414141,0xff424242,0xff676767,0xffc4c4c4, + 0xffa4a4a4,0xff424242,0xffa6a5a6,0xffcbcacb,0xff8a898a,0xffb3b2b3,0xffd6d5d6,0xffd6d5d6,0xffd3d3d3,0xffc5c6c5,0xeda2a1a2,0x765a5a5a,0x18000000,0x3000000, + 0xffffff,0xffffff,0x93d4d5d4,0xffd1d0d0,0xffbcbcbc,0xffbab9b9,0xffbdbdbd,0xffbcbcbc,0xffbbbaba,0xff000000,0xff6d6e6d,0xffbdbdbd,0xff000000,0xff727272, + 0xff929292,0xff000000,0xff979797,0xff7b7b7b,0xff272727,0xffb1b1b1,0xffd1d1d1,0xffd1d1d1,0xffd0d0d0,0xffc7c8c7,0xffb3b2b2,0xc9626262,0x3d000000,0xc000000, + 0xffffff,0xffffff,0xd5cbcbcb,0xffb8b8b8,0xffa7a7a7,0xffaeaeae,0xffa9a8a8,0xffb1b1b1,0xffa6a6a6,0xff000000,0xff686868,0xffb6b6b6,0xff000000,0xff686868, + 0xff868686,0xff000000,0xff595959,0xff252525,0xff9d9d9d,0xffc4c4c4,0xffc0c0c0,0xffbcbcbc,0xffc6c6c6,0xffc5c5c5,0xffbbbbbb,0xf0666666,0x61000000,0x1a000000, + 0xffffff,0xffffff,0xfabebebe,0xffa4a4a4,0xff979797,0xffa8a8a8,0xffa0a0a0,0xff9b9b9b,0xffa1a1a1,0xff000000,0xff636363,0xffa4a4a4,0xff000000,0xff5f5f5f, + 0xff7a7a7a,0xff000000,0xff000000,0xff9f9f9f,0xffbbbbbb,0xffadadad,0xffa7a7a7,0xffb2b2b2,0xffbcbcbc,0xffc2c2c2,0xffadadad,0xfd626262,0x7c000000,0x25000000, + 0xffffff,0xffffff,0xd8adadad,0xff989898,0xff959595,0xff8b8b8b,0xff939393,0xff9a9a9a,0xff939393,0xff000000,0xff585858,0xff979797,0xff000000,0xff5b5b5b, + 0xff757575,0xff000000,0xff2b2b2b,0xff2f2f2f,0xffa9a9a9,0xffb3b3b3,0xffadadad,0xffadadad,0xffb8b8b8,0xffb4b4b4,0xff959595,0xf24a4a4a,0x85000000,0x2b000000, + 0xffffff,0xffffff,0x9e919191,0xff949493,0xff868787,0xff8c8c8c,0xff818181,0xff888887,0xff8a8a8a,0xff000000,0xff545654,0xff848384,0xff000000,0xff4f4f4f, + 0xff676766,0xff000000,0xff737372,0xff4e4e4d,0xff3c3c3c,0xff9e9e9e,0xffaeaeae,0xffb2b2b2,0xffacacac,0xffa5a6a5,0xff706f70,0xdf373737,0x7c000000,0x25000000, + 0xffffff,0xffffff,0x506d6d6d,0xe67b7b7b,0xff7d7d7d,0xff7a7a7a,0xff777878,0xff777777,0xff7d7e7d,0xff484848,0xff161616,0xff292929,0xff1e1f1f,0xff6a6b6b, + 0xff5c5c5c,0xff000000,0xff616161,0xff838383,0xff484848,0xff7e7e7e,0xffa5a5a5,0xffa6a7a6,0xff979797,0xff787778,0xf5434343,0xbb1a1a1a,0x61000000,0x1a000000, + 0xffffff,0xffffff,0xc000000,0x834d4d4d,0xec595959,0xff5e5d5d,0xff656564,0xff696969,0xff696869,0xff6b6a6b,0xff6a6a69,0xff666665,0xff646463,0xff656564, + 0xff666666,0xff686868,0xff6c6c6c,0xff727272,0xff7a7a7a,0xff828282,0xff818181,0xff787778,0xff656465,0xf5424241,0xce222222,0x83000000,0x3d000000,0xc000000, + 0xffffff,0xffffff,0x3000000,0x18000000,0x752d2d2d,0xc8353535,0xef363636,0xff3e3e3e,0xfd373737,0xfa353535,0xf5333333,0xf3313131,0xf5353535,0xf7353535, + 0xf9373737,0xfa383838,0xfc3c3c3c,0xfe3d3d3d,0xff424242,0xff454545,0xff454545,0xf3383838,0xdf2a2a2a,0xbb161616,0x83000000,0x4b000000,0x18000000,0x3000000, 0xffffff,0xffffff,0xffffff,0x4000000,0x18000000,0x3d000000,0x61000000,0x7c000000,0x8a000000,0x8b000000,0x87000000,0x82000000,0x81000000,0x82000000, 0x84000000,0x87000000,0x89000000,0x8b000000,0x8e000000,0x8e000000,0x8f000000,0x8b000000,0x7c000000,0x61000000,0x3d000000,0x18000000,0x4000000,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0x3000000,0xc000000,0x1a000000,0x26000000,0x2d000000,0x2e000000,0x2b000000,0x29000000,0x28000000,0x29000000, 0x2a000000,0x2b000000,0x2d000000,0x2e000000,0x2e000000,0x2f000000,0x30000000,0x2e000000,0x26000000,0x1a000000,0xc000000,0x3000000,0xffffff,0xffffff }; static const QRgb Opera_data[] = { 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000, 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000, 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000, 0x3d000000,0x3e000000,0x3e000000,0x3e000000,0x3e000000,0x3e000000,0x3e000000,0x3e000000,0x3e000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000, 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323, 0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5223,0xff0d5223,0xff0d5223,0xff0d5223,0xff0d5222,0xff0d5222,0xff0d5223,0xff0d5223,0xff0d5223,0xff0d5323, 0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000, 0xff0d5323,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffcfcfc,0xfffafafa,0xfff8f8f8,0xfff7f7f7,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6, 0xfff6f6f6,0xfff8f8f8,0xfff9f9f9,0xfffbfbfb,0xfffcfcfc,0xfffefefe,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff0d5323,0x5c000000, 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff0d5323,0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffcfcfc,0xfff9f9f9,0xfff6f6f6,0xfff3f3f3,0xffefefef, 0xffededed,0xffececec,0xffebebeb,0xffebebeb,0xffececec,0xffeeeeee,0xfff1f1f1,0xfff4f4f4,0xfff8f8f8,0xfffbfbfb,0xfffdfdfd,0xfffefefe,0xffffffff,0xffffffff, 0xffffffff,0xffffffff,0xff0d5323,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff0d5323,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffbfbfb,0xfff7f7f7, 0xfff2f2f2,0xffebebeb,0xffe5e5e5,0xffe0e0e0,0xffdddddd,0xffdbdbdb,0xffdbdbdb,0xffdbdbdb,0xffdbdbdb,0xffdedede,0xffe2e2e2,0xffe8e8e8,0xffefefef,0xfff5f5f5, 0xfff9f9f9,0xfffcfcfc,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xff0d5323,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff0d5323,0xffffffff, 0xfffdfdfd,0xfffbfbfb,0xfff6f6f6,0xffeeeeee,0xffe4e4e4,0xffdadada,0xffd0d0d0,0xffcbcbcb,0xffc8c8c8,0xffcfb6b6,0xffd6a0a0,0xffd6a0a0,0xffc8c8c8,0xffc8c8c8, 0xffcdcdcd,0xffd4d4d4,0xffdfdfdf,0xffeaeaea,0xfff3f3f3,0xfff9f9f9,0xfffcfcfc,0xfffefefe,0xffffffff,0xffffffff,0xff0d5323,0x93000000,0x62000000,0x3b000000, 0x1f000000,0x3d000000,0xff0d5323,0xfffefefe,0xfffcfcfc,0xfff7f7f7,0xffeeeeee,0xffe1e1e1,0xffd1d1d1,0xffc2c2c2,0xffc0acac,0xffdf6f6f,0xfff62323,0xffed0d0d, 0xffdf3434,0xffed2c2c,0xfffa2727,0xffed4a4a,0xffd07a7a,0xffbcbcbc,0xffc9c9c9,0xffdadada,0xffe8e8e8,0xfff3f3f3,0xfffafafa,0xfffdfdfd,0xfffefefe,0xffffffff, 0xff0d5323,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0d5323,0xfffdfdfd,0xfff8f8f8,0xfff0f0f0,0xffe1e1e1,0xffcecece,0xffb9b9b9,0xffc98c8c, 0xfff54b4b,0xfff10000,0xffa64545,0xffb5acac,0xffbdbdbd,0xffbbbbbb,0xffc28383,0xfff42424,0xfffa2121,0xffe23535,0xffb4a5a5,0xffc4c4c4,0xffd8d8d8,0xffe9e9e9, 0xfff5f5f5,0xfffbfbfb,0xfffefefe,0xffffffff,0xff0d5323,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0d5323,0xfffbfbfb,0xfff4f4f4,0xffe6e6e6, 0xffd2d2d2,0xffb8b8b8,0xffc38888,0xfffb5151,0xfff70000,0xff8a1e1e,0xffadadad,0xffbebebe,0xffc6c6c6,0xffc3c3c3,0xffb5b5b5,0xffbf7272,0xfffa1e1e,0xfff90c0c, 0xffd71d1d,0xffafa1a1,0xffc6c6c6,0xffdddddd,0xffeeeeee,0xfff8f8f8,0xfffcfcfc,0xfffefefe,0xff0d5323,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3e000000, 0xff0d5223,0xfff8f8f8,0xffeeeeee,0xffdbdbdb,0xffc0c0c0,0xffb39696,0xfffb5d5d,0xfffa2121,0xff9d0000,0xff866666,0xffb4b4b4,0xffc9c9c9,0xffd4d4d4,0xffd0d0d0, 0xffbfbfbf,0xffa5a5a5,0xffec3131,0xfff91515,0xffe70000,0xffb73131,0xffb1b1b1,0xffcecece,0xffe5e5e5,0xfff4f4f4,0xfffbfbfb,0xfffefefe,0xff0d5323,0x99000000, 0x66000000,0x3d000000,0x1f000000,0x3e000000,0xff0d5222,0xfff5f5f5,0xffe7e7e7,0xffcfcfcf,0xffafafaf,0xffdd6d6d,0xfffb4040,0xffe20000,0xff740000,0xff9d9d9d, 0xffbdbdbd,0xffd5d5d5,0xffdfdfdf,0xffdcdcdc,0xffcacaca,0xffacacac,0xffbe6262,0xfffa2222,0xfff50000,0xffc00000,0xffa47474,0xffbfbfbf,0xffdcdcdc,0xffefefef, 0xfff9f9f9,0xfffdfdfd,0xff0d5323,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3e000000,0xff0d5122,0xfff1f1f1,0xffe0e0e0,0xffc4c4c4,0xffab9696,0xfffb5555, 0xfffa2222,0xffbb0000,0xff712323,0xffa2a2a2,0xffc5c5c5,0xffdedede,0xffe8e8e8,0xffe5e5e5,0xffd3d3d3,0xffb4b4b4,0xffac7878,0xfffa3131,0xfff90c0c,0xffc80000, 0xff983838,0xffb1b1b1,0xffd3d3d3,0xffeaeaea,0xfff6f6f6,0xfffcfcfc,0xff0d5323,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3f000000,0xff0d5122,0xffeeeeee, 0xffd9d9d9,0xffbababa,0xffc37777,0xfffb4646,0xfff90c0c,0xffa90000,0xff773434,0xffa8a8a8,0xffcbcbcb,0xffe3e3e3,0xffededed,0xffeaeaea,0xffd9d9d9,0xffbababa, 0xffa08888,0xfffa3a3a,0xfff91515,0xffd40000,0xff950909,0xffa6a6a6,0xffcbcbcb,0xffe5e5e5,0xfff4f4f4,0xfffbfbfb,0xff0d5223,0x99000000,0x66000000,0x3d000000, 0x20000000,0x3f000000,0xff0d5022,0xffebebeb,0xffd5d5d5,0xffb3b3b3,0xffce6868,0xfffa3939,0xfff70000,0xffa30000,0xff7e4747,0xffacacac,0xffcfcfcf,0xffe7e7e7, 0xfff0f0f0,0xffeeeeee,0xffdedede,0xffbfbfbf,0xff969696,0xfffb4040,0xfffa1919,0xffda0000,0xff950000,0xff9a8888,0xffc4c4c4,0xffe0e0e0,0xfff0f0f0,0xfff6f6f6, 0xff0d5122,0x99000000,0x66000000,0x3d000000,0x20000000,0x3f000000,0xff0d5022,0xffeaeaea,0xffd2d2d2,0xffafafaf,0xffdb5b5b,0xfffa3030,0xfff10000,0xffa30000, 0xff814848,0xffaeaeae,0xffd1d1d1,0xffe8e8e8,0xfff2f2f2,0xffefefef,0xffdfdfdf,0xffc1c1c1,0xff989898,0xfffb4545,0xfffa1b1b,0xffda0000,0xff930000,0xff906d6d, 0xffb9b9b9,0xffd4d4d4,0xffe2e2e2,0xffe5e5e5,0xff0c4b20,0x99000000,0x66000000,0x3d000000,0x20000000,0x3f000000,0xff0d5022,0xffeaeaea,0xffd2d2d2,0xffaeaeae, 0xffdb5555,0xfffa2a2a,0xffef0000,0xffa50000,0xff824949,0xffaeaeae,0xffd2d2d2,0xffe8e8e8,0xfff2f2f2,0xffefefef,0xffe0e0e0,0xffc1c1c1,0xff979797,0xfffb4646, 0xfffa1c1c,0xffd80000,0xff8c0000,0xff856464,0xffa7a7a7,0xffbababa,0xffc6c6c6,0xffcbcbcb,0xff0b431c,0x99000000,0x66000000,0x3d000000,0x20000000,0x3f000000, 0xff0d5022,0xffebebeb,0xffd4d4d4,0xffb2b2b2,0xffd55656,0xfffa2727,0xfff30000,0xffab0000,0xff844848,0xffacacac,0xffd0d0d0,0xffe7e7e7,0xfff1f1f1,0xffeeeeee, 0xffdddddd,0xffbdbdbd,0xff939393,0xfffb4848,0xfffa1b1b,0xffce0000,0xff7e0000,0xff715c5c,0xff878787,0xff9b9b9b,0xffafafaf,0xffc2c2c2,0xff0a421c,0x99000000, 0x66000000,0x3d000000,0x1f000000,0x3f000000,0xff0d5122,0xffededed,0xffd8d8d8,0xffb8b8b8,0xffc16767,0xfffa2828,0xfff90303,0xffb90000,0xff863c3c,0xffa9a9a9, 0xffcccccc,0xffe4e4e4,0xffeeeeee,0xffe9e9e9,0xffd6d6d6,0xffb3b3b3,0xff8e8383,0xfffb4949,0xfff91515,0xffbb0000,0xff6e0000,0xff5f5f5f,0xff888888,0xffaeaeae, 0xffc8c8c8,0xffd5d5d5,0xff0b451d,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3f000000,0xff0d5122,0xfff0f0f0,0xffdedede,0xffc1c1c1,0xffaf8888,0xfffa2a2a, 0xfff90c0c,0xffc80000,0xff8c2323,0xffa4a4a4,0xffc7c7c7,0xffdfdfdf,0xffe8e8e8,0xffe1e1e1,0xffc5c5c5,0xff949494,0xff8a5e5e,0xfffb4646,0xfff90707,0xff9b0000, 0xff602020,0xff8a8a8a,0xffb3b3b3,0xffcfcfcf,0xffdbdbdb,0xffd6d6d6,0xff0a3f1a,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3e000000,0xff0d5222,0xfff4f4f4, 0xffe5e5e5,0xffcccccc,0xffababab,0xffeb2f2f,0xfff91010,0xffda0000,0xff990808,0xff9e9e9e,0xffbfbfbf,0xffd6d6d6,0xffd9d9d9,0xffc2c2c2,0xff969696,0xff6c6c6c, 0xff9f5454,0xfffa3a3a,0xffde0000,0xff780000,0xff775252,0xffacacac,0xffc7c7c7,0xffd3d3d3,0xffc9c9c9,0xffb3b3b3,0xff072f14,0x99000000,0x66000000,0x3d000000, 0x1f000000,0x3e000000,0xff0d5223,0xfff7f7f7,0xffececec,0xffd8d8d8,0xffbcbcbc,0xffbc6f6f,0xfff90c0c,0xffeb0000,0xffb50000,0xff9c7d7d,0xffb5b5b5,0xffc5c5c5, 0xffbababa,0xff9d9d9d,0xff818181,0xff707070,0xffd35a5a,0xfffa1c1c,0xffa10000,0xff611919,0xffa0a0a0,0xffb8b8b8,0xffbfbfbf,0xffb3b3b3,0xff9b9b9b,0xff828282, 0xff062710,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0d5223,0xfffafafa,0xfff2f2f2,0xffe4e4e4,0xffcecece,0xffb3b3b3,0xffd13e3e,0xffeb0000, 0xffd40000,0xffb33333,0xffaaaaaa,0xffb0b0b0,0xffa4a4a4,0xff969696,0xff8d8d8d,0xff9f8181,0xfffa3a3a,0xffca0000,0xff670909,0xff8d7b7b,0xffa6a6a6,0xffa6a6a6, 0xff959595,0xff868686,0xff808080,0xff898989,0xff083215,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0d5323,0xfffcfcfc,0xfff7f7f7,0xffeeeeee, 0xffdedede,0xffc9c9c9,0xffb3b3b3,0xffc54141,0xffd20000,0xffce0000,0xffbe6565,0xffa7a7a7,0xffa1a1a1,0xff9e9e9e,0xffa49999,0xffe74b4b,0xffe00000,0xff760a0a, 0xff877676,0xff8c8c8c,0xff818181,0xff7c7c7c,0xff898989,0xffa0a0a0,0xffb4b4b4,0xffc8c8c8,0xff0b461d,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000, 0xff0d5323,0xfffdfdfd,0xfffbfbfb,0xfff5f5f5,0xffebebeb,0xffdddddd,0xffcccccc,0xffbcbcbc,0xffb77777,0xffb31717,0xffbe0000,0xffd62f2f,0xffce6363,0xffd45e5e, 0xfff31a1a,0xffcc0000,0xff873939,0xff837d7d,0xff848484,0xff919191,0xffaaaaaa,0xffc2c2c2,0xffd3d3d3,0xffdddddd,0xffe6e6e6,0xffefefef,0xff0c5022,0x99000000, 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0d5323,0xfffefefe,0xfffdfdfd,0xfffafafa,0xfff5f5f5,0xffececec,0xffe0e0e0,0xffd4d4d4,0xffcacaca,0xffc5c5c5, 0xffbd9d9d,0xffb97474,0xffbe6666,0xffbe6464,0xffb18383,0xffafa6a6,0xffb5b5b5,0xffbfbfbf,0xffcbcbcb,0xffd8d8d8,0xffe3e3e3,0xffebebeb,0xfff2f2f2,0xfff7f7f7, 0xfffafafa,0xfffdfdfd,0xff0d5223,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff0d5323,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffafafa,0xfff6f6f6, 0xffefefef,0xffe8e8e8,0xffe0e0e0,0xffdbdbdb,0xffd8d8d8,0xffd7d7d7,0xffd7d7d7,0xffd6d6d6,0xffd6d6d6,0xffd7d7d7,0xffdbdbdb,0xffe0e0e0,0xffe8e8e8,0xffefefef, 0xfff5f5f5,0xfff9f9f9,0xfffcfcfc,0xfffefefe,0xfffefefe,0xffffffff,0xff0d5323,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff0d5323,0xffffffff, 0xffffffff,0xfffefefe,0xfffdfdfd,0xfffbfbfb,0xfff8f8f8,0xfff4f4f4,0xfff0f0f0,0xffececec,0xffe9e9e9,0xffe8e8e8,0xffe8e8e8,0xffe8e8e8,0xffe9e9e9,0xffebebeb, 0xffeeeeee,0xfff2f2f2,0xfff5f5f5,0xfffafafa,0xfffcfcfc,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff0d5323,0x87000000,0x5a000000,0x36000000, 0x17000000,0x2e000000,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5223,0xff0d5222,0xff0d5122,0xff0d5022,0xff0c5022,0xff0c4f21, 0xff0c4f21,0xff0c4f21,0xff0c5022,0xff0d5022,0xff0d5122,0xff0d5122,0xff0d5223,0xff0d5223,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323, 0xff0d5323,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000, 0x9a000000,0x9a000000,0x9b000000,0x9b000000,0x9b000000,0x9b000000,0x9b000000,0x9a000000,0x9a000000,0x9a000000,0x99000000,0x99000000,0x99000000,0x99000000, 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000, 0x62000000,0x66000000,0x66000000,0x66000000,0x67000000,0x67000000,0x67000000,0x67000000,0x67000000,0x67000000,0x67000000,0x67000000,0x67000000,0x66000000, 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000, 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000, 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000, 0x18000000,0xf000000 }; static const QRgb PPPConnect_data[] = { - 0xffffff,0xffffff,0x1000000,0x4000000,0x7000000,0xc232615,0xd000000,0xd000000,0xb262a17,0x5000000,0x2000000,0x2000000,0x3000000,0x5000000, - 0x9000000,0xc000000,0xd000000,0xd000000,0xb000000,0x8000000,0x6000000,0x4000000,0x6000000,0xa111500,0xd000000,0xd000000,0xb0f1200,0x7000000, - 0x4000000,0x1000000,0xffffff,0xffffff,0x1000000,0x6000000,0x13000000,0x34394119,0x76899742,0x5e626d2e,0x989cab4c,0x8a94a347,0x6984923e,0x48717d34, - 0x26515928,0x12000000,0x12000000,0x1a000000,0x23000000,0x2b000000,0x2f000000,0x2e000000,0x29000000,0x21000000,0x1e000000,0x2a2a3106,0x3e4c5904,0x57647509, - 0x7373870b,0x7f7a900a,0x51445006,0x62667808,0x30282f05,0x13000000,0x6000000,0x1000000,0x7000000,0x324c5423,0xa99cab4e,0xe3b7c766,0xf2c1d170,0xf5c3d373, - 0xd8b2c25f,0xd7b3c360,0xd1b6c36d,0xc7b4c16b,0xa9abb960,0x5c757f48,0x3c11151e,0x622f4656,0x99446b82,0xc4517994,0xd8547e99,0xd3517c98,0xb949748f,0x873b5d75, - 0x6f415730,0x967b9112,0xab8aa112,0xb68fa712,0xc293ad0e,0xc293ac0e,0xeda7c311,0xe7a2be11,0xd396af10,0x937a8e0c,0x2c343d06,0x7000000,0x2440481c,0xb5a1b050, - 0xfac8d877,0xffcddc7c,0xd6acbc5a,0x716f7b33,0x6f849141,0x647d8841,0x6d7c8842,0x85909965,0x93959c8f,0xb896a7aa,0xe38ba6b4,0xff759eb1,0xff6498b0,0xff4b8aaa, - 0xff30769b,0xff5e98b4,0xff639ab1,0xff5a90ab,0xf94d81a0,0xc9476e7f,0x924f663d,0x75495919,0x604b580b,0x635e6d0d,0x664f5c08,0xc48ca310,0xffb1ce15,0xf7aac714, - 0xa07f950e,0x22303708,0x657a8737,0xefbece68,0xffcddd79,0xe2b0c05c,0x31000000,0x101a1c10,0xe000000,0x19000000,0x350f141e,0x7d264c66,0xe039758b,0xff7ea8b1, - 0xffb0cccc,0xffa2c7ca,0xff8ec3cd,0xff6dbacf,0xff3f99b1,0xff82c5d9,0xff82c3d3,0xff83bfce,0xff71acbf,0xff4889a3,0xff2b6e91,0xbc356686,0x60284255,0x2a000000, - 0x1c060700,0x34000000,0xd592aa13,0xffb2cf18,0xe5a0b915,0x585e6d0c,0x9591a042,0xf8c5d56c,0xffcbdc74,0xb796a546,0x18000000,0x6000000,0x14000000,0x32191f24, - 0x9437647e,0xf90d5a73,0xff317c82,0xff91c1bd,0xff76a49d,0xff558374,0xffa0c6bf,0xffd1f3ef,0xffcbf4f9,0xffbbecf5,0xffb1e8f2,0xffa2dfec,0xff9cd8e7,0xff83c7d6, - 0xff24748a,0xff004e79,0xe235759d,0x733c5b71,0x27070d0d,0x25000000,0xa7798c11,0xffb3d01b,0xf3a8c319,0x85758811,0xa293a243,0xfcc7d86c,0xffcadb70,0xaf93a242, - 0x1f262a10,0x12000000,0x2f10161b,0x9d517a8d,0xff176676,0xff015052,0xff2f766b,0xff286a4f,0xff165029,0xff4f845d,0xffbae6dd,0xffbbe9de,0xffd6f5f5,0xffc8f2f7, - 0xffb1edf7,0xffabe9f7,0xffa7e8f7,0xffa1e5f5,0xff58a5b7,0xff1a6c8b,0xff2c87ac,0xf35292af,0x723c5c70,0x38121405,0xa3778a14,0xffb5d120,0xfab0cb1f,0x93798c13, - 0x968c9c3d,0xfec8da6a,0xfec6d868,0xc09bab45,0x25000000,0x25000000,0x8558737f,0xff3d838b,0xff065a4a,0xff155a40,0xff07491e,0xff12531b,0xff99c5ad,0xffeaffff, - 0xffe2ffff,0xffc0eeea,0xffd0f4f5,0xffd9f6f8,0xffcbf3f7,0xffb6edf6,0xffabeaf8,0xffa2e6fb,0xff87daf8,0xff6ac3e4,0xff348fb4,0xff257ea9,0xe04985a4,0x631f2e39, - 0xb9809417,0xfeb5d023,0xfeb5d124,0x88758815,0x71798631,0xf4bdcf5b,0xffc5d764,0xdda9ba4c,0x3d0e0f08,0x593c484d,0xea759a9f,0xff207365,0xff085529,0xff0b4f0e, - 0xff0f5f12,0xff88c19c,0xffefffff,0xffe9fdff,0xffd8f7fa,0xffd8f9fe,0xffcbf6f8,0xffcbf4f8,0xffd3f5f7,0xffcbf2f7,0xffb5ebf8,0xffa7e7f9,0xff98e8fe,0xff6bc6e0, - 0xff136785,0xff005998,0xff156da2,0xca40677e,0xda93a920,0xffb7d229,0xf1aac325,0x69677716,0x363d4318,0xe2adc04c,0xffc4d75f,0xf4b6c853,0x81545d21,0xb86c8289, - 0xff6d9896,0xff09613c,0xff287243,0xff60a882,0xff87c7a5,0xffdffbf6,0xffedfeff,0xffdff9fa,0xffdaf8fa,0xffd5f6f8,0xffcff6f8,0xffc8f5f7,0xffc8f2f7,0xffcef3f7, - 0xffc7eff6,0xffb0e9f7,0xffacf1ff,0xff85d1db,0xff20676f,0xff005b97,0xff0060a3,0xff396f6d,0xf6a7c02b,0xffbad42f,0xdb9eb526,0x3431380a,0x1a1e220a,0xb092a33a, - 0xfec0d457,0xffc1d558,0xc5829236,0xf77d9397,0xff6b9e90,0xff18743f,0xff97ccb6,0xffe8fefd,0xffebffff,0xfff1ffff,0xffedfeff,0xffe3fafd,0xffddf9fa,0xffd9f7f9, - 0xffd3f6f8,0xffccf5f8,0xffc5f3f8,0xffc2eff6,0xffc9f1f6,0xffc3eef6,0xffb5effe,0xff9de1ec,0xff2d726f,0xff005b85,0xff0065a4,0xff57864c,0xffbbd534,0xfeb9d333, - 0xab849721,0x1b1b1f09,0x9000000,0x5e667223,0xefb0c448,0xffbed352,0xf3a5b845,0xff809280,0xff96b7ad,0xff6ab98e,0xfff1fdfd,0xfffdffff,0xffd9f3ed,0xffbdeadc, - 0xffa7decd,0xffd5f5f2,0xffe2fafc,0xffdcf8f9,0xffd9f7f8,0xffcef5f7,0xffc8f3f6,0xffc0f1f6,0xffb8eff5,0xffc2eef7,0xffc2edf9,0xffb2f1fc,0xff438378,0xff00474d, - 0xff146683,0xff94b33d,0xffbdd639,0xefa9bf31,0x63566217,0xb000000,0x2000000,0x1d1a1d09,0xad88992f,0xfdb9cf4b,0xfeb9ce4a,0xff93a556,0xffa5b8af,0xff5caf7f, - 0xff84c8a0,0xffdbf2e8,0xffebfbf8,0xffd2f5ec,0xffcbf1ea,0xffdff8f7,0xffe3fafb,0xffdaf7fb,0xffcef5f8,0xffcff5f7,0xffc8f4f7,0xffc1f1f6,0xffb8eef5,0xffb4eaf6, - 0xffbfecf7,0xffc1f2fb,0xff8bcad2,0xff1b5043,0xff608341,0xffbcd43f,0xffb9d13f,0xb8788823,0x2b121406,0x4000000,0xffffff,0x9000000,0x50454e17,0xe8a3b73a, - 0xffb9cf45,0xffadc343,0xffa3b183,0xffa2cfbb,0xff8fcfac,0xffacddc8,0xffecfbfa,0xfff6ffff,0xfff1ffff,0xfff3ffff,0xfff6ffff,0xffddfbfc,0xffc1f3f9,0xffc9f4f6, - 0xffc9f4f6,0xffc1f1f6,0xffb9eef5,0xffb1eaf6,0xffb0e8f6,0xffbaeaf5,0xffb1e2ec,0xff7aa57c,0xffb1ca45,0xffc1d845,0xfe97b341,0x6f2f350e,0x18000000,0x2000000, - 0xffffff,0x3000000,0x20000000,0x9c616e1d,0xfeabc13e,0xffb5cc42,0xffb8c96a,0xffced7c5,0xffe7f1f0,0xffc4efe5,0xff97d5c0,0xff457955,0xff377847,0xff3d8a53, - 0xff71b192,0xffdcfbfa,0xffe2ffff,0xffd1f9fb,0xffc9f4f7,0xffc3f1f6,0xffb9eef5,0xffb1eaf6,0xffa7e6f5,0xffa7deec,0xffa4cac0,0xffb8ce71,0xffc4da50,0xffb4cc4b, - 0xfb446e50,0x47000000,0x12000000,0x2000000,0xffffff,0x2000000,0x14000000,0x57151806,0xfc8ba244,0xffbfd35d,0xffc9d979,0xffb6c578,0xffbeccbb,0xffeef4f4, - 0xffcfe3dd,0xff3e784a,0xff176b22,0xff1d6f1d,0xff115a10,0xff307445,0xff4e876e,0xffbfeff0,0xffddfffe,0xffc6f7fd,0xffbceff7,0xffafe9f3,0xffa0dceb,0xff8ebfb9, - 0xffaec67b,0xffd0e07b,0xffcadc68,0xff92b05a,0xf91d5569,0x3d000000,0x11000000,0x2000000,0xffffff,0x2000000,0xf000000,0x3c000000,0xf2718d7a,0xffbdcd7c, - 0xffc7d870,0xffafc440,0xffa0b453,0xffc3cfb9,0xffcce6e0,0xff4fa26e,0xff22832f,0xff287925,0xff266a22,0xff185613,0xff073404,0xff377053,0xff94cdc8,0xff9ad5d3, - 0xffb0e9ef,0xffaae4ee,0xff90c0b8,0xff9fbc66,0xffc4d95e,0xffd0e177,0xffbacc7a,0xff769f8e,0xf82a657a,0x3a000000,0x11000000,0x2000000,0xffffff,0x1000000, - 0xf000000,0x403f4330,0xdc88a1ad,0xffa9bc9c,0xffb5c759,0xffabc32c,0xffa7be2c,0xffa1b34f,0xffa7c4a9,0xff3e875e,0xff1b6f28,0xff277529,0xff216322,0xff1e571e, - 0xff21561d,0xff0e3e0c,0xff023106,0xff063711,0xff377065,0xff94c7c0,0xffa5c06a,0xffc5da5d,0xffc9de5e,0xffbdd16b,0xff98b794,0xff79a5ab,0xf8346d7b,0x3c000000, - 0x11000000,0x2000000,0xffffff,0x3000000,0x1a16190a,0x7d9aa468,0xc4a6b3ba,0xffa6bab5,0xff99ad63,0xffa3bb2d,0xffa7c027,0xffa1b92a,0xff9cb057,0xff618d6b, - 0xff185d2a,0xff277c3d,0xff246a2f,0xff1e521d,0xff1e4f1b,0xff1f501e,0xff184418,0xff0f3310,0xff517a64,0xffa2bf74,0xffc4d862,0xffccdf65,0xffc0d561,0xff95b87c, - 0xff86b8bd,0xff78a3a3,0xfb4a7a63,0x460a0b04,0x12000000,0x2000000,0xffffff,0xa000000,0x5f7c893b,0xc9becb7a,0xabadb4b5,0xff99b0b4,0xff98aea3,0xff98ad62, - 0xff9fb72b,0xffa3bc22,0xff9db426,0xff8fa342,0xff395c33,0xff196530,0xff216336,0xff1d5321,0xff1c4a1a,0xff1c4a1c,0xff154115,0xff304f24,0xff9fba66,0xffc4d867, - 0xffcee06b,0xffbfd365,0xff95b87c,0xff7fbcc6,0xff7fbaca,0xff68918d,0xfa708e3c,0x7f4e5912,0x17000000,0x2000000,0x3000000,0x26333914,0xbaa8b756,0xefcad979, - 0x9faaada4,0xe47a98a2,0xff98b3b4,0xffa6bfb8,0xff98af66,0xff9bb326,0xff9fb71d,0xff9cb31d,0xff8aa12f,0xff486735,0xff1d592c,0xff1b5728,0xff1d4e1c,0xff1d471a, - 0xff3d5e21,0xff9fb555,0xffcee070,0xffd0e171,0xffc0d46a,0xff96b880,0xff84c0cd,0xff7fc5e2,0xff71afc6,0xff587f72,0xf8849a1e,0xc9718315,0x2f252b06,0x4000000, - 0xa000000,0x6e7a8735,0xf1c4d568,0xefc8d77e,0xa8a7af7a,0x8e526b77,0xff85a8ad,0xffa5c3c5,0xffa6c5be,0xff97af58,0xff98b020,0xff9ab319,0xff98b019,0xff8da527, - 0xff567421,0xff23501a,0xff274f1c,0xff668133,0xffb2c661,0xffd1e376,0xffd1e376,0xffc5d86f,0xff9fbe7b,0xff84c1ca,0xff7ac6e5,0xff6ab5d8,0xff5b99b3,0xfa5d7e52, - 0xf47b8e16,0xf47e9311,0x795a690c,0xa000000,0x160c0c0c,0xb5a0b04d,0xfed1e279,0xf3cad781,0xb0a0ad5b,0x48192027,0xc5658c9d,0xff8db2b6,0xffa4c9cc,0xff9ec2ac, - 0xff90ac55,0xff93ab20,0xff96b016,0xff93ac15,0xff8aa316,0xff778c27,0xff889947,0xffbdcd6e,0xffd1e17b,0xffd2e37b,0xffc2d571,0xff9fbd7c,0xff8bc0ba,0xff82cbe5, - 0xff5eb2d8,0xff54a1c5,0xff4986a5,0xd8627b28,0xf6758811,0xfe778c0e,0xc16d7f0c,0x16020200,0x22262626,0xdcb7c861,0xffd5e581,0xfcd1e17c,0xb5a2af5d,0x31050505, - 0x582e4651,0xdc6792a2,0xff8db5ba,0xff8bbdc9,0xff7cb5b3,0xff86a75e,0xff8ea71f,0xff97ae1d,0xffa2b73b,0xffb5c466,0xffc1cc86,0xffc2ce85,0xffc7d481,0xffbcce74, - 0xff96b681,0xff85bdbf,0xff86cbe0,0xff7bc3de,0xff5fa6c8,0xff4f90b5,0xb72e6383,0xc564750e,0xfd778d0c,0xff70840c,0xe66e820a,0x27101206,0x2d4a4a4a,0xeac2d26e, - 0xffd6e585,0xffd6e585,0xd7b3c267,0x4e545c2b,0x2f0f100b,0x6c344c5c,0xdf618c9e,0xff709eac,0xff679ea6,0xff7aa08b,0xff8ca25a,0xffaaba5c,0xffc1ce7d,0xffc7d38d, - 0xffc7d28d,0xffc0cc84,0xffabb968,0xff869e5a,0xff749e84,0xff75aeb2,0xff74b2c8,0xff6aa7be,0xff548fad,0xbf346b8d,0x79314120,0xdf6d810c,0xff70850a,0xff6a7e0a, - 0xf26b7f09,0x371a1d08,0x2f575757,0xe7c0d06e,0xffd7e689,0xffd8e78a,0xf8ccdb7b,0xb49daa59,0x75747f36,0x74646e30,0x9b607143,0xe26d8868,0xff99af6e,0xffabbf6f, - 0xffbccb78,0xffc8d48b,0xffc6d18e,0xffc7d28f,0xffbeca7b,0xffa9ba57,0xff90a52a,0xff7d9619,0xff769125,0xff708e37,0xff5e8360,0xff537e6a,0xc646674b,0x94465913, - 0xc0607109,0xfa70850a,0xff6a7d09,0xff657808,0xf0697d07,0x391b1f08,0x24555555,0xd0b4c463,0xffd9e78d,0xffdae88f,0xffdae88f,0xf8ccdc7e,0xebc0cf70,0xe9bfce70, - 0xe8bac96b,0xf6c7d67a,0xffd6e48a,0xffd9e78f,0xffd8e68f,0xffd4e18d,0xffbecb7f,0xffabb96b,0xff99ab49,0xff879d1f,0xff7f970b,0xff7d940b,0xff7b910b,0xff798f0c, - 0xfc758c0f,0xf170860d,0xef718609,0xef718509,0xfa6f8309,0xff697d08,0xff657908,0xff627507,0xdd687c06,0x2c191d05,0x113c3c3c,0x8895a34b,0xefc7d679,0xffdbe892, - 0xffdbe892,0xffdbe892,0xffdae790,0xffdbe892,0xffdbe892,0xffdbe892,0xffdae891,0xffdae790,0xfccedc84,0xf7b3c470,0xf48ba266,0xf76d8964,0xfb5b7b4e,0xfc5e7d2d, - 0xfc6f8916,0xfe79900d,0xff798f0a,0xff768c0a,0xff74890a,0xff72870a,0xff6f8308,0xff6d8008,0xff697c08,0xff657907,0xff627507,0xf5677b07,0x95617306,0x130e1100, - 0x4000000,0x1f353919,0x8b93a04b,0xe2becd70,0xf9d0df86,0xfed9e691,0xffdce995,0xfedae793,0xfed8e590,0xfbd3e089,0xf6cfdd84,0xe1b9c76c,0xb597a450,0x8874803a, - 0x5d3e431e,0x43000000,0x45000000,0x63283004,0x8d4c5905,0xba607206,0xe4718508,0xf8758a09,0xfb728809,0xfe6f8409,0xfe6c8008,0xff697c08,0xfe677a08,0xfb677a07, - 0xea697c06,0x97607106,0x20252b01,0x4000000,0xffffff,0x4000000,0x13000000,0x6c889544,0xb8a9b85d,0xdabac86d,0xe2bdcc71,0xe6c2d176,0xd1b3c166,0xc1acbb5f, - 0x999ba952,0x50697333,0x25313615,0x1d31361a,0x12000000,0x11000000,0x12000000,0x14000000,0x201b1f01,0x2b1d2301,0x54455204,0x9d647607,0xc56b7f07,0xd66c8007, - 0xeb6e8207,0xe86c8007,0xe16b7e07,0xc2677a05,0x755a6b04,0x13000000,0x4000000,0xffffff,0xffffff,0xffffff,0x3000000,0x1250582b,0x27515927,0x557f8b3f, - 0x6a8a9746,0x61849142,0x3c60692f,0x346e7936,0x1941471f,0x7000000,0x3000000,0x2000000,0x1000000,0x2000000,0x2000000,0x2000000,0x3000000,0x3000000, - 0x8000000,0x192c3401,0x364d5b07,0x3e445006,0x66586804,0x705b6c04,0x5b566505,0x29384201,0x12333d01,0x3000000,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0x1000000,0x3000000,0x6000000,0x8000000,0x92f321c,0x4000000,0x3000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3000000,0x4000000,0x9181d00,0x8000000,0x6000000,0x3000000,0x1000000,0xffffff, + 0xffffff,0xffffff,0x1000000,0x4000000,0x7000000,0xc313520,0xd000000,0xd000000,0xb353923,0x5000000,0x2000000,0x2000000,0x3000000,0x5000000, + 0x9000000,0xc000000,0xd000000,0xd000000,0xb000000,0x8000000,0x6000000,0x4000000,0x6000000,0xa1b2000,0xd000000,0xd000000,0xb191d00,0x7000000, + 0x4000000,0x1000000,0xffffff,0xffffff,0x1000000,0x6000000,0x13000000,0x344a5225,0x7699a553,0x5e747e3e,0x98aab75e,0x8aa3b059,0x6994a14f,0x48828d45, + 0x26636b37,0x12000000,0x12000000,0x1a000000,0x23000000,0x2b000000,0x2f000000,0x2e000000,0x29000000,0x21000000,0x1e000000,0x2a39410c,0x3e5e6b08,0x57768610, + 0x73849713,0x7f8b9f12,0x5156620c,0x6278890f,0x30373f0a,0x13000000,0x6000000,0x1000000,0x7000000,0x325e6631,0xa9aab760,0xe3c2d078,0xf2cbd881,0xf5ccda84, + 0xd8bdcb71,0xd7becc72,0xd1c1cc7e,0xc7bfcb7c,0xa9b7c472,0x5c868f5a,0x3c1b202b,0x623f5868,0x99567c92,0xc4638aa3,0xd8668ea7,0xd3638da6,0xb95b859e,0x874c6f86, + 0x6f526940,0x968ca01d,0xab9aae1d,0xb69eb41d,0xc2a2b917,0xc2a2b817,0xedb4cc1b,0xe7afc81b,0xd3a4bb1a,0x938b9d14,0x2c454e0c,0x7000000,0x24515a29,0xb5aebc62, + 0xfad1de88,0xffd5e28d,0xd6b8c66c,0x71808c43,0x6f94a052,0x648d9852,0x6d8d9853,0x859fa777,0x93a4aa9e,0xb8a4b4b6,0xe39ab3bf,0xff86acbd,0xff76a6bc,0xff5d9ab6, + 0xff4087a9,0xff70a6bf,0xff75a8bd,0xff6c9fb7,0xf95f91ad,0xc9597f8f,0x9261784e,0x755b6b25,0x605d6a13,0x63707e16,0x66616e0f,0xc49bb01a,0xffbdd620,0xf7b6d01f, + 0xa08fa417,0x2240480f,0x658b9748,0xefc8d67a,0xffd5e38a,0xe2bcca6e,0x31000000,0x1027291a,0xe000000,0x19000000,0x35191f2b,0x7d355e78,0xe04a869a,0xff8eb5bd, + 0xffbcd4d4,0xffafd0d2,0xff9dccd5,0xff7ec4d7,0xff50a7bd,0xff92cedf,0xff92ccda,0xff93c9d6,0xff82b8c9,0xff5a99b0,0xff3b7fa0,0xbc467896,0x60375367,0x2a000000, + 0x1c0c0d00,0x34000000,0xd5a1b61e,0xffbdd724,0xe5adc420,0x58707e14,0x95a0ad53,0xf8cedc7d,0xffd3e285,0xb7a4b258,0x18000000,0x6000000,0x14000000,0x32252d33, + 0x9448768e,0xf9166c84,0xff418d92,0xffa0cbc7,0xff87b1ab,0xff679385,0xffadcfc9,0xffd8f5f2,0xffd3f6fa,0xffc5eff7,0xffbdecf4,0xffafe4ef,0xffaadeeb,0xff93d0dd, + 0xff33859a,0xff00608a,0xe24686ab,0x734d6d82,0x270d1616,0x25000000,0xa78a9b1b,0xffbed728,0xf3b5cc25,0x8586981b,0xa2a2af54,0xfcd0de7d,0xffd2e181,0xafa2af53, + 0x1f35391a,0x12000000,0x2f1a2228,0x9d638b9c,0xff237887,0xff036264,0xff3f877c,0xff377b61,0xff226238,0xff61946f,0xffc4eae3,0xffc5ede3,0xffddf7f7,0xffd1f4f8, + 0xffbdf0f8,0xffb7edf8,0xffb4ecf8,0xffaee9f7,0xff6ab2c2,0xff277d9a,0xff3c97b8,0xf364a1bb,0x724d6e81,0x381d1f0a,0xa3889a1f,0xffc0d82e,0xfabcd32d,0x938a9b1e, + 0x969baa4e,0xfed1e07b,0xfecfde7a,0xc0a9b757,0x25000000,0x25000000,0x856a848f,0xff4e939a,0xff0c6c5c,0xff206c51,0xff0d5b2b,0xff1d6528,0xffa7ceb9,0xffeeffff, + 0xffe7ffff,0xffcaf1ee,0xffd7f6f7,0xffdff8f9,0xffd3f5f8,0xffc1f0f8,0xffb7eef9,0xffafeafc,0xff97e0f9,0xff7bcce8,0xff459ebf,0xff348eb6,0xe05b95b1,0x632d3e4a, + 0xb990a323,0xfec0d731,0xfec0d833,0x88869820,0x718a9641,0xf4c7d76d,0xffcedd76,0xddb6c45e,0x3d17190f,0x594d5a5f,0xea86a8ad,0xff2e8477,0xff0f6738,0xff136117, + 0xff19711d,0xff98cbaa,0xfff2ffff,0xffedfdff,0xffdef8fb,0xffdefafe,0xffd3f8f9,0xffd3f6f9,0xffdaf7f8,0xffd3f4f8,0xffc0eef9,0xffb4ebfa,0xffa6ecfe,0xff7ccfe5, + 0xff1e7995,0xff006ba6,0xff207eaf,0xca51798e,0xdaa2b62e,0xffc2d938,0xf1b6cc34,0x69798822,0x364e5424,0xe2b9ca5e,0xffcddd71,0xf4c1d165,0x81666f2f,0xb87d9299, + 0xff7ea6a4,0xff10734d,0xff378354,0xff72b592,0xff97d0b2,0xffe4fcf8,0xfff0feff,0xffe4fafb,0xffe0f9fb,0xffdcf8f9,0xffd7f8f9,0xffd1f7f8,0xffd1f4f8,0xffd6f5f8, + 0xffd0f2f8,0xffbcedf8,0xffb8f3ff,0xff95d8e1,0xff2e7980,0xff006da5,0xff0072b0,0xff4a807e,0xf6b4ca3b,0xffc4db3f,0xdbacc035,0x34414912,0x1a2b3012,0xb0a1b04b, + 0xfecadb69,0xffcbdc6a,0xc592a147,0xf78da2a5,0xff7cac9f,0xff248550,0xffa5d4c1,0xffecfefd,0xffeeffff,0xfff3ffff,0xfff0feff,0xffe8fbfd,0xffe3fafb,0xffdff8fa, + 0xffdaf8f9,0xffd4f7f9,0xffcef5f9,0xffcbf2f8,0xffd1f3f8,0xffccf1f8,0xffc0f2fe,0xffabe6ef,0xff3d8380,0xff006d95,0xff0077b1,0xff69965e,0xffc5dc45,0xfec4da43, + 0xab94a52f,0x1b282d10,0x9000000,0x5e788331,0xefbccd5a,0xffc8da64,0xf3b2c357,0xff90a190,0xffa4c2b9,0xff7bc49d,0xfff3fdfd,0xfffdffff,0xffdff5f0,0xffc7eee2, + 0xffb4e3d5,0xffdcf7f4,0xffe7fbfd,0xffe2f9fa,0xffdff8f9,0xffd6f7f8,0xffd1f5f8,0xffcaf3f8,0xffc3f2f7,0xffcbf1f8,0xffcbf0fa,0xffbdf3fd,0xff549389,0xff00595f, + 0xff1f7893,0xffa3be4e,0xffc7dd4a,0xefb6c941,0x63687423,0xb000000,0x2000000,0x1d272a10,0xad98a73f,0xfdc4d75d,0xfec4d65c,0xffa2b268,0xffb2c3bb,0xff6ebb8f, + 0xff94d1ad,0xffe1f4ec,0xffeefcf9,0xffd9f7ef,0xffd3f3ee,0xffe4f9f8,0xffe8fbfc,0xffe0f8fc,0xffd6f7f9,0xffd7f7f8,0xffd1f6f8,0xffcbf3f8,0xffc3f1f7,0xffbfeef8, + 0xffc9eff8,0xffcbf4fc,0xff9ad2d9,0xff286254,0xff729352,0xffc6db50,0xffc4d850,0xb8899831,0x2b1d1f0c,0x4000000,0xffffff,0x9000000,0x50576023,0xe8b0c24b, + 0xffc4d757,0xffb9cc54,0xffb0bd93,0xffafd7c5,0xff9ed7b8,0xffb8e3d1,0xffeffcfb,0xfff8ffff,0xfff3ffff,0xfff5ffff,0xfff8ffff,0xffe3fcfd,0xffcbf5fa,0xffd1f6f8, + 0xffd1f6f8,0xffcbf3f8,0xffc4f1f7,0xffbdeef8,0xffbcecf8,0xffc4eef7,0xffbde7ef,0xff8bb28d,0xffbdd257,0xffcbde57,0xfea5be52,0x6f3f4617,0x18000000,0x2000000, + 0xffffff,0x3000000,0x20000000,0x9c737f2a,0xfeb7cb4f,0xffc0d453,0xffc3d17b,0xffd6ddce,0xffebf3f3,0xffcdf2e9,0xffa5dcca,0xff578a67,0xff488959,0xff4e9a65, + 0xff82bda1,0xffe2fcfb,0xffe7ffff,0xffd8fafc,0xffd1f6f8,0xffccf3f8,0xffc4f1f7,0xffbdeef8,0xffb4eaf7,0xffb4e3ef,0xffb1d2ca,0xffc3d682,0xffcde062,0xffbfd45d, + 0xfb567f62,0x47000000,0x12000000,0x2000000,0xffffff,0x2000000,0x14000000,0x5720240c,0xfc9aaf56,0xffc9da6f,0xffd1df8a,0xffc1ce89,0xffc8d4c5,0xfff1f6f6, + 0xffd7e8e3,0xff4f895c,0xff237c30,0xff2a802a,0xff1b6c1a,0xff408557,0xff60977f,0xffc9f2f3,0xffe3fffe,0xffcff8fd,0xffc6f2f8,0xffbbedf5,0xffade2ee,0xff9dc9c4, + 0xffbacf8c,0xffd7e58c,0xffd2e27a,0xffa1bc6c,0xf92a677a,0x3d000000,0x11000000,0x2000000,0xffffff,0x2000000,0xf000000,0x3c000000,0xf2829c8b,0xffc7d58d, + 0xffd0de81,0xffbbcd51,0xffadbf65,0xffccd7c4,0xffd4eae5,0xff61af7f,0xff30933f,0xff378a34,0xff357b30,0xff24681e,0xff0d4508,0xff488165,0xffa3d5d1,0xffa8dcda, + 0xffbcedf2,0xffb6e8f1,0xff9fcac3,0xffadc678,0xffcddf70,0xffd7e688,0xffc4d48b,0xff87ad9d,0xf839778b,0x3a000000,0x11000000,0x2000000,0xffffff,0x1000000, + 0xf000000,0x40505440,0xdc98aeb9,0xffb6c6aa,0xffc0d06b,0xffb7cc3c,0xffb4c83c,0xffaebe61,0xffb4cdb6,0xff4f9770,0xff288037,0xff368638,0xff2f7530,0xff2b692b, + 0xff2f682a,0xff174f14,0xff05410c,0xff0c481b,0xff488177,0xffa3d0ca,0xffb2ca7b,0xffcee06f,0xffd1e370,0xffc7d87c,0xffa6c2a3,0xff8ab2b7,0xf8457e8c,0x3c000000, + 0x11000000,0x2000000,0xffffff,0x3000000,0x1a222512,0x7da8b17a,0xc4b3bec4,0xffb3c4c0,0xffa7b975,0xffb0c53d,0xffb4ca36,0xffaec439,0xffaabc69,0xff739c7c, + 0xff246f39,0xff368d4e,0xff337b3f,0xff2b642a,0xff2b6128,0xff2d622b,0xff245624,0xff19431a,0xff638b76,0xffafc985,0xffcdde74,0xffd4e477,0xffcadc73,0xffa4c38d, + 0xff96c3c7,0xff89b0b0,0xfb5c8b75,0x46121308,0x12000000,0x2000000,0xffffff,0xa000000,0x5f8d994c,0xc9c8d38b,0xabb9bfc0,0xffa7bcbf,0xffa6bab0,0xffa6b974, + 0xffadc23b,0xffb0c630,0xffabbf35,0xff9eb053,0xff4a6e43,0xff257740,0xff2f7547,0xff2a652f,0xff295c27,0xff295c29,0xff205220,0xff406133,0xffadc478,0xffcdde79, + 0xffd6e57c,0xffc9da77,0xffa4c38d,0xff8fc6cf,0xff8fc4d2,0xff7aa09c,0xfa819d4d,0x7f606b1d,0x17000000,0x2000000,0x3000000,0x26434a1f,0xbab5c268,0xefd2df8a, + 0x9fb6b9b1,0xe48ba6af,0xffa6bebf,0xffb3c9c3,0xffa6bb78,0xffa9be35,0xffadc22a,0xffaabe2a,0xff9aae3f,0xff5a7946,0xff2a6b3c,0xff286937,0xff2a6029,0xff2a5927, + 0xff4e702f,0xffadc067,0xffd6e581,0xffd7e682,0xffcadb7b,0xffa4c390,0xff94cad5,0xff8fcee7,0xff82bbcf,0xff6a8f83,0xf894a82b,0xc9829320,0x2f343b0c,0x4000000, + 0xa000000,0x6e8b9746,0xf1cddc7a,0xefd1dd8e,0xa8b4bb8b,0x8e647c88,0xff95b5b9,0xffb2ccce,0xffb3cec8,0xffa5bb6a,0xffa6bc2e,0xffa8be25,0xffa6bc25,0xff9cb236, + 0xff68852f,0xff316227,0xff366129,0xff789143,0xffbdcf73,0xffd8e887,0xffd8e887,0xffcede80,0xffadc88c,0xff94cbd2,0xff8bcfe9,0xff7bc0de,0xff6da7be,0xfa6f8e64, + 0xf48c9d22,0xf48ea21b,0x796c7a14,0xa000000,0x16141414,0xb5adbc5f,0xfed8e78a,0xf3d2dd91,0xb0adb96d,0x48252e36,0xc5779bab,0xff9cbdc1,0xffb1d1d4,0xffaccbb8, + 0xff9fb867,0xffa2b72e,0xffa4bc22,0xffa2b820,0xff9ab022,0xff889b36,0xff98a759,0xffc7d57f,0xffd8e68c,0xffd9e88c,0xffcbdc82,0xffadc78d,0xff9acac4,0xff92d3e9, + 0xff70bdde,0xff66aece,0xff5b96b2,0xd8748c37,0xf686981b,0xfe889b17,0xc17e8f14,0x16050500,0x22353535,0xdcc2d173,0xffdce991,0xfcd8e68d,0xb5afbb6f,0x310a0a0a, + 0x583e5863,0xdc79a1af,0xff9cc0c4,0xff9ac7d1,0xff8dc0be,0xff96b470,0xff9db42d,0xffa5ba2a,0xffafc24c,0xffc0cd78,0xffcbd496,0xffcbd695,0xffd0db91,0xffc6d685, + 0xffa4c191,0xff95c7c9,0xff96d3e5,0xff8ccce3,0xff71b3d1,0xff619fc0,0xb73e7593,0xc5768617,0xfd889c14,0xff819414,0xe67f9212,0x271a1d0c,0x2d5c5c5c,0xeacbd97f, + 0xffdde995,0xffdde995,0xd7becb79,0x4e666e3b,0x2f191a13,0x6c455e6e,0xdf739bac,0xff81acb8,0xff79acb3,0xff8bad9a,0xff9baf6c,0xffb6c46e,0xffcbd68d,0xffd0da9c, + 0xffd0d99c,0xffcad494,0xffb7c47a,0xff96ac6c,0xff85ac94,0xff86babd,0xff85bdd1,0xff7bb4c8,0xff669eb9,0xbf457c9c,0x7941522e,0xdf7e9114,0xff819512,0xff7b8e12, + 0xf27c8f10,0x37272a0f,0x2f696969,0xe7cad77f,0xffddea99,0xffdeeb9a,0xf8d4e18c,0xb4abb66b,0x75858f47,0x74767f40,0x9b728254,0xe27e987a,0xffa7bb7f,0xffb7c980, + 0xffc6d389,0xffd1db9a,0xffcfd89d,0xffd0d99e,0xffc8d28c,0xffb6c469,0xff9fb239,0xff8da425,0xff87a034,0xff819d48,0xff709372,0xff658e7b,0xc658795d,0x94586b1e, + 0xc0728210,0xfa819512,0xff7b8d10,0xff77890f,0xf07a8d0d,0x39282d0f,0x24676767,0xd0bfcd75,0xffdfeb9c,0xffe0ec9e,0xffe0ec9e,0xf8d4e28e,0xebcad781,0xe9c9d681, + 0xe8c4d17c,0xf6d0dd8b,0xffdde89a,0xffdfeb9e,0xffdeea9e,0xffdbe69c,0xffc8d38f,0xffb7c47c,0xffa7b75b,0xff97ab2d,0xff8fa513,0xff8da313,0xff8ca013,0xff8a9e14, + 0xfc869b19,0xf1819616,0xef829610,0xef829510,0xfa809310,0xff7a8d0f,0xff778a0f,0xff74860d,0xdd7a8d0c,0x2c252a0a,0x114d4d4d,0x88a4b05d,0xefd0dd8a,0xffe1eca1, + 0xffe1eca1,0xffe1eca1,0xffe0eb9f,0xffe1eca1,0xffe1eca1,0xffe1eca1,0xffe0eca0,0xffe0eb9f,0xfcd6e294,0xf7becd81,0xf49aaf78,0xf77e9976,0xfb6d8c60,0xfc708d3d, + 0xfc809922,0xfe8a9f16,0xff8a9e12,0xff879b12,0xff859912,0xff839712,0xff80930f,0xff7e900f,0xff7a8d0f,0xff778a0d,0xff74860d,0xf5798c0d,0x9573840c,0x13171b00, + 0x4000000,0x1f464a25,0x8ba2ad5d,0xe2c8d581,0xf9d7e496,0xfedfeaa0,0xffe2eda4,0xfee0eba2,0xfedee99f,0xfbdae599,0xf6d7e394,0xe1c4d07d,0xb5a5b162,0x8885904b, + 0x5d4f542b,0x43000000,0x45000000,0x63374008,0x8d5e6b0a,0xba72830c,0xe482950f,0xf8869a10,0xfb839810,0xfe809410,0xfe7d900f,0xff7a8d0f,0xfe798b0f,0xfb798b0d, + 0xea7a8d0c,0x9772820c,0x20343b03,0x4000000,0xffffff,0x4000000,0x13000000,0x6c98a456,0xb8b6c36f,0xdac4d17e,0xe2c7d482,0xe6cbd887,0xd1becb78,0xc1b8c571, + 0x99a9b664,0x507a8443,0x25414720,0x1d414727,0x12000000,0x11000000,0x12000000,0x14000000,0x20282d03,0x2b2a3103,0x54576408,0x9d76870d,0xc57c8f0d,0xd67d900d, + 0xeb7f920d,0xe87d900d,0xe17c8e0d,0xc2798b0a,0x756c7c08,0x13000000,0x4000000,0xffffff,0xffffff,0xffffff,0x3000000,0x12626a3b,0x27636b36,0x558f9a50, + 0x6a9aa558,0x6194a053,0x3c727a3f,0x347f8a47,0x1952592d,0x7000000,0x3000000,0x2000000,0x1000000,0x2000000,0x2000000,0x2000000,0x3000000,0x3000000, + 0x8000000,0x193c4503,0x365f6d0d,0x3e56620c,0x666a7a08,0x706d7d08,0x5b68770a,0x29495303,0x12434e03,0x3000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0x1000000,0x3000000,0x6000000,0x8000000,0x93f4229,0x4000000,0x3000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3000000,0x4000000,0x9242a00,0x8000000,0x6000000,0x3000000,0x1000000,0xffffff, 0xffffff,0xffffff }; +static const QRgb ParaShoot_data[] = { + 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000, + 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000, + 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000, + 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000, + 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff03035a,0xff03035e,0xff03035f,0xff03035e, + 0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e, + 0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035b,0xff030354,0xff030249,0xff02023c,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000, + 0xff03035e,0xff688eb6,0xff6187b3,0xff5981af,0xff567fae,0xff567fae,0xff567fae,0xff567fae,0xff567fae,0xff809fc2,0xff95aecc,0xffaabed6,0xffaabed5,0xffa9bed5, + 0xff8aa5c5,0xff7f9cbf,0xff567dab,0xff567dab,0xff567dab,0xff567dac,0xff567eac,0xff567ead,0xff567eac,0xff557ba8,0xff537096,0xff4b5b78,0xff020126,0x5c000000, + 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff03035f,0xff6087b3,0xff4971a8,0xff35629f,0xff305e9c,0xff2f5d9c,0xff7090bb,0xffbecce0,0xfffefefe,0xfffefefe, + 0xfffdfdfd,0xfffcfcfc,0xfffafafa,0xfff8f8f8,0xfff6f6f6,0xfff2f2f2,0xffefefef,0xffb1bfd0,0xff7690b4,0xff3a6299,0xff2e5a94,0xff2f5b98,0xff2f5c99,0xff2e5993, + 0xff2c4d7d,0xff26334b,0xff010111,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff04035f,0xff5b83b1,0xff3966a2,0xff1f5295,0xff5278ae,0xffd3ddea, + 0xfffefefe,0xffe7e7e7,0xffdedede,0xffdedede,0xfff4f4f4,0xfff3f3f3,0xffdcdcdc,0xffdadada,0xffbbbbbb,0xffb8b8b8,0xffcacaca,0xffcbcbcb,0xffdadada,0xffcfd2d6, + 0xff7990ae,0xff224e89,0xff164788,0xff164686,0xff13376d,0xff0c1a34,0xff000006,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff040361,0xff5c83b2, + 0xff3565a2,0xff8da7ca,0xfff6f6f6,0xffaeaeae,0xff868686,0xff8e8e8e,0xff9e9e9e,0xff969696,0xff7f7f7f,0xff7f7f7f,0xff8e8e8e,0xff9d9d9d,0xffacacac,0xffb3b3b3, + 0xff999999,0xff8f8f8f,0xff757575,0xff848484,0xffadadad,0xffadb6c1,0xff1c4782,0xff103f7e,0xff0d326a,0xff051430,0xff000003,0x93000000,0x62000000,0x3b000000, + 0x1f000000,0x3d000000,0xff040362,0xff6188b5,0xffb4c5dc,0xffd8d8d8,0xff868686,0xffaeaeae,0xffeeeeee,0xfffefefe,0xfffefefe,0xff979797,0xffa7a7a7,0xffbfbfbf, + 0xff7f7f7f,0xffcfcfcf,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffbfbfb,0xffefefef,0xffc2c2c2,0xff7e7e7e,0xff747474,0xff949ba5,0xff123b76,0xff0e3167,0xff05142f, + 0xff000002,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff040364,0xff9fb6d3,0xffd5d5d5,0xff8b8b8b,0xffd5d5d5,0xfffefefe,0xffffffff,0xffffffff, + 0xffb7b7b7,0xff979797,0xffffffff,0xffffffff,0xffe7e7e7,0xff878787,0xffcfcfcf,0xffffffff,0xffffffff,0xfffefefe,0xfffcfcfc,0xfff7f7f7,0xffe9e9e9,0xffa2a2a2, + 0xff616161,0xff425772,0xff113264,0xff071530,0xff000002,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff05046b,0xffe5e6e9,0xff989898,0xffdddddd, + 0xfffefefe,0xffffffff,0xffffffff,0xffefefef,0xff7f7f7f,0xffefefef,0xffffffff,0xffffffff,0xffffffff,0xffe7e7e7,0xff7f7f7f,0xffe7e7e7,0xffffffff,0xfffefefe, + 0xfff8f8f8,0xffededed,0xffdbdbdb,0xffc2c2c2,0xff878787,0xff494c4f,0xff112f59,0xff081630,0xff000002,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000, + 0xff08057c,0xffb4b4b4,0xffc5c5c5,0xfffdfdfd,0xffffffff,0xffffffff,0xffffffff,0xffafafaf,0xffbfbfbf,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffbfbfbf,0xff979797,0xfffefefe,0xfff9f9f9,0xffe9e9e9,0xffd3d3d3,0xffbbbbbb,0xffa9a9a9,0xff9a9a9a,0xff88888a,0xff2c456b,0xff0a1732,0xff000003,0x99000000, + 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080574,0xffadadad,0xfffbfbfb,0xfffefefe,0xffffffff,0xffffffff,0xffefefef,0xff7f7f7f,0xffefefef,0xffffffff, + 0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xffffffff,0xff8e8e8e,0xffcccccc,0xffececec,0xffd2d2d2,0xffb3b6b9,0xff4f6a8c,0xff47658b,0xff3d4d63,0xff3c4d66, + 0xff2b4874,0xff0c1a35,0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff07045c,0xffdcdcdc,0xfffcfcfc,0xfffefefe,0xffffffff,0xffffffff, + 0xffc7c7c7,0xffa7a7a7,0xfffefefe,0xfffdfdfd,0xfffafafa,0xfff9f9f9,0xfff8f8f8,0xfff9f9f9,0xfffbfbfb,0xffcccccc,0xff888888,0xffd9d9d9,0xffbbbbbb,0xff687f9b, + 0xff183d71,0xff2c5a96,0xff13273f,0xff234777,0xff23477b,0xff0d1c38,0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff07045b,0xfff5f5f5, + 0xfff9f9f9,0xfffcfcfc,0xfffefefe,0xfffefefe,0xffa6a6a6,0xffcecece,0xfffafafa,0xfff2f2f2,0xffe9e9e9,0xffe2e2e2,0xffe0e0e0,0xffe2e2e2,0xffe8e8e8,0xffeaeaea, + 0xff7c7c7c,0xffa3a3a3,0xff9ea3a9,0xff2a5489,0xff204a85,0xff386dad,0xff0e1b2b,0xff3465a3,0xff284e86,0xff101f3a,0xff000003,0x99000000,0x66000000,0x3d000000, + 0x1f000000,0x3d000000,0xff08056b,0xffededed,0xffeeeeee,0xfff1f1f1,0xfff6f6f6,0xfffbfbfb,0xff858585,0xffe8e8e8,0xffebebeb,0xffd9d9d9,0xffc8c8c8,0xffbdbdbd, + 0xffbababa,0xffbbbbbb,0xffc0c0c0,0xffc3c3c3,0xff909090,0xff747474,0xff70839b,0xff2d5990,0xff2d5c9b,0xff37659d,0xff172c43,0xff3d70af,0xff2d548b,0xff11203c, + 0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080572,0xffdfdfdf,0xffdbdbdb,0xffdadada,0xffe3e3e3,0xffdfdfdf,0xff7f7f7f,0xffe4e4e4, + 0xffcfcfcf,0xffbebebe,0xff8695a7,0xff5d7491,0xff6f8199,0xff78889c,0xff9299a2,0xffa4a4a4,0xff929292,0xff818181,0xff466994,0xff2e5b96,0xff3b6eaf,0xff2e537e, + 0xff28456a,0xff4275b5,0xff32578f,0xff13223e,0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080571,0xffaebccb,0xff889fbc,0xffa0acbd, + 0xffcccccc,0xffb9b9b9,0xff858585,0xffc8c8c8,0xffacb0b6,0xff5d7da2,0xff3f6ba1,0xff376399,0xff2f5992,0xff406ea5,0xff3e699e,0xff426998,0xff667f9d,0xff6f747a, + 0xff406ca4,0xff2b5796,0xff497fc0,0xff253f5e,0xff395f8f,0xff477aba,0xff355c93,0xff142440,0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000, + 0xff040349,0xff8ca9c9,0xff658ebf,0xff4d79af,0xff7590af,0xffadadad,0xff8b8b8b,0xffa2a9b2,0xff325788,0xff4776b0,0xff4d81bd,0xff497bba,0xff3463a2,0xff5084c3, + 0xff4e81bf,0xff4c7eba,0xff4979b4,0xff121e2c,0xff4a7dbb,0xff305ea0,0xff5389cc,0xff18283b,0xff4b7eba,0xff4c7fbf,0xff3a6097,0xff162541,0xff000003,0x99000000, + 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff05034c,0xff6f7e8f,0xff6f9bcf,0xff5b8cc5,0xff4e7eb4,0xff7690b0,0xffa2a8ae,0xff4e76a5,0xff37639e,0xff4778b7, + 0xff598fcf,0xff588ecf,0xff3364a5,0xff5a90d2,0xff5990d0,0xff598fd0,0xff5487c3,0xff19293a,0xff4b7ebf,0xff3f72b3,0xff5284c0,0xff1b2c3f,0xff5990d1,0xff5386c5, + 0xff3e659b,0xff182743,0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff07057a,0xff738293,0xff4d617a,0xff6396d3,0xff5d8fcc,0xff5787c1, + 0xff304b6b,0xff2a425d,0xff578bca,0xff386aab,0xff5f95d5,0xff6198d8,0xff3a6cae,0xff5d92d4,0xff6197d8,0xff6198d9,0xff5787c1,0xff21344b,0xff477abc,0xff5084c5, + 0xff466e9d,0xff314d6e,0xff6096d6,0xff598bca,0xff436a9f,0xff1a2945,0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff07057e,0xffa5c3e6, + 0xff4f647d,0xff384f6c,0xff659ad8,0xff649ad9,0xff6297d4,0xff293f58,0xff436892,0xff4d80c1,0xff4f83c4,0xff679ede,0xff4679bb,0xff5a8fd0,0xff689ede,0xff679ede, + 0xff5987be,0xff2a405a,0xff3f72b3,0xff5f95d6,0xff39577a,0xff476e9a,0xff669ddc,0xff5f92cf,0xff476ea4,0xff1c2a47,0xff000003,0x99000000,0x66000000,0x3d000000, + 0x1f000000,0x3d000000,0xff070580,0xffabcaec,0xff82b0e4,0xff3a526f,0xff334c6a,0xff6ca1df,0xff6ea3e3,0xff6699d4,0xff213245,0xff5885b9,0xff4073b5,0xff689fde, + 0xff5388c8,0xff578ccd,0xff6ea5e4,0xff6ea5e4,0xff5581b2,0xff314a67,0xff3e71b3,0xff6ea5e4,0xff273b52,0xff5f8fc6,0xff6da3e2,0xff6598d5,0xff4c73a8,0xff1e2c49, + 0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080582,0xffb1cef0,0xff89b8ec,0xff78abe7,0xff364f6c,0xff354e6b,0xff72a8e6,0xff74abe9, + 0xff5e8bbd,0xff233446,0xff5789c7,0xff5387c9,0xff6096d6,0xff5388c9,0xff74abe9,0xff74abea,0xff547caa,0xff345072,0xff4f83c5,0xff71a6e3,0xff1f2e3f,0xff74abea, + 0xff73aae8,0xff6b9eda,0xff5177ad,0xff1f2e4b,0xff000004,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080584,0xffb5d3f4,0xff8ebdf1,0xff7fb4f0, + 0xff79aeeb,0xff38516e,0xff38516e,0xff78aeeb,0xff7ab1ef,0xff4f739c,0xff334a64,0xff497dbe,0xff679ddd,0xff4e83c5,0xff7ab1ef,0xff7ab1ef,0xff51759e,0xff345277, + 0xff6197d7,0xff618dbe,0xff354c67,0xff7ab1ef,0xff79b0ed,0xff70a3df,0xff557bb0,0xff212f4d,0xff000004,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000, + 0xff080585,0xffbad6f6,0xff93c1f4,0xff83b9f2,0xff7fb6f2,0xff7cb3ee,0xff3b536f,0xff3b536f,0xff7cb3ee,0xff7eb6f2,0xff3b536e,0xff3f6085,0xff5288c7,0xff487dbe, + 0xff7fb6f2,0xff7fb6f2,0xff4e7096,0xff33557f,0xff72a9e7,0xff4e7096,0xff4e7096,0xff7eb5f2,0xff7eb4f0,0xff75a7e2,0xff587eb3,0xff22304e,0xff000004,0x99000000, + 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080584,0xffb7d1f0,0xff8eb9eb,0xff80b0e9,0xff7bace7,0xff7bade7,0xff78aae4,0xff384f6a,0xff384f6a,0xff79aae4, + 0xff74a5dd,0xff293a4d,0xff3b6190,0xff4779b8,0xff74a6e2,0xff7aace8,0xff446082,0xff2f527e,0xff7aace7,0xff354b64,0xff628ab8,0xff7aade8,0xff79ace6,0xff709fd9, + 0xff5578ac,0xff212f4d,0xff000004,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff070578,0xffa1b5d2,0xff7898c5,0xff658abd,0xff6085ba,0xff5f85ba, + 0xff5f85ba,0xff5e82b7,0xff2c3d55,0xff2c3d55,0xff5e83b7,0xff5373a1,0xff43618a,0xff355b91,0xff5277ad,0xff5f85ba,0xff4c6fa0,0xff3a5e91,0xff5e85ba,0xff5779a9, + 0xff5e82b7,0xff5f85ba,0xff5f84b9,0xff577baf,0xff435d8e,0xff1c2844,0xff000004,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff060466,0xff7282a2, + 0xff45516a,0xff2d3b58,0xff263553,0xff253452,0xff253452,0xff253452,0xff253350,0xff172033,0xff24324f,0xff253452,0xff253452,0xff162543,0xff1a2845,0xff253452, + 0xff1d2c48,0xff1d2b48,0xff253452,0xff253452,0xff253452,0xff253452,0xff253351,0xff23304e,0xff1c2844,0xff0e1425,0xff000000,0x87000000,0x5a000000,0x36000000, + 0x17000000,0x2e000000,0xff040356,0xff03022e,0xff010112,0xff000008,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004, + 0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000000, + 0xff000000,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000, + 0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000, + 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000, + 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000, + 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000, + 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000, + 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000, + 0x18000000,0xf000000 +}; + static const QRgb Rotation_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3000000,0x6000000,0xb000000,0x12000000,0x19000000,0x21000000,0x29000000,0x2f000000, 0x35000000,0x38000000,0x3b040404,0x4d535353,0x5a828282,0x3d3f3f3f,0x2d060606,0x24070707,0x1b090909,0x140d0d0d,0xc151515,0x7242424,0x3000000,0x1000000, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000, 0x6e647e80,0xab7da6a7,0xd387b7b9,0xeb8bc0c2,0xf98dc6c8,0xfe8ac8ca,0xf97ec0c2,0xed6fb6b7,0xd8629ea2,0xcc90aeb0,0xa1849698,0x460b0b0b,0x390d0d0d,0x2b0c0c0c, 0x1f101010,0x130d0d0d,0xb171717,0x5000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000, 0x16000000,0x23000000,0x84759496,0xd091b9bb,0xfaabcecf,0xffa9d0d2,0xffa1ccce,0xff9acacc,0xff90c6c8,0xff89c4c6,0xff7fc1c3,0xff74bfc1,0xff69bcbe,0xff60b9bc, 0xfd88c1c4,0xe78bb4b7,0xa0395f62,0x4f101010,0x3a121212,0x28131313,0x19141414,0xe121212,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000, 0x2000000,0x7000000,0xe000000,0x1a000000,0x545f7474,0xc08eb5b6,0xfaafcfd1,0xffafcfd0,0xffadcccd,0xffa3c8ca,0xff9ac4c6,0xff93c0c2,0xff8abfbf,0xff80bbbd, 0xff79babc,0xff6fb8bb,0xff65b8ba,0xff5cb6b9,0xff50b2b5,0xff69a2a7,0xfe76b0b5,0xd2377579,0x7f293d3d,0x47121212,0x2f101010,0x1d121212,0xf111111,0x7000000, 0x2000000,0x1000000,0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x73728f8f,0xda9fc1c3,0xffb6d1d3,0xffb0cdce,0xffaac6c8,0xffa2bfc1,0xff96b8b9, 0xff8db3b5,0xff84adaf,0xff7cabac,0xff76aaac,0xff6fadae,0xff6ab1b3,0xff63b4b5,0xff58b4b6,0xff4eadb3,0xff61a1a6,0xff4f8a8f,0xff5f9ea3,0xe82d777c,0x9d2a4a4c, 0x50131313,0x33141414,0x1e111111,0xf111111,0x7242424,0x2000000,0x1000000,0x5000000,0xd000000,0x1a000000,0x736f8f8f,0xe2a1c3c5,0xffb5cfd1,0xffaec9cb, 0xffa2bec0,0xff98b4b5,0xff8ba6a8,0xff7e9a9d,0xff739395,0xff6b8c8e,0xff658c8d,0xff639092,0xff70a1a4,0xff88b3b6,0xff5aadaf,0xff53adb3,0xff4ba9b2,0xff40a0a8, 0xff5c9398,0xff4a8488,0xff418d95,0xef2b7378,0xa2294449,0x53161616,0x33141414,0x1e1a1a1a,0xe121212,0x62b2b2b,0x3000000,0xa000000,0x16000000,0x545c7174, 0xda9abec2,0xffb2cfd2,0xffacc8cb,0xffa2bdc0,0xff91abae,0xff80989b,0xff788e90,0xff9dadae,0xffa9babb,0xffb6c9ca,0xffc0d5d7,0xffb9d2d4,0xffb3cdce,0xff8fb4b7, 0xff52a4a7,0xff4da8b1,0xff45a6ad,0xff3b9da6,0xff6fa2a7,0xff5b9095,0xff498086,0xff297e86,0xec2a676e,0x91243537,0x4e141414,0x2f161616,0x18151515,0xb171717, 0x6000000,0x11000000,0x23000000,0xbf88b0b4,0xffafced2,0xffaac9cd,0xffa2bfc3,0xff92adb0,0xffb0c7c9,0xffc0d5d6,0xffcadcde,0xffd1e1e1,0xffd4e3e4,0xffd2e3e4, 0xffcedfe1,0xffc7dcdd,0xffbfd6d7,0xff4c8b8f,0xff4c9ca2,0xff47a2ab,0xff40a0ab,0xff399aa4,0xff6aa2a9,0xff6b9da1,0xff598c91,0xff427d83,0xff28767e,0xdd2a585d, 0x6c151515,0x45161616,0x27141414,0x120e0e0e,0xb000000,0x1b000000,0x846f8e93,0xfaa3c7cd,0xffa5c9cd,0xff9fc2c6,0xff92b2b6,0xff7f9a9e,0xff667e80,0xffd0dfe0, 0xffd9e6e6,0xffe0eaea,0xffe2eced,0xffe0eced,0xffdbe8e9,0xffd3e3e3,0xffa4bcbe,0xff43868c,0xff44969f,0xff429da8,0xff3a9ea8,0xff3796a1,0xff45949c,0xff77a6a9, 0xff65979b,0xff5c888b,0xff296c73,0xfc276b74,0xbb284146,0x5f151515,0x39161616,0x1d121212,0x12000000,0x26000000,0xd085afb6,0xff9dc7cd,0xff9dc3c9,0xff94b8be, 0xff84a4aa,0xff6d898d,0xff687b7e,0xffd9e6e8,0xffe4eded,0xffecf2f3,0xffeef3f4,0xffebf3f3,0xffe4eef0,0xffdbe8ea,0xff628a8e,0xff3f848c,0xff3c919d,0xff3796a2, 0xff3396a2,0xff36929d,0xff45919a,0xff7eabaf,0xff6e9ea2,0xff5c8e92,0xff2b646c,0xff28676e,0xe9285659,0x79171717,0x4b141414,0x2a121212,0x19000000,0x6e59747b, 0xfa93c0c7,0xff98c2ca,0xff92bbc3,0xff87acb3,0xff73959b,0xff5c767b,0xffd2e2e2,0xffdfeaeb,0xffebf2f3,0xfff4f7f8,0xfff8fafb,0xfff4f8f8,0xffebf2f3,0xffe1ebec, 0xff356f76,0xff37848e,0xff348e99,0xff2c909d,0xff308f9c,0xff328c98,0xff72a3a9,0xff83aeb2,0xff75a4a8,0xff639598,0xff2e5e65,0xff295f66,0xfc266069,0xb0233437, 0x5e161616,0x37131313,0x21000000,0xab6b969e,0xff8ebec7,0xff8bbbc3,0xff84b1ba,0xff779fa7,0xff62858c,0xffaabcbe,0xffd5e4e5,0xffe3eded,0xffedf4f4,0xfff7fafa, 0xffffffff,0xfff8fafa,0xffedf4f4,0xff8fa8ab,0xff30727c,0xff2e808e,0xff288795,0xff278795,0xff2b8795,0xff2f8491,0xff88aeb2,0xff85b0b3,0xff7aa7ab,0xff69999e, 0xff305960,0xff2b5a61,0xff265e66,0xd6264448,0x71171717,0x45121212,0x29000000,0xd370a1ac,0xff83b9c4,0xff80b4be,0xff78a8b2,0xff68939c,0xff54767d,0xffc4d8da, 0xffd3e2e3,0xffe0ecec,0xffebf2f2,0xfff3f8f8,0xfff7fafb,0xfff4f8f8,0xffebf2f3,0xff2b656f,0xff2a7481,0xff257d8e,0xff1f808e,0xff23818e,0xff277e8d,0xff2c7c87, 0xff8fb6ba,0xff86b1b4,0xff7aa8ab,0xff6c9b9f,0xff32545a,0xff2e545b,0xff285961,0xed264d51,0x80181818,0x4f131313,0x2f000000,0xeb70a7b3,0xff79b3bf,0xff75aeb9, 0xff6c9fa9,0xff5b858f,0xff81989c,0xffc1d7d8,0xffd0e1e1,0xffdbe8e9,0xffe5eeef,0xffebf2f3,0xff98a8ab,0xffd7e1e3,0xffe4edee,0xff276c7a,0xff237585,0xff1b7787, 0xff1e7888,0xff1e7585,0xff227382,0xff5c8f98,0xff8db6b8,0xff84b0b3,0xff7aa8ac,0xff6d9da2,0xff345056,0xff2f5056,0xff2a555c,0xf7264f57,0x8d191919,0x5a141414, 0x34000000,0xf96da9b8,0xff6dacba,0xff69a5b3,0xff5f95a1,0xff507b85,0xffa7c1c3,0xffbcd3d6,0xffc9dbdd,0xffd2e3e4,0xffdbe8e9,0xffb3c2c5,0xff28525c,0xff29606c, 0xff64929d,0xff206f7f,0xff187283,0xff1a7183,0xff1a6f81,0xff1a6b7c,0xff1f6978,0xff92b9bb,0xff8ab3b7,0xff82afb2,0xff79a8ab,0xff6e9ea2,0xff364c51,0xff324d53, 0xff2b5157,0xfc265259,0x961a1a1a,0x61181818,0x37000000,0xfe65a7b7,0xff64a6b6,0xff5f9ead,0xff558d9b,0xff47737e,0xffa7c5c7,0xffb4ced0,0xffc0d6d9,0xffc9dbdd, 0xffcfe1e2,0xff26535e,0xff28616e,0xff266a7a,0xff1f6e7f,0xff166e80,0xff166e80,0xff548d9a,0xff186677,0xff196071,0xff87abae,0xff8db6b9,0xff87b2b4,0xff7facb0, 0xff77a6a9,0xff749c9f,0xff36494d,0xff324b50,0xff2c4e56,0xfe25515b,0x9a1a1a1a,0x66171717,0x39040404,0xf9599daf,0xff5a9fb1,0xff5596a8,0xff4c8795,0xff3e6d78, 0xffa0c0c3,0xffabc8ca,0xffb6cfd2,0xffbdd5d7,0xff5c7b82,0xff265d6b,0xff25687a,0xff206d81,0xff176e81,0xff166c7f,0xff166a7d,0xffa9c7c9,0xff9ab9be,0xff769aa1, 0xff8fb7ba,0xff88b3b6,0xff83afb2,0xff7babae,0xff74a5a8,0xff6d7e80,0xff37484c,0xff334a4f,0xff2c4c52,0xfc244a53,0x9c1a1a1a,0x66171717,0x38050505,0xed4d8fa2, 0xff5099ac,0xff4c91a4,0xff448091,0xff396a77,0xff97bbbd,0xffa3c2c5,0xffabc8cb,0xffb1cccf,0xff235362,0xff216172,0xff1e687e,0xff176a80,0xff166a7e,0xff15667b, 0xff156175,0xff9fc1c4,0xff97bcbf,0xff90b8bb,0xff8ab4b7,0xff83afb3,0xff7eacb0,0xff79a9ab,0xff71a3a7,0xff394649,0xff39484c,0xff32494e,0xff2c4c53,0xf924444b, 0x98191919,0x64141414,0x35050505,0xd7447d90,0xff4691a7,0xff428a9f,0xff3d7b8e,0xff336675,0xff8fb4b8,0xff99bec1,0xffa0c1c3,0xff8ca6ab,0xff215667,0xff1c6274, 0xff19667b,0xff19677d,0xff16637b,0xff166074,0xff7097a1,0xff96bbbe,0xff8fb7ba,0xff88b4b7,0xff84b1b3,0xff7eadaf,0xff7aa9ac,0xff75a6a9,0xff7a9799,0xff3b4649, 0xff38474c,0xff32494f,0xff294851,0xf1233d44,0x931a1a1a,0x5f151515,0x30050505,0xb5366775,0xff3d88a2,0xff39829a,0xff36778c,0xff2e6376,0xff85aeb1,0xff8fb7b9, 0xff96bcbe,0xff6a878f,0xff1e5769,0xff1c6073,0xff1b6478,0xff196378,0xff185f74,0xff175a6e,0xff92b9bb,0xff8db6b8,0xff87b3b6,0xff82afb2,0xff7eadb0,0xff7aa9ad, 0xff77a6aa,0xff71a2a6,0xff3c4346,0xff3c4649,0xff37474c,0xff30474e,0xff274650,0xe121353b,0x89181818,0x59141414,0x2a060606,0x81294953,0xfb357e99,0xff337c97, 0xff30738b,0xff2c6377,0xff79a6aa,0xff85afb3,0xff8cb6b8,0xff315966,0xff225869,0xff215e72,0xff206177,0xff1c5f74,0xff1b5c72,0xff467483,0xff89b4b7,0xff85b1b4, 0xff81afb2,0xff7eacaf,0xff7aaaad,0xff76a7a9,0xff73a4a7,0xff545a5b,0xff3e4447,0xff3b464a,0xff36474d,0xff2d464f,0xfd25434c,0xc51f2a2d,0x7d181818,0x4f131313, 0x22080808,0x420c0c0c,0xd92c647a,0xff2d7593,0xff2a6d88,0xff276177,0xff6f9399,0xff78a6aa,0xff82adb2,0xff365b69,0xff265769,0xff265d72,0xff256074,0xff245e73, 0xff225a6f,0xff7e9fa5,0xff82afb2,0xff7fadb0,0xff7cabaf,0xff79a8ac,0xff75a6aa,0xff72a3a7,0xff6ea0a4,0xff3f4446,0xff3e4649,0xff3a474b,0xff33464c,0xff2a444c, 0xf2223940,0x9d1a1a1a,0x6d151515,0x420f0f0f,0x1a0a0a0a,0x350e0e0e,0x9d244b57,0xfb256b88,0xff246985,0xff236078,0xff456d7c,0xff6c9b9f,0xff76a5a8,0xff69858d, 0xff2b5769,0xff2a5d70,0xff295e73,0xff295d72,0xff295a6e,0xff7eacb0,0xff7cabaf,0xff78a9ad,0xff76a6a9,0xff74a5a9,0xff71a2a6,0xff6ca0a4,0xff689b9e,0xff6b9395, 0xff3b4549,0xff36454c,0xff2d434c,0xfd254049,0xd31f2c30,0x89181818,0x5c131313,0x350e0e0e,0x130d0d0d,0x280d0d0d,0x490e0e0e,0xd1215669,0xff1e6581,0xff1e5e7a, 0xff21576d,0xff5c8e93,0xff68999e,0xff74949a,0xff2e5768,0xff2f5c6d,0xff305e72,0xff2f5d71,0xff77959d,0xff76a7ab,0xff75a6a9,0xff73a5a8,0xff7a9fa3,0xff7b969a, 0xff788a8d,0xff4e5558,0xff3f474a,0xff3d474b,0xff36454b,0xff30434b,0xff28404b,0xec20343a,0x9e1b1b1b,0x73161616,0x49111111,0x280d0d0d,0xc151515,0x1d121212, 0x36131313,0x7b193339,0xe71a556a,0xff1c5b77,0xff20576f,0xff486b7a,0xff588a8f,0xff619497,0xff2e5465,0xff30596a,0xff325c6e,0xff335d6f,0xff718d95,0xff516d7b, 0xff375663,0xff39515c,0xff3b4e56,0xff3d4b52,0xff3e4b50,0xff3e4a4e,0xff3b484d,0xff38464e,0xff32434c,0xff29404b,0xf522383f,0xbe1e2528,0x83171717,0x5b141414, 0x350e0e0e,0x1c090909,0x7242424,0x120e0e0e,0x26141414,0x43131313,0x97173a46,0xee1a5167,0xff1c5670,0xff21526a,0xff507981,0xff508389,0xff638089,0xff315567, 0xff335a6b,0xff355b6c,0xff385b6c,0xff395a69,0xff3b5765,0xff3c555f,0xff3d515b,0xff3d4e56,0xff3c4c53,0xff394951,0xff364850,0xff2f434c,0xff29404b,0xf8233841, 0xcc1e282c,0x8e191919,0x66141414,0x42131313,0x250e0e0e,0x120e0e0e,0x3000000,0xb171717,0x18151515,0x2d111111,0x4b141414,0x9e193642,0xea1a4a5f,0xff1c4f6a, 0xff1f4e64,0xff3c6e75,0xff46787e,0xff2d5164,0xff315365,0xff345668,0xff365868,0xff375666,0xff395563,0xff3a5360,0xff3a505d,0xff384d57,0xff354a55,0xff324750, 0xff2d444f,0xff273f4b,0xf521363f,0xcc1e282c,0x921a1a1a,0x6c151515,0x4b111111,0x2d111111,0x170b0b0b,0xa000000,0x1000000,0x5000000,0xe121212,0x1c121212, 0x31151515,0x4e171717,0x8b182c33,0xdb194251,0xfc1c4b64,0xff1f4a62,0xff39666d,0xff386a70,0xff2b4e60,0xff2d4f61,0xff305062,0xff325161,0xff33505e,0xff324d5c, 0xff324b59,0xff2f4855,0xff2c4653,0xff28414e,0xfd243d49,0xeb1f323a,0xbc1e2526,0x8e191919,0x6c151515,0x4d111111,0x30101010,0x1b090909,0xd000000,0x5000000, 0xffffff,0x2000000,0x6000000,0xf111111,0x1d121212,0x31151515,0x4b141414,0x68161616,0xb719333e,0xe81c404f,0xfc1c465b,0xff5b7984,0xff50727b,0xff25485c, 0xff27495a,0xff29495a,0xff294658,0xff294757,0xff274252,0xff264251,0xfd223f4c,0xf1213640,0xd11e2b30,0x9d1c1c1c,0x82181818,0x66141414,0x4a111111,0x30101010, 0x1c090909,0xe000000,0x6000000,0x2000000,0xffffff,0x1000000,0x2000000,0x7000000,0x10202020,0x1d1a1a1a,0x2d171717,0x44171717,0x5c161616,0x75181818, 0xad192b32,0xd41a3841,0xed39555f,0xfa6f858f,0xfd466371,0xfe214253,0xfc20404f,0xf81f3c4a,0xef1f3842,0xde1e3139,0xc31c282e,0x9b1a1a1a,0x87191919,0x73161616, 0x5a141414,0x42131313,0x2d111111,0x1b090909,0xe000000,0x7000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,0x2000000,0x7242424,0xe121212, 0x18151515,0x26141414,0x38171717,0x4a151515,0x5d161616,0x6f171717,0x7e181818,0x8b1a1a1a,0x9c3a3a3a,0xa9575757,0xa74c4c4c,0x9f3a3a3a,0x98353535,0x8a252525, 0x7d181818,0x6c151515,0x5b141414,0x49111111,0x350e0e0e,0x250e0e0e,0x170b0b0b,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff, 0xffffff,0x1000000,0x2000000,0x62b2b2b,0xb171717,0x120e0e0e,0x1d121212,0x29131313,0x37131313,0x44131313,0x4f131313,0x59141414,0x60181818,0x65171717, 0x66171717,0x64141414,0x5f151515,0x58141414,0x4e141414,0x420f0f0f,0x350e0e0e,0x280d0d0d,0x1c090909,0x120e0e0e,0xa000000,0x5000000,0x2000000,0x1000000, 0xffffff,0xffffff }; static const QRgb SettingsIcon_data[] = { - 0xff778145,0xff788246,0xff788246,0xff778144,0xff768141,0xff75803d,0xff737f37,0xff717d31,0xff6e7c29,0xff6b7a20,0xff697819,0xff677712,0xff627211,0x24000000, - 0xff788246,0xffcde06a,0xffcde06a,0xffccdf66,0xffc9de5e,0xffb7cc4f,0xff5c662c,0xff7d7f79,0xff838483,0xff454c23,0xff839a0d,0xff99b604,0xff5d6c11,0x6b000000, - 0xff788246,0xffcde06a,0xffcde069,0xffcbdf64,0xffc8dd5b,0xffbdd24d,0xff687330,0xff87888c,0xffdddde9,0xff9f9fa6,0xff2c3118,0xff768a10,0xff586611,0x8f000000, - 0xff778144,0xffccdf66,0xffcbdf64,0xffc9de5e,0xffc6db54,0xffc1d946,0xffb3ca36,0xff57621e,0xff7b7c7e,0xffcfcfdc,0xff5b5b61,0xff3c4513,0xff525f11,0x8f000000, - 0xff768141,0xffc9de5e,0xffc8dd5b,0xff97a746,0xffa1b341,0xffbcd537,0xffb1cb26,0xff9ab317,0xff3b4312,0xffb2b2bb,0xff909097,0xff202313,0xff4d5911,0x8f000000, - 0xff75803d,0xffc5db52,0xffb6ca4a,0xff4e513d,0xff585e40,0xff92a726,0xffadc917,0xffa6c601,0xff404b07,0xffb8b8be,0xff8d8d95,0xff10120a,0xff475211,0x8f000000, - 0xff737f37,0xffc1d946,0xff809032,0xff97979b,0xffb8b8c1,0xff494f2f,0xff798f07,0xff647606,0xff707361,0xffd2d2da,0xffa4a4ad,0xff222322,0xff434d11,0x8f000000, - 0xff717d31,0xffbcd537,0xff94a92c,0xff60615c,0xffdadae6,0xffacacb5,0xff55584a,0xff7b7d73,0xffcdcdd4,0xffa9a9b2,0xff9e9ea7,0xff86868d,0xff404911,0x8f000000, - 0xff6e7c29,0xffb5d125,0xffafcb1c,0xff546115,0xff5f5f63,0xffb8b8c2,0xffd1d1db,0xffd9d9e3,0xffb5b5c0,0xff8e8e96,0xffbbbbc2,0xffbfbfca,0xff3d4611,0x8f000000, - 0xff6b7a20,0xffb0ce13,0xffa9c707,0xff91ab09,0xff414b10,0xff2b2c27,0xff414144,0xff4e4e53,0xff8f8f98,0xffb1b1bb,0xffe2e2e8,0xffe8e8ee,0xff3b4311,0x8f000000, - 0xff697819,0xffaaca01,0xffa0bf00,0xff91ac03,0xff7b900b,0xff586516,0xff3d441a,0xff20240e,0xff2f302f,0xff97979f,0xffcdcdd5,0xfff0f0f4,0xff3a4211,0x8f000000, - 0xff677712,0xffa1c000,0xff97b400,0xff8ba501,0xff7c9303,0xff6c7f08,0xff5e6e10,0xff546016,0xff353d11,0xff333430,0xffa4a4ad,0xffd3d3dd,0xff3b4311,0x8f000000, - 0xff627211,0xff5d6c11,0xff586611,0xff525f11,0xff4d5911,0xff475211,0xff434d11,0xff404911,0xff3d4611,0xff3b4311,0xff3a4211,0xff3b4311,0xff3c4511,0x8f000000, + 0xff889157,0xff899258,0xff899258,0xff889156,0xff879152,0xff86904e,0xff848f48,0xff828d41,0xff7f8d38,0xff7c8b2e,0xff7a8925,0xff79881d,0xff74831b,0x24000000, + 0xff899258,0xffd5e57b,0xffd5e57b,0xffd4e478,0xffd1e370,0xffc2d461,0xff6e783c,0xff8d8f8a,0xff939493,0xff575e31,0xff93a816,0xffa7c108,0xff6f7d1b,0x6b000000, + 0xff899258,0xffd5e57b,0xffd5e57a,0xffd3e476,0xffd1e36d,0xffc7d95f,0xff7a8440,0xff97989b,0xffe3e3ed,0xffadadb3,0xff3c4124,0xff879a1a,0xff6a781b,0x8f000000, + 0xff889156,0xffd4e478,0xffd3e476,0xffd1e370,0xffcfe166,0xffcbdf58,0xffbed247,0xff69742b,0xff8c8d8e,0xffd7d7e2,0xff6d6d73,0xff4d571e,0xff64711b,0x8f000000, + 0xff879152,0xffd1e370,0xffd1e36d,0xffa5b458,0xffaebe52,0xffc6dc48,0xffbdd335,0xffa8be23,0xff4c541d,0xffbdbdc5,0xff9f9fa5,0xff2e311e,0xff5f6b1b,0x8f000000, + 0xff86904e,0xffcee164,0xffc1d25c,0xff60634e,0xff6a7051,0xffa1b435,0xffb9d123,0xffb3cf03,0xff515d0d,0xffc3c3c8,0xff9c9ca4,0xff1a1d12,0xff59641b,0x8f000000, + 0xff848f48,0xffcbdf58,0xff909f42,0xffa5a5a9,0xffc3c3cb,0xff5b613f,0xff8a9e0d,0xff76870c,0xff818473,0xffd9d9e0,0xffb1b1b9,0xff303130,0xff545f1b,0x8f000000, + 0xff828d41,0xffc6dc48,0xffa3b63c,0xff72736e,0xffe0e0ea,0xffb8b8c0,0xff676a5c,0xff8c8d84,0xffd5d5db,0xffb6b6bd,0xffacacb4,0xff96969c,0xff515b1b,0x8f000000, + 0xff7f8d38,0xffc0d834,0xffbbd329,0xff667320,0xff717175,0xffc3c3cb,0xffd8d8e1,0xffdfdfe8,0xffc0c0ca,0xff9d9da4,0xffc5c5cb,0xffc9c9d2,0xff4e581b,0x8f000000, + 0xff7c8b2e,0xffbcd61e,0xffb6d00d,0xffa0b710,0xff525d1a,0xff3b3c36,0xff525256,0xff606065,0xff9e9ea6,0xffbdbdc5,0xffe7e7ec,0xffececf1,0xff4c541b,0x8f000000, + 0xff7a8925,0xffb6d203,0xffadc900,0xffa0b806,0xff8c9f13,0xff6a7722,0xff4e5627,0xff2e3317,0xff3f403f,0xffa5a5ad,0xffd5d5dc,0xfff3f3f6,0xff4b531b,0x8f000000, + 0xff79881d,0xffaeca00,0xffa5bf00,0xff9ab203,0xff8da206,0xff7d8f0f,0xff707f1a,0xff667222,0xff464e1b,0xff434540,0xffb1b1b9,0xffdadae3,0xff4c541b,0x8f000000, + 0xff74831b,0xff6f7d1b,0xff6a781b,0xff64711b,0xff5f6b1b,0xff59641b,0xff545f1b,0xff515b1b,0xff4e581b,0xff4c541b,0xff4b531b,0xff4c541b,0xff4d571b,0x8f000000, 0x24000000,0x6b000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x6b000000 }; static const QRgb Shutdown_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3000000,0x6000000,0xb000000,0x12000000,0x19000000,0x21000000,0x29000000,0x2f000000, 0x34000000,0x37000000,0x38000000,0x37000000,0x34000000,0x2f000000,0x29000000,0x21000000,0x19000000,0x12000000,0xb000000,0x6000000,0x3000000,0x1000000, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000, - 0x5d8b4143,0x93b85357,0xbed15b5f,0xdedf5f63,0xf3e85e63,0xfeee5d61,0xf3e75457,0xe0dc4b4d,0xc4c73e42,0x9fa73032,0x70721d20,0x3f000000,0x33000000,0x26000000, + 0x5d9a5254,0x93c36569,0xbed86d71,0xdee47175,0xf3ec7075,0xfef16f73,0xf3eb6669,0xe0e25d5f,0xc4d04f53,0x9fb44042,0x70832a2e,0x3f000000,0x33000000,0x26000000, 0x1b000000,0x11000000,0xa000000,0x5000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000, - 0x16000000,0x23000000,0x6fa55154,0xbad2666a,0xf5ee7277,0xfff17275,0xffef6d71,0xffeb676a,0xffe96064,0xffe85b5e,0xffe85358,0xffe94e53,0xffec484c,0xffed4146, - 0xf7e8393e,0xc6c12a2e,0x8884191c,0x45000000,0x33000000,0x23000000,0x16000000,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000, - 0x2000000,0x7000000,0xe000000,0x1a000000,0x47793d3e,0xa7cc6669,0xf5f0797c,0xfff4787c,0xfff3777b,0xffef7174,0xffe96a6e,0xffe46366,0xffde5b5f,0xffdb5458, - 0xffdd4f53,0xffe2494e,0xffe74348,0xffeb3d42,0xffee373c,0xffef3036,0xf8e7282e,0xbcb01a1e,0x6c4d090b,0x3e000000,0x2a000000,0x1a000000,0xe000000,0x7000000, - 0x2000000,0x1000000,0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x5f9b4f51,0xc6db7072,0xfff57d80,0xfff57b7e,0xfff47a7d,0xfff07579,0xffea6e71, - 0xffe2676a,0xffd85e61,0xffd05457,0xffcc4e51,0xffcf484b,0xffd74447,0xffde3e43,0xffe7393d,0xffeb3237,0xffed2b31,0xffee2429,0xffed1d23,0xd7c11419,0x85670a0d, - 0x46000000,0x2e000000,0x1b000000,0xe000000,0x6000000,0x2000000,0x1000000,0x5000000,0xd000000,0x1a000000,0x5f9b4f51,0xd0e07276,0xfff57d81,0xfff47d7f, - 0xfff47b7e,0xfff2797c,0xffec7377,0xffe36b6e,0xffd55f63,0xffc85659,0xffffffff,0xffffffff,0xffffffff,0xffc63c40,0xffd2373b,0xffde3237,0xffe82d31,0xffeb262a, - 0xffec1e24,0xffeb181e,0xffe5171d,0xe0bd1318,0x8a5e0a0c,0x48000000,0x2e000000,0x1a000000,0xd000000,0x5000000,0x3000000,0xa000000,0x16000000,0x47793d3e, - 0xc6db7072,0xfff57d81,0xfff47d80,0xfff37c7f,0xfff0797c,0xffed7679,0xffe46d71,0xffd76567,0xffc7585b,0xffb94e51,0xffffffff,0xffffffff,0xffffffff,0xffb73438, - 0xffc43034,0xffd32b31,0xffde252b,0xffe71f25,0xffe8191e,0xffe4171d,0xffde171c,0xffd9161b,0xdbaa1116,0x7b3b0607,0x46000000,0x2a000000,0x16000000,0xa000000, - 0x6000000,0x11000000,0x23000000,0xa7cc6669,0xfff57d80,0xfff47d7f,0xfff27c7e,0xffee7a7c,0xffe97477,0xffe26f73,0xffd7666a,0xffc85c5f,0xffb64f52,0xffa84548, - 0xffffffff,0xffffffff,0xffffffff,0xffa62d30,0xffb3282c,0xffc42428,0xffd21f24,0xffdb191f,0xffda161c,0xffd9161b,0xffd6161b,0xffd2151b,0xffcd151a,0xc88b0e11, - 0x60000000,0x3e000000,0x23000000,0x11000000,0xb000000,0x1b000000,0x6fa55154,0xf5f0797c,0xfff47b7e,0xfff37a7d,0xffee787b,0xffe87376,0xffdc6c70,0xffd36569, - 0xffc65d60,0xffc26e71,0xffcd999a,0xff993d40,0xffffffff,0xffffffff,0xffffffff,0xff982528,0xffcb8486,0xffbe4044,0xffc0181c,0xffca151a,0xffcb1519,0xffcd151a, - 0xffcb1419,0xffca151a,0xffc41419,0xf9b91217,0xa257090b,0x55000000,0x33000000,0x1b000000,0x12000000,0x26000000,0xbad2666a,0xfff4787c,0xfff47a7d,0xfff0787b, - 0xffe97477,0xffdc6c70,0xffce6366,0xffc25c5e,0xffd2999a,0xffeddcdc,0xffffffff,0xff8c3638,0xffffffff,0xffffffff,0xffffffff,0xff8b2023,0xffffffff,0xffedd2d3, - 0xffce7375,0xffb41217,0xffb71318,0xffbe1318,0xffc11419,0xffc11419,0xffbd1318,0xffb81317,0xd7860d11,0x6c000000,0x45000000,0x26000000,0x19000000,0x5d8b4143, - 0xf5ef7377,0xfff3777b,0xfff07579,0xffea7276,0xffdf6b6f,0xffd16367,0xffbe5a5c,0xffd7a6a8,0xfffefefe,0xffffffff,0xffffffff,0xff873234,0xffffffff,0xffffffff, - 0xffffffff,0xff851b1e,0xffffffff,0xffffffff,0xfffefdfd,0xffce8587,0xffa51015,0xffae1216,0xffb21217,0xffb61217,0xffb41317,0xffb11216,0xfaa61115,0x9b3b0608, - 0x56000000,0x33000000,0x21000000,0x93ba5558,0xfff47376,0xfff37376,0xffee7073,0xffe56c6f,0xffd66467,0xffc35a5d,0xffcf9799,0xfffefefe,0xffffffff,0xffffffff, - 0xffecdfdf,0xff862e31,0xffffffff,0xffffffff,0xffffffff,0xff84171a,0xffecdada,0xffffffff,0xffffffff,0xfffefdfd,0xffbe7173,0xff9b1014,0xffa41115,0xffa91116, - 0xffab1215,0xffa81115,0xffa51115,0xc25f0a0c,0x67000000,0x3f000000,0x29000000,0xbed35d61,0xfff46f73,0xfff26e72,0xffeb6b6f,0xffdf6467,0xffcd5b5e,0xffc16b6d, - 0xffeddbdc,0xffffffff,0xffffffff,0xffd1adae,0xffa1595a,0xff8c2c2e,0xffffffff,0xffffffff,0xffffffff,0xff8a1317,0xff9c3c3f,0xffcc9c9e,0xffffffff,0xffffffff, - 0xffe7d0d1,0xff9d3437,0xff950f13,0xff9d1014,0xffa01014,0xffa01014,0xff9e1014,0xde730c0f,0x75000000,0x4a000000,0x2f000000,0xdee26164,0xfff36a6d,0xffef686b, - 0xffe76567,0xffd75c60,0xffc25256,0xffd1999a,0xffffffff,0xffffffff,0xffeedfe0,0xffa85a5c,0xff952f32,0xff982a2d,0xffffffff,0xffffffff,0xffffffff,0xff940f13, - 0xff8a0e11,0xff983c3e,0xffead9d9,0xffffffff,0xffffffff,0xffb7797b,0xff870e11,0xff910f13,0xff960f13,0xff960f13,0xff960f13,0xef810d10,0x81000000,0x53000000, - 0x34000000,0xf3ec6165,0xfff36468,0xffef6266,0xffe45c60,0xffd35458,0xffbc494c,0xffe2c3c4,0xffffffff,0xffffffff,0xffd0a3a4,0xff9e3034,0xffa32d30,0xffa7282b, - 0xffffffff,0xffffffff,0xffffffff,0xff9b1013,0xff8f0e12,0xff830d10,0xffc29294,0xffffffff,0xffffffff,0xffd3b3b4,0xff7b0c0f,0xff850e10,0xff8d0e12,0xff8f0f12, - 0xff8e0e12,0xf9870d11,0x89000000,0x59000000,0x37000000,0xfef25f63,0xfff35f63,0xffed5b5f,0xffe15659,0xffce4c50,0xffb74245,0xfff3e7e7,0xffffffff,0xffffffff, - 0xffba6e70,0xffa72c2f,0xffb0292c,0xffb62327,0xffffffff,0xffffffff,0xffffffff,0xffa11015,0xff930f12,0xff830d11,0xff9e5759,0xffffffff,0xffffffff,0xffede1e2, - 0xff720b0e,0xff7b0d0f,0xff830d11,0xff870e12,0xff880e11,0xfe870e11,0x8e000000,0x5e000000,0x38000000,0xf3eb5559,0xfff2575c,0xffed5559,0xffe04e51,0xffcb4449, - 0xffb53a3e,0xfffefdfd,0xffffffff,0xffffffff,0xffa94144,0xffad2629,0xffbb2326,0xffc41d22,0xffc51419,0xffbd1317,0xffb31217,0xffa61015,0xff940f13,0xff810d10, - 0xff81292b,0xffffffff,0xffffffff,0xfffdfcfc,0xff6a0a0d,0xff740c0f,0xff7c0d10,0xff800d11,0xff820d10,0xfa7b0c0f,0x90000000,0x5f000000,0x37000000,0xe0df4c4f, - 0xfff15156,0xffec4c51,0xffe0474a,0xffcd3e42,0xffb63337,0xfff3e5e6,0xffffffff,0xffffffff,0xffbb6467,0xffad1e22,0xffbd1a1f,0xffc8151a,0xffc41419,0xffbc1318, - 0xffb11216,0xffa21015,0xff8e0e12,0xff790c0f,0xff975658,0xffffffff,0xffffffff,0xffebe1e1,0xff650b0d,0xff6f0b0e,0xff760c0f,0xff7b0d10,0xff7d0d10,0xf26a0b0e, - 0x8e000000,0x5e000000,0x34000000,0xc4c93f43,0xfff1494e,0xffed454a,0xffe13f43,0xffd0373b,0xffb92e31,0xffe2bbbc,0xffffffff,0xffffffff,0xffd09899,0xffa51418, - 0xffb21216,0xffb91217,0xffb91218,0xffb11216,0xffa51115,0xff950f12,0xff800d10,0xff6d0b0e,0xffb79192,0xffffffff,0xffffffff,0xffcbb3b3,0xff620a0c,0xff6c0b0e, - 0xff720b0e,0xff760c0f,0xff770c0f,0xe558090b,0x89000000,0x59000000,0x2f000000,0x9fa93034,0xfff04247,0xffec3d42,0xffe4383d,0xffd43034,0xffbf272c,0xffcf8385, - 0xffffffff,0xffffffff,0xffeed9da,0xffab3d40,0xff9f1014,0xffa41014,0xffa51115,0xff9f1014,0xff930f12,0xff830d10,0xff710c0e,0xff7f393b,0xffe4d8d9,0xffffffff, - 0xffffffff,0xffa37778,0xff600a0c,0xff680b0d,0xff6e0b0e,0xff700c0e,0xff740c0f,0xd1400608,0x81000000,0x53000000,0x29000000,0x70721d20,0xf7e9393e,0xffed373c, - 0xffe73136,0xffda2a2f,0xffc82227,0xffbe3e42,0xffecd2d2,0xffffffff,0xffffffff,0xffce9d9e,0xffa13c40,0xff8e0e12,0xff8e0e12,0xff870e11,0xff7e0d10,0xff710b0e, - 0xff80393c,0xffba9b9b,0xffffffff,0xffffffff,0xffded0d0,0xff733031,0xff610a0d,0xff670a0d,0xff6c0b0e,0xff6f0b0e,0xfc6c0a0d,0xb5220404,0x75000000,0x4a000000, - 0x21000000,0x3f000000,0xc6c12a2e,0xffee3036,0xffe82a30,0xffdf2428,0xffd11c21,0xffbe161a,0xffca7274,0xfffefdfd,0xffffffff,0xffffffff,0xffead9d9,0xffc39294, - 0xffa15759,0xff82292c,0xff975658,0xffb79192,0xffe4d8d9,0xffffffff,0xffffffff,0xfffefdfd,0xff9a6d6f,0xff5b0a0b,0xff620a0c,0xff680a0d,0xff6a0b0e,0xff6d0b0e, - 0xe64e080a,0x93000000,0x67000000,0x3f000000,0x19000000,0x33000000,0x8884191c,0xf8e6282e,0xffea2328,0xffe41d23,0xffd9171c,0xffc51419,0xffb01216,0xffcb8587, - 0xfffefdfd,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefdfd,0xffa78183,0xff59090b,0xff60090c, - 0xff640a0d,0xff680b0d,0xff6a0b0e,0xfc680a0d,0xc32b0405,0x81000000,0x56000000,0x33000000,0x12000000,0x26000000,0x45000000,0xbcb01a1e,0xffec1d23,0xffe7181d, - 0xffda161c,0xffc91519,0xffb71318,0xffa51015,0xffbe7173,0xffe7d0d1,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffded0d0, - 0xff9a6d6f,0xff59090b,0xff5e090c,0xff620a0d,0xff660a0d,0xff680b0d,0xff6a0b0d,0xdf430709,0x94000000,0x6c000000,0x45000000,0x26000000,0xb000000,0x1b000000, - 0x33000000,0x6c4d090b,0xd7c01419,0xffe3171d,0xffd9161b,0xffcd151a,0xffbd1317,0xffae1216,0xff9c1014,0xff9e3437,0xffb8797b,0xffd3b3b4,0xffede1e2,0xfffdfcfc, - 0xffebe1e1,0xffccb3b3,0xffa47778,0xff743031,0xff5d0a0c,0xff60090c,0xff620a0d,0xff660a0d,0xff670b0d,0xff690b0d,0xed50080a,0xae160203,0x7b000000,0x55000000, - 0x33000000,0x1b000000,0x6000000,0x11000000,0x23000000,0x3e000000,0x85670a0d,0xe0bc1318,0xffd6161b,0xffcd141a,0xffc21419,0xffb41217,0xffa61115,0xff970f13, - 0xff8a0e12,0xff7f0d10,0xff740c0e,0xff6d0b0d,0xff680b0e,0xff650a0d,0xff640a0d,0xff620a0d,0xff630a0c,0xff650a0d,0xff660a0d,0xff670b0d,0xff690b0d,0xf054080a, - 0xbc220304,0x85000000,0x60000000,0x3e000000,0x23000000,0x11000000,0x3000000,0xa000000,0x16000000,0x2a000000,0x46000000,0x8a5e0a0c,0xdba91116,0xffca151a, - 0xffc11419,0xffb71217,0xffac1216,0xffa01014,0xff930f13,0xff890e11,0xff800d10,0xff770c0f,0xff720c0e,0xff6e0b0e,0xff6c0b0d,0xff6a0b0e,0xff690a0d,0xff690b0d, - 0xff6a0b0e,0xff690b0d,0xed50080a,0xbc220304,0x88000000,0x66000000,0x46000000,0x2a000000,0x16000000,0xa000000,0x1000000,0x5000000,0xd000000,0x1a000000, - 0x2e000000,0x48000000,0x7b3b0607,0xc88a0e11,0xf9b81217,0xffb51317,0xffae1215,0xffa31014,0xff990f13,0xff8e0e12,0xff870e11,0xff800d11,0xff7a0c10,0xff750c0f, - 0xff720b0e,0xff6e0c0e,0xff6d0b0e,0xff6b0b0e,0xfc680a0d,0xdf430709,0xae160203,0x85000000,0x66000000,0x48000000,0x2e000000,0x1a000000,0xd000000,0x5000000, - 0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x2e000000,0x46000000,0x60000000,0xa257090b,0xd7850d11,0xfaa51115,0xffa41115,0xff9c1014,0xff940f13, - 0xff8b0e12,0xff850e11,0xff7f0d10,0xff7b0d10,0xff750c0f,0xff730c0f,0xfc6c0a0d,0xe64e080a,0xc32b0405,0x94000000,0x7b000000,0x60000000,0x46000000,0x2e000000, + 0x16000000,0x23000000,0x6fb26366,0xbad9787b,0xf5f18388,0xfff38386,0xfff27e82,0xffee797b,0xffed7276,0xffec6d70,0xffec656a,0xffed6065,0xffef5a5e,0xfff05258, + 0xf7ec4a4f,0xc6cb393e,0x88942529,0x45000000,0x33000000,0x23000000,0x16000000,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000, + 0x2000000,0x7000000,0xe000000,0x1a000000,0x478a4e4f,0xa7d4787a,0xf5f38a8d,0xfff6898d,0xfff5888c,0xfff28285,0xffed7b7f,0xffe87578,0xffe36d71,0xffe1666a, + 0xffe36165,0xffe75b60,0xffeb545a,0xffee4e53,0xfff1484d,0xfff24047,0xf8eb373e,0xbcbc272b,0x6c5f1013,0x3e000000,0x2a000000,0x1a000000,0xe000000,0x7000000, + 0x2000000,0x1000000,0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x5fa96163,0xc6e18183,0xfff78d90,0xfff78c8e,0xfff68b8d,0xfff3868a,0xffee7f82, + 0xffe7797b,0xffde7073,0xffd76669,0xffd46063,0xffd75a5d,0xffdd5659,0xffe34f54,0xffeb4a4e,0xffee4248,0xfff03b41,0xfff13338,0xfff02a31,0xd7cb1f25,0x85791216, + 0x46000000,0x2e000000,0x1b000000,0xe000000,0x6000000,0x2000000,0x1000000,0x5000000,0xd000000,0x1a000000,0x5fa96163,0xd0e58387,0xfff78d91,0xfff68d8f, + 0xfff68c8e,0xfff48a8d,0xffef8488,0xffe87c7f,0xffdc7175,0xffd1686b,0xffffffff,0xffffffff,0xffffffff,0xffcf4d51,0xffd9484c,0xffe34248,0xffec3d41,0xffee3539, + 0xffef2b33,0xffee242b,0xffe9232a,0xe0c71e24,0x8a701214,0x48000000,0x2e000000,0x1a000000,0xd000000,0x5000000,0x3000000,0xa000000,0x16000000,0x478a4e4f, + 0xc6e18183,0xfff78d91,0xfff68d90,0xfff58d8f,0xfff38a8d,0xfff0878a,0xffe87e82,0xffdd7779,0xffd06a6d,0xffc46063,0xffffffff,0xffffffff,0xffffffff,0xffc24549, + 0xffcd4045,0xffda3b41,0xffe3343b,0xffeb2d34,0xffec252b,0xffe8232a,0xffe32329,0xffdf2228,0xdbb61b22,0x7b4c0c0d,0x46000000,0x2a000000,0x16000000,0xa000000, + 0x6000000,0x11000000,0x23000000,0xa7d4787a,0xfff78d90,0xfff68d8f,0xfff48d8e,0xfff18b8d,0xffed8588,0xffe78084,0xffdd787b,0xffd16e71,0xffc16164,0xffb5575a, + 0xffffffff,0xffffffff,0xffffffff,0xffb33d40,0xffbe373c,0xffcd3337,0xffd92d33,0xffe1252d,0xffe02229,0xffdf2228,0xffdd2228,0xffd92028,0xffd52027,0xc89a171b, + 0x60000000,0x3e000000,0x23000000,0x11000000,0xb000000,0x1b000000,0x6fb26366,0xf5f38a8d,0xfff68c8e,0xfff58b8d,0xfff1898c,0xffec8487,0xffe27d81,0xffda777a, + 0xffcf6f72,0xffcb7f82,0xffd5a7a8,0xffa74e51,0xffffffff,0xffffffff,0xffffffff,0xffa63437,0xffd39496,0xffc85156,0xffca2429,0xffd22027,0xffd32025,0xffd52027, + 0xffd31f25,0xffd22027,0xffcd1f25,0xf9c41d23,0xa2691013,0x55000000,0x33000000,0x1b000000,0x12000000,0x26000000,0xbad9787b,0xfff6898d,0xfff68b8d,0xfff3898c, + 0xffed8588,0xffe27d81,0xffd67578,0xffcb6e70,0xffd9a7a8,0xfff0e2e2,0xffffffff,0xff9b4749,0xffffffff,0xffffffff,0xffffffff,0xff9a2e31,0xffffffff,0xfff0d9da, + 0xffd68486,0xffbf1d23,0xffc21e24,0xffc81e24,0xffcb1f25,0xffcb1f25,0xffc71e24,0xffc31e23,0xd796161b,0x6c000000,0x45000000,0x26000000,0x19000000,0x5d9a5254, + 0xf5f28488,0xfff5888c,0xfff3868a,0xffee8387,0xffe47c80,0xffd87579,0xffc86c6e,0xffddb3b5,0xfffefefe,0xffffffff,0xffffffff,0xff974245,0xffffffff,0xffffffff, + 0xffffffff,0xff95282b,0xffffffff,0xffffffff,0xfffefdfd,0xffd69597,0xffb21a20,0xffba1d22,0xffbd1d23,0xffc11d23,0xffbf1e23,0xffbd1d22,0xfab31b20,0x9b4c0c0f, + 0x56000000,0x33000000,0x21000000,0x93c4676a,0xfff68487,0xfff58487,0xfff18184,0xffe97d80,0xffdd7679,0xffcc6c6f,0xffd7a5a7,0xfffefefe,0xffffffff,0xffffffff, + 0xffefe4e4,0xff963e41,0xffffffff,0xffffffff,0xffffffff,0xff942327,0xffefe0e0,0xffffffff,0xffffffff,0xfffefdfd,0xffc88284,0xffa91a1f,0xffb11b20,0xffb61b22, + 0xffb71d20,0xffb51b20,0xffb21b20,0xc2711214,0x67000000,0x3f000000,0x29000000,0xbeda6f73,0xfff68084,0xfff47f83,0xffee7c80,0xffe47679,0xffd56d70,0xffcb7c7e, + 0xfff0e1e2,0xffffffff,0xffffffff,0xffd8b9ba,0xffae6b6c,0xff9b3c3e,0xffffffff,0xffffffff,0xffffffff,0xff9a1e23,0xffaa4d50,0xffd4aaac,0xffffffff,0xffffffff, + 0xffebd7d8,0xffab4548,0xffa4191e,0xffab1a1f,0xffad1a1f,0xffad1a1f,0xffac1a1f,0xde841419,0x75000000,0x4a000000,0x2f000000,0xdee77376,0xfff57b7e,0xfff27a7c, + 0xffeb7779,0xffdd6e72,0xffcb6468,0xffd8a7a8,0xffffffff,0xffffffff,0xfff1e4e5,0xffb56c6e,0xffa43f42,0xffa6393d,0xffffffff,0xffffffff,0xffffffff,0xffa3191e, + 0xff9a171b,0xffa64d4f,0xffeedfdf,0xffffffff,0xffffffff,0xffc28a8c,0xff97171b,0xffa0191e,0xffa4191e,0xffa4191e,0xffa4191e,0xef91161a,0x81000000,0x53000000, + 0x34000000,0xf3ef7377,0xfff5767a,0xfff27478,0xffe86e72,0xffda666a,0xffc65b5e,0xffe7cccd,0xffffffff,0xffffffff,0xffd7b0b1,0xffac4045,0xffb03d40,0xffb4373b, + 0xffffffff,0xffffffff,0xffffffff,0xffa91a1e,0xff9e171d,0xff93161a,0xffcba1a3,0xffffffff,0xffffffff,0xffdabebf,0xff8c1419,0xff95171a,0xff9c171d,0xff9e191d, + 0xff9d171d,0xf997161b,0x89000000,0x59000000,0x37000000,0xfef47175,0xfff57175,0xfff06d71,0xffe6686b,0xffd65e62,0xffc25357,0xfff5ebeb,0xffffffff,0xffffffff, + 0xffc47f81,0xffb43c3f,0xffbc383c,0xffc13136,0xffffffff,0xffffffff,0xffffffff,0xffae1a20,0xffa2191d,0xff93161b,0xffac696b,0xffffffff,0xffffffff,0xfff0e6e7, + 0xff831317,0xff8c1619,0xff93161b,0xff97171d,0xff98171b,0xfe97171b,0x8e000000,0x5e000000,0x38000000,0xf3ee676b,0xfff4696e,0xfff0676b,0xffe56063,0xffd3565b, + 0xffc04b4f,0xfffefdfd,0xffffffff,0xffffffff,0xffb65256,0xffb93538,0xffc53135,0xffcd2a30,0xffce1f25,0xffc71e23,0xffbe1d23,0xffb31a20,0xffa3191e,0xff91161a, + 0xff91383b,0xffffffff,0xffffffff,0xfffdfdfd,0xff7b1216,0xff851419,0xff8d161a,0xff90161b,0xff92161a,0xfa8c1419,0x90000000,0x5f000000,0x37000000,0xe0e45e61, + 0xfff36368,0xffef5e63,0xffe5595c,0xffd54f53,0xffc14348,0xfff5e9ea,0xffffffff,0xffffffff,0xffc57679,0xffb92b30,0xffc7272d,0xffd12027,0xffcd1f25,0xffc61e24, + 0xffbd1d22,0xffaf1a20,0xff9d171d,0xff8a1419,0xffa5686a,0xffffffff,0xffffffff,0xffeee6e6,0xff771316,0xff801317,0xff871419,0xff8c161a,0xff8d161a,0xf27b1317, + 0x8e000000,0x5e000000,0x34000000,0xc4d15054,0xfff35b60,0xfff0575c,0xffe65054,0xffd7484c,0xffc43e41,0xffe7c5c6,0xffffffff,0xffffffff,0xffd7a6a7,0xffb21f24, + 0xffbd1d22,0xffc41d23,0xffc41d24,0xffbd1d22,0xffb21b20,0xffa4191d,0xff90161a,0xff7e1317,0xffc2a0a1,0xffffffff,0xffffffff,0xffd3bebe,0xff741214,0xff7d1317, + 0xff831317,0xff871419,0xff881419,0xe56a1013,0x89000000,0x59000000,0x2f000000,0x9fb64045,0xfff35359,0xffef4e53,0xffe8494e,0xffdb4045,0xffc9363c,0xffd79395, + 0xffffffff,0xffffffff,0xfff1dfe0,0xffb74e51,0xffad1a1f,0xffb11a1f,0xffb21b20,0xffad1a1f,0xffa2191d,0xff93161a,0xff821417,0xff8f4a4c,0xffe8dedf,0xffffffff, + 0xffffffff,0xffb08889,0xff721214,0xff7a1316,0xff7f1317,0xff811417,0xff851419,0xd1510c0f,0x81000000,0x53000000,0x29000000,0x70832a2e,0xf7ed4a4f,0xfff0484d, + 0xffeb4147,0xffe0393f,0xffd13036,0xffc84f53,0xffefd9d9,0xffffffff,0xffffffff,0xffd6abac,0xffae4d51,0xff9d171d,0xff9d171d,0xff97171b,0xff8e161a,0xff821317, + 0xff904a4d,0xffc4a9a9,0xffffffff,0xffffffff,0xffe3d7d7,0xff844041,0xff731216,0xff791216,0xff7d1317,0xff801317,0xfc7d1216,0xb5300808,0x75000000,0x4a000000, + 0x21000000,0x3f000000,0xc6cb393e,0xfff14047,0xffec3940,0xffe43337,0xffd8292f,0xffc82227,0xffd28385,0xfffefdfd,0xffffffff,0xffffffff,0xffeedfdf,0xffcca1a3, + 0xffae696b,0xff92383c,0xffa5686a,0xffc2a0a1,0xffe8dedf,0xffffffff,0xffffffff,0xfffefdfd,0xffa87e80,0xff6d1213,0xff741214,0xff7a1216,0xff7b1317,0xff7e1317, + 0xe6600f12,0x93000000,0x67000000,0x3f000000,0x19000000,0x33000000,0x88942529,0xf8ea373e,0xffee3137,0xffe82a31,0xffdf2329,0xffce1f25,0xffbc1d22,0xffd39597, + 0xfffefdfd,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefdfd,0xffb49193,0xff6b1013,0xff721014, + 0xff761216,0xff7a1316,0xff7b1317,0xfc7a1216,0xc33b080a,0x81000000,0x56000000,0x33000000,0x12000000,0x26000000,0x45000000,0xbcbc272b,0xffef2a31,0xffeb242a, + 0xffe02229,0xffd12025,0xffc21e24,0xffb21a20,0xffc88284,0xffebd7d8,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe3d7d7, + 0xffa87e80,0xff6b1013,0xff701014,0xff741216,0xff781216,0xff7a1316,0xff7b1316,0xdf540d10,0x94000000,0x6c000000,0x45000000,0x26000000,0xb000000,0x1b000000, + 0x33000000,0x6c5f1013,0xd7ca1f25,0xffe8232a,0xffdf2228,0xffd52027,0xffc71e23,0xffba1d22,0xffaa1a1f,0xffac4548,0xffc38a8c,0xffdabebf,0xfff0e6e7,0xfffdfdfd, + 0xffeee6e6,0xffd4bebe,0xffb18889,0xff854041,0xff6f1214,0xff721014,0xff741216,0xff781216,0xff791316,0xff7a1316,0xed620f12,0xae220506,0x7b000000,0x55000000, + 0x33000000,0x1b000000,0x6000000,0x11000000,0x23000000,0x3e000000,0x85791216,0xe0c61e24,0xffdd2228,0xffd51f27,0xffcb1f25,0xffbf1d23,0xffb31b20,0xffa5191e, + 0xff9a171d,0xff8f161a,0xff851417,0xff7e1316,0xff7a1317,0xff771216,0xff761216,0xff741216,0xff751214,0xff771216,0xff781216,0xff791316,0xff7a1316,0xf0660f12, + 0xbc300608,0x85000000,0x60000000,0x3e000000,0x23000000,0x11000000,0x3000000,0xa000000,0x16000000,0x2a000000,0x46000000,0x8a701214,0xdbb61b22,0xffd22027, + 0xffcb1f25,0xffc21d23,0xffb81d22,0xffad1a1f,0xffa2191e,0xff99171b,0xff90161a,0xff881419,0xff831417,0xff7f1317,0xff7d1316,0xff7b1317,0xff7a1216,0xff7a1316, + 0xff7b1317,0xff7a1316,0xed620f12,0xbc300608,0x88000000,0x66000000,0x46000000,0x2a000000,0x16000000,0xa000000,0x1000000,0x5000000,0xd000000,0x1a000000, + 0x2e000000,0x48000000,0x7b4c0c0d,0xc89a171b,0xf9c31d23,0xffc01e23,0xffba1d20,0xffb01a1f,0xffa7191e,0xff9d171d,0xff97171b,0xff90161b,0xff8b141a,0xff861419, + 0xff831317,0xff7f1417,0xff7e1317,0xff7c1317,0xfc7a1216,0xdf540d10,0xae220506,0x85000000,0x66000000,0x48000000,0x2e000000,0x1a000000,0xd000000,0x5000000, + 0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x2e000000,0x46000000,0x60000000,0xa2691013,0xd795161b,0xfab21b20,0xffb11b20,0xffaa1a1f,0xffa3191e, + 0xff9a171d,0xff95171b,0xff8f161a,0xff8c161a,0xff861419,0xff841419,0xfc7d1216,0xe6600f12,0xc33b080a,0x94000000,0x7b000000,0x60000000,0x46000000,0x2e000000, 0x1b000000,0xe000000,0x6000000,0x2000000,0xffffff,0x1000000,0x2000000,0x7000000,0xe000000,0x1a000000,0x2a000000,0x3e000000,0x55000000,0x6c000000, - 0x9b3b0608,0xc25f0a0c,0xde730c0f,0xef810d10,0xf9870d11,0xfe870e11,0xfa7b0c0f,0xf26a0b0e,0xe558090b,0xd1400608,0xb5220404,0x93000000,0x81000000,0x6c000000, + 0x9b4c0c0f,0xc2711214,0xde841419,0xef91161a,0xf997161b,0xfe97171b,0xfa8c1419,0xf27b1317,0xe56a1013,0xd1510c0f,0xb5300808,0x93000000,0x81000000,0x6c000000, 0x55000000,0x3e000000,0x2a000000,0x1a000000,0xe000000,0x7000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000, 0x16000000,0x23000000,0x33000000,0x45000000,0x56000000,0x67000000,0x75000000,0x81000000,0x89000000,0x8e000000,0x90000000,0x8e000000,0x89000000,0x81000000, 0x75000000,0x67000000,0x56000000,0x45000000,0x33000000,0x23000000,0x16000000,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff, 0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,0x33000000,0x3f000000,0x4a000000,0x53000000,0x59000000,0x5e000000, 0x5f000000,0x5e000000,0x59000000,0x53000000,0x4a000000,0x3f000000,0x33000000,0x26000000,0x1b000000,0x11000000,0xa000000,0x5000000,0x2000000,0x1000000, 0xffffff,0xffffff }; static const QRgb Snake_data[] = { 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000, 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000, 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000, 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000, 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff522300,0xff522300,0xff522300,0xff522300, 0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300, 0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000, 0xff522300,0xff282d0c,0xff285b16,0xff326f18,0xff42a025,0xff409d25,0xff2f6213,0xff337219,0xff2e6415,0xff3b8a1e,0xff43a325,0xff38861e,0xff367f1d,0xff3f9824, 0xff234b10,0xff2b5b12,0xff326e18,0xff387d1a,0xff2f6615,0xff2b5711,0xff255112,0xff254e0f,0xff326a15,0xff2e5e12,0xff1c3609,0xff0d4b00,0xff522300,0x5c000000, 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff522300,0xff347117,0xff126d00,0xff0c3d00,0xff072000,0xff093200,0xff126000,0xff157b00,0xff147500,0xff178100, 0xff199d00,0xff126e00,0xff116800,0xff0b4000,0xff093100,0xff115e00,0xff146a00,0xff115b00,0xff0d3b00,0xff105200,0xff0f4b00,0xff146300,0xff1a9400,0xff1da800, 0xff105600,0xff062600,0xff522300,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff522300,0xff1e450e,0xff0e5600,0xff126f00,0xff0e5300,0xff0f5800, 0xff115e00,0xff157f00,0xff126600,0xff0e5900,0xff0d4f00,0xff062400,0xff083300,0xff0a3d00,0xff0a3600,0xff0f5500,0xff0d4a00,0xff0d4400,0xff0c4200,0xff0f4e00, 0xff0e4b00,0xff0f5800,0xff167700,0xff178400,0xff0e5000,0xff051a00,0xff522300,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff522300,0xff122a08, 0xff0c4900,0xff0e5e00,0xff0c5200,0xff0c4d00,0xff0c4e00,0xff0c5300,0xff083800,0xff072e00,0xff062a00,0xff052200,0xff052000,0xff062500,0xff062300,0xff072400, 0xff072700,0xff0d5600,0xff105f00,0xff116400,0xff0b3600,0xff0c4000,0xff147500,0xff1a9600,0xff147400,0xff0d4b00,0xff522300,0x93000000,0x62000000,0x3b000000, 0x1f000000,0x3d000000,0xff522300,0xff143508,0xff073700,0xff094700,0xff084a00,0xff063600,0xff042100,0xff042600,0xff021300,0xff021400,0xff021200,0xff021900, 0xff021b00,0xff021c00,0xff021b00,0xff020f00,0xff031a00,0xff073400,0xff083a00,0xff0a4500,0xff051b00,0xff041400,0xff0e5900,0xff147800,0xff189600,0xff116600, 0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff0b3206,0xff032c00,0xff032e00,0xff022800,0xff011100,0xff010f00,0xff000b00, 0xff000d00,0xff001600,0xff001400,0xff000e00,0xff000c00,0xff000b00,0xff011400,0xff011600,0xff011a00,0xff022100,0xff032700,0xff042c00,0xff052c00,0xff052600, 0xff093a00,0xff0f6100,0xff127200,0xff093700,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff041c02,0xff011200,0xff001300, 0xff000f00,0xff001000,0xff001900,0xff001800,0xff0a1b07,0xff182f0e,0xff293a1d,0xff384427,0xff435030,0xff3f4b27,0xff35451d,0xff273810,0xff1b320a,0xff061901, 0xff000f00,0xff010f00,0xff021800,0xff021800,0xff042100,0xff052400,0xff062600,0xff083000,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000, 0xff522300,0xff021000,0xff001600,0xff001b00,0xff001800,0xff001500,0xff061f04,0xff365025,0xff7f9354,0xffaeb874,0xffabac96,0xff9c9c93,0xff7e7e79,0xff4e4e49, 0xff1b1a10,0xff232314,0xff4a4f24,0xff485c15,0xff273d0b,0xff0a1f02,0xff001a00,0xff000f00,0xff010f00,0xff010c00,0xff021300,0xff052500,0xff522300,0x99000000, 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff021200,0xff001700,0xff001c00,0xff001c00,0xff0c2209,0xff799359,0xffbbc988,0xffd9da95,0xffcbc891, 0xffa2a19b,0xff919191,0xff696969,0xff212121,0xff000000,0xff111006,0xff726c22,0xffa8b528,0xff97b621,0xff527b09,0xff1f4103,0xff031300,0xff000900,0xff000700, 0xff010e00,0xff031b00,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff031601,0xff001800,0xff001900,0xff001700,0xff89a168, 0xffe1ebb3,0xffebeebb,0xffe9e9a0,0xffc2be99,0xff95948e,0xff818181,0xff4b4b4b,0xff000000,0xff000000,0xff443e14,0xffad9f2d,0xffbdc927,0xffb7d138,0xff8eba01, 0xff7ea32c,0xff2e5305,0xff050f01,0xff000500,0xff000a00,0xff010700,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff051b02, 0xff001000,0xff000e00,0xff374b29,0xffe2eebc,0xffdfe9a5,0xffe1e69a,0xffe5e595,0xffb6af6f,0xff797979,0xff616161,0xff1c1c1c,0xff000000,0xff030201,0xff918743, 0xffc4bc29,0xffc0cb2c,0xff9fb412,0xffb5cd4c,0xff7db20c,0xff5f9816,0xff204204,0xff020600,0xff000a00,0xff010c00,0xff522300,0x99000000,0x66000000,0x3d000000, 0x1f000000,0x3d000000,0xff522300,0xff081e03,0xff010b00,0xff26371c,0xffadc586,0xffdfecb4,0xffd3e096,0xffd8df80,0xffe6e192,0xffa39951,0xff5e5d59,0xff383837, 0xff000000,0xff000000,0xff2c2605,0xffc0af61,0xffc1bc18,0xffc3d036,0xffb9d23a,0xffbdc969,0xff8cbd2f,0xff6aa71b,0xff4b8318,0xff0f2803,0xff010e00,0xff021200, 0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff091e03,0xff011300,0xff81a261,0xffc2dc94,0xffcee191,0xffc7d27f,0xffdae185, 0xffd5d85a,0xffa39f3d,0xff59563a,0xff181818,0xff000000,0xff000000,0xff564e1a,0xffb8ae06,0xffd4d154,0xffbdce2b,0xff91a301,0xff78a800,0xff639c00,0xff57940f, 0xff60972e,0xff1e4b04,0xff011000,0xff031500,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff154007,0xff042000,0xff96bb69, 0xffbdd88a,0xffb3cf73,0xffd7ddad,0xffced973,0xffbcc729,0xff9c9916,0xff514f25,0xff080807,0xff000000,0xff080700,0xff716b26,0xffc2c627,0xffb2bd01,0xffa5be01, 0xff9ec316,0xff8aba1f,0xff478400,0xff3f7d01,0xff609137,0xff3e6923,0xff032000,0xff052200,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000, @@ -3211,124 +3288,124 @@ static const QRgb WordGame_data[] = { 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000, 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000, 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000, 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000, 0x18000000,0xf000000 }; static const QRgb accessories_data[] = { 0x0,0x0,0x0,0x0,0xffffff,0xcc9900,0xcc9900,0xcccc33,0xcc9900,0xcc9900,0xcc9900,0xcccc33,0xcc9900,0xffcc66, 0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x9999ff, 0x0,0x0,0xffcc66,0x0,0xff000000,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xff000000,0xffcc66, 0x0,0xffff99,0x0,0xff000000,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xff000000,0xffcc66,0x0, 0xffcc66,0xffcc99,0xffffcc99,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffff99,0xffcc66, 0xffff66,0xffffcc99,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffffcc99,0xffffcc99,0xff000000,0xffcc66, 0xffffcc99,0xff000000,0xff000000,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xff000000,0xffffcc99,0xffffcc99,0xffffcc99,0xff000000, 0xff000000,0xffcc99,0xff000000,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xff000000,0xff666633,0xffffcc99,0xff000000,0x0, 0xffff66,0xcccc33,0xff000000,0xffffcc66,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xff000000,0xff666633,0xff000000,0xffff99,0x0, 0x0,0xcc9900,0xff000000,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xff000000,0xff666633,0xff000000,0x6666cc,0x0, 0x0,0xcc9933,0xff000000,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xff000000,0xff666633,0xff000000,0x0,0x0, 0x0,0x0,0xff000000,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xff000000,0xff000000,0x0,0x0,0x0, 0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0, 0x0,0xcc9900,0x0,0x0,0x0,0xcc9933,0xcc9933,0xcc9933,0xcc9933,0xffcc33,0x0,0x0,0x0,0x0 }; static const QRgb appearance_data[] = { 0x0,0x0,0x0,0x0,0x0,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0x0,0x0, 0x0,0x0,0x0,0xc0c0c0,0x0,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000, 0xff404000,0xff404000,0xdcdcdc,0x0,0x0,0x0,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000, 0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0x0,0x0,0xff404000,0xff404000,0xff404000,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc, 0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff404000,0xff404000,0xff404000,0x0,0xff404000,0xff000000,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc, 0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff000000,0xff404000,0x0,0xff404000,0xff000000,0xffdcdcdc, 0xff000000,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0xff000000,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0xff000000,0xff404000,0x0,0x0, 0xff000000,0xff000000,0xff000000,0xff585858,0xff585858,0xff000000,0xff000000,0xff000000,0xff585858,0xff585858,0xff000000,0xff000000,0xff000000,0x0, 0x0,0xffffff,0xff000000,0xffdcdcdc,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff000000,0xff000000,0xff000000,0xffdcdcdc, 0xff000000,0x0,0x0,0x0,0xff000000,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc, 0xffdcdcdc,0xffdcdcdc,0xff000000,0x0,0x0,0xffffff,0xff000000,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff400000,0xffdcdcdc,0xff400000, 0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff000000,0x0,0x0,0x0,0xff000000,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc, 0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff000000,0x0,0x0,0x0,0x0,0xff000000,0xffdcdcdc,0xffdcdcdc, 0xff800000,0xff400000,0xff400000,0xff400000,0xff800000,0xffdcdcdc,0xffdcdcdc,0xff000000,0x585858,0x0,0x0,0xdcdcdc,0xdcdcdc,0xdcdcdc, 0xff000000,0xffdcdcdc,0xffdcdcdc,0xff800000,0xff800000,0xff800000,0xffdcdcdc,0xffdcdcdc,0xff000000,0xdcdcdc,0xdcdcdc,0x0,0x0,0xdcdcdc, 0x0,0x0,0xdcdcdc,0xff000000,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff000000,0xdcdcdc,0x0,0xdcdcdc,0x0, 0x0,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0xdcdcdc,0xdcdcdc, 0xdcdcdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0 }; static const QRgb back_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7a5a6163,0xff000000,0xff000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0x7a5a6163,0xfc151717,0xffffffff,0xff000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0x7a5a6163,0xfc151717,0xffffffff,0xfffbfbfb,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0x7a5a6163,0xfc151717,0xffffffff,0xffffffff,0xfff7f7f7,0xff000000,0xff000000,0xff000000,0xff000000,0x24000000,0xc000000,0xffffff, - 0xffffff,0x7a5a6163,0xfc151717,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xffffffff,0xffffffff,0xfff3f3f3,0xff000000,0x6b000000,0x24000000,0xffffff, - 0xffffff,0xe0383d3e,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff4f4f4,0xfff4f4f4,0xffeaeaea,0xffcbcbcb,0xff000000,0x8f000000,0x30000000,0xffffff, - 0xffffff,0x69545a5b,0xfd151717,0xfffbfbfb,0xfffbfbfb,0xfff2f2f2,0xffd6d6d6,0xffc3c3c3,0xffbfbfbf,0xffbfbfbf,0xff000000,0x8f000000,0x30000000,0xffffff, - 0xffffff,0xd000000,0x8344494a,0xfd151617,0xfff2f2f2,0xffe9e9e9,0xffc3c3c3,0xff000000,0xff000000,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff, - 0xffffff,0x2000000,0x14000000,0x88414648,0xfe151718,0xffe4e4e4,0xffc2c2c2,0xff000000,0xb3000000,0x9b000000,0x8f000000,0x6b000000,0x24000000,0xffffff, - 0xffffff,0xffffff,0x2000000,0x14000000,0x88414648,0xfe151718,0xffcbcbcb,0xff000000,0x9b000000,0x54000000,0x30000000,0x24000000,0xc000000,0xffffff, - 0xffffff,0xffffff,0xffffff,0x2000000,0x14000000,0x88414648,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7a6c7375,0xff000000,0xff000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xff000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xfffcfcfc,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xffffffff,0xfff8f8f8,0xff000000,0xff000000,0xff000000,0xff000000,0x24000000,0xc000000,0xffffff, + 0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xffffffff,0xffffffff,0xfff5f5f5,0xff000000,0x6b000000,0x24000000,0xffffff, + 0xffffff,0xe0494e4f,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff6f6f6,0xfff6f6f6,0xffeeeeee,0xffd3d3d3,0xff000000,0x8f000000,0x30000000,0xffffff, + 0xffffff,0x69666c6d,0xfd202323,0xfffcfcfc,0xfffcfcfc,0xfff4f4f4,0xffdddddd,0xffcccccc,0xffc9c9c9,0xffc9c9c9,0xff000000,0x8f000000,0x30000000,0xffffff, + 0xffffff,0xd000000,0x83565b5c,0xfd202223,0xfff4f4f4,0xffededed,0xffcccccc,0xff000000,0xff000000,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff, + 0xffffff,0x2000000,0x14000000,0x8852585a,0xfe202324,0xffe8e8e8,0xffcbcbcb,0xff000000,0xb3000000,0x9b000000,0x8f000000,0x6b000000,0x24000000,0xffffff, + 0xffffff,0xffffff,0x2000000,0x14000000,0x8852585a,0xfe202324,0xffd3d3d3,0xff000000,0x9b000000,0x54000000,0x30000000,0x24000000,0xc000000,0xffffff, + 0xffffff,0xffffff,0xffffff,0x2000000,0x14000000,0x8852585a,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0x2000000,0x14000000,0x45000000,0x7b000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x2000000,0x10000000,0x26000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff,0xffffff }; static const QRgb back_inactive_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x3d5e5e5e,0x7f000000,0x7f000000,0x12000000,0x6000000,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0x3d5e5e5e,0x7e161616,0x7fffffff,0x7f000000,0x35000000,0x12000000,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0x3d5e5e5e,0x7e161616,0x7fffffff,0x7ffbfbfb,0x7f000000,0x47000000,0x18000000,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0x3d5e5e5e,0x7e161616,0x7fffffff,0x7fffffff,0x7ff7f7f7,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x12000000,0x6000000,0xffffff, - 0xffffff,0x3d5e5e5e,0x7e161616,0x7fffffff,0x7fffffff,0x7fffffff,0x7ffefefe,0x7fffffff,0x7fffffff,0x7ff3f3f3,0x7f000000,0x35000000,0x12000000,0xffffff, - 0xffffff,0x703b3b3b,0x7fffffff,0x7fffffff,0x7fffffff,0x7fffffff,0x7ff4f4f4,0x7ff4f4f4,0x7feaeaea,0x7fcbcbcb,0x7f000000,0x47000000,0x18000000,0xffffff, - 0xffffff,0x34575757,0x7e161616,0x7ffbfbfb,0x7ffbfbfb,0x7ff2f2f2,0x7fd6d6d6,0x7fc3c3c3,0x7fbfbfbf,0x7fbfbfbf,0x7f000000,0x47000000,0x18000000,0xffffff, - 0xffffff,0x6000000,0x41474747,0x7e161616,0x7ff2f2f2,0x7fe9e9e9,0x7fc3c3c3,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x47000000,0x18000000,0xffffff, - 0xffffff,0x1000000,0xa000000,0x44444444,0x7f161616,0x7fe4e4e4,0x7fc2c2c2,0x7f000000,0x59000000,0x4d000000,0x47000000,0x35000000,0x12000000,0xffffff, - 0xffffff,0xffffff,0x1000000,0xa000000,0x44444444,0x7f161616,0x7fcbcbcb,0x7f000000,0x4d000000,0x2a000000,0x18000000,0x12000000,0x6000000,0xffffff, - 0xffffff,0xffffff,0xffffff,0x1000000,0xa000000,0x44444444,0x7f000000,0x7f000000,0x47000000,0x18000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x3d707070,0x7f000000,0x7f000000,0x12000000,0x6000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0x3d707070,0x7e222222,0x7fffffff,0x7f000000,0x35000000,0x12000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0x3d707070,0x7e222222,0x7fffffff,0x7ffcfcfc,0x7f000000,0x47000000,0x18000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0x3d707070,0x7e222222,0x7fffffff,0x7fffffff,0x7ff8f8f8,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x12000000,0x6000000,0xffffff, + 0xffffff,0x3d707070,0x7e222222,0x7fffffff,0x7fffffff,0x7fffffff,0x7ffefefe,0x7fffffff,0x7fffffff,0x7ff5f5f5,0x7f000000,0x35000000,0x12000000,0xffffff, + 0xffffff,0x704c4c4c,0x7fffffff,0x7fffffff,0x7fffffff,0x7fffffff,0x7ff6f6f6,0x7ff6f6f6,0x7feeeeee,0x7fd3d3d3,0x7f000000,0x47000000,0x18000000,0xffffff, + 0xffffff,0x34696969,0x7e222222,0x7ffcfcfc,0x7ffcfcfc,0x7ff4f4f4,0x7fdddddd,0x7fcccccc,0x7fc9c9c9,0x7fc9c9c9,0x7f000000,0x47000000,0x18000000,0xffffff, + 0xffffff,0x6000000,0x41595959,0x7e222222,0x7ff4f4f4,0x7fededed,0x7fcccccc,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x47000000,0x18000000,0xffffff, + 0xffffff,0x1000000,0xa000000,0x44565656,0x7f222222,0x7fe8e8e8,0x7fcbcbcb,0x7f000000,0x59000000,0x4d000000,0x47000000,0x35000000,0x12000000,0xffffff, + 0xffffff,0xffffff,0x1000000,0xa000000,0x44565656,0x7f222222,0x7fd3d3d3,0x7f000000,0x4d000000,0x2a000000,0x18000000,0x12000000,0x6000000,0xffffff, + 0xffffff,0xffffff,0xffffff,0x1000000,0xa000000,0x44565656,0x7f000000,0x7f000000,0x47000000,0x18000000,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0xa000000,0x22000000,0x3d000000,0x35000000,0x12000000,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x8000000,0x13000000,0x12000000,0x6000000,0xffffff,0xffffff,0xffffff,0xffffff }; static const QRgb background_data[] = { 0x81a1a1a1,0x81a5a5a5,0x81a9a9a9,0x81acacac,0x81adadad,0x81ababab,0x81a4a4a4,0x819d9d9d,0x81989898,0x81989898,0x819f9f9f,0x81a7a7a7,0x81acacac,0x81adadad, 0x81a9a9a9,0x81a4a4a4,0x819d9d9d,0x81989898,0x81969696,0x81999999,0x81a1a1a1,0x81a9a9a9,0x81aeaeae,0x81aeaeae,0x81a9a9a9,0x81a1a1a1,0x81999999,0x81939393, 0x81909090,0x81939393,0x81989898,0x819d9d9d,0x81a4a4a4,0x81a5a5a5,0x81a8a8a8,0x81a8a8a8,0x81a8a8a8,0x81a7a7a7,0x81a0a0a0,0x819b9b9b,0x81959595,0x81989898, 0x819d9d9d,0x81a5a5a5,0x81a9a9a9,0x81a9a9a9,0x81a4a4a4,0x819f9f9f,0x81989898,0x81959595,0x81939393,0x81999999,0x81a1a1a1,0x81a9a9a9,0x81adadad,0x81adadad, 0x81a7a7a7,0x819d9d9d,0x81959595,0x81929292,0x81939393,0x81999999,0x819f9f9f,0x81a3a3a3,0x81a8a8a8,0x81a7a7a7,0x81a5a5a5,0x81a5a5a5,0x81a5a5a5,0x81a3a3a3, 0x819d9d9d,0x81999999,0x81959595,0x81989898,0x819d9d9d,0x81a3a3a3,0x81a7a7a7,0x81a4a4a4,0x819f9f9f,0x819b9b9b,0x81959595,0x81939393,0x81969696,0x819c9c9c, 0x81a1a1a1,0x81a8a8a8,0x81ababab,0x81ababab,0x81a5a5a5,0x819c9c9c,0x81959595,0x81959595,0x819b9b9b,0x81a1a1a1,0x81a7a7a7,0x81a8a8a8,0x81ababab,0x81a8a8a8, 0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a1a1a1,0x819d9d9d,0x81999999,0x81969696,0x81999999,0x819f9f9f,0x81a3a3a3,0x81a4a4a4,0x81a1a1a1,0x819f9f9f,0x819b9b9b, 0x81999999,0x81999999,0x819b9b9b,0x819f9f9f,0x81a1a1a1,0x81a7a7a7,0x81a9a9a9,0x81a9a9a9,0x81a4a4a4,0x819f9f9f,0x819b9b9b,0x819c9c9c,0x81a3a3a3,0x81a9a9a9, 0x81adadad,0x81adadad,0x81acacac,0x81a8a8a8,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a1a1a1,0x819f9f9f,0x819b9b9b,0x81999999,0x819c9c9c,0x81a0a0a0,0x81a3a3a3, 0x81a4a4a4,0x81a3a3a3,0x81a1a1a1,0x81a1a1a1,0x81a0a0a0,0x81a0a0a0,0x81a0a0a0,0x81a1a1a1,0x81a3a3a3,0x81a5a5a5,0x81a8a8a8,0x81a8a8a8,0x81a5a5a5,0x81a1a1a1, 0x81a0a0a0,0x81a3a3a3,0x81a9a9a9,0x81b0b0b0,0x81b1b1b1,0x81b0b0b0,0x81ababab,0x81a7a7a7,0x81a3a3a3,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a0a0a0,0x819f9f9f, 0x819f9f9f,0x81a0a0a0,0x81a3a3a3,0x81a7a7a7,0x81a8a8a8,0x81a9a9a9,0x81a9a9a9,0x81a8a8a8,0x81a8a8a8,0x81a7a7a7,0x81a5a5a5,0x81a5a5a5,0x81a4a4a4,0x81a5a5a5, 0x81a5a5a5,0x81a7a7a7,0x81a5a5a5,0x81a4a4a4,0x81a3a3a3,0x81a7a7a7,0x81acacac,0x81b0b0b0,0x81b1b1b1,0x81aeaeae,0x81a5a5a5,0x81a1a1a1,0x819f9f9f,0x819f9f9f, 0x81a0a0a0,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a3a3a3,0x81a7a7a7,0x81a9a9a9,0x81adadad,0x81aeaeae,0x81aeaeae,0x81aeaeae,0x81adadad,0x81acacac, 0x81a9a9a9,0x81a9a9a9,0x81a7a7a7,0x81a5a5a5,0x81a5a5a5,0x81a5a5a5,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4,0x81a5a5a5,0x81a9a9a9,0x81acacac,0x81acacac,0x81a8a8a8, 0x819f9f9f,0x819b9b9b,0x81999999,0x819b9b9b,0x819c9c9c,0x81a0a0a0,0x81a1a1a1,0x81a3a3a3,0x81a3a3a3,0x81a5a5a5,0x81a8a8a8,0x81acacac,0x81b0b0b0,0x81b2b2b2, 0x81b1b1b1,0x81b0b0b0,0x81aeaeae,0x81acacac,0x81a9a9a9,0x81a9a9a9,0x81a7a7a7,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a3a3a3,0x81a1a1a1,0x81a3a3a3, 0x81a4a4a4,0x81a4a4a4,0x81a3a3a3,0x81a0a0a0,0x81989898,0x81969696,0x81959595,0x81969696,0x819b9b9b,0x819f9f9f,0x81a1a1a1,0x81a3a3a3,0x81a4a4a4,0x81a5a5a5, 0x81a9a9a9,0x81adadad,0x81b0b0b0,0x81b0b0b0,0x81b0b0b0,0x81acacac,0x81a9a9a9,0x81a7a7a7,0x81a4a4a4,0x81a4a4a4,0x81a5a5a5,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4, 0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a0a0a0,0x819f9f9f,0x819d9d9d,0x819c9c9c,0x819b9b9b,0x81969696,0x81959595,0x81969696,0x81999999,0x819c9c9c,0x81a0a0a0, 0x81a3a3a3,0x81a4a4a4,0x81a4a4a4,0x81a5a5a5,0x81a9a9a9,0x81acacac,0x81b0b0b0,0x81b0b0b0,0x81acacac,0x81a7a7a7,0x81a1a1a1,0x819d9d9d,0x819c9c9c,0x81a0a0a0, 0x81a3a3a3,0x81a4a4a4,0x81a4a4a4,0x81a3a3a3,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a0a0a0,0x819d9d9d,0x819b9b9b,0x81999999,0x81989898,0x819c9c9c,0x819b9b9b, 0x819c9c9c,0x819d9d9d,0x81a0a0a0,0x81a3a3a3,0x81a5a5a5,0x81a8a8a8,0x81a8a8a8,0x81a8a8a8,0x81ababab,0x81aeaeae,0x81b0b0b0,0x81adadad,0x81a7a7a7,0x819f9f9f, 0x81989898,0x81959595,0x81969696,0x819c9c9c,0x81a1a1a1,0x81a4a4a4,0x81a3a3a3,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a0a0a0,0x81a0a0a0, 0x819d9d9d,0x819c9c9c,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a1a1a1,0x81a3a3a3,0x81a7a7a7,0x81a9a9a9,0x81ababab,0x81ababab,0x81acacac,0x81aeaeae,0x81b0b0b0, 0x81b0b0b0,0x81acacac,0x81a3a3a3,0x81999999,0x81929292,0x81929292,0x81969696,0x819d9d9d,0x81a4a4a4,0x81a7a7a7,0x81a5a5a5,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1, 0x81a3a3a3,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81ababab,0x81a8a8a8,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4,0x81a8a8a8,0x81acacac,0x81b0b0b0, 0x81b0b0b0,0x81b0b0b0,0x81b0b0b0,0x81b1b1b1,0x81aeaeae,0x81a7a7a7,0x819c9c9c,0x81939393,0x81929292,0x81959595,0x819c9c9c,0x81a4a4a4,0x81ababab,0x81acacac, 0x81a8a8a8,0x81a3a3a3,0x819f9f9f,0x819f9f9f,0x81a1a1a1,0x81a5a5a5,0x81a9a9a9,0x81ababab,0x81acacac,0x81acacac,0x81adadad,0x81a9a9a9,0x81a4a4a4,0x81a3a3a3, 0x81a4a4a4,0x81a9a9a9,0x81aeaeae,0x81b1b1b1,0x81b0b0b0,0x81b0b0b0,0x81aeaeae,0x81adadad,0x81a8a8a8,0x819f9f9f,0x81959595,0x81929292,0x81939393,0x819b9b9b, 0x81a4a4a4,0x81acacac,0x81b1b1b1,0x81b0b0b0,0x81a9a9a9,0x81a3a3a3,0x819d9d9d,0x819d9d9d,0x81a1a1a1,0x81a7a7a7,0x81acacac,0x81b0b0b0,0x81b1b1b1,0x81b0b0b0, 0x81ababab,0x81a5a5a5,0x81a0a0a0,0x81a0a0a0,0x81a3a3a3,0x81a9a9a9,0x81aeaeae,0x81b1b1b1,0x81b0b0b0,0x81acacac,0x81a8a8a8,0x81a3a3a3,0x819c9c9c,0x81959595, 0x81929292,0x81939393,0x819b9b9b,0x81a1a1a1,0x81a9a9a9,0x81b0b0b0,0x81b2b2b2,0x81b1b1b1,0x81a9a9a9,0x81a0a0a0,0x819b9b9b,0x819b9b9b,0x81a1a1a1,0x81a8a8a8, 0x81aeaeae,0x81b2b2b2,0x81b1b1b1,0x81aeaeae,0x81a7a7a7,0x81a0a0a0,0x819c9c9c,0x819c9c9c,0x81a1a1a1,0x81a9a9a9,0x81aeaeae,0x81b1b1b1,0x81acacac,0x81a7a7a7, 0x81a0a0a0,0x819b9b9b,0x81939393,0x81929292,0x81939393,0x81999999,0x81a0a0a0,0x81a5a5a5,0x81ababab,0x81b0b0b0,0x81b0b0b0,0x81adadad,0x81a5a5a5,0x819d9d9d, 0x81999999,0x819b9b9b,0x81a0a0a0,0x81a8a8a8,0x81aeaeae,0x81b2b2b2,0x81b0b0b0,0x81acacac,0x819f9f9f,0x819b9b9b,0x81969696,0x81999999,0x81a0a0a0,0x81a8a8a8, 0x81aeaeae,0x81aeaeae,0x81a9a9a9,0x81a1a1a1,0x81999999,0x81939393,0x81929292,0x81939393,0x819b9b9b,0x81a0a0a0,0x81a3a3a3,0x81a5a5a5,0x81a9a9a9,0x81ababab, 0x81ababab,0x81a8a8a8,0x81a1a1a1,0x819b9b9b,0x81969696,0x81989898,0x819f9f9f,0x81a8a8a8,0x81adadad,0x81aeaeae,0x81ababab,0x81a4a4a4,0x81999999,0x81969696, 0x81959595,0x81999999,0x81a0a0a0,0x81a8a8a8,0x81acacac,0x81adadad,0x81a7a7a7,0x819f9f9f,0x81959595,0x81929292,0x81959595,0x819b9b9b,0x81a1a1a1,0x81a5a5a5, 0x81a7a7a7,0x81a7a7a7,0x81a7a7a7,0x81a7a7a7,0x81a7a7a7,0x81a4a4a4,0x819f9f9f,0x81999999,0x81959595,0x81989898,0x819f9f9f,0x81a7a7a7,0x81ababab,0x81a9a9a9, 0x81a4a4a4,0x819f9f9f,0x81969696,0x81959595,0x81959595,0x819b9b9b,0x81a0a0a0,0x81a5a5a5,0x81ababab,0x81ababab,0x81a5a5a5,0x819d9d9d,0x81989898,0x81989898, 0x819c9c9c,0x81a4a4a4,0x81a9a9a9,0x81ababab,0x81a9a9a9,0x81a7a7a7,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a1a1a1,0x819c9c9c,0x81999999,0x81959595,0x81999999, @@ -3338,532 +3415,515 @@ static const QRgb background_data[] = { 0x81a1a1a1,0x81a4a4a4,0x81a7a7a7,0x81a8a8a8,0x81a5a5a5,0x81a3a3a3,0x81a1a1a1,0x81a4a4a4,0x81a9a9a9,0x81b0b0b0,0x81b2b2b2,0x81b0b0b0,0x81ababab,0x81a7a7a7, 0x81a4a4a4,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x819f9f9f,0x819c9c9c,0x819b9b9b,0x819f9f9f,0x81a1a1a1,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a1a1a1,0x819f9f9f, 0x81a7a7a7,0x81a5a5a5,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a5a5a5,0x81a5a5a5,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4,0x81a7a7a7,0x81ababab,0x81b0b0b0, 0x81b0b0b0,0x81adadad,0x81a9a9a9,0x81a4a4a4,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a0a0a0,0x81a0a0a0,0x81a1a1a1,0x81a4a4a4,0x81a7a7a7, 0x81a8a8a8,0x81a8a8a8,0x81a8a8a8,0x81a8a8a8,0x81adadad,0x81ababab,0x81a9a9a9,0x81a8a8a8,0x81a7a7a7,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a3a3a3, 0x81a3a3a3,0x81a4a4a4,0x81a7a7a7,0x81a9a9a9,0x81a8a8a8,0x81a5a5a5,0x81a1a1a1,0x819f9f9f,0x819c9c9c,0x819d9d9d,0x819f9f9f,0x81a1a1a1,0x81a1a1a1,0x81a3a3a3, 0x81a3a3a3,0x81a5a5a5,0x81a8a8a8,0x81ababab,0x81adadad,0x81aeaeae,0x81aeaeae,0x81aeaeae,0x81b0b0b0,0x81adadad,0x81ababab,0x81a9a9a9,0x81a7a7a7,0x81a5a5a5, 0x81a4a4a4,0x81a4a4a4,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a0a0a0,0x819d9d9d,0x819b9b9b,0x81999999,0x81999999,0x81999999, 0x819c9c9c,0x81a0a0a0,0x81a3a3a3,0x81a4a4a4,0x81a8a8a8,0x81ababab,0x81aeaeae,0x81b1b1b1,0x81b2b2b2,0x81b2b2b2,0x81b1b1b1,0x81b0b0b0,0x81a9a9a9,0x81a8a8a8, 0x81a5a5a5,0x81a5a5a5,0x81a5a5a5,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a0a0a0,0x819d9d9d,0x819c9c9c,0x819b9b9b,0x81999999, 0x81969696,0x81959595,0x81959595,0x81969696,0x819b9b9b,0x81a0a0a0,0x81a3a3a3,0x81a8a8a8,0x81acacac,0x81b0b0b0,0x81b3b3b3,0x81b5b5b5,0x81b3b3b3,0x81b1b1b1, 0x81aeaeae,0x81acacac,0x81a3a3a3,0x81a0a0a0,0x819f9f9f,0x81a0a0a0,0x81a3a3a3,0x81a4a4a4,0x81a4a4a4,0x81a3a3a3,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a1a1a1, 0x819f9f9f,0x819d9d9d,0x819b9b9b,0x81999999,0x81989898,0x81989898,0x81989898,0x819b9b9b,0x819d9d9d,0x81a1a1a1,0x81a7a7a7,0x81ababab,0x81b0b0b0,0x81b5b5b5, 0x81b5b5b5,0x81b2b2b2,0x81aeaeae,0x81acacac,0x81a9a9a9,0x81a7a7a7,0x819b9b9b,0x81969696,0x81969696,0x819c9c9c,0x81a0a0a0,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1, 0x81a1a1a1,0x81a1a1a1,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a1a1a1,0x81a0a0a0,0x81a0a0a0,0x819f9f9f,0x819f9f9f,0x819f9f9f,0x81a0a0a0,0x81a1a1a1,0x81a4a4a4, 0x81a9a9a9,0x81aeaeae,0x81b3b3b3,0x81b5b5b5,0x81b1b1b1,0x81aeaeae,0x81a9a9a9,0x81a7a7a7,0x81a3a3a3,0x819d9d9d,0x81939393,0x81929292,0x81959595,0x819c9c9c, 0x81a3a3a3,0x81a7a7a7,0x81a5a5a5,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a3a3a3,0x81a4a4a4,0x81a7a7a7,0x81a8a8a8,0x81a8a8a8,0x81a8a8a8,0x81a7a7a7,0x81a5a5a5, 0x81a4a4a4,0x81a3a3a3,0x81a4a4a4,0x81a7a7a7,0x81acacac,0x81b1b1b1,0x81b5b5b5,0x81b2b2b2,0x81adadad,0x81a8a8a8,0x81a4a4a4,0x81a1a1a1,0x819c9c9c,0x81989898, 0x81909090,0x81939393,0x819b9b9b,0x81a3a3a3,0x81a9a9a9,0x81ababab,0x81a8a8a8,0x81a3a3a3,0x819f9f9f,0x81a0a0a0,0x81a1a1a1,0x81a7a7a7,0x81a9a9a9,0x81adadad, 0x81aeaeae,0x81aeaeae,0x81acacac,0x81a9a9a9,0x81a5a5a5,0x81a3a3a3,0x81a4a4a4,0x81a9a9a9,0x81aeaeae,0x81b3b3b3,0x81b2b2b2,0x81aeaeae,0x81a9a9a9,0x81a4a4a4, 0x81a1a1a1,0x819c9c9c,0x81969696,0x81929292,0x81939393,0x81999999,0x81a1a1a1,0x81a9a9a9,0x81b0b0b0,0x81b0b0b0,0x81ababab,0x81a3a3a3,0x819d9d9d,0x819d9d9d, 0x81a1a1a1,0x81a8a8a8,0x81adadad,0x81b1b1b1,0x81b1b1b1,0x81b1b1b1,0x81adadad,0x81a8a8a8,0x81a3a3a3,0x81a1a1a1,0x81a4a4a4,0x81a9a9a9,0x81b0b0b0,0x81b3b3b3, 0x81b1b1b1,0x81ababab,0x81a5a5a5,0x81a1a1a1,0x819c9c9c,0x81989898,0x81929292,0x81909090,0x81999999,0x81a0a0a0,0x81a8a8a8,0x81aeaeae,0x81b2b2b2,0x81b1b1b1, 0x81ababab,0x81a1a1a1,0x819c9c9c,0x819b9b9b,0x81a0a0a0,0x81a8a8a8,0x81aeaeae,0x81b1b1b1,0x81b1b1b1,0x81aeaeae,0x81a9a9a9,0x81a3a3a3,0x819f9f9f,0x819d9d9d, 0x81a3a3a3,0x81a9a9a9,0x81b0b0b0,0x81b1b1b1,0x81adadad,0x81a8a8a8,0x81a1a1a1,0x819c9c9c,0x81969696,0x81929292,0x81909090,0x81939393,0x819d9d9d,0x81a3a3a3, 0x81a9a9a9,0x81b0b0b0,0x81b1b1b1,0x81aeaeae,0x81a7a7a7,0x819f9f9f,0x81999999,0x81999999,0x819f9f9f,0x81a7a7a7,0x81aeaeae,0x81b1b1b1,0x81aeaeae,0x81ababab, 0x81a3a3a3,0x819d9d9d,0x81999999,0x819c9c9c,0x81a1a1a1,0x81a9a9a9,0x81b0b0b0,0x81b0b0b0,0x81ababab,0x81a4a4a4,0x819c9c9c,0x81989898,0x81929292,0x81909090, 0x81939393,0x81999999 }; static const QRgb beam_data[] = { 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc, 0xdcdcdc,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xdcdcdc, 0xffc3c3c3,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xffc3c3c3, 0xdcdcdc,0xdcdcdc,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xdcdcdc,0xdcdcdc, 0xdcdcdc,0xffa0a0a0,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xffa0a0a0,0xdcdcdc, 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff808080,0xff808080,0xff808080,0xff808080,0xff808080,0xff808080,0xff808080,0xff808080,0xdcdcdc,0xdcdcdc,0xdcdcdc, 0xdcdcdc,0xdcdcdc,0xff808080,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff808080,0xdcdcdc,0xdcdcdc, 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff585858,0xff585858,0xff585858,0xff585858,0xff585858,0xff585858,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc, 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff585858,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff585858,0xdcdcdc,0xdcdcdc,0xdcdcdc, 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff303030,0xff303030,0xff303030,0xff303030,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc, 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff303030,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff303030,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc, 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff303030,0xff303030,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc, 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff303030,0xff303030,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc, 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc }; static const QRgb bell_data[] = { - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x95020202,0x1c000000,0x32000000,0x2d000000,0x10000000,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x56000000,0xb6858585,0xc57b7b7b,0x62000000,0x14000000,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffc0c0c0,0xff000000,0x8e000000,0x93000000,0xffdcdcdc,0xe68c8c8c,0x69000000,0x14000000, - 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffc0c0c0,0xffffffff,0xff000000,0xc6464646,0xba4a4a4a,0xb7000000,0xffdcdcdc,0xe38d8d8d,0x47000000, - 0xff000000,0xff000000,0xff000000,0xff000000,0xffc0c0c0,0xffffffff,0xffffffff,0xff000000,0xb6000000,0xffdcdcdc,0xc4474747,0xc1000000,0xffdcdcdc,0x71000000, - 0xff000000,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffe6e6e6,0xffe6e6e6,0xffe6e6e6,0xff000000,0x9e000000,0xae000000,0xffdcdcdc,0xc4000000,0xffdcdcdc,0x7d000000, - 0xff000000,0xffc6c6c6,0xffc6c6c6,0xffc6c6c6,0xffc6c6c6,0xffc6c6c6,0xffc6c6c6,0xff000000,0x8f000000,0x95000000,0xffdcdcdc,0xd1000000,0xffdcdcdc,0x7d000000, - 0xff000000,0xff7d7d7d,0xff7d7d7d,0xff7d7d7d,0xffa7a7a7,0xffa6a6a6,0xffa6a6a6,0xff000000,0x9e000000,0xae000000,0xffdcdcdc,0xc4000000,0xffdcdcdc,0x7d000000, - 0xff000000,0xff000000,0xff000000,0xff000000,0xff6b6b6b,0xff8e8e8e,0xff8e8e8e,0xff000000,0xb6000000,0xffdcdcdc,0xc4474747,0xc1000000,0xffdcdcdc,0x71000000, - 0x24000000,0x6b000000,0x8f000000,0x8f000000,0xff000000,0xff6b6b6b,0xff8e8e8e,0xff000000,0xc6464646,0xba4a4a4a,0xb7000000,0xffdcdcdc,0xe38d8d8d,0x47000000, - 0xc000000,0x24000000,0x30000000,0x30000000,0x48000000,0xff000000,0xff6b6b6b,0xff000000,0xa1000000,0x96000000,0xffdcdcdc,0xe68c8c8c,0x69000000,0x14000000, - 0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x3c000000,0xff000000,0xff000000,0x9c000000,0xbd808080,0xc57b7b7b,0x62000000,0x14000000,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x3c000000,0xc8010101,0x82000000,0x51000000,0x2d000000,0x10000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x95050505,0x1c000000,0x32000000,0x2d000000,0x10000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x56000000,0xb6959595,0xc58c8c8c,0x62000000,0x14000000,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffcacaca,0xff000000,0x8e000000,0x93000000,0xffe2e2e2,0xe69b9b9b,0x69000000,0x14000000, + 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffcacaca,0xffffffff,0xff000000,0xc6585858,0xba5c5c5c,0xb7000000,0xffe2e2e2,0xe39c9c9c,0x47000000, + 0xff000000,0xff000000,0xff000000,0xff000000,0xffcacaca,0xffffffff,0xffffffff,0xff000000,0xb6000000,0xffe2e2e2,0xc4595959,0xc1000000,0xffe2e2e2,0x71000000, + 0xff000000,0xffbababa,0xffbababa,0xffbababa,0xffeaeaea,0xffeaeaea,0xffeaeaea,0xff000000,0x9e000000,0xae000000,0xffe2e2e2,0xc4000000,0xffe2e2e2,0x7d000000, + 0xff000000,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xff000000,0x8f000000,0x95000000,0xffe2e2e2,0xd1000000,0xffe2e2e2,0x7d000000, + 0xff000000,0xff8d8d8d,0xff8d8d8d,0xff8d8d8d,0xffb4b4b4,0xffb3b3b3,0xffb3b3b3,0xff000000,0x9e000000,0xae000000,0xffe2e2e2,0xc4000000,0xffe2e2e2,0x7d000000, + 0xff000000,0xff000000,0xff000000,0xff000000,0xff7c7c7c,0xff9d9d9d,0xff9d9d9d,0xff000000,0xb6000000,0xffe2e2e2,0xc4595959,0xc1000000,0xffe2e2e2,0x71000000, + 0x24000000,0x6b000000,0x8f000000,0x8f000000,0xff000000,0xff7c7c7c,0xff9d9d9d,0xff000000,0xc6585858,0xba5c5c5c,0xb7000000,0xffe2e2e2,0xe39c9c9c,0x47000000, + 0xc000000,0x24000000,0x30000000,0x30000000,0x48000000,0xff000000,0xff7c7c7c,0xff000000,0xa1000000,0x96000000,0xffe2e2e2,0xe69b9b9b,0x69000000,0x14000000, + 0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x3c000000,0xff000000,0xff000000,0x9c000000,0xbd909090,0xc58c8c8c,0x62000000,0x14000000,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x3c000000,0xc8030303,0x82000000,0x51000000,0x2d000000,0x10000000,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x31000000,0x3f000000,0x19000000,0xffffff,0xffffff,0xffffff,0xffffff }; static const unsigned char bg_data[] = { 0x50,0x1a,0x0e,0x03,0x2d,0x2f,0x44,0x29,0x34,0x13,0x52,0x10,0x35,0x2d, 0x05,0x44,0x29,0x13,0x3f,0x01,0x50,0x05,0x22,0x4d,0x38,0x1c,0x0a,0x4f, 0x18,0x15,0x2c,0x07,0x44,0x1a,0x39,0x30,0x30,0x10,0x47,0x32,0x14,0x34, 0x28,0x3b,0x38,0x0e,0x44,0x52,0x13,0x14,0x40,0x0a,0x50,0x0e,0x2e,0x2e, 0x10,0x28,0x14,0x41,0x4f,0x3e,0x1e,0x1b,0x39,0x10,0x1a,0x1a,0x3b,0x1b, 0x28,0x0a,0x14,0x13,0x28,0x1b,0x10,0x44,0x51,0x32,0x14,0x40,0x0c,0x08, 0x50,0x39,0x2f,0x2f,0x3b,0x53,0x14,0x14,0x32,0x50,0x10,0x30,0x2f,0x39, 0x44,0x44,0x44,0x46,0x28,0x0a,0x3f,0x0a,0x52,0x1b,0x44,0x46,0x52,0x2a, 0x0a,0x0a,0x32,0x52,0x46,0x10,0x38,0x0e,0x44,0x52,0x32,0x53,0x25,0x0e, 0x4e,0x0b,0x03,0x39,0x44,0x44,0x44,0x46,0x52,0x2a,0x01,0x53,0x47,0x1b, 0x44,0x1b,0x46,0x50,0x27,0x27,0x47,0x1c,0x1b,0x1a,0x39,0x39,0x1a,0x46, 0x47,0x1b,0x0e,0x2b,0x4b,0x21,0x37,0x10,0x1b,0x1b,0x1b,0x46,0x47,0x52, 0x52,0x1d,0x1b,0x10,0x39,0x0e,0x0e,0x30,0x39,0x10,0x1a,0x1a,0x44,0x1a, 0x1a,0x10,0x1a,0x44,0x1b,0x43,0x35,0x21,0x4b,0x22,0x3b,0x1c,0x51,0x51, 0x47,0x1c,0x46,0x46,0x46,0x1b,0x10,0x05,0x2e,0x4d,0x4d,0x4d,0x4e,0x03, 0x38,0x0e,0x10,0x1a,0x1a,0x1a,0x1a,0x44,0x44,0x1a,0x0e,0x03,0x04,0x30, 0x52,0x2a,0x01,0x32,0x53,0x27,0x46,0x1b,0x1b,0x1a,0x0f,0x03,0x21,0x1f, 0x4b,0x21,0x22,0x03,0x05,0x0e,0x10,0x1a,0x44,0x44,0x44,0x1b,0x46,0x1b, 0x44,0x44,0x1b,0x26,0x13,0x3f,0x14,0x3f,0x32,0x1e,0x46,0x1b,0x44,0x1a, 0x0e,0x2e,0x21,0x21,0x2b,0x03,0x0e,0x10,0x44,0x44,0x1a,0x1a,0x44,0x44, 0x1b,0x1b,0x46,0x47,0x51,0x28,0x08,0x32,0x3f,0x14,0x0c,0x0a,0x53,0x1d, 0x1b,0x44,0x44,0x1a,0x0e,0x03,0x4c,0x2b,0x04,0x10,0x1c,0x28,0x53,0x27, 0x45,0x44,0x44,0x1b,0x1b,0x1b,0x46,0x47,0x28,0x2a,0x33,0x34,0x08,0x2a, 0x08,0x29,0x27,0x1b,0x1a,0x39,0x39,0x39,0x0d,0x02,0x4c,0x2e,0x10,0x51, 0x34,0x36,0x3f,0x31,0x1c,0x44,0x1b,0x46,0x46,0x46,0x46,0x46,0x47,0x27, 0x28,0x53,0x1b,0x1b,0x46,0x46,0x1b,0x10,0x0e,0x2f,0x2f,0x04,0x02,0x21, 0x21,0x35,0x25,0x0a,0x16,0x41,0x3f,0x28,0x44,0x43,0x1a,0x46,0x1c,0x1c, 0x1b,0x44,0x44,0x44,0x44,0x44,0x37,0x0f,0x1a,0x44,0x44,0x39,0x03,0x4c, 0x2b,0x2b,0x21,0x4b,0x02,0x10,0x08,0x40,0x24,0x36,0x31,0x44,0x37,0x35, 0x39,0x1b,0x52,0x1e,0x46,0x1a,0x0e,0x0d,0x04,0x04,0x2d,0x38,0x44,0x1b, 0x44,0x0e,0x22,0x4b,0x21,0x4c,0x22,0x2e,0x19,0x52,0x14,0x41,0x40,0x2a, 0x11,0x04,0x00,0x21,0x05,0x45,0x29,0x28,0x46,0x43,0x04,0x21,0x4b,0x21, 0x2f,0x1a,0x26,0x27,0x1b,0x05,0x4d,0x4b,0x2b,0x03,0x39,0x1b,0x53,0x14, 0x41,0x40,0x32,0x46,0x0e,0x2b,0x1f,0x00,0x0e,0x47,0x09,0x2a,0x50,0x39, 0x02,0x1f,0x4b,0x4d,0x10,0x1d,0x54,0x53,0x46,0x0e,0x4d,0x20,0x03,0x06, 0x27,0x32,0x40,0x41,0x40,0x3d,0x27,0x3b,0x0d,0x2b,0x21,0x23,0x1a,0x28, 0x0a,0x32,0x27,0x39,0x4d,0x1f,0x4c,0x04,0x48,0x32,0x3f,0x01,0x47,0x0f, 0x02,0x22,0x38,0x1c,0x0a,0x15,0x41,0x40,0x32,0x27,0x1b,0x1a,0x0e,0x2f, 0x2f,0x17,0x46,0x2a,0x3f,0x13,0x51,0x39,0x2e,0x22,0x0d,0x44,0x0a,0x3f, 0x14,0x0a,0x27,0x19,0x03,0x2e,0x10,0x52,0x14,0x16,0x14,0x2a,0x46,0x3b, 0x10,0x10,0x10,0x43,0x10,0x44,0x52,0x0a,0x14,0x13,0x51,0x10,0x37,0x05, 0x44,0x52,0x3f,0x14,0x14,0x32,0x27,0x1a,0x37,0x37,0x3b,0x28,0x34,0x34, 0x53,0x11,0x0e,0x0d,0x0e,0x10,0x44,0x44,0x44,0x46,0x53,0x0a,0x14,0x0a, 0x51,0x44,0x43,0x44,0x51,0x32,0x13,0x13,0x0a,0x53,0x1d,0x1a,0x0e,0x0e, 0x1a,0x1d,0x53,0x52,0x44,0x04,0x2b,0x2b,0x2f,0x39,0x44,0x44,0x1b,0x1c, 0x07,0x0a,0x34,0x09,0x27,0x44,0x44,0x1c,0x29,0x32,0x52,0x52,0x1e,0x47, 0x46,0x44,0x10,0x39,0x1a,0x1b,0x46,0x44,0x05,0x21,0x1f,0x21,0x2f,0x10, 0x44,0x1b,0x1b,0x46,0x1e,0x31,0x2a,0x52,0x1c,0x1b,0x1b,0x46,0x50,0x51, 0x10,0x1a,0x3b,0x44,0x44,0x44,0x1a,0x1a,0x1a,0x44,0x44,0x10,0x2f,0x4c, 0x21,0x4e,0x0e,0x44,0x46,0x1c,0x46,0x46,0x50,0x47,0x47,0x46,0x44,0x10, 0x19,0x39,0x39,0x19,0x2e,0x2f,0x38,0x39,0x10,0x1a,0x44,0x44,0x44,0x1b, 0x1b,0x44,0x43,0x0e,0x0f,0x1a,0x46,0x1e,0x53,0x07,0x52,0x1c,0x46,0x1b, 0x1b,0x1a,0x30,0x2f,0x2d,0x02,0x02,0x02,0x4c,0x2e,0x2f,0x0e,0x10,0x1a, 0x44,0x44,0x1b,0x1b,0x46,0x46,0x46,0x46,0x47,0x28,0x2a,0x0a,0x0a,0x0a, 0x31,0x27,0x1b,0x44,0x39,0x2f,0x02,0x4b,0x1f,0x1f,0x4b,0x21,0x05,0x39, 0x1a,0x1a,0x1a,0x1a,0x44,0x44,0x1b,0x1b,0x46,0x47,0x28,0x53,0x32,0x0a, 0x0c,0x14,0x14,0x3f,0x2a,0x27,0x1b,0x39,0x04,0x21,0x12,0x3c,0x12,0x4b, 0x22,0x03,0x1b,0x27,0x52,0x27,0x1b,0x44,0x44,0x1b,0x1b,0x1b,0x46,0x1c, 0x52,0x29,0x09,0x0a,0x13,0x13,0x13,0x09,0x28,0x46,0x10,0x2f,0x21,0x3c, 0x3c,0x1f,0x4d,0x03,0x38,0x10,0x32,0x0c,0x3f,0x08,0x1d,0x1b,0x1b,0x46, 0x46,0x46,0x1b,0x1b,0x46,0x46,0x47,0x27,0x52,0x52,0x52,0x27,0x1c,0x44, 0x0e,0x4d,0x49,0x3c,0x4b,0x02,0x38,0x10,0x45,0x4a,0x15,0x41,0x14,0x53, 0x1b,0x10,0x1a,0x46,0x1c,0x1c,0x1b,0x44,0x10,0x19,0x39,0x39,0x10,0x3b, 0x44,0x1b,0x44,0x43,0x03,0x4b,0x3c,0x1f,0x2e,0x30,0x44,0x50,0x53,0x34, 0x18,0x15,0x32,0x25,0x0e,0x2f,0x39,0x1b,0x1e,0x27,0x46,0x10,0x05,0x2e, 0x02,0x02,0x03,0x0e,0x1a,0x1b,0x44,0x0e,0x4d,0x12,0x1f,0x4d,0x0e,0x44, 0x50,0x53,0x3f,0x41,0x4f,0x0a,0x1c,0x05,0x2b,0x21,0x0d,0x1b,0x28,0x28, 0x46,0x19,0x2e,0x4b,0x4b,0x20,0x2e,0x0f,0x1b,0x46,0x44,0x05,0x21,0x12, 0x00,0x2f,0x3b,0x50,0x53,0x34,0x16,0x18,0x0a,0x27,0x39,0x22,0x1f,0x4b, 0x37,0x46,0x08,0x2a,0x47,0x19,0x02,0x4b,0x4b,0x4d,0x42,0x1b,0x52,0x28, 0x45,0x05,0x21,0x4b,0x2d,0x30,0x46,0x53,0x3f,0x41,0x18,0x40,0x28,0x1b, 0x05,0x2b,0x4b,0x22,0x3a,0x51,0x0a,0x33,0x51,0x10,0x02,0x20,0x02,0x37, 0x1b,0x07,0x33,0x08,0x46,0x05,0x2b,0x21,0x2f,0x44,0x53,0x34,0x16,0x18, 0x40,0x3d }; static const QRgb bg_ctable[] = { 0xff618b80,0xff52776e,0xff5f897e,0xff5e877d,0xff5d877c,0xff5c857b,0xff5a8379,0xff557a70,0xff54786f,0xff53786e,0xff52766d,0xff5f887d,0xff50746b,0xff5d867b, 0xff5c847a,0xff5b8479,0xff5a8278,0xff588076,0xff628e83,0xff52756c,0xff50736a,0xff4f7169,0xff4e7168,0xff5c8379,0xff4d6f67,0xff5b8378,0xff5a8177,0xff587f75, 0xff577d74,0xff567d73,0xff557b72,0xff628d82,0xff618b81,0xff608b80,0xff5f897f,0xff5e897e,0xff4e7067,0xff587e74,0xff577c73,0xff567c72,0xff557a71,0xff547a70, 0xff53786f,0xff608a7f,0xff51766d,0xff5f887e,0xff5e887d,0xff5d867c,0xff5b847a,0xff54796f,0xff53776e,0xff52776d,0xff51756c,0xff5e877c,0xff4f736a,0xff5d857b, 0xff5c857a,0xff5b8379,0xff5a8378,0xff598177,0xff638f84,0xff53766d,0xff52766c,0xff51746b,0xff4f7269,0xff4e7068,0xff5c8479,0xff5b8278,0xff598076,0xff587e75, 0xff577e74,0xff567c73,0xff557c72,0xff638e83,0xff547a71,0xff618c81,0xff608a80,0xff5f8a7f,0xff5e887e,0xff4f7168,0xff577d73,0xff567b72,0xff557b71,0xff547970, 0xff53796f }; static const QRgb binary_data[] = { 0x7000000,0xe000000,0x23000000,0x42000000,0x55000000,0x5b000000,0x5d000000,0x5a000000,0x49000000,0x34000000,0x24000000,0x1a000000,0x11000000,0xffffff, - 0xc000000,0x18000000,0x48000000,0xffffffff,0xfffdfdfd,0xffe6e6e6,0xffa3a3a3,0xffffffff,0xf3bebebe,0x6b000000,0x44000000,0x2d000000,0x1d000000,0xc000000, - 0x11000000,0x24000000,0x62000000,0xffffffff,0xfffbfbfb,0xffdcdcdc,0xff868686,0xffffffff,0xffffffff,0xf7b6b6b6,0x75000000,0x46000000,0x2a000000,0x11000000, - 0x16000000,0x2e000000,0x71000000,0xffffffff,0xfffbfbfb,0xffdcdcdc,0xff838383,0xffffffff,0xffffffff,0xffffffff,0xf5bcbcbc,0x65000000,0x36000000,0x16000000, - 0x1a000000,0x35000000,0x7b000000,0xffffffff,0xfffdfdfd,0xffe4e4e4,0xff9d9d9d,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x7c000000,0x3e000000,0x1a000000, - 0x1c000000,0x39000000,0x80000000,0xffffffff,0xfffdfdfd,0xfff3f3f3,0xffcfcfcf,0xff9d9d9d,0xff838383,0xff868686,0xffa3a3a3,0x85000000,0x43000000,0x1c000000, - 0x1d000000,0x3b000000,0x83000000,0xffffffff,0xffffffff,0xfffbfbfb,0xfff3f3f3,0xffe4e4e4,0xffdcdcdc,0xffdcdcdc,0xffe6e6e6,0x88000000,0x46000000,0x1d000000, - 0x1d000000,0x3c000000,0x84000000,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffdfdfd,0xfffbfbfb,0xfffbfbfb,0xfffdfdfd,0x88000000,0x47000000,0x1d000000, + 0xc000000,0x18000000,0x48000000,0xffffffff,0xfffdfdfd,0xffeaeaea,0xffb0b0b0,0xffffffff,0xf3c8c8c8,0x6b000000,0x44000000,0x2d000000,0x1d000000,0xc000000, + 0x11000000,0x24000000,0x62000000,0xffffffff,0xfffcfcfc,0xffe2e2e2,0xff969696,0xffffffff,0xffffffff,0xf7c1c1c1,0x75000000,0x46000000,0x2a000000,0x11000000, + 0x16000000,0x2e000000,0x71000000,0xffffffff,0xfffcfcfc,0xffe2e2e2,0xff939393,0xffffffff,0xffffffff,0xffffffff,0xf5c6c6c6,0x65000000,0x36000000,0x16000000, + 0x1a000000,0x35000000,0x7b000000,0xffffffff,0xfffdfdfd,0xffe8e8e8,0xffababab,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x7c000000,0x3e000000,0x1a000000, + 0x1c000000,0x39000000,0x80000000,0xffffffff,0xfffdfdfd,0xfff5f5f5,0xffd7d7d7,0xffababab,0xff939393,0xff969696,0xffb0b0b0,0x85000000,0x43000000,0x1c000000, + 0x1d000000,0x3b000000,0x83000000,0xffffffff,0xffffffff,0xfffcfcfc,0xfff5f5f5,0xffe8e8e8,0xffe2e2e2,0xffe2e2e2,0xffeaeaea,0x88000000,0x46000000,0x1d000000, + 0x1d000000,0x3c000000,0x84000000,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfffcfcfc,0xfffdfdfd,0x88000000,0x47000000,0x1d000000, 0x1d000000,0x3b000000,0x83000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x88000000,0x46000000,0x1d000000, 0x1c000000,0x39000000,0x81000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x85000000,0x44000000,0x1c000000, 0x1a000000,0x36000000,0x7b000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x80000000,0x3f000000,0x1a000000, 0x17000000,0x30000000,0x73000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x77000000,0x38000000,0x16000000, 0x14000000,0x28000000,0x5e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x61000000,0x2e000000,0x11000000, 0x10000000,0x20000000,0x3e000000,0x64000000,0x7e000000,0x89000000,0x8f000000,0x8f000000,0x89000000,0x7f000000,0x65000000,0x40000000,0x25000000,0xc000000 }; static const QRgb bold_data[] = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000, 0xff000000,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0xff000000,0xff000000,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0, 0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0, 0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000, 0xff000000,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0xff000000,0xff000000,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0 }; static const unsigned char c_src_data[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x15,0x01,0x01,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x15,0x0d,0x15,0x0d, 0x15,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0d,0x08, 0x0d,0x0d,0x0d,0x15,0x0d,0x15,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x15, 0x0d,0x0d,0x08,0x08,0x08,0x0d,0x15,0x0d,0x15,0x01,0x00,0x00,0x00,0x00, 0x01,0x15,0x0d,0x0d,0x0d,0x15,0x0d,0x08,0x08,0x15,0x15,0x01,0x00,0x00, 0x00,0x01,0x15,0x0d,0x08,0x0d,0x15,0x0d,0x15,0x0d,0x15,0x15,0x15,0x01, 0x00,0x00,0x00,0x01,0x0d,0x15,0x0d,0x08,0x08,0x08,0x0d,0x15,0x0d,0x15, 0x08,0x01,0x00,0x00,0x01,0x0d,0x15,0x0d,0x15,0x0d,0x15,0x0d,0x08,0x08, 0x15,0x15,0x01,0x00,0x00,0x01,0x15,0x15,0x08,0x15,0x15,0x15,0x0d,0x15, 0x15,0x15,0x15,0x15,0x01,0x00,0x01,0x15,0x15,0x15,0x15,0x08,0x08,0x08, 0x15,0x0d,0x15,0x0d,0x15,0x15,0x01,0x00,0x01,0x08,0x15,0x15,0x15,0x15, 0x15,0x15,0x08,0x08,0x08,0x15,0x15,0x08,0x01,0x00,0x00,0x01,0x01,0x08, 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x01,0x00,0x00,0x00,0x00, 0x00,0x01,0x01,0x01,0x08,0x15,0x15,0x15,0x15,0x15,0x08,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x08,0x15,0x08,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, 0x00,0x00,0x00,0x00 }; static const QRgb c_src_ctable[] = { 0xc6c6c6,0xff000000,0xffc3c3c3,0xff303030,0xffc0c0ff,0xffff0000,0xff008080,0xff800000,0xffc0c000,0xff0000c0,0xff808080,0xffc0ffc0,0xff00ffff,0xffffffff, 0xffa0a0a0,0xff00ff00,0xffffff00,0xffffc0ff,0xff404000,0xff00c000,0xff000080,0xffffffc0,0xff400000,0xffc05800,0xff800080,0xff008000,0xff00c0c0,0xffdcdcdc, 0xffff8000,0xffffc0c0,0xff585858,0xffc00000,0xffffdca8,0xff808000,0xffffa858,0xff004000,0xffc000c0,0xff0000ff,0xffff00ff,0xffc0ffff,0xff004040 }; static const QRgb calculator_data[] = { - 0x2000000,0xfff8f8f8,0xfff1f1f1,0xffe1e1e1,0xffd4d4d4,0xffdfdfdf,0xffeaeaea,0xffeaeaea,0xffeaeaea,0xffeaeaea,0xffeaeaea,0xffeaeaea,0x13000000,0xe000000, - 0x7000000,0xff649c64,0xff549254,0xff3c763c,0xffffffff,0xff3c763c,0xff468946,0xff468946,0xff468946,0xff468946,0xff468946,0xff2e792e,0xff005800,0x2b000000, - 0xe000000,0xff508b50,0xff2c6b2c,0xff134a13,0xffffffff,0xff134a13,0xff185e18,0xff1b691b,0xff1c6e1c,0xff1c6e1c,0xff1c6e1c,0xff005b00,0xff004300,0x55000000, - 0x13000000,0xff3f7c3f,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff005300,0xff005c00,0xff005c00,0xff005c00,0xff005100,0xff003a00,0x71000000, - 0x15000000,0xff438343,0xff185e18,0xff003e00,0xffffffff,0xff003900,0xff004200,0xff004600,0xff004b00,0xff004b00,0xff004f00,0xff004d00,0xff003a00,0x7f000000, - 0x15000000,0xff468946,0xff1c6e1c,0xff004f00,0xffffffff,0xff004600,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff004900,0xff003a00,0x7f000000, - 0x15000000,0xff438343,0xff196419,0xff005300,0xff005300,0xff004f00,0xff004600,0xff004600,0xff004600,0xff004200,0xff004b00,0xff004d00,0xff003a00,0x7f000000, - 0x15000000,0xff3f7c3f,0xffffffff,0xff7fa57f,0xff005300,0xff7fa57f,0xffffffff,0xff005300,0xff7fa97f,0xffffffff,0xff7fa97f,0xff005100,0xff003a00,0x7f000000, - 0x15000000,0xff438343,0xff8bac8b,0xffffffff,0xff7fa07f,0xffffffff,0xff7fa27f,0xff004b00,0xff004600,0xff004200,0xff004600,0xff004600,0xff003700,0x7f000000, - 0x15000000,0xff468946,0xff196419,0xff7fa07f,0xffffffff,0xff7fa07f,0xff004b00,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff003500,0x7f000000, - 0x15000000,0xff438343,0xff8bac8b,0xffffffff,0xff7fa07f,0xffffffff,0xff7fa27f,0xff004b00,0xff004600,0xff004200,0xff004600,0xff004600,0xff003700,0x7f000000, - 0x15000000,0xff2a6e2a,0xffffffff,0xff7fa07f,0xff004900,0xff7fa07f,0xffffffff,0xff004900,0xff7fa47f,0xffffffff,0xff7fa47f,0xff004800,0xff003600,0x7f000000, - 0x13000000,0xff005400,0xff003d00,0xff003700,0xff003a00,0xff003700,0xff003500,0xff003700,0xff003700,0xff003500,0xff003700,0xff003600,0xff003000,0x71000000, + 0x2000000,0xfff9f9f9,0xfff3f3f3,0xffe6e6e6,0xffdbdbdb,0xffe4e4e4,0xffeeeeee,0xffeeeeee,0xffeeeeee,0xffeeeeee,0xffeeeeee,0xffeeeeee,0x13000000,0xe000000, + 0x7000000,0xff76aa76,0xff66a166,0xff4d874d,0xffffffff,0xff4d874d,0xff589958,0xff589958,0xff589958,0xff589958,0xff589958,0xff3e8a3e,0xff006a00,0x2b000000, + 0xe000000,0xff629a62,0xff3c7c3c,0xff1e5c1e,0xffffffff,0xff1e5c1e,0xff247024,0xff287a28,0xff297f29,0xff297f29,0xff297f29,0xff006d00,0xff005400,0x55000000, + 0x13000000,0xff508d50,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff006500,0xff006e00,0xff006e00,0xff006e00,0xff006300,0xff004b00,0x71000000, + 0x15000000,0xff549354,0xff247024,0xff004f00,0xffffffff,0xff004a00,0xff005300,0xff005800,0xff005d00,0xff005d00,0xff006100,0xff005f00,0xff004b00,0x7f000000, + 0x15000000,0xff589958,0xff297f29,0xff006100,0xffffffff,0xff005800,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff005b00,0xff004b00,0x7f000000, + 0x15000000,0xff549354,0xff257625,0xff006500,0xff006500,0xff006100,0xff005800,0xff005800,0xff005800,0xff005300,0xff005d00,0xff005f00,0xff004b00,0x7f000000, + 0x15000000,0xff508d50,0xffffffff,0xff8fb28f,0xff006500,0xff8fb28f,0xffffffff,0xff006500,0xff8fb68f,0xffffffff,0xff8fb68f,0xff006300,0xff004b00,0x7f000000, + 0x15000000,0xff549354,0xff9ab89a,0xffffffff,0xff8fad8f,0xffffffff,0xff8faf8f,0xff005d00,0xff005800,0xff005300,0xff005800,0xff005800,0xff004800,0x7f000000, + 0x15000000,0xff589958,0xff257625,0xff8fad8f,0xffffffff,0xff8fad8f,0xff005d00,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff004600,0x7f000000, + 0x15000000,0xff549354,0xff9ab89a,0xffffffff,0xff8fad8f,0xffffffff,0xff8faf8f,0xff005d00,0xff005800,0xff005300,0xff005800,0xff005800,0xff004800,0x7f000000, + 0x15000000,0xff397f39,0xffffffff,0xff8fad8f,0xff005b00,0xff8fad8f,0xffffffff,0xff005b00,0xff8fb18f,0xffffffff,0xff8fb18f,0xff005a00,0xff004700,0x7f000000, + 0x13000000,0xff006600,0xff004e00,0xff004800,0xff004b00,0xff004800,0xff004600,0xff004800,0xff004800,0xff004600,0xff004800,0xff004700,0xff004000,0x71000000, 0xe000000,0x2b000000,0x55000000,0x71000000,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x71000000,0x55000000 }; static const QRgb center_data[] = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0 }; static const unsigned char citytime_icon_data[] = { 0x0c,0x0c,0x0c,0x0c,0x0c,0x06,0x06,0x06,0x06,0x06,0x06,0x0c,0x0c,0x0c, 0x0c,0x0c,0x0c,0x0c,0x0c,0x06,0x06,0x0d,0x02,0x0d,0x02,0x0d,0x0d,0x06, 0x06,0x0c,0x0c,0x0c,0x0c,0x0c,0x06,0x02,0x00,0x02,0x00,0x03,0x00,0x03, 0x00,0x02,0x0d,0x06,0x0c,0x0c,0x0c,0x06,0x0b,0x00,0x09,0x08,0x09,0x00, 0x00,0x08,0x03,0x00,0x03,0x00,0x06,0x0c,0x0c,0x06,0x0b,0x08,0x08,0x08, 0x08,0x08,0x00,0x02,0x00,0x02,0x00,0x03,0x06,0x0c,0x06,0x0b,0x08,0x03, 0x02,0x03,0x08,0x07,0x03,0x00,0x02,0x01,0x02,0x00,0x03,0x06,0x06,0x0b, 0x07,0x0a,0x00,0x0a,0x00,0x02,0x07,0x08,0x00,0x08,0x01,0x02,0x0b,0x06, 0x06,0x0b,0x02,0x00,0x0a,0x00,0x0a,0x00,0x00,0x04,0x08,0x01,0x08,0x01, 0x0b,0x06,0x06,0x0b,0x08,0x02,0x03,0x02,0x07,0x02,0x00,0x07,0x01,0x08, 0x05,0x08,0x0b,0x06,0x06,0x0b,0x08,0x01,0x08,0x03,0x02,0x07,0x02,0x01, 0x08,0x01,0x08,0x05,0x0b,0x06,0x06,0x0b,0x08,0x08,0x01,0x03,0x00,0x02, 0x03,0x08,0x01,0x08,0x01,0x08,0x0b,0x06,0x0c,0x06,0x0b,0x01,0x08,0x01, 0x0a,0x00,0x08,0x01,0x00,0x01,0x08,0x0b,0x06,0x0c,0x0c,0x06,0x0b,0x08, 0x08,0x08,0x07,0x02,0x01,0x08,0x01,0x08,0x0b,0x0b,0x06,0x0c,0x0c,0x0c, 0x06,0x05,0x05,0x08,0x08,0x01,0x08,0x08,0x01,0x0b,0x05,0x06,0x0c,0x0c, 0x0c,0x0c,0x0c,0x06,0x06,0x05,0x08,0x05,0x05,0x08,0x05,0x06,0x06,0x0c, 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x06,0x06,0x06,0x06,0x06,0x06,0x0c, 0x0c,0x0c,0x0c,0x0c }; static const QRgb citytime_icon_ctable[] = { 0xffffa858,0xff000080,0xffc0c000,0xff808000,0xffc05800,0xffc0c0ff,0xff000000,0xffff8000,0xff0000c0,0xff800000,0xffffdca8,0xff0000ff,0xc6c6c6,0xffffffff }; static const QRgb close_data[] = { - 0xffffff,0xffffff,0xffffff,0x66a45b5b,0xba884d4d,0xeb6a3939,0xfd572c2c,0xeb682e2e,0xba833232,0x669b2f2f,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0x1bc26464,0x9dad6060,0xfd9b5858,0xff995353,0xff994d4d,0xff984545,0xff963b3b,0xff913030,0xfd912626,0x9da01d1d,0x1bb21414,0xffffff,0xffffff, - 0xffffff,0x9dac5a5a,0xffa65a5a,0xffbc8888,0xffc06161,0xffc65353,0xffc64a4a,0xffc13e3e,0xffb83838,0xffb56262,0xff981111,0x9c9c0606,0xffffff,0xffffff, - 0x66a14a4a,0xfd984c4c,0xffbb8484,0xffe5e5e5,0xffeccfcf,0xffd74c4c,0xffd43737,0xffd33a3a,0xffeac4c4,0xffe5e5e5,0xffb25252,0xfd8a0000,0x60940000,0xffffff, - 0xba843939,0xff954040,0xffbf5353,0xffeccdcd,0xfffdfdfd,0xfff4cdcd,0xffd63232,0xfff4c9c9,0xfffdfdfd,0xffe9bdbd,0xffa80b0b,0xff830000,0xaf810000,0xffffff, - 0xeb662525,0xff943333,0xffc03a3a,0xffd43b3b,0xfff5cdcd,0xffffffff,0xfffdf2f2,0xffffffff,0xfff3c6c6,0xffbe0d0d,0xffa30000,0xff7e0000,0xe36e0000,0xffffff, - 0xfd541717,0xff922525,0xffbf2828,0xffcf1f1f,0xffd42828,0xfffcf2f2,0xffffffff,0xfffcf2f2,0xffc81a1a,0xffb30000,0xff9a0000,0xff760000,0xfc620000,0xffffff, - 0xeb621212,0xff8e1414,0xffb81313,0xffcd1919,0xfff4c6c6,0xffffffff,0xfffcf2f2,0xffffffff,0xffefc5c5,0xffab0d0d,0xff8b0000,0xff6a0000,0xe35d0000,0xffffff, - 0xba7b0909,0xff890404,0xffae0b0b,0xffe8bdbd,0xfffdfdfd,0xffefc5c5,0xffc11b1b,0xffedc5c5,0xfffdfdfd,0xffdebdbd,0xff7c0b0b,0xff5d0000,0xaf5e0000,0xffffff, - 0x668f0000,0xfd830000,0xffa84e4e,0xffe5e5e5,0xffe4bdbd,0xffad0e0e,0xffa40000,0xff9f0e0e,0xffddbdbd,0xffe5e5e5,0xff8b4e4e,0xfd540000,0x60620000,0xffffff, - 0xffffff,0x9d890000,0xff7e0000,0xff9f4f4f,0xff8c0c0c,0xff8a0000,0xff860000,0xff7b0000,0xff740c0c,0xff884f4f,0xff530000,0x9c590000,0xffffff,0xffffff, - 0xffffff,0x1b950000,0x9c7d0000,0xfd6b0000,0xff680000,0xff640000,0xff610000,0xff590000,0xff510000,0xfd4d0000,0x9c560000,0x1b660000,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0x60740000,0xaf630000,0xe2550000,0xfc4d0000,0xe24c0000,0xaf500000,0x60570000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0x66b16d6d,0xba985f5f,0xeb7b4a4a,0xfd693c3c,0xeb7a3e3e,0xba934242,0x66a93f3f,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0x1bcb7676,0x9db97272,0xfda96a6a,0xffa76565,0xffa75f5f,0xffa65757,0xffa44c4c,0xffa04040,0xfda03535,0x9dad2a2a,0x1bbd1f1f,0xffffff,0xffffff, + 0xffffff,0x9db86c6c,0xffb36c6c,0xffc69898,0xffca7373,0xffcf6565,0xffcf5c5c,0xffcb4f4f,0xffc34949,0xffc07474,0xffa61b1b,0x9caa0c0c,0xffffff,0xffffff, + 0x66ae5c5c,0xfda65e5e,0xffc59494,0xffe9e9e9,0xffefd7d7,0xffdd5e5e,0xffdb4848,0xffda4b4b,0xffeecdcd,0xffe9e9e9,0xffbd6464,0xfd9a0000,0x60a30000,0xffffff, + 0xba944a4a,0xffa45151,0xffc96565,0xffefd5d5,0xfffdfdfd,0xfff6d5d5,0xffdd4242,0xfff6d1d1,0xfffdfdfd,0xffedc7c7,0xffb51313,0xff930000,0xaf910000,0xffffff, + 0xeb783434,0xffa34343,0xffca4b4b,0xffdb4c4c,0xfff7d5d5,0xffffffff,0xfffdf4f4,0xffffffff,0xfff5cfcf,0xffc81616,0xffb00000,0xff8e0000,0xe37f0000,0xffffff, + 0xfd662323,0xffa13434,0xffc93737,0xffd72d2d,0xffdb3737,0xfffdf4f4,0xffffffff,0xfffdf4f4,0xffd12727,0xffbe0000,0xffa80000,0xff870000,0xfc740000,0xffffff, + 0xeb741d1d,0xff9d1f1f,0xffc31e1e,0xffd52525,0xfff6cfcf,0xffffffff,0xfffdf4f4,0xffffffff,0xfff2cece,0xffb71616,0xff9a0000,0xff7b0000,0xe36f0000,0xffffff, + 0xba8c1010,0xff990808,0xffba1313,0xffecc7c7,0xfffdfdfd,0xfff2cece,0xffcb2828,0xfff0cece,0xfffdfdfd,0xffe3c7c7,0xff8d1313,0xff6f0000,0xaf700000,0xffffff, + 0x669e0000,0xfd930000,0xffb56060,0xffe9e9e9,0xffe8c7c7,0xffb91717,0xffb10000,0xffad1717,0xffe3c7c7,0xffe9e9e9,0xff9a6060,0xfd660000,0x60740000,0xffffff, + 0xffffff,0x9d990000,0xff8e0000,0xffad6161,0xff9b1414,0xff9a0000,0xff960000,0xff8c0000,0xff851414,0xff986161,0xff650000,0x9c6b0000,0xffffff,0xffffff, + 0xffffff,0x1ba40000,0x9c8d0000,0xfd7c0000,0xff7a0000,0xff760000,0xff730000,0xff6b0000,0xff630000,0xfd5f0000,0x9c680000,0x1b780000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0x60850000,0xaf750000,0xe2670000,0xfc5f0000,0xe25e0000,0xaf620000,0x60690000,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff }; static const QRgb copy_data[] = { - 0xffffff,0x3200,0xa00,0x400,0x28000000,0xa6000000,0x9b000000,0xa6000000,0xb71e1e1e,0x6545454,0x10101,0x0,0x0,0x0, - 0xffffff,0x3200,0xa00,0x400,0x28000000,0xa6363636,0x9ba7a7a7,0xa6828282,0xaeb2b2b2,0x7b656565,0xe000000,0x2000000,0x0,0x0, - 0xffffff,0x3200,0xa00,0x200,0x26000000,0xa5565556,0x9affffff,0xa6b6b6b6,0xa9e6e6e6,0xb3eaeaea,0x8e4a4a4a,0x1c000000,0x2000000,0x0, - 0xffffff,0x5003200,0xc2000a00,0xe2101410,0xe90f100f,0xf9192619,0xd59aaf9a,0xa0a3a2a3,0xa9d5d4d5,0xaaffffff,0xb1f1f1f1,0x914e4e4e,0x1e050505,0x2000000, - 0xffffff,0x5003100,0xd2020f02,0xf5ebefeb,0xf9cfe6cf,0xffbcddbc,0xffbecabe,0xde3e583e,0xb0a9aea9,0xa9e9e8e9,0xaaececec,0xb3d8d8d8,0x86272727,0x5000000, - 0xffffff,0x5003100,0xd0020f02,0xf3e9eee9,0xf7b9d8b9,0xff8ab78a,0xffffffff,0xffb6c6b6,0xe3385438,0xb26a746a,0xa8a0a0a0,0xaf9a9a9a,0x8a000000,0x10000000, - 0xffffff,0x5003100,0xd0020f02,0xf3e7ece7,0xf7b5d4b5,0xff8ab18a,0xffffffff,0xffffffff,0xffbfcabf,0xe3688668,0xafbac3ba,0xa8bebebe,0x89000000,0x15000000, - 0xffffff,0x4003200,0xd0021002,0xf3e2eae2,0xf7c1ddc1,0xfe78ac78,0xff9dbe9d,0xff9dc39d,0xffcce9cc,0xff364636,0xbb879987,0xa0bfbfbf,0x81000000,0x13000000, - 0xffffff,0x4003300,0xd0020f02,0xf1d7e4d7,0xf4d6ead6,0xfea5cba5,0xfd91bc91,0xfd94c094,0xfdb9dfb9,0xfe1c201c,0xc1687b68,0x9db8b8b8,0x7e000000,0x10000000, - 0xffffff,0x4003500,0xcf020f02,0xefcbdccb,0xefd2e8d2,0xfcc7e0c7,0xfbd2e7d2,0xfbd4e8d4,0xfbe9f9e9,0xfc2a2f2a,0xc56b7e6b,0xa5b7b7b7,0x80000000,0xc000000, - 0xffffff,0x3003700,0xce021002,0xeec0d5c0,0xecc0dec0,0xf7b1d2b1,0xf7b4d5b4,0xf7b9d8b9,0xf7cceacc,0xf8222822,0xc2090c09,0xa4141414,0x7a000000,0x4000000, - 0xffffff,0x3003600,0xce031003,0xeec2dcc2,0xe9c4e7c4,0xefbde1bd,0xf0bee1be,0xf0c3e4c3,0xefdefcde,0xf1252c25,0x740e240e,0x27313131,0x1c000000,0x2000000, - 0xffffff,0xa003000,0xdb000800,0xfa7b8b7b,0xf97f947f,0xff7a907a,0xff7b907b,0xff809380,0xff91a291,0xff181a18,0x51001c00,0x1000000,0x2000000,0x0, - 0xffffff,0xd002a00,0x82133013,0xaa1c361c,0xb80e220e,0xae0b200b,0xab0b200b,0xab0b200b,0xab0c210c,0xa7021602,0x2a002b00,0x0,0x0,0x0 + 0xffffff,0x4200,0x1200,0x800,0x28000000,0xa6000000,0x9b000000,0xa6000000,0xb72b2b2b,0x6666666,0x30303,0x0,0x0,0x0, + 0xffffff,0x4200,0x1200,0x800,0x28000000,0xa6474747,0x9bb4b4b4,0xa6929292,0xaebdbdbd,0x7b777777,0xe000000,0x2000000,0x0,0x0, + 0xffffff,0x4200,0x1200,0x500,0x26000000,0xa5686768,0x9affffff,0xa6c1c1c1,0xa9eaeaea,0xb3eeeeee,0x8e5c5c5c,0x1c000000,0x2000000,0x0, + 0xffffff,0x5004200,0xc2001200,0xe21a1f1a,0xe9191a19,0xf9253525,0xd5a8bba8,0xa0b0afb0,0xa9dcdbdc,0xaaffffff,0xb1f3f3f3,0x91606060,0x1e0a0a0a,0x2000000, + 0xffffff,0x5004100,0xd2051905,0xf5eef2ee,0xf9d7ead7,0xffc6e3c6,0xffc8d2c8,0xde4f6a4f,0xb0b6bab6,0xa9edeced,0xaaefefef,0xb3dedede,0x86363636,0x5000000, + 0xffffff,0x5004100,0xd0051905,0xf3edf1ed,0xf7c4dec4,0xff9ac29a,0xffffffff,0xffc1cfc1,0xe3496649,0xb27b857b,0xa8adadad,0xafa8a8a8,0x8a000000,0x10000000, + 0xffffff,0x5004100,0xd0051905,0xf3ebefeb,0xf7c0dbc0,0xff9abd9a,0xffffffff,0xffffffff,0xffc9d2c9,0xe37a967a,0xafc4ccc4,0xa8c8c8c8,0x89000000,0x15000000, + 0xffffff,0x4004200,0xd0051a05,0xf3e7eee7,0xf7cbe3cb,0xfe89b889,0xffabc8ab,0xffabccab,0xffd4edd4,0xff475847,0xbb97a797,0xa0c9c9c9,0x81000000,0x13000000, + 0xffffff,0x4004300,0xd0051905,0xf1dde8dd,0xf4ddeedd,0xfeb2d3b2,0xfda0c6a0,0xfda3caa3,0xfdc4e4c4,0xfe292e29,0xc17a8c7a,0x9dc3c3c3,0x7e000000,0x10000000, + 0xffffff,0x4004600,0xcf051905,0xefd3e2d3,0xefd9ecd9,0xfcd0e5d0,0xfbd9ebd9,0xfbdbecdb,0xfbedfaed,0xfc393f39,0xc57c8e7c,0xa5c2c2c2,0x80000000,0xc000000, + 0xffffff,0x3004800,0xce051a05,0xeecadcca,0xeccae3ca,0xf7bdd9bd,0xf7bfdcbf,0xf7c4dec4,0xf7d4eed4,0xf8303730,0xc2101410,0xa41f1f1f,0x7a000000,0x4000000, + 0xffffff,0x3004700,0xce061a06,0xeecbe2cb,0xe9cdebcd,0xefc7e6c7,0xf0c8e6c8,0xf0cce8cc,0xefe3fde3,0xf1343c34,0x74173317,0x27414141,0x1c000000,0x2000000, + 0xffffff,0xa004000,0xdb000f00,0xfa8c9a8c,0xf98fa38f,0xff8b9f8b,0xff8c9f8c,0xff90a290,0xffa0afa0,0xff242724,0x51002900,0x1000000,0x2000000,0x0, + 0xffffff,0xd003900,0x821e401e,0xaa294729,0xb8173017,0xae132e13,0xab132e13,0xab132e13,0xab142f14,0xa7052205,0x2a003b00,0x0,0x0,0x0 }; static const QRgb copy_inactive_data[] = { - 0xffffff,0x3200,0xa00,0x400,0x14000000,0x53000000,0x4d000000,0x53000000,0x5b1e1e1e,0x3545454,0x10101,0x0,0x0,0x0, - 0xffffff,0x3200,0xa00,0x400,0x14000000,0x53363636,0x4da7a7a7,0x53828282,0x57b2b2b2,0x3d656565,0x7000000,0x1000000,0x0,0x0, - 0xffffff,0x3200,0xa00,0x200,0x13000000,0x52555555,0x4dffffff,0x53b6b6b6,0x54e6e6e6,0x59eaeaea,0x474a4a4a,0xe000000,0x1000000,0x0, - 0xffffff,0x2191919,0x61050505,0x71121212,0x740f0f0f,0x7c1f1f1f,0x6aa4a4a4,0x50a2a2a2,0x54d4d4d4,0x55ffffff,0x58f1f1f1,0x484e4e4e,0xf050505,0x1000000, - 0xffffff,0x2181818,0x69080808,0x7aededed,0x7cdadada,0x7fcccccc,0x7fc4c4c4,0x6f4b4b4b,0x58ababab,0x54e8e8e8,0x55ececec,0x59d8d8d8,0x43272727,0x2000000, - 0xffffff,0x2181818,0x68080808,0x79ebebeb,0x7bc8c8c8,0x7fa0a0a0,0x7fffffff,0x7fbebebe,0x71464646,0x596f6f6f,0x54a0a0a0,0x579a9a9a,0x45000000,0x8000000, - 0xffffff,0x2181818,0x68080808,0x79e9e9e9,0x7bc4c4c4,0x7f9d9d9d,0x7fffffff,0x7fffffff,0x7fc4c4c4,0x71777777,0x57bebebe,0x54bebebe,0x44000000,0xa000000, - 0xffffff,0x2191919,0x68090909,0x79e6e6e6,0x7bcfcfcf,0x7f929292,0x7fadadad,0x7fb0b0b0,0x7fdadada,0x7f3e3e3e,0x5d909090,0x50bfbfbf,0x40000000,0x9000000, - 0xffffff,0x2191919,0x68080808,0x78dddddd,0x7ae0e0e0,0x7fb8b8b8,0x7ea6a6a6,0x7eaaaaaa,0x7ecccccc,0x7f1e1e1e,0x60717171,0x4eb8b8b8,0x3f000000,0x8000000, - 0xffffff,0x21a1a1a,0x67080808,0x77d3d3d3,0x77dddddd,0x7ed3d3d3,0x7ddcdcdc,0x7ddedede,0x7df1f1f1,0x7e2c2c2c,0x62747474,0x52b7b7b7,0x40000000,0x6000000, - 0xffffff,0x11b1b1b,0x67090909,0x77cacaca,0x76cfcfcf,0x7bc1c1c1,0x7bc4c4c4,0x7bc8c8c8,0x7bdbdbdb,0x7c252525,0x610a0a0a,0x52141414,0x3d000000,0x2000000, - 0xffffff,0x11b1b1b,0x67090909,0x77cfcfcf,0x74d5d5d5,0x77cfcfcf,0x78cfcfcf,0x78d3d3d3,0x77ededed,0x78282828,0x3a191919,0x13313131,0xe000000,0x1000000, - 0xffffff,0x5181818,0x6d040404,0x7d838383,0x7c898989,0x7f858585,0x7f858585,0x7f898989,0x7f999999,0x7f191919,0x280e0e0e,0x0,0x1000000,0x0, - 0xffffff,0x6151515,0x41212121,0x55292929,0x5c181818,0x57151515,0x55151515,0x55151515,0x55161616,0x530c0c0c,0x15151515,0x0,0x0,0x0 + 0xffffff,0x4200,0x1200,0x800,0x14000000,0x53000000,0x4d000000,0x53000000,0x5b2b2b2b,0x3666666,0x30303,0x0,0x0,0x0, + 0xffffff,0x4200,0x1200,0x800,0x14000000,0x53474747,0x4db4b4b4,0x53929292,0x57bdbdbd,0x3d777777,0x7000000,0x1000000,0x0,0x0, + 0xffffff,0x4200,0x1200,0x500,0x13000000,0x52676767,0x4dffffff,0x53c1c1c1,0x54eaeaea,0x59eeeeee,0x475c5c5c,0xe000000,0x1000000,0x0, + 0xffffff,0x2252525,0x610a0a0a,0x711d1d1d,0x74191919,0x7c2d2d2d,0x6ab1b1b1,0x50afafaf,0x54dbdbdb,0x55ffffff,0x58f3f3f3,0x48606060,0xf0a0a0a,0x1000000, + 0xffffff,0x2242424,0x690f0f0f,0x7af0f0f0,0x7ce0e0e0,0x7fd4d4d4,0x7fcdcdcd,0x6f5d5d5d,0x58b7b7b7,0x54ececec,0x55efefef,0x59dedede,0x43363636,0x2000000, + 0xffffff,0x2242424,0x680f0f0f,0x79eeeeee,0x7bd1d1d1,0x7fadadad,0x7fffffff,0x7fc8c8c8,0x71585858,0x59808080,0x54adadad,0x57a8a8a8,0x45000000,0x8000000, + 0xffffff,0x2242424,0x680f0f0f,0x79ededed,0x7bcdcdcd,0x7fababab,0x7fffffff,0x7fffffff,0x7fcdcdcd,0x71888888,0x57c8c8c8,0x54c8c8c8,0x44000000,0xa000000, + 0xffffff,0x2252525,0x68101010,0x79eaeaea,0x7bd7d7d7,0x7fa1a1a1,0x7fb9b9b9,0x7fbcbcbc,0x7fe0e0e0,0x7f4f4f4f,0x5d9f9f9f,0x50c9c9c9,0x40000000,0x9000000, + 0xffffff,0x2252525,0x680f0f0f,0x78e3e3e3,0x7ae5e5e5,0x7fc3c3c3,0x7eb3b3b3,0x7eb6b6b6,0x7ed4d4d4,0x7f2b2b2b,0x60828282,0x4ec3c3c3,0x3f000000,0x8000000, + 0xffffff,0x2272727,0x670f0f0f,0x77dadada,0x77e3e3e3,0x7edadada,0x7de2e2e2,0x7de3e3e3,0x7df3f3f3,0x7e3c3c3c,0x62858585,0x52c2c2c2,0x40000000,0x6000000, + 0xffffff,0x1282828,0x67101010,0x77d2d2d2,0x76d7d7d7,0x7bcbcbcb,0x7bcdcdcd,0x7bd1d1d1,0x7be1e1e1,0x7c343434,0x61121212,0x521f1f1f,0x3d000000,0x2000000, + 0xffffff,0x1282828,0x67101010,0x77d7d7d7,0x74dcdcdc,0x77d7d7d7,0x78d7d7d7,0x78dadada,0x77f0f0f0,0x78373737,0x3a252525,0x13414141,0xe000000,0x1000000, + 0xffffff,0x5242424,0x6d080808,0x7d939393,0x7c999999,0x7f959595,0x7f959595,0x7f999999,0x7fa7a7a7,0x7f252525,0x28171717,0x0,0x1000000,0x0, + 0xffffff,0x6202020,0x412f2f2f,0x55383838,0x5c242424,0x57202020,0x55202020,0x55202020,0x55222222,0x53141414,0x15202020,0x0,0x0,0x0 }; static const QRgb cut_data[] = { - 0xc000000,0x9000000,0xa7494949,0xe7434343,0x5d262626,0x4000000,0x12000000,0xb000000,0xb000000,0xd000000,0x3f424242,0x9e666666,0x422f2f2f,0xe000000, - 0x7000000,0x82101010,0xe5232323,0xfb171717,0xd0191919,0x88101010,0xd000000,0x14000000,0x16000000,0x53383838,0xbb555555,0xe22a2a2a,0xb3363636,0x38202020, - 0x13000000,0xc3050505,0xff141414,0xcc393939,0xf94b4b4b,0xff181818,0x91111111,0x1e000000,0x6e3a3a3a,0xe0585858,0xff202020,0xff1b1b1b,0xff282828,0x971a1a1a, - 0x11000000,0x9d3b3b3b,0xfd393939,0xf21e1e1e,0x981f1f1f,0xe55b5b5b,0xfe191919,0xba3b3b3b,0xda3b3b3b,0xfe252525,0x8d0c0c0c,0x6b0a0a0a,0xc52a2a2a,0xb40f0f0f, - 0x12000000,0x27000000,0x9b4d4d4d,0xf83a3a3a,0xf8212121,0xe2333333,0xff303030,0xff1e1e1e,0xff0d0d0d,0xe41e1e1e,0xa6171717,0xaf242424,0xfd3e3e3e,0xaa1a1a1a, - 0xc000000,0x15000000,0x2e000000,0x8f4e4e4e,0xd41b1b1b,0xed212121,0xff373737,0xff5b5b5b,0xff252525,0xff111111,0xf7565656,0xf5626262,0xea5e5e5e,0x7b2e2e2e, - 0x7000000,0xd000000,0x1a000000,0x2b000000,0x5c010101,0xda121212,0xff5e5e5e,0xfff5f5f5,0xff999999,0xff1a1a1a,0xa7535353,0x96626262,0x734b4b4b,0x37040404, - 0x4000000,0x8000000,0x14000000,0x32000000,0xca141414,0xff636363,0xff484848,0xfe818181,0xfeefefef,0xffa1a1a1,0xc5000000,0x52000000,0x3e000000,0x2a000000, - 0x5000000,0xe000000,0x25000000,0xc6151515,0xff9a9a9a,0xfec8c8c8,0xff5f5f5f,0xff151515,0xfda2a2a2,0xfdf8f8f8,0xffa4a4a4,0xbe080808,0x3d000000,0x2b000000, - 0xe000000,0x1e000000,0xc5151515,0xff9a9a9a,0xffededed,0xffa1a1a1,0xd6111111,0x7d000000,0xdd1e1e1e,0xffababab,0xfff4f4f4,0xffa1a1a1,0xb7090909,0x2d000000, - 0x3000000,0xab0e0e0e,0xff8b8b8b,0xffe3e3e3,0xffadadad,0xf41e1e1e,0xb30e0e0e,0x43000000,0x4f000000,0xda1f1f1f,0xffaeaeae,0xfef5f5f5,0xff9c9c9c,0x98020202, - 0x6000000,0xb70d0d0d,0xffa9a9a9,0xffb0b0b0,0xd1151515,0x53000000,0x44000000,0x38000000,0x31000000,0x3a000000,0xd7202020,0xffb9b9b9,0xffb6b6b6,0xa7010101, - 0x0,0xc0121212,0xff787878,0xcc1f1f1f,0x4a010101,0x3a000000,0x2f000000,0x22000000,0x1c000000,0x1f000000,0x30000000,0xd32b2b2b,0xff7c7c7c,0xae0b0b0b, - 0x5000000,0x650c0c0c,0x97090909,0x38090909,0x2a000000,0x24000000,0x1a000000,0xf000000,0xb000000,0xe000000,0x13000000,0x2d000000,0x990a0a0a,0x650a0a0a + 0xc000000,0x9000000,0xa75b5b5b,0xe7545454,0x5d353535,0x4000000,0x12000000,0xb000000,0xb000000,0xd000000,0x3f535353,0x9e787878,0x423f3f3f,0xe000000, + 0x7000000,0x821a1a1a,0xe5313131,0xfb232323,0xd0252525,0x881a1a1a,0xd000000,0x14000000,0x16000000,0x53494949,0xbb676767,0xe2393939,0xb3474747,0x382e2e2e, + 0x13000000,0xc30a0a0a,0xff1f1f1f,0xcc4a4a4a,0xf95d5d5d,0xff242424,0x911b1b1b,0x1e000000,0x6e4b4b4b,0xe06a6a6a,0xff2e2e2e,0xff282828,0xff373737,0x97272727, + 0x11000000,0x9d4c4c4c,0xfd4a4a4a,0xf22b2b2b,0x982d2d2d,0xe56d6d6d,0xfe252525,0xba4c4c4c,0xda4c4c4c,0xfe343434,0x8d141414,0x6b121212,0xc5393939,0xb4191919, + 0x12000000,0x27000000,0x9b5f5f5f,0xf84b4b4b,0xf82f2f2f,0xe2434343,0xff404040,0xff2b2b2b,0xff161616,0xe42b2b2b,0xa6232323,0xaf333333,0xfd4f4f4f,0xaa272727, + 0xc000000,0x15000000,0x2e000000,0x8f606060,0xd4282828,0xed2f2f2f,0xff484848,0xff6d6d6d,0xff343434,0xff1b1b1b,0xf7686868,0xf5747474,0xea707070,0x7b3e3e3e, + 0x7000000,0xd000000,0x1a000000,0x2b000000,0x5c030303,0xda1d1d1d,0xff707070,0xfff7f7f7,0xffa7a7a7,0xff272727,0xa7656565,0x96747474,0x735d5d5d,0x37080808, + 0x4000000,0x8000000,0x14000000,0x32000000,0xca1f1f1f,0xff757575,0xff5a5a5a,0xfe919191,0xfef2f2f2,0xffaeaeae,0xc5000000,0x52000000,0x3e000000,0x2a000000, + 0x5000000,0xe000000,0x25000000,0xc6202020,0xffa8a8a8,0xfed1d1d1,0xff717171,0xff202020,0xfdafafaf,0xfdf9f9f9,0xffb1b1b1,0xbe0f0f0f,0x3d000000,0x2b000000, + 0xe000000,0x1e000000,0xc5202020,0xffa8a8a8,0xfff0f0f0,0xffaeaeae,0xd61b1b1b,0x7d000000,0xdd2b2b2b,0xffb7b7b7,0xfff6f6f6,0xffaeaeae,0xb7101010,0x2d000000, + 0x3000000,0xab171717,0xff9a9a9a,0xffe8e8e8,0xffb9b9b9,0xf42b2b2b,0xb3171717,0x43000000,0x4f000000,0xda2d2d2d,0xffbababa,0xfef7f7f7,0xffaaaaaa,0x98050505, + 0x6000000,0xb7161616,0xffb6b6b6,0xffbcbcbc,0xd1202020,0x53000000,0x44000000,0x38000000,0x31000000,0x3a000000,0xd72e2e2e,0xffc4c4c4,0xffc1c1c1,0xa7030303, + 0x0,0xc01d1d1d,0xff898989,0xcc2d2d2d,0x4a030303,0x3a000000,0x2f000000,0x22000000,0x1c000000,0x1f000000,0x30000000,0xd33b3b3b,0xff8d8d8d,0xae131313, + 0x5000000,0x65141414,0x97101010,0x38101010,0x2a000000,0x24000000,0x1a000000,0xf000000,0xb000000,0xe000000,0x13000000,0x2d000000,0x99121212,0x65121212 }; static const QRgb cut_inactive_data[] = { - 0x6000000,0x4000000,0x53494949,0x73434343,0x2e262626,0x2000000,0x9000000,0x5000000,0x5000000,0x6000000,0x1f424242,0x4f666666,0x212f2f2f,0x7000000, - 0x3000000,0x41101010,0x72232323,0x7d171717,0x68191919,0x44101010,0x6000000,0xa000000,0xb000000,0x29383838,0x5d555555,0x712a2a2a,0x59363636,0x1c202020, - 0x9000000,0x61050505,0x7f141414,0x66393939,0x7c4b4b4b,0x7f181818,0x48111111,0xf000000,0x373a3a3a,0x70585858,0x7f202020,0x7f1b1b1b,0x7f282828,0x4b1a1a1a, - 0x8000000,0x4e3b3b3b,0x7e393939,0x791e1e1e,0x4c1f1f1f,0x725b5b5b,0x7f191919,0x5d3b3b3b,0x6d3b3b3b,0x7f252525,0x460c0c0c,0x350a0a0a,0x622a2a2a,0x5a0f0f0f, - 0x9000000,0x13000000,0x4d4d4d4d,0x7c3a3a3a,0x7c212121,0x71333333,0x7f303030,0x7f1e1e1e,0x7f0d0d0d,0x721e1e1e,0x53171717,0x57242424,0x7e3e3e3e,0x551a1a1a, - 0x6000000,0xa000000,0x17000000,0x474e4e4e,0x6a1b1b1b,0x76212121,0x7f373737,0x7f5b5b5b,0x7f252525,0x7f111111,0x7b565656,0x7a626262,0x755e5e5e,0x3d2e2e2e, - 0x3000000,0x6000000,0xd000000,0x15000000,0x2e010101,0x6d121212,0x7f5e5e5e,0x7ff5f5f5,0x7f999999,0x7f1a1a1a,0x53535353,0x4b626262,0x394b4b4b,0x1b040404, - 0x2000000,0x4000000,0xa000000,0x19000000,0x65141414,0x7f636363,0x7f484848,0x7f818181,0x7fefefef,0x7fa1a1a1,0x62000000,0x29000000,0x1f000000,0x15000000, - 0x2000000,0x7000000,0x12000000,0x63151515,0x7f9a9a9a,0x7fc8c8c8,0x7f5f5f5f,0x7f151515,0x7ea2a2a2,0x7ef8f8f8,0x7fa4a4a4,0x5f080808,0x1e000000,0x15000000, - 0x7000000,0xf000000,0x62151515,0x7f9a9a9a,0x7fededed,0x7fa1a1a1,0x6b111111,0x3e000000,0x6e1e1e1e,0x7fababab,0x7ff4f4f4,0x7fa1a1a1,0x5b090909,0x16000000, - 0x1000000,0x550e0e0e,0x7f8b8b8b,0x7fe3e3e3,0x7fadadad,0x7a1e1e1e,0x590e0e0e,0x21000000,0x27000000,0x6d1f1f1f,0x7faeaeae,0x7ff5f5f5,0x7f9c9c9c,0x4c020202, - 0x3000000,0x5b0d0d0d,0x7fa9a9a9,0x7fb0b0b0,0x68151515,0x29000000,0x22000000,0x1c000000,0x18000000,0x1d000000,0x6b202020,0x7fb9b9b9,0x7fb6b6b6,0x53010101, - 0x0,0x60121212,0x7f787878,0x661f1f1f,0x25010101,0x1d000000,0x17000000,0x11000000,0xe000000,0xf000000,0x18000000,0x692b2b2b,0x7f7c7c7c,0x570b0b0b, - 0x2000000,0x320c0c0c,0x4b090909,0x1c090909,0x15000000,0x12000000,0xd000000,0x7000000,0x5000000,0x7000000,0x9000000,0x16000000,0x4c0a0a0a,0x320a0a0a + 0x6000000,0x4000000,0x535b5b5b,0x73545454,0x2e353535,0x2000000,0x9000000,0x5000000,0x5000000,0x6000000,0x1f535353,0x4f787878,0x213f3f3f,0x7000000, + 0x3000000,0x411a1a1a,0x72313131,0x7d232323,0x68252525,0x441a1a1a,0x6000000,0xa000000,0xb000000,0x29494949,0x5d676767,0x71393939,0x59474747,0x1c2e2e2e, + 0x9000000,0x610a0a0a,0x7f1f1f1f,0x664a4a4a,0x7c5d5d5d,0x7f242424,0x481b1b1b,0xf000000,0x374b4b4b,0x706a6a6a,0x7f2e2e2e,0x7f282828,0x7f373737,0x4b272727, + 0x8000000,0x4e4c4c4c,0x7e4a4a4a,0x792b2b2b,0x4c2d2d2d,0x726d6d6d,0x7f252525,0x5d4c4c4c,0x6d4c4c4c,0x7f343434,0x46141414,0x35121212,0x62393939,0x5a191919, + 0x9000000,0x13000000,0x4d5f5f5f,0x7c4b4b4b,0x7c2f2f2f,0x71434343,0x7f404040,0x7f2b2b2b,0x7f161616,0x722b2b2b,0x53232323,0x57333333,0x7e4f4f4f,0x55272727, + 0x6000000,0xa000000,0x17000000,0x47606060,0x6a282828,0x762f2f2f,0x7f484848,0x7f6d6d6d,0x7f343434,0x7f1b1b1b,0x7b686868,0x7a747474,0x75707070,0x3d3e3e3e, + 0x3000000,0x6000000,0xd000000,0x15000000,0x2e030303,0x6d1d1d1d,0x7f707070,0x7ff7f7f7,0x7fa7a7a7,0x7f272727,0x53656565,0x4b747474,0x395d5d5d,0x1b080808, + 0x2000000,0x4000000,0xa000000,0x19000000,0x651f1f1f,0x7f757575,0x7f5a5a5a,0x7f919191,0x7ff2f2f2,0x7faeaeae,0x62000000,0x29000000,0x1f000000,0x15000000, + 0x2000000,0x7000000,0x12000000,0x63202020,0x7fa8a8a8,0x7fd1d1d1,0x7f717171,0x7f202020,0x7eafafaf,0x7ef9f9f9,0x7fb1b1b1,0x5f0f0f0f,0x1e000000,0x15000000, + 0x7000000,0xf000000,0x62202020,0x7fa8a8a8,0x7ff0f0f0,0x7faeaeae,0x6b1b1b1b,0x3e000000,0x6e2b2b2b,0x7fb7b7b7,0x7ff6f6f6,0x7faeaeae,0x5b101010,0x16000000, + 0x1000000,0x55171717,0x7f9a9a9a,0x7fe8e8e8,0x7fb9b9b9,0x7a2b2b2b,0x59171717,0x21000000,0x27000000,0x6d2d2d2d,0x7fbababa,0x7ff7f7f7,0x7faaaaaa,0x4c050505, + 0x3000000,0x5b161616,0x7fb6b6b6,0x7fbcbcbc,0x68202020,0x29000000,0x22000000,0x1c000000,0x18000000,0x1d000000,0x6b2e2e2e,0x7fc4c4c4,0x7fc1c1c1,0x53030303, + 0x0,0x601d1d1d,0x7f898989,0x662d2d2d,0x25030303,0x1d000000,0x17000000,0x11000000,0xe000000,0xf000000,0x18000000,0x693b3b3b,0x7f8d8d8d,0x57131313, + 0x2000000,0x32141414,0x4b101010,0x1c101010,0x15000000,0x12000000,0xd000000,0x7000000,0x5000000,0x7000000,0x9000000,0x16000000,0x4c121212,0x32121212 }; static const QRgb datebook_icon_data[] = { 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0, 0xff000000,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff00008b,0xff0000ff,0xff00008b,0xff0000ff,0xff00008b,0xff0000ff,0xff000000,0xff000000, 0xff000000,0xff0000ff,0xff0000ff,0xff00008b,0xff0000ff,0xff00008b,0xff0000ff,0xff00008b,0xff0000ff,0xff00008b,0xff00008b,0xff00008b,0xff000000,0xff000000, 0xff000000,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffa0a0a0,0xff000000, 0xff000000,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffa0a0a0,0xff000000, 0xff000000,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffa0a0a0,0xff000000, 0xff000000,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffa0a0a0,0xff000000, 0xff000000,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffa0a0a0,0xff000000, 0xff000000,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffa0a0a0,0xff000000, 0xff000000,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffa0a0a0,0xff000000, 0xff000000,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffa0a0a0,0xff000000, 0xff000000,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffa0a0a0,0xff000000, 0x0,0xff000000,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xff000000, 0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000 }; static const QRgb day_data[] = { 0xe000000,0x18000000,0x23000000,0x2e000000,0x35000000,0x39000000,0x3b000000,0x3b000000,0x3b000000,0x39000000,0x35000000,0x2e000000,0x23000000,0x18000000, - 0x18000000,0xff686eaf,0xff595fa6,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff343b93,0xff070f75,0x3d000000,0x2a000000, - 0x24000000,0xff595fa6,0xff394095,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff07107a,0xff050c5a,0x5a000000,0x3e000000, - 0x2e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x74000000,0x50000000, - 0x35000000,0xffffffff,0xffffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffe0e0e0,0xffa1a1a1,0x86000000,0x5c000000, - 0x39000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffe0e0e0,0xffa1a1a1,0x90000000,0x63000000, - 0x3b000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffe0e0e0,0xffa1a1a1,0x95000000,0x66000000, - 0x3c000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffe0e0e0,0xffa1a1a1,0x96000000,0x67000000, - 0x3b000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffe0e0e0,0xffa1a1a1,0x95000000,0x66000000, - 0x39000000,0xffffffff,0xffffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffe0e0e0,0xffa1a1a1,0x90000000,0x63000000, - 0x35000000,0xffffffff,0xfffcfcfc,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffc8c8c8,0xff959595,0x86000000,0x5c000000, - 0x2e000000,0xfff3f3f3,0xffbababa,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xff959595,0xff868686,0x74000000,0x50000000, + 0x18000000,0xff7a7fbb,0xff6b71b3,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff454ca2,0xff0d1986,0x3d000000,0x2a000000, + 0x24000000,0xff6b71b3,0xff4a51a4,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff0d1a8b,0xff0a146c,0x5a000000,0x3e000000, + 0x2e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe5e5e5,0xffaeaeae,0x74000000,0x50000000, + 0x35000000,0xffffffff,0xffffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffe5e5e5,0xffaeaeae,0x86000000,0x5c000000, + 0x39000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffe5e5e5,0xffaeaeae,0x90000000,0x63000000, + 0x3b000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffe5e5e5,0xffaeaeae,0x95000000,0x66000000, + 0x3c000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffe5e5e5,0xffaeaeae,0x96000000,0x67000000, + 0x3b000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffe5e5e5,0xffaeaeae,0x95000000,0x66000000, + 0x39000000,0xffffffff,0xffffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffe5e5e5,0xffaeaeae,0x90000000,0x63000000, + 0x35000000,0xffffffff,0xfffdfdfd,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffd1d1d1,0xffa4a4a4,0x86000000,0x5c000000, + 0x2e000000,0xfff5f5f5,0xffc4c4c4,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffa4a4a4,0xff969696,0x74000000,0x50000000, 0x24000000,0x3e000000,0x5a000000,0x74000000,0x86000000,0x90000000,0x95000000,0x96000000,0x95000000,0x90000000,0x86000000,0x74000000,0x5a000000,0x3e000000, 0x18000000,0x2a000000,0x3d000000,0x4f000000,0x5c000000,0x63000000,0x66000000,0x67000000,0x66000000,0x63000000,0x5c000000,0x4f000000,0x3d000000,0x2a000000 }; static const QRgb done_data[] = { - 0xffffff,0xffffff,0xffffff,0x665b925b,0xba4d794d,0xeb395e39,0xfd2c4c2c,0xeb2e592e,0xba326f32,0x662f802f,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0x1b64aa64,0x9d609a60,0xfd588a58,0xff538753,0xff4d864d,0xff458445,0xff3b7f3b,0xff307930,0xfd267626,0xa1278227,0x2b6aac6a,0xffffff,0xffffff, - 0xffffff,0x9d5a975a,0xff5a935a,0xff5f9e5f,0xff5ba65b,0xff53a953,0xff4aa74a,0xff3ea03e,0xff2f942f,0xff2d892d,0xff889888,0xd27da47d,0xffffff,0xffffff, - 0x664a8b4a,0xfd4c864c,0xff579b57,0xff5aad5a,0xff50b350,0xff42b042,0xff37ac37,0xff2fa82f,0xff37a637,0xffacbeac,0xffaeaeae,0xff989a98,0x9471a171,0xffffff, - 0xba397139,0xff407f40,0xff51a251,0xff50b150,0xff38ae38,0xff26a726,0xff1ca41c,0xff31a931,0xffc0d2c0,0xffd3d3d3,0xffbcbcbc,0xff9c9c9c,0xc7468146,0xffffff, - 0xeb255625,0xff337b33,0xff90b690,0xffb2cdb2,0xff2aa92a,0xff109f10,0xff28a628,0xffc4d5c4,0xffdcdcdc,0xffd8d8d8,0xffc5c5c5,0xff518051,0xe3005200,0xffffff, - 0xfd1a451a,0xff6b8a6b,0xffc6c6c6,0xffd9d9d9,0xffaeceae,0xff34a934,0xffc7d6c7,0xffdcdcdc,0xffdcdcdc,0xffd9d9d9,0xff649e64,0xff005800,0xfc004a00,0xffffff, - 0xec165016,0xff778c77,0xffc3c3c3,0xffd8d8d8,0xffdcdcdc,0xffd8dbd8,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff6cab6c,0xff006800,0xff004f00,0xe3004600,0xffffff, - 0xba095e09,0xff0b690b,0xff91ae91,0xffd3d3d3,0xffdadada,0xffdbdbdb,0xffdcdcdc,0xffdbdbdb,0xff6dac6d,0xff006e00,0xff005900,0xff004600,0xaf004600,0xffffff, - 0x66006c00,0xfd006200,0xff097209,0xff99b599,0xffd3d3d3,0xffd7d7d7,0xffd9d9d9,0xff6ba66b,0xff006900,0xff005a00,0xff004a00,0xfd003f00,0x60004900,0xffffff, - 0xffffff,0x9d006700,0xff005e00,0xff096609,0xff89a489,0xff88a788,0xff649664,0xff005d00,0xff005300,0xff004700,0xff003f00,0x9c004300,0xffffff,0xffffff, - 0xffffff,0x1b006f00,0x9c005e00,0xfd005000,0xff004d00,0xff004c00,0xff004800,0xff004300,0xff003d00,0xfd003900,0x9c004000,0x1b004d00,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0x60005700,0xaf004b00,0xe2004000,0xfc003900,0xe2003900,0xaf003b00,0x60004200,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0x666da16d,0xba5f8a5f,0xeb4a704a,0xfd3c5e3c,0xeb3e6b3e,0xba428042,0x663f903f,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0x1b76b676,0x9d72a872,0xfd6a9a6a,0xff659765,0xff5f965f,0xff579457,0xff4c8f4c,0xff408a40,0xfd358735,0xa1369236,0x2b7bb87b,0xffffff,0xffffff, + 0xffffff,0x9d6ca56c,0xff6ca26c,0xff71ac71,0xff6db36d,0xff65b665,0xff5cb45c,0xff4fad4f,0xff3fa33f,0xff3d993d,0xff98a698,0xd28db18d,0xffffff,0xffffff, + 0x665c9a5c,0xfd5e965e,0xff69a969,0xff6cb96c,0xff62be62,0xff53bc53,0xff48b848,0xff3fb53f,0xff48b348,0xffb8c8b8,0xffbababa,0xffa6a8a6,0x9482ae82,0xffffff, + 0xba4a824a,0xff518f51,0xff63af63,0xff62bd62,0xff49ba49,0xff35b435,0xff29b129,0xff41b641,0xffcad9ca,0xffdadada,0xffc6c6c6,0xffaaaaaa,0xc7589158,0xffffff, + 0xeb346834,0xff438c43,0xff9fc19f,0xffbdd5bd,0xff39b639,0xff1aad1a,0xff37b337,0xffcddccd,0xffe2e2e2,0xffdedede,0xffcecece,0xff639063,0xe3006400,0xffffff, + 0xfd275727,0xff7c9a7c,0xffcfcfcf,0xffdfdfdf,0xffbad6ba,0xff45b645,0xffd0ddd0,0xffe2e2e2,0xffe2e2e2,0xffdfdfdf,0xff76ac76,0xff006a00,0xfc005c00,0xffffff, + 0xec226222,0xff889b88,0xffcccccc,0xffdedede,0xffe2e2e2,0xffdee1de,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xff7db77d,0xff007a00,0xff006100,0xe3005800,0xffffff, + 0xba107010,0xff137a13,0xffa0baa0,0xffdadada,0xffe0e0e0,0xffe1e1e1,0xffe2e2e2,0xffe1e1e1,0xff7eb87e,0xff007f00,0xff006b00,0xff005800,0xaf005800,0xffffff, + 0x66007d00,0xfd007400,0xff108310,0xffa7c0a7,0xffdadada,0xffdddddd,0xffdfdfdf,0xff7cb37c,0xff007a00,0xff006c00,0xff005c00,0xfd005000,0x60005b00,0xffffff, + 0xffffff,0x9d007900,0xff007000,0xff107810,0xff99b199,0xff98b498,0xff76a476,0xff006f00,0xff006500,0xff005900,0xff005000,0x9c005400,0xffffff,0xffffff, + 0xffffff,0x1b008000,0x9c007000,0xfd006200,0xff005f00,0xff005e00,0xff005a00,0xff005400,0xff004e00,0xfd004a00,0x9c005100,0x1b005f00,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0x60006900,0xaf005d00,0xe2005100,0xfc004a00,0xe2004a00,0xaf004c00,0x60005300,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff }; -static const QRgb down_data[] = { - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xfff3f3f3,0xff000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffdbdbdb,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xffe5e5e5,0xff000000,0xff000000,0xff000000,0xff000000,0x24000000,0xc000000, - 0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff8f8f8,0xfff7f7f7,0xfff2f2f2,0xffe5e5e5,0xff000000,0x6b000000,0x24000000, - 0xffffff,0x8d4e5455,0xfd151617,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffececec,0xffd1d1d1,0xffbfbfbf,0xfe151717,0xce2b2e2f,0x7b000000,0x26000000, - 0xffffff,0x13000000,0x9f454b4c,0xfe151718,0xfff2f2f2,0xfff5f5f5,0xffeaeaea,0xffc9c9c9,0xffbfbfbf,0xfe151717,0xcd2c2f2f,0x86000000,0x45000000,0x10000000, - 0xffffff,0x3000000,0x18000000,0xa0454a4b,0xfe151718,0xffe9e9e9,0xffcecece,0xffbfbfbf,0xfe151717,0xcd2c2f2f,0x85000000,0x45000000,0x14000000,0x2000000, - 0xffffff,0xffffff,0x3000000,0x18000000,0xa0454a4b,0xfe151718,0xffc8c8c8,0xfe151717,0xcd2c2f2f,0x85000000,0x45000000,0x14000000,0x2000000,0xffffff, - 0xffffff,0xffffff,0xffffff,0x3000000,0x18000000,0xa0454a4b,0xef35393a,0xc12e3132,0x82000000,0x45000000,0x14000000,0x2000000,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0x3000000,0x18000000,0x41000000,0x57000000,0x3d000000,0x14000000,0x2000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x3000000,0xe000000,0x15000000,0xd000000,0x2000000,0xffffff,0xffffff,0xffffff,0xffffff -}; - static const QRgb edit_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3000000,0x36000000,0xff000000,0xff000000,0xff000000,0x2c000000,0x18000000,0x8000000,0x1000000, - 0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3f000000,0xff000000,0xff772121,0xffef3434,0xffff0606,0xff000000,0x40000000,0x19000000,0x5000000, - 0xffffff,0xffffff,0xffffff,0x1000000,0x5000000,0x8f000000,0xff000000,0xff000000,0xff1f0000,0xff610000,0xff000000,0x68000000,0x2c000000,0xa000000, - 0xffffff,0xffffff,0xffffff,0x1000000,0x14000000,0xff000000,0xfff8f898,0xffffff83,0xff000000,0xff000000,0xff000000,0x79000000,0x36000000,0xd000000, - 0xffffff,0xffffff,0xffffff,0x4000000,0x78000000,0xff000000,0xffffff95,0xffffff71,0xffd1d154,0xff000000,0xbe000000,0x71000000,0x31000000,0xb000000, - 0xffffff,0xffffff,0x1000000,0xd000000,0xff000000,0xffdddd84,0xffffff81,0xffd4d455,0xff888837,0xff000000,0x92000000,0x58000000,0x21000000,0x7000000, - 0xffffff,0xffffff,0x4000000,0x62000000,0xff000000,0xffffff90,0xffffff66,0xffa7a743,0xff000000,0xc4000000,0x79000000,0x3c000000,0x12000000,0x3000000, - 0xffffff,0x1000000,0x7000000,0xff000000,0xffb5b560,0xffffff6e,0xffbaba4a,0xff70702d,0xff000000,0x95000000,0x5b000000,0x24000000,0x8000000,0x1000000, - 0xffffff,0x1000000,0x35000000,0xff000000,0xffe2e25b,0xffaaaa44,0xff818134,0xff000000,0xc9000000,0x7b000000,0x3d000000,0x13000000,0x4000000,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3f000000,0xff000000,0xff882f2f,0xfff24545,0xffff0c0c,0xff000000,0x40000000,0x19000000,0x5000000, + 0xffffff,0xffffff,0xffffff,0x1000000,0x5000000,0x8f000000,0xff000000,0xff000000,0xff2d0000,0xff730000,0xff000000,0x68000000,0x2c000000,0xa000000, + 0xffffff,0xffffff,0xffffff,0x1000000,0x14000000,0xff000000,0xfff9f9a6,0xffffff93,0xff000000,0xff000000,0xff000000,0x79000000,0x36000000,0xd000000, + 0xffffff,0xffffff,0xffffff,0x4000000,0x78000000,0xff000000,0xffffffa4,0xffffff82,0xffd8d866,0xff000000,0xbe000000,0x71000000,0x31000000,0xb000000, + 0xffffff,0xffffff,0x1000000,0xd000000,0xff000000,0xffe3e394,0xffffff91,0xffdbdb67,0xff989848,0xff000000,0x92000000,0x58000000,0x21000000,0x7000000, + 0xffffff,0xffffff,0x4000000,0x62000000,0xff000000,0xffffff9f,0xffffff78,0xffb4b454,0xff000000,0xc4000000,0x79000000,0x3c000000,0x12000000,0x3000000, + 0xffffff,0x1000000,0x7000000,0xff000000,0xffc0c072,0xffffff7f,0xffc4c45c,0xff81813d,0xff000000,0x95000000,0x5b000000,0x24000000,0x8000000,0x1000000, + 0xffffff,0x1000000,0x35000000,0xff000000,0xffe7e76d,0xffb6b656,0xff919145,0xff000000,0xc9000000,0x7b000000,0x3d000000,0x13000000,0x4000000,0xffffff, 0xffffff,0x2000000,0x11000000,0xff000000,0xff000000,0xff000000,0xff000000,0xfe000000,0xa0000000,0x5c000000,0x26000000,0xa000000,0x1000000,0xffffff, 0xffffff,0x2000000,0x11000000,0xff000000,0xff000000,0xff000000,0xed000000,0xa6000000,0x73000000,0x3d000000,0x16000000,0x4000000,0x1000000,0xffffff, 0x1000000,0x6000000,0x17000000,0xff000000,0xff000000,0xdc000000,0xa0000000,0x7b000000,0x4d000000,0x25000000,0xf000000,0x7000000,0x6000000,0x3000000, 0x4000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x3d000000,0xff000000,0x19000000,0xff000000,0x14000000,0xb000000, 0x6000000,0x17000000,0x37000000,0x67000000,0x70000000,0x78000000,0x6d000000,0x56000000,0x3d000000,0x2a000000,0x25000000,0x22000000,0x20000000,0x11000000 }; static const QRgb editdelete_data[] = { - 0x0,0x261818,0x8d5858,0xdd000000,0x0,0x5000000,0x0,0x0,0x0,0x0,0xde000000,0x663a3a,0x5000000,0x1000000, - 0x0,0x261818,0x8e201313,0xdf764747,0x90000000,0x0,0x4000000,0x0,0x0,0x8b000000,0xdf795353,0x93150d0d,0x4000000,0xa000000, - 0x0,0x8f261818,0xff8b5f5f,0xf7e08383,0xf37e3f3f,0xa2000000,0x1000000,0x0,0x98000000,0xec946c6c,0xf6e79696,0xff824141,0xaa000000,0x18100808, - 0xdc000000,0xdf764848,0xf6e08383,0xffd37171,0xf7cf6767,0xf8783c3c,0x8b020101,0x8a040303,0xed946c6c,0xf4e89b9b,0xffca6969,0xfa944a4a,0xfc412121,0x88020101, - 0x1000000,0x90000000,0xf37f3f3f,0xf8cf6868,0xffcd6666,0xf6d46c6c,0xf1683838,0xea795757,0xf1e99a9a,0xffca6969,0xfb8a4444,0xfb3d1e1e,0xbe000000,0x2e000000, - 0x3000000,0x0,0xa2000000,0xf9763b3b,0xf6d46d6d,0xffcd6969,0xfdd77878,0xfedb8383,0xffc76868,0xf98f4646,0xfb3b1d1d,0xc5000000,0x48000000,0x22000000, - 0x0,0x4000000,0x1000000,0x8a000000,0xf2683737,0xfcd77777,0xffd06c6c,0xffce6666,0xfdab5555,0xf6361b1b,0xb8000000,0x4e000000,0x29000000,0xb000000, - 0x0,0x0,0x0,0x88000000,0xea785858,0xfcdb8282,0xffce6767,0xffc86363,0xfdb95c5c,0xf5572c2c,0xb6000000,0x27000000,0x11000000,0x1000000, - 0x0,0x0,0x95000000,0xed926b6b,0xf2ea9b9b,0xffc86868,0xfeab5454,0xfeb95c5c,0xffc86464,0xf8c66363,0xf5723939,0xa8000000,0x2000000,0x4000000, - 0x0,0x8e000000,0xec956c6c,0xf4e89b9b,0xffca6969,0xf98f4646,0xf6361b1b,0xf6572c2c,0xf9c76363,0xffd06868,0xf9ca6565,0xf6713939,0xa2000000,0x2000000, - 0xdc000000,0xd7785050,0xf3e79595,0xffca6969,0xfa8a4444,0xfa3c1e1e,0xb8000000,0xb6020101,0xf6743a3a,0xf9ca6565,0xffbd5e5e,0xf8a15151,0xf64e2727,0x81000000, - 0x0,0x8d000000,0xff884444,0xfa964a4a,0xfa3d1f1f,0xc5000000,0x4e000000,0x28000000,0xa8000000,0xf6713838,0xf9a25050,0xff542929,0xbc000000,0x29000000, - 0x2000000,0x0,0xa5000000,0xf6412121,0xbc000000,0x46000000,0x29000000,0x10000000,0x2000000,0xa3000000,0xf74b2525,0xbc000000,0x4c000000,0x2a000000, + 0x0,0x352424,0x9c6a6a,0xdd000000,0x0,0x5000000,0x0,0x0,0x0,0x0,0xde000000,0x784b4b,0x5000000,0x1000000, + 0x0,0x352424,0x8e2e1e1e,0xdf875959,0x90000000,0x0,0x4000000,0x0,0x0,0x8b000000,0xdf8a6565,0x93201616,0x4000000,0xa000000, + 0x0,0x8f352424,0xff9a7171,0xf7e59393,0xf38e5050,0xa2000000,0x1000000,0x0,0x98000000,0xeca37d7d,0xf6eba4a4,0xff925252,0xaa000000,0x181a0f0f, + 0xdc000000,0xdf875a5a,0xf6e59393,0xffda8282,0xf7d77979,0xf8894d4d,0x8b050303,0x8a080606,0xeda37d7d,0xf4eca9a9,0xffd27a7a,0xfaa35c5c,0xfc522f2f,0x88050303, + 0x1000000,0x90000000,0xf38f5050,0xf8d77a7a,0xffd57878,0xf6db7d7d,0xf17a4949,0xea8a6969,0xf1eda8a8,0xffd27a7a,0xfb9a5656,0xfb4e2b2b,0xbe000000,0x2e000000, + 0x3000000,0x0,0xa2000000,0xf9874c4c,0xf6db7e7e,0xffd57a7a,0xfddd8989,0xfee19393,0xffd07a7a,0xf99e5858,0xfb4c2a2a,0xc5000000,0x48000000,0x22000000, + 0x0,0x4000000,0x1000000,0x8a000000,0xf27a4848,0xfcdd8888,0xffd77d7d,0xffd67878,0xfdb76767,0xf6472828,0xb8000000,0x4e000000,0x29000000,0xb000000, + 0x0,0x0,0x0,0x88000000,0xea896a6a,0xfce19292,0xffd67979,0xffd17575,0xfdc46e6e,0xf5693c3c,0xb6000000,0x27000000,0x11000000,0x1000000, + 0x0,0x0,0x95000000,0xeda17c7c,0xf2eea9a9,0xffd17a7a,0xfeb76666,0xfec46e6e,0xffd17676,0xf8cf7575,0xf5834a4a,0xa8000000,0x2000000,0x4000000, + 0x0,0x8e000000,0xeca47d7d,0xf4eca9a9,0xffd27a7a,0xf99e5858,0xf6472828,0xf6693c3c,0xf9d07575,0xffd77a7a,0xf9d27777,0xf6824a4a,0xa2000000,0x2000000, + 0xdc000000,0xd7896262,0xf3eba4a4,0xffd27a7a,0xfa9a5656,0xfa4d2b2b,0xb8000000,0xb6050303,0xf6854b4b,0xf9d27777,0xffc77070,0xf8ae6363,0xf6603636,0x81000000, + 0x0,0x8d000000,0xff985656,0xfaa45c5c,0xfa4e2d2d,0xc5000000,0x4e000000,0x28000000,0xa8000000,0xf6824949,0xf9af6262,0xff663838,0xbc000000,0x29000000, + 0x2000000,0x0,0xa5000000,0xf6522f2f,0xbc000000,0x46000000,0x29000000,0x10000000,0x2000000,0xa3000000,0xf75d3434,0xbc000000,0x4c000000,0x2a000000, 0x1000000,0x7000000,0xb000000,0x84000000,0x28000000,0x21000000,0xb000000,0x0,0x3000000,0x3000000,0x81000000,0x29000000,0x29000000,0x11000000 }; static const QRgb enter_data[] = { - 0xffffff,0xffffff,0xffffff,0x665b925b,0xba4d794d,0xeb395e39,0xfd2c4c2c,0xeb2e592e,0xba326f32,0x662f802f,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0x1b64aa64,0x9d609a60,0xfd588a58,0xff538753,0xff4d864d,0xff458445,0xff3b7f3b,0xff307930,0xfd267626,0xa1278227,0x2b6aac6a,0xffffff,0xffffff, - 0xffffff,0x9d5a975a,0xff5a935a,0xff5f9e5f,0xff5ba65b,0xff53a953,0xff4aa74a,0xff3ea03e,0xff2f942f,0xff2d892d,0xff889888,0xd27da47d,0xffffff,0xffffff, - 0x664a8b4a,0xfd4c864c,0xff579b57,0xff5aad5a,0xff50b350,0xff42b042,0xff37ac37,0xff2fa82f,0xff37a637,0xffacbeac,0xffaeaeae,0xff989a98,0x9471a171,0xffffff, - 0xba397139,0xff407f40,0xff51a251,0xff50b150,0xff38ae38,0xff26a726,0xff1ca41c,0xff31a931,0xffc0d2c0,0xffd3d3d3,0xffbcbcbc,0xff9c9c9c,0xc7468146,0xffffff, - 0xeb255625,0xff337b33,0xff90b690,0xffb2cdb2,0xff2aa92a,0xff109f10,0xff28a628,0xffc4d5c4,0xffdcdcdc,0xffd8d8d8,0xffc5c5c5,0xff518051,0xe3005200,0xffffff, - 0xfd1a451a,0xff6b8a6b,0xffc6c6c6,0xffd9d9d9,0xffaeceae,0xff34a934,0xffc7d6c7,0xffdcdcdc,0xffdcdcdc,0xffd9d9d9,0xff649e64,0xff005800,0xfc004a00,0xffffff, - 0xec165016,0xff778c77,0xffc3c3c3,0xffd8d8d8,0xffdcdcdc,0xffd8dbd8,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff6cab6c,0xff006800,0xff004f00,0xe3004600,0xffffff, - 0xba095e09,0xff0b690b,0xff91ae91,0xffd3d3d3,0xffdadada,0xffdbdbdb,0xffdcdcdc,0xffdbdbdb,0xff6dac6d,0xff006e00,0xff005900,0xff004600,0xaf004600,0xffffff, - 0x66006c00,0xfd006200,0xff097209,0xff99b599,0xffd3d3d3,0xffd7d7d7,0xffd9d9d9,0xff6ba66b,0xff006900,0xff005a00,0xff004a00,0xfd003f00,0x60004900,0xffffff, - 0xffffff,0x9d006700,0xff005e00,0xff096609,0xff89a489,0xff88a788,0xff649664,0xff005d00,0xff005300,0xff004700,0xff003f00,0x9c004300,0xffffff,0xffffff, - 0xffffff,0x1b006f00,0x9c005e00,0xfd005000,0xff004d00,0xff004c00,0xff004800,0xff004300,0xff003d00,0xfd003900,0x9c004000,0x1b004d00,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0x60005700,0xaf004b00,0xe2004000,0xfc003900,0xe2003900,0xaf003b00,0x60004200,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0x666da16d,0xba5f8a5f,0xeb4a704a,0xfd3c5e3c,0xeb3e6b3e,0xba428042,0x663f903f,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0x1b76b676,0x9d72a872,0xfd6a9a6a,0xff659765,0xff5f965f,0xff579457,0xff4c8f4c,0xff408a40,0xfd358735,0xa1369236,0x2b7bb87b,0xffffff,0xffffff, + 0xffffff,0x9d6ca56c,0xff6ca26c,0xff71ac71,0xff6db36d,0xff65b665,0xff5cb45c,0xff4fad4f,0xff3fa33f,0xff3d993d,0xff98a698,0xd28db18d,0xffffff,0xffffff, + 0x665c9a5c,0xfd5e965e,0xff69a969,0xff6cb96c,0xff62be62,0xff53bc53,0xff48b848,0xff3fb53f,0xff48b348,0xffb8c8b8,0xffbababa,0xffa6a8a6,0x9482ae82,0xffffff, + 0xba4a824a,0xff518f51,0xff63af63,0xff62bd62,0xff49ba49,0xff35b435,0xff29b129,0xff41b641,0xffcad9ca,0xffdadada,0xffc6c6c6,0xffaaaaaa,0xc7589158,0xffffff, + 0xeb346834,0xff438c43,0xff9fc19f,0xffbdd5bd,0xff39b639,0xff1aad1a,0xff37b337,0xffcddccd,0xffe2e2e2,0xffdedede,0xffcecece,0xff639063,0xe3006400,0xffffff, + 0xfd275727,0xff7c9a7c,0xffcfcfcf,0xffdfdfdf,0xffbad6ba,0xff45b645,0xffd0ddd0,0xffe2e2e2,0xffe2e2e2,0xffdfdfdf,0xff76ac76,0xff006a00,0xfc005c00,0xffffff, + 0xec226222,0xff889b88,0xffcccccc,0xffdedede,0xffe2e2e2,0xffdee1de,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xff7db77d,0xff007a00,0xff006100,0xe3005800,0xffffff, + 0xba107010,0xff137a13,0xffa0baa0,0xffdadada,0xffe0e0e0,0xffe1e1e1,0xffe2e2e2,0xffe1e1e1,0xff7eb87e,0xff007f00,0xff006b00,0xff005800,0xaf005800,0xffffff, + 0x66007d00,0xfd007400,0xff108310,0xffa7c0a7,0xffdadada,0xffdddddd,0xffdfdfdf,0xff7cb37c,0xff007a00,0xff006c00,0xff005c00,0xfd005000,0x60005b00,0xffffff, + 0xffffff,0x9d007900,0xff007000,0xff107810,0xff99b199,0xff98b498,0xff76a476,0xff006f00,0xff006500,0xff005900,0xff005000,0x9c005400,0xffffff,0xffffff, + 0xffffff,0x1b008000,0x9c007000,0xfd006200,0xff005f00,0xff005e00,0xff005a00,0xff005400,0xff004e00,0xfd004a00,0x9c005100,0x1b005f00,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0x60006900,0xaf005d00,0xe2005100,0xfc004a00,0xe2004a00,0xaf004c00,0x60005300,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff }; static const unsigned char exec_data[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x02,0x02,0x01,0x00,0x01, 0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x01,0x03,0x04,0x04,0x03, 0x01,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x03,0x02,0x05,0x03,0x06, 0x06,0x03,0x05,0x02,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x05,0x06, 0x06,0x07,0x06,0x07,0x06,0x05,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x02, 0x03,0x06,0x07,0x05,0x05,0x06,0x07,0x03,0x02,0x01,0x01,0x00,0x01,0x02, 0x04,0x03,0x06,0x07,0x06,0x03,0x03,0x07,0x08,0x06,0x03,0x04,0x02,0x01, 0x01,0x05,0x03,0x02,0x05,0x07,0x08,0x07,0x07,0x09,0x08,0x05,0x02,0x03, 0x05,0x01,0x00,0x01,0x0a,0x0a,0x02,0x05,0x07,0x08,0x09,0x07,0x05,0x02, 0x0a,0x0a,0x01,0x00,0x00,0x00,0x01,0x05,0x04,0x02,0x02,0x05,0x05,0x02, 0x02,0x04,0x05,0x01,0x00,0x00,0x00,0x01,0x03,0x09,0x05,0x0a,0x05,0x02, 0x02,0x05,0x0a,0x05,0x09,0x03,0x01,0x00,0x00,0x01,0x02,0x03,0x0a,0x01, 0x01,0x03,0x03,0x01,0x01,0x0a,0x03,0x02,0x01,0x00,0x00,0x00,0x01,0x01, 0x01,0x00,0x01,0x02,0x09,0x01,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x01,0x0a,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00 }; static const QRgb exec_ctable[] = { 0xc6c6c6,0xff000000,0xffdcdcdc,0xffa0a0a0,0xffc3c3c3,0xff808080,0xffffa858,0xffffdca8,0xffffffc0,0xffffffff,0xff585858 }; static const unsigned char faded_bg_data[] = { 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x08,0x0b,0x04,0x05, 0x03,0x07,0x08,0x0a,0x0c,0x0d,0x01,0x03,0x0e,0x0e,0x03,0x01,0x0a,0x0f, 0x10,0x0f,0x09,0x08,0x07,0x02,0x11,0x12,0x12,0x0b,0x13,0x0d,0x14,0x09, 0x08,0x02,0x03,0x03,0x07,0x08,0x0a,0x14,0x15,0x0a,0x01,0x03,0x04,0x04, 0x0b,0x08,0x14,0x0f,0x0f,0x0a,0x16,0x17,0x11,0x0b,0x02,0x02,0x02,0x17, 0x08,0x0a,0x14,0x0a,0x08,0x17,0x0b,0x07,0x18,0x0d,0x14,0x15,0x19,0x1a, 0x01,0x11,0x06,0x06,0x02,0x08,0x14,0x14,0x0d,0x01,0x0b,0x12,0x06,0x11, 0x07,0x07,0x07,0x1b,0x08,0x0a,0x0c,0x0a,0x08,0x17,0x07,0x1b,0x08,0x1a, 0x0a,0x0a,0x0d,0x08,0x1b,0x0b,0x03,0x03,0x07,0x08,0x0d,0x08,0x1b,0x03, 0x05,0x04,0x04,0x11,0x07,0x07,0x07,0x1b,0x08,0x1a,0x0d,0x08,0x13,0x17, 0x07,0x17,0x1b,0x01,0x13,0x13,0x13,0x01,0x17,0x02,0x11,0x11,0x02,0x1b, 0x13,0x17,0x03,0x1c,0x1d,0x1d,0x03,0x0b,0x17,0x17,0x17,0x1b,0x13,0x08, 0x08,0x13,0x17,0x0b,0x11,0x03,0x03,0x12,0x11,0x0b,0x02,0x02,0x07,0x02, 0x02,0x0b,0x02,0x07,0x17,0x0b,0x04,0x1d,0x1d,0x0e,0x02,0x01,0x18,0x18, 0x13,0x01,0x1b,0x1b,0x1b,0x17,0x0b,0x03,0x04,0x0e,0x0e,0x0e,0x05,0x04, 0x03,0x03,0x0b,0x02,0x02,0x02,0x02,0x07,0x07,0x02,0x03,0x04,0x1e,0x12, 0x08,0x1a,0x0d,0x0d,0x08,0x13,0x1b,0x17,0x17,0x02,0x12,0x04,0x1d,0x1f, 0x1d,0x1d,0x0e,0x04,0x03,0x03,0x0b,0x02,0x07,0x07,0x07,0x17,0x1b,0x17, @@ -3888,360 +3948,360 @@ static const unsigned char faded_bg_data[] = { 0x0a,0x0d,0x13,0x11,0x0e,0x1f,0x1c,0x1e,0x23,0x0d,0x0c,0x0d,0x13,0x12, 0x21,0x0e,0x03,0x01,0x0a,0x0f,0x0f,0x15,0x0d,0x13,0x17,0x02,0x03,0x06, 0x06,0x24,0x1b,0x1a,0x0c,0x0a,0x18,0x11,0x04,0x0e,0x03,0x07,0x0a,0x0c, 0x14,0x0a,0x13,0x0b,0x04,0x04,0x0b,0x08,0x14,0x0f,0x14,0x1a,0x1b,0x02, 0x0b,0x0b,0x0b,0x0b,0x0b,0x07,0x08,0x0a,0x14,0x0a,0x18,0x0b,0x03,0x03, 0x07,0x08,0x0c,0x14,0x14,0x0d,0x13,0x02,0x03,0x03,0x02,0x08,0x09,0x09, 0x08,0x17,0x03,0x03,0x03,0x0b,0x07,0x07,0x07,0x1b,0x08,0x0a,0x14,0x0a, 0x18,0x07,0x0b,0x07,0x18,0x0d,0x0a,0x0a,0x0a,0x08,0x13,0x02,0x03,0x03, 0x02,0x13,0x08,0x08,0x07,0x1e,0x1c,0x1c,0x06,0x11,0x07,0x07,0x17,0x01, 0x08,0x0a,0x09,0x0d,0x13,0x07,0x07,0x01,0x08,0x0d,0x08,0x08,0x16,0x13, 0x1b,0x07,0x0b,0x11,0x02,0x17,0x1b,0x07,0x03,0x1d,0x1f,0x1d,0x06,0x0b, 0x07,0x17,0x17,0x1b,0x16,0x22,0x1a,0x08,0x01,0x17,0x17,0x1b,0x01,0x18, 0x0b,0x02,0x02,0x07,0x07,0x07,0x02,0x02,0x02,0x07,0x07,0x0b,0x06,0x1c, 0x1d,0x05,0x03,0x07,0x1b,0x01,0x1b,0x1b,0x01,0x13,0x13,0x1b,0x07,0x0b, 0x0b,0x11,0x11,0x0b,0x04,0x06,0x03,0x11,0x0b,0x02,0x07,0x07,0x07,0x17, 0x17,0x07,0x0b,0x03,0x12,0x02,0x1b,0x16,0x08,0x08,0x08,0x01,0x1b,0x17, 0x17,0x02,0x12,0x06,0x05,0x21,0x21,0x21,0x1c,0x04,0x06,0x03,0x0b,0x02, 0x07,0x07,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x13,0x08,0x1a,0x0a,0x0a,0x0a, 0x22,0x13,0x17,0x07,0x11,0x06,0x21,0x1d,0x1f,0x1f,0x1d,0x1d,0x03,0x11, 0x02,0x02,0x02,0x02,0x07,0x07,0x17,0x17,0x1b,0x13,0x08,0x08,0x0d,0x0a, 0x19,0x14,0x14,0x0c,0x1a,0x13,0x17,0x11,0x1e,0x1d,0x25,0x26,0x25,0x1d, 0x0e,0x04,0x17,0x13,0x08,0x13,0x17,0x07,0x07,0x17,0x17,0x17,0x1b,0x01, 0x08,0x08,0x0d,0x0a,0x0a,0x0a,0x0a,0x0d,0x08,0x1b,0x0b,0x06,0x1d,0x26, 0x26,0x1f,0x0e,0x04,0x03,0x0b,0x0d,0x19,0x0c,0x1a,0x13,0x17,0x17,0x1b, 0x1b,0x1b,0x17,0x17,0x1b,0x1b,0x13,0x13,0x08,0x08,0x08,0x13,0x01,0x07, 0x03,0x0e,0x27,0x26,0x1d,0x21,0x03,0x0b,0x20,0x08,0x0f,0x0f,0x14,0x08, 0x17,0x0b,0x02,0x1b,0x01,0x01,0x17,0x07,0x0b,0x0b,0x11,0x11,0x0b,0x02, 0x07,0x17,0x07,0x0b,0x04,0x1d,0x26,0x1f,0x04,0x12,0x07,0x01,0x08,0x09, 0x10,0x0f,0x0d,0x1b,0x03,0x06,0x11,0x17,0x16,0x13,0x1b,0x0b,0x03,0x04, 0x21,0x21,0x04,0x03,0x02,0x17,0x07,0x03,0x0e,0x25,0x1f,0x0e,0x03,0x07, 0x01,0x08,0x0c,0x0f,0x0f,0x0a,0x01,0x03,0x1c,0x1d,0x03,0x17,0x08,0x08, 0x1b,0x0b,0x04,0x1d,0x1d,0x1d,0x04,0x12,0x17,0x1b,0x07,0x03,0x1d,0x25, 0x1d,0x06,0x02,0x01,0x08,0x09,0x0f,0x10,0x0a,0x13,0x11,0x0e,0x1f,0x1d, 0x03,0x1b,0x1a,0x1a,0x13,0x0b,0x21,0x1d,0x1d,0x0e,0x03,0x17,0x08,0x08, 0x20,0x03,0x1d,0x1d,0x05,0x12,0x1b,0x08,0x0c,0x0f,0x10,0x15,0x08,0x17, 0x03,0x1c,0x1d,0x0e,0x0b,0x18,0x0a,0x0d,0x18,0x0b,0x21,0x1d,0x21,0x03, 0x17,0x08,0x0d,0x1a,0x1b,0x03,0x1c,0x1d,0x06,0x07,0x08,0x09,0x0f,0x10, 0x15,0x0a }; static const QRgb faded_bg_ctable[] = { 0xc6c6c6,0xffb5c5c1,0xffb6c7c3,0xffb7c9c4,0xffb8cac5,0xffb8cac6,0xffb7c9c5,0xffb6c7c2,0xffb3c4c0,0xffb2c2be,0xffb3c2be,0xffb6c8c3,0xffb2c1be,0xffb3c3be, 0xffb8cbc7,0xffb1c0bc,0xffb1bfbc,0xffb6c8c4,0xffb6c9c4,0xffb4c5c1,0xffb1c1bd,0xffb1c1bc,0xffb3c4c1,0xffb5c7c2,0xffb4c4c1,0xffb1c1be,0xffb3c3bf,0xffb5c6c1, 0xffb9cbc7,0xffb9ccc7,0xffb7cac5,0xffb9ccc8,0xffb5c6c2,0xffb8cbc6,0xffb3c4bf,0xffb3c5c1,0xffb7c8c4,0xffb9cdc8,0xffbacdc9,0xffbacdc8 }; static const QRgb fastback_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xff000000,0xffffff,0xffffff,0xffffff,0xffffff,0x7a5a6163,0xff000000,0xff000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0xff000000,0xffffff,0xffffff,0xffffff,0x7a5a6163,0xfc151717,0xffffffff,0xff000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0xff000000,0xffffff,0xffffff,0x7a5a6163,0xfc151717,0xffffffff,0xfffbfbfb,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0xff000000,0xffffff,0x7a5a6163,0xfc151717,0xffffffff,0xffffffff,0xfff7f7f7,0xff000000,0xff000000,0xff000000,0xff000000,0x24000000,0xc000000, - 0xffffff,0xff000000,0x7a5a6163,0xfc151717,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xffffffff,0xffffffff,0xfff3f3f3,0xff000000,0x6b000000,0x24000000, - 0xffffff,0xff000000,0xe0383d3e,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff4f4f4,0xfff4f4f4,0xffeaeaea,0xffcbcbcb,0xff000000,0x8f000000,0x30000000, - 0xffffff,0xff000000,0x69545a5b,0xfd151717,0xfffbfbfb,0xfffbfbfb,0xfff2f2f2,0xffd6d6d6,0xffc3c3c3,0xffbfbfbf,0xffbfbfbf,0xff000000,0x8f000000,0x30000000, - 0xffffff,0xff000000,0xd000000,0x8344494a,0xfd151617,0xfff2f2f2,0xffe9e9e9,0xffc3c3c3,0xff000000,0xff000000,0xff000000,0xff000000,0x8f000000,0x30000000, - 0xffffff,0xff000000,0x2000000,0x14000000,0x88414648,0xfe151718,0xffe4e4e4,0xffc2c2c2,0xff000000,0xb3000000,0x9b000000,0x8f000000,0x6b000000,0x24000000, - 0xffffff,0xff000000,0xffffff,0x2000000,0x14000000,0x88414648,0xfe151718,0xffcbcbcb,0xff000000,0x9b000000,0x54000000,0x30000000,0x24000000,0xc000000, - 0xffffff,0xff000000,0xffffff,0xffffff,0x2000000,0x14000000,0x88414648,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff, + 0xffffff,0xff000000,0xffffff,0xffffff,0xffffff,0xffffff,0x7a6c7375,0xff000000,0xff000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff, + 0xffffff,0xff000000,0xffffff,0xffffff,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xff000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff, + 0xffffff,0xff000000,0xffffff,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xfffcfcfc,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff, + 0xffffff,0xff000000,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xffffffff,0xfff8f8f8,0xff000000,0xff000000,0xff000000,0xff000000,0x24000000,0xc000000, + 0xffffff,0xff000000,0x7a6c7375,0xfc202323,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xffffffff,0xffffffff,0xfff5f5f5,0xff000000,0x6b000000,0x24000000, + 0xffffff,0xff000000,0xe0494e4f,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff6f6f6,0xfff6f6f6,0xffeeeeee,0xffd3d3d3,0xff000000,0x8f000000,0x30000000, + 0xffffff,0xff000000,0x69666c6d,0xfd202323,0xfffcfcfc,0xfffcfcfc,0xfff4f4f4,0xffdddddd,0xffcccccc,0xffc9c9c9,0xffc9c9c9,0xff000000,0x8f000000,0x30000000, + 0xffffff,0xff000000,0xd000000,0x83565b5c,0xfd202223,0xfff4f4f4,0xffededed,0xffcccccc,0xff000000,0xff000000,0xff000000,0xff000000,0x8f000000,0x30000000, + 0xffffff,0xff000000,0x2000000,0x14000000,0x8852585a,0xfe202324,0xffe8e8e8,0xffcbcbcb,0xff000000,0xb3000000,0x9b000000,0x8f000000,0x6b000000,0x24000000, + 0xffffff,0xff000000,0xffffff,0x2000000,0x14000000,0x8852585a,0xfe202324,0xffd3d3d3,0xff000000,0x9b000000,0x54000000,0x30000000,0x24000000,0xc000000, + 0xffffff,0xff000000,0xffffff,0xffffff,0x2000000,0x14000000,0x8852585a,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x2000000,0x14000000,0x45000000,0x7b000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x2000000,0x10000000,0x26000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff }; static const QRgb fastforward_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x8d4e5455,0x13000000,0x3000000,0xffffff,0xffffff,0xff000000,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xfd151617,0x9f454b4c,0x18000000,0x3000000,0xffffff,0xff000000,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xfe151718,0xa0454a4b,0x18000000,0x3000000,0xff000000,0xffffff,0xffffff, - 0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xfff2f2f2,0xfe151718,0xa0454a4b,0x18000000,0xff000000,0xffffff,0xffffff, - 0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff5f5f5,0xffe9e9e9,0xfe151718,0xa0454a4b,0xff000000,0x3000000,0xffffff, - 0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffeaeaea,0xffcecece,0xffc8c8c8,0xef35393a,0xff000000,0xe000000,0xffffff, - 0xffffff,0xff000000,0xfff3f3f3,0xffdbdbdb,0xffe5e5e5,0xfff8f8f8,0xffececec,0xffc9c9c9,0xffbfbfbf,0xfe151717,0xc12e3132,0xff000000,0x15000000,0xffffff, - 0x1000000,0xff000000,0xff000000,0xff000000,0xff000000,0xfff7f7f7,0xffd1d1d1,0xffbfbfbf,0xfe151717,0xcd2c2f2f,0x82000000,0xff000000,0xd000000,0xffffff, - 0xffffff,0x24000000,0x6b000000,0x8f000000,0xff000000,0xfff2f2f2,0xffbfbfbf,0xfe151717,0xcd2c2f2f,0x85000000,0x45000000,0xff000000,0x2000000,0xffffff, - 0xffffff,0xc000000,0x24000000,0x30000000,0xff000000,0xffe5e5e5,0xfe151717,0xcd2c2f2f,0x85000000,0x45000000,0x14000000,0xff000000,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0xce2b2e2f,0x86000000,0x45000000,0x14000000,0x2000000,0xff000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x8d606667,0x13000000,0x3000000,0xffffff,0xffffff,0xff000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xfd202223,0x9f575d5e,0x18000000,0x3000000,0xffffff,0xff000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xfe202324,0xa0575c5d,0x18000000,0x3000000,0xff000000,0xffffff,0xffffff, + 0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xfff4f4f4,0xfe202324,0xa0575c5d,0x18000000,0xff000000,0xffffff,0xffffff, + 0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff7f7f7,0xffededed,0xfe202324,0xa0575c5d,0xff000000,0x3000000,0xffffff, + 0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffeeeeee,0xffd6d6d6,0xffd1d1d1,0xef464a4b,0xff000000,0xe000000,0xffffff, + 0xffffff,0xff000000,0xfff5f5f5,0xffe1e1e1,0xffe9e9e9,0xfff9f9f9,0xffefefef,0xffd1d1d1,0xffc9c9c9,0xfe202323,0xc13e4142,0xff000000,0x15000000,0xffffff, + 0x1000000,0xff000000,0xff000000,0xff000000,0xff000000,0xfff8f8f8,0xffd8d8d8,0xffc9c9c9,0xfe202323,0xcd3c3f3f,0x82000000,0xff000000,0xd000000,0xffffff, + 0xffffff,0x24000000,0x6b000000,0x8f000000,0xff000000,0xfff4f4f4,0xffc9c9c9,0xfe202323,0xcd3c3f3f,0x85000000,0x45000000,0xff000000,0x2000000,0xffffff, + 0xffffff,0xc000000,0x24000000,0x30000000,0xff000000,0xffe9e9e9,0xfe202323,0xcd3c3f3f,0x85000000,0x45000000,0x14000000,0xff000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0xce3b3e3f,0x86000000,0x45000000,0x14000000,0x2000000,0xff000000,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0x24000000,0x6b000000,0x7b000000,0x45000000,0x14000000,0x2000000,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x24000000,0x26000000,0x10000000,0x2000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff }; static const QRgb fileopen_data[] = { 0x5000000,0x8000000,0xb000000,0xd000000,0xd000000,0xb000000,0x8000000,0x5000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff, 0xf000000,0x19000000,0x24000000,0x29000000,0x29000000,0x24000000,0x1b000000,0x10000000,0x9000000,0x3000000,0xffffff,0xffffff,0xffffff,0xffffff, 0x20000000,0x43000000,0x72000000,0x87000000,0x89000000,0x79000000,0x53000000,0x36000000,0x2b000000,0x23000000,0x1b000000,0x17000000,0x11000000,0xa000000, - 0x39000000,0x84000000,0xffaaaaaa,0xffa9a9a9,0xffa7a7a7,0xffa3a3a3,0xab000000,0x7b000000,0x67000000,0x5a000000,0x4d000000,0x3e000000,0x2e000000,0x1b000000, - 0x5b000000,0xc9353535,0xffaaaaaa,0xffa9a9a9,0xffa3a3a3,0xff9b9b9b,0xfa555555,0xd8000000,0xca000000,0xc1000000,0xad000000,0x89000000,0x5f000000,0x39000000, - 0x74000000,0xdc313131,0xffa9a9a9,0xffa6a6a6,0xff9d9d9d,0xff8e8e8e,0xff767676,0xff575757,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x56000000, - 0x85000000,0xe82e2e2e,0xffa7a7a7,0xff9f9f9f,0xff8f8f8f,0xff777777,0xff535353,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xb4000000,0x6e000000, - 0x91000000,0xef2b2b2b,0xff9f9f9f,0xff929292,0xff7b7b7b,0xff585858,0xff2c2c2c,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc0000000,0x77000000, - 0x92000000,0xf02a2a2a,0xff999999,0xff858585,0xff656565,0xff3b3b3b,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf8000000,0xc0000000,0x77000000, - 0x89000000,0xe92d2d2d,0xff8c8c8c,0xff747474,0xff7a7a7a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf1000000,0xb2000000,0x6b000000, - 0x78000000,0xd82c2c2c,0xfea6a6a6,0xffa9a9a9,0xffb0b0b0,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfd000000,0xdd000000,0x9b000000,0x59000000, + 0x39000000,0x84000000,0xffb6b6b6,0xffb6b6b6,0xffb4b4b4,0xffb0b0b0,0xab000000,0x7b000000,0x67000000,0x5a000000,0x4d000000,0x3e000000,0x2e000000,0x1b000000, + 0x5b000000,0xc9464646,0xffb6b6b6,0xffb6b6b6,0xffb0b0b0,0xffa9a9a9,0xfa676767,0xd8000000,0xca000000,0xc1000000,0xad000000,0x89000000,0x5f000000,0x39000000, + 0x74000000,0xdc414141,0xffb6b6b6,0xffb3b3b3,0xffababab,0xff9d9d9d,0xff878787,0xff696969,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x56000000, + 0x85000000,0xe83e3e3e,0xffb4b4b4,0xffadadad,0xff9e9e9e,0xff888888,0xff656565,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xb4000000,0x6e000000, + 0x91000000,0xef3b3b3b,0xffadadad,0xffa1a1a1,0xff8c8c8c,0xff6a6a6a,0xff3c3c3c,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc0000000,0x77000000, + 0x92000000,0xf0393939,0xffa7a7a7,0xff959595,0xff777777,0xff4c4c4c,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf8000000,0xc0000000,0x77000000, + 0x89000000,0xe93d3d3d,0xff9b9b9b,0xff858585,0xff8b8b8b,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf1000000,0xb2000000,0x6b000000, + 0x78000000,0xd83c3c3c,0xfeb3b3b3,0xffb6b6b6,0xffbcbcbc,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfd000000,0xdd000000,0x9b000000,0x59000000, 0x5d000000,0x9d000000,0xd7000000,0xf7000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xfa000000,0xe4000000,0xaf000000,0x73000000,0x3c000000, 0x3e000000,0x65000000,0x92000000,0xb6000000,0xd0000000,0xe1000000,0xe8000000,0xe7000000,0xdf000000,0xcc000000,0xa9000000,0x7a000000,0x4b000000,0x25000000, 0x26000000,0x41000000,0x5f000000,0x7a000000,0x90000000,0xa2000000,0xaa000000,0xa9000000,0x9e000000,0x8a000000,0x6b000000,0x48000000,0x2a000000,0x14000000 }; static const QRgb find_data[] = { - 0x1ffffff,0x420c0c0c,0x9c0b0b0b,0xe10e0e0e,0xe2101010,0xe2101010,0xe10e0e0e,0x9c0b0b0b,0x420c0c0c,0x1ffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0x420c0c0c,0xcf101010,0xff545655,0xffa5a9a7,0xffdde2e0,0xffdae1de,0xffa0a7a4,0xff505453,0xd0101010,0x440b0b0b,0x1000000,0x1000000,0xffffff,0xffffff, - 0x9c0b0b0b,0xff535555,0xf6d9dedc,0xfff6fbf9,0xfff5faf8,0xfff1f9f6,0xffeef7f4,0xf6ced9d4,0xff4e5150,0xa00b0b0b,0x8202020,0x4000000,0x1000000,0x1000000, - 0xe10e0e0e,0xffa3a8a5,0xfff4f9f8,0xfff4faf9,0xfff1f9f6,0xffeff8f5,0xffedf7f4,0xffe1ece8,0xff8d9693,0xe40d0d0d,0x110f0f0f,0x9000000,0x4000000,0x1000000, - 0xe2101010,0xffd7e0dc,0xfff0f8f5,0xffeff8f5,0xffeaf6f1,0xffe7f5f0,0xffe2eee9,0xffd5dfdb,0xffaeb8b4,0xe6101010,0x1e090909,0x11000000,0x9000000,0x4000000, - 0xe3101010,0xffd2ddd9,0xffecf6f2,0xffebf7f2,0xffe4f2ed,0xffdfece7,0xffd7e1dd,0xffc7d0cd,0xffa1aaa7,0xe90f0f0f,0x30060606,0x1c000000,0xf000000,0x7000000, - 0xe20e0e0e,0xff98a09e,0xffe0ebe7,0xffdfe9e6,0xffd8e2df,0xffd1dbd8,0xffc9d1cf,0xffbbc3c0,0xff767d7a,0xec0d0d0d,0x41040404,0x28000000,0x16000000,0xa000000, - 0xa10b0b0b,0xff4a4f4d,0xf8b5bebb,0xffc9d3d0,0xffc3ccc9,0xffbcc4c1,0xffbbc3c0,0xfb9da5a2,0xff3f4240,0xdc050505,0x76020202,0x33000000,0x1c000000,0xd000000, - 0x4c0a0a0a,0xd4101010,0xff454847,0xff7b827f,0xff9ba4a1,0xff9ba4a1,0xff767d7a,0xff3f4240,0xed231c17,0xdb836b59,0xf3000000,0x64000000,0x20000000,0xe000000, - 0xf111111,0x5a090909,0xb10a0a0a,0xec0d0d0d,0xef0f0f0f,0xf20f0f0f,0xf40d0d0d,0xe5050505,0xe4513826,0xffb68059,0xe0bea595,0xf0000000,0x51000000,0xe000000, - 0xd000000,0x1c000000,0x34050505,0x50030303,0x6d020202,0x82020202,0x8f020202,0xc0010101,0xec050302,0xf2453020,0xffb9845f,0xc9b6a08f,0xee000000,0x42000000, - 0xa000000,0x16000000,0x28000000,0x40000000,0x58000000,0x6c000000,0x77000000,0x77000000,0xac000000,0xe3000000,0xe6412d1e,0xffb7815b,0xc1b79a85,0xed000000, - 0x7000000,0xf000000,0x1c000000,0x2e000000,0x40000000,0x4f000000,0x58000000,0x58000000,0x4f000000,0x93000000,0xdd000000,0xde4f3625,0xdca26f4c,0xa0000000, + 0x1ffffff,0x42141414,0x9c131313,0xe1171717,0xe21a1a1a,0xe21a1a1a,0xe1171717,0x9c131313,0x42141414,0x1ffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0x42141414,0xcf1a1a1a,0xff666867,0xffb2b6b4,0xffe3e7e5,0xffe0e6e3,0xffadb4b1,0xff626665,0xd01a1a1a,0x44131313,0x1000000,0x1000000,0xffffff,0xffffff, + 0x9c131313,0xff656767,0xf6dfe3e2,0xfff8fcfa,0xfff7fbf9,0xfff3faf8,0xfff1f8f6,0xf6d6dfdb,0xff606362,0xa0131313,0x82e2e2e,0x4000000,0x1000000,0x1000000, + 0xe1171717,0xffb0b5b2,0xfff6faf9,0xfff6fbfa,0xfff3faf8,0xfff2f9f7,0xfff0f8f6,0xffe6efec,0xff9ca4a2,0xe4161616,0x11191919,0x9000000,0x4000000,0x1000000, + 0xe21a1a1a,0xffdde5e2,0xfff3f9f7,0xfff2f9f7,0xffeef8f3,0xffebf7f3,0xffe7f1ed,0xffdce4e1,0xffbac3bf,0xe61a1a1a,0x1e101010,0x11000000,0x9000000,0x4000000, + 0xe31a1a1a,0xffd9e3df,0xffeff8f4,0xffeef8f4,0xffe8f4f0,0xffe4efeb,0xffdde6e3,0xffd0d7d5,0xffaeb6b4,0xe9191919,0x300c0c0c,0x1c000000,0xf000000,0x7000000, + 0xe2171717,0xffa6adac,0xffe5eeeb,0xffe4edea,0xffdee7e4,0xffd8e1de,0xffd1d8d7,0xffc5ccca,0xff878d8b,0xec161616,0x41080808,0x28000000,0x16000000,0xa000000, + 0xa1131313,0xff5c615f,0xf8c0c8c5,0xffd1dad7,0xffccd4d1,0xffc6cdcb,0xffc5ccca,0xfbabb2af,0xff505351,0xdc0a0a0a,0x76050505,0x33000000,0x1c000000,0xd000000, + 0x4c121212,0xd41a1a1a,0xff575a59,0xff8c928f,0xffa9b1ae,0xffa9b1ae,0xff878d8b,0xff505351,0xed312923,0xdb937c6b,0xf3000000,0x64000000,0x20000000,0xe000000, + 0xf1b1b1b,0x5a101010,0xb1121212,0xec161616,0xef191919,0xf2191919,0xf4161616,0xe50a0a0a,0xe4634935,0xffc1906b,0xe0c8b2a4,0xf0000000,0x51000000,0xe000000, + 0xd000000,0x1c000000,0x340a0a0a,0x50060606,0x6d050505,0x82050505,0x8f050505,0xc0030303,0xec0a0605,0xf257402e,0xffc49471,0xc9c1ad9e,0xee000000,0x42000000, + 0xa000000,0x16000000,0x28000000,0x40000000,0x58000000,0x6c000000,0x77000000,0x77000000,0xac000000,0xe3000000,0xe6523d2b,0xffc2916d,0xc1c2a895,0xed000000, + 0x7000000,0xf000000,0x1c000000,0x2e000000,0x40000000,0x4f000000,0x58000000,0x58000000,0x4f000000,0x93000000,0xdd000000,0xde614734,0xdcaf805e,0xa0000000, 0x4000000,0x9000000,0x11000000,0x1c000000,0x28000000,0x33000000,0x38000000,0x38000000,0x33000000,0x28000000,0x7f000000,0xd8000000,0xb4000000,0x71000000 }; static const QRgb finish_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x8d4e5455,0x13000000,0x3000000,0xffffff,0xffffff,0xff000000,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xfd151617,0x9f454b4c,0x18000000,0x3000000,0xffffff,0xff000000,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xfe151718,0xa0454a4b,0x18000000,0x3000000,0xff000000,0xffffff,0xffffff, - 0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xfff2f2f2,0xfe151718,0xa0454a4b,0x18000000,0xff000000,0xffffff,0xffffff, - 0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff5f5f5,0xffe9e9e9,0xfe151718,0xa0454a4b,0xff000000,0x3000000,0xffffff, - 0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffeaeaea,0xffcecece,0xffc8c8c8,0xef35393a,0xff000000,0xe000000,0xffffff, - 0xffffff,0xff000000,0xfff3f3f3,0xffdbdbdb,0xffe5e5e5,0xfff8f8f8,0xffececec,0xffc9c9c9,0xffbfbfbf,0xfe151717,0xc12e3132,0xff000000,0x15000000,0xffffff, - 0x1000000,0xff000000,0xff000000,0xff000000,0xff000000,0xfff7f7f7,0xffd1d1d1,0xffbfbfbf,0xfe151717,0xcd2c2f2f,0x82000000,0xff000000,0xd000000,0xffffff, - 0xffffff,0x24000000,0x6b000000,0x8f000000,0xff000000,0xfff2f2f2,0xffbfbfbf,0xfe151717,0xcd2c2f2f,0x85000000,0x45000000,0xff000000,0x2000000,0xffffff, - 0xffffff,0xc000000,0x24000000,0x30000000,0xff000000,0xffe5e5e5,0xfe151717,0xcd2c2f2f,0x85000000,0x45000000,0x14000000,0xff000000,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0xce2b2e2f,0x86000000,0x45000000,0x14000000,0x2000000,0xff000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x8d606667,0x13000000,0x3000000,0xffffff,0xffffff,0xff000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xfd202223,0x9f575d5e,0x18000000,0x3000000,0xffffff,0xff000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xfe202324,0xa0575c5d,0x18000000,0x3000000,0xff000000,0xffffff,0xffffff, + 0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xfff4f4f4,0xfe202324,0xa0575c5d,0x18000000,0xff000000,0xffffff,0xffffff, + 0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff7f7f7,0xffededed,0xfe202324,0xa0575c5d,0xff000000,0x3000000,0xffffff, + 0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffeeeeee,0xffd6d6d6,0xffd1d1d1,0xef464a4b,0xff000000,0xe000000,0xffffff, + 0xffffff,0xff000000,0xfff5f5f5,0xffe1e1e1,0xffe9e9e9,0xfff9f9f9,0xffefefef,0xffd1d1d1,0xffc9c9c9,0xfe202323,0xc13e4142,0xff000000,0x15000000,0xffffff, + 0x1000000,0xff000000,0xff000000,0xff000000,0xff000000,0xfff8f8f8,0xffd8d8d8,0xffc9c9c9,0xfe202323,0xcd3c3f3f,0x82000000,0xff000000,0xd000000,0xffffff, + 0xffffff,0x24000000,0x6b000000,0x8f000000,0xff000000,0xfff4f4f4,0xffc9c9c9,0xfe202323,0xcd3c3f3f,0x85000000,0x45000000,0xff000000,0x2000000,0xffffff, + 0xffffff,0xc000000,0x24000000,0x30000000,0xff000000,0xffe9e9e9,0xfe202323,0xcd3c3f3f,0x85000000,0x45000000,0x14000000,0xff000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0xce3b3e3f,0x86000000,0x45000000,0x14000000,0x2000000,0xff000000,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0x24000000,0x6b000000,0x7b000000,0x45000000,0x14000000,0x2000000,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x24000000,0x26000000,0x10000000,0x2000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff }; static const QRgb folder_data[] = { 0x1000000,0x4000000,0x7000000,0x19000000,0x11000000,0x2c000000,0x19000000,0x19000000,0x16000000,0x13000000,0xe000000,0xa000000,0x7000000,0x4000000, - 0x5000000,0xa000000,0x5d1f1f1f,0xca3e3e3e,0xf53d463c,0xfe6f7b6e,0xb01d231d,0x40000000,0x2c000000,0x26000000,0x1f000000,0x19000000,0x13000000,0xd000000, - 0xc000000,0x15000000,0x9c212020,0xffb8b7b7,0xff939493,0xff757575,0xff838582,0xfa747f72,0xbb1c221c,0xc4282e26,0xe21d221d,0x7b000000,0x82000000,0x1a000000, - 0xc03d483d,0xc63b463a,0xcd111010,0xff746969,0xffaaa6a6,0xffc0bfbf,0xff9a9a9a,0xff757675,0xff777f77,0xffa5b0a4,0xffb8bfb7,0xfc818f80,0xc43a4338,0x63000000, - 0xff798e77,0xffcbe7c9,0xfa91a98f,0xfa474a43,0xff473b3b,0xff5d5454,0xffaaa6a6,0xffc1c0c0,0xff959795,0xff6a716a,0xff7c8c7b,0xffaabba8,0xfe829981,0x9f101510, - 0xc3131613,0xffb7d4b6,0xffc8e5c6,0xffbfdbbd,0xff90a88f,0xff81877b,0xff483c3c,0xff5d5454,0xffaaa6a6,0xffbfbebe,0xff8f948f,0xff4b564b,0xff769474,0xaf111611, - 0x41000000,0xf4627561,0xffc4e1c3,0xffbfdabd,0xffb9d3b7,0xffaec8ac,0xff80977f,0xff7c8176,0xff4b4140,0xff5d5555,0xffb2afaf,0xff767d76,0xff4b5d4a,0xb40e120e, - 0x25000000,0xae0e100d,0xffb0caaf,0xffbad5b8,0xffb4cdb2,0xffaec7ac,0xffa8c0a6,0xff9cb49b,0xff738671,0xff797f74,0xff4c4746,0xff787a78,0xff4e5a4c,0xba0b0e0b, - 0x1f000000,0x49000000,0xf4586857,0xffb0caaf,0xffafc8ad,0xffa9c1a7,0xffa3bba2,0xff9eb49c,0xff98ae97,0xff8da28c,0xff3f453c,0xff757473,0xff4f5a4e,0xbc090b09, - 0x17000000,0x29000000,0x64000000,0xdb272f26,0xfd70856f,0xff9eb59c,0xff9fb69d,0xff9ab098,0xff94a992,0xff8da18b,0xff6d806b,0xff50514f,0xff535b53,0xbd060806, - 0xe000000,0x1b000000,0x2c000000,0x41000000,0x83000000,0xdd222922,0xfd637662,0xff8fa48d,0xff8fa38d,0xff899c87,0xff839581,0xff3f4a3e,0xff575f56,0xba040504, - 0x7000000,0x10000000,0x1b000000,0x2b000000,0x3b000000,0x4d000000,0x84000000,0xdc191f19,0xfd566554,0xff7f927d,0xff7e907c,0xff637461,0xff313931,0x99030403, - 0x4000000,0x7000000,0xf000000,0x18000000,0x24000000,0x31000000,0x40000000,0x4f000000,0x84000000,0xda171c17,0xfc384336,0xff687966,0xfd1d231b,0x88000000, - 0x1000000,0x3000000,0x7000000,0xb000000,0x13000000,0x1c000000,0x26000000,0x32000000,0x40000000,0x4c000000,0x6d000000,0xa9020302,0x83080a07,0x42000000 + 0x5000000,0xa000000,0x5d2d2d2d,0xca4f4f4f,0xf54e584d,0xfe808c7f,0xb02a312a,0x40000000,0x2c000000,0x26000000,0x1f000000,0x19000000,0x13000000,0xd000000, + 0xc000000,0x15000000,0x9c2f2e2e,0xffc3c2c2,0xffa2a3a2,0xff868686,0xff939592,0xfa858f83,0xbb293029,0xc4373e35,0xe22a302a,0x7b000000,0x82000000,0x1a000000, + 0xc04e5a4e,0xc64c584b,0xcd1b1a1a,0xff857a7a,0xffb6b3b3,0xffcac9c9,0xffa8a8a8,0xff868786,0xff888f88,0xffb2bcb1,0xffc3c9c2,0xfc919e90,0xc44b5449,0x63000000, + 0xff8a9d88,0xffd3ebd1,0xfaa0b69e,0xfa595c54,0xff594c4c,0xff6f6666,0xffb6b3b3,0xffcbcaca,0xffa4a5a4,0xff7b827b,0xff8d9b8c,0xffb6c5b5,0xfe92a791,0x9f1a201a, + 0xc31e221e,0xffc2dbc1,0xffd1e9cf,0xffc9e1c7,0xff9fb59e,0xff91978c,0xff5a4d4d,0xff6f6666,0xffb6b3b3,0xffc9c8c8,0xff9ea39e,0xff5d685d,0xff87a385,0xaf1b221b, + 0x41000000,0xf4748673,0xffcde6cc,0xffc9e0c7,0xffc4dac2,0xffbad1b8,0xff90a58f,0xff8d9187,0xff5d5251,0xff6f6767,0xffbdbbbb,0xff878d87,0xff5d6f5c,0xb4171d17, + 0x25000000,0xae171a16,0xffbcd2bb,0xffc4dcc3,0xffbfd5bd,0xffbad0b8,0xffb5cab3,0xffaabfa9,0xff849682,0xff8a8f85,0xff5e5958,0xff898b89,0xff606c5e,0xba131713, + 0x1f000000,0x49000000,0xf46a7a69,0xffbcd2bb,0xffbbd1b9,0xffb6cbb4,0xffb0c5af,0xffacbfaa,0xffa6baa5,0xff9caf9b,0xff50574d,0xff868584,0xff616c60,0xbc101310, + 0x17000000,0x29000000,0x64000000,0xdb363f35,0xfd819580,0xffacc0aa,0xffadc1ab,0xffa8bca6,0xffa3b6a1,0xff9cae9a,0xff7e907c,0xff626361,0xff656d65,0xbd0c0f0c, + 0xe000000,0x1b000000,0x2c000000,0x41000000,0x83000000,0xdd303830,0xfd758774,0xff9eb19c,0xff9eb09c,0xff99aa97,0xff93a491,0xff505c4f,0xff697168,0xba080a08, + 0x7000000,0x10000000,0x1b000000,0x2b000000,0x3b000000,0x4d000000,0x84000000,0xdc252d25,0xfd687766,0xff8fa18d,0xff8e9f8d,0xff758573,0xff414a41,0x99060806, + 0x4000000,0x7000000,0xf000000,0x18000000,0x24000000,0x31000000,0x40000000,0x4f000000,0x84000000,0xda232923,0xfc495447,0xff7a8a78,0xfd2a3128,0x88000000, + 0x1000000,0x3000000,0x7000000,0xb000000,0x13000000,0x1c000000,0x26000000,0x32000000,0x40000000,0x4c000000,0x6d000000,0xa9050605,0x830f120d,0x42000000 }; static const unsigned char folder_open_data[] = { 0x0a,0x0a,0x0a,0x0a,0x00,0x00,0x00,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x00,0x03,0x04,0x00,0x00,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x00,0x03,0x07,0x03,0x04,0x00, 0x00,0x00,0x00,0x0a,0x0a,0x0a,0x00,0x00,0x00,0x0a,0x00,0x03,0x07,0x07, 0x07,0x07,0x07,0x07,0x03,0x00,0x0a,0x0a,0x00,0x05,0x05,0x02,0x06,0x03, 0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x00,0x0a,0x00,0x04,0x05,0x05, 0x05,0x04,0x03,0x03,0x03,0x03,0x07,0x07,0x07,0x03,0x04,0x00,0x0a,0x02, 0x05,0x05,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x03,0x07,0x03,0x04,0x00, 0x0a,0x00,0x04,0x05,0x05,0x01,0x01,0x05,0x04,0x04,0x03,0x03,0x03,0x03, 0x04,0x00,0x0a,0x0a,0x02,0x05,0x01,0x05,0x01,0x01,0x01,0x01,0x04,0x04, 0x03,0x03,0x04,0x00,0x0a,0x0a,0x00,0x04,0x01,0x01,0x01,0x01,0x08,0x01, 0x08,0x05,0x03,0x03,0x04,0x00,0x0a,0x0a,0x0a,0x02,0x04,0x08,0x01,0x01, 0x01,0x08,0x09,0x07,0x06,0x03,0x04,0x00,0x0a,0x0a,0x0a,0x0a,0x00,0x02, 0x05,0x08,0x08,0x09,0x09,0x09,0x05,0x03,0x04,0x00,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x00,0x02,0x01,0x09,0x09,0x09,0x07,0x06,0x04,0x00,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x00,0x02,0x01,0x09,0x09,0x04,0x04,0x00, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x00,0x02,0x01,0x09, 0x04,0x00,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, 0x00,0x02,0x02,0x00 }; static const QRgb folder_open_ctable[] = { 0xff000000,0xffc0c0c0,0xff303030,0xffffa858,0xff808080,0xffa0a0a4,0xff585858,0xffffdca8,0xffdcdcdc,0xffffffff,0xc6c6c6 }; static const QRgb forward_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x8d4e5455,0x13000000,0x3000000,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xfd151617,0x9f454b4c,0x18000000,0x3000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xfe151718,0xa0454a4b,0x18000000,0x3000000,0xffffff,0xffffff, - 0xffffff,0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xfff2f2f2,0xfe151718,0xa0454a4b,0x18000000,0x3000000,0xffffff, - 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff5f5f5,0xffe9e9e9,0xfe151718,0xa0454a4b,0x18000000,0x3000000, - 0x1000000,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffeaeaea,0xffcecece,0xffc8c8c8,0xef35393a,0x41000000,0xe000000, - 0x1000000,0xffffff,0xff000000,0xfff3f3f3,0xffdbdbdb,0xffe5e5e5,0xfff8f8f8,0xffececec,0xffc9c9c9,0xffbfbfbf,0xfe151717,0xc12e3132,0x57000000,0x15000000, - 0x1000000,0x1000000,0xff000000,0xff000000,0xff000000,0xff000000,0xfff7f7f7,0xffd1d1d1,0xffbfbfbf,0xfe151717,0xcd2c2f2f,0x82000000,0x3d000000,0xd000000, - 0x1000000,0xffffff,0x24000000,0x6b000000,0x8f000000,0xff000000,0xfff2f2f2,0xffbfbfbf,0xfe151717,0xcd2c2f2f,0x85000000,0x45000000,0x14000000,0x2000000, - 0x1000000,0xffffff,0xc000000,0x24000000,0x30000000,0xff000000,0xffe5e5e5,0xfe151717,0xcd2c2f2f,0x85000000,0x45000000,0x14000000,0x2000000,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0xce2b2e2f,0x86000000,0x45000000,0x14000000,0x2000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x8d606667,0x13000000,0x3000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xfd202223,0x9f575d5e,0x18000000,0x3000000,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xfe202324,0xa0575c5d,0x18000000,0x3000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xfff4f4f4,0xfe202324,0xa0575c5d,0x18000000,0x3000000,0xffffff, + 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff7f7f7,0xffededed,0xfe202324,0xa0575c5d,0x18000000,0x3000000, + 0x1000000,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffeeeeee,0xffd6d6d6,0xffd1d1d1,0xef464a4b,0x41000000,0xe000000, + 0x1000000,0xffffff,0xff000000,0xfff5f5f5,0xffe1e1e1,0xffe9e9e9,0xfff9f9f9,0xffefefef,0xffd1d1d1,0xffc9c9c9,0xfe202323,0xc13e4142,0x57000000,0x15000000, + 0x1000000,0x1000000,0xff000000,0xff000000,0xff000000,0xff000000,0xfff8f8f8,0xffd8d8d8,0xffc9c9c9,0xfe202323,0xcd3c3f3f,0x82000000,0x3d000000,0xd000000, + 0x1000000,0xffffff,0x24000000,0x6b000000,0x8f000000,0xff000000,0xfff4f4f4,0xffc9c9c9,0xfe202323,0xcd3c3f3f,0x85000000,0x45000000,0x14000000,0x2000000, + 0x1000000,0xffffff,0xc000000,0x24000000,0x30000000,0xff000000,0xffe9e9e9,0xfe202323,0xcd3c3f3f,0x85000000,0x45000000,0x14000000,0x2000000,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0xce3b3e3f,0x86000000,0x45000000,0x14000000,0x2000000,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x24000000,0x6b000000,0x7b000000,0x45000000,0x14000000,0x2000000,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x24000000,0x26000000,0x10000000,0x2000000,0xffffff,0xffffff,0xffffff,0xffffff }; static const QRgb forward_inactive_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7f000000,0x7f000000,0x46515151,0x9000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7f000000,0x7fffffff,0x7e161616,0x4f484848,0xc000000,0x1000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7f000000,0x7fffffff,0x7fffffff,0x7f161616,0x50484848,0xc000000,0x1000000,0xffffff,0xffffff, - 0xffffff,0xffffff,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x7fffffff,0x7fffffff,0x7ff2f2f2,0x7f161616,0x50484848,0xc000000,0x1000000,0xffffff, - 0xffffff,0xffffff,0x7f000000,0x7fffffff,0x7fffffff,0x7fffffff,0x7fffffff,0x7fffffff,0x7ff5f5f5,0x7fe9e9e9,0x7f161616,0x50484848,0xc000000,0x1000000, - 0xffffff,0xffffff,0x7f000000,0x7fffffff,0x7fffffff,0x7fffffff,0x7fffffff,0x7fffffff,0x7feaeaea,0x7fcecece,0x7fc8c8c8,0x77373737,0x20000000,0x7000000, - 0xffffff,0xffffff,0x7f000000,0x7ff3f3f3,0x7fdbdbdb,0x7fe5e5e5,0x7ff8f8f8,0x7fececec,0x7fc9c9c9,0x7fbfbfbf,0x7f161616,0x60303030,0x2b000000,0xa000000, - 0xffffff,0xffffff,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x7ff7f7f7,0x7fd1d1d1,0x7fbfbfbf,0x7f161616,0x662d2d2d,0x41000000,0x1e000000,0x6000000, - 0xffffff,0xffffff,0x12000000,0x35000000,0x47000000,0x7f000000,0x7ff2f2f2,0x7fbfbfbf,0x7f161616,0x662d2d2d,0x42000000,0x22000000,0xa000000,0x1000000, - 0xffffff,0xffffff,0x6000000,0x12000000,0x18000000,0x7f000000,0x7fe5e5e5,0x7f161616,0x662d2d2d,0x42000000,0x22000000,0xa000000,0x1000000,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7f000000,0x7f000000,0x672d2d2d,0x43000000,0x22000000,0xa000000,0x1000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7f000000,0x7f000000,0x46636363,0x9000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7f000000,0x7fffffff,0x7e222222,0x4f5a5a5a,0xc000000,0x1000000,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7f000000,0x7fffffff,0x7fffffff,0x7f222222,0x505a5a5a,0xc000000,0x1000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x7fffffff,0x7fffffff,0x7ff4f4f4,0x7f222222,0x505a5a5a,0xc000000,0x1000000,0xffffff, + 0xffffff,0xffffff,0x7f000000,0x7fffffff,0x7fffffff,0x7fffffff,0x7fffffff,0x7fffffff,0x7ff7f7f7,0x7fededed,0x7f222222,0x505a5a5a,0xc000000,0x1000000, + 0xffffff,0xffffff,0x7f000000,0x7fffffff,0x7fffffff,0x7fffffff,0x7fffffff,0x7fffffff,0x7feeeeee,0x7fd6d6d6,0x7fd1d1d1,0x77484848,0x20000000,0x7000000, + 0xffffff,0xffffff,0x7f000000,0x7ff5f5f5,0x7fe1e1e1,0x7fe9e9e9,0x7ff9f9f9,0x7fefefef,0x7fd1d1d1,0x7fc9c9c9,0x7f222222,0x60404040,0x2b000000,0xa000000, + 0xffffff,0xffffff,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x7ff8f8f8,0x7fd8d8d8,0x7fc9c9c9,0x7f222222,0x663d3d3d,0x41000000,0x1e000000,0x6000000, + 0xffffff,0xffffff,0x12000000,0x35000000,0x47000000,0x7f000000,0x7ff4f4f4,0x7fc9c9c9,0x7f222222,0x663d3d3d,0x42000000,0x22000000,0xa000000,0x1000000, + 0xffffff,0xffffff,0x6000000,0x12000000,0x18000000,0x7f000000,0x7fe9e9e9,0x7f222222,0x663d3d3d,0x42000000,0x22000000,0xa000000,0x1000000,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7f000000,0x7f000000,0x673d3d3d,0x43000000,0x22000000,0xa000000,0x1000000,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x12000000,0x35000000,0x3d000000,0x22000000,0xa000000,0x1000000,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x6000000,0x12000000,0x13000000,0x8000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff }; static const QRgb fullscreen_data[] = { 0x2e000000,0x5e000000,0x7d000000,0x86000000,0x87000000,0x76000000,0x54000000,0x4b000000,0x68000000,0x7e000000,0x84000000,0x88000000,0x79000000,0x55000000, 0x5f000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x86000000,0x7a000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x93000000, - 0x7e000000,0xffffffff,0xffffffff,0xffffffff,0xfeeaeaea,0xd8111111,0xa9000000,0x95000000,0xcc353535,0xfff9f9f9,0xffffffff,0xffffffff,0xffffffff,0xc1000000, - 0x86000000,0xffffffff,0xffffffff,0xffffffff,0xfda7a7a7,0xe0000000,0xb9000000,0xa0000000,0xbe000000,0xfaacacac,0xffffffff,0xffffffff,0xffffffff,0xd3000000, - 0x88000000,0xffffffff,0xfff9f9f9,0xfdaaaaaa,0xfee3e3e3,0xf6a1a1a1,0xbf000000,0xa7000000,0xeba8a8a8,0xfde4e4e4,0xfca8a8a8,0xffe9e9e9,0xffffffff,0xd6000000, - 0x77000000,0xffffffff,0xe0303030,0xe3000000,0xf6a2a2a2,0xee888888,0xb9000000,0xa1000000,0xdf919191,0xefa6a6a6,0xda000000,0xe70f0f0f,0xffffffff,0xc8000000, + 0x7e000000,0xffffffff,0xffffffff,0xffffffff,0xfeeeeeee,0xd81b1b1b,0xa9000000,0x95000000,0xcc464646,0xfffafafa,0xffffffff,0xffffffff,0xffffffff,0xc1000000, + 0x86000000,0xffffffff,0xffffffff,0xffffffff,0xfdb4b4b4,0xe0000000,0xb9000000,0xa0000000,0xbe000000,0xfab8b8b8,0xffffffff,0xffffffff,0xffffffff,0xd3000000, + 0x88000000,0xffffffff,0xfffafafa,0xfdb6b6b6,0xfee8e8e8,0xf6aeaeae,0xbf000000,0xa7000000,0xebb5b5b5,0xfde8e8e8,0xfcb5b5b5,0xffededed,0xffffffff,0xd6000000, + 0x77000000,0xffffffff,0xe0404040,0xe3000000,0xf6afafaf,0xee989898,0xb9000000,0xa1000000,0xdfa0a0a0,0xefb3b3b3,0xda000000,0xe7191919,0xffffffff,0xc8000000, 0x55000000,0x89000000,0xac000000,0xba000000,0xc0000000,0xb9000000,0x9f000000,0x88000000,0x93000000,0xa9000000,0xb3000000,0xbc000000,0xc0000000,0xa8000000, 0x4b000000,0x79000000,0x95000000,0x9f000000,0xa7000000,0xa1000000,0x88000000,0x74000000,0x81000000,0x94000000,0x9a000000,0xa4000000,0xaa000000,0x93000000, - 0x68000000,0xffffffff,0xc0131313,0xbc000000,0xeba8a8a8,0xdf919191,0x93000000,0x81000000,0xd4999999,0xe6acacac,0xba000000,0xd3333333,0xffffffff,0xa5000000, - 0x7d000000,0xffffffff,0xfeeaeaea,0xf9aaaaaa,0xfde4e4e4,0xefa6a6a6,0xa9000000,0x94000000,0xe7acacac,0xfce5e5e5,0xfaacacac,0xfff9f9f9,0xffffffff,0xbe000000, - 0x83000000,0xffffffff,0xffffffff,0xffffffff,0xfcacacac,0xdb000000,0xb4000000,0x99000000,0xb8000000,0xf9aaaaaa,0xffffffff,0xffffffff,0xffffffff,0xcf000000, - 0x87000000,0xffffffff,0xffffffff,0xffffffff,0xfff9f9f9,0xec2d2d2d,0xbe000000,0xa2000000,0xc8121212,0xfeeaeaea,0xffffffff,0xffffffff,0xffffffff,0xd7000000, + 0x68000000,0xffffffff,0xc01e1e1e,0xbc000000,0xebb5b5b5,0xdfa0a0a0,0x93000000,0x81000000,0xd4a7a7a7,0xe6b8b8b8,0xba000000,0xd3434343,0xffffffff,0xa5000000, + 0x7d000000,0xffffffff,0xfeeeeeee,0xf9b6b6b6,0xfde8e8e8,0xefb3b3b3,0xa9000000,0x94000000,0xe7b8b8b8,0xfce9e9e9,0xfab8b8b8,0xfffafafa,0xffffffff,0xbe000000, + 0x83000000,0xffffffff,0xffffffff,0xffffffff,0xfcb8b8b8,0xdb000000,0xb4000000,0x99000000,0xb8000000,0xf9b6b6b6,0xffffffff,0xffffffff,0xffffffff,0xcf000000, + 0x87000000,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xec3d3d3d,0xbe000000,0xa2000000,0xc81d1d1d,0xfeeeeeee,0xffffffff,0xffffffff,0xffffffff,0xd7000000, 0x79000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc3000000,0xa9000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xd0000000, 0x54000000,0x92000000,0xc1000000,0xd4000000,0xd7000000,0xc9000000,0xaa000000,0x94000000,0xa4000000,0xbd000000,0xcd000000,0xd6000000,0xcf000000,0xae000000 }; static const QRgb go_data[] = { 0xffd2e7a7,0xffc5e18f,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77, 0xffb9da77,0xffb9da77,0xffb9da77,0xffa7d156,0xff77a719,0xffc5e18f,0xffb5d86f,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a, 0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xff85ba1c,0xff415b0e,0xffb9da77,0xffa1ce4a,0xff8ac21d,0xff8ac21d, 0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff82b71b,0xff5a7f13,0xff5a7f13,0xff5a7f13,0xff8ac21d,0xff689216, 0xff293909,0xffb9da77,0xffa1ce4a,0xff8ac21d,0xff8ac21d,0xff84ba1c,0xff567812,0xff2a3b09,0xff0d1203,0xff000000,0xff060901,0xff223007,0xff47640f,0xff3b530c, 0xff0b0f03,0xff3e4a25,0xff0a0e02,0xff82b71b,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff8ac21d,0xff7db01a,0xff364c0b,0xff010100,0xff000000,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff010200,0xff616c4b,0xffe4e8dc,0xff080b02,0xff415c0e,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff87bd1c, 0xff374e0c,0xff000000,0xff000000,0xff131b04,0xff374e0c,0xff4e6e10,0xff415b0e,0xff1d2906,0xff000000,0xff030303,0xffeeefee,0xffffffff,0xff68764d,0xff050701, 0xff5d8214,0xff293909,0xffb9da77,0xffa1ce4a,0xff5e8414,0xff020200,0xff000000,0xff2c3e09,0xff75a519,0xff87be1c,0xff8ac21d,0xff7fb21b,0xff74a419,0xff161f05, 0xff747474,0xffffffff,0xffffffff,0xfff2f4ee,0xff101606,0xff4b6a10,0xff293909,0xffb9da77,0xffa1ce4a,0xff33480b,0xff000000,0xff0c1103,0xff6d9a17,0xff8ac21d, - 0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff2c3c0d,0xff55584e,0xff4c4c4c,0xff52544d,0xff6a7752,0xff2f3a19,0xff4b6a10,0xff293909,0xffb9da77,0xffa1ce4a, - 0xff161e05,0xff000000,0xff283808,0xff84b91c,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff39510c,0xff222f07,0xff000000,0xff020300,0xff32470a, - 0xff3f580d,0xff4b6a10,0xff293909,0xffb9da77,0xffa1ce4a,0xff080b02,0xff000000,0xff374d0b,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d, + 0xff8ac21d,0xff5f8514,0xff0c1103,0xff49660f,0xff2c3c0d,0xff55584e,0xff4c4c4c,0xff52544d,0xff6a7752,0xff2f3a19,0xff4b6a10,0xff293909,0xffb9da77,0xffa1ce4a, + 0xff161e05,0xff000000,0xff283808,0xff84b91c,0xff8ac21d,0xff628a15,0xff0b1002,0xff000000,0xff121a04,0xff39510c,0xff222f07,0xff000000,0xff020300,0xff32470a, + 0xff3f580d,0xff4b6a10,0xff293909,0xffb9da77,0xffa1ce4a,0xff080b02,0xff000000,0xff374d0b,0xff8ac21d,0xff5f8514,0xff0a0e02,0xff000000,0xff000000,0xff2f420a, 0xff8ac21d,0xff5d8314,0xff000000,0xff000000,0xff6a9516,0xff8ac21d,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff172105,0xff000000,0xff283808,0xff80b41b, - 0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff46630f,0xff000000,0xff050701,0xff709d18,0xff8ac21d,0xff689216,0xff293909,0xffb9da77, - 0xffa1ce4a,0xff354b0b,0xff000000,0xff0c1103,0xff6c9717,0xff719e18,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff77a719,0xff0e1403,0xff000000,0xff1b2506, + 0xff1c2706,0xff000000,0xff000000,0xff000000,0xff050801,0xff445f0e,0xff46630f,0xff000000,0xff050701,0xff709d18,0xff8ac21d,0xff689216,0xff293909,0xffb9da77, + 0xffa1ce4a,0xff354b0b,0xff000000,0xff0c1103,0xff6c9717,0xff719e18,0xff1e2b06,0xff537411,0xff273708,0xff000000,0xff020200,0xff0e1403,0xff000000,0xff1b2506, 0xff7cae1a,0xff8ac21d,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff608714,0xff030401,0xff000000,0xff293909,0xff73a118,0xff83b81c,0xff8ac21d,0xff77a719, - 0xff77a719,0xff000000,0xff000000,0xff000000,0xff435e0e,0xff8ac21d,0xff8ac21d,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff88bf1d,0xff3b530c,0xff000000, - 0xff000000,0xff101703,0xff32460a,0xff47640f,0xff3d560d,0xff182105,0xff000000,0xff000000,0xff000000,0xff77a719,0xff8ac21d,0xff8ac21d,0xff689216,0xff293909, - 0xffb9da77,0xffa1ce4a,0xff8ac21d,0xff7fb31b,0xff3c540d,0xff020300,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff080b02,0xff77a719, - 0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff8ac21d,0xff8ac21d,0xff85ba1c,0xff587c13,0xff2c3e09,0xff0f1503,0xff000000, - 0xff080b02,0xff243308,0xff4d6c10,0xff6a9416,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff8ac21d,0xff8ac21d, + 0xff182105,0xff000000,0xff000000,0xff000000,0xff435e0e,0xff8ac21d,0xff8ac21d,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff88bf1d,0xff3b530c,0xff000000, + 0xff000000,0xff101703,0xff32460a,0xff47640f,0xff3d560d,0xff182105,0xff000000,0xff000000,0xff000000,0xff3f590d,0xff82b71b,0xff8ac21d,0xff689216,0xff293909, + 0xffb9da77,0xffa1ce4a,0xff8ac21d,0xff7fb31b,0xff3c540d,0xff020300,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff080b02,0xff000000, + 0xff030401,0xff709d18,0xff8ac21d,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff8ac21d,0xff8ac21d,0xff85ba1c,0xff587c13,0xff2c3e09,0xff0f1503,0xff000000, + 0xff080b02,0xff243308,0xff4d6c10,0xff6a9416,0xff233107,0xff435e0e,0xff84ba1c,0xff8ac21d,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff8ac21d,0xff8ac21d, 0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff689216, 0xff293909,0xffa7d156,0xff85ba1c,0xff689216,0xff689216,0xff689216,0xff689216,0xff689216,0xff689216,0xff689216,0xff689216,0xff689216,0xff689216,0xff689216, 0xff689216,0xff689216,0xff689216,0xff689216,0xff4d6d10,0xff233107,0xff77a719,0xff415b0e,0xff293909,0xff293909,0xff293909,0xff293909,0xff293909,0xff293909, 0xff293909,0xff293909,0xff293909,0xff293909,0xff293909,0xff293909,0xff293909,0xff293909,0xff293909,0xff233107,0xff233107 }; static const unsigned char h_src_data[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x15,0x01,0x01,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x15,0x0d,0x15,0x0d, 0x15,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0d,0x08, 0x0d,0x0d,0x0d,0x15,0x0d,0x15,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x15, 0x0d,0x0d,0x08,0x08,0x08,0x0d,0x15,0x0d,0x15,0x01,0x00,0x00,0x00,0x00, 0x01,0x15,0x0d,0x0d,0x0d,0x15,0x0d,0x08,0x08,0x15,0x15,0x01,0x00,0x00, 0x00,0x01,0x15,0x0d,0x08,0x0d,0x15,0x0d,0x15,0x0d,0x15,0x15,0x15,0x01, 0x00,0x00,0x00,0x01,0x0d,0x15,0x0d,0x08,0x08,0x08,0x0d,0x15,0x0d,0x15, 0x08,0x01,0x00,0x00,0x01,0x0d,0x15,0x0d,0x15,0x0d,0x15,0x0d,0x08,0x08, 0x15,0x15,0x01,0x00,0x00,0x01,0x15,0x15,0x08,0x15,0x15,0x15,0x0d,0x15, 0x15,0x15,0x15,0x15,0x01,0x00,0x01,0x15,0x15,0x15,0x15,0x08,0x08,0x08, 0x15,0x0d,0x15,0x0d,0x15,0x15,0x01,0x00,0x01,0x08,0x15,0x15,0x15,0x15, 0x15,0x15,0x08,0x08,0x08,0x15,0x15,0x08,0x01,0x00,0x00,0x01,0x01,0x08, 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x01,0x00,0x00,0x00,0x00, 0x00,0x01,0x01,0x01,0x08,0x15,0x15,0x15,0x15,0x15,0x08,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x08,0x15,0x08,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, 0x00,0x00,0x00,0x00 }; static const QRgb h_src_ctable[] = { 0xc6c6c6,0xff000000,0xffc3c3c3,0xff303030,0xffc0c0ff,0xffff0000,0xff008080,0xff800000,0xffc0c000,0xff0000c0,0xff808080,0xffc0ffc0,0xff00ffff,0xffffffff, 0xffa0a0a0,0xff00ff00,0xffffff00,0xffffc0ff,0xff404000,0xff00c000,0xff000080,0xffffffc0,0xff400000,0xffc05800,0xff800080,0xff008000,0xff00c0c0,0xffdcdcdc, 0xffff8000,0xffffc0c0,0xff585858,0xffc00000,0xffffdca8,0xff808000,0xffffa858,0xff004000,0xffc000c0,0xff0000ff,0xffff00ff,0xffc0ffff,0xff004040 }; static const QRgb help_icon_data[] = { 0xffffff,0x2000000,0x6000000,0xa000000,0x11000000,0x16000000,0x1a000000,0x1a000000,0x18000000,0x12000000,0xc000000,0x6000000,0x3000000,0x1000000, 0x2000000,0x7000000,0x10000000,0x1b000000,0x2f000000,0x47000000,0x58000000,0x59000000,0x4b000000,0x33000000,0x1e000000,0x12000000,0x9000000,0x3000000, - 0x5000000,0xe000000,0x1d000000,0x3b000000,0x72000000,0xbf5b5b5b,0xdf868686,0xe0858585,0xca6b6b6b,0x81000000,0x48000000,0x24000000,0x13000000,0x7000000, - 0x7000000,0x16000000,0x30000000,0x71000000,0xeaa7a7a7,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf9d3d3d3,0x931c1c1c,0x42000000,0x1e000000,0xb000000, - 0xa000000,0x1c000000,0x45000000,0xb65f5f5f,0xffffffff,0xffffffff,0xfdababab,0xfd8a8a8a,0xffffffff,0xffffffff,0xdf868686,0x63000000,0x2a000000,0x10000000, - 0xb000000,0x20000000,0x4c000000,0xb1626262,0xe9808080,0xfbbdbdbd,0xf9101010,0xfe303030,0xffffffff,0xffffffff,0xe2848484,0x6d000000,0x31000000,0x13000000, - 0xa000000,0x1e000000,0x40000000,0x72000000,0xad000000,0xe0000000,0xfc666666,0xffeeeeee,0xffffffff,0xfbbdbdbd,0xb0000000,0x62000000,0x31000000,0x13000000, - 0x8000000,0x17000000,0x33000000,0x5d000000,0x99000000,0xe3363636,0xffffffff,0xffffffff,0xfd9a9a9a,0xd3000000,0x8e000000,0x53000000,0x2a000000,0xf000000, - 0x5000000,0x12000000,0x2c000000,0x55000000,0x92000000,0xe76f6f6f,0xfdbbbbbb,0xfdbbbbbb,0xe0000000,0xaa000000,0x72000000,0x41000000,0x1f000000,0xb000000, - 0x3000000,0xc000000,0x23000000,0x48000000,0x83000000,0xd7515151,0xf6797979,0xf47a7a7a,0xbc000000,0x83000000,0x56000000,0x2e000000,0x13000000,0x6000000, - 0x1000000,0x7000000,0x1b000000,0x3d000000,0x77000000,0xe2848484,0xffffffff,0xffffffff,0xaa000000,0x66000000,0x3f000000,0x1d000000,0x9000000,0x3000000, - 0xffffff,0x5000000,0x18000000,0x37000000,0x6a000000,0xd9898989,0xffffffff,0xffffffff,0x93000000,0x50000000,0x2e000000,0x12000000,0x3000000,0x1000000, + 0x5000000,0xe000000,0x1d000000,0x3b000000,0x72000000,0xbf6d6d6d,0xdf969696,0xe0959595,0xca7c7c7c,0x81000000,0x48000000,0x24000000,0x13000000,0x7000000, + 0x7000000,0x16000000,0x30000000,0x71000000,0xeab4b4b4,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf9dadada,0x93292929,0x42000000,0x1e000000,0xb000000, + 0xa000000,0x1c000000,0x45000000,0xb6717171,0xffffffff,0xffffffff,0xfdb7b7b7,0xfd9a9a9a,0xffffffff,0xffffffff,0xdf969696,0x63000000,0x2a000000,0x10000000, + 0xb000000,0x20000000,0x4c000000,0xb1747474,0xe9909090,0xfbc7c7c7,0xf91a1a1a,0xfe404040,0xffffffff,0xffffffff,0xe2949494,0x6d000000,0x31000000,0x13000000, + 0xa000000,0x1e000000,0x40000000,0x72000000,0xad000000,0xe0000000,0xfc787878,0xfff1f1f1,0xffffffff,0xfbc7c7c7,0xb0000000,0x62000000,0x31000000,0x13000000, + 0x8000000,0x17000000,0x33000000,0x5d000000,0x99000000,0xe3474747,0xffffffff,0xffffffff,0xfda8a8a8,0xd3000000,0x8e000000,0x53000000,0x2a000000,0xf000000, + 0x5000000,0x12000000,0x2c000000,0x55000000,0x92000000,0xe7808080,0xfdc5c5c5,0xfdc5c5c5,0xe0000000,0xaa000000,0x72000000,0x41000000,0x1f000000,0xb000000, + 0x3000000,0xc000000,0x23000000,0x48000000,0x83000000,0xd7636363,0xf68a8a8a,0xf48b8b8b,0xbc000000,0x83000000,0x56000000,0x2e000000,0x13000000,0x6000000, + 0x1000000,0x7000000,0x1b000000,0x3d000000,0x77000000,0xe2949494,0xffffffff,0xffffffff,0xaa000000,0x66000000,0x3f000000,0x1d000000,0x9000000,0x3000000, + 0xffffff,0x5000000,0x18000000,0x37000000,0x6a000000,0xd9999999,0xffffffff,0xffffffff,0x93000000,0x50000000,0x2e000000,0x12000000,0x3000000,0x1000000, 0xffffff,0x5000000,0x14000000,0x2e000000,0x4e000000,0x7b000000,0x9a000000,0x92000000,0x62000000,0x3b000000,0x21000000,0xb000000,0xffffff,0xffffff, 0xffffff,0x3000000,0xe000000,0x1f000000,0x31000000,0x42000000,0x4d000000,0x4a000000,0x38000000,0x27000000,0x15000000,0x7000000,0xffffff,0xffffff }; static const QRgb home_data[] = { 0xffffff,0x1000000,0x2000000,0x6000000,0xb000000,0x13000000,0x1c000000,0x21000000,0x21000000,0x20000000,0x1d000000,0x13000000,0xc000000,0x6000000, 0x1000000,0x2000000,0x8000000,0x12000000,0x21000000,0x31000000,0x43000000,0x4e000000,0x51000000,0x4a000000,0x40000000,0x2e000000,0x1f000000,0x11000000, - 0x2000000,0x8000000,0x14000000,0x27000000,0x42000000,0x5e000000,0xa36a6a6a,0xaf5f5f5f,0x8e0b0b0b,0xab585858,0x93505050,0x57000000,0x3b000000,0x22000000, - 0x7000000,0x13000000,0x28000000,0x4c000000,0x71000000,0xb7585858,0xfff1f1f1,0xffefefef,0xdd535353,0xffa4a4a4,0xf9a6a6a6,0x88000000,0x5f000000,0x39000000, - 0xf000000,0x23000000,0x47000000,0x75000000,0xbf525252,0xffebebeb,0xffffffff,0xffffffff,0xffe3e3e3,0xff838383,0xfc7e7e7e,0xb3000000,0x86000000,0x56000000, - 0x1a000000,0x38000000,0x66000000,0xbd5d5d5d,0xffebebeb,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffdddddd,0xfe747474,0xd0000000,0xa4000000,0x6f000000, - 0x21000000,0x4d000000,0xa1525252,0xffe7e7e7,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc2c2c2,0xe8252525,0xb9000000,0x82000000, - 0x2a000000,0x80626262,0xfccdcdcd,0xffeeeeee,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc6c6c6,0xfe8d8d8d,0xd22f2f2f,0x8d000000, - 0x2d000000,0x73353535,0xb74a4a4a,0xfdd8d8d8,0xffffffff,0xfff7f7f7,0xffeeeeee,0xffededed,0xfff6f6f6,0xffffffff,0xffacacac,0xee222222,0xcc181818,0x90000000, - 0x2b000000,0x5d000000,0x94000000,0xfad6d6d6,0xffffffff,0xffa5a5a5,0xff444444,0xff3b3b3b,0xff959595,0xffffffff,0xfda1a1a1,0xdf000000,0xb9000000,0x83000000, - 0x23000000,0x51000000,0x85000000,0xfbe0e0e0,0xffffffff,0xffb3b3b3,0xff5a5a5a,0xff525252,0xffa7a7a7,0xffffffff,0xfbb0b0b0,0xcd000000,0xa4000000,0x73000000, - 0x1d000000,0x40000000,0x6c000000,0xddaaaaaa,0xfccecece,0xfda3a3a3,0xfa6b6b6b,0xfb676767,0xfe989898,0xfdc3c3c3,0xe87a7a7a,0xaf000000,0x87000000,0x5b000000, + 0x2000000,0x8000000,0x14000000,0x27000000,0x42000000,0x5e000000,0xa37b7b7b,0xaf717171,0x8e131313,0xab6a6a6a,0x93626262,0x57000000,0x3b000000,0x22000000, + 0x7000000,0x13000000,0x28000000,0x4c000000,0x71000000,0xb76a6a6a,0xfff3f3f3,0xfff2f2f2,0xdd656565,0xffb1b1b1,0xf9b3b3b3,0x88000000,0x5f000000,0x39000000, + 0xf000000,0x23000000,0x47000000,0x75000000,0xbf646464,0xffeeeeee,0xffffffff,0xffffffff,0xffe8e8e8,0xff939393,0xfc8e8e8e,0xb3000000,0x86000000,0x56000000, + 0x1a000000,0x38000000,0x66000000,0xbd6f6f6f,0xffeeeeee,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe3e3e3,0xfe858585,0xd0000000,0xa4000000,0x6f000000, + 0x21000000,0x4d000000,0xa1646464,0xffebebeb,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffcbcbcb,0xe8343434,0xb9000000,0x82000000, + 0x2a000000,0x80747474,0xfcd5d5d5,0xfff1f1f1,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffcfcfcf,0xfe9c9c9c,0xd23f3f3f,0x8d000000, + 0x2d000000,0x73464646,0xb75c5c5c,0xfddedede,0xffffffff,0xfff8f8f8,0xfff1f1f1,0xfff0f0f0,0xfff8f8f8,0xffffffff,0xffb8b8b8,0xee303030,0xcc242424,0x90000000, + 0x2b000000,0x5d000000,0x94000000,0xfadddddd,0xffffffff,0xffb2b2b2,0xff565656,0xff4c4c4c,0xffa4a4a4,0xffffffff,0xfdaeaeae,0xdf000000,0xb9000000,0x83000000, + 0x23000000,0x51000000,0x85000000,0xfbe5e5e5,0xffffffff,0xffbebebe,0xff6c6c6c,0xff646464,0xffb4b4b4,0xffffffff,0xfbbcbcbc,0xcd000000,0xa4000000,0x73000000, + 0x1d000000,0x40000000,0x6c000000,0xddb6b6b6,0xfcd6d6d6,0xfdb0b0b0,0xfa7c7c7c,0xfb797979,0xfea6a6a6,0xfdcccccc,0xe88b8b8b,0xaf000000,0x87000000,0x5b000000, 0x12000000,0x2c000000,0x4d000000,0x71000000,0x94000000,0xab000000,0xb8000000,0xbf000000,0xbd000000,0xb3000000,0xa2000000,0x85000000,0x61000000,0x3e000000, 0x9000000,0x18000000,0x30000000,0x48000000,0x61000000,0x74000000,0x81000000,0x86000000,0x83000000,0x7b000000,0x6a000000,0x55000000,0x3b000000,0x25000000 }; static const unsigned char install_data[] = { 0x00,0x00,0x00,0x02,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x03,0x04,0x04,0x05,0x03,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x03,0x04,0x05,0x05,0x03, 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x06,0x03,0x05,0x05, 0x05,0x03,0x06,0x06,0x07,0x07,0x00,0x00,0x00,0x02,0x02,0x06,0x06,0x06, 0x03,0x03,0x03,0x06,0x06,0x07,0x07,0x07,0x00,0x00,0x00,0x02,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x00,0x00,0x00,0x08,0x08, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x07,0x07,0x02,0x00,0x00,0x00, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x07,0x02,0x09,0x09,0x00, 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x02,0x02,0x09, 0x02,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x09,0x07,0x07,0x07,0x07,0x07, 0x09,0x09,0x02,0x00,0x00,0x00,0x00,0x09,0x09,0x09,0x09,0x09,0x09,0x09, 0x09,0x09,0x02,0x09,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x09,0x07, 0x07,0x07,0x07,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07, 0x09,0x07,0x07,0x07,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; static const QRgb install_ctable[] = { 0x40ffffff,0xffffff00,0xffff0000,0xff0000ff,0xffffffff,0xff00b6ff,0xff000000,0xffff6d00,0xffffb696,0xffb64500 }; static const QRgb installed_data[] = { 0xff,0xff3300,0xff,0xff3300,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff0000ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff0000ff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff00b6ff,0xff00b6ff,0xffffffff,0xffffffff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xffff,0xff,0xffff, 0xff,0xffff,0xff0000ff,0xff00b6ff,0xffffffff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff,0xff, 0xff,0xff,0xff0000ff,0xff00b6ff,0xffffffff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff,0xffff, 0xff,0xffff,0xff0000ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff,0xff, 0xff,0xff,0xff0000ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff,0xffff, 0xff,0xffff,0xff,0xff0000ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff0000ff,0xff0000ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff0000ff,0xffff,0xff,0xffff, 0xff,0xffff,0xff,0xffff,0xff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xffff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xffff, 0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xff,0xff,0xff }; static const QRgb italic_data[] = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, @@ -4367,630 +4427,630 @@ static const QRgb launching_data[] = { 0x62c0b300,0x7e484400,0x2cbfb200,0xdffee00,0x3ffee00,0x0,0x0,0xcffee00,0x0,0x4a000000,0x94000000,0x6b020200,0xb9fceb00,0xebffee00, 0x66464100,0x67201e00,0xa4736b00,0xabc5b804,0x97fbeb03,0x39ffee00,0x59000000,0x34000000,0x56000000,0x51000000,0x61ffee00,0x4ce6d718,0x596f6928,0x814d4807, 0x46000000,0x5a000000,0x47030300,0xdffee00,0x1fffee00,0x72373400,0x484d4800,0xfffee00,0x6ffee00,0x2ffee00,0x0,0x0,0x18000000,0x7e000000, 0x7a010100,0x91fbea00,0xbfffee00,0x513e3a00,0x5d080700,0x75413d00,0x99716900,0x77ffee00,0x4bffee00,0x1f393500,0x5a000000,0x99ffee00,0x42000000,0x59000000, 0x36ffee00,0x79ffee00,0xad7a7208,0x86595404,0x47ffee00,0x99a89d00,0x5a000000,0x58000000,0x36040400,0x5c080700,0x3b222000,0x9ffee00,0x4ffee00,0x2ffee00, 0x0,0x0,0x56000000,0x7a040400,0x71807800,0x6bffee00,0x4f1d1b00,0x5b020200,0x4c2a2700,0x9a2d2a00,0x9a433e00,0x3fffee00,0x13ffee00,0x57000000, 0xb2857c00,0xffffee00,0x44000000,0x85000000,0x443c3800,0x4dffee00,0x926e6600,0x835d5700,0x6bffee00,0xffffee00,0xbaefdf00,0x51000000,0x59000000,0x5a000000, 0x25000000,0x0,0x0,0x0,0x0,0x0,0x59000000,0x534c4700,0x29f2e200,0x4e030300,0x5a000000,0x540c0b00,0x94111000,0xa3181600, 0x73373300,0x54242200,0x39040400,0x5a000000,0xf7eddd00,0xc8ffee00,0x90000000,0xaa000000,0x5b020200,0x29958b00,0x79504a00,0x764b4600,0x1dffee00,0x8affee00, 0xf8ffee00,0xd4ffee00,0x17ffee00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5a0e0d00,0x62171500,0x59000000,0x5a000000, 0x23000000,0x600f0e00,0x970d0c00,0x7b151400,0x61121100,0x5d030300,0x5a000000,0x7e6b6400,0xf5ffee00,0x18ffee00,0x90000000,0x7b000000,0x57000000,0x5a050500, 0x63292600,0x69353100,0x18ffee00,0x7ffee00,0x1effee00,0xc1ffee00,0xbfffee00,0x2bffee00,0x0,0x0,0x0,0x0,0x0,0x0, 0xf443f00,0x4c000000,0x42000000,0x2000000,0x1ffee00,0x57070700,0x680b0a00,0x19262300,0x46000000,0x59000000,0x55000000,0x94ffee00,0xa2ffee00,0x0, 0x70000000,0x59000000,0xb000000,0x5a000000,0x5d080700,0x541b1900,0xeffee00,0x8ffee00,0x1ffee00,0x0,0x49ffee00,0x77ffee00,0x2bffee00,0x6ffee00, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x29060500,0x5b020200,0x58000000,0x5a000000,0x49000000, 0x8bfb200,0xa0ffee00,0x3bffee00,0x0,0x2000000,0x47000000,0x0,0x40000000,0x58000000,0x47f7700,0x6ffee00,0x4ffee00,0x1ffee00,0x0, 0x0,0x9ffee00,0x22ffee00,0x1cffee00,0x1ffee00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x12000000, 0x59000000,0x53000000,0x12000000,0x0,0x32ffee00,0x51ffee00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x1ffee00,0x1ffee00,0x0,0x0,0x0,0x0,0x0,0x7ffee00,0x5ffee00,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ffee00,0x31ffee00,0x11ffee00,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0 }; static const QRgb left_data[] = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0 }; static const QRgb library_data[] = { 0x6000000,0x10000000,0x26000000,0x3c000000,0x3b000000,0x28000000,0x19000000,0x18000000,0x26000000,0x3a000000,0x3e000000,0x2e000000,0x1b000000,0xf000000, - 0xa000000,0x27000000,0xb3b6b6b6,0xffffffff,0xffffffff,0x817d7d7d,0x31000000,0x30000000,0x7f7e7e7e,0xffffffff,0xffffffff,0xb8b1b1b1,0x3a000000,0x1a000000, - 0xe000000,0x40000000,0xffffffff,0xffffffff,0xffffffff,0xa2636363,0x55000000,0x55000000,0xa0646464,0xffffffff,0xffffffff,0xffffffff,0x5a000000,0x28000000, - 0x13000000,0x4c000000,0xffffffff,0xffffffff,0xffffffff,0xe4bebebe,0xae5c5c5c,0xae5c5c5c,0xe4bebebe,0xffffffff,0xffffffff,0xffffffff,0x6e000000,0x35000000, + 0xa000000,0x27000000,0xb3c1c1c1,0xffffffff,0xffffffff,0x818d8d8d,0x31000000,0x30000000,0x7f8e8e8e,0xffffffff,0xffffffff,0xb8bdbdbd,0x3a000000,0x1a000000, + 0xe000000,0x40000000,0xffffffff,0xffffffff,0xffffffff,0xa2757575,0x55000000,0x55000000,0xa0767676,0xffffffff,0xffffffff,0xffffffff,0x5a000000,0x28000000, + 0x13000000,0x4c000000,0xffffffff,0xffffffff,0xffffffff,0xe4c8c8c8,0xae6e6e6e,0xae6e6e6e,0xe4c8c8c8,0xffffffff,0xffffffff,0xffffffff,0x6e000000,0x35000000, 0x17000000,0x50000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x7a000000,0x3f000000, 0x19000000,0x54000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x84000000,0x46000000, 0x1a000000,0x55000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x88000000,0x4a000000, 0x19000000,0x54000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x88000000,0x48000000, 0x17000000,0x4b000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x7e000000,0x42000000, - 0x14000000,0x37000000,0xbdadadad,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xd19c9c9c,0x68000000,0x39000000, - 0x10000000,0x20000000,0x42000000,0x67000000,0x91000000,0xf0cccccc,0xffffffff,0xffffffff,0xf3c9c9c9,0xaf000000,0x90000000,0x71000000,0x4c000000,0x2d000000, - 0xb000000,0x12000000,0x20000000,0x35000000,0x62000000,0xe8d3d3d3,0xffffffff,0xffffffff,0xeccfcfcf,0x84000000,0x61000000,0x4b000000,0x34000000,0x1f000000, - 0x8000000,0xe000000,0x19000000,0x2b000000,0x4b000000,0xa8818181,0xe9d2d2d2,0xead1d1d1,0xb5787878,0x6b000000,0x4e000000,0x3a000000,0x27000000,0x15000000, + 0x14000000,0x37000000,0xbdb9b9b9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xd1aaaaaa,0x68000000,0x39000000, + 0x10000000,0x20000000,0x42000000,0x67000000,0x91000000,0xf0d4d4d4,0xffffffff,0xffffffff,0xf3d1d1d1,0xaf000000,0x90000000,0x71000000,0x4c000000,0x2d000000, + 0xb000000,0x12000000,0x20000000,0x35000000,0x62000000,0xe8dadada,0xffffffff,0xffffffff,0xecd7d7d7,0x84000000,0x61000000,0x4b000000,0x34000000,0x1f000000, + 0x8000000,0xe000000,0x19000000,0x2b000000,0x4b000000,0xa8919191,0xe9d9d9d9,0xead8d8d8,0xb5898989,0x6b000000,0x4e000000,0x3a000000,0x27000000,0x15000000, 0xe000000,0x19000000,0x2c000000,0x41000000,0x5b000000,0x75000000,0x89000000,0x8e000000,0x83000000,0x70000000,0x58000000,0x41000000,0x28000000,0x16000000 }; static const unsigned char locked_data[] = { 0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04, 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x06,0x03,0x03,0x03,0x04, 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x06,0x07,0x06,0x07, 0x06,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x07,0x07, 0x07,0x07,0x07,0x06,0x07,0x06,0x03,0x03,0x04,0x04,0x04,0x04,0x03,0x06, 0x07,0x07,0x07,0x07,0x06,0x07,0x06,0x07,0x06,0x03,0x04,0x04,0x04,0x04, 0x03,0x05,0x07,0x07,0x00,0x06,0x07,0x06,0x06,0x06,0x06,0x03,0x04,0x04, 0x04,0x03,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x07,0x06,0x06,0x06,0x03, 0x04,0x04,0x04,0x03,0x01,0x05,0x00,0x00,0x05,0x05,0x05,0x00,0x07,0x06, 0x02,0x03,0x04,0x04,0x03,0x07,0x06,0x00,0x00,0x05,0x05,0x05,0x00,0x00, 0x05,0x06,0x03,0x04,0x04,0x03,0x06,0x06,0x07,0x01,0x00,0x00,0x00,0x00, 0x00,0x05,0x05,0x05,0x03,0x04,0x03,0x06,0x06,0x06,0x06,0x07,0x06,0x01, 0x00,0x00,0x01,0x05,0x05,0x05,0x03,0x04,0x03,0x02,0x06,0x06,0x06,0x06, 0x06,0x06,0x07,0x06,0x06,0x06,0x01,0x02,0x03,0x04,0x04,0x03,0x03,0x02, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x03,0x04,0x04,0x04,0x04, 0x04,0x03,0x03,0x03,0x02,0x06,0x06,0x06,0x06,0x06,0x02,0x03,0x04,0x04, 0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x06,0x02,0x03,0x04, 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03, 0x04,0x04,0x04,0x04 }; static const QRgb locked_ctable[] = { 0xffffa858,0xffa0a0a0,0xffc0c000,0xff000000,0xc6c6c6,0xff800000,0xffffffc0,0xffffffff }; static const unsigned char lockedfolder_data[] = { 0x06,0x06,0x04,0x07,0x04,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x04,0x07,0x01,0x05,0x04,0x04,0x04,0x04,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x04,0x09,0x07,0x07,0x04,0x03,0x03,0x03,0x04, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x04,0x09,0x09,0x02,0x04,0x03,0x04, 0x04,0x01,0x04,0x06,0x06,0x06,0x06,0x06,0x06,0x04,0x09,0x02,0x09,0x04, 0x03,0x04,0x01,0x05,0x01,0x04,0x04,0x06,0x06,0x06,0x06,0x04,0x02,0x09, 0x05,0x05,0x05,0x04,0x09,0x07,0x07,0x07,0x01,0x04,0x06,0x06,0x06,0x04, 0x09,0x02,0x01,0x01,0x01,0x05,0x05,0x08,0x02,0x08,0x04,0x01,0x07,0x06, 0x06,0x04,0x02,0x02,0x01,0x04,0x03,0x01,0x01,0x02,0x08,0x08,0x04,0x01, 0x07,0x06,0x06,0x04,0x02,0x02,0x01,0x01,0x03,0x04,0x01,0x08,0x08,0x08, 0x04,0x01,0x07,0x06,0x06,0x04,0x02,0x02,0x02,0x01,0x01,0x03,0x01,0x08, 0x08,0x08,0x04,0x01,0x07,0x06,0x06,0x04,0x04,0x00,0x02,0x04,0x03,0x01, 0x01,0x08,0x08,0x08,0x04,0x01,0x07,0x06,0x06,0x06,0x06,0x04,0x04,0x04, 0x03,0x04,0x08,0x08,0x08,0x08,0x04,0x01,0x07,0x06,0x06,0x06,0x06,0x06, 0x06,0x04,0x03,0x04,0x08,0x08,0x08,0x08,0x04,0x01,0x07,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x04,0x04,0x04,0x08,0x08,0x08,0x04,0x01,0x04,0x04, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x04,0x04,0x08,0x04,0x01, 0x04,0x04,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x04, 0x04,0x04,0x04,0x06 }; static const QRgb lockedfolder_ctable[] = { 0xff808080,0xffffa858,0xffc0c0c0,0xffc05800,0xff000000,0xffffdca8,0xc6c6c6,0xff585858,0xffa0a0a4,0xffffffff }; static const QRgb mag_data[] = { 0xffdbdbdb,0xff000000,0xff000000,0xff000000,0xff000000,0xffdbdbdb,0xffdadada,0xffd7d7d7,0xdcdcdc,0xdcdcdc,0xff000000,0xff000000,0xff2effff,0xff52ffff, 0xff000000,0xff000000,0xffd9d9d9,0xffd7d7d7,0xdcdcdc,0xdcdcdc,0xff000000,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff000000,0xdcdcdc,0xdcdcdc, 0xdcdcdc,0xdcdcdc,0xff000000,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff000000,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff000000,0xff000000, 0xff00ffff,0xff00ffff,0xff000000,0xff000000,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff000000,0xff000000,0xff000000,0xff000000,0xffc0c000, 0xff000000,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff000000,0xffc0c000,0xffc0c000,0xff000000,0xdcdcdc,0xdcdcdc, 0xdcdcdc,0xffd7d7d7,0xffd7d7d7,0xdcdcdc,0xdcdcdc,0xff000000,0xffc0c000,0xffc0c000,0xff000000,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc, 0xdcdcdc,0xdcdcdc,0xff000000,0xffc0c000,0xff000000,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff000000, 0xdcdcdc,0xdcdcdc }; static const QRgb month_data[] = { 0xe000000,0x18000000,0x23000000,0x2e000000,0x35000000,0x39000000,0x3b000000,0x3b000000,0x3b000000,0x39000000,0x35000000,0x2e000000,0x23000000,0x18000000, - 0x18000000,0xff686eaf,0xff595fa6,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff343b93,0xff070f75,0x3d000000,0x2a000000, - 0x24000000,0xff595fa6,0xff394095,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff07107a,0xff050c5a,0x5a000000,0x3e000000, - 0x2e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x74000000,0x50000000, - 0x35000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffe0e0e0,0xffa1a1a1,0x86000000,0x5c000000, - 0x39000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x90000000,0x63000000, - 0x3b000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x95000000,0x66000000, - 0x3c000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffe0e0e0,0xffa1a1a1,0x96000000,0x67000000, - 0x3b000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x95000000,0x66000000, - 0x39000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x90000000,0x63000000, - 0x35000000,0xffffffff,0xfffcfcfc,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffc8c8c8,0xff959595,0x86000000,0x5c000000, - 0x2e000000,0xfff3f3f3,0xffbababa,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xff959595,0xff868686,0x74000000,0x50000000, + 0x18000000,0xff7a7fbb,0xff6b71b3,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff454ca2,0xff0d1986,0x3d000000,0x2a000000, + 0x24000000,0xff6b71b3,0xff4a51a4,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff0d1a8b,0xff0a146c,0x5a000000,0x3e000000, + 0x2e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe5e5e5,0xffaeaeae,0x74000000,0x50000000, + 0x35000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffe5e5e5,0xffaeaeae,0x86000000,0x5c000000, + 0x39000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe5e5e5,0xffaeaeae,0x90000000,0x63000000, + 0x3b000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe5e5e5,0xffaeaeae,0x95000000,0x66000000, + 0x3c000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffe5e5e5,0xffaeaeae,0x96000000,0x67000000, + 0x3b000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe5e5e5,0xffaeaeae,0x95000000,0x66000000, + 0x39000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe5e5e5,0xffaeaeae,0x90000000,0x63000000, + 0x35000000,0xffffffff,0xfffdfdfd,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffd1d1d1,0xffa4a4a4,0x86000000,0x5c000000, + 0x2e000000,0xfff5f5f5,0xffc4c4c4,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffa4a4a4,0xff969696,0x74000000,0x50000000, 0x24000000,0x3e000000,0x5a000000,0x74000000,0x86000000,0x90000000,0x95000000,0x96000000,0x95000000,0x90000000,0x86000000,0x74000000,0x5a000000,0x3e000000, 0x18000000,0x2a000000,0x3d000000,0x4f000000,0x5c000000,0x63000000,0x66000000,0x67000000,0x66000000,0x63000000,0x5c000000,0x4f000000,0x3d000000,0x2a000000 }; static const QRgb mute_data[] = { - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x95020202,0xd000000,0x7000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x95050505,0xd000000,0x7000000,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x3f000000,0x19000000,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffc0c0c0,0xff000000,0x79000000,0x2b000000,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffc0c0c0,0xffffffff,0xff010101,0xe3020202,0xcb020202,0x2f020202,0xbf020202,0xbf020202,0xbf020202, - 0xff000000,0xff000000,0xff000000,0xff000000,0xffc0c0c0,0xffffffff,0xffffffff,0xff010101,0xffffffff,0xbb575757,0xbf020202,0xab5f5f5f,0xffffffff,0xbf020202, - 0xff000000,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffe6e6e6,0xffe6e6e6,0xffe6e6e6,0xff010101,0xda4b4b4b,0xffffffff,0xab5f5f5f,0xffffffff,0xab5f5f5f,0xbf020202, - 0xff000000,0xffc6c6c6,0xffc6c6c6,0xffc6c6c6,0xffc6c6c6,0xffc6c6c6,0xffc6c6c6,0xff000000,0xe3020202,0xbb575757,0xffffffff,0xab5f5f5f,0xbf020202,0x2f020202, - 0xff000000,0xff7d7d7d,0xff7d7d7d,0xff7d7d7d,0xffa7a7a7,0xffa6a6a6,0xffa6a6a6,0xff010101,0xda4b4b4b,0xffffffff,0xab5f5f5f,0xffffffff,0xab5f5f5f,0xbf020202, - 0xff000000,0xff000000,0xff000000,0xff000000,0xff6b6b6b,0xff8e8e8e,0xff8e8e8e,0xff010101,0xffffffff,0xbb575757,0xbf020202,0xab5f5f5f,0xffffffff,0xbf020202, - 0x24000000,0x6b000000,0x8f000000,0x8f000000,0xff000000,0xff6b6b6b,0xff8e8e8e,0xff010101,0xe3020202,0xcb020202,0x2f020202,0xbf020202,0xbf020202,0xbf020202, - 0xc000000,0x24000000,0x30000000,0x30000000,0x48000000,0xff000000,0xff6b6b6b,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffcacaca,0xff000000,0x79000000,0x2b000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffcacaca,0xffffffff,0xff030303,0xe3050505,0xcb050505,0x2f050505,0xbf050505,0xbf050505,0xbf050505, + 0xff000000,0xff000000,0xff000000,0xff000000,0xffcacaca,0xffffffff,0xffffffff,0xff030303,0xffffffff,0xbb696969,0xbf050505,0xab717171,0xffffffff,0xbf050505, + 0xff000000,0xffbababa,0xffbababa,0xffbababa,0xffeaeaea,0xffeaeaea,0xffeaeaea,0xff030303,0xda5d5d5d,0xffffffff,0xab717171,0xffffffff,0xab717171,0xbf050505, + 0xff000000,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xff000000,0xe3050505,0xbb696969,0xffffffff,0xab717171,0xbf050505,0x2f050505, + 0xff000000,0xff8d8d8d,0xff8d8d8d,0xff8d8d8d,0xffb4b4b4,0xffb3b3b3,0xffb3b3b3,0xff030303,0xda5d5d5d,0xffffffff,0xab717171,0xffffffff,0xab717171,0xbf050505, + 0xff000000,0xff000000,0xff000000,0xff000000,0xff7c7c7c,0xff9d9d9d,0xff9d9d9d,0xff030303,0xffffffff,0xbb696969,0xbf050505,0xab717171,0xffffffff,0xbf050505, + 0x24000000,0x6b000000,0x8f000000,0x8f000000,0xff000000,0xff7c7c7c,0xff9d9d9d,0xff030303,0xe3050505,0xcb050505,0x2f050505,0xbf050505,0xbf050505,0xbf050505, + 0xc000000,0x24000000,0x30000000,0x30000000,0x48000000,0xff000000,0xff7c7c7c,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x3c000000,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x3c000000,0xc8010101,0x79000000,0x2b000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x3c000000,0xc8030303,0x79000000,0x2b000000,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x31000000,0x3f000000,0x19000000,0xffffff,0xffffff,0xffffff,0xffffff }; static const QRgb new_data[] = { 0x16000000,0x4f000000,0x9c000000,0xbb000000,0xbe000000,0xbe000000,0xc1000000,0xc4000000,0xbf000000,0xa2000000,0x6d000000,0x3e000000,0x21000000,0x12000000, - 0x18000000,0x4b000000,0x86000000,0xffffffff,0xfffdfdfd,0xffe6e6e6,0xffa3a3a3,0xffffffff,0xf5bcbcbc,0xae000000,0x99000000,0x6e000000,0x3f000000,0x21000000, - 0x19000000,0x4b000000,0x7c000000,0xffffffff,0xfffbfbfb,0xffdcdcdc,0xff868686,0xffffffff,0xffffffff,0xf8b6b6b6,0xb5000000,0x99000000,0x61000000,0x33000000, - 0x1a000000,0x4d000000,0x7e000000,0xffffffff,0xfffbfbfb,0xffdcdcdc,0xff838383,0xffffffff,0xffffffff,0xffffffff,0xf8bababa,0xb0000000,0x7b000000,0x43000000, - 0x1c000000,0x50000000,0x81000000,0xffffffff,0xfffdfdfd,0xffe4e4e4,0xff9d9d9d,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xb9000000,0x87000000,0x4c000000, - 0x1c000000,0x51000000,0x84000000,0xffffffff,0xfffdfdfd,0xfff3f3f3,0xffcfcfcf,0xff9d9d9d,0xff838383,0xff868686,0xffa3a3a3,0xbd000000,0x8d000000,0x50000000, - 0x1d000000,0x52000000,0x85000000,0xffffffff,0xffffffff,0xfffbfbfb,0xfff3f3f3,0xffe4e4e4,0xffdcdcdc,0xffdcdcdc,0xffe6e6e6,0xbf000000,0x8f000000,0x53000000, - 0x1d000000,0x52000000,0x85000000,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffdfdfd,0xfffbfbfb,0xfffbfbfb,0xfffdfdfd,0xc0000000,0x8f000000,0x54000000, + 0x18000000,0x4b000000,0x86000000,0xffffffff,0xfffdfdfd,0xffeaeaea,0xffb0b0b0,0xffffffff,0xf5c6c6c6,0xae000000,0x99000000,0x6e000000,0x3f000000,0x21000000, + 0x19000000,0x4b000000,0x7c000000,0xffffffff,0xfffcfcfc,0xffe2e2e2,0xff969696,0xffffffff,0xffffffff,0xf8c1c1c1,0xb5000000,0x99000000,0x61000000,0x33000000, + 0x1a000000,0x4d000000,0x7e000000,0xffffffff,0xfffcfcfc,0xffe2e2e2,0xff939393,0xffffffff,0xffffffff,0xffffffff,0xf8c4c4c4,0xb0000000,0x7b000000,0x43000000, + 0x1c000000,0x50000000,0x81000000,0xffffffff,0xfffdfdfd,0xffe8e8e8,0xffababab,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xb9000000,0x87000000,0x4c000000, + 0x1c000000,0x51000000,0x84000000,0xffffffff,0xfffdfdfd,0xfff5f5f5,0xffd7d7d7,0xffababab,0xff939393,0xff969696,0xffb0b0b0,0xbd000000,0x8d000000,0x50000000, + 0x1d000000,0x52000000,0x85000000,0xffffffff,0xffffffff,0xfffcfcfc,0xfff5f5f5,0xffe8e8e8,0xffe2e2e2,0xffe2e2e2,0xffeaeaea,0xbf000000,0x8f000000,0x53000000, + 0x1d000000,0x52000000,0x85000000,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfffcfcfc,0xfffdfdfd,0xc0000000,0x8f000000,0x54000000, 0x1d000000,0x52000000,0x85000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xbf000000,0x8f000000,0x53000000, 0x1d000000,0x51000000,0x84000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xbd000000,0x8c000000,0x51000000, 0x1c000000,0x51000000,0x86000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xb8000000,0x88000000,0x4d000000, 0x1a000000,0x4e000000,0x87000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xb2000000,0x7f000000,0x45000000, 0x16000000,0x41000000,0x79000000,0x92000000,0xa0000000,0xae000000,0xba000000,0xbf000000,0xbf000000,0xbd000000,0xb4000000,0x9e000000,0x6a000000,0x39000000, 0xd000000,0x26000000,0x4b000000,0x64000000,0x76000000,0x85000000,0x90000000,0x95000000,0x95000000,0x91000000,0x86000000,0x6e000000,0x49000000,0x2a000000 }; static const QRgb newfolder_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xff000000,0xffe5cca8,0xffffffcc,0xffffffcc,0xffffffcc,0xffffffcc,0xffcc9952,0xff000000,0xff000000,0xff000000,0xff000000,0xffffff,0xffffff,0xffffff, - 0xff000000,0xffe5cca8,0xffcc9952,0xffcc9952,0xffcc9952,0xffcc9952,0xffcc9952,0xffcb9852,0xffcb9852,0xffcb9852,0xffcb9852,0xff000000,0xffba8b5d,0xffffff, - 0xff000000,0xffe5cca8,0xffcc9952,0xffcc9952,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, - 0xff000000,0xffe5cca8,0xffcc9952,0xff000000,0xffffffff,0xfffefefe,0xfff5f5f5,0xffd3d3d3,0xffa7a7a7,0xffa2a2a2,0xffc8c8c8,0xffe9e9e9,0xfff5f5f5,0xff000000, - 0xff000000,0xffe5cca8,0xffa35c21,0xff3f3f32,0xfffcfcc9,0xfff5f5c4,0xffdbdbaf,0xff929275,0xff66ff66,0xff66ff66,0xff838368,0xffc3c39c,0xff37372c,0x87717159, - 0xff000000,0xffe5cca8,0xff000000,0xfffefefe,0xfff6f6c5,0xffd3d3a9,0xff929275,0xff48483a,0xff66ff66,0xff66ff66,0xff39392e,0xff73735c,0xff000000,0x6b000000, - 0xff000000,0xffa35c21,0xff3f3f32,0xfffefecb,0xffeeeebe,0xffa6a684,0xff66ff66,0xff66ff66,0xff66ff66,0xff66ff66,0xff66ff66,0xff66ff66,0xe423231c,0x67000000, - 0xff000000,0xffcc9952,0xffffffff,0xfffefecb,0xffececbd,0xffa1a181,0xff66ff66,0xff66ff66,0xff66ff66,0xff66ff66,0xff66ff66,0xff66ff66,0xc6000000,0x4d000000, - 0xff000000,0xffffffff,0xffffffcc,0xfffefecb,0xfff2f2c2,0xffc8c8a0,0xff838368,0xff39392e,0xff66ff66,0xff66ff66,0xff080807,0xee151511,0x99000000,0x37000000, - 0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff66ff66,0xff66ff66,0xff000000,0xb0000000,0x5f000000,0x28000000, + 0xff000000,0xffe9d4b5,0xffffffd4,0xffffffd4,0xffffffd4,0xffffffd4,0xffd4a764,0xff000000,0xff000000,0xff000000,0xff000000,0xffffff,0xffffff,0xffffff, + 0xff000000,0xffe9d4b5,0xffd4a764,0xffd4a764,0xffd4a764,0xffd4a764,0xffd4a764,0xffd3a664,0xffd3a664,0xffd3a664,0xffd3a664,0xff000000,0xffc49a6f,0xffffff, + 0xff000000,0xffe9d4b5,0xffd4a764,0xffd4a764,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, + 0xff000000,0xffe9d4b5,0xffd4a764,0xff000000,0xffffffff,0xfffefefe,0xfff7f7f7,0xffdadada,0xffb4b4b4,0xffafafaf,0xffd1d1d1,0xffededed,0xfff7f7f7,0xff000000, + 0xff000000,0xffe9d4b5,0xffb06e2f,0xff505042,0xfffdfdd1,0xfff7f7cd,0xffe1e1bb,0xffa1a186,0xff78ff78,0xff78ff78,0xff93937a,0xffccccaa,0xff48483c,0x8782826b, + 0xff000000,0xffe9d4b5,0xff000000,0xfffefefe,0xfff8f8ce,0xffdadab6,0xffa1a186,0xff5a5a4b,0xff78ff78,0xff78ff78,0xff4a4a3e,0xff84846e,0xff000000,0x6b000000, + 0xff000000,0xffb06e2f,0xff505042,0xfffefed3,0xfff1f1c8,0xffb3b394,0xff78ff78,0xff78ff78,0xff78ff78,0xff78ff78,0xff78ff78,0xff78ff78,0xe4313129,0x67000000, + 0xff000000,0xffd4a764,0xffffffff,0xfffefed3,0xffefefc7,0xffaeae91,0xff78ff78,0xff78ff78,0xff78ff78,0xff78ff78,0xff78ff78,0xff78ff78,0xc6000000,0x4d000000, + 0xff000000,0xffffffff,0xffffffd4,0xfffefed3,0xfff4f4cb,0xffd1d1ad,0xff93937a,0xff4a4a3e,0xff78ff78,0xff78ff78,0xff0f0f0d,0xee20201b,0x99000000,0x37000000, + 0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff78ff78,0xff78ff78,0xff000000,0xb0000000,0x5f000000,0x28000000, 0xffffff,0x17000000,0x43000000,0x57000000,0x59000000,0x5e000000,0x6c000000,0x8c000000,0xac000000,0xb5000000,0x99000000,0x5f000000,0x34000000,0x19000000 }; static const QRgb next_data[] = { 0x1000000,0x3000000,0x8000000,0xf000000,0x16000000,0x1b000000,0x1d000000,0x1c000000,0x19000000,0x16000000,0x12000000,0xf000000,0xb000000,0x8000000, - 0x3000000,0xa000000,0x15000000,0x30000000,0x5c0e0e0e,0x6c0c0c0c,0x59000000,0x48000000,0x41000000,0x45000000,0x44000000,0x30000000,0x1b000000,0x12000000, - 0x8000000,0x15000000,0x36000000,0x7d0a0a0a,0xebb8b8b8,0xffffffff,0xc9474747,0x95000000,0x8d000000,0xb13d3d3d,0xd7ababab,0x68000000,0x34000000,0x22000000, - 0xe000000,0x2e000000,0x7c0a0a0a,0xefb2b2b2,0xffffffff,0xffffffff,0xffffffff,0xf03c3c3c,0xea2e2e2e,0xffffffff,0xffffffff,0x9f000000,0x55000000,0x37000000, - 0x14000000,0x55000000,0xeab6b6b6,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffcfcfc,0xffffffff,0xffffffff,0xffffffff,0xca000000,0x79000000,0x4d000000, - 0x19000000,0x65000000,0xffffffff,0xffffffff,0xffececec,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xec000000,0x9a000000,0x5f000000, - 0x1b000000,0x55000000,0xc0383838,0xfee4e4e4,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xb2000000,0x6d000000, - 0x1a000000,0x44000000,0x8f000000,0xec2d2d2d,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xc2000000,0x76000000, - 0x17000000,0x3e000000,0x86000000,0xe62f2f2f,0xffffffff,0xffffffff,0xffffffff,0xfff8f8f8,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xc2000000,0x75000000, - 0x14000000,0x41000000,0xab3f3f3f,0xfde1e1e1,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xb3000000,0x6c000000, - 0x11000000,0x3e000000,0xc99a9a9a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xed000000,0x9b000000,0x5d000000, + 0x3000000,0xa000000,0x15000000,0x30000000,0x5c171717,0x6c141414,0x59000000,0x48000000,0x41000000,0x45000000,0x44000000,0x30000000,0x1b000000,0x12000000, + 0x8000000,0x15000000,0x36000000,0x7d121212,0xebc3c3c3,0xffffffff,0xc9595959,0x95000000,0x8d000000,0xb14e4e4e,0xd7b7b7b7,0x68000000,0x34000000,0x22000000, + 0xe000000,0x2e000000,0x7c121212,0xefbdbdbd,0xffffffff,0xffffffff,0xffffffff,0xf04d4d4d,0xea3e3e3e,0xffffffff,0xffffffff,0x9f000000,0x55000000,0x37000000, + 0x14000000,0x55000000,0xeac1c1c1,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xffffffff,0xffffffff,0xffffffff,0xca000000,0x79000000,0x4d000000, + 0x19000000,0x65000000,0xffffffff,0xffffffff,0xffefefef,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xec000000,0x9a000000,0x5f000000, + 0x1b000000,0x55000000,0xc0494949,0xfee8e8e8,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xb2000000,0x6d000000, + 0x1a000000,0x44000000,0x8f000000,0xec3d3d3d,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xc2000000,0x76000000, + 0x17000000,0x3e000000,0x86000000,0xe63f3f3f,0xffffffff,0xffffffff,0xffffffff,0xfff9f9f9,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xc2000000,0x75000000, + 0x14000000,0x41000000,0xab505050,0xfde6e6e6,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xb3000000,0x6c000000, + 0x11000000,0x3e000000,0xc9a8a8a8,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xed000000,0x9b000000,0x5d000000, 0xe000000,0x2d000000,0x63000000,0x9b000000,0xc6000000,0xea000000,0xff000000,0xff000000,0xff000000,0xff000000,0xed000000,0xbc000000,0x7a000000,0x49000000, 0xa000000,0x1a000000,0x32000000,0x52000000,0x76000000,0x97000000,0xb0000000,0xc1000000,0xc1000000,0xb3000000,0x9b000000,0x7a000000,0x52000000,0x31000000, 0x7000000,0x11000000,0x20000000,0x35000000,0x4b000000,0x5e000000,0x6c000000,0x75000000,0x74000000,0x6c000000,0x5d000000,0x49000000,0x31000000,0x1d000000 }; static const unsigned char oneoverx_data[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; static const QRgb oneoverx_ctable[] = { 0xc6c6c6,0xff000000 }; static const unsigned char pass_data[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00, 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00, 0x00,0x00,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02, 0x01,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x02, 0x02,0x02,0x01,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00, 0x01,0x02,0x02,0x02,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01, 0x01,0x01,0x01,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x01, 0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x02,0x02, 0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x00,0x01, 0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00, 0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x01, 0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00 }; static const QRgb pass_ctable[] = { 0xc6c6c6,0xff000000,0xffffff00 }; static const QRgb paste_data[] = { - 0xffffff,0x0,0x0,0x0,0x38000000,0xff000000,0xff000000,0xff000000,0x57000000,0x0,0x0,0x0,0x0,0x8e8e8e, - 0xffffff,0x0,0x8b000000,0xaa000000,0xc4141414,0xff979797,0xffadadad,0xffa1a1a1,0xcd232323,0xa9000000,0x9e000000,0x0,0x0,0x272829, - 0xffffff,0x8e000000,0xe3292929,0xff656565,0xff1b1b1b,0xffbbbbbb,0xffbababa,0xffc2c2c2,0xff2b2b2b,0xff4e4e4e,0xe2202020,0xb0000000,0x221808,0x241907, - 0xffffff,0xac000000,0xfc838383,0xfe7f7f7f,0xff535353,0xff565656,0xff4c4c4c,0xff4a4a4a,0xff464747,0xff5d5d5b,0xfb383839,0xda000000,0x2a1e0a,0x362812, - 0xffffff,0xa7000000,0xff808080,0xff6e6e6e,0xff6a6a6a,0xff403f3d,0xff111010,0xff32312f,0xff24211d,0xff6b6354,0xff35332d,0xd4000000,0x291d0a,0x342711, - 0xffffff,0xa7000000,0xff7f7f7f,0xff6e6e6e,0xff696968,0xff32322f,0xff716f6b,0xffffffff,0xffcebea4,0xfffcfaf4,0xff928b7e,0xd8110c02,0x271b08,0x352812, - 0xffffff,0xa7000000,0xff7f7f7f,0xff6e6e6e,0xff696968,0xff333330,0xff6a6965,0xfffffff4,0xffa3947a,0xffe8e5df,0xffffffff,0xf0989080,0x71281a06,0x32c200c, - 0xffffff,0xa7000000,0xff7f7f7f,0xff6e6e6e,0xff696968,0xff343331,0xff6a6863,0xfffffef1,0xff9e8e74,0xffeeebe7,0xffffffff,0xffffffff,0xfaa0998e,0x6a322612, - 0xffffff,0xa7000000,0xff7f7f7f,0xff6e6e6e,0xff696968,0xff343331,0xff686560,0xfffffbee,0xffb7a890,0xffaa9d89,0xffaea290,0xffc4b8a4,0xffa8a194,0xb2130e07, - 0xffffff,0xa7000000,0xff7f7f7f,0xff6f6f6f,0xff686767,0xff31302e,0xff64615b,0xfffcf3e6,0xffdcd1bc,0xffc7b79d,0xffc4b39a,0xfed7c7ad,0xff978f83,0xb6000000, - 0xffffff,0xa7000000,0xff818181,0xff707071,0xff6a6968,0xff343331,0xff625c53,0xffeee2ce,0xffd9cdb9,0xffdacdb8,0xffd7cab3,0xfce6d8c3,0xf2a8a299,0xbf000000, - 0xffffff,0xb1000000,0xf9686868,0xfe686868,0xff626262,0xff31302f,0xff665f53,0xfff3e3ca,0xffd8cab2,0xffd6c7af,0xffd3c5ac,0xfce6d7bf,0xf1aca497,0xb3000000, - 0xffffff,0x79000000,0xe60d0d0d,0xff262626,0xff222222,0xff070809,0xff3a3630,0xff9a907f,0xff8b8171,0xff8a8070,0xff8d8373,0xff9a907f,0xff6a665f,0xb1050402, - 0xffffff,0x0,0x6e000000,0x85000000,0x85000000,0x9018130a,0xa9342e24,0xbd2a251c,0xb81d1911,0xae1e1a11,0xae1f1b12,0xac211c14,0xae1a150d,0x68201709 + 0xffffff,0x0,0x0,0x0,0x38000000,0xff000000,0xff000000,0xff000000,0x57000000,0x0,0x0,0x0,0x0,0x9d9d9d, + 0xffffff,0x0,0x8b000000,0xaa000000,0xc41f1f1f,0xffa5a5a5,0xffb9b9b9,0xffaeaeae,0xcd313131,0xa9000000,0x9e000000,0x0,0x0,0x363738, + 0xffffff,0x8e000000,0xe3383838,0xff777777,0xff282828,0xffc5c5c5,0xffc4c4c4,0xffcbcbcb,0xff3b3b3b,0xff606060,0xe22e2e2e,0xb0000000,0x30240f,0x33250d, + 0xffffff,0xac000000,0xfc939393,0xfe8f8f8f,0xff656565,0xff686868,0xff5e5e5e,0xff5c5c5c,0xff585959,0xff6f6f6d,0xfb49494a,0xda000000,0x392b12,0x47371d, + 0xffffff,0xa7000000,0xff909090,0xff7f7f7f,0xff7b7b7b,0xff51504e,0xff1b1a1a,0xff42413f,0xff332f2a,0xff7c7566,0xff46433d,0xd4000000,0x382a12,0x45361b, + 0xffffff,0xa7000000,0xff8f8f8f,0xff7f7f7f,0xff7a7a7a,0xff42423f,0xff82807c,0xffffffff,0xffd6c8b1,0xfffdfbf6,0xffa19a8e,0xd81b1405,0x36280f,0x46371d, + 0xffffff,0xa7000000,0xff8f8f8f,0xff7f7f7f,0xff7a7a7a,0xff434340,0xff7b7a77,0xfffffff6,0xffb0a38b,0xffece9e4,0xffffffff,0xf0a69f90,0x7137270c,0x33c2e14, + 0xffffff,0xa7000000,0xff8f8f8f,0xff7f7f7f,0xff7a7a7a,0xff454341,0xff7b7a75,0xfffffef3,0xffac9d85,0xfff1eeeb,0xffffffff,0xffffffff,0xfaada79d,0x6a42351d, + 0xffffff,0xa7000000,0xff8f8f8f,0xff7f7f7f,0xff7a7a7a,0xff454341,0xff7a7772,0xfffffcf1,0xffc2b59f,0xffb6ab99,0xffbaaf9f,0xffcdc3b1,0xffb5aea3,0xb21e170d, + 0xffffff,0xa7000000,0xff8f8f8f,0xff808080,0xff7a7979,0xff41403e,0xff76736d,0xfffdf5ea,0xffe2d8c6,0xffd0c2ab,0xffcdbea8,0xfeddd0b9,0xffa59e93,0xb6000000, + 0xffffff,0xa7000000,0xff919191,0xff818182,0xff7b7a7a,0xff454341,0xff746e65,0xfff1e7d6,0xffdfd5c4,0xffe0d5c3,0xffddd2be,0xfceadecc,0xf2b5afa7,0xbf000000, + 0xffffff,0xb1000000,0xf97a7a7a,0xfe7a7a7a,0xff747474,0xff41403f,0xff787165,0xfff5e8d2,0xffded2bd,0xffddd0bb,0xffdaceb8,0xfceaddc9,0xf1b8b1a5,0xb3000000, + 0xffffff,0x79000000,0xe6161616,0xff353535,0xff303030,0xff0d0f10,0xff4b4740,0xffa89f8f,0xff9a9182,0xff9a9081,0xff9c9384,0xffa89f8f,0xff7b7871,0xb10a0805, + 0xffffff,0x0,0x6e000000,0x85000000,0x85000000,0x90241e12,0xa9453e33,0xbd393429,0xb82a251b,0xae2b271b,0xae2d281d,0xac2f291f,0xae272016,0x682e2310 }; static const QRgb paste_inactive_data[] = { - 0xffffff,0x0,0x0,0x0,0x1c000000,0x7f000000,0x7f000000,0x7f000000,0x2b000000,0x0,0x0,0x0,0x0,0x8e8e8e, - 0xffffff,0x0,0x45000000,0x55000000,0x62141414,0x7f979797,0x7fadadad,0x7fa1a1a1,0x66232323,0x54000000,0x4f000000,0x0,0x0,0x272829, - 0xffffff,0x47000000,0x71292929,0x7f656565,0x7f1b1b1b,0x7fbbbbbb,0x7fbababa,0x7fc2c2c2,0x7f2b2b2b,0x7f4e4e4e,0x71202020,0x58000000,0x221808,0x241907, - 0xffffff,0x56000000,0x7e838383,0x7f7f7f7f,0x7f535353,0x7f565656,0x7f4c4c4c,0x7f4a4a4a,0x7f464646,0x7f5c5c5c,0x7d383838,0x6d000000,0x2a1e0a,0x362812, - 0xffffff,0x53000000,0x7f808080,0x7f6e6e6e,0x7f6a6a6a,0x7f3e3e3e,0x7f101010,0x7f303030,0x7f202020,0x7f5f5f5f,0x7f313131,0x6a000000,0x291d0a,0x342711, - 0xffffff,0x53000000,0x7f7f7f7f,0x7f6e6e6e,0x7f686868,0x7f303030,0x7f6e6e6e,0x7fffffff,0x7fb9b9b9,0x7ff8f8f8,0x7f888888,0x6c090909,0x271b08,0x352812, - 0xffffff,0x53000000,0x7f7f7f7f,0x7f6e6e6e,0x7f686868,0x7f313131,0x7f676767,0x7ff9f9f9,0x7f8e8e8e,0x7fe3e3e3,0x7fffffff,0x788c8c8c,0x38171717,0x11c1c1c, - 0xffffff,0x53000000,0x7f7f7f7f,0x7f6e6e6e,0x7f686868,0x7f323232,0x7f666666,0x7ff8f8f8,0x7f898989,0x7feaeaea,0x7fffffff,0x7fffffff,0x7d979797,0x35222222, - 0xffffff,0x53000000,0x7f7f7f7f,0x7f6e6e6e,0x7f686868,0x7f323232,0x7f646464,0x7ff6f6f6,0x7fa3a3a3,0x7f999999,0x7f9f9f9f,0x7fb4b4b4,0x7f9e9e9e,0x590d0d0d, - 0xffffff,0x53000000,0x7f7f7f7f,0x7f6f6f6f,0x7f676767,0x7f2f2f2f,0x7f5f5f5f,0x7ff1f1f1,0x7fcccccc,0x7fb2b2b2,0x7fafafaf,0x7fc2c2c2,0x7f8d8d8d,0x5b000000, - 0xffffff,0x53000000,0x7f818181,0x7f707070,0x7f696969,0x7f323232,0x7f5a5a5a,0x7fdedede,0x7fc9c9c9,0x7fc9c9c9,0x7fc5c5c5,0x7ed4d4d4,0x79a0a0a0,0x5f000000, - 0xffffff,0x58000000,0x7c686868,0x7f686868,0x7f626262,0x7f303030,0x7f5c5c5c,0x7fdedede,0x7fc5c5c5,0x7fc2c2c2,0x7fbfbfbf,0x7ed2d2d2,0x78a1a1a1,0x59000000, - 0xffffff,0x3c000000,0x730d0d0d,0x7f262626,0x7f222222,0x7f080808,0x7f353535,0x7f8c8c8c,0x7f7e7e7e,0x7f7d7d7d,0x7f808080,0x7f8c8c8c,0x7f646464,0x58030303, - 0xffffff,0x0,0x37000000,0x42000000,0x42000000,0x48111111,0x542c2c2c,0x5e232323,0x5c171717,0x57171717,0x57181818,0x561a1a1a,0x57131313,0x34141414 + 0xffffff,0x0,0x0,0x0,0x1c000000,0x7f000000,0x7f000000,0x7f000000,0x2b000000,0x0,0x0,0x0,0x0,0x9d9d9d, + 0xffffff,0x0,0x45000000,0x55000000,0x621f1f1f,0x7fa5a5a5,0x7fb9b9b9,0x7faeaeae,0x66313131,0x54000000,0x4f000000,0x0,0x0,0x363738, + 0xffffff,0x47000000,0x71383838,0x7f777777,0x7f282828,0x7fc5c5c5,0x7fc4c4c4,0x7fcbcbcb,0x7f3b3b3b,0x7f606060,0x712e2e2e,0x58000000,0x30240f,0x33250d, + 0xffffff,0x56000000,0x7e939393,0x7f8f8f8f,0x7f656565,0x7f686868,0x7f5e5e5e,0x7f5c5c5c,0x7f585858,0x7f6e6e6e,0x7d494949,0x6d000000,0x392b12,0x47371d, + 0xffffff,0x53000000,0x7f909090,0x7f7f7f7f,0x7f7b7b7b,0x7f4f4f4f,0x7f1a1a1a,0x7f404040,0x7f2e2e2e,0x7f717171,0x7f414141,0x6a000000,0x382a12,0x45361b, + 0xffffff,0x53000000,0x7f8f8f8f,0x7f7f7f7f,0x7f7a7a7a,0x7f404040,0x7f7f7f7f,0x7fffffff,0x7fc4c4c4,0x7ff9f9f9,0x7f989898,0x6c101010,0x36280f,0x46371d, + 0xffffff,0x53000000,0x7f8f8f8f,0x7f7f7f7f,0x7f7a7a7a,0x7f414141,0x7f797979,0x7ffafafa,0x7f9d9d9d,0x7fe8e8e8,0x7fffffff,0x789b9b9b,0x38232323,0x1292929, + 0xffffff,0x53000000,0x7f8f8f8f,0x7f7f7f7f,0x7f7a7a7a,0x7f424242,0x7f787878,0x7ff9f9f9,0x7f999999,0x7feeeeee,0x7fffffff,0x7fffffff,0x7da5a5a5,0x35303030, + 0xffffff,0x53000000,0x7f8f8f8f,0x7f7f7f7f,0x7f7a7a7a,0x7f424242,0x7f767676,0x7ff8f8f8,0x7fb0b0b0,0x7fa7a7a7,0x7fadadad,0x7fbfbfbf,0x7facacac,0x59161616, + 0xffffff,0x53000000,0x7f8f8f8f,0x7f808080,0x7f797979,0x7f3f3f3f,0x7f717171,0x7ff3f3f3,0x7fd4d4d4,0x7fbdbdbd,0x7fbbbbbb,0x7fcbcbcb,0x7f9c9c9c,0x5b000000, + 0xffffff,0x53000000,0x7f919191,0x7f818181,0x7f7a7a7a,0x7f424242,0x7f6c6c6c,0x7fe3e3e3,0x7fd1d1d1,0x7fd1d1d1,0x7fcecece,0x7edbdbdb,0x79adadad,0x5f000000, + 0xffffff,0x58000000,0x7c7a7a7a,0x7f7a7a7a,0x7f747474,0x7f404040,0x7f6e6e6e,0x7fe3e3e3,0x7fcecece,0x7fcbcbcb,0x7fc9c9c9,0x7ed9d9d9,0x78aeaeae,0x59000000, + 0xffffff,0x3c000000,0x73161616,0x7f353535,0x7f303030,0x7f0f0f0f,0x7f464646,0x7f9b9b9b,0x7f8e8e8e,0x7f8d8d8d,0x7f909090,0x7f9b9b9b,0x7f767676,0x58060606, + 0xffffff,0x0,0x37000000,0x42000000,0x42000000,0x481b1b1b,0x543c3c3c,0x5e313131,0x5c232323,0x57232323,0x57242424,0x56272727,0x571e1e1e,0x341f1f1f }; static const unsigned char pixmap_data[] = { 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x0b,0x0b, 0x0b,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x0b, 0x11,0x0c,0x0c,0x0b,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x0b,0x07,0x0c,0x11,0x0c,0x0b,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x0b,0x07,0x0c,0x00,0x00,0x0b,0x03,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, 0x03,0x03,0x0b,0x07,0x0c,0x00,0x00,0x0b,0x03,0x03,0x0b,0x10,0x10,0x12, 0x12,0x0b,0x03,0x03,0x0b,0x11,0x00,0x00,0x0b,0x03,0x03,0x03,0x0b,0x10, 0x10,0x12,0x12,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x03,0x03,0x03,0x03, 0x0b,0x07,0x07,0x00,0x0c,0x00,0x00,0x0b,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x0b,0x0b,0x0b,0x03,0x03, 0x03,0x03,0x03,0x03,0x0b,0x08,0x08,0x0e,0x0d,0x0e,0x0e,0x09,0x09,0x0b, 0x03,0x03,0x03,0x03,0x03,0x03,0x0b,0x0e,0x0e,0x0e,0x0d,0x0e,0x0e,0x09, 0x09,0x0b,0x0b,0x0b,0x03,0x03,0x03,0x03,0x0b,0x04,0x04,0x0a,0x06,0x0a, 0x0a,0x01,0x01,0x01,0x01,0x0b,0x03,0x03,0x03,0x03,0x0b,0x0a,0x0a,0x0a, 0x06,0x0a,0x0a,0x01,0x01,0x01,0x01,0x0b,0x03,0x03,0x03,0x03,0x0b,0x13, 0x13,0x02,0x0f,0x02,0x02,0x05,0x02,0x05,0x05,0x0b,0x03,0x03,0x03,0x03, 0x0b,0x13,0x13,0x02,0x0f,0x02,0x02,0x05,0x02,0x05,0x05,0x0b,0x03,0x03, 0x03,0x03,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b, 0x03,0x03,0x03,0x03 }; static const QRgb pixmap_ctable[] = { 0xffff8000,0xff008000,0xff0000c0,0xc6c6c6,0xffc0ffc0,0xff000080,0xff00ff00,0xffffdca8,0xffffffc0,0xff808000,0xff00c000,0xff000000,0xffffa858,0xffffff00, 0xffc0c000,0xff0000ff,0xffffc0c0,0xffc05800,0xffff0000,0xffc0c0ff }; static const QRgb play_data[] = { 0xc6000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xc6000000, - 0xff000000,0xffd6d6d6,0xffe1e1e1,0xffdcdcdc,0xffcfcfcf,0xffcccccc,0xffcbcbcb,0xffcbcbcb,0xffc3c3c3,0xffaeaeae,0xff939393,0xff707070,0xff414141,0xff000000, - 0xff000000,0xffc8c8c8,0xffd6d6d6,0xffc0c0c0,0xff999999,0xffa2a2a2,0xffb8b8b8,0xffbebebe,0xffb1b1b1,0xff959595,0xff707070,0xff414141,0xff2c2c2c,0xff000000, - 0xff000000,0xffb3b3b3,0xffc1c1c1,0xff9c9c9c,0xff565656,0xffacacac,0xff878787,0xffa1a1a1,0xff989898,0xff717171,0xff464646,0xff2d2d2d,0xff232323,0xff000000, - 0xff000000,0xff9b9b9b,0xffa6a6a6,0xff808080,0xff2f2f2f,0xffffffff,0xffa0a0a0,0xff6a6a6a,0xff6d6d6d,0xff484848,0xff2e2e2e,0xff252525,0xff1c1c1c,0xff000000, - 0xff000000,0xff818181,0xff868686,0xff626262,0xff1e1e1e,0xffffffff,0xffffffff,0xff949494,0xff323232,0xff2c2c2c,0xff252525,0xff1d1d1d,0xff161616,0xff000000, - 0xff000000,0xff757575,0xff737373,0xff525252,0xff181818,0xffffffff,0xffffffff,0xffffffff,0xff8f8f8f,0xff252525,0xff202020,0xff191919,0xff131313,0xff000000, - 0xff000000,0xff757575,0xff737373,0xff525252,0xff181818,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff939393,0xff202020,0xff191919,0xff131313,0xff000000, - 0xff000000,0xff686868,0xff606060,0xff404040,0xff121212,0xffffffff,0xffffffff,0xffffffff,0xff949494,0xff232323,0xff1c1c1c,0xff161616,0xff111111,0xff000000, - 0xff000000,0xff494949,0xff363636,0xff252525,0xff121212,0xffffffff,0xffffffff,0xff8f8f8f,0xff1e1e1e,0xff181818,0xff141414,0xff101010,0xff0d0d0d,0xff000000, - 0xff000000,0xff313131,0xff2b2b2b,0xff1f1f1f,0xff161616,0xffffffff,0xff898989,0xff151515,0xff131313,0xff0f0f0f,0xff0d0d0d,0xff0d0d0d,0xff0d0d0d,0xff000000, - 0xff000000,0xff292929,0xff212121,0xff191919,0xff121212,0xff868686,0xff0d0d0d,0xff0d0d0d,0xff0d0d0d,0xff0d0d0d,0xff0d0d0d,0xff0d0d0d,0xff0d0d0d,0xff000000, - 0xff000000,0xff212121,0xff171717,0xff0f0f0f,0xff0d0d0d,0xff0d0d0d,0xff0d0d0d,0xff0d0d0d,0xff0d0d0d,0xff0d0d0d,0xff0d0d0d,0xff0d0d0d,0xff0d0d0d,0xff000000, + 0xff000000,0xffdddddd,0xffe6e6e6,0xffe2e2e2,0xffd7d7d7,0xffd4d4d4,0xffd3d3d3,0xffd3d3d3,0xffcccccc,0xffbababa,0xffa2a2a2,0xff818181,0xff525252,0xff000000, + 0xff000000,0xffd1d1d1,0xffdddddd,0xffcacaca,0xffa7a7a7,0xffafafaf,0xffc3c3c3,0xffc8c8c8,0xffbdbdbd,0xffa4a4a4,0xff818181,0xff525252,0xff3c3c3c,0xff000000, + 0xff000000,0xffbebebe,0xffcbcbcb,0xffaaaaaa,0xff686868,0xffb8b8b8,0xff979797,0xffaeaeae,0xffa6a6a6,0xff828282,0xff585858,0xff3d3d3d,0xff313131,0xff000000, + 0xff000000,0xffa9a9a9,0xffb3b3b3,0xff909090,0xff3f3f3f,0xffffffff,0xffadadad,0xff7b7b7b,0xff7e7e7e,0xff5a5a5a,0xff3e3e3e,0xff343434,0xff292929,0xff000000, + 0xff000000,0xff919191,0xff969696,0xff747474,0xff2b2b2b,0xffffffff,0xffffffff,0xffa3a3a3,0xff424242,0xff3c3c3c,0xff343434,0xff2a2a2a,0xff222222,0xff000000, + 0xff000000,0xff868686,0xff848484,0xff646464,0xff242424,0xffffffff,0xffffffff,0xffffffff,0xff9e9e9e,0xff343434,0xff2e2e2e,0xff252525,0xff1e1e1e,0xff000000, + 0xff000000,0xff868686,0xff848484,0xff646464,0xff242424,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffa2a2a2,0xff2e2e2e,0xff252525,0xff1e1e1e,0xff000000, + 0xff000000,0xff7a7a7a,0xff727272,0xff515151,0xff1d1d1d,0xffffffff,0xffffffff,0xffffffff,0xffa3a3a3,0xff313131,0xff292929,0xff222222,0xff1b1b1b,0xff000000, + 0xff000000,0xff5b5b5b,0xff474747,0xff343434,0xff1d1d1d,0xffffffff,0xffffffff,0xff9e9e9e,0xff2b2b2b,0xff242424,0xff1f1f1f,0xff1a1a1a,0xff161616,0xff000000, + 0xff000000,0xff414141,0xff3b3b3b,0xff2d2d2d,0xff222222,0xffffffff,0xff999999,0xff202020,0xff1e1e1e,0xff191919,0xff161616,0xff161616,0xff161616,0xff000000, + 0xff000000,0xff383838,0xff2f2f2f,0xff252525,0xff1d1d1d,0xff969696,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff000000, + 0xff000000,0xff2f2f2f,0xff232323,0xff191919,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff000000, 0xc6000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xc6000000 }; static const QRgb play2_data[] = { 0xffffff,0x3000000,0x8000000,0x11000000,0x1a000000,0x1b000000,0x16000000,0x12000000,0xd000000,0x8000000,0x2000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0x6000000,0xf000000,0x33000000,0x86787878,0x57000000,0x38000000,0x2a000000,0x1f000000,0x14000000,0x8000000,0x2000000,0xffffff,0xffffff, - 0xffffff,0x9000000,0x19000000,0x5f000000,0xffffffff,0xdc939393,0x7f000000,0x56000000,0x3e000000,0x2a000000,0x14000000,0x8000000,0x2000000,0xffffff, - 0xffffff,0xd000000,0x24000000,0x7a000000,0xffffffff,0xffffffff,0xe98b8b8b,0xa0000000,0x72000000,0x4d000000,0x2b000000,0x14000000,0x8000000,0x2000000, - 0xffffff,0x10000000,0x2e000000,0x88000000,0xffffffff,0xffffffff,0xffffffff,0xf2868686,0xb8000000,0x7d000000,0x47000000,0x24000000,0xf000000,0x5000000, - 0xffffff,0x12000000,0x35000000,0x94000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf7838383,0xb7000000,0x69000000,0x35000000,0x17000000,0x7000000, - 0xffffff,0x14000000,0x3a000000,0x9b000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xec898989,0x84000000,0x43000000,0x1e000000,0xa000000, - 0xffffff,0x14000000,0x3c000000,0x9e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff7f7f7f,0xdb000000,0x88000000,0x49000000,0x22000000,0xb000000, - 0xffffff,0x14000000,0x3a000000,0x9b000000,0xffffffff,0xffffffff,0xffffffff,0xff7f7f7f,0xfd000000,0xc4000000,0x7a000000,0x43000000,0x1e000000,0xa000000, - 0xffffff,0x12000000,0x35000000,0x94000000,0xffffffff,0xffffffff,0xfe808080,0xf9000000,0xd7000000,0xa2000000,0x63000000,0x35000000,0x17000000,0x7000000, - 0xffffff,0x10000000,0x2e000000,0x7f000000,0xffffffff,0xf0878787,0xd5000000,0xc2000000,0xa3000000,0x78000000,0x47000000,0x24000000,0xf000000,0x5000000, - 0xffffff,0xd000000,0x24000000,0x57000000,0xa8606060,0x9c000000,0x94000000,0x85000000,0x6d000000,0x4d000000,0x2b000000,0x14000000,0x8000000,0x2000000, + 0xffffff,0x6000000,0xf000000,0x33000000,0x86898989,0x57000000,0x38000000,0x2a000000,0x1f000000,0x14000000,0x8000000,0x2000000,0xffffff,0xffffff, + 0xffffff,0x9000000,0x19000000,0x5f000000,0xffffffff,0xdca2a2a2,0x7f000000,0x56000000,0x3e000000,0x2a000000,0x14000000,0x8000000,0x2000000,0xffffff, + 0xffffff,0xd000000,0x24000000,0x7a000000,0xffffffff,0xffffffff,0xe99a9a9a,0xa0000000,0x72000000,0x4d000000,0x2b000000,0x14000000,0x8000000,0x2000000, + 0xffffff,0x10000000,0x2e000000,0x88000000,0xffffffff,0xffffffff,0xffffffff,0xf2969696,0xb8000000,0x7d000000,0x47000000,0x24000000,0xf000000,0x5000000, + 0xffffff,0x12000000,0x35000000,0x94000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf7939393,0xb7000000,0x69000000,0x35000000,0x17000000,0x7000000, + 0xffffff,0x14000000,0x3a000000,0x9b000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xec999999,0x84000000,0x43000000,0x1e000000,0xa000000, + 0xffffff,0x14000000,0x3c000000,0x9e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff8f8f8f,0xdb000000,0x88000000,0x49000000,0x22000000,0xb000000, + 0xffffff,0x14000000,0x3a000000,0x9b000000,0xffffffff,0xffffffff,0xffffffff,0xff8f8f8f,0xfd000000,0xc4000000,0x7a000000,0x43000000,0x1e000000,0xa000000, + 0xffffff,0x12000000,0x35000000,0x94000000,0xffffffff,0xffffffff,0xfe909090,0xf9000000,0xd7000000,0xa2000000,0x63000000,0x35000000,0x17000000,0x7000000, + 0xffffff,0x10000000,0x2e000000,0x7f000000,0xffffffff,0xf0979797,0xd5000000,0xc2000000,0xa3000000,0x78000000,0x47000000,0x24000000,0xf000000,0x5000000, + 0xffffff,0xd000000,0x24000000,0x57000000,0xa8727272,0x9c000000,0x94000000,0x85000000,0x6d000000,0x4d000000,0x2b000000,0x14000000,0x8000000,0x2000000, 0xffffff,0x9000000,0x19000000,0x2f000000,0x48000000,0x5a000000,0x5a000000,0x50000000,0x3e000000,0x2a000000,0x14000000,0x8000000,0x2000000,0xffffff, 0xffffff,0x6000000,0xf000000,0x1a000000,0x25000000,0x31000000,0x31000000,0x2a000000,0x1f000000,0x14000000,0x8000000,0x2000000,0xffffff,0xffffff }; static const QRgb programs_data[] = { 0x0,0x0,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x0,0x6000000,0x0,0xb2b2b2,0x0,0xf9e07c, 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0xf9e07c, 0x0,0xff000000,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff000000,0x0,0xf9e07c, 0x0,0xff000000,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff000000,0x0,0x0, 0x1000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xdb,0x0, 0x0,0xff000000,0xffffffff,0xff5743cc,0xffffffff,0xffd1aa10,0xffdd3ee0,0xffffffff,0xff5743cc,0xff49cccc,0xffffffff,0xff000000,0xdb,0x0, 0x0,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffffff,0x0, 0x0,0xff000000,0xffffffff,0xffdd3ee0,0xffffffff,0xff3fdb80,0xff49cccc,0xffffffff,0xff9740d6,0xffdd3ee0,0xffffffff,0xff000000,0xffffff,0x0, 0x1000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffffff,0x0, 0x1b000000,0xff000000,0xffffffff,0xffadcc47,0xffffffff,0xff49cccc,0xff9740d6,0xffffffff,0xffcc4b85,0xffd1aa10,0xffffffff,0xff000000,0xffffff,0x0, 0x0,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffffff,0x0, 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffffff,0x0, 0x0,0x7000000,0x2000000,0xd000000,0x15000000,0x15000000,0x15000000,0x13000000,0x17000000,0x17000000,0x17000000,0x17000000,0xffffff,0x0, 0x0,0xa8a8a8,0xb2b2b2,0xb2b2b2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 }; static const QRgb quit_icon_data[] = { - 0xffffff,0xffffff,0xffffff,0x55e39797,0xa2e28f8f,0xdbe17f7f,0xfbe16c6c,0xded54d4d,0xabc42f2f,0x65aa1313,0xf000000,0x4000000,0xffffff,0xffffff, - 0xffffff,0x18e39e9e,0x8fe7a3a3,0xfceea7a7,0xffeb9c9c,0xffe68282,0xffe16767,0xffda4848,0xffd63232,0xfdce1010,0xac960000,0x36490000,0x9000000,0x1000000, - 0xffffff,0x8fe7a3a3,0xffeea8a8,0xfff8dcdc,0xfffae6e6,0xffe57f7f,0xffdf5d5d,0xffda4747,0xfff5cbcb,0xffe89f9f,0xffa70000,0xb8700000,0x2a000000,0x9000000, - 0x55e39797,0xfceea7a7,0xfff8dcdc,0xffffffff,0xffffffff,0xfff8dcdc,0xffde5a5a,0xfff5cfcf,0xffffffff,0xffffffff,0xffd79e9e,0xfe830b0b,0x943e0000,0x22000000, - 0xa2e28f8f,0xffeb9c9c,0xfffae6e6,0xffffffff,0xffffffff,0xffffffff,0xfffdf4f4,0xffffffff,0xffffffff,0xffffffff,0xffe3c5c5,0xff6f0d0d,0xd5410000,0x48000000, - 0xdbe17f7f,0xffe68282,0xffe57f7f,0xfff8dcdc,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe6c5c5,0xff750d0d,0xff510000,0xf2390000,0x69000000, - 0xfbe16c6c,0xffe16767,0xffdf5d5d,0xffde5a5a,0xfffdf4f4,0xffffffff,0xffffffff,0xffffffff,0xfffbf2f2,0xff8a1919,0xff580000,0xff3a0000,0xfe320000,0x7e000000, - 0xded54d4d,0xffda4848,0xffda4747,0xfff5cfcf,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffdcc5c5,0xff480d0d,0xff330000,0xf42d0000,0x87000000, - 0xabc42f2f,0xffd42727,0xfff3c2c2,0xffffffff,0xffffffff,0xffffffff,0xfffbf2f2,0xffffffff,0xffffffff,0xffffffff,0xffc9bbbb,0xff330000,0xe3230000,0x7e000000, - 0x65aa1313,0xfdcc0606,0xffd95f5f,0xffffffff,0xffffffff,0xffe6c6c6,0xff8b1b1b,0xffddc6c6,0xffffffff,0xffffffff,0xff7f5f5f,0xfe330000,0xc7150000,0x69000000, - 0xf000000,0xac960000,0xffa70000,0xffbd6060,0xffdebbbb,0xff760e0e,0xff580000,0xff490e0e,0xffc9bbbb,0xff806060,0xff330000,0xdf200000,0x93000000,0x48000000, - 0x4000000,0x36490000,0xb8700000,0xfe7d0000,0xff670000,0xff510000,0xff3a0000,0xff330000,0xff330000,0xfe330000,0xdf200000,0xa7070000,0x62000000,0x22000000, - 0xffffff,0x9000000,0x2a000000,0x943e0000,0xd5410000,0xf2390000,0xfe320000,0xf42d0000,0xe3230000,0xc7150000,0x93000000,0x62000000,0x2a000000,0x9000000, + 0xffffff,0xffffff,0xffffff,0x55e8a5a5,0xa2e79e9e,0xdbe68f8f,0xfbe67d7d,0xdedc5f5f,0xabcd3f3f,0x65b61e1e,0xf000000,0x4000000,0xffffff,0xffffff, + 0xffffff,0x18e8acac,0x8febb0b0,0xfcf1b4b4,0xffeeaaaa,0xffea9292,0xffe67979,0xffe05a5a,0xffdd4242,0xfdd61a1a,0xaca40000,0x365b0000,0x9000000,0x1000000, + 0xffffff,0x8febb0b0,0xfff1b5b5,0xfff9e2e2,0xfffbeaea,0xffe98f8f,0xffe46f6f,0xffe05959,0xfff7d3d3,0xffecadad,0xffb40000,0xb8810000,0x2a000000,0x9000000, + 0x55e8a5a5,0xfcf1b4b4,0xfff9e2e2,0xffffffff,0xffffffff,0xfff9e2e2,0xffe36c6c,0xfff7d7d7,0xffffffff,0xffffffff,0xffddacac,0xfe931313,0x944f0000,0x22000000, + 0xa2e79e9e,0xffeeaaaa,0xfffbeaea,0xffffffff,0xffffffff,0xffffffff,0xfffdf6f6,0xffffffff,0xffffffff,0xffffffff,0xffe8cece,0xff801616,0xd5520000,0x48000000, + 0xdbe68f8f,0xffea9292,0xffe98f8f,0xfff9e2e2,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffeacece,0xff861616,0xff630000,0xf24a0000,0x69000000, + 0xfbe67d7d,0xffe67979,0xffe46f6f,0xffe36c6c,0xfffdf6f6,0xffffffff,0xffffffff,0xffffffff,0xfffcf4f4,0xff9a2525,0xff6a0000,0xff4b0000,0xfe420000,0x7e000000, + 0xdedc5f5f,0xffe05a5a,0xffe05959,0xfff7d7d7,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe2cece,0xff5a1616,0xff430000,0xf43d0000,0x87000000, + 0xabcd3f3f,0xffdb3636,0xfff5cbcb,0xffffffff,0xffffffff,0xffffffff,0xfffcf4f4,0xffffffff,0xffffffff,0xffffffff,0xffd1c5c5,0xff430000,0xe3310000,0x7e000000, + 0x65b61e1e,0xfdd40c0c,0xffdf7171,0xffffffff,0xffffffff,0xffeacfcf,0xff9a2828,0xffe3cfcf,0xffffffff,0xffffffff,0xff8f7171,0xfe430000,0xc7200000,0x69000000, + 0xf000000,0xaca40000,0xffb40000,0xffc77272,0xffe3c5c5,0xff871717,0xff6a0000,0xff5b1717,0xffd1c5c5,0xff907272,0xff430000,0xdf2e0000,0x93000000,0x48000000, + 0x4000000,0x365b0000,0xb8810000,0xfe8d0000,0xff790000,0xff630000,0xff4b0000,0xff430000,0xff430000,0xfe430000,0xdf2e0000,0xa70d0000,0x62000000,0x22000000, + 0xffffff,0x9000000,0x2a000000,0x944f0000,0xd5520000,0xf24a0000,0xfe420000,0xf43d0000,0xe3310000,0xc7200000,0x93000000,0x62000000,0x2a000000,0x9000000, 0xffffff,0x1000000,0x9000000,0x22000000,0x48000000,0x69000000,0x7e000000,0x87000000,0x7e000000,0x69000000,0x48000000,0x22000000,0x9000000,0x1000000 }; static const QRgb repeat_data[] = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0xff000000,0xff000000,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0xff000000,0x0, 0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0, 0x0,0xff000000,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0xff000000,0xff000000,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0 }; static const unsigned char reset_data[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x01,0x01,0x00,0x00,0x00,0x01,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x01, 0x01,0x02,0x02,0x01,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x01,0x00,0x01, 0x01,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02, 0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x01,0x01,0x01, 0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00, 0x00,0x01,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x02,0x02, 0x01,0x00,0x00,0x00,0x01,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x01, 0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00 }; static const QRgb reset_ctable[] = { 0xc6c6c6,0xff000000,0xffff0000 }; static const QRgb right_data[] = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0 }; static const QRgb rotate_data[] = { 0xb000000,0x16000000,0x26000000,0x3f000000,0x5d000000,0x75000000,0x84000000,0x84000000,0x75000000,0x5d000000,0x3f000000,0x26000000,0x16000000,0xb000000, - 0x18000000,0x2e000000,0x55000000,0x98313131,0xd9848484,0xf5bebebe,0xfdececec,0xfdececec,0xf5bebebe,0xda838383,0x99303030,0x56000000,0x2e000000,0x18000000, - 0x2d000000,0x5b000000,0xb5505050,0xf4b8b8b8,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf4b8b8b8,0xb6505050,0x5c000000,0x2e000000, - 0x4c000000,0xa12e2e2e,0xf5b7b7b7,0xffffffff,0xfee3e3e3,0xf8939393,0xf24c4c4c,0xf34c4c4c,0xfa929292,0xffe2e2e2,0xffffffff,0xf6b6b6b6,0xa52d2d2d,0x50000000, - 0x70000000,0xe0808080,0xffffffff,0xfee3e3e3,0xf0545454,0xdc000000,0xd9000000,0xde000000,0xeb000000,0xfca9a9a9,0xffe2e2e2,0xffffffff,0xe37e7e7e,0x77000000, - 0x8e000000,0xf7bdbdbd,0xffffffff,0xf8939393,0xd5000000,0xc1000000,0xb9000000,0xc2000000,0xdc000000,0xf4000000,0xffc7c7c7,0xffffffff,0xf9bbbbbb,0x9e000000, - 0xa1000000,0xfeebebeb,0xffffffff,0xee4d4d4d,0xc1000000,0xa4000000,0x97000000,0xa5000000,0xe68d8d8d,0xfbc2c2c2,0xffefefef,0xffdfdfdf,0xfde1e1e1,0xd7979797, - 0xa8000000,0xfeebebeb,0xffffffff,0xec4e4e4e,0xb5000000,0x8e000000,0x7a000000,0x84000000,0xb1000000,0xf0878787,0xfdc1c1c1,0xfee0e0e0,0xee888888,0x9c000000, - 0xa2000000,0xfabbbbbb,0xffffffff,0xf7949494,0xbd000000,0x8e000000,0x74000000,0x74000000,0x90000000,0xbd000000,0xed898989,0xec898989,0xb2000000,0x76000000, - 0x90000000,0xeb7a7a7a,0xffffffff,0xfee3e3e3,0xe8575757,0xb3000000,0x95000000,0x8a000000,0x94000000,0xac000000,0xbe000000,0xb2000000,0x89000000,0x5a000000, - 0x77000000,0xc5262626,0xfab4b4b4,0xffffffff,0xfee3e3e3,0xf4959595,0xdf525252,0xd5565656,0xc2000000,0xe58d8d8d,0xe38f8f8f,0xd3999999,0x70000000,0x43000000, - 0x5c000000,0x94000000,0xd8434343,0xfab4b4b4,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0bbbbbb,0xaf535353,0x5a000000,0x32000000, - 0x42000000,0x6b000000,0x9c000000,0xce242424,0xef777777,0xfbbababa,0xfeebebeb,0xfeebebeb,0xf8bcbcbc,0xe47d7d7d,0xac2b2b2b,0x6b000000,0x3d000000,0x22000000, + 0x18000000,0x2e000000,0x55000000,0x98414141,0xd9949494,0xf5c8c8c8,0xfdefefef,0xfdefefef,0xf5c8c8c8,0xda939393,0x99404040,0x56000000,0x2e000000,0x18000000, + 0x2d000000,0x5b000000,0xb5626262,0xf4c3c3c3,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf4c3c3c3,0xb6626262,0x5c000000,0x2e000000, + 0x4c000000,0xa13e3e3e,0xf5c2c2c2,0xffffffff,0xfee8e8e8,0xf8a2a2a2,0xf25e5e5e,0xf35e5e5e,0xfaa1a1a1,0xffe7e7e7,0xffffffff,0xf6c1c1c1,0xa53d3d3d,0x50000000, + 0x70000000,0xe0909090,0xffffffff,0xfee8e8e8,0xf0666666,0xdc000000,0xd9000000,0xde000000,0xeb000000,0xfcb6b6b6,0xffe7e7e7,0xffffffff,0xe38e8e8e,0x77000000, + 0x8e000000,0xf7c7c7c7,0xffffffff,0xf8a2a2a2,0xd5000000,0xc1000000,0xb9000000,0xc2000000,0xdc000000,0xf4000000,0xffd0d0d0,0xffffffff,0xf9c5c5c5,0x9e000000, + 0xa1000000,0xfeeeeeee,0xffffffff,0xee5f5f5f,0xc1000000,0xa4000000,0x97000000,0xa5000000,0xe69c9c9c,0xfbcbcbcb,0xfff2f2f2,0xffe4e4e4,0xfde6e6e6,0xd7a5a5a5, + 0xa8000000,0xfeeeeeee,0xffffffff,0xec606060,0xb5000000,0x8e000000,0x7a000000,0x84000000,0xb1000000,0xf0979797,0xfdcbcbcb,0xfee5e5e5,0xee989898,0x9c000000, + 0xa2000000,0xfac5c5c5,0xffffffff,0xf7a3a3a3,0xbd000000,0x8e000000,0x74000000,0x74000000,0x90000000,0xbd000000,0xed999999,0xec999999,0xb2000000,0x76000000, + 0x90000000,0xeb8b8b8b,0xffffffff,0xfee8e8e8,0xe8696969,0xb3000000,0x95000000,0x8a000000,0x94000000,0xac000000,0xbe000000,0xb2000000,0x89000000,0x5a000000, + 0x77000000,0xc5353535,0xfabfbfbf,0xffffffff,0xfee8e8e8,0xf4a4a4a4,0xdf646464,0xd5686868,0xc2000000,0xe59c9c9c,0xe39e9e9e,0xd3a7a7a7,0x70000000,0x43000000, + 0x5c000000,0x94000000,0xd8545454,0xfabfbfbf,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0c5c5c5,0xaf656565,0x5a000000,0x32000000, + 0x42000000,0x6b000000,0x9c000000,0xce333333,0xef888888,0xfbc4c4c4,0xfeeeeeee,0xfeeeeeee,0xf8c6c6c6,0xe48d8d8d,0xac3b3b3b,0x6b000000,0x3d000000,0x22000000, 0x2b000000,0x48000000,0x6a000000,0x8e000000,0xac000000,0xbf000000,0xc5000000,0xbf000000,0xac000000,0x90000000,0x6a000000,0x45000000,0x29000000,0x16000000 }; static const QRgb start_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xff000000,0xffffff,0xffffff,0xffffff,0xffffff,0x7a5a6163,0xff000000,0xff000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0xff000000,0xffffff,0xffffff,0xffffff,0x7a5a6163,0xfc151717,0xffffffff,0xff000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0xff000000,0xffffff,0xffffff,0x7a5a6163,0xfc151717,0xffffffff,0xfffbfbfb,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0xff000000,0xffffff,0x7a5a6163,0xfc151717,0xffffffff,0xffffffff,0xfff7f7f7,0xff000000,0xff000000,0xff000000,0xff000000,0x24000000,0xc000000, - 0xffffff,0xff000000,0x7a5a6163,0xfc151717,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xffffffff,0xffffffff,0xfff3f3f3,0xff000000,0x6b000000,0x24000000, - 0xffffff,0xff000000,0xe0383d3e,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff4f4f4,0xfff4f4f4,0xffeaeaea,0xffcbcbcb,0xff000000,0x8f000000,0x30000000, - 0xffffff,0xff000000,0x69545a5b,0xfd151717,0xfffbfbfb,0xfffbfbfb,0xfff2f2f2,0xffd6d6d6,0xffc3c3c3,0xffbfbfbf,0xffbfbfbf,0xff000000,0x8f000000,0x30000000, - 0xffffff,0xff000000,0xd000000,0x8344494a,0xfd151617,0xfff2f2f2,0xffe9e9e9,0xffc3c3c3,0xff000000,0xff000000,0xff000000,0xff000000,0x8f000000,0x30000000, - 0xffffff,0xff000000,0x2000000,0x14000000,0x88414648,0xfe151718,0xffe4e4e4,0xffc2c2c2,0xff000000,0xb3000000,0x9b000000,0x8f000000,0x6b000000,0x24000000, - 0xffffff,0xff000000,0xffffff,0x2000000,0x14000000,0x88414648,0xfe151718,0xffcbcbcb,0xff000000,0x9b000000,0x54000000,0x30000000,0x24000000,0xc000000, - 0xffffff,0xff000000,0xffffff,0xffffff,0x2000000,0x14000000,0x88414648,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff, + 0xffffff,0xff000000,0xffffff,0xffffff,0xffffff,0xffffff,0x7a6c7375,0xff000000,0xff000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff, + 0xffffff,0xff000000,0xffffff,0xffffff,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xff000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff, + 0xffffff,0xff000000,0xffffff,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xfffcfcfc,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff, + 0xffffff,0xff000000,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xffffffff,0xfff8f8f8,0xff000000,0xff000000,0xff000000,0xff000000,0x24000000,0xc000000, + 0xffffff,0xff000000,0x7a6c7375,0xfc202323,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xffffffff,0xffffffff,0xfff5f5f5,0xff000000,0x6b000000,0x24000000, + 0xffffff,0xff000000,0xe0494e4f,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff6f6f6,0xfff6f6f6,0xffeeeeee,0xffd3d3d3,0xff000000,0x8f000000,0x30000000, + 0xffffff,0xff000000,0x69666c6d,0xfd202323,0xfffcfcfc,0xfffcfcfc,0xfff4f4f4,0xffdddddd,0xffcccccc,0xffc9c9c9,0xffc9c9c9,0xff000000,0x8f000000,0x30000000, + 0xffffff,0xff000000,0xd000000,0x83565b5c,0xfd202223,0xfff4f4f4,0xffededed,0xffcccccc,0xff000000,0xff000000,0xff000000,0xff000000,0x8f000000,0x30000000, + 0xffffff,0xff000000,0x2000000,0x14000000,0x8852585a,0xfe202324,0xffe8e8e8,0xffcbcbcb,0xff000000,0xb3000000,0x9b000000,0x8f000000,0x6b000000,0x24000000, + 0xffffff,0xff000000,0xffffff,0x2000000,0x14000000,0x8852585a,0xfe202324,0xffd3d3d3,0xff000000,0x9b000000,0x54000000,0x30000000,0x24000000,0xc000000, + 0xffffff,0xff000000,0xffffff,0xffffff,0x2000000,0x14000000,0x8852585a,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x2000000,0x14000000,0x45000000,0x7b000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x2000000,0x10000000,0x26000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff }; static const QRgb stop_data[] = { 0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000, 0xf000000,0x2e000000,0x5f000000,0x7f000000,0x8d000000,0x98000000,0x9e000000,0xa2000000,0x9e000000,0x98000000,0x81000000,0x57000000,0x31000000,0x1d000000, 0x18000000,0x5f000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x98000000,0x52000000,0x31000000, 0x25000000,0x7f000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xcd000000,0x7a000000,0x49000000, 0x2e000000,0x8d000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0000000,0x9b000000,0x5d000000, 0x36000000,0x98000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xb4000000,0x6c000000, 0x3b000000,0x9e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xc4000000,0x75000000, 0x3d000000,0xa2000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xcc000000,0x7a000000, 0x3b000000,0x9e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xc4000000,0x75000000, 0x36000000,0x98000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xb4000000,0x6c000000, 0x2e000000,0x81000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xee000000,0x9b000000,0x5d000000, 0x25000000,0x57000000,0x98000000,0xcd000000,0xef000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xed000000,0xbd000000,0x7a000000,0x49000000, 0x18000000,0x31000000,0x52000000,0x7a000000,0x9b000000,0xb3000000,0xc4000000,0xcc000000,0xc4000000,0xb3000000,0x9b000000,0x7a000000,0x52000000,0x31000000, 0xf000000,0x1d000000,0x31000000,0x49000000,0x5d000000,0x6c000000,0x75000000,0x7a000000,0x75000000,0x6c000000,0x5d000000,0x49000000,0x31000000,0x1d000000 }; static const QRgb style_data[] = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0xff000000,0xff000000,0xff000000,0xffdcdcdc,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc, 0x0,0x0,0x0,0xff000000,0xff000000,0xffdcdcdc,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0xff000000,0xff000000, 0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0xff000000,0xffdcdcdc,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0, 0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0, 0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000, 0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0, 0x0,0x0,0x0,0x0 }; static const QRgb table_pattern_data[] = { 0xff598076,0xff5c857b,0xff5c857b,0xff567b72,0xff51756c,0xff577e74,0xff5d867c,0xff598076,0xff52766d,0xff51756c,0xff5a8177,0xff5f897e,0xff598076,0xff50736a, 0xff4f7269,0xff557b71,0xff5b847a,0xff5a8177,0xff588076,0xff54786f,0xff51756c,0xff577d73,0xff598076,0xff547970,0xff51746b,0xff53786e,0xff598076,0xff5d857b, 0xff577d74,0xff52766d,0xff587e74,0xff5d867b,0xff5c847a,0xff598076,0xff587f75,0xff557b71,0xff547a71,0xff587f75,0xff5a8278,0xff598177,0xff587f75,0xff587f75, 0xff598076,0xff5b8278,0xff598076,0xff587f75,0xff5f887d,0xff608b80,0xff567c73,0xff547970,0xff567c72,0xff577e74,0xff587f75,0xff5c857a,0xff608b80,0xff608b80, 0xff5e887e,0xff5c857a,0xff5a8278,0xff5a8177,0xff598076,0xff598076,0xff5b8379,0xff5a8278,0xff51746b,0xff51746b,0xff557a71,0xff587f75,0xff5a8177,0xff5d867c, 0xff608b80,0xff5d877c,0xff597f76,0xff577d74,0xff598076,0xff598076,0xff587f75,0xff577d74,0xff557a71,0xff53776e,0xff567c72,0xff567c72,0xff587f75,0xff5c847a, 0xff5c857b,0xff5f897e,0xff5f897e,0xff577c73,0xff4f726a,0xff53776e,0xff598076,0xff587f75,0xff577e74,0xff587f75,0xff587e74,0xff577d73,0xff5d867b,0xff598076, 0xff5a8278,0xff608a7f,0xff608a80,0xff608a7f,0xff5a8278,0xff50736b,0xff50736a,0xff598076,0xff5f897e,0xff5a8178,0xff557b71,0xff598076,0xff5e877c,0xff5f897e, 0xff5a8278,0xff557b71,0xff5a8278,0xff608b80,0xff5e877d,0xff577d74,0xff50746b,0xff50736a,0xff567d73,0xff5e887d,0xff608b80,0xff587f75,0xff53776e,0xff598076, 0xff618b80,0xff5f8a7f,0xff53776e,0xff51756c,0xff598076,0xff5f887e,0xff598076,0xff50736a,0xff50736b,0xff567d73,0xff5a8177,0xff5c847a,0xff5b8379,0xff547a70, 0xff51746b,0xff587f75,0xff5e877d,0xff598076,0xff51746b,0xff52766d,0xff587f75,0xff5d857b,0xff587e75,0xff53786e,0xff598076,0xff5e887d,0xff5c847a,0xff598076, 0xff587f75,0xff53786f,0xff52766c,0xff587e74,0xff598076,0xff547970,0xff587e74,0xff577e75,0xff598076,0xff5a8278,0xff598076,0xff598076,0xff5e887e,0xff608b80, 0xff5b8379,0xff587f75,0xff577e74,0xff567b72,0xff557b72,0xff598076,0xff598177,0xff598076,0xff5e887e,0xff5c857a,0xff5a8278,0xff598076,0xff587f75,0xff587f75, 0xff598177,0xff587f75,0xff547a71,0xff53786f,0xff567b72,0xff587f75,0xff5b8278,0xff5e887d,0xff618b80,0xff608a7f,0xff598177,0xff587e74,0xff598076,0xff598076, 0xff587f75,0xff577d74,0xff557a71,0xff53776e,0xff51746b,0xff52756c,0xff557b72,0xff5b8379,0xff608b80,0xff638e83,0xff608b80,0xff5d867c,0xff50736b,0xff52766d, 0xff587f75,0xff587f75,0xff577e74,0xff587f75,0xff598076,0xff598076,0xff577e74,0xff577e74,0xff598076,0xff5f887e,0xff638e83,0xff5e887e,0xff5a8177,0xff547a71, 0xff4f7269,0xff587e74,0xff5e887d,0xff5a8278,0xff557b72,0xff598076,0xff5e887e,0xff608a80,0xff5d867b,0xff587f75,0xff5b8278,0xff618c81,0xff608a7f,0xff598177, 0xff547970,0xff4f7169,0xff557b71,0xff5e877d,0xff618c81,0xff598076,0xff53776e,0xff587f75,0xff608a80,0xff5f897e,0xff587f75,0xff547970,0xff5a8278,0xff608b80, 0xff5c857b,0xff547970,0xff4f7169,0xff50726a }; static const unsigned char tgz_data[] = { 0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x04,0x01,0x01,0x01,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x06,0x02,0x01,0x04,0x05,0x04,0x05, 0x04,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x06,0x06,0x02,0x01,0x05,0x05, 0x05,0x05,0x05,0x04,0x05,0x04,0x01,0x01,0x02,0x06,0x06,0x06,0x01,0x04, 0x05,0x05,0x05,0x05,0x04,0x05,0x04,0x05,0x04,0x01,0x03,0x03,0x03,0x03, 0x01,0x04,0x05,0x05,0x05,0x04,0x05,0x04,0x04,0x04,0x04,0x01,0x02,0x02, 0x02,0x01,0x04,0x05,0x04,0x05,0x04,0x05,0x04,0x05,0x04,0x04,0x04,0x01, 0x02,0x02,0x02,0x01,0x05,0x04,0x05,0x04,0x05,0x04,0x05,0x04,0x05,0x04, 0x00,0x01,0x02,0x02,0x01,0x05,0x04,0x05,0x04,0x05,0x04,0x05,0x04,0x05, 0x04,0x04,0x01,0x02,0x02,0x01,0x04,0x04,0x05,0x04,0x04,0x04,0x05,0x04, 0x04,0x04,0x04,0x04,0x01,0x02,0x01,0x04,0x04,0x04,0x04,0x05,0x04,0x05, 0x04,0x05,0x04,0x05,0x04,0x04,0x01,0x02,0x01,0x00,0x04,0x04,0x04,0x04, 0x04,0x04,0x05,0x04,0x04,0x04,0x04,0x00,0x01,0x02,0x02,0x01,0x01,0x00, 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x02,0x02, 0x02,0x01,0x01,0x01,0x00,0x04,0x04,0x04,0x04,0x04,0x06,0x06,0x06,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x04,0x00,0x06,0x06, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01, 0x06,0x02,0x02,0x02 }; static const QRgb tgz_ctable[] = { 0xffc0c000,0xff000000,0xc6c6c6,0xff800000,0xffffffc0,0xffffffff,0xffff0000 }; -static const QRgb to_day_data[] = { +static const QRgb today_data[] = { 0xe000000,0x18000000,0x23000000,0x2e000000,0x35000000,0x39000000,0x3b000000,0x3b000000,0x3b000000,0x39000000,0x35000000,0x2e000000,0x23000000,0x18000000, - 0x18000000,0xff686eaf,0xff595fa6,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff343b93,0xff070f75,0x3d000000,0x2a000000, - 0x24000000,0xff595fa6,0xff394095,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff07107a,0xff050c5a,0x5a000000,0x3e000000, - 0x2e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x74000000,0x50000000, - 0x35000000,0xffffffff,0xffff5555,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffffaaaa,0xffe0e0e0,0xffa1a1a1,0x86000000,0x5c000000, - 0x39000000,0xffffffff,0xffff8e8e,0xffff5555,0xffff3939,0xffff0000,0xffff0000,0xffff5555,0xffff5555,0xffffc7c7,0xffe0e0e0,0xffa1a1a1,0x90000000,0x63000000, - 0x3b000000,0xffffffff,0xffffffff,0xffffffff,0xffffaaaa,0xffff0000,0xffff0000,0xffffffff,0xffffffff,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x95000000,0x66000000, - 0x3c000000,0xffffffff,0xffffffff,0xffffffff,0xffffaaaa,0xffff0000,0xffff0000,0xffffffff,0xffffffff,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x96000000,0x67000000, - 0x3b000000,0xffffffff,0xffffffff,0xffffffff,0xffffaaaa,0xffff0000,0xffff0000,0xffffffff,0xffffffff,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x95000000,0x66000000, - 0x39000000,0xffffffff,0xffffffff,0xffffffff,0xffffaaaa,0xffff0000,0xffff0000,0xffffffff,0xffffffff,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x90000000,0x63000000, - 0x35000000,0xffffffff,0xfffcfcfc,0xffe0e0e0,0xffea9595,0xffff0000,0xffff0000,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffc8c8c8,0xff959595,0x86000000,0x5c000000, - 0x2e000000,0xfff3f3f3,0xffbababa,0xffa1a1a1,0xffc06b6b,0xffff0000,0xffff0000,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xff959595,0xff868686,0x74000000,0x50000000, + 0x18000000,0xff686eaf,0xff595fa6,0xff4b529f,0xff4b529f,0xff4b529f,0xffea0404,0xffea0404,0xff4b529f,0xff4b529f,0xff343b93,0xff070f75,0x3d000000,0x2a000000, + 0x24000000,0xff595fa6,0xffdd6c6c,0xffea0404,0xffea0404,0xff222a89,0xff222a89,0xffdd6c6c,0xffea0404,0xffdd6c6c,0xff07107a,0xff050c5a,0x5a000000,0x3e000000, + 0x2e000000,0xffffffff,0xffea0404,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffea0404,0xffdd6c6c,0xffa1a1a1,0x74000000,0x50000000, + 0x35000000,0xffea0404,0xffdd6c6c,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffea0404,0xffa1a1a1,0x86000000,0x5c000000, + 0x39000000,0xffea0404,0xffffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffea0404,0xffa1a1a1,0x90000000,0x63000000, + 0x3b000000,0xffea0404,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffea0404,0xffa1a1a1,0x95000000,0x66000000, + 0x3c000000,0xffea0404,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffea0404,0xffa1a1a1,0x96000000,0x67000000, + 0x3b000000,0xffdd6c6c,0xffea0404,0xffffffff,0xffffffff,0xff000000,0xff000000,0xffffffff,0xffffffff,0xffdd6c6c,0xffea0404,0xffa1a1a1,0x95000000,0x66000000, + 0x39000000,0xffffffff,0xffea0404,0xffdd6c6c,0xffffffff,0xff000000,0xff000000,0xffffffff,0xffdd6c6c,0xffea0404,0xffe0e0e0,0xffa1a1a1,0x90000000,0x63000000, + 0x35000000,0xffffffff,0xfffcfcfc,0xffea0404,0xffea0404,0xffea0404,0xffea0404,0xffea0404,0xffea0404,0xffe0e0e0,0xffc8c8c8,0xff959595,0x86000000,0x5c000000, + 0x2e000000,0xfff3f3f3,0xffbababa,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xff959595,0xff868686,0x74000000,0x50000000, 0x24000000,0x3e000000,0x5a000000,0x74000000,0x86000000,0x90000000,0x95000000,0x96000000,0x95000000,0x90000000,0x86000000,0x74000000,0x5a000000,0x3e000000, 0x18000000,0x2a000000,0x3d000000,0x4f000000,0x5c000000,0x63000000,0x66000000,0x67000000,0x66000000,0x63000000,0x5c000000,0x4f000000,0x3d000000,0x2a000000 }; static const QRgb toys_data[] = { 0xffffff,0xffffff,0xcccc33,0x0,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x990099,0x663399,0x0,0x0, 0xffffff,0xccff33,0x996666,0x996666,0xff0000,0xffff0000,0xffcc9966,0xff66cccc,0xff6666cc,0xffffff,0xffffff,0xffffff,0x9966cc,0xffffff, 0xcccc33,0x0,0x0,0xffff0000,0xfff4b0b0,0xffffffff,0xff00cc00,0xff00cc00,0xff6666cc,0xff6666cc,0xff6666cc,0xffffff,0xffffff,0x660099, 0xffff33,0x0,0xffff0000,0xfff4b0b0,0xffffffff,0xffffffff,0xffb8efb8,0xff00cc00,0xff66cc99,0xff6666cc,0xff6666cc,0xff6666cc,0xffffff,0x663366, 0x0,0x0,0xffff0000,0xfff4b0b0,0xffffffff,0xffffffff,0xffb8efb8,0xff00cc00,0xff00cc00,0xff6666cc,0xff6666cc,0xff6666cc,0xffffff,0xffffff, 0x0,0xffff0000,0xffff0000,0xffff0000,0xffffffff,0xffb8efb8,0xff00cc00,0xff33cc00,0xff00cc00,0xff66cc99,0xff6666cc,0xff6666cc,0xff3366cc,0xffffff, 0x0,0xff996666,0xffff0000,0xffff0000,0xffcc9966,0xff00cc00,0xff33cc00,0xff00cc00,0xff00cc00,0xff66cccc,0xff6666cc,0xff6666cc,0xff3366cc,0xffffff, 0x0,0xff996666,0xffff0000,0xffff0000,0xffcc9966,0xff33cc00,0xff00cc00,0xff00cc00,0xff00cc00,0xff66cc99,0xff6666cc,0xff6666cc,0xff333366,0x333366, 0x0,0xff996666,0xff996666,0xffff0000,0xffcc9966,0xff00cc00,0xff00cc00,0xff00cc00,0xff00cc00,0xff66cccc,0xff6666cc,0xff6666cc,0xff336666,0x0, 0x0,0xff663333,0xff996666,0xffff0000,0xffff0000,0xff00cc00,0xff33cc00,0xff00cc00,0xff00cc00,0xff6666cc,0xff6666cc,0xff6666cc,0xff000000,0x0, 0xffff33,0x333333,0xff663333,0xff996666,0xffff0000,0xffcc6666,0xff00cc00,0xff00cc00,0xff66cccc,0xff6666cc,0xff6666cc,0xff663366,0x663366,0x660099, 0xcccc33,0x0,0xff000000,0xff663333,0xff996666,0xff996666,0xff497a49,0xff497a49,0xff6666cc,0xff6666cc,0xff663366,0xff000000,0x0,0x663366, 0x0,0xffff33,0x0,0x0,0xff000000,0xff663333,0xff663333,0xff663366,0xff663366,0xff663366,0xff000000,0xff000000,0xff000000,0xff000000, 0x0,0x0,0xcccc33,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000 }; static const unsigned char trash_data[] = { 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x01,0x04,0x01,0x01,0x01, 0x01,0x00,0x00,0x00,0x00,0x01,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x01, 0x06,0x06,0x03,0x01,0x00,0x00,0x00,0x01,0x02,0x03,0x06,0x05,0x05,0x05, 0x06,0x06,0x04,0x04,0x04,0x01,0x00,0x00,0x00,0x00,0x01,0x07,0x02,0x02, 0x03,0x03,0x03,0x03,0x07,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x03, 0x03,0x03,0x07,0x07,0x04,0x04,0x07,0x08,0x01,0x00,0x00,0x00,0x00,0x00, 0x01,0x03,0x05,0x03,0x02,0x09,0x07,0x07,0x04,0x08,0x01,0x00,0x00,0x00, 0x00,0x00,0x01,0x03,0x05,0x03,0x02,0x09,0x07,0x07,0x04,0x08,0x01,0x00, 0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x03,0x02,0x09,0x07,0x07,0x04,0x08, 0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x03,0x02,0x09,0x07,0x07, 0x04,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x03,0x02,0x09, 0x07,0x07,0x04,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x03, 0x02,0x09,0x07,0x07,0x04,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x03, 0x05,0x03,0x02,0x09,0x07,0x07,0x04,0x08,0x01,0x00,0x00,0x00,0x00,0x00, 0x01,0x02,0x05,0x03,0x02,0x09,0x07,0x07,0x04,0x08,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x07,0x01,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00, 0x00,0x00,0x00,0x00 }; static const QRgb trash_ctable[] = { 0xc6c6c6,0xff000000,0xffdcdcdc,0xffa0a0a4,0xff585858,0xffffffff,0xffc0c0c0,0xff808080,0xff303030,0xffa0a0a0 }; static const unsigned char txt_data[] = { @@ -5040,175 +5100,158 @@ static const QRgb underline_data[] = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0 }; static const QRgb uninstall_data[] = { 0xff,0xff3300,0xff,0xff3300,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xfff80000,0xfff80000,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfff80000,0xfff80000,0xff, 0xff,0xfff80000,0xfff80000,0xfff80000,0xff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff,0xfff80000,0xfff80000,0xfff80000,0xff, 0xff,0xff,0xfff80000,0xfff80000,0xfff80000,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xfff80000,0xfff80000,0xfff80000,0xff,0xff, 0xff,0xff,0xff,0xfff80000,0xfff80000,0xfff80000,0xffffffff,0xff00b6ff,0xfff80000,0xfff80000,0xfff80000,0xffff,0xff,0xffff, 0xff,0xffff,0xff0000ff,0xff00b6ff,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xff00b6ff,0xff0000ff,0xff,0xff, 0xff,0xff,0xff0000ff,0xff00b6ff,0xffffffff,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff,0xffff, 0xff,0xffff,0xff0000ff,0xff00b6ff,0xff00b6ff,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff,0xff, 0xff,0xff,0xff0000ff,0xff00b6ff,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xff00b6ff,0xff0000ff,0xff,0xffff, 0xff,0xffff,0xff,0xfff80000,0xfff80000,0xfff80000,0xff00b6ff,0xff00b6ff,0xfff80000,0xfff80000,0xfff80000,0xff,0xff,0xff, 0xff,0xff,0xfff80000,0xfff80000,0xfff80000,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xfff80000,0xfff80000,0xfff80000,0xff,0xffff, 0xff,0xfff80000,0xfff80000,0xfff80000,0xff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xffff,0xfff80000,0xfff80000,0xfff80000,0xff, 0xff,0xfff80000,0xfff80000,0xff,0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xfff80000,0xfff80000,0xffff, 0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xff,0xff,0xff }; static const unsigned char uninstalled_data[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03, 0x02,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x02,0x02, 0x02,0x03,0x02,0x02,0x02,0x02,0x04,0x03,0x04,0x00,0x00,0x00,0x00,0x02, 0x05,0x02,0x03,0x02,0x05,0x02,0x05,0x04,0x04,0x03,0x04,0x00,0x00,0x00, 0x00,0x05,0x05,0x05,0x03,0x05,0x05,0x05,0x05,0x05,0x04,0x03,0x03,0x00, 0x00,0x00,0x00,0x05,0x05,0x05,0x03,0x05,0x05,0x05,0x05,0x04,0x04,0x03, 0x04,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x03,0x05,0x05,0x05,0x05,0x05, 0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x03,0x05, 0x05,0x05,0x05,0x05,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05, 0x03,0x05,0x05,0x05,0x05,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; static const QRgb uninstalled_ctable[] = { 0x40ffffff,0xfff8fcf8,0xfff8b490,0xffb04400,0xfff80000,0xfff86c00 }; static const QRgb up_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x5d5e6567,0xe0383d3e,0x84545b5c,0xe000000,0x3000000,0xffffff,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0xffffff,0x5d5e6567,0xfc151717,0xffffffff,0xfd151717,0x9b474d4f,0x18000000,0x3000000,0xffffff,0xffffff,0xffffff, - 0xffffff,0xffffff,0xffffff,0x5d5e6567,0xfc151717,0xffffffff,0xffffffff,0xfffbfbfb,0xfe151718,0xa0454a4b,0x18000000,0x3000000,0xffffff,0xffffff, - 0xffffff,0xffffff,0x5d5e6567,0xfc151717,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xfff2f2f2,0xfe151718,0xa0454a4b,0x18000000,0x3000000,0xffffff, - 0xffffff,0x5d5e6567,0xfc151717,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff2f2f2,0xffe9e9e9,0xffe4e4e4,0xfe151718,0xa0454a4b,0x18000000,0x3000000, - 0xffffff,0xff000000,0xffffffff,0xfffbfbfb,0xfff7f7f7,0xfffefefe,0xfff4f4f4,0xffd6d6d6,0xffc3c3c3,0xffc2c2c2,0xffcbcbcb,0xff000000,0x49000000,0x13000000, - 0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xfff4f4f4,0xffc3c3c3,0xff000000,0xff000000,0xff000000,0xff000000,0x7c000000,0x27000000, - 0xffffff,0x24000000,0x6b000000,0x8f000000,0xff000000,0xffffffff,0xffeaeaea,0xffbfbfbf,0xff000000,0xb3000000,0x9b000000,0x8f000000,0x6b000000,0x24000000, - 0xffffff,0xc000000,0x24000000,0x30000000,0xff000000,0xfff3f3f3,0xffcbcbcb,0xffbfbfbf,0xff000000,0x9b000000,0x54000000,0x30000000,0x24000000,0xc000000, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x5d707779,0xe0494e4f,0x84666d6e,0xe000000,0x3000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0x5d707779,0xfc202323,0xffffffff,0xfd202323,0x9b595f61,0x18000000,0x3000000,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0x5d707779,0xfc202323,0xffffffff,0xffffffff,0xfffcfcfc,0xfe202324,0xa0575c5d,0x18000000,0x3000000,0xffffff,0xffffff, + 0xffffff,0xffffff,0x5d707779,0xfc202323,0xffffffff,0xffffffff,0xffffffff,0xfffcfcfc,0xfff4f4f4,0xfe202324,0xa0575c5d,0x18000000,0x3000000,0xffffff, + 0xffffff,0x5d707779,0xfc202323,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff4f4f4,0xffededed,0xffe8e8e8,0xfe202324,0xa0575c5d,0x18000000,0x3000000, + 0xffffff,0xff000000,0xffffffff,0xfffcfcfc,0xfff8f8f8,0xfffefefe,0xfff6f6f6,0xffdddddd,0xffcccccc,0xffcbcbcb,0xffd3d3d3,0xff000000,0x49000000,0x13000000, + 0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xfff6f6f6,0xffcccccc,0xff000000,0xff000000,0xff000000,0xff000000,0x7c000000,0x27000000, + 0xffffff,0x24000000,0x6b000000,0x8f000000,0xff000000,0xffffffff,0xffeeeeee,0xffc9c9c9,0xff000000,0xb3000000,0x9b000000,0x8f000000,0x6b000000,0x24000000, + 0xffffff,0xc000000,0x24000000,0x30000000,0xff000000,0xfff5f5f5,0xffd3d3d3,0xffc9c9c9,0xff000000,0x9b000000,0x54000000,0x30000000,0x24000000,0xc000000, 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0x24000000,0x6b000000,0x8f000000,0x8f000000,0x8f000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x24000000,0x30000000,0x30000000,0x30000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0x1000000,0x1000000,0x2000000,0x2000000,0x3000000,0x1000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff }; static const QRgb volume_data[] = { 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xff000000,0x6b000000,0x24000000,0xff000000,0x18000000,0xc000000,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0x8f000000,0x30000000,0x18000000,0xff000000,0x30000000,0xc000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xff000000,0x8f000000,0xff000000,0x24000000,0x3c000000,0xff000000,0x30000000, - 0xff000000,0xffcde6ff,0xffcee6ff,0xffcee6ff,0xffcde5ff,0xffcee5ff,0xffcee5ff,0xff000000,0x8f000000,0x48000000,0xff000000,0x3c000000,0xff000000,0x54000000, - 0xff000000,0xff8ec5ff,0xff8ec5ff,0xff8ec5ff,0xff8ec5ff,0xff8ec4ff,0xff8ec4ff,0xff000000,0x8f000000,0x3c000000,0xff000000,0x54000000,0xff000000,0x60000000, - 0xff000000,0xff4ea3ff,0xff4ea4ff,0xff4ea3ff,0xff4fa4ff,0xff4ea4ff,0xff4ea4ff,0xff000000,0x8f000000,0x30000000,0xff000000,0x60000000,0xff000000,0x60000000, - 0xff000000,0xff000000,0xff000000,0xff000000,0xff1d8aff,0xff1d8aff,0xff1d8aff,0xff000000,0x8f000000,0xff000000,0x3c000000,0x54000000,0xff000000,0x60000000, - 0x24000000,0x6b000000,0x8f000000,0x8f000000,0xff000000,0xff1d8aff,0xff1d8aff,0xff000000,0x8f000000,0x48000000,0x3c000000,0xff000000,0x48000000,0x54000000, - 0xc000000,0x24000000,0x30000000,0x30000000,0x48000000,0xff000000,0xff1d8aff,0xff000000,0x8f000000,0x3c000000,0xff000000,0x3c000000,0x48000000,0x30000000, + 0xff000000,0xffd5eaff,0xffd6eaff,0xffd6eaff,0xffd5e9ff,0xffd6e9ff,0xffd6e9ff,0xff000000,0x8f000000,0x48000000,0xff000000,0x3c000000,0xff000000,0x54000000, + 0xff000000,0xff9dceff,0xff9dceff,0xff9dceff,0xff9dceff,0xff9dcdff,0xff9dcdff,0xff000000,0x8f000000,0x3c000000,0xff000000,0x54000000,0xff000000,0x60000000, + 0xff000000,0xff60b0ff,0xff60b1ff,0xff60b0ff,0xff61b1ff,0xff60b1ff,0xff60b1ff,0xff000000,0x8f000000,0x30000000,0xff000000,0x60000000,0xff000000,0x60000000, + 0xff000000,0xff000000,0xff000000,0xff000000,0xff2a9aff,0xff2a9aff,0xff2a9aff,0xff000000,0x8f000000,0xff000000,0x3c000000,0x54000000,0xff000000,0x60000000, + 0x24000000,0x6b000000,0x8f000000,0x8f000000,0xff000000,0xff2a9aff,0xff2a9aff,0xff000000,0x8f000000,0x48000000,0x3c000000,0xff000000,0x48000000,0x54000000, + 0xc000000,0x24000000,0x30000000,0x30000000,0x48000000,0xff000000,0xff2a9aff,0xff000000,0x8f000000,0x3c000000,0xff000000,0x3c000000,0x48000000,0x30000000, 0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x3c000000,0xff000000,0xff000000,0x8f000000,0x30000000,0x18000000,0x3c000000,0x30000000,0xc000000, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x3c000000,0x77000000,0x6b000000,0x24000000,0xc000000,0x18000000,0xc000000,0xffffff, 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x24000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff,0xffffff }; static const QRgb wait_data[] = { - 0x1000000,0x1d000000,0xff996633,0xff996633,0xff996633,0xff996633,0xff996633,0xff996633,0xff996633,0xff996633,0xff996633,0x28000000,0xb000000,0x5000000, - 0x3000000,0x15000000,0x33000000,0xff777777,0xff7e7e7e,0xff848484,0xff8c8c8c,0xff929292,0xff989898,0xff9d9d9d,0x4b000000,0x29000000,0x12000000,0x9000000, - 0x4000000,0xc000000,0x19000000,0xff8a8a8a,0xff929292,0xff989898,0xff9f9f9f,0xffa6a6a6,0xffababab,0xffafafaf,0x41000000,0x2b000000,0x19000000,0xc000000, - 0x4000000,0xe000000,0x1d000000,0xff777777,0xff7a7a7a,0xff7e7e7e,0xff818181,0xff828282,0xff848484,0xff828282,0x4d000000,0x32000000,0x1d000000,0xe000000, - 0x4000000,0xe000000,0x1e000000,0xcc404040,0xff696969,0xff6a6a6a,0xff6b6b6b,0xff6b6b6b,0xff6a6a6a,0xda3c3c3c,0x51000000,0x34000000,0x1e000000,0xe000000, - 0x4000000,0xc000000,0x1b000000,0x31000000,0xd23d3d3d,0xff686868,0xff686868,0xff686868,0xde3a3a3a,0x6a000000,0x4f000000,0x31000000,0x1b000000,0xc000000, - 0x2000000,0xa000000,0x17000000,0x2c000000,0x48000000,0xd73e3e3e,0xff727272,0xde3d3d3d,0x78000000,0x63000000,0x48000000,0x2c000000,0x17000000,0xa000000, - 0x2000000,0x7000000,0x13000000,0x28000000,0x41000000,0xd5474747,0xff929292,0xdc494949,0x70000000,0x5b000000,0x41000000,0x28000000,0x13000000,0x7000000, - 0x2000000,0x7000000,0x13000000,0x28000000,0xce515151,0xffa0a0a0,0xffa9a9a9,0xffb1b1b1,0xdb5d5d5d,0x5b000000,0x41000000,0x28000000,0x13000000,0x7000000, - 0x2000000,0xa000000,0x17000000,0xca525252,0xff9d9d9d,0xffa1a1a1,0xffa0a0a0,0xffb7b7b7,0xffbdbdbd,0xd86a6a6a,0x48000000,0x2c000000,0x17000000,0xa000000, - 0x4000000,0xc000000,0x1b000000,0xff949494,0xff9d9d9d,0xff969696,0xff808080,0xffb7b7b7,0xffbebebe,0xffc5c5c5,0x4f000000,0x31000000,0x1b000000,0xc000000, - 0x4000000,0xe000000,0x1e000000,0xff919191,0xff898989,0xff737373,0xff6a6a6a,0xff777777,0xff7e7e7e,0xff7c7c7c,0x51000000,0x34000000,0x1e000000,0xe000000, - 0x4000000,0x19000000,0x3d000000,0xff5e5e5e,0xff575757,0xff535353,0xff535353,0xff535353,0xff535353,0xff535353,0x66000000,0x3c000000,0x1d000000,0xe000000, - 0x4000000,0x23000000,0xff996633,0xff996633,0xff996633,0xff996633,0xff996633,0xff996633,0xff996633,0xff996633,0xff996633,0x3f000000,0x19000000,0xc000000 + 0x1000000,0x1d000000,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0x28000000,0xb000000,0x5000000, + 0x3000000,0x15000000,0x33000000,0xff888888,0xff8e8e8e,0xff949494,0xff9b9b9b,0xffa1a1a1,0xffa6a6a6,0xffababab,0x4b000000,0x29000000,0x12000000,0x9000000, + 0x4000000,0xc000000,0x19000000,0xff9a9a9a,0xffa1a1a1,0xffa6a6a6,0xffadadad,0xffb3b3b3,0xffb7b7b7,0xffbbbbbb,0x41000000,0x2b000000,0x19000000,0xc000000, + 0x4000000,0xe000000,0x1d000000,0xff888888,0xff8b8b8b,0xff8e8e8e,0xff919191,0xff929292,0xff949494,0xff929292,0x4d000000,0x32000000,0x1d000000,0xe000000, + 0x4000000,0xe000000,0x1e000000,0xcc515151,0xff7a7a7a,0xff7b7b7b,0xff7c7c7c,0xff7c7c7c,0xff7b7b7b,0xda4d4d4d,0x51000000,0x34000000,0x1e000000,0xe000000, + 0x4000000,0xc000000,0x1b000000,0x31000000,0xd24e4e4e,0xff7a7a7a,0xff7a7a7a,0xff7a7a7a,0xde4b4b4b,0x6a000000,0x4f000000,0x31000000,0x1b000000,0xc000000, + 0x2000000,0xa000000,0x17000000,0x2c000000,0x48000000,0xd74f4f4f,0xff838383,0xde4e4e4e,0x78000000,0x63000000,0x48000000,0x2c000000,0x17000000,0xa000000, + 0x2000000,0x7000000,0x13000000,0x28000000,0x41000000,0xd5595959,0xffa1a1a1,0xdc5b5b5b,0x70000000,0x5b000000,0x41000000,0x28000000,0x13000000,0x7000000, + 0x2000000,0x7000000,0x13000000,0x28000000,0xce636363,0xffadadad,0xffb6b6b6,0xffbdbdbd,0xdb6f6f6f,0x5b000000,0x41000000,0x28000000,0x13000000,0x7000000, + 0x2000000,0xa000000,0x17000000,0xca646464,0xffababab,0xffaeaeae,0xffadadad,0xffc2c2c2,0xffc7c7c7,0xd87b7b7b,0x48000000,0x2c000000,0x17000000,0xa000000, + 0x4000000,0xc000000,0x1b000000,0xffa3a3a3,0xffababab,0xffa4a4a4,0xff909090,0xffc2c2c2,0xffc8c8c8,0xffcecece,0x4f000000,0x31000000,0x1b000000,0xc000000, + 0x4000000,0xe000000,0x1e000000,0xffa0a0a0,0xff999999,0xff848484,0xff7b7b7b,0xff888888,0xff8e8e8e,0xff8d8d8d,0x51000000,0x34000000,0x1e000000,0xe000000, + 0x4000000,0x19000000,0x3d000000,0xff707070,0xff696969,0xff656565,0xff656565,0xff656565,0xff656565,0xff656565,0x66000000,0x3c000000,0x1d000000,0xe000000, + 0x4000000,0x23000000,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0x3f000000,0x19000000,0xc000000 }; static const QRgb week_data[] = { 0xe000000,0x18000000,0x23000000,0x2e000000,0x35000000,0x39000000,0x3b000000,0x3b000000,0x3b000000,0x39000000,0x35000000,0x2e000000,0x23000000,0x18000000, - 0x18000000,0xff686eaf,0xff595fa6,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff343b93,0xff070f75,0x3d000000,0x2a000000, - 0x24000000,0xff595fa6,0xff394095,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff07107a,0xff050c5a,0x5a000000,0x3e000000, - 0x2e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x74000000,0x50000000, - 0x35000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffe0e0e0,0xffa1a1a1,0x86000000,0x5c000000, - 0x39000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x90000000,0x63000000, - 0x3b000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x95000000,0x66000000, - 0x3c000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x96000000,0x67000000, - 0x3b000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x95000000,0x66000000, - 0x39000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x90000000,0x63000000, - 0x35000000,0xffffffff,0xfffcfcfc,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffc8c8c8,0xff959595,0x86000000,0x5c000000, - 0x2e000000,0xfff3f3f3,0xffbababa,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xff959595,0xff868686,0x74000000,0x50000000, - 0x24000000,0x3e000000,0x5a000000,0x74000000,0x86000000,0x90000000,0x95000000,0x96000000,0x95000000,0x90000000,0x86000000,0x74000000,0x5a000000,0x3e000000, - 0x18000000,0x2a000000,0x3d000000,0x4f000000,0x5c000000,0x63000000,0x66000000,0x67000000,0x66000000,0x63000000,0x5c000000,0x4f000000,0x3d000000,0x2a000000 -}; - -static const QRgb weeklst_data[] = { - 0xe000000,0x18000000,0x23000000,0x2e000000,0x35000000,0x39000000,0x3b000000,0x3b000000,0x3b000000,0x39000000,0x35000000,0x2e000000,0x23000000,0x18000000, - 0x18000000,0xff686eaf,0xff595fa6,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff4b529f,0xff343b93,0xff070f75,0x3d000000,0x2a000000, - 0x24000000,0xff595fa6,0xff394095,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff222a89,0xff07107a,0xff050c5a,0x5a000000,0x3e000000, - 0x2e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x74000000,0x50000000, - 0x35000000,0xffffffff,0xff000000,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xff000000,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x86000000,0x5c000000, - 0x39000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x90000000,0x63000000, - 0x3b000000,0xffffffff,0xff000000,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xff000000,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x95000000,0x66000000, - 0x3c000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x96000000,0x67000000, - 0x3b000000,0xffffffff,0xff000000,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xff000000,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x95000000,0x66000000, - 0x39000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe0e0e0,0xffa1a1a1,0x90000000,0x63000000, - 0x35000000,0xffffffff,0xfffcfcfc,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffc8c8c8,0xff959595,0x86000000,0x5c000000, - 0x2e000000,0xfff3f3f3,0xffbababa,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xffa1a1a1,0xff959595,0xff868686,0x74000000,0x50000000, + 0x18000000,0xff7a7fbb,0xff6b71b3,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff454ca2,0xff0d1986,0x3d000000,0x2a000000, + 0x24000000,0xff6b71b3,0xff4a51a4,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff0d1a8b,0xff0a146c,0x5a000000,0x3e000000, + 0x2e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe5e5e5,0xffaeaeae,0x74000000,0x50000000, + 0x35000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffe5e5e5,0xffaeaeae,0x86000000,0x5c000000, + 0x39000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe5e5e5,0xffaeaeae,0x90000000,0x63000000, + 0x3b000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe5e5e5,0xffaeaeae,0x95000000,0x66000000, + 0x3c000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe5e5e5,0xffaeaeae,0x96000000,0x67000000, + 0x3b000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe5e5e5,0xffaeaeae,0x95000000,0x66000000, + 0x39000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe5e5e5,0xffaeaeae,0x90000000,0x63000000, + 0x35000000,0xffffffff,0xfffdfdfd,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffd1d1d1,0xffa4a4a4,0x86000000,0x5c000000, + 0x2e000000,0xfff5f5f5,0xffc4c4c4,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffa4a4a4,0xff969696,0x74000000,0x50000000, 0x24000000,0x3e000000,0x5a000000,0x74000000,0x86000000,0x90000000,0x95000000,0x96000000,0x95000000,0x90000000,0x86000000,0x74000000,0x5a000000,0x3e000000, 0x18000000,0x2a000000,0x3d000000,0x4f000000,0x5c000000,0x63000000,0x66000000,0x67000000,0x66000000,0x63000000,0x5c000000,0x4f000000,0x3d000000,0x2a000000 }; static const QRgb wordgame_data[] = { 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffffff, 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000, 0xff000000,0xffffffff,0xffffffff,0xffaaaaaa,0xff727272,0xffaaaaaa,0xff8e8e8e,0xff555555,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000, 0xff000000,0xffffffff,0xffaaaaaa,0xff555555,0xffffffff,0xffffffff,0xffffffff,0xffaaaaaa,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000, 0xff000000,0xffffffff,0xff555555,0xffaaaaaa,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000, 0xff000000,0xffffffff,0xff555555,0xffaaaaaa,0xffffffff,0xffffffff,0xff8e8e8e,0xff555555,0xff8e8e8e,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000, 0xff000000,0xffffffff,0xff727272,0xff8e8e8e,0xffffffff,0xffffffff,0xffffffff,0xff555555,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000, 0xff000000,0xffffffff,0xffe3e3e3,0xff555555,0xffc7c7c7,0xffffffff,0xffc7c7c7,0xff1d1d1d,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000, 0xff000000,0xffffffff,0xffffffff,0xffe3e3e3,0xff727272,0xff8e8e8e,0xff8e8e8e,0xffc7c7c7,0xffffffff,0xff737373,0xffb6b6b6,0xffffffff,0xff000000,0xff000000, 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff747474,0xff525252,0xffffffff,0xff000000,0xff000000, 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc7c7c7,0xff909090,0xffffffff,0xff000000,0xff000000, 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000, 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000 }; static const unsigned char wordgame_shapes_data[] = { 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, 0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x01,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, 0x04,0x04,0x04,0x04,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05, 0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x06,0x06,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x01,0x05,0x05,0x05,0x05,0x05, 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x03, 0x03,0x07,0x07,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x01,0x04,0x04,0x08,0x08,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, 0x04,0x04,0x01,0x05,0x05,0x07,0x07,0x05,0x05,0x05,0x05,0x05,0x05,0x05, 0x05,0x05,0x05,0x05,0x01,0x06,0x06,0x08,0x08,0x06,0x06,0x06,0x06,0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05, 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x02,0x02,0x02,0x02,0x02, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x03,0x07,0x03, 0x03,0x07,0x03,0x03,0x07,0x03,0x03,0x03,0x07,0x03,0x03,0x03,0x01,0x04, 0x08,0x04,0x04,0x08,0x04,0x04,0x08,0x04,0x04,0x04,0x08,0x04,0x04,0x04, 0x01,0x05,0x07,0x05,0x05,0x07,0x05,0x05,0x07,0x05,0x05,0x05,0x07,0x05, 0x05,0x05,0x01,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x06, @@ -5327,232 +5370,237 @@ static const unsigned char ythrootofx_data[] = { 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00, 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; static const QRgb ythrootofx_ctable[] = { 0xc6c6c6,0xff000000 }; static const unsigned char zoom_data[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04, 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x04,0x03,0x03,0x03,0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x03,0x00,0x00,0x00,0x00,0x03, 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x03, 0x03,0x03,0x03,0x00,0x00,0x00,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x03,0x04, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x00,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x03,0x03,0x03,0x03,0x04, 0x05,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x05,0x05,0x04,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x05, 0x01,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x04,0x05,0x01,0x02,0x04,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x05, 0x01,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x04,0x05,0x01,0x02,0x04,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x02, 0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; static const QRgb zoom_ctable[] = { 0xc6c6c6,0xffffa858,0xffc05800,0xff00ffff,0xff000000,0xffffdca8,0xffffffff }; +// No tr() anywhere in this file + static struct EmbedImage { int width, height, depth; const unsigned char *data; int numColors; const QRgb *colorTable; bool alpha; const char *name; } embed_image_vec[] = { { 14, 14, 32, (const unsigned char*)_to1_data, 0, 0, TRUE, "1to1" }, { 32, 32, 32, (const unsigned char*)AddressBook_data, 0, 0, TRUE, "AddressBook" }, { 32, 32, 32, (const unsigned char*)Appearance_data, 0, 0, TRUE, "Appearance" }, { 14, 14, 32, (const unsigned char*)AppsIcon_data, 0, 0, TRUE, "AppsIcon" }, { 32, 32, 32, (const unsigned char*)Calculator_data, 0, 0, TRUE, "Calculator" }, { 32, 32, 32, (const unsigned char*)Calibrate_data, 0, 0, TRUE, "Calibrate" }, { 32, 32, 32, (const unsigned char*)CityTime_data, 0, 0, TRUE, "CityTime" }, { 32, 32, 32, (const unsigned char*)Clock_data, 0, 0, TRUE, "Clock" }, { 14, 14, 32, (const unsigned char*)CloseButton_data, 0, 0, TRUE, "CloseButton" }, { 32, 32, 32, (const unsigned char*)DateBook_data, 0, 0, TRUE, "DateBook" }, { 32, 32, 32, (const unsigned char*)DateTime_data, 0, 0, TRUE, "DateTime" }, { 14, 14, 32, (const unsigned char*)DocsIcon_data, 0, 0, TRUE, "DocsIcon" }, { 32, 32, 32, (const unsigned char*)DocumentTypeExcel_data, 0, 0, TRUE, "DocumentTypeExcel" }, { 32, 32, 32, (const unsigned char*)DocumentTypeNone_data, 0, 0, TRUE, "DocumentTypeNone" }, { 32, 32, 32, (const unsigned char*)DocumentTypePowerPoint_data, 0, 0, TRUE, "DocumentTypePowerPoint" }, { 32, 32, 32, (const unsigned char*)DocumentTypeWord_data, 0, 0, TRUE, "DocumentTypeWord" }, { 32, 32, 32, (const unsigned char*)FileBrowser_data, 0, 0, TRUE, "FileBrowser" }, { 14, 14, 32, (const unsigned char*)Games_data, 0, 0, TRUE, "Games" }, - { 12, 12, 32, (const unsigned char*)Go_black_highlight_data, 0, 0, TRUE, "Go-black-highlight" }, + { 32, 32, 32, (const unsigned char*)Go_data, 0, 0, TRUE, "Go" }, { 12, 12, 32, (const unsigned char*)Go_black_data, 0, 0, TRUE, "Go-black" }, + { 12, 12, 32, (const unsigned char*)Go_black_highlight_data, 0, 0, TRUE, "Go-black-highlight" }, { 12, 12, 32, (const unsigned char*)Go_white_data, 0, 0, TRUE, "Go-white" }, - { 32, 32, 32, (const unsigned char*)Go_data, 0, 0, TRUE, "Go" }, { 32, 32, 32, (const unsigned char*)HelpBrowser_data, 0, 0, TRUE, "HelpBrowser" }, { 14, 14, 32, (const unsigned char*)HelpButton_data, 0, 0, TRUE, "HelpButton" }, { 32, 32, 32, (const unsigned char*)ImageViewer_data, 0, 0, TRUE, "ImageViewer" }, { 32, 32, 32, (const unsigned char*)Ipkg_data, 0, 0, TRUE, "Ipkg" }, { 32, 32, 32, (const unsigned char*)Language_data, 0, 0, TRUE, "Language" }, { 32, 32, 32, (const unsigned char*)Light_data, 0, 0, TRUE, "Light" }, { 32, 32, 32, (const unsigned char*)MPEGPlayer_data, 0, 0, TRUE, "MPEGPlayer" }, { 32, 32, 32, (const unsigned char*)Mindbreaker_data, 0, 0, TRUE, "Mindbreaker" }, { 32, 32, 32, (const unsigned char*)MineHunt_data, 0, 0, TRUE, "MineHunt" }, { 32, 32, 32, (const unsigned char*)NetHack_data, 0, 0, TRUE, "NetHack" }, { 28, 14, 32, (const unsigned char*)OKButton_data, 0, 0, TRUE, "OKButton" }, { 32, 32, 32, (const unsigned char*)Opera_data, 0, 0, TRUE, "Opera" }, { 32, 32, 32, (const unsigned char*)PPPConnect_data, 0, 0, TRUE, "PPPConnect" }, + { 32, 32, 32, (const unsigned char*)ParaShoot_data, 0, 0, TRUE, "ParaShoot" }, { 32, 32, 32, (const unsigned char*)Rotation_data, 0, 0, TRUE, "Rotation" }, { 14, 14, 32, (const unsigned char*)SettingsIcon_data, 0, 0, TRUE, "SettingsIcon" }, { 32, 32, 32, (const unsigned char*)Shutdown_data, 0, 0, TRUE, "Shutdown" }, { 32, 32, 32, (const unsigned char*)Snake_data, 0, 0, TRUE, "Snake" }, { 32, 32, 32, (const unsigned char*)Solitaire_data, 0, 0, TRUE, "Solitaire" }, { 32, 32, 32, (const unsigned char*)Sound_data, 0, 0, TRUE, "Sound" }, { 32, 32, 32, (const unsigned char*)SoundPlayer_data, 0, 0, TRUE, "SoundPlayer" }, { 32, 32, 32, (const unsigned char*)Spreadsheet_data, 0, 0, TRUE, "Spreadsheet" }, { 32, 32, 32, (const unsigned char*)SystemInfo_data, 0, 0, TRUE, "SystemInfo" }, { 32, 32, 32, (const unsigned char*)Terminal_data, 0, 0, TRUE, "Terminal" }, { 32, 32, 32, (const unsigned char*)Tetrix_data, 0, 0, TRUE, "Tetrix" }, { 32, 32, 32, (const unsigned char*)TextEditor_data, 0, 0, TRUE, "TextEditor" }, { 32, 32, 32, (const unsigned char*)TodoList_data, 0, 0, TRUE, "TodoList" }, { 32, 32, 32, (const unsigned char*)Tux_data, 0, 0, TRUE, "Tux" }, { 14, 14, 32, (const unsigned char*)UtilsIcon_data, 0, 0, TRUE, "UtilsIcon" }, { 32, 32, 32, (const unsigned char*)WordGame_data, 0, 0, TRUE, "WordGame" }, { 14, 14, 32, (const unsigned char*)accessories_data, 0, 0, TRUE, "accessories" }, { 16, 16, 32, (const unsigned char*)appearance_data, 0, 0, TRUE, "appearance" }, { 14, 14, 32, (const unsigned char*)back_data, 0, 0, TRUE, "back" }, { 14, 14, 32, (const unsigned char*)back_inactive_data, 0, 0, TRUE, "back_inactive" }, { 32, 32, 32, (const unsigned char*)background_data, 0, 0, TRUE, "background" }, { 14, 14, 32, (const unsigned char*)beam_data, 0, 0, TRUE, "beam" }, { 14, 14, 32, (const unsigned char*)bell_data, 0, 0, TRUE, "bell" }, { 32, 32, 8, (const unsigned char*)bg_data, 85, bg_ctable, FALSE, "bg" }, { 14, 14, 32, (const unsigned char*)binary_data, 0, 0, TRUE, "binary" }, { 16, 16, 32, (const unsigned char*)bold_data, 0, 0, TRUE, "bold" }, { 16, 16, 8, (const unsigned char*)c_src_data, 41, c_src_ctable, TRUE, "c_src" }, { 14, 14, 32, (const unsigned char*)calculator_data, 0, 0, TRUE, "calculator" }, { 16, 16, 32, (const unsigned char*)center_data, 0, 0, TRUE, "center" }, { 16, 16, 8, (const unsigned char*)citytime_icon_data, 14, citytime_icon_ctable, TRUE, "citytime_icon" }, { 14, 14, 32, (const unsigned char*)close_data, 0, 0, TRUE, "close" }, { 14, 14, 32, (const unsigned char*)copy_data, 0, 0, TRUE, "copy" }, { 14, 14, 32, (const unsigned char*)copy_inactive_data, 0, 0, TRUE, "copy_inactive" }, { 14, 14, 32, (const unsigned char*)cut_data, 0, 0, TRUE, "cut" }, { 14, 14, 32, (const unsigned char*)cut_inactive_data, 0, 0, TRUE, "cut_inactive" }, { 14, 14, 32, (const unsigned char*)datebook_icon_data, 0, 0, TRUE, "datebook_icon" }, { 14, 14, 32, (const unsigned char*)day_data, 0, 0, TRUE, "day" }, { 14, 14, 32, (const unsigned char*)done_data, 0, 0, TRUE, "done" }, - { 14, 14, 32, (const unsigned char*)down_data, 0, 0, TRUE, "down" }, { 14, 14, 32, (const unsigned char*)edit_data, 0, 0, TRUE, "edit" }, { 14, 14, 32, (const unsigned char*)editdelete_data, 0, 0, TRUE, "editdelete" }, { 14, 14, 32, (const unsigned char*)enter_data, 0, 0, TRUE, "enter" }, { 16, 16, 8, (const unsigned char*)exec_data, 11, exec_ctable, TRUE, "exec" }, { 32, 32, 8, (const unsigned char*)faded_bg_data, 40, faded_bg_ctable, TRUE, "faded_bg" }, { 14, 14, 32, (const unsigned char*)fastback_data, 0, 0, TRUE, "fastback" }, { 14, 14, 32, (const unsigned char*)fastforward_data, 0, 0, TRUE, "fastforward" }, { 14, 14, 32, (const unsigned char*)fileopen_data, 0, 0, TRUE, "fileopen" }, { 14, 14, 32, (const unsigned char*)find_data, 0, 0, TRUE, "find" }, { 14, 14, 32, (const unsigned char*)finish_data, 0, 0, TRUE, "finish" }, { 14, 14, 32, (const unsigned char*)folder_data, 0, 0, TRUE, "folder" }, { 16, 16, 8, (const unsigned char*)folder_open_data, 11, folder_open_ctable, TRUE, "folder_open" }, { 14, 14, 32, (const unsigned char*)forward_data, 0, 0, TRUE, "forward" }, { 14, 14, 32, (const unsigned char*)forward_inactive_data, 0, 0, TRUE, "forward_inactive" }, { 14, 14, 32, (const unsigned char*)fullscreen_data, 0, 0, TRUE, "fullscreen" }, { 19, 19, 32, (const unsigned char*)go_data, 0, 0, FALSE, "go" }, { 16, 16, 8, (const unsigned char*)h_src_data, 41, h_src_ctable, TRUE, "h_src" }, { 14, 14, 32, (const unsigned char*)help_icon_data, 0, 0, TRUE, "help_icon" }, { 14, 14, 32, (const unsigned char*)home_data, 0, 0, TRUE, "home" }, { 14, 14, 8, (const unsigned char*)install_data, 10, install_ctable, TRUE, "install" }, { 14, 14, 32, (const unsigned char*)installed_data, 0, 0, TRUE, "installed" }, { 16, 16, 32, (const unsigned char*)italic_data, 0, 0, TRUE, "italic" }, { 16, 16, 8, (const unsigned char*)konsole_data, 5, konsole_ctable, TRUE, "konsole" }, { 16, 16, 32, (const unsigned char*)language_data, 0, 0, TRUE, "language" }, { 32, 32, 32, (const unsigned char*)launching_data, 0, 0, TRUE, "launching" }, { 16, 16, 32, (const unsigned char*)left_data, 0, 0, TRUE, "left" }, { 14, 14, 32, (const unsigned char*)library_data, 0, 0, TRUE, "library" }, { 16, 16, 8, (const unsigned char*)locked_data, 8, locked_ctable, TRUE, "locked" }, { 16, 16, 8, (const unsigned char*)lockedfolder_data, 10, lockedfolder_ctable, TRUE, "lockedfolder" }, { 10, 10, 32, (const unsigned char*)mag_data, 0, 0, TRUE, "mag" }, { 14, 14, 32, (const unsigned char*)month_data, 0, 0, TRUE, "month" }, { 14, 14, 32, (const unsigned char*)mute_data, 0, 0, TRUE, "mute" }, { 14, 14, 32, (const unsigned char*)new_data, 0, 0, TRUE, "new" }, { 14, 14, 32, (const unsigned char*)newfolder_data, 0, 0, TRUE, "newfolder" }, { 14, 14, 32, (const unsigned char*)next_data, 0, 0, TRUE, "next" }, { 13, 11, 8, (const unsigned char*)oneoverx_data, 2, oneoverx_ctable, TRUE, "oneoverx" }, { 16, 14, 8, (const unsigned char*)pass_data, 3, pass_ctable, TRUE, "pass" }, { 14, 14, 32, (const unsigned char*)paste_data, 0, 0, TRUE, "paste" }, { 14, 14, 32, (const unsigned char*)paste_inactive_data, 0, 0, TRUE, "paste_inactive" }, { 16, 16, 8, (const unsigned char*)pixmap_data, 20, pixmap_ctable, TRUE, "pixmap" }, { 14, 14, 32, (const unsigned char*)play_data, 0, 0, TRUE, "play" }, { 14, 14, 32, (const unsigned char*)play2_data, 0, 0, TRUE, "play2" }, { 14, 14, 32, (const unsigned char*)programs_data, 0, 0, TRUE, "programs" }, { 14, 14, 32, (const unsigned char*)quit_icon_data, 0, 0, TRUE, "quit_icon" }, { 15, 15, 32, (const unsigned char*)repeat_data, 0, 0, TRUE, "repeat" }, { 14, 14, 8, (const unsigned char*)reset_data, 3, reset_ctable, TRUE, "reset" }, { 16, 16, 32, (const unsigned char*)right_data, 0, 0, TRUE, "right" }, { 14, 14, 32, (const unsigned char*)rotate_data, 0, 0, TRUE, "rotate" }, { 14, 14, 32, (const unsigned char*)start_data, 0, 0, TRUE, "start" }, { 14, 14, 32, (const unsigned char*)stop_data, 0, 0, TRUE, "stop" }, { 16, 16, 32, (const unsigned char*)style_data, 0, 0, TRUE, "style" }, { 16, 16, 32, (const unsigned char*)table_pattern_data, 0, 0, TRUE, "table_pattern" }, { 16, 16, 8, (const unsigned char*)tgz_data, 7, tgz_ctable, TRUE, "tgz" }, - { 14, 14, 32, (const unsigned char*)to_day_data, 0, 0, TRUE, "to_day" }, + { 14, 14, 32, (const unsigned char*)today_data, 0, 0, TRUE, "today" }, { 14, 14, 32, (const unsigned char*)toys_data, 0, 0, TRUE, "toys" }, { 16, 16, 8, (const unsigned char*)trash_data, 10, trash_ctable, TRUE, "trash" }, { 16, 16, 8, (const unsigned char*)txt_data, 41, txt_ctable, TRUE, "txt" }, { 16, 16, 32, (const unsigned char*)underline_data, 0, 0, TRUE, "underline" }, { 14, 14, 32, (const unsigned char*)uninstall_data, 0, 0, TRUE, "uninstall" }, { 14, 14, 8, (const unsigned char*)uninstalled_data, 6, uninstalled_ctable, TRUE, "uninstalled" }, { 14, 14, 32, (const unsigned char*)up_data, 0, 0, TRUE, "up" }, { 14, 14, 32, (const unsigned char*)volume_data, 0, 0, TRUE, "volume" }, { 14, 14, 32, (const unsigned char*)wait_data, 0, 0, TRUE, "wait" }, { 14, 14, 32, (const unsigned char*)week_data, 0, 0, TRUE, "week" }, - { 14, 14, 32, (const unsigned char*)weeklst_data, 0, 0, TRUE, "weeklst" }, { 14, 14, 32, (const unsigned char*)wordgame_data, 0, 0, TRUE, "wordgame" }, { 96, 16, 8, (const unsigned char*)wordgame_shapes_data, 9, wordgame_shapes_ctable, TRUE, "wordgame_shapes" }, { 9, 8, 8, (const unsigned char*)xtopowerofy_data, 2, xtopowerofy_ctable, TRUE, "xtopowerofy" }, { 13, 11, 8, (const unsigned char*)ythrootofx_data, 2, ythrootofx_ctable, TRUE, "ythrootofx" }, { 20, 20, 8, (const unsigned char*)zoom_data, 7, zoom_ctable, TRUE, "zoom" }, - { 0, 0, 0, 0, 0, 0, 0, 0 } }; -static const QImage& qembed_findImage( const QString& name ) +static int cmpEmbedImage(const void *a, const void *b) +{ + const EmbedImage* ea = (const EmbedImage*)a; + const EmbedImage* eb = (const EmbedImage*)b; + return strcmp(ea->name,eb->name); +} +inline const QImage& qembed_findImage(const char* name) { - static QDict<QImage> dict; - QImage* img = dict.find(name); - if ( !img ) { - for (int i=0; embed_image_vec[i].data; i++) { - if ( 0==strcmp(embed_image_vec[i].name, name) ) { - img = new QImage((uchar*)embed_image_vec[i].data, - embed_image_vec[i].width, - embed_image_vec[i].height, - embed_image_vec[i].depth, - (QRgb*)embed_image_vec[i].colorTable, - embed_image_vec[i].numColors, - QImage::BigEndian - ); - if ( embed_image_vec[i].alpha ) - img->setAlphaBuffer(TRUE); - break; - } - } - if ( !img ) { - static QImage dummy; - return dummy; - } + EmbedImage key; key.name = name; + EmbedImage* r = (EmbedImage*)bsearch( &key, embed_image_vec, + sizeof(embed_image_vec)/sizeof(EmbedImage), sizeof(EmbedImage), cmpEmbedImage ); + QImage* img; + if ( r ) { + img = new QImage((uchar*)r->data, + r->width, + r->height, + r->depth, +#ifdef _WS_QWS_ + (r->width*r->depth+31)/32*4, +#endif + (QRgb*)r->colorTable, + r->numColors, + QImage::BigEndian + ); + if ( r->alpha ) + img->setAlphaBuffer(TRUE); + } else { + static QImage dummy; + img = &dummy; } return *img; } #endif diff --git a/library/inputmethodinterface.h b/library/inputmethodinterface.h index ae14218..88a121d 100644 --- a/library/inputmethodinterface.h +++ b/library/inputmethodinterface.h @@ -1,49 +1,64 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef INPUTMETHODINTERFACE_H #define INPUTMETHODINTERFACE_H #include <qpe/qcom.h> #include <qnamespace.h> #include <qstring.h> #ifndef QT_NO_COMPONENT // {637A8A14-AF98-41DA-969A-2BD16ECDA8C7} # ifndef IID_InputMethod # define IID_InputMethod QUuid( 0x637a8a14, 0xaf98, 0x41da, 0x96, 0x9a, 0x2b, 0xd1, 0x6e, 0xcd, 0xa8, 0xc7) # endif #endif class QWidget; class QPixmap; class QObject; +class QWSInputMethod; struct InputMethodInterface : public QUnknownInterface { virtual QWidget *inputMethod( QWidget *parent, Qt::WFlags f ) = 0; virtual void resetState() = 0; virtual QPixmap *icon() = 0; virtual QString name() = 0; virtual void onKeyPress( QObject *receiver, const char *slot ) = 0; }; +// {70F0991C-8282-4625-A279-BD9D7D959FF6} +#ifndef IID_ExtInputMethod +#define IID_ExtInputMethod QUuid( 0x70f0991c, 0x8282, 0x4625, 0xa2, 0x79, 0xbd, 0x9d, 0x7d, 0x95, 0x9f, 0xf6) +#endif + +struct ExtInputMethodInterface : public QUnknownInterface +{ + virtual QWSInputMethod *inputMethod() = 0; + virtual QPixmap *icon() = 0; + virtual QString name() = 0; + virtual QWidget *widget( QWidget *parent, Qt::WFlags f )= 0; +}; + + #endif diff --git a/library/ir.cpp b/library/ir.cpp index 68345d1..a7cf7b1 100644 --- a/library/ir.cpp +++ b/library/ir.cpp @@ -1,79 +1,120 @@ +/********************************************************************** +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. +** +** This file is part of the Qtopia Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + #include "ir.h" #include <qstring.h> +#ifdef QWS #include "qcopenvelope_qws.h" #include <qcopchannel_qws.h> +#endif #include "applnk.h" -/*! +/*! \class Ir ir.h \brief The Ir class implements basic support for sending objects over an infrared communication link. - - The Ir class is a small helper class to enable sending of objects over an infrared communication link. + + Both \link doclnk.html DocLnk\endlink objects and files can be + sent to another device via the infrared link using the send() + function. When the send has completed the done() signal is + emitted. + + The supported() function returns whether the device supports + infrared communication or not. + + \ingroup qtopiaemb */ /*! Constructs an Ir object. The \a parent and \a name classes are the standard QObject parameters. */ Ir::Ir( QObject *parent, const char *name ) : QObject( parent, name ) { +#ifndef QT_NO_COP ch = new QCopChannel( "QPE/Obex" ); connect( ch, SIGNAL(received(const QCString &, const QByteArray &)), this, SLOT(obexMessage( const QCString &, const QByteArray &)) ); +#endif } -/*! - Returns TRUE if the system supports infrared communication. +/*! + Returns TRUE if the system supports infrared communication; + otherwise returns FALSE. */ bool Ir::supported() { +#ifndef QT_NO_COP return QCopChannel::isRegistered( "QPE/Obex" ); +#endif } /*! - Send the object in the file \a fn over the infrared link. - The \a description will be shown to the user while - sending is in progress. - The optional \a mimetype parameter specifies the mimetype of the object. If this parameter is not - set, it will be determined by the extension of the filename. + Sends the object in file \a fn over the infrared link. The \a + description is used in the text shown to the user while sending + is in progress. The optional \a mimetype parameter specifies the + mimetype of the object. If this parameter is not set, it is + determined by the the filename's suffix. + + \sa done() */ void Ir::send( const QString &fn, const QString &description, const QString &mimetype) { if ( !filename.isEmpty() ) return; filename = fn; +#ifndef QT_NO_COP QCopEnvelope e("QPE/Obex", "send(QString,QString,QString)"); e << description << filename << mimetype; +#endif } /*! \overload Uses the DocLnk::file() and DocLnk::type() of \a doc. + + \sa done() */ void Ir::send( const DocLnk &doc, const QString &description ) { send( doc.file(), description, doc.type() ); } -/*! +/*! \fn Ir::done( Ir *ir ); - + This signal is emitted by \a ir, when the send comand has been processed. */ /*!\internal */ void Ir::obexMessage( const QCString &msg, const QByteArray &data) { if ( msg == "done(QString)" ) { QString fn; QDataStream stream( data, IO_ReadOnly ); stream >> fn; if ( fn == filename ) emit done( this ); } } - + diff --git a/library/ir.h b/library/ir.h index 33eedfe..a62f91d 100644 --- a/library/ir.h +++ b/library/ir.h @@ -1,31 +1,51 @@ +/********************************************************************** +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. +** +** This file is part of the Qtopia Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + #ifndef IR_H #define IR_H #include <qstring.h> #include <qobject.h> class DocLnk; class QCopChannel; class Ir : public QObject { Q_OBJECT public: static bool supported(); Ir( QObject *parent = 0, const char *name = 0); void send( const QString &filename, const QString &description, const QString &mimetype = QString::null ); void send( const DocLnk &doc, const QString &description ); signals: void done( Ir * ); private slots: void obexMessage( const QCString &msg, const QByteArray &data); private: QString filename; QCopChannel *ch; }; #endif diff --git a/library/library.pro b/library/library.pro index 1837b4f..af505dd 100644 --- a/library/library.pro +++ b/library/library.pro @@ -1,105 +1,108 @@ TEMPLATE = lib CONFIG += qt warn_on release HEADERS = calendar.h \ global.h \ resource.h \ xmlreader.h \ mimetype.h \ menubutton.h \ network.h \ networkinterface.h \ filemanager.h \ fontmanager.h \ qdawg.h \ datebookmonth.h \ fileselector.h \ fileselector_p.h \ imageedit.h \ qcopenvelope_qws.h \ qpedecoration_qws.h \ qpeapplication.h \ qpestyle.h \ qpedialog.h \ lightstyle.h \ config.h \ applnk.h \ sound.h \ tzselect.h \ qmath.h \ datebookdb.h \ alarmserver.h \ process.h \ password.h \ timestring.h \ fontfactoryinterface.h \ fontdatabase.h \ power.h \ storage.h \ qpemessagebox.h \ - backend/timeconversion.h \ + timeconversion.h \ qpedebug.h \ qpemenubar.h \ qpetoolbar.h \ backend/categories.h \ - backend/stringutil.h \ + stringutil.h \ backend/palmtoprecord.h \ backend/task.h \ backend/event.h \ backend/contact.h\ categorymenu.h \ categoryedit_p.h \ categoryselect.h \ categorywidget.h \ ir.h \ backend/vobject_p.h \ findwidget_p.h \ finddialog.h \ - lnkproperties.h + lnkproperties.h \ + windowdecorationinterface.h \ + textcodecinterface.h \ + imagecodecinterface.h SOURCES = calendar.cpp \ global.cpp \ xmlreader.cpp \ mimetype.cpp \ menubutton.cpp \ network.cpp \ networkinterface.cpp \ filemanager.cpp \ fontmanager.cpp \ qdawg.cpp \ datebookmonth.cpp \ fileselector.cpp \ imageedit.cpp \ resource.cpp \ qpedecoration_qws.cpp \ qcopenvelope_qws.cpp \ qpeapplication.cpp \ qpestyle.cpp \ qpedialog.cpp \ lightstyle.cpp \ config.cpp \ applnk.cpp \ sound.cpp \ tzselect.cpp \ qmath.c \ datebookdb.cpp \ alarmserver.cpp \ password.cpp \ process.cpp \ process_unix.cpp \ timestring.cpp \ fontdatabase.cpp \ power.cpp \ storage.cpp \ qpemessagebox.cpp \ backend/timeconversion.cpp \ qpedebug.cpp \ qpemenubar.cpp \ qpetoolbar.cpp \ backend/categories.cpp \ backend/stringutil.cpp \ backend/palmtoprecord.cpp \ backend/task.cpp \ backend/event.cpp \ backend/contact.cpp \ categorymenu.cpp \ categoryedit_p.cpp \ categoryselect.cpp \ diff --git a/library/lnkproperties.cpp b/library/lnkproperties.cpp index c020328..983c677 100644 --- a/library/lnkproperties.cpp +++ b/library/lnkproperties.cpp @@ -1,315 +1,309 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ // WARNING: Do *NOT* define this yourself. The SL5xxx from SHARP does NOT // have this class. #define QTOPIA_INTERNAL_FSLP #include "lnkproperties.h" #include "lnkproperties.h" #include "lnkpropertiesbase_p.h" #include "ir.h" #include <qpe/applnk.h> #include <qpe/global.h> #include <qpe/categorywidget.h> +#ifdef QWS #include <qpe/qcopenvelope_qws.h> +#endif #include <qpe/filemanager.h> #include <qpe/config.h> #include <qpe/storage.h> #include <qpe/qpemessagebox.h> #include <qlineedit.h> #include <qtoolbutton.h> #include <qpushbutton.h> #include <qgroupbox.h> #include <qcheckbox.h> #include <qlabel.h> #include <qlayout.h> #include <qfile.h> #include <qfileinfo.h> #include <qmessagebox.h> #include <qsize.h> #include <qcombobox.h> #include <qregexp.h> #include <stdlib.h> LnkProperties::LnkProperties( AppLnk* l, QWidget* parent ) : QDialog( parent, 0, TRUE ), lnk(l), fileSize( 0 ) { + setCaption( tr("Properties") ); + QVBoxLayout *vbox = new QVBoxLayout( this ); d = new LnkPropertiesBase( this ); vbox->add( d ); d->docname->setText(l->name()); QString inf; if ( l->type().isEmpty() ) { - d->type->hide(); - d->typeLabel->hide(); + d->type->hide(); + d->typeLabel->hide(); } else { - d->type->setText( l->type() ); + d->type->setText( l->type() ); } if ( l->comment().isEmpty() ) { - d->comment->hide(); - d->commentLabel->hide(); + d->comment->hide(); + d->commentLabel->hide(); } else { - d->comment->setText( l->comment() ); + d->comment->setText( l->comment() ); } connect(d->beam,SIGNAL(clicked()),this,SLOT(beamLnk())); if ( lnk->type().contains('/') ) { // A document? (#### better predicate needed) - connect(d->unlink,SIGNAL(clicked()),this,SLOT(unlinkLnk())); - connect(d->duplicate,SIGNAL(clicked()),this,SLOT(duplicateLnk())); - connect(d->delicon,SIGNAL(clicked()),this,SLOT(unlinkIcon())); - - d->docname->setReadOnly( FALSE ); - d->preload->hide(); - d->spacer->hide(); - - // ### THIS MUST GO, FIX WIERD BUG in QLAYOUT - d->categoryEdit->kludge(); - - d->categoryEdit->setCategories( lnk->categories(), - "Document View", - tr("Document View") ); - setupLocations(); + connect(d->unlink,SIGNAL(clicked()),this,SLOT(unlinkLnk())); + connect(d->duplicate,SIGNAL(clicked()),this,SLOT(duplicateLnk())); + + d->docname->setReadOnly( FALSE ); + d->preload->hide(); + d->spacer->hide(); + + // ### THIS MUST GO, FIX WIERD BUG in QLAYOUT + d->categoryEdit->kludge(); + + d->categoryEdit->setCategories( lnk->categories(), + "Document View", + tr("Document View") ); + setupLocations(); } else { - d->unlink->hide(); - d->duplicate->hide(); - d->beam->hide(); - d->hline->hide(); - d->locationLabel->hide(); - d->locationCombo->hide(); - - // Can't edit categories, since the app .desktop files are global, - // possibly read-only. - d->categoryEdit->hide(); - - d->docname->setReadOnly( TRUE ); - - if ( l->property("CanFastload") == "0" ) - d->preload->hide(); - - Config cfg("Launcher"); - cfg.setGroup("Preload"); - QStringList apps = cfg.readListEntry("Apps",','); - d->preload->setChecked( apps.contains(l->exec()) ); - if ( Global::isBuiltinCommand(lnk->exec()) ) - d->preload->hide(); // builtins are always fast - - currentLocation = 0; // apps not movable (yet) + d->unlink->hide(); + d->duplicate->hide(); + d->beam->hide(); + d->hline->hide(); + d->locationLabel->hide(); + d->locationCombo->hide(); + + // Can't edit categories, since the app .desktop files are global, + // possibly read-only. + d->categoryEdit->hide(); + + d->docname->setReadOnly( TRUE ); + + if ( l->property("CanFastload") == "0" ) + d->preload->hide(); + + Config cfg("Launcher"); + cfg.setGroup("Preload"); + QStringList apps = cfg.readListEntry("Apps",','); + d->preload->setChecked( apps.contains(l->exec()) ); + if ( Global::isBuiltinCommand(lnk->exec()) ) + d->preload->hide(); // builtins are always fast + + currentLocation = 0; // apps not movable (yet) } - setCaption( l->file()); } LnkProperties::~LnkProperties() { } void LnkProperties::unlinkLnk() { if ( QPEMessageBox::confirmDelete( this, tr("Delete"), lnk->name() ) ) { - if ( QFile::exists(lnk->file()) ) - lnk->removeFiles(); - else - QMessageBox::warning( this, tr("Delete"), tr("File does not exist.") ); - if ( QFile::exists(lnk->file()) ) { - QMessageBox::warning( this, tr("Delete"), tr("File deletion failed.") ); - } else { - reject(); - } - } -} - - -/* - * remove only the link from documents, not also the file - */ -void LnkProperties::unlinkIcon() -{ - if ( QPEMessageBox::confirmDelete( this, tr("Delete Icon and leave file"), lnk->name() ) ) { - lnk->removeLinkFile(); - if ( QFile::exists(lnk->linkFile()) ) { - QMessageBox::warning( this, tr("Delete"), tr("Icon deletion failed.") ); - } else { - reject(); - } + lnk->removeFiles(); + if ( QFile::exists(lnk->file()) ) { + QMessageBox::warning( this, tr("Delete"), tr("File deletion failed.") ); + } else { + reject(); + } } } void LnkProperties::setupLocations() { QFileInfo fi( lnk->file() ); fileSize = fi.size(); StorageInfo storage; const QList<FileSystem> &fs = storage.fileSystems(); QListIterator<FileSystem> it ( fs ); QString s; QString homeDir = getenv("HOME"); QString hardDiskHome; QString hardDiskPath; int index = 0; currentLocation = -1; for ( ; it.current(); ++it ) { - // we add 10k to the file size so we are sure we can also save the desktop file - if ( (*it)->availBlocks() * (*it)->blockSize() > fileSize + 10000 ) { - if ( (*it)->isRemovable() || - (*it)->disk() == "/dev/mtdblock1" || - (*it)->disk() == "/dev/mtdblock/1" || (*it)->disk().left(13) == "/dev/mtdblock" || - (*it)->disk() == "/dev/mtdblock6" || (*it)->disk() == "tmpfs" ) { - d->locationCombo->insertItem( (*it)->name(), index ); - locations.append( ((*it)->isRemovable() || (*it)->disk() == "/dev/mtdblock6" || (*it)->disk() == "tmpfs" ? (*it)->path() : homeDir) ); - if ( lnk->file().contains( (*it)->path() ) ) { - d->locationCombo->setCurrentItem( index ); - currentLocation = index; - } - index++; - } else if ( (*it)->name().contains( tr("Hard Disk") ) && - homeDir.contains( (*it)->path() ) && - (*it)->path().length() > hardDiskHome.length() ) { - hardDiskHome = (*it)->name(); - hardDiskPath = (*it)->path(); - } - } + // we add 10k to the file size so we are sure we can also save the desktop file + if ( (ulong)(*it)->availBlocks() * (ulong)(*it)->blockSize() > (ulong)fileSize + 10000 ) { + if ( (*it)->isRemovable() || + (*it)->disk() == "/dev/mtdblock1" || + (*it)->disk() == "/dev/mtdblock/1" || + (*it)->disk().left(13) == "/dev/mtdblock" || + (*it)->disk() == "/dev/mtdblock6" || + (*it)->disk() == "tmpfs" ) { + d->locationCombo->insertItem( (*it)->name(), index ); + locations.append( ( ((*it)->isRemovable() || + (*it)->disk() == "/dev/mtdblock6" || + (*it)->disk() == "tmpfs" ) + ? (*it)->path() : homeDir) ); + if ( lnk->file().contains( (*it)->path() ) ) { + d->locationCombo->setCurrentItem( index ); + currentLocation = index; + } + index++; + } else if ( (*it)->name().contains( tr("Hard Disk") ) && + homeDir.contains( (*it)->path() ) && + (*it)->path().length() > hardDiskHome.length() ) { + hardDiskHome = (*it)->name(); + hardDiskPath = (*it)->path(); + } + } } if ( !hardDiskHome.isEmpty() ) { - d->locationCombo->insertItem( hardDiskHome ); - locations.append( hardDiskPath ); - if ( currentLocation == -1 ) { // assume it's the hard disk - d->locationCombo->setCurrentItem( index ); - currentLocation = index; - } + d->locationCombo->insertItem( hardDiskHome ); + locations.append( hardDiskPath ); + if ( currentLocation == -1 ) { // assume it's the hard disk + d->locationCombo->setCurrentItem( index ); + currentLocation = index; + } } } void LnkProperties::duplicateLnk() { // The duplicate takes the new properties. DocLnk newdoc( *((DocLnk *)lnk) ); if ( d->docname->text() == lnk->name() ) - newdoc.setName(tr("Copy of ")+d->docname->text()); + newdoc.setName(tr("Copy of ")+d->docname->text()); else - newdoc.setName(d->docname->text()); + newdoc.setName(d->docname->text()); if ( !copyFile( newdoc ) ) { - QMessageBox::warning( this, tr("Duplicate"), tr("File copy failed.") ); - return; + QMessageBox::warning( this, tr("Duplicate"), tr("File copy failed.") ); + return; } reject(); } bool LnkProperties::moveLnk() { DocLnk newdoc( *((DocLnk *)lnk) ); newdoc.setName(d->docname->text()); if ( !copyFile( newdoc ) ) { - QMessageBox::warning( this, tr("Details"), tr("Moving Document failed.") ); - return FALSE; + QMessageBox::warning( this, tr("Details"), tr("Moving Document failed.") ); + return FALSE; } // remove old lnk lnk->removeFiles(); return TRUE; } void LnkProperties::beamLnk() { Ir ir; DocLnk doc( *((DocLnk *)lnk) ); + doc.setName(d->docname->text()); + reject(); ir.send( doc, doc.comment() ); } bool LnkProperties::copyFile( DocLnk &newdoc ) { const char *linkExtn = ".desktop"; QString fileExtn; int extnPos = lnk->file().findRev( '.' ); if ( extnPos > 0 ) - fileExtn = lnk->file().mid( extnPos ); + fileExtn = lnk->file().mid( extnPos ); QString safename = newdoc.name(); safename.replace(QRegExp("/"),"_"); QString fn = locations[ d->locationCombo->currentItem() ] - + "/Documents/" + newdoc.type() + "/" + safename; + + "/Documents/" + newdoc.type() + "/" + safename; if ( QFile::exists(fn + fileExtn) || QFile::exists(fn + linkExtn) ) { - int n=1; - QString nn = fn + "_" + QString::number(n); - while ( QFile::exists(nn+fileExtn) || QFile::exists(nn+linkExtn) ) { - n++; - nn = fn + "_" + QString::number(n); - } - fn = nn; + int n=1; + QString nn = fn + "_" + QString::number(n); + while ( QFile::exists(nn+fileExtn) || QFile::exists(nn+linkExtn) ) { + n++; + nn = fn + "_" + QString::number(n); + } + fn = nn; } newdoc.setFile( fn + fileExtn ); newdoc.setLinkFile( fn + linkExtn ); // Copy file FileManager fm; if ( !fm.copyFile( *lnk, newdoc ) ) - return FALSE; + return FALSE; return TRUE; } void LnkProperties::done(int ok) { if ( ok ) { - bool changed=FALSE; - if ( lnk->name() != d->docname->text() ) { - lnk->setName(d->docname->text()); - changed=TRUE; - } - if ( d->categoryEdit->isVisible() ) { - QArray<int> tmp = d->categoryEdit->newCategories(); - if ( lnk->categories() != tmp ) { - lnk->setCategories( tmp ); - changed = TRUE; - } - } - if ( d->preload->isHidden() && d->locationCombo->currentItem() != currentLocation ) { - moveLnk(); - } else if ( changed ) { - lnk->writeLink(); - } - - if ( !d->preload->isHidden() ) { - Config cfg("Launcher"); - cfg.setGroup("Preload"); - QStringList apps = cfg.readListEntry("Apps",','); - QString exe = lnk->exec(); - if ( apps.contains(exe) != d->preload->isChecked() ) { - if ( d->preload->isChecked() ) { - apps.append(exe); - QCopEnvelope e("QPE/Application/"+exe.local8Bit(), - "enablePreload()"); - } else { - apps.remove(exe); - QCopEnvelope e("QPE/Application/"+exe.local8Bit(), - "quitIfInvisible()"); - } - cfg.writeEntry("Apps",apps,','); - } - } + bool changed=FALSE; + if ( lnk->name() != d->docname->text() ) { + lnk->setName(d->docname->text()); + changed=TRUE; + } + if ( d->categoryEdit->isVisible() ) { + QArray<int> tmp = d->categoryEdit->newCategories(); + if ( lnk->categories() != tmp ) { + lnk->setCategories( tmp ); + changed = TRUE; + } + } + if ( d->preload->isHidden() && d->locationCombo->currentItem() != currentLocation ) { + moveLnk(); + } else if ( changed ) { + lnk->writeLink(); + } + + if ( !d->preload->isHidden() ) { + Config cfg("Launcher"); + cfg.setGroup("Preload"); + QStringList apps = cfg.readListEntry("Apps",','); + QString exe = lnk->exec(); + if ( apps.contains(exe) != d->preload->isChecked() ) { + if ( d->preload->isChecked() ) { + apps.append(exe); +#ifndef QT_NO_COP + QCopEnvelope e("QPE/Application/"+exe.local8Bit(), + "enablePreload()"); +#endif + } else { + apps.remove(exe); +#ifndef QT_NO_COP + QCopEnvelope e("QPE/Application/"+exe.local8Bit(), + "quitIfInvisible()"); +#endif + } + cfg.writeEntry("Apps",apps,','); + } + } } QDialog::done( ok ); } diff --git a/library/lnkproperties.h b/library/lnkproperties.h index 38da5b2..a88fc10 100644 --- a/library/lnkproperties.h +++ b/library/lnkproperties.h @@ -1,73 +1,72 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ // // DO NOT ATTEMPT TO USE THIS CLASS // #ifndef LNKPROPERTIES_H #define LNKPROPERTIES_H #include <qstringlist.h> #include <qdialog.h> class AppLnk; class QListViewItem; class DocLnk; class LnkPropertiesBase; class LnkProperties : public QDialog { Q_OBJECT public: // WARNING: Do *NOT* define this yourself. The SL5xxx from SHARP does NOT // have this class. #ifdef QTOPIA_INTERNAL_FSLP LnkProperties( AppLnk* lnk, QWidget* parent = 0 ); ~LnkProperties(); #endif void done(int); private slots: void beamLnk(); void unlinkLnk(); - void unlinkIcon(); void duplicateLnk(); signals: void select(const AppLnk *); private: void setupLocations(); bool moveLnk(); bool copyFile( DocLnk &newdoc ); AppLnk* lnk; int fileSize; int currentLocation; QStringList locations; LnkPropertiesBase *d; }; #endif // LNKPROPERTIES_H diff --git a/library/lnkpropertiesbase_p.ui b/library/lnkpropertiesbase_p.ui index 3d35bca..e7139e7 100644 --- a/library/lnkpropertiesbase_p.ui +++ b/library/lnkpropertiesbase_p.ui @@ -1,62 +1,62 @@ <!DOCTYPE UI><UI> <class>LnkPropertiesBase</class> <widget> <class>QWidget</class> <property stdset="1"> <name>name</name> <cstring>Form1</cstring> </property> <property stdset="1"> <name>geometry</name> <rect> <x>0</x> <y>0</y> - <width>297</width> + <width>289</width> <height>449</height> </rect> </property> <property stdset="1"> <name>sizePolicy</name> <sizepolicy> <hsizetype>5</hsizetype> <vsizetype>5</vsizetype> </sizepolicy> </property> <property stdset="1"> <name>font</name> <font> </font> </property> <property stdset="1"> <name>caption</name> <string>Details</string> </property> <property> <name>layoutMargin</name> </property> <property> <name>layoutSpacing</name> </property> <vbox> <property stdset="1"> <name>margin</name> <number>0</number> </property> <property stdset="1"> <name>spacing</name> <number>0</number> </property> <widget> <class>QFrame</class> <property stdset="1"> <name>name</name> <cstring>Frame8</cstring> </property> <property stdset="1"> <name>focusPolicy</name> <enum>NoFocus</enum> </property> <property stdset="1"> <name>frameShape</name> <enum>NoFrame</enum> </property> @@ -111,306 +111,313 @@ <string></string> </property> </widget> <widget row="3" column="0" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>commentLabel</cstring> </property> <property stdset="1"> <name>text</name> <string>Comment:</string> </property> </widget> <widget row="2" column="0" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>typeLabel</cstring> </property> <property stdset="1"> <name>focusPolicy</name> <enum>NoFocus</enum> </property> <property stdset="1"> <name>text</name> <string>Type:</string> </property> <property> <name>layoutMargin</name> </property> <property> <name>layoutSpacing</name> </property> </widget> <widget row="1" column="1" > <class>QComboBox</class> <property stdset="1"> <name>name</name> <cstring>locationCombo</cstring> </property> <property stdset="1"> <name>sizePolicy</name> <sizepolicy> <hsizetype>7</hsizetype> <vsizetype>0</vsizetype> </sizepolicy> </property> + <property> + <name>whatsThis</name> + <string>The media the document resides on.</string> + </property> </widget> <widget row="0" column="1" > <class>QLineEdit</class> <property stdset="1"> <name>name</name> <cstring>docname</cstring> </property> <property stdset="1"> <name>sizePolicy</name> <sizepolicy> <hsizetype>7</hsizetype> <vsizetype>0</vsizetype> </sizepolicy> </property> <property stdset="1"> <name>text</name> <string></string> </property> + <property> + <name>whatsThis</name> + <string>The name of this document.</string> + </property> </widget> <widget row="0" column="0" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>TextLabel1</cstring> </property> <property stdset="1"> <name>frameShadow</name> <enum>MShadow</enum> </property> <property stdset="1"> <name>text</name> <string>Name:</string> </property> </widget> <widget row="1" column="0" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>locationLabel</cstring> </property> <property stdset="1"> <name>sizePolicy</name> <sizepolicy> <hsizetype>1</hsizetype> <vsizetype>1</vsizetype> </sizepolicy> </property> <property stdset="1"> <name>caption</name> <string></string> </property> <property stdset="1"> <name>text</name> <string>Location:</string> </property> <property> <name>layoutMargin</name> </property> <property> <name>layoutSpacing</name> </property> </widget> <widget row="2" column="1" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>type</cstring> </property> <property stdset="1"> <name>text</name> <string></string> </property> </widget> <widget row="3" column="1" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>comment</cstring> </property> <property stdset="1"> <name>text</name> <string></string> </property> </widget> <widget row="4" column="0" rowspan="1" colspan="2" > <class>QCheckBox</class> <property stdset="1"> <name>name</name> <cstring>preload</cstring> </property> <property stdset="1"> <name>text</name> <string>Fast load (consumes memory)</string> </property> <property> <name>layoutMargin</name> </property> <property> <name>layoutSpacing</name> </property> + <property> + <name>whatsThis</name> + <string>Preload this application so that it is available instantly.</string> + </property> </widget> </grid> </widget> <widget> <class>Line</class> <property stdset="1"> <name>name</name> <cstring>hline</cstring> </property> <property stdset="1"> <name>frameShadow</name> <enum>Sunken</enum> </property> <property stdset="1"> <name>orientation</name> <enum>Horizontal</enum> </property> <property> <name>layoutMargin</name> </property> <property> <name>layoutSpacing</name> </property> </widget> <widget> <class>QFrame</class> <property stdset="1"> <name>name</name> <cstring>Frame9</cstring> </property> <property stdset="1"> <name>frameShape</name> <enum>NoFrame</enum> </property> <property stdset="1"> <name>frameShadow</name> <enum>Plain</enum> </property> <property> <name>layoutMargin</name> </property> <property> <name>layoutSpacing</name> </property> <hbox> <property stdset="1"> <name>margin</name> <number>3</number> </property> <property stdset="1"> <name>spacing</name> <number>5</number> </property> <widget> <class>QPushButton</class> <property stdset="1"> <name>name</name> <cstring>unlink</cstring> </property> <property stdset="1"> <name>focusPolicy</name> <enum>TabFocus</enum> </property> <property stdset="1"> <name>text</name> <string>Delete</string> </property> <property stdset="1"> <name>autoDefault</name> <bool>false</bool> </property> - </widget> - - <widget> - <class>QPushButton</class> - <property stdset="1"> - <name>name</name> - <cstring>delicon</cstring> - </property> - <property stdset="1"> - <name>text</name> - <string>Del Icon</string> - </property> - <property stdset="1"> - <name>autoDefault</name> - <bool>false</bool> + <property> + <name>whatsThis</name> + <string>Delete this document.</string> </property> - </widget> - + </widget> <widget> <class>QPushButton</class> <property stdset="1"> <name>name</name> <cstring>duplicate</cstring> </property> <property stdset="1"> <name>text</name> <string>Copy</string> </property> <property stdset="1"> <name>autoDefault</name> <bool>false</bool> </property> + <property> + <name>whatsThis</name> + <string>Make a copy of this document.</string> + </property> </widget> <widget> <class>QPushButton</class> <property stdset="1"> <name>name</name> <cstring>beam</cstring> </property> <property stdset="1"> <name>focusPolicy</name> <enum>TabFocus</enum> </property> <property stdset="1"> <name>text</name> <string>Beam</string> </property> <property stdset="1"> <name>autoDefault</name> <bool>false</bool> </property> + <property> + <name>whatsThis</name> + <string>Beam this document to another device.</string> + </property> </widget> </hbox> </widget> </vbox> </widget> <customwidgets> <customwidget> <class>CategoryWidget</class> <header location="global">qpe/categorywidget.h</header> <sizehint> <width>-1</width> <height>-1</height> </sizehint> <container>0</container> <sizepolicy> <hordata>7</hordata> <verdata>7</verdata> </sizepolicy> <pixmap>image0</pixmap> </customwidget> </customwidgets> <images> <image> <name>image0</name> <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data> </image> </images> <tabstops> <tabstop>docname</tabstop> <tabstop>preload</tabstop> <tabstop>locationCombo</tabstop> <tabstop>unlink</tabstop> <tabstop>duplicate</tabstop> <tabstop>beam</tabstop> </tabstops> </UI> diff --git a/library/menubutton.cpp b/library/menubutton.cpp index 6b1fa2b..f5c832c 100644 --- a/library/menubutton.cpp +++ b/library/menubutton.cpp @@ -1,187 +1,216 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "menubutton.h" #include <qpopupmenu.h> /*! \class MenuButton menubutton.h \brief The MenuButton class is a pushbutton with a menu. - Similar in function to a QComboBox. + When the user presses the menubutton's pushbutton, the menu pops up. + A menu is composed of menu items each of which has a string label, + and optionally an icon. + + The index of the item that the user's input device (e.g. stylus) is + pointing at is the currentItem(), whose text is available using + currentText(). + + Menu items are inserted with the \link MenuButton::MenuButton() + constructor\endlink, insertItem() or insertItems(). Separators are + inserted with insertSeparator(). All the items in the menu can be + removed by calling clear(). + + Items can be selected programmatically using select(). When a menu + item is selected (programmatically or by the user), the selected() + signal is emitted. + + \ingroup qtopiaemb */ /*! - \fn void MenuButton::selected(int index) + \overload void MenuButton::selected(int index) - This signal is emitted when the item at \a index is selected. + This signal is emitted when the item at position \a index is selected. */ /*! \fn void MenuButton::selected(const QString& text) - This signal is emitted when the item with the given \a text is selected. + This signal is emitted when the item with the label \a text is selected. */ /*! - Constructs a MenuButton with the given \a items added (see insertItems()). - The standard \a parent an \a name arguments are passed to the base class. + Constructs a MenuButton. A menu item is created (see insertItem() + and insertItems()) for each string in the \a items string list. The + standard \a parent an \a name arguments are passed to the base + class. */ MenuButton::MenuButton( const QStringList& items, QWidget* parent, const char* name) : QPushButton(parent,name) { init(); insertItems(items); } /*! Constructs an empty MenuButton. The standard \a parent an \a name arguments are passed to the base class. - \sa insertItems() + \sa insertItem() insertItems() */ MenuButton::MenuButton( QWidget* parent, const char* name) : QPushButton(parent,name) { init(); } void MenuButton::init() { setAutoDefault(FALSE); pop = new QPopupMenu(this); nitems=0; connect(pop, SIGNAL(activated(int)), this, SLOT(select(int))); setPopup(pop); //setPopupDelay(0); } /*! - Removes all items from the button and menu. + Removes all the menu items from the button and menu. */ void MenuButton::clear() { delete pop; init(); } /*! - Inserts string \a items into the menu. The string "--" represents - a separator. + A menu item is created (see insertItem()) for each string in the \a + items string list. If any string is "--" a separator (see + insertSeparator()) is inserted in its place. */ void MenuButton::insertItems( const QStringList& items ) { QStringList::ConstIterator it=items.begin(); for (; it!=items.end(); ++it) { if ( (*it) == "--" ) insertSeparator(); else insertItem(*it); } } /*! - Inserts an \a icon and \a text into the menu. + Inserts a menu item with the icon \a icon and label \a text into + the menu. + + \sa insertItems() */ -void MenuButton::insertItem( const QIconSet& icon, const QString& text ) +void MenuButton::insertItem( const QIconSet& icon, const QString& text=QString::null ) { pop->insertItem(icon, text, nitems++); if ( nitems==1 ) select(0); } /*! - Inserts \a text into the menu. + \overload + Inserts a menu item with the label \a text into the menu. + + \sa insertItems() */ void MenuButton::insertItem( const QString& text ) { pop->insertItem(text, nitems++); if ( nitems==1 ) select(0); } /*! - Inserts a visual separator into the menu. + Inserts a separator into the menu. + + \sa insertItems() */ void MenuButton::insertSeparator() { pop->insertSeparator(); } /*! - Selects the items with text \a s. + Selects the items with label text \a s. */ void MenuButton::select(const QString& s) { for (int i=0; i<nitems; i++) { if ( pop->text(i) == s ) { select(i); break; } } } /*! - Selects the item at index \a s. + \overload + Selects the item at index position \a s. */ void MenuButton::select(int s) { cur = s; updateLabel(); if ( pop->iconSet(cur) ) setIconSet(*pop->iconSet(cur)); emit selected(cur); emit selected(currentText()); } /*! - Returns the index of the current item. + Returns the index position of the current item. */ int MenuButton::currentItem() const { return cur; } /*! - Returns the text of the current item. + Returns the label text of the current item. */ QString MenuButton::currentText() const { return pop->text(cur); } /*! - Sets the label. If \a label is empty, the + Sets the menubutton's label. If \a label is empty, the current item text is displayed, otherwise \a label should contain "%1", which will be replaced by the current item text. */ void MenuButton::setLabel(const QString& label) { lab = label; updateLabel(); } void MenuButton::updateLabel() { QString t = pop->text(cur); if ( !lab.isEmpty() ) t = lab.arg(t); setText(t); } diff --git a/library/menubutton.h b/library/menubutton.h index e9c91b7..6582b1e 100644 --- a/library/menubutton.h +++ b/library/menubutton.h @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef MENUBUTTON_H #define MENUBUTTON_H #include <qpushbutton.h> #include <qstringlist.h> class MenuButton : public QPushButton { Q_OBJECT public: MenuButton( QWidget* parent, const char* name=0); MenuButton( const QStringList& items, QWidget* parent, const char* name=0); void clear(); int currentItem() const; QString currentText() const; void insertItems( const QStringList& items ); void insertItem( const QIconSet& icon, const QString& text=QString::null ); void insertItem( const QString& text ); void insertSeparator(); void setLabel(const QString& label); signals: void selected(int); void selected(const QString&); public slots: void select(int); void select(const QString&); private: diff --git a/library/mimetype.cpp b/library/mimetype.cpp index 9fab160..e2e0dab 100644 --- a/library/mimetype.cpp +++ b/library/mimetype.cpp @@ -1,217 +1,308 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #define QTOPIA_INTERNAL_MIMEEXT #include "mimetype.h" #include "applnk.h" #include "resource.h" #include "qpeapplication.h" +#include "config.h" + #include <qfile.h> #include <qdict.h> #include <qregexp.h> #include <qstringlist.h> #include <qtextstream.h> #include <qmap.h> - + + +static void cleanupMime() +{ + MimeType::clear(); +} + class MimeTypeData { public: - MimeTypeData(const QString& i, const AppLnk& lnk, const QString& icon ) : - id(i), - desc(lnk.name()+" document"), - app(lnk) + MimeTypeData(const QString& i) : + id(i) { - if ( icon.isEmpty() ) { - regIcon = lnk.pixmap(); - bigIcon = lnk.bigPixmap(); - } else { - QImage unscaledIcon = Resource::loadImage( icon ); - regIcon.convertFromImage( unscaledIcon.smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize() ) ); - bigIcon.convertFromImage( unscaledIcon.smoothScale( AppLnk::bigIconSize(), AppLnk::bigIconSize() ) ); - } + apps.setAutoDelete(TRUE); } QString id; QString extension; + QList<AppLnk> apps; + + QString description() + { + if ( desc.isEmpty() ) + desc = QPEApplication::tr("%1 document").arg(apps.first()->name()); + return desc; + } + + QPixmap regIcon() + { + if ( regicon.isNull() ) + loadPixmaps(); + return regicon; + } + + QPixmap bigIcon() + { + if ( bigicon.isNull() ) + loadPixmaps(); + return bigicon; + } + +private: + void loadPixmaps() + { + if ( apps.count() ) { + QString icon; + for (AppLnk* lnk = apps.first(); icon.isNull() && lnk; lnk=apps.next()) { + QStringList icons = lnk->mimeTypeIcons(); + if ( icons.count() ) { + QStringList types = lnk->mimeTypes(); + for (QStringList::ConstIterator t=types.begin(),i=icons.begin(); t!=types.end() && i!=icons.end(); ++i,++t) { + if ( *t == id ) { + icon = *i; + break; + } + } + } + } + if ( icon.isNull() ) { + AppLnk* lnk = apps.first(); + regicon = lnk->pixmap(); + bigicon = lnk->bigPixmap(); + } else { + QImage unscaledIcon = Resource::loadImage( icon ); + regicon.convertFromImage( unscaledIcon.smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize() ) ); + bigicon.convertFromImage( unscaledIcon.smoothScale( AppLnk::bigIconSize(), AppLnk::bigIconSize() ) ); + } + } + } + + QPixmap regicon; + QPixmap bigicon; QString desc; - QPixmap regIcon; - QPixmap bigIcon; - AppLnk app; }; -class MimeType::Dict : public QDict<MimeTypeData> { +class MimeType::Private : public QDict<MimeTypeData> { public: - Dict() {} + Private() {} + ~Private() {} + + // ... }; -MimeType::Dict* MimeType::d=0; +MimeType::Private* MimeType::d=0; static QMap<QString,QString> *typeFor = 0; -static QMap<QString,QString> *extFor = 0; +static QMap<QString,QStringList> *extFor = 0; -MimeType::Dict& MimeType::dict() +MimeType::Private& MimeType::data() { if ( !d ) { - d = new Dict; + d = new Private; d->setAutoDelete(TRUE); + static bool setCleanup = FALSE; + if ( !setCleanup ) { + qAddPostRoutine( cleanupMime ); + setCleanup = TRUE; + } } return *d; } MimeType::MimeType( const QString& ext_or_id ) { init(ext_or_id); } MimeType::MimeType( const DocLnk& lnk ) { init(lnk.type()); } QString MimeType::id() const { return i; } QString MimeType::description() const { MimeTypeData* d = data(i); - return d ? d->desc : QString::null; + return d ? d->description() : QString::null; } QPixmap MimeType::pixmap() const { MimeTypeData* d = data(i); - return d ? d->regIcon : QPixmap(); + return d ? d->regIcon() : QPixmap(); } QString MimeType::extension() const { + return extensions().first(); +} + +QStringList MimeType::extensions() const +{ loadExtensions(); return *(*extFor).find(i); } QPixmap MimeType::bigPixmap() const { MimeTypeData* d = data(i); - return d ? d->bigIcon : QPixmap(); + return d ? d->bigIcon() : QPixmap(); } const AppLnk* MimeType::application() const { MimeTypeData* d = data(i); - return d ? &d->app : 0; + return d ? d->apps.first() : 0; +} + +static QString serviceBinding(const QString& service) +{ + // Copied from qtopiaservices + QString svrc = service; + for (int i=0; i<(int)svrc.length(); i++) + if ( svrc[i]=='/' ) svrc[i] = '-'; + return "Service-"+svrc; } void MimeType::registerApp( const AppLnk& lnk ) { QStringList list = lnk.mimeTypes(); - QStringList icons = lnk.mimeTypeIcons(); - QStringList::ConstIterator icon = icons.begin(); - for (QStringList::ConstIterator it = list.begin(); it != list.end(); ++it, ++icon) { - MimeTypeData *item = new MimeTypeData( *it, lnk, *icon ); - dict().replace( *it, item ); + for (QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) { + MimeTypeData* cur = data()[*it]; + AppLnk* l = new AppLnk(lnk); + if ( !cur ) { + cur = new MimeTypeData( *it ); + data().insert( *it, cur ); + cur->apps.append(l); + } else if ( cur->apps.count() ) { + Config binding(serviceBinding("Open/"+*it)); + binding.setGroup("Service"); + QString def = binding.readEntry("default"); + if ( l->exec() == def ) + cur->apps.prepend(l); + else + cur->apps.append(l); + } else { + cur->apps.append(l); + } } } void MimeType::clear() { delete d; d = 0; } void MimeType::loadExtensions() { if ( !typeFor ) { - extFor = new QMap<QString,QString>; + extFor = new QMap<QString,QStringList>; typeFor = new QMap<QString,QString>; loadExtensions("/etc/mime.types"); loadExtensions(QPEApplication::qpeDir()+"etc/mime.types"); } } void MimeType::loadExtensions(const QString& filename) { QFile file(filename); if ( file.open(IO_ReadOnly) ) { QTextStream in(&file); QRegExp space("[ \t]+"); while (!in.atEnd()) { QStringList tokens = QStringList::split(space, in.readLine()); QStringList::ConstIterator it = tokens.begin(); if ( it != tokens.end() ) { QString id = *it; ++it; + // new override old (though left overrides right) + QStringList exts = (*extFor)[id]; + QStringList newexts; if ( it != tokens.end() ) { - (*extFor)[id] = *it; + exts.remove(*it); + if ( !newexts.contains(*it) ) + newexts.append(*it); while (it != tokens.end()) { (*typeFor)[*it] = id; ++it; } } + (*extFor)[id] = newexts + exts; } } } } void MimeType::init( const QString& ext_or_id ) { if ( ext_or_id[0] != '/' && ext_or_id.contains('/') ) { i = ext_or_id.lower(); } else { loadExtensions(); int dot = ext_or_id.findRev('.'); QString ext = dot >= 0 ? ext_or_id.mid(dot+1) : ext_or_id; i = (*typeFor)[ext.lower()]; if ( i.isNull() ) i = "application/octet-stream"; } static bool appsUpdated = FALSE; if ( !appsUpdated ) { appsUpdated = TRUE; updateApplications(); } } MimeTypeData* MimeType::data(const QString& id) { - MimeTypeData* d = dict()[id]; + MimeTypeData* d = data()[id]; if ( !d ) { int s = id.find('/'); QString idw = id.left(s)+"/*"; - d = dict()[idw]; + d = data()[idw]; } return d; } QString MimeType::appsFolderName() { return QPEApplication::qpeDir() + "apps"; } void MimeType::updateApplications() { clear(); AppLnkSet apps( appsFolderName() ); updateApplications(&apps); } void MimeType::updateApplications(AppLnkSet* folder) { for ( QListIterator<AppLnk> it( folder->children() ); it.current(); ++it ) { registerApp(*it.current()); } } diff --git a/library/mimetype.h b/library/mimetype.h index b6cca95..94bfe4e 100644 --- a/library/mimetype.h +++ b/library/mimetype.h @@ -1,69 +1,72 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef MIMETYPE_H #define MIMETYPE_H -#include <qstring.h> +#include <qstringlist.h> #include <qpixmap.h> +#include <qlist.h> class AppLnk; class DocLnk; class QStringList; class MimeTypeData; class AppLnkSet; class MimeType { public: MimeType( const QString& ext_or_id ); MimeType( const DocLnk& ); QString id() const; QString description() const; QPixmap pixmap() const; QPixmap bigPixmap() const; // DON'T define this yourself! #ifdef QTOPIA_INTERNAL_MIMEEXT QString extension() const; + QStringList extensions() const; + QList<AppLnk> applications() const; #endif const AppLnk* application() const; static QString appsFolderName(); static void updateApplications(); // These shouldn't be needed static void clear(); static void registerApp( const AppLnk& ); private: static void updateApplications(AppLnkSet* folder); static void loadExtensions(); static void loadExtensions(const QString&); void init( const QString& ext_or_id ); - class Dict; - static Dict* d; - static Dict& dict(); + class Private; + static Private* d; + static Private& data(); static MimeTypeData* data(const QString& id); QString i; }; #endif diff --git a/library/network.cpp b/library/network.cpp index e6d2781..185b147 100644 --- a/library/network.cpp +++ b/library/network.cpp @@ -1,203 +1,209 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #define QTOPIA_INTERNAL_LANGLIST #include "qpe/network.h" #include "qpe/networkinterface.h" #include "qpe/global.h" #include "qpe/config.h" #include "qpe/resource.h" #include "qpe/qpeapplication.h" +#ifdef QWS #include <qpe/qcopenvelope_qws.h> +#endif #include <qpe/qlibrary.h> #include <qlistbox.h> #include <qdir.h> #include <qlayout.h> #include <qdict.h> #include <qtranslator.h> #include <stdlib.h> +#ifndef QT_NO_COP class NetworkEmitter : public QCopChannel { Q_OBJECT public: NetworkEmitter() : QCopChannel("QPE/Network",qApp) { } void receive(const QCString &msg, const QByteArray&) { if ( msg == "choicesChanged()" ) emit changed(); } signals: void changed(); }; /*! \internal Requests that the service \a choice be started. The \a password is the password to use if required. */ void Network::start(const QString& choice, const QString& password) { QCopEnvelope e("QPE/Network", "start(QString,QString)"); e << choice << password; } /*! \class Network network.h \brief The Network class provides network access functionality. + \internal */ // copy the proxy settings of the active config over to the Proxies.conf file /*! \internal */ void Network::writeProxySettings( Config &cfg ) { Config proxy( Network::settingsDir() + "/Proxies.conf", Config::File ); proxy.setGroup("Properties"); cfg.setGroup("Proxy"); proxy.writeEntry("type", cfg.readEntry("type") ); proxy.writeEntry("autoconfig", cfg.readEntry("autoconfig") ); proxy.writeEntry("httphost", cfg.readEntry("httphost") ); proxy.writeEntry("httpport", cfg.readEntry("httpport") ); proxy.writeEntry("ftphost", cfg.readEntry("ftphost") ); proxy.writeEntry("ftpport", cfg.readEntry("ftpport") ); proxy.writeEntry("noproxies", cfg.readEntry("noproxies") ); cfg.setGroup("Properties"); } /*! \internal Stops the current network service. */ void Network::stop() { QCopEnvelope e("QPE/Network", "stop()"); } static NetworkEmitter *emitter = 0; /*! \internal */ void Network::connectChoiceChange(QObject* receiver, const char* slot) { if ( !emitter ) emitter = new NetworkEmitter; QObject::connect(emitter,SIGNAL(changed()),receiver,slot); } +#endif // QT_NO_COP /*! \internal */ QString Network::settingsDir() { return Global::applicationFileName("Network", "modules"); } +#ifndef QT_NO_COP /*! \internal */ QStringList Network::choices(QListBox* lb, const QString& dir) { QStringList list; if ( lb ) lb->clear(); QString adir = dir.isEmpty() ? settingsDir() : dir; QDir settingsdir(adir); settingsdir.mkdir(adir); - + QStringList files = settingsdir.entryList("*.conf"); for (QStringList::ConstIterator it=files.begin(); it!=files.end(); ++it ) { QString filename = settingsdir.filePath(*it); Config cfg(filename, Config::File); cfg.setGroup("Info"); if ( lb ) lb->insertItem(Resource::loadPixmap("Network/" + cfg.readEntry("Type")), cfg.readEntry("Name")); list.append(filename); } return list; } class NetworkServer : public QCopChannel { Q_OBJECT public: - NetworkServer(QObject* parent) : QCopChannel("QPE/Network",parent) + NetworkServer(QObject* parent) : QCopChannel("QPE/Network",parent), wait(0) { up = FALSE; examineNetworks( TRUE ); QCopChannel* card = new QCopChannel("QPE/Card",parent); connect(card,SIGNAL(received(const QCString &, const QByteArray&)), this,SLOT(cardMessage(const QCString &, const QByteArray&))); } ~NetworkServer() { stop(); } bool networkOnline() const { return up; } private: void receive(const QCString &msg, const QByteArray& data) { if ( msg == "start(QString,QString)" ) { QDataStream stream(data,IO_ReadOnly); QString file,password; stream >> file >> password; if ( file.isEmpty() ) { QStringList l = Network::choices(); for (QStringList::ConstIterator i=l.begin(); i!=l.end(); ++i) { Config cfg(*i,Config::File); cfg.setGroup("Info"); QString type = cfg.readEntry("Type"); NetworkInterface* plugin = Network::loadPlugin(type); cfg.setGroup("Properties"); if ( plugin && plugin->isAvailable(cfg) ) { file = *i; break; } } if ( file.isEmpty() ) { QCopEnvelope("QPE/Network", "failed()"); return; } } start(file,password); } else if ( msg == "stop()" ) { stop(); } else if ( msg == "choicesChanged()" ) { examineNetworks(); @@ -392,48 +398,49 @@ int Network::addStateWidgets(QWidget* parent) QString type = cfg.readEntry("Type"); NetworkInterface* plugin = Network::loadPlugin(type); cfg.setGroup("Properties"); if ( plugin ) { QWidget* w; if ( (w=plugin->addStateWidget(parent,cfg)) ) { n++; vb->addWidget(w); } } } return n; } static QDict<NetworkInterface> *ifaces; /*! \internal */ NetworkInterface* Network::loadPlugin(const QString& type) { #ifndef QT_NO_COMPONENT if ( !ifaces ) ifaces = new QDict<NetworkInterface>; NetworkInterface *iface = ifaces->find(type); if ( !iface ) { QString libfile = QPEApplication::qpeDir() + "/plugins/network/lib" + type + ".so"; QLibrary lib(libfile); if ( !lib.queryInterface( IID_Network, (QUnknownInterface**)&iface ) == QS_OK ) return 0; ifaces->insert(type,iface); QStringList langs = Global::languageList(); for (QStringList::ConstIterator it = langs.begin(); it!=langs.end(); ++it) { QString lang = *it; QTranslator * trans = new QTranslator(qApp); QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/lib"+type+".qm"; if ( trans->load( tfn )) qApp->installTranslator( trans ); else delete trans; } } return iface; #else return 0; #endif } #include "network.moc" +#endif // QT_NO_COP diff --git a/library/network.h b/library/network.h index cee67af..33699a2 100644 --- a/library/network.h +++ b/library/network.h @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef NETWORK_H #define NETWORK_H #include <qstringlist.h> class QListBox; class QObject; class QWidget; struct NetworkInterface; class Config; class Network { public: static void start(const QString& service=QString::null, const QString& password=QString::null); static void stop(); static QString settingsDir(); static QString serviceName(const QString& service); static QString serviceType(const QString& service); static bool serviceNeedsPassword(const QString& service); static void connectChoiceChange(QObject* receiver, const char* slot); static QStringList choices(QListBox* = 0, const QString& dir=QString::null); static void writeProxySettings( Config &cfg ); static NetworkInterface* loadPlugin(const QString& type); static int addStateWidgets(QWidget* parent); // Server only static void createServer(QObject* parent); static bool networkOnline(); }; #endif diff --git a/library/networkinterface.cpp b/library/networkinterface.cpp index 56a0e5b..2b5c77e 100644 --- a/library/networkinterface.cpp +++ b/library/networkinterface.cpp @@ -1,96 +1,98 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "networkinterface.h" #include "network.h" #include "config.h" #include <stdio.h> QString NetworkInterface::device( Config& cfg ) const { return cfg.readEntry("Device"); } bool NetworkInterface::isActive( Config& cfg ) const { QString dev = device(cfg); if ( dev.isEmpty() ) return FALSE; QString dev0 = dev+'0'; FILE* f; f = fopen("/proc/net/dev", "r"); if ( f ) { char line[1024]; char devname[80]; while ( fgets( line, 1024, f ) ) { if ( sscanf(line," %[^:]:", devname)==1 ) { if ( devname == dev || devname == dev0 ) { fclose(f); +#ifdef QWS Network::writeProxySettings( cfg ); +#endif return TRUE; } } } fclose(f); } return FALSE; } QString NetworkInterface::cardType( Config& cfg ) const { return cfg.readEntry("CardType"); } bool NetworkInterface::isAvailable( Config& cfg ) const { QString ct = cardType(cfg); if ( ct.isEmpty() ) return FALSE; FILE* f = fopen("/var/run/stab", "r"); if (!f) f = fopen("/var/state/pcmcia/stab", "r"); if (!f) f = fopen("/var/lib/pcmcia/stab", "r"); if ( f ) { char line[1024]; char devtype[80]; while ( fgets( line, 1024, f ) ) { if ( sscanf(line,"%*d %s %*s", devtype )==1 ) { if ( ct == devtype ) { fclose(f); return TRUE; } } } fclose(f); } return FALSE; } bool NetworkInterface::start( Config& cfg, const QString& /*password*/ ) { return start(cfg); } bool NetworkInterface::needPassword( Config& ) const diff --git a/library/networkinterface.h b/library/networkinterface.h index d2ca5ab..bda2119 100644 --- a/library/networkinterface.h +++ b/library/networkinterface.h @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef NETWORKINTERFACE_H #define NETWORKINTERFACE_H #include <qnamespace.h> #include <qstring.h> #include <qpe/qcom.h> #ifndef QT_NO_COMPONENT // {09794290-69d5-4c42-8a53-230cf2e53c50} # ifndef IID_Network # define IID_Network QUuid( 0x09794290, 0x69d5, 0x4c42, 0x8a, 0x53, 0x23, 0x0c, 0xf2, 0xe5, 0x3c, 0x50) # endif #endif class QWidget; class Config; struct NetworkInterface : public QUnknownInterface { virtual bool doProperties( QWidget *parent, Config& ) = 0; virtual bool create( Config& ) = 0; virtual bool remove( Config& ) = 0; virtual QString device( Config& ) const; virtual QString cardType( Config& ) const; virtual bool isActive( Config& ) const; virtual bool isAvailable( Config& ) const; virtual bool start( Config& ) = 0; virtual bool start( Config&, const QString& password ); virtual bool stop( Config& ) = 0; virtual bool needPassword( Config& ) const; virtual QWidget* addStateWidget( QWidget* parent, Config& ) const; }; diff --git a/library/password.cpp b/library/password.cpp index 3be6efe..41b3358 100644 --- a/library/password.cpp +++ b/library/password.cpp @@ -1,122 +1,134 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "password.h" #include "config.h" #include "global.h" #include "backend/contact.h" #include <qlabel.h> #include <qlineedit.h> #include <qtextview.h> #include <qstring.h> #include <qapplication.h> #include <qfile.h> +#ifdef QWS #include <qwindowsystem_qws.h> +#endif #include <qdialog.h> #include <unistd.h> //for sleep #include "passwordbase_p.h" class PasswordDialog : public PasswordBase { Q_OBJECT public: PasswordDialog( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); ~PasswordDialog(); void clear(); void setPrompt( const QString& ); signals: void passwordEntered( const QString& ); protected: bool eventFilter( QObject*, QEvent* ); void keyPressEvent( QKeyEvent * ); private: void input( QString ); friend class Password; QString text; }; extern "C" char *crypt(const char *key, const char *salt); static QString qcrypt(const QString& k, const char *salt) { return QString::fromUtf8(crypt(k.utf8(),salt)); } /* * Constructs a PasswordDialog which is a child of 'parent', with the * name 'name' and widget flags set to 'f' */ PasswordDialog::PasswordDialog( QWidget* parent, const char* name, WFlags fl ) : PasswordBase( parent, name, fl ) { + QRect desk = qApp->desktop()->geometry(); + + if ( desk.width() < 220 ) { + QFont f( font() ); + f.setPointSize( 18 ); + setFont( f ); + f.setPointSize( 12 ); + prompt->setFont( f ); + } + button_0->installEventFilter( this ); button_1->installEventFilter( this ); button_2->installEventFilter( this ); button_3->installEventFilter( this ); button_4->installEventFilter( this ); button_5->installEventFilter( this ); button_6->installEventFilter( this ); button_7->installEventFilter( this ); button_8->installEventFilter( this ); button_9->installEventFilter( this ); button_OK->installEventFilter( this ); setFocus(); } /* * Destroys the object and frees any allocated resources */ PasswordDialog::~PasswordDialog() { // no need to delete child widgets, Qt does it all for us } /*! \reimp */ bool PasswordDialog::eventFilter( QObject*o, QEvent*e ) { if ( e->type() == QEvent::MouseButtonRelease ) { if ( o == button_OK ) { emit passwordEntered( text ); } else { QLabel *l = (QLabel*)o; input(l->text()); } } return FALSE; } /*! \reimp */ void PasswordDialog::keyPressEvent( QKeyEvent * ) { diff --git a/library/password.h b/library/password.h index 30a5377..a3a3e45 100644 --- a/library/password.h +++ b/library/password.h @@ -1,32 +1,32 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef PASSWORD_H #define PASSWORD_H #include <qstring.h> class Password { public: static void authenticate(bool atpoweron=FALSE); static QString getPassword( const QString& prompt ); }; #endif // PASSWORD_H diff --git a/library/passwordbase_p.ui b/library/passwordbase_p.ui index e79777b..a5eed87 100644 --- a/library/passwordbase_p.ui +++ b/library/passwordbase_p.ui @@ -1,363 +1,440 @@ <!DOCTYPE UI><UI> <class>PasswordBase</class> <widget> <class>QWidget</class> <property stdset="1"> <name>name</name> <cstring>PasswordBase</cstring> </property> <property stdset="1"> <name>geometry</name> <rect> <x>0</x> <y>0</y> - <width>251</width> - <height>443</height> + <width>243</width> + <height>293</height> </rect> </property> <property stdset="1"> <name>font</name> <font> <pointsize>24</pointsize> </font> </property> <property stdset="1"> <name>caption</name> <string>Form1</string> </property> <grid> <property stdset="1"> <name>margin</name> <number>11</number> </property> <property stdset="1"> <name>spacing</name> <number>6</number> </property> <widget row="2" column="0" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>button_1</cstring> </property> <property stdset="1"> + <name>sizePolicy</name> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + </sizepolicy> + </property> + <property stdset="1"> <name>frameShape</name> <enum>Box</enum> </property> <property stdset="1"> <name>frameShadow</name> <enum>Raised</enum> </property> <property stdset="1"> <name>text</name> <string>1</string> </property> <property stdset="1"> <name>alignment</name> <set>AlignCenter</set> </property> <property> <name>hAlign</name> </property> </widget> <widget row="2" column="1" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>button_2</cstring> </property> <property stdset="1"> + <name>sizePolicy</name> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + </sizepolicy> + </property> + <property stdset="1"> <name>frameShape</name> <enum>Box</enum> </property> <property stdset="1"> <name>frameShadow</name> <enum>Raised</enum> </property> <property stdset="1"> <name>text</name> <string>2</string> </property> <property stdset="1"> <name>alignment</name> <set>AlignCenter</set> </property> <property> <name>hAlign</name> </property> </widget> <widget row="2" column="2" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>button_3</cstring> </property> <property stdset="1"> + <name>sizePolicy</name> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + </sizepolicy> + </property> + <property stdset="1"> <name>frameShape</name> <enum>Box</enum> </property> <property stdset="1"> <name>frameShadow</name> <enum>Raised</enum> </property> <property stdset="1"> <name>text</name> <string>3</string> </property> <property stdset="1"> <name>alignment</name> <set>AlignCenter</set> </property> <property> <name>hAlign</name> </property> </widget> <widget row="3" column="0" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>button_4</cstring> </property> <property stdset="1"> + <name>sizePolicy</name> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + </sizepolicy> + </property> + <property stdset="1"> <name>frameShape</name> <enum>Box</enum> </property> <property stdset="1"> <name>frameShadow</name> <enum>Raised</enum> </property> <property stdset="1"> <name>text</name> <string>4</string> </property> <property stdset="1"> <name>alignment</name> <set>AlignCenter</set> </property> <property> <name>hAlign</name> </property> </widget> <widget row="3" column="1" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>button_5</cstring> </property> <property stdset="1"> + <name>sizePolicy</name> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + </sizepolicy> + </property> + <property stdset="1"> <name>frameShape</name> <enum>Box</enum> </property> <property stdset="1"> <name>frameShadow</name> <enum>Raised</enum> </property> <property stdset="1"> <name>text</name> <string>5</string> </property> <property stdset="1"> <name>alignment</name> <set>AlignCenter</set> </property> <property> <name>hAlign</name> </property> </widget> <widget row="3" column="2" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>button_6</cstring> </property> <property stdset="1"> + <name>sizePolicy</name> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + </sizepolicy> + </property> + <property stdset="1"> <name>frameShape</name> <enum>Box</enum> </property> <property stdset="1"> <name>frameShadow</name> <enum>Raised</enum> </property> <property stdset="1"> <name>text</name> <string>6</string> </property> <property stdset="1"> <name>alignment</name> <set>AlignCenter</set> </property> <property> <name>hAlign</name> </property> </widget> <widget row="4" column="0" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>button_7</cstring> </property> <property stdset="1"> + <name>sizePolicy</name> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + </sizepolicy> + </property> + <property stdset="1"> <name>frameShape</name> <enum>Box</enum> </property> <property stdset="1"> <name>frameShadow</name> <enum>Raised</enum> </property> <property stdset="1"> <name>text</name> <string>7</string> </property> <property stdset="1"> <name>alignment</name> <set>AlignCenter</set> </property> <property> <name>hAlign</name> </property> </widget> <widget row="4" column="1" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>button_8</cstring> </property> <property stdset="1"> + <name>sizePolicy</name> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + </sizepolicy> + </property> + <property stdset="1"> <name>frameShape</name> <enum>Box</enum> </property> <property stdset="1"> <name>frameShadow</name> <enum>Raised</enum> </property> <property stdset="1"> <name>text</name> <string>8</string> </property> <property stdset="1"> <name>alignment</name> <set>AlignCenter</set> </property> <property> <name>hAlign</name> </property> </widget> <widget row="4" column="2" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>button_9</cstring> </property> <property stdset="1"> + <name>sizePolicy</name> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + </sizepolicy> + </property> + <property stdset="1"> <name>frameShape</name> <enum>Box</enum> </property> <property stdset="1"> <name>frameShadow</name> <enum>Raised</enum> </property> <property stdset="1"> <name>text</name> <string>9</string> </property> <property stdset="1"> <name>alignment</name> <set>AlignCenter</set> </property> <property> <name>hAlign</name> </property> <property> <name>layoutMargin</name> </property> <property> <name>layoutSpacing</name> </property> </widget> <widget row="5" column="0" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>button_0</cstring> </property> <property stdset="1"> + <name>sizePolicy</name> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + </sizepolicy> + </property> + <property stdset="1"> <name>frameShape</name> <enum>Box</enum> </property> <property stdset="1"> <name>frameShadow</name> <enum>Raised</enum> </property> <property stdset="1"> <name>text</name> <string>0</string> </property> <property stdset="1"> <name>alignment</name> <set>AlignCenter</set> </property> <property> <name>hAlign</name> </property> <property> <name>layoutMargin</name> </property> <property> <name>layoutSpacing</name> </property> </widget> <widget row="5" column="1" rowspan="1" colspan="2" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>button_OK</cstring> </property> <property stdset="1"> + <name>sizePolicy</name> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>5</vsizetype> + </sizepolicy> + </property> + <property stdset="1"> <name>frameShape</name> <enum>Box</enum> </property> <property stdset="1"> <name>frameShadow</name> <enum>Raised</enum> </property> <property stdset="1"> <name>text</name> <string>OK</string> </property> <property stdset="1"> <name>alignment</name> <set>AlignCenter</set> </property> <property> <name>hAlign</name> </property> </widget> <widget row="0" column="0" rowspan="1" colspan="3" > <class>QLabel</class> <property stdset="1"> <name>name</name> <cstring>prompt</cstring> </property> <property stdset="1"> <name>font</name> <font> <pointsize>18</pointsize> </font> </property> <property stdset="1"> <name>text</name> <string>Enter passcode</string> </property> </widget> <widget row="1" column="0" rowspan="1" colspan="3" > <class>QLineEdit</class> <property stdset="1"> <name>name</name> <cstring>display</cstring> </property> <property stdset="1"> <name>enabled</name> <bool>false</bool> </property> <property stdset="1"> <name>palette</name> diff --git a/library/power.cpp b/library/power.cpp index d10a865..d53ecfe 100644 --- a/library/power.cpp +++ b/library/power.cpp @@ -1,71 +1,71 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "power.h" -#if defined( QT_QWS_CUSTOM ) || defined( QT_QWS_IPAQ ) +#ifdef QT_QWS_CUSTOM #include "custom.h" #endif #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <fcntl.h> #include <sys/ioctl.h> #ifdef QT_QWS_IPAQ_NO_APM #include <linux/h3600_ts.h> #endif PowerStatusManager *PowerStatusManager::powerManager = 0; PowerStatus *PowerStatusManager::ps = 0; static bool haveProcApm = false; PowerStatusManager::PowerStatusManager() { powerManager = this; ps = new PowerStatus; FILE *f = fopen("/proc/apm", "r"); if ( f ) { fclose(f); haveProcApm = TRUE; } } const PowerStatus &PowerStatusManager::readStatus() { if ( !powerManager ) (void)new PowerStatusManager; powerManager->getStatus(); return *ps; } // Standard /proc/apm reader bool PowerStatusManager::getProcApmStatus( int &ac, int &bs, int &bf, int &pc, int &sec ) { bool ok = false; ac = 0xff; bs = 0xff; bf = 0xff; pc = -1; diff --git a/library/power.h b/library/power.h index 99d3595..04499a8 100644 --- a/library/power.h +++ b/library/power.h @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef POWER_H #define POWER_H #include <qobject.h> class PowerStatus { public: PowerStatus() { ac = Offline; bs = NotPresent; bbs = NotPresent; percentRemain = -1; secsRemain = -1; } enum ACStatus { Offline, Online, Backup }; ACStatus acStatus() const { return ac; } enum BatteryStatus { High=0x01, Low=0x02, VeryLow=0x04, Critical=0x08, Charging=0x10, NotPresent=0x20 }; BatteryStatus batteryStatus() const { return bs; } BatteryStatus backupBatteryStatus() const { return bbs; } bool batteryPercentAccurate() const { return percentAccurate; } int batteryPercentRemaining() const { return percentRemain; } int batteryTimeRemaining() const { return secsRemain; } bool operator!=( const PowerStatus &ps ) { return (ps.ac != ac) || (ps.bs != bs) || (ps.bbs != bbs) || (ps.percentRemain != percentRemain) || (ps.secsRemain != secsRemain ); diff --git a/library/process.cpp b/library/process.cpp index 2e25dd5..103dcae 100644 --- a/library/process.cpp +++ b/library/process.cpp @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include "process.h" #ifndef QT_NO_PROCESS #include "qapplication.h" Process::Process( QObject *parent, const char *name ) : QObject( parent, name ), ioRedirection( FALSE ), notifyOnExit( FALSE ), wroteToStdinConnected( FALSE ) { init(); } Process::Process( const QString& arg0, QObject *parent, const char *name ) : QObject( parent, name ), ioRedirection( FALSE ), notifyOnExit( FALSE ), wroteToStdinConnected( FALSE ) { init(); addArgument( arg0 ); } Process::Process( const QStringList& args, QObject *parent, const char *name ) : QObject( parent, name ), ioRedirection( FALSE ), notifyOnExit( FALSE ), wroteToStdinConnected( FALSE ) { init(); setArguments( args ); } diff --git a/library/process.h b/library/process.h index def68d7..e4f613d 100644 --- a/library/process.h +++ b/library/process.h @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef PROCESS_H #define PROCESS_H //#ifndef QT_H #include "qobject.h" #include "qstringlist.h" #include "qdir.h" //#endif // QT_H //#ifndef QT_NO_PROCESS class ProcessPrivate; // // // // // // // // // // // This is a subset of the Process API found in Qt 3.0 // // // // // // // // diff --git a/library/process_unix.cpp b/library/process_unix.cpp index b599edb..e0fbf8c 100644 --- a/library/process_unix.cpp +++ b/library/process_unix.cpp @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef QT_H # include <qfeatures.h> #endif // QT_H #ifndef QT_NO_PROCESS //#include "qplatformdefs.h" #include <stdio.h> #include <unistd.h> #include <signal.h> #include <sys/types.h> #include <sys/socket.h> #include <fcntl.h> #include "process.h" #include "qapplication.h" //#include "qptrqueue.h" //#include "qptrlist.h" #include "qsocketnotifier.h" #include "qtimer.h" //#include "qcleanuphandler.h" #include "qregexp.h" #include <stdlib.h> #include <errno.h> #define QPtrList QList //#define QT_QPROCESS_DEBUG class Proc; diff --git a/library/qcom.h b/library/qcom.h index 229be2b..8c0fa60 100644 --- a/library/qcom.h +++ b/library/qcom.h @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef QCOM_H #define QCOM_H #include <qstringlist.h> #ifndef QT_NO_COMPONENT #include <qpe/quuid.h> #define QRESULT unsigned long #define QS_OK (QRESULT)0x00000000 #define QS_FALSE (QRESULT)0x00000001 #define QE_NOTIMPL (QRESULT)0x80000001 #define QE_OUTOFMEMORY (QRESULT)0x80000002 #define QE_INVALIDARG (QRESULT)0x80000003 #define QE_NOINTERFACE (QRESULT)0x80000004 #define QE_NOCOMPONENT (QRESULT)0x80000005 // {1D8518CD-E8F5-4366-99E8-879FD7E482DE} #ifndef IID_QUnknown #define IID_QUnknown QUuid(0x1d8518cd, 0xe8f5, 0x4366, 0x99, 0xe8, 0x87, 0x9f, 0xd7, 0xe4, 0x82, 0xde) #endif struct Q_EXPORT QUnknownInterface { virtual QRESULT queryInterface( const QUuid&, QUnknownInterface** ) = 0; virtual ulong addRef() = 0; virtual ulong release() = 0; }; // {D16111D4-E1E7-4C47-8599-24483DAE2E07} diff --git a/library/qcopenvelope_qws.cpp b/library/qcopenvelope_qws.cpp index 10d1567..81bb0f5 100644 --- a/library/qcopenvelope_qws.cpp +++ b/library/qcopenvelope_qws.cpp @@ -1,162 +1,173 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ +#ifndef QT_NO_COP #include "qcopenvelope_qws.h" +#endif #include "global.h" #include <qbuffer.h> #include <qdatastream.h> #include <qfile.h> #include <unistd.h> #include <errno.h> #include <sys/file.h> #include <sys/types.h> #include <sys/stat.h> #include <time.h> #ifndef QT_NO_COP /*! \class QCopEnvelope qcopenvelope_qws.h - \brief The QCopEnvelope class encapsulates QCop message sending. + \brief The QCopEnvelope class encapsulates and sends QCop messages + over QCopChannels. QCop messages allow applications to communicate with each other. - These messages are send using QCopEnvelope, and received by connecting + These messages are sent using QCopEnvelope, and received by connecting to a QCopChannel. To send a message, use the following protocol: \code QCopEnvelope e(channelname, messagename); e << parameter1 << parameter2 << ...; \endcode - For messages without parameters, you can simply use: + For messages without parameters, simply use: \code - QCopEnvelope (channelname, messagename); + QCopEnvelope e(channelname, messagename); \endcode - Do not try to simplify further as some compilers may not do - as you expect. + (Do not try to simplify this further as it may confuse some + compilers.) - The <tt>channelname</tt> of channels within Qtopia all start with "QPE/". - The <tt>messagename</tt> is a function identifier followed by a list of types - in parentheses. There are no spaces in the message name. + The \c{channelname} of channels within Qtopia all start with "QPE/". + The \c{messagename} is a function identifier followed by a list of types + in parentheses. There is no whitespace in the message name. - To receive a message, you will generally just use your applications - predefined QPE/Application/<i>appname</i> channel + To receive a message, you will generally just use your application's + predefined QPE/Application/\e{appname} channel (see QPEApplication::appMessage()), but you can make another channel - and connect it to a slot with: + and connect it to a slot like this: \code myChannel = new QCopChannel( "QPE/FooBar", this ); connect( myChannel, SIGNAL(received(const QCString &, const QByteArray &)), this, SLOT(fooBarMessage( const QCString &, const QByteArray &)) ); \endcode See also, the \link qcop.html list of Qtopia messages\endlink. */ /*! Constructs a QCopEnvelope that will write \a message to \a channel. - If \a message has parameters, you must then user operator<<() to - write the parameters. + If \a message has parameters, you must then use operator<<() to + add these parameters to the envelope. */ QCopEnvelope::QCopEnvelope( const QCString& channel, const QCString& message ) : QDataStream(new QBuffer), ch(channel), msg(message) { device()->open(IO_WriteOnly); } /*! - Writes the completed message and destroys the QCopEnvelope. + Writes the message and then destroys the QCopEnvelope. */ QCopEnvelope::~QCopEnvelope() { QByteArray data = ((QBuffer*)device())->buffer(); const int pref=16; if ( qstrncmp(ch.data(),"QPE/Application/",pref)==0 ) { QString qcopfn("/tmp/qcop-msg-"); qcopfn += ch.mid(pref); QFile qcopfile(qcopfn); if ( qcopfile.open(IO_WriteOnly | IO_Append) ) { if(flock(qcopfile.handle(), LOCK_EX)) { /* some error occured */ qWarning(QString("Failed to obtain file lock on %1 (%2)") .arg(qcopfn).arg( errno )); } /* file locked, but might be stale (e.g. program for whatever reason did not start). I modified more than 1 minute ago, truncate the file */ struct stat buf; time_t t; if (!fstat(qcopfile.handle(), &buf) && (time(&t) != (time_t)-1) ) { // success on fstat, lets compare times - if (buf.st_mtime + 60 < t) { + if (buf.st_ctime + 60 < t) { qWarning("stale file " + qcopfn + " found. Truncating"); ftruncate(qcopfile.handle(), 0); qcopfile.reset(); } } if ( !QCopChannel::isRegistered(ch) ) { int fsize = qcopfile.size(); { QDataStream ds(&qcopfile); ds << ch << msg << data; flock(qcopfile.handle(), LOCK_UN); qcopfile.close(); } if (fsize == 0) { QString cmd = ch.mid(pref); - cmd += " -qcop " + qcopfn; - Global::invoke(cmd); + Global::execute(cmd); } char c; for (int i=0; (c=msg[i]); i++) { if ( c == ' ' ) { // Return-value required // ###### wait for it break; } else if ( c == '(' ) { // No return value break; } } goto end; } // endif isRegisterd flock(qcopfile.handle(), LOCK_UN); qcopfile.close(); qcopfile.remove(); } else { qWarning(QString("Failed to obtain file lock on %1") .arg(qcopfn)); } // endif open } + else if (qstrncmp(ch.data(), "QPE/SOAP/", 9) == 0) { + // If this is a message that should go along the SOAP channel, we move the + // endpoint URL to the data section. + QString endpoint = ch.mid(9); + + ch = "QPE/SOAP"; + // Since byte arrays are explicitly shared, this is appended to the data variable.. + *this << endpoint; + } QCopChannel::send(ch,msg,data); end: delete device(); } #endif diff --git a/library/qcopenvelope_qws.h b/library/qcopenvelope_qws.h index f2a94d3..67aa843 100644 --- a/library/qcopenvelope_qws.h +++ b/library/qcopenvelope_qws.h @@ -1,39 +1,37 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef QCOPENVELOPE_H #define QCOPENVELOPE_H -#ifndef QT_H #include <qcopchannel_qws.h> #include <qdatastream.h> -#endif // QT_H #ifndef QT_NO_COP class QCopEnvelope : public QDataStream { QCString ch, msg; public: QCopEnvelope( const QCString& channel, const QCString& message ); ~QCopEnvelope(); }; #endif #endif diff --git a/library/qdawg.cpp b/library/qdawg.cpp index 3615693..af5dc82 100644 --- a/library/qdawg.cpp +++ b/library/qdawg.cpp @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "qdawg.h" #include <qintdict.h> #include <qvaluelist.h> #include <qtextstream.h> #include <qfile.h> #include <qtl.h> #include <limits.h> #include <stdio.h> // for mmap #include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> #include <fcntl.h> #include <errno.h> #include <unistd.h> class QDawgPrivate; class QTrie; typedef QValueList<QTrie*> TrieClub; typedef QIntDict<TrieClub> TrieClubDirectory; class TriePtr { public: QChar letter; QTrie* p; int operator <(const TriePtr& o) const; int operator >(const TriePtr& o) const; int operator <=(const TriePtr& o) const; }; @@ -151,97 +151,97 @@ void QTrie::distributeKeys(TrieClubDirectory& directory) if ( s->maxdepth+1 > maxdepth ) maxdepth = s->maxdepth+1; } if ( decendants ) { key += decendants + maxdepth*256 + children.count() * 65536; if ( !key ) key++; // unlikely } TrieClub* c = directory[key]; if ( !c ) directory.insert(key, (c = new TrieClub) ); c->prepend(this); } QTrie* QTrie::clubLeader(TrieClubDirectory& directory) { if ( !key ) return directory[0]->first(); for (TrieList::Iterator it=children.begin(); it!=children.end(); ++it) { QTrie* t= (*it).p->clubLeader(directory); (*it).p = t; } TrieClub *club = directory[key]; for (TrieClub::Iterator it = club->begin(); it != club->end(); ++it) { QTrie* o = *it; if ( o->equal(this) ) return o; } return this; } int QTrie::collectKeys() { int n=0; if ( key ) key=0,n+=children.count(); for (TrieList::Iterator it=children.begin(); it!=children.end(); ++it) n += (*it).p->collectKeys(); return n; } int TriePtr::operator <(const TriePtr& o) const { return letter < o.letter; } int TriePtr::operator >(const TriePtr& o) const { return letter > o.letter; } int TriePtr::operator <=(const TriePtr& o) const { return letter <= o.letter; } bool TrieList::equal(TrieList& l) { if ( count() != l.count() ) return FALSE; - sort(); l.sort(); + sort(); l.sort(); ConstIterator it2 = begin(); ConstIterator it = l.begin(); for( ; it != l.end(); ++it, ++it2 ) if ( (*it).letter != (*it2).letter || ! (*it).p->equal((*it2).p) ) return FALSE; return TRUE; } QTrie* TrieList::findAdd(QChar c) { for (Iterator it=begin(); it!=end(); ++it) { if ( (*it).letter == c ) return (*it).p; } TriePtr p; p.p = new QTrie; p.letter = c; prepend(p); sorted=FALSE; sort(); return p.p; } static const char* dawg_sig = "QDAWG100"; class QDawgPrivate { public: QDawgPrivate(QIODevice* dev) { QDataStream ds(dev); char sig[8]; ds.readRawBytes(sig,8); if ( !strncmp(dawg_sig,sig,8) ) { uint n; char* nn; ds.readBytes(nn,n); // #### endianness problem ignored. node = (QDawg::Node*)nn; nodes = n / sizeof(QDawg::Node); } else { node = 0; } } bool ok() const { return node; } QDawgPrivate(uchar* mem) { @@ -355,156 +355,273 @@ public: } const QDawg::Node* root() { return node; } private: void generateArray(QTrie* t) { nodes = 0; int n = t->collectKeys(); node = new QDawg::Node[n]; appendToArray(t); ASSERT(n == nodes); } int appendToArray(QTrie* t) { if ( !t->key ) { if ( !t->children.count() ) return 0; t->key = nodes; nodes += t->children.count(); QDawg::Node* n = &node[t->key-1]; int here = t->key; for (TrieList::Iterator it=t->children.begin(); it!=t->children.end(); ++it) { QTrie* s = (*it).p; ++n; n->let = (*it).letter.unicode(); n->isword = s->isword; n->islast = 0; n->offset = appendToArray(s); if ( n->offset ) { int t = n->offset-here; n->offset=t; if ( n->offset != t ) qWarning("Overflow: too many words"); } here++; } n->islast = 1; } return t->key; } private: int nodes; QDawg::Node *node; }; +/*! + \class QDawg qdawg.h + \brief The QDawg class provides an implementation of a Directed Acyclic Word Graph. + A DAWG provides very fast look-up of words in a word list. + + The word list is created using readFile(), read() or + createFromWords(). A list of all the DAWG's words is returned by + allWords(), and the total number of words is returned by + countWords(). Use contains() to see if a particular word is in the + DAWG. The root \link qdawg-node.html node\endlink is returned by root(). + + A global DAWG is maintained for the current locale. See the + \l Global class for details. + + The structure of a DAWG is a graph of \link qdawg-node.html + Nodes\endlink. There are no cycles in the graph (since there are no + inifinitely repeating words). Each \link qdawg-node.html + Node\endlink is a member of a list of \link qdawg-node.html + Nodes\endlink called a child list. Each \link qdawg-node.html + Node\endlink in the child list has a \e letter, an \e isWord flag, + at most one \e jump arc, and at most one arc to the next child in + the list. + + If you traverse the \link qdawg-node.html Nodes\endlink in a DAWG, + starting from the root(), and you concatenate all the letters from + the single child in each child list that you visit, at every \link + qdawg-node.html Node\endlink which has the isWord flag set your + concatenation will be a word in the list represented by the DAWG. + + For example, the DAWG below represents the word list: + ban, band, can, cane, cans, pan, pane, pans. + + This structuring not only provides O(1) lookup of words in the word list, + but also produces a smaller storage file than a plain text file word list. + + \img qdawg.png +*/ + +/*! + Constructs a new empty DAWG. +*/ QDawg::QDawg() { d = 0; } +/*! + Deletes the DAWG. +*/ QDawg::~QDawg() { delete d; } +/*! + \overload + Replaces all the DAWG's words with words read from \a dev. +*/ bool QDawg::createFromWords(QIODevice* dev) { delete d; QTextStream i(dev); QTrie* trie = new QTrie; int n=0; while (!i.atEnd()) { trie->insertWord(QString::fromUtf8(i.readLine())); n++; } if ( n ) d = new QDawgPrivate(trie); else d = 0; return TRUE; } +/*! + Replaces all the DAWG's words with the words in the \a list. +*/ void QDawg::createFromWords(const QStringList& list) { delete d; if ( list.count() ) { QTrie* trie = new QTrie; for (QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) { trie->insertWord(*it); } d = new QDawgPrivate(trie); } else { d = 0; } } +/*! + Returns a list of all the words in the DAWG. +*/ QStringList QDawg::allWords() const { QStringList result; if ( d ) d->appendAllWords(result); return result; } +/*! + Replaces the DAWG with the DAWG in \a filename. + The file is memory-mapped. + + \sa write() +*/ bool QDawg::readFile(const QString& filename) { delete d; d = 0; int f = ::open( QFile::encodeName(filename), O_RDONLY ); if ( f < 0 ) return FALSE; struct stat st; if ( !fstat( f, &st ) ) { char * tmp = (char*)mmap( 0, st.st_size, // any address, whole file PROT_READ, // read-only memory MAP_FILE | MAP_PRIVATE, // swap-backed map from file f, 0 ); // from offset 0 of f if ( tmp && tmp != (char*)MAP_FAILED ) d = new QDawgPrivate((uchar*)tmp); } ::close( f ); return d; } +/*! + Replaces the DAWG with the DAWG in \a dev. + The file is memory-mapped. + + \sa write() +*/ bool QDawg::read(QIODevice* dev) { delete d; d = new QDawgPrivate(dev); if ( d->ok() ) return TRUE; delete d; d = 0; return FALSE; } +/*! + Writes the DAWG to \a dev, in a custom QDAWG format. +*/ bool QDawg::write(QIODevice* dev) const { return d ? d->write(dev) : TRUE; } +/*! + Returns the number of words in the DAWG. +*/ int QDawg::countWords() const { return d ? d->countWords() : 0; } +/*! + Returns the root \link qdawg-node.html Node\endlink of the DAWG. +*/ const QDawg::Node* QDawg::root() const { return d ? d->root() : 0; } +/*! + Returns TRUE if the DAWG contains the word \a s; otherwise returns + FALSE. +*/ bool QDawg::contains(const QString& s) const { return d ? d->contains(s) : FALSE; } +/*! + \internal + + For debugging: prints out the DAWG contents. +*/ void QDawg::dump() const { if ( d ) d->dump(); } +/*! + \class QDawg::Node qdawg.h + \brief The QDawg::Node class represents one node of a QDawg. +*/ + +/*! + \fn QChar QDawg::Node::letter() const + + Returns this Node's letter. +*/ +/*! + \fn bool QDawg::Node::isWord() const + + Returns TRUE if this Node is the end of a word; otherwise returns + FALSE. +*/ +/*! + \fn bool QDawg::Node::isLast() const + + Returns TRUE if this Node is the last in the child list; otherwise + returns FALSE. +*/ +/*! + \fn const Node* QDawg::Node::next() const + + Returns the next child Node in the child list or 0 if the current + Node isLast(). +*/ +/*! + \fn const Node* QDawg::Node::jump() const + + Returns the node connected to this Node. +*/ diff --git a/library/qdawg.h b/library/qdawg.h index ea182f3..e3b1628 100644 --- a/library/qdawg.h +++ b/library/qdawg.h @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef QDAWG_H #define QDAWG_H #include <qstringlist.h> class QIODevice; class QDawgPrivate; class QDawg { public: QDawg(); ~QDawg(); bool readFile(const QString&); // may mmap bool read(QIODevice* dev); bool write(QIODevice* dev) const; bool createFromWords(QIODevice* dev); void createFromWords(const QStringList&); QStringList allWords() const; bool contains(const QString&) const; int countWords() const; // Unicode 0..3FFF; an offset can be used for other ranges static const int nodebits=18; class Node { friend class QDawgPrivate; uint let:(30-nodebits); uint isword:1; uint islast:1; int offset:nodebits; Node() { } diff --git a/library/qlibrary.cpp b/library/qlibrary.cpp index 4aabbc5..cbf49a3 100644 --- a/library/qlibrary.cpp +++ b/library/qlibrary.cpp @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "qlibrary_p.h" // uncomment this to get error messages //#define QT_DEBUG_COMPONENT 1 // uncomment this to get error and success messages //#define QT_DEBUG_COMPONENT 2 #ifndef QT_DEBUG_COMPONENT # if defined(QT_DEBUG) # define QT_DEBUG_COMPONENT 1 # endif #endif #ifndef QT_NO_COMPONENT // KAI C++ has at the moment problems with unloading the Qt plugins. So don't // unload them as a workaround for now. #if defined(Q_CC_KAI) || defined(Q_OS_MAC) #define QT_NO_LIBRARY_UNLOAD #endif #if defined(Q_WS_WIN) && !defined(QT_MAKEDLL) #define QT_NO_LIBRARY_UNLOAD #endif /* Platform independent QLibraryPrivate implementations */ #ifndef QT_LITE_COMPONENT #include "qtimer.h" extern Q_EXPORT QApplication *qApp; diff --git a/library/qlibrary.h b/library/qlibrary.h index d33173b..67ed3bf 100644 --- a/library/qlibrary.h +++ b/library/qlibrary.h @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef QLIBRARY_H #define QLIBRARY_H #include <qstring.h> #ifndef QT_NO_COMPONENT #include <qpe/qcom.h> class QLibraryPrivate; class Q_EXPORT QLibrary { public: enum Policy { Delayed, Immediately, Manual }; QLibrary( const QString& filename, Policy = Delayed ); ~QLibrary(); void *resolve( const char* ); static void *resolve( const QString &filename, const char * ); bool unload( bool force = FALSE ); bool isLoaded() const; void setPolicy( Policy pol ); Policy policy() const; diff --git a/library/qlibrary_p.h b/library/qlibrary_p.h index 4734228..33cab6f 100644 --- a/library/qlibrary_p.h +++ b/library/qlibrary_p.h @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef QLIBRARY_P_H #define QLIBRARY_P_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists for the convenience // of the QLibrary class. This header file may change from // version to version without notice, or even be removed. // // We mean it. // // #include "qlibrary.h" //#ifndef QT_NO_COMPONENT //#ifndef QT_H #include "qwindowdefs.h" //#ifndef QT_LITE_COMPONENT #include "qobject.h" //#endif //#endif // QT_H class QTimer; class QLibrary; class QLibraryInterface; /* Private helper class that saves the platform dependent handle diff --git a/library/qlibrary_unix.cpp b/library/qlibrary_unix.cpp index 50a5478..7740321 100644 --- a/library/qlibrary_unix.cpp +++ b/library/qlibrary_unix.cpp @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "qlibrary_p.h" #ifndef QT_NO_COMPONENT /* The platform dependent implementations of - loadLibrary - freeLibrary - resolveSymbol It's not too hard to guess what the functions do. */ #if defined(Q_OS_HPUX) // for HP-UX < 11.x and 32 bit #include <dl.h> bool QLibraryPrivate::loadLibrary() { if ( pHnd ) return TRUE; QString filename = library->library(); pHnd = (void*)shl_load( filename.latin1(), BIND_DEFERRED | BIND_NONFATAL | DYNAMIC_PATH, 0 ); #if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT) if ( !pHnd ) qDebug( "Failed to load library %s!", filename.latin1() ); #endif return pHnd != 0; } bool QLibraryPrivate::freeLibrary() diff --git a/library/qmath.h b/library/qmath.h index 629fe99..fc18fdb 100644 --- a/library/qmath.h +++ b/library/qmath.h @@ -1,42 +1,42 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef QMATH_H #define QMATH_H #ifdef __cplusplus extern "C" { #endif double qSqrt( double value ); double qSin( double a ); double qCos( double a ); double qATan2( double y, double x ); double qATan( double a ); double qASin( double a ); double qTan( double a ); double qFloor( double a ); double qFabs( double a ); #ifdef __cplusplus } #endif #endif diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp index 8aae786..3ca6d73 100644 --- a/library/qpeapplication.cpp +++ b/library/qpeapplication.cpp @@ -1,1505 +1,1614 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** ** $Id$ ** **********************************************************************/ #define QTOPIA_INTERNAL_LANGLIST #include <stdlib.h> #include <unistd.h> #include <qfile.h> #ifdef Q_WS_QWS #ifndef QT_NO_COP #if QT_VERSION <= 231 #define private public #define sendLocally processEvent #include "qcopenvelope_qws.h" #undef private #else #include "qcopenvelope_qws.h" #endif #endif #include <qwindowsystem_qws.h> #endif #include <qtextstream.h> #include <qpalette.h> #include <qbuffer.h> #include <qptrdict.h> #include <qregexp.h> #include <qdir.h> #include <qlabel.h> #include <qdialog.h> #include <qdragobject.h> +#include <qtextcodec.h> #include <qevent.h> #include <qtooltip.h> #include <qsignal.h> #include "qpeapplication.h" #include "qpestyle.h" #include "styleinterface.h" #if QT_VERSION >= 300 #include <qstylefactory.h> #else #include <qplatinumstyle.h> #include <qwindowsstyle.h> #include <qmotifstyle.h> #include <qmotifplusstyle.h> #include "lightstyle.h" #include <qpe/qlibrary.h> #endif #include "global.h" #include "resource.h" +#if QT_VERSION <= 230 && defined(QT_NO_CODECS) +#include "qutfcodec.h" +#endif #include "config.h" +#include "network.h" +#ifdef QWS #include "fontmanager.h" -#include "fontdatabase.h" +#endif #include "alarmserver.h" #include "applnk.h" #include "qpemenubar.h" +#include "textcodecinterface.h" +#include "imagecodecinterface.h" #include <unistd.h> #include <sys/file.h> #include <sys/ioctl.h> #include <sys/soundcard.h> -class QPEApplicationData -{ +class QPEApplicationData { public: QPEApplicationData() : presstimer( 0 ), presswidget( 0 ), rightpressed( FALSE ), kbgrabber( 0 ), kbregrab( FALSE ), notbusysent( FALSE ), preloaded( FALSE ), forceshow( FALSE ), nomaximize( FALSE ), qpe_main_widget( 0 ), keep_running( TRUE ) { qcopq.setAutoDelete( TRUE ); } int presstimer; QWidget* presswidget; QPoint presspos; - bool rightpressed; + bool rightpressed : 1; // AEH why not use uint foobar :1; if it's tt style -zecke int kbgrabber; - bool kbregrab; - bool notbusysent; + bool kbregrab : 1; + bool notbusysent : 1; QString appName; - struct QCopRec - { - QCopRec( const QCString &ch, const QCString &msg, - const QByteArray &d ) : - channel( ch ), message( msg ), data( d ) - { } + struct QCopRec { + QCopRec( const QCString &ch, const QCString &msg, + const QByteArray &d ) : + channel( ch ), message( msg ), data( d ) { } QCString channel; QCString message; QByteArray data; }; - bool preloaded; - bool forceshow; - bool nomaximize; + bool preloaded : 1; + bool forceshow : 1; + bool nomaximize : 1; QWidget* qpe_main_widget; - bool keep_running; + bool keep_running : 1; QList<QCopRec> qcopq; void enqueueQCop( const QCString &ch, const QCString &msg, const QByteArray &data ) { qcopq.append( new QCopRec( ch, msg, data ) ); } - void sendQCopQ() - { - QCopRec * r; + void sendQCopQ() { + QCopRec * r; +#ifndef QT_NO_COP for ( QListIterator<QCopRec> it( qcopq ); ( r = it.current() ); ++it ) QCopChannel::sendLocally( r->channel, r->message, r->data ); +#endif qcopq.clear(); } + static void show_mx(QWidget* mw, bool nomaximize) { + if ( mw->layout() && mw->inherits("QDialog") ) { + QPEApplication::showDialog((QDialog*)mw,nomaximize); + } else { +#ifdef Q_WS_QWS + if ( !nomaximize ) + mw->showMaximized(); + else +#endif + mw->show(); + } + } + static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ ) + { + /* + // This works but disable it for now until it is safe to apply + // What is does is scan the .desktop files of all the apps for + // the applnk that has the corresponding argv[0] as this program + // then it uses the name stored in the .desktop file as the caption + // for the main widget. This saves duplicating translations for + // the app name in the program and in the .desktop files. + + AppLnkSet apps( appsPath ); + + QList<AppLnk> appsList = apps.children(); + for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) { + if ( (*it)->exec() == appName ) { + mw->setCaption( (*it)->name() ); + return TRUE; + } + } + */ + return FALSE; + } + + + void show(QWidget* mw, bool nomax) + { + setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" ); + nomaximize = nomax; + qpe_main_widget = mw; +#ifndef QT_NO_COP + sendQCopQ(); +#endif + if ( preloaded ) { + if(forceshow) + show_mx(mw,nomax); + } else if ( keep_running ) { + show_mx(mw,nomax); + } + } + + void loadTextCodecs() + { + QString path = QPEApplication::qpeDir() + "/plugins/textcodecs"; + QDir dir( path, "lib*.so" ); + QStringList list = dir.entryList(); + QStringList::Iterator it; + for ( it = list.begin(); it != list.end(); ++it ) { + TextCodecInterface *iface = 0; + QLibrary *lib = new QLibrary( path + "/" + *it ); + if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { + QValueList<int> mibs = iface->mibEnums(); + for (QValueList<int>::ConstIterator i=mibs.begin(); i!=mibs.end(); ++i) { + (void)iface->createForMib(*i); + // ### it exists now; need to remember if we can delete it + } + } else { + lib->unload(); + delete lib; + } + } + } + + void loadImageCodecs() + { + QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs"; + QDir dir( path, "lib*.so" ); + QStringList list = dir.entryList(); + QStringList::Iterator it; + for ( it = list.begin(); it != list.end(); ++it ) { + ImageCodecInterface *iface = 0; + QLibrary *lib = new QLibrary( path + "/" + *it ); + if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { + QStringList formats = iface->keys(); + for (QStringList::ConstIterator i=formats.begin(); i!=formats.end(); ++i) { + (void)iface->installIOHandler(*i); + // ### it exists now; need to remember if we can delete it + } + } else { + lib->unload(); + delete lib; + } + } + } + QString styleName; + QString decorationName; }; -class ResourceMimeFactory : public QMimeSourceFactory -{ +class ResourceMimeFactory : public QMimeSourceFactory { public: ResourceMimeFactory() { setFilePath( Global::helpPath() ); setExtensionType( "html", "text/html;charset=UTF-8" ); } const QMimeSource* data( const QString& abs_name ) const { const QMimeSource * r = QMimeSourceFactory::data( abs_name ); if ( !r ) { int sl = abs_name.length(); do { sl = abs_name.findRev( '/', sl - 1 ); QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name; int dot = name.findRev( '.' ); if ( dot >= 0 ) name = name.left( dot ); QImage img = Resource::loadImage( name ); if ( !img.isNull() ) r = new QImageDrag( img ); } while ( !r && sl > 0 ); } return r; } }; static int muted = 0; static int micMuted = 0; static void setVolume( int t = 0, int percent = -1 ) { - switch ( t ) { - case 0: { - Config cfg( "qpe" ); - cfg.setGroup( "Volume" ); - if ( percent < 0 ) - percent = cfg.readNumEntry( "VolumePercent", 50 ); - int fd = 0; - if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { - int vol = muted ? 0 : percent; - // set both channels to same volume - vol |= vol << 8; - ioctl( fd, MIXER_WRITE( 0 ), &vol ); - ::close( fd ); - } - } - break; - } + switch ( t ) { + case 0: { + Config cfg( "qpe" ); + cfg.setGroup( "Volume" ); + if ( percent < 0 ) + percent = cfg.readNumEntry( "VolumePercent", 50 ); + int fd = 0; + if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { + int vol = muted ? 0 : percent; + // set both channels to same volume + vol |= vol << 8; + ioctl( fd, MIXER_WRITE( 0 ), &vol ); + ::close( fd ); + } + } + break; + } } static void setMic( int t = 0, int percent = -1 ) { - switch ( t ) { - case 0: { - Config cfg( "qpe" ); - cfg.setGroup( "Volume" ); - if ( percent < 0 ) - percent = cfg.readNumEntry( "Mic", 50 ); - - int fd = 0; - int mic = micMuted ? 0 : percent; - if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { - ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic ); - ::close( fd ); - } - } - break; - } + switch ( t ) { + case 0: { + Config cfg( "qpe" ); + cfg.setGroup( "Volume" ); + if ( percent < 0 ) + percent = cfg.readNumEntry( "Mic", 50 ); + + int fd = 0; + int mic = micMuted ? 0 : percent; + if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { + ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic ); + ::close( fd ); + } + } + break; + } } /*! \class QPEApplication qpeapplication.h \brief The QPEApplication class implements various system services that are available to all Qtopia applications. - Simply by using QPEApplication instead of QApplication, a plain Qt + Simply by using QPEApplication instead of QApplication, a standard Qt application becomes a Qtopia application. It automatically follows style changes, quits and raises, and in the case of \link docwidget.html document-oriented\endlink applications, - changes the current displayed document in response to the environment. + changes the currently displayed document in response to the environment. + + To create a \link docwidget.html document-oriented\endlink + application use showMainDocumentWidget(); to create a + non-document-oriented application use showMainWidget(). The + keepRunning() function indicates whether the application will + continue running after it's processed the last \link qcop.html + QCop\endlink message. This can be changed using setKeepRunning(). + + A variety of signals are emitted when certain events occur, for + example, timeChanged(), clockChanged(), weekChanged(), + dateFormatChanged() and volumeChanged(). If the application receives + a \link qcop.html QCop\endlink message on the application's + QPE/Application/\e{appname} channel, the appMessage() signal is + emitted. There are also flush() and reload() signals, which + are emitted when synching begins and ends respectively - upon these + signals, the application should save and reload any data + files that are involved in synching. Most of these signals will initially + be received and unfiltered through the appMessage() signal. + + This class also provides a set of useful static functions. The + qpeDir() and documentDir() functions return the respective paths. + The grabKeyboard() and ungrabKeyboard() functions are used to + control whether the application takes control of the device's + physical buttons (e.g. application launch keys). The stylus' mode of + operation is set with setStylusOperation() and retrieved with + stylusOperation(). There are also setInputMethodHint() and + inputMethodHint() functions. + + \ingroup qtopiaemb */ /*! \fn void QPEApplication::clientMoused() \internal */ /*! \fn void QPEApplication::timeChanged(); - - This signal is emitted when the time jumps forward or backwards - by more than the normal passage of time. + This signal is emitted when the time changes outside the normal + passage of time, i.e. if the time is set backwards or forwards. */ /*! \fn void QPEApplication::clockChanged( bool ampm ); - This signal is emitted when the user changes the style - of clock. If \a ampm is TRUE, the user wants a 12-hour - AM/PM close, otherwise, they want a 24-hour clock. + This signal is emitted when the user changes the clock's style. If + \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise, + they want a 24-hour clock. +*/ + +/*! + \fn void QPEApplication::volumeChanged( bool muted ) + + This signal is emitted whenever the mute state is changed. If \a + muted is TRUE, then sound output has been muted. +*/ + +/*! + \fn void QPEApplication::weekChanged( bool startOnMonday ) + + This signal is emitted if the week start day is changed. If \a + startOnMonday is TRUE then the first day of the week is Monday; if + \a startOnMonday is FALSE then the first day of the week is + Sunday. +*/ + +/*! + \fn void QPEApplication::dateFormatChanged() + + This signal is emitted whenever the date format is changed. +*/ + +/*! + \fn void QPEApplication::flush() + + ### +*/ + +/*! + \fn void QPEApplication::reload() + */ /*! \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data ) - This signal is emitted when a message is received on the - QPE/Application/<i>appname</i> QCop channel for this application. + This signal is emitted when a message is received on this + application's QPE/Application/<i>appname</i> \link qcop.html + QCop\endlink channel. The slot to which you connect this signal uses \a msg and \a data in the following way: \code - void MyWidget::receive( const QCString& msg, const QByteArray& data ) - { - QDataStream stream( data, IO_ReadOnly ); - if ( msg == "someMessage(int,int,int)" ) { - int a,b,c; - stream >> a >> b >> c; - ... - } else if ( msg == "otherMessage(QString)" ) { - ... - } + void MyWidget::receive( const QCString& msg, const QByteArray& data ) + { + QDataStream stream( data, IO_ReadOnly ); + if ( msg == "someMessage(int,int,int)" ) { + int a,b,c; + stream >> a >> b >> c; + ... + } else if ( msg == "otherMessage(QString)" ) { + ... + } } \endcode \sa qcop.html + Note that messages received here may be processed by qpe application + and emitted as signals, such as flush() and reload(). */ /*! Constructs a QPEApplication just as you would construct a QApplication, passing \a argc, \a argv, and \a t. + + For applications, \a t should be the default, GuiClient. Only + the Qtopia server passes GuiServer. */ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) - : QApplication( argc, argv, t ) + : QApplication( argc, argv, t ) { - int dw = desktop() ->width(); - if ( dw < 200 ) { - // setFont( QFont( "helvetica", 8 ) ); - AppLnk::setSmallIconSize( 10 ); - AppLnk::setBigIconSize( 28 ); - } + d = new QPEApplicationData; + d->loadTextCodecs(); + d->loadImageCodecs(); + int dw = desktop() ->width(); + if ( dw < 200 ) { + setFont( QFont( "helvetica", 8 ) ); + AppLnk::setSmallIconSize( 10 ); + AppLnk::setBigIconSize( 28 ); + }else if ( dw > 600 ) { + setFont( QFont( "helvetica", 12 ) ); + AppLnk::setSmallIconSize( 24 ); + AppLnk::setBigIconSize( 48 ); + }else if ( dw > 400 ) { + setFont( QFont( "helvetica", 12 ) ); + AppLnk::setSmallIconSize( 16 ); + AppLnk::setBigIconSize( 32 ); + } - d = new QPEApplicationData; - QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory ); - connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) ); -#if defined(Q_WS_QWS) && !defined(QT_NO_COP) + QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory ); - QString qcopfn( "/tmp/qcop-msg-" ); - qcopfn += QString( argv[ 0 ] ); // append command name + connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) ); +#if defined(Q_WS_QWS) && !defined(QT_NO_COP) - QFile f( qcopfn ); - if ( f.open( IO_ReadOnly ) ) { - flock( f.handle(), LOCK_EX ); - } + QString qcopfn( "/tmp/qcop-msg-" ); + qcopfn += QString( argv[ 0 ] ); // append command name - sysChannel = new QCopChannel( "QPE/System", this ); - connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), - this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) ); - - QCString channel = QCString( argv[ 0 ] ); - channel.replace( QRegExp( ".*/" ), "" ); - d->appName = channel; - channel = "QPE/Application/" + channel; - pidChannel = new QCopChannel( channel, this ); - connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), - this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) ); - - if ( f.isOpen() ) { - d->keep_running = FALSE; - QDataStream ds( &f ); - QCString channel, message; - QByteArray data; - while ( !ds.atEnd() ) { - ds >> channel >> message >> data; - d->enqueueQCop( channel, message, data ); - } + QFile f( qcopfn ); + if ( f.open( IO_ReadOnly ) ) { + flock( f.handle(), LOCK_EX ); + } - flock( f.handle(), LOCK_UN ); - f.close(); - f.remove(); - } + sysChannel = new QCopChannel( "QPE/System", this ); + connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), + this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) ); + + QCString channel = QCString( argv[ 0 ] ); + channel.replace( QRegExp( ".*/" ), "" ); + d->appName = channel; + channel = "QPE/Application/" + channel; + pidChannel = new QCopChannel( channel, this ); + connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), + this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) ); + + if ( f.isOpen() ) { + d->keep_running = FALSE; + QDataStream ds( &f ); + QCString channel, message; + QByteArray data; + while ( !ds.atEnd() ) { + ds >> channel >> message >> data; + d->enqueueQCop( channel, message, data ); + } + + flock( f.handle(), LOCK_UN ); + f.close(); + f.remove(); + } - for ( int a = 0; a < argc; a++ ) { - if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) { - argv[ a ] = argv[ a + 1 ]; - a++; - d->preloaded = TRUE; - argc -= 1; - } - else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) { - argv[ a ] = argv[ a + 1 ]; - a++; - d->preloaded = TRUE; - d->forceshow = TRUE; - argc -= 1; - } - } + for ( int a = 0; a < argc; a++ ) { + if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) { + argv[ a ] = argv[ a + 1 ]; + a++; + d->preloaded = TRUE; + argc -= 1; + } + else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) { + argv[ a ] = argv[ a + 1 ]; + a++; + d->preloaded = TRUE; + d->forceshow = TRUE; + argc -= 1; + } + } - /* overide stored arguments */ - setArgs( argc, argv ); + /* overide stored arguments */ + setArgs( argc, argv ); #endif - qwsSetDecoration( new QPEDecoration() ); +// qwsSetDecoration( new QPEDecoration() ); #ifndef QT_NO_TRANSLATION - QStringList langs = Global::languageList(); - for ( QStringList::ConstIterator it = langs.begin(); it != langs.end(); ++it ) { - QString lang = *it; - - QTranslator * trans; - QString tfn; - - trans = new QTranslator( this ); - tfn = qpeDir() + "/i18n/" + lang + "/libqpe.qm"; - if ( trans->load( tfn ) ) - installTranslator( trans ); - else - delete trans; - - trans = new QTranslator( this ); - tfn = qpeDir() + "/i18n/" + lang + "/" + d->appName + ".qm"; - if ( trans->load( tfn ) ) - installTranslator( trans ); - else - delete trans; - - /* - * not required. if using one of these languages, you might as well install - * a custom font. - - //###language/font hack; should look it up somewhere - if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { - QFont fn = FontManager::unicodeFont( FontManager::Proportional ); - setFont( fn ); - } - - else { - */ - Config config( "qpe" ); - config.setGroup( "Appearance" ); - QString familyStr = config.readEntry( "FontFamily", "helvetica" ); - QString styleStr = config.readEntry( "FontStyle", "Regular" ); - QString sizeStr = config.readEntry( "FontSize", "10" ); - QString charSetStr = config.readEntry( "FontCharSet", QString::null ); - bool ok; - int i_size = sizeStr.toInt( &ok, 10 ); - FontDatabase fdb; - QFont selectedFont = fdb.font( familyStr, styleStr, i_size, charSetStr ); - setFont( selectedFont ); - //} - } - + QStringList langs = Global::languageList(); + for ( QStringList::ConstIterator it = langs.begin(); it != langs.end(); ++it ) { + QString lang = *it; + + QTranslator * trans; + QString tfn; + + trans = new QTranslator( this ); + tfn = qpeDir() + "/i18n/" + lang + "/libqpe.qm"; + if ( trans->load( tfn ) ) + installTranslator( trans ); + else + delete trans; + + trans = new QTranslator( this ); + tfn = qpeDir() + "/i18n/" + lang + "/" + d->appName + ".qm"; + if ( trans->load( tfn ) ) + installTranslator( trans ); + else + delete trans; + + //###language/font hack; should look it up somewhere +#ifdef QWS + if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { + QFont fn = FontManager::unicodeFont( FontManager::Proportional ); + setFont( fn ); + } +#endif + } #endif - applyStyle(); + applyStyle(); - if ( type() == GuiServer ) { - setVolume(); - } + if ( type() == GuiServer ) { + setVolume(); + } - installEventFilter( this ); + installEventFilter( this ); - QPEMenuToolFocusManager::initialize(); + QPEMenuToolFocusManager::initialize(); #ifdef QT_NO_QWS_CURSOR - // if we have no cursor, probably don't want tooltips - QToolTip::setEnabled( FALSE ); + // if we have no cursor, probably don't want tooltips + QToolTip::setEnabled( FALSE ); #endif } static QPtrDict<void>* inputMethodDict = 0; static void createInputMethodDict() { - if ( !inputMethodDict ) - inputMethodDict = new QPtrDict<void>; + if ( !inputMethodDict ) + inputMethodDict = new QPtrDict<void>; } /*! Returns the currently set hint to the system as to whether - \a w has any use for text input methods. + widget \a w has any use for text input methods. - \sa setInputMethodHint() + + \sa setInputMethodHint() InputMethodHint */ QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w ) { - if ( inputMethodDict && w ) - return ( InputMethodHint ) ( int ) inputMethodDict->find( w ); - return Normal; + if ( inputMethodDict && w ) + return ( InputMethodHint ) ( int ) inputMethodDict->find( w ); + return Normal; } /*! - \enum QPEApplication::InputMethodHint + \enum QPEApplication::InputMethodHint - \value Normal the application sometimes needs text input (the default). - \value AlwaysOff the application never needs text input. - \value AlwaysOn the application always needs text input. + \value Normal the application sometimes needs text input (the default). + \value AlwaysOff the application never needs text input. + \value AlwaysOn the application always needs text input. */ /*! - Hints to the system that \a w has use for text input methods + Hints to the system that widget \a w has use for text input methods as specified by \a mode. - \sa inputMethodHint() + \sa inputMethodHint() InputMethodHint */ void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode ) { - createInputMethodDict(); - if ( mode == Normal ) { - inputMethodDict->remove - ( w ); - } - else { - inputMethodDict->insert( w, ( void* ) mode ); - } + createInputMethodDict(); + if ( mode == Normal ) { + inputMethodDict->remove + ( w ); + } + else { + inputMethodDict->insert( w, ( void* ) mode ); + } } class HackDialog : public QDialog { public: - void acceptIt() - { - accept(); - } - void rejectIt() - { - reject(); - } + void acceptIt() { accept(); } + void rejectIt() { reject(); } }; void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key ) { - // specialised actions for certain widgets. May want to - // add more stuff here. - if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" ) - && activePopupWidget() ->parentWidget() - && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) ) - key = Qt::Key_Return; - - if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) ) - key = Qt::Key_Return; - - ke->simpleData.keycode = key; + // specialised actions for certain widgets. May want to + // add more stuff here. + if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" ) + && activePopupWidget() ->parentWidget() + && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) ) + key = Qt::Key_Return; + + if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) ) + key = Qt::Key_Return; + +#ifdef QWS + ke->simpleData.keycode = key; +#endif } class HackWidget : public QWidget { public: - bool needsOk() - { - return ( getWState() & WState_Reserved1 ); - } + bool needsOk() + { return ( getWState() & WState_Reserved1 ); } }; /*! \internal */ + +#ifdef QWS bool QPEApplication::qwsEventFilter( QWSEvent * e ) { - if ( !d->notbusysent && e->type == QWSEvent::Focus ) { - if ( qApp->type() != QApplication::GuiServer ) { - QCopEnvelope e( "QPE/System", "notBusy(QString)" ); - e << d->appName; - } - d->notbusysent = TRUE; - } - if ( type() == GuiServer ) { - switch ( e->type ) { - case QWSEvent::Mouse: - if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) ) - emit clientMoused(); - } - } - if ( e->type == QWSEvent::Key ) { - if ( d->kbgrabber == 1 ) - return TRUE; - QWSKeyEvent *ke = ( QWSKeyEvent * ) e; - if ( ke->simpleData.keycode == Qt::Key_F33 ) { - // Use special "OK" key to press "OK" on top level widgets - QWidget * active = activeWindow(); - QWidget *popup = 0; - if ( active && active->isPopup() ) { - popup = active; - active = active->parentWidget(); - } - if ( active && ( int ) active->winId() == ke->simpleData.window && - !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { - if ( ke->simpleData.is_press ) { - if ( popup ) - popup->close(); - if ( active->inherits( "QDialog" ) ) { - HackDialog * d = ( HackDialog * ) active; - d->acceptIt(); - return TRUE; - } - else if ( ( ( HackWidget * ) active ) ->needsOk() ) { - QSignal s; - s.connect( active, SLOT( accept() ) ); - s.activate(); - } - else { - // do the same as with the select key: Map to the default action of the widget: - mapToDefaultAction( ke, Qt::Key_Return ); - } - } - } - } - else if ( ke->simpleData.keycode == Qt::Key_F30 ) { - // Use special "select" key to do whatever default action a widget has - mapToDefaultAction( ke, Qt::Key_Space ); - } - else if ( ke->simpleData.keycode == Qt::Key_Escape && - ke->simpleData.is_press ) { - // Escape key closes app if focus on toplevel - QWidget * active = activeWindow(); - if ( active && active->testWFlags( WType_TopLevel ) && - ( int ) active->winId() == ke->simpleData.window && - !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { - if ( active->inherits( "QDialog" ) ) { - HackDialog * d = ( HackDialog * ) active; - d->rejectIt(); - return TRUE; - } - else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { - active->close(); - } - } - } + if ( !d->notbusysent && e->type == QWSEvent::Focus ) { + if ( qApp->type() != QApplication::GuiServer ) { + QCopEnvelope e( "QPE/System", "notBusy(QString)" ); + e << d->appName; + } + d->notbusysent = TRUE; + } + if ( type() == GuiServer ) { + switch ( e->type ) { + case QWSEvent::Mouse: + if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) ) + emit clientMoused(); + break; + default: + break; + } + } + if ( e->type == QWSEvent::Key ) { + if ( d->kbgrabber == 1 ) + return TRUE; + QWSKeyEvent *ke = ( QWSKeyEvent * ) e; + if ( ke->simpleData.keycode == Qt::Key_F33 ) { + // Use special "OK" key to press "OK" on top level widgets + QWidget * active = activeWindow(); + QWidget *popup = 0; + if ( active && active->isPopup() ) { + popup = active; + active = active->parentWidget(); + } + if ( active && ( int ) active->winId() == ke->simpleData.window && + !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { + if ( ke->simpleData.is_press ) { + if ( popup ) + popup->close(); + if ( active->inherits( "QDialog" ) ) { + HackDialog * d = ( HackDialog * ) active; + d->acceptIt(); + return TRUE; + } + else if ( ( ( HackWidget * ) active ) ->needsOk() ) { + QSignal s; + s.connect( active, SLOT( accept() ) ); + s.activate(); + } + else { + // do the same as with the select key: Map to the default action of the widget: + mapToDefaultAction( ke, Qt::Key_Return ); + } + } + } + } else if ( ke->simpleData.keycode == Qt::Key_F30 ) { + // Use special "select" key to do whatever default action a widget has + mapToDefaultAction( ke, Qt::Key_Space ); + } + else if ( ke->simpleData.keycode == Qt::Key_Escape && + ke->simpleData.is_press ) { + // Escape key closes app if focus on toplevel + QWidget * active = activeWindow(); + if ( active && active->testWFlags( WType_TopLevel ) && + ( int ) active->winId() == ke->simpleData.window && + !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { + if ( active->inherits( "QDialog" ) ) { + HackDialog * d = ( HackDialog * ) active; + d->rejectIt(); + return TRUE; + } + else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { + active->close(); + } + } + } #if QT_VERSION < 231 - // Filter out the F4/Launcher key from apps - // ### The launcher key may not always be F4 on all devices - if ( ( ( QWSKeyEvent * ) e ) ->simpleData.keycode == Qt::Key_F4 ) - return TRUE; + // Filter out the F4/Launcher key from apps + // ### The launcher key may not always be F4 on all devices + if ( ( ( QWSKeyEvent * ) e ) ->simpleData.keycode == Qt::Key_F4 ) + return TRUE; #endif - } - if ( e->type == QWSEvent::Focus ) { - QWSFocusEvent * fe = ( QWSFocusEvent* ) e; - QWidget* nfw = QWidget::find( e->window() ); - if ( !fe->simpleData.get_focus ) { - QWidget * active = activeWindow(); - while ( active && active->isPopup() ) { - active->close(); - active = activeWindow(); - } - if ( !nfw && d->kbgrabber == 2 ) { - ungrabKeyboard(); - d->kbregrab = TRUE; // want kb back when we're active - } - } - else { - // make sure our modal widget is ALWAYS on top - QWidget *topm = activeModalWidget(); - if ( topm ) { - topm->raise(); - } - if ( d->kbregrab ) { - grabKeyboard(); - d->kbregrab = FALSE; - } - } - if ( fe->simpleData.get_focus && inputMethodDict ) { - InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); - if ( m == AlwaysOff ) - Global::hideInputMethod(); - if ( m == AlwaysOn ) - Global::showInputMethod(); - } - } - return QApplication::qwsEventFilter( e ); + } + if ( e->type == QWSEvent::Focus ) { + QWSFocusEvent * fe = ( QWSFocusEvent* ) e; + QWidget* nfw = QWidget::find( e->window() ); + if ( !fe->simpleData.get_focus ) { + QWidget * active = activeWindow(); + while ( active && active->isPopup() ) { + active->close(); + active = activeWindow(); + } + if ( !nfw && d->kbgrabber == 2 ) { + ungrabKeyboard(); + d->kbregrab = TRUE; // want kb back when we're active + } + } + else { + // make sure our modal widget is ALWAYS on top + QWidget *topm = activeModalWidget(); + if ( topm ) { + topm->raise(); + } + if ( d->kbregrab ) { + grabKeyboard(); + d->kbregrab = FALSE; + } + } + if ( fe->simpleData.get_focus && inputMethodDict ) { + InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); + if ( m == AlwaysOff ) + Global::hideInputMethod(); + if ( m == AlwaysOn ) + Global::showInputMethod(); + } + } + return QApplication::qwsEventFilter( e ); } +#endif /*! Destroys the QPEApplication. */ QPEApplication::~QPEApplication() { - ungrabKeyboard(); + ungrabKeyboard(); #if defined(Q_WS_QWS) && !defined(QT_NO_COP) - // Need to delete QCopChannels early, since the display will - // be gone by the time we get to ~QObject(). - delete sysChannel; - delete pidChannel; + // Need to delete QCopChannels early, since the display will + // be gone by the time we get to ~QObject(). + delete sysChannel; + delete pidChannel; #endif - delete d; + delete d; } /*! Returns <tt>$OPIEDIR/</tt>. */ QString QPEApplication::qpeDir() { - const char * base = getenv( "OPIEDIR" ); - if ( base ) - return QString( base ) + "/"; + const char * base = getenv( "OPIEDIR" ); + if ( base ) + return QString( base ) + "/"; - return QString( "../" ); + return QString( "../" ); } /*! Returns the user's current Document directory. There is a trailing "/". */ QString QPEApplication::documentDir() { - const char * base = getenv( "HOME" ); - if ( base ) - return QString( base ) + "/Documents/"; - - return QString( "../Documents/" ); + return QString( qpeDir() + "Documents"); } static int deforient = -1; /*! \internal */ int QPEApplication::defaultRotation() { - if ( deforient < 0 ) { - QString d = getenv( "QWS_DISPLAY" ); - if ( d.contains( "Rot90" ) ) { - deforient = 90; - } - else if ( d.contains( "Rot180" ) ) { - deforient = 180; - } - else if ( d.contains( "Rot270" ) ) { - deforient = 270; - } - else { - deforient = 0; - } - } - return deforient; + if ( deforient < 0 ) { + QString d = getenv( "QWS_DISPLAY" ); + if ( d.contains( "Rot90" ) ) { + deforient = 90; + } + else if ( d.contains( "Rot180" ) ) { + deforient = 180; + } + else if ( d.contains( "Rot270" ) ) { + deforient = 270; + } + else { + deforient = 0; + } + } + return deforient; } /*! \internal */ void QPEApplication::setDefaultRotation( int r ) { - if ( qApp->type() == GuiServer ) { - deforient = r; - setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); - } - else { - QCopEnvelope( "QPE/System", "setDefaultRotation(int)" ) << r; - } + if ( qApp->type() == GuiServer ) { + deforient = r; + setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); + Config config("qpe"); + config.setGroup( "Rotation" ); + config.writeEntry( "Screen", getenv("QWS_DISPLAY") ); + } else { +#ifndef QT_NO_COP + { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" ); e << r; } +#endif + } } /*! \internal */ void QPEApplication::applyStyle() { Config config( "qpe" ); config.setGroup( "Appearance" ); // Widget style QString style = config.readEntry( "Style", "Light" ); internalSetStyle( style ); // Colors QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) ); QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) ); QPalette pal( btncolor, bgcolor ); QString color = config.readEntry( "Highlight", "#800000" ); pal.setColor( QColorGroup::Highlight, QColor( color ) ); color = config.readEntry( "HighlightedText", "#FFFFFF" ); pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); color = config.readEntry( "Text", "#000000" ); pal.setColor( QColorGroup::Text, QColor( color ) ); color = config.readEntry( "ButtonText", "#000000" ); pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); color = config.readEntry( "Base", "#FFFFFF" ); pal.setColor( QColorGroup::Base, QColor( color ) ); pal.setColor( QPalette::Disabled, QColorGroup::Text, pal.color( QPalette::Active, QColorGroup::Background ).dark() ); setPalette( pal, TRUE ); + + // Window Decoration + QString dec = config.readEntry( "Decoration", "Qtopia" ); + if ( dec != d->decorationName ) { + qwsSetDecoration( new QPEDecoration( dec ) ); + d->decorationName = dec; + } + + // Font + QString ff = config.readEntry( "FontFamily", font().family() ); + int fs = config.readNumEntry( "FontSize", font().pointSize() ); + setFont( QFont(ff,fs) ); } -void QPEApplication::systemMessage( const QCString & msg, const QByteArray & data ) +void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data ) { #ifdef Q_WS_QWS - QDataStream stream( data, IO_ReadOnly ); - if ( msg == "applyStyle()" ) { - applyStyle(); - } - else if ( msg == "setDefaultRotation(int)" ) { - if ( type() == GuiServer ) { - int r; - stream >> r; - setDefaultRotation( r ); - } - } - else if ( msg == "shutdown()" ) { - if ( type() == GuiServer ) - shutdown(); - } - else if ( msg == "quit()" ) { - if ( type() != GuiServer ) - tryQuit(); - } - else if ( msg == "forceQuit()" ) { - if ( type() != GuiServer ) - quit(); - } - else if ( msg == "restart()" ) { - if ( type() == GuiServer ) - restart(); - } - else if ( msg == "grabKeyboard(QString)" ) { - QString who; - stream >> who; - if ( who.isEmpty() ) - d->kbgrabber = 0; - else if ( who != d->appName ) - d->kbgrabber = 1; - else - d->kbgrabber = 2; - - printf( "'%s' received grabKeyboard ( '%s' ) -> kbgrabber = %d\n", d-> appName.latin1(), who.latin1(), d-> kbgrabber ); - } - else if ( msg == "language(QString)" ) { - if ( type() == GuiServer ) { - QString l; - stream >> l; - QString cl = getenv( "LANG" ); - if ( cl != l ) { - if ( l.isNull() ) - unsetenv( "LANG" ); - else - setenv( "LANG", l.latin1(), 1 ); - restart(); - } - } - } - else if ( msg == "timeChange(QString)" ) { - QString t; - stream >> t; - if ( t.isNull() ) - unsetenv( "TZ" ); - else - setenv( "TZ", t.latin1(), 1 ); - // emit the signal so everyone else knows... - emit timeChanged(); - } - else if ( msg == "execute(QString)" ) { - if ( type() == GuiServer ) { - QString t; - stream >> t; - Global::execute( t ); - } - } - else if ( msg == "execute(QString,QString)" ) { - if ( type() == GuiServer ) { - QString t, d; - stream >> t >> d; - Global::execute( t, d ); - } - } - else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { - if ( type() == GuiServer ) { - QDateTime when; - QCString channel, message; - int data; - stream >> when >> channel >> message >> data; - AlarmServer::addAlarm( when, channel, message, data ); - } - } - else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { - if ( type() == GuiServer ) { - QDateTime when; - QCString channel, message; - int data; - stream >> when >> channel >> message >> data; - AlarmServer::deleteAlarm( when, channel, message, data ); - } - } - else if ( msg == "clockChange(bool)" ) { - int tmp; - stream >> tmp; - emit clockChanged( tmp ); - } - else if ( msg == "weekChange(bool)" ) { - int tmp; - stream >> tmp; - emit weekChanged( tmp ); - } - else if ( msg == "setDateFormat(DateFormat)" ) { - DateFormat tmp; - stream >> tmp; - emit dateFormatChanged( tmp ); - } - else if ( msg == "setVolume(int,int)" ) { - int t, v; - stream >> t >> v; - setVolume( t, v ); - emit volumeChanged( muted ); - } - else if ( msg == "volumeChange(bool)" ) { - stream >> muted; - setVolume(); - emit volumeChanged( muted ); - } - else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> - int t, v; - stream >> t >> v; - setMic( t, v ); - emit micChanged( micMuted ); - } - else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> - stream >> micMuted; - setMic(); - emit micChanged( micMuted ); - } + QDataStream stream( data, IO_ReadOnly ); + if ( msg == "applyStyle()" ) { + applyStyle(); + } else if ( msg == "setDefaultRotation(int)" ) { + if ( type() == GuiServer ) { + int r; + stream >> r; + setDefaultRotation( r ); + } + } else if ( msg == "shutdown()" ) { + if ( type() == GuiServer ) + shutdown(); + } else if ( msg == "quit()" ) { + if ( type() != GuiServer ) + tryQuit(); + } else if ( msg == "forceQuit()" ) { + if ( type() != GuiServer ) + quit(); + } else if ( msg == "restart()" ) { + if ( type() == GuiServer ) + restart(); + } else if ( msg == "grabKeyboard(QString)" ) { + QString who; + stream >> who; + if ( who.isEmpty() ) + d->kbgrabber = 0; + else if ( who != d->appName ) + d->kbgrabber = 1; + else + d->kbgrabber = 2; + } else if ( msg == "language(QString)" ) { + if ( type() == GuiServer ) { + QString l; + stream >> l; + QString cl = getenv( "LANG" ); + if ( cl != l ) { + if ( l.isNull() ) + unsetenv( "LANG" ); + else + setenv( "LANG", l.latin1(), 1 ); + restart(); + } + } + } else if ( msg == "timeChange(QString)" ) { + QString t; + stream >> t; + if ( t.isNull() ) + unsetenv( "TZ" ); + else + setenv( "TZ", t.latin1(), 1 ); + // emit the signal so everyone else knows... + emit timeChanged(); + } else if ( msg == "execute(QString)" ) { + if ( type() == GuiServer ) { + QString t; + stream >> t; + Global::execute( t ); + } + } else if ( msg == "execute(QString,QString)" ) { + if ( type() == GuiServer ) { + QString t, d; + stream >> t >> d; + Global::execute( t, d ); + } + } else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { + if ( type() == GuiServer ) { + QDateTime when; + QCString channel, message; + int data; + stream >> when >> channel >> message >> data; + AlarmServer::addAlarm( when, channel, message, data ); + } + } else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { + if ( type() == GuiServer ) { + QDateTime when; + QCString channel, message; + int data; + stream >> when >> channel >> message >> data; + AlarmServer::deleteAlarm( when, channel, message, data ); + } + } else if ( msg == "clockChange(bool)" ) { + int tmp; + stream >> tmp; + emit clockChanged( tmp ); + } else if ( msg == "weekChange(bool)" ) { + int tmp; + stream >> tmp; + emit weekChanged( tmp ); + } else if ( msg == "setDateFormat(DateFormat)" ) { + DateFormat tmp; + stream >> tmp; + emit dateFormatChanged( tmp ); + } else if ( msg == "setVolume(int,int)" ) { + int t, v; + stream >> t >> v; + setVolume( t, v ); + emit volumeChanged( muted ); + } else if ( msg == "volumeChange(bool)" ) { + stream >> muted; + setVolume(); + emit volumeChanged( muted ); + } else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> + int t, v; + stream >> t >> v; + setMic( t, v ); + emit micChanged( micMuted ); + } else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> + stream >> micMuted; + setMic(); + emit micChanged( micMuted ); + } #endif } /*! \internal */ bool QPEApplication::raiseAppropriateWindow() { - bool r = FALSE; - // ########## raise()ing main window should raise and set active - // ########## it and then all childen. This belongs in Qt/Embedded - QWidget *top = d->qpe_main_widget; - if ( !top ) - top = mainWidget(); - if ( top && d->keep_running ) { - if ( top->isVisible() ) - r = TRUE; -#ifdef Q_WS_QWS - - if ( !d->nomaximize ) - top->showMaximized(); - else -#endif - - top->show(); - top->raise(); - top->setActiveWindow(); - } - QWidget *topm = activeModalWidget(); - if ( topm && topm != top ) { - topm->show(); - topm->raise(); - topm->setActiveWindow(); - r = FALSE; - } - return r; + bool r=FALSE; + // ########## raise()ing main window should raise and set active + // ########## it and then all childen. This belongs in Qt/Embedded + QWidget *top = d->qpe_main_widget; + if ( !top ) top =mainWidget(); + if ( top && d->keep_running ) { + if ( top->isVisible() ) + r = TRUE; + else if (d->preloaded) { + // We are preloaded and not visible.. pretend we just started.. + QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); + e << d->appName; + } + + d->show_mx(top,d->nomaximize); + top->raise(); + top->setActiveWindow(); + } + QWidget *topm = activeModalWidget(); + if ( topm && topm != top ) { + topm->show(); + topm->raise(); + topm->setActiveWindow(); + // If we haven't already handled the fastAppShowing message + if (!top && d->preloaded) { + QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); + e << d->appName; + } + r = FALSE; + } + return r; } -void QPEApplication::pidMessage( const QCString &msg, const QByteArray & data ) +void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) { #ifdef Q_WS_QWS - if ( msg == "quit()" ) { - tryQuit(); - } - else if ( msg == "quitIfInvisible()" ) { - if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) - quit(); - } - else if ( msg == "close()" ) { - hideOrQuit(); - } - else if ( msg == "disablePreload()" ) { - d->preloaded = FALSE; - d->keep_running = TRUE; - /* so that quit will quit */ - } - else if ( msg == "enablePreload()" ) { - d->preloaded = TRUE; - d->keep_running = TRUE; - /* so next quit won't quit */ - } - else if ( msg == "raise()" ) { - d->keep_running = TRUE; - d->notbusysent = FALSE; - raiseAppropriateWindow(); - } - else if ( msg == "flush()" ) { - emit flush(); - // we need to tell the desktop - QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); - e << d->appName; - } - else if ( msg == "reload()" ) { - emit reload(); - } - else if ( msg == "setDocument(QString)" ) { - d->keep_running = TRUE; - QDataStream stream( data, IO_ReadOnly ); - QString doc; - stream >> doc; - QWidget *mw = mainWidget(); - if ( !mw ) - mw = d->qpe_main_widget; - if ( mw ) - Global::setDocument( mw, doc ); - } - else if ( msg == "nextView()" ) { - if ( raiseAppropriateWindow() ) - emit appMessage( msg, data ); - } - else { - emit appMessage( msg, data ); - } -#endif -} - + if ( msg == "quit()" ) { + tryQuit(); + } else if ( msg == "quitIfInvisible()" ) { + if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) + quit(); + } else if ( msg == "close()" ) { + hideOrQuit(); + } else if ( msg == "disablePreload()" ) { + d->preloaded = FALSE; + d->keep_running = TRUE; + /* so that quit will quit */ + } else if ( msg == "enablePreload()" ) { + if (d->qpe_main_widget) + d->preloaded = TRUE; + d->keep_running = TRUE; + /* so next quit won't quit */ + } else if ( msg == "raise()" ) { + d->keep_running = TRUE; + d->notbusysent = FALSE; + raiseAppropriateWindow(); + // Tell the system we're still chugging along... + QCopEnvelope e("QPE/System", "appRaised(QString)"); + e << d->appName; + } else if ( msg == "flush()" ) { + emit flush(); + // we need to tell the desktop + QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); + e << d->appName; + } else if ( msg == "reload()" ) { + emit reload(); + } else if ( msg == "setDocument(QString)" ) { + d->keep_running = TRUE; + QDataStream stream( data, IO_ReadOnly ); + QString doc; + stream >> doc; + QWidget *mw = mainWidget(); + if ( !mw ) + mw = d->qpe_main_widget; + if ( mw ) + Global::setDocument( mw, doc ); + } else if ( msg == "nextView()" ) { + qDebug("got nextView()"); +/* + if ( raiseAppropriateWindow() ) +*/ + emit appMessage( msg, data); + } else { + emit appMessage( msg, data); + } -static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ ) -{ - /* - // This works but disable it for now until it is safe to apply - // What is does is scan the .desktop files of all the apps for - // the applnk that has the corresponding argv[0] as this program - // then it uses the name stored in the .desktop file as the caption - // for the main widget. This saves duplicating translations for - // the app name in the program and in the .desktop files. - - AppLnkSet apps( appsPath ); - - QList<AppLnk> appsList = apps.children(); - for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) { - if ( (*it)->exec() == appName ) { - mw->setCaption( (*it)->name() ); - return TRUE; - } - } - */ - return FALSE; +#endif } /*! - Sets \a mw as the mainWidget() and shows it. For small windows, + Sets widget \a mw as the mainWidget() and shows it. For small windows, consider passing TRUE for \a nomaximize rather than the default FALSE. \sa showMainDocumentWidget() */ void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) { - setWidgetCaptionFromAppName( mw, d->appName, qpeDir() + "apps" ); - - d->nomaximize = nomaximize; - d->qpe_main_widget = mw; - d->sendQCopQ(); - if ( d->preloaded ) { - if ( d->forceshow ) { -#ifdef Q_WS_QWS - if ( !nomaximize ) - mw->showMaximized(); - else -#endif - - mw->show(); - } - } - else if ( d->keep_running ) { -#ifdef Q_WS_QWS - if ( !nomaximize ) - mw->showMaximized(); - else -#endif - - mw->show(); - } + d->show(mw,nomaximize ); } /*! - Sets \a mw as the mainWidget() and shows it. For small windows, + Sets widget \a mw as the mainWidget() and shows it. For small windows, consider passing TRUE for \a nomaximize rather than the default FALSE. This calls designates the application as a \link docwidget.html document-oriented\endlink application. - The \a mw widget must have a slot: setDocument(const QString&). + The \a mw widget \e must have this slot: setDocument(const QString&). \sa showMainWidget() */ void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize ) { - setWidgetCaptionFromAppName( mw, d->appName, qpeDir() + "apps" ); - - if ( mw && argc() == 2 ) - Global::setDocument( mw, QString::fromUtf8( argv() [ 1 ] ) ); - d->nomaximize = nomaximize; - d->qpe_main_widget = mw; - d->sendQCopQ(); - if ( d->preloaded ) { - if ( d->forceshow ) { -#ifdef Q_WS_QWS - if ( !nomaximize ) - mw->showMaximized(); - else -#endif + if ( mw && argc() == 2 ) + Global::setDocument( mw, QString::fromUtf8(argv()[1]) ); - mw->show(); - } - } - else if ( d->keep_running ) { -#ifdef Q_WS_QWS - if ( !nomaximize ) - mw->showMaximized(); - else -#endif - - mw->show(); - } + d->show(mw, nomaximize ); } /*! - Sets that the application should continue running after processing - qcop messages. Normally if an application is started via a qcop message, - the application will process the qcop message and then quit. If while - processing the qcop message it calls this function, then the application - will show and start proper once it has finished processing qcop messages. + If an application is started via a \link qcop.html QCop\endlink + message, the application will process the \link qcop.html + QCop\endlink message and then quit. If the application calls this + function while processing a \link qcop.html QCop\endlink message, + after processing its outstanding \link qcop.html QCop\endlink + messages the application will start 'properly' and show itself. \sa keepRunning() */ void QPEApplication::setKeepRunning() { - if ( qApp && qApp->inherits( "QPEApplication" ) ) { - QPEApplication * qpeApp = ( QPEApplication* ) qApp; - qpeApp->d->keep_running = TRUE; - } + if ( qApp && qApp->inherits( "QPEApplication" ) ) { + QPEApplication * qpeApp = ( QPEApplication* ) qApp; + qpeApp->d->keep_running = TRUE; + } } /*! - Returns whether the application will quit after processing the current - list of qcop messages. + Returns TRUE if the application will quit after processing the + current list of qcop messages; otherwise returns FALSE. \sa setKeepRunning() */ bool QPEApplication::keepRunning() const { return d->keep_running; } /*! \internal */ void QPEApplication::internalSetStyle( const QString &style ) { #if QT_VERSION >= 300 - if ( style == "QPE" ) { - setStyle( new QPEStyle ); - } - else { - QStyle *s = QStyleFactory::create( style ); - if ( s ) - setStyle( s ); - } + if ( style == "QPE" ) { + setStyle( new QPEStyle ); + } + else { + QStyle *s = QStyleFactory::create( style ); + if ( s ) + setStyle( s ); + } #else - if ( style == "Windows" ) { - setStyle( new QWindowsStyle ); - } - else if ( style == "QPE" ) { - setStyle( new QPEStyle ); - } - else if ( style == "Light" ) { - setStyle( new LightStyle ); - } + if ( style == "Windows" ) { + setStyle( new QWindowsStyle ); + } + else if ( style == "QPE" ) { + setStyle( new QPEStyle ); + } + else if ( style == "Light" ) { + setStyle( new LightStyle ); + } #ifndef QT_NO_STYLE_PLATINUM - else if ( style == "Platinum" ) { - setStyle( new QPlatinumStyle ); - } + else if ( style == "Platinum" ) { + setStyle( new QPlatinumStyle ); + } #endif #ifndef QT_NO_STYLE_MOTIF - else if ( style == "Motif" ) { - setStyle( new QMotifStyle ); - } + else if ( style == "Motif" ) { + setStyle( new QMotifStyle ); + } #endif #ifndef QT_NO_STYLE_MOTIFPLUS - else if ( style == "MotifPlus" ) { - setStyle( new QMotifPlusStyle ); - } + else if ( style == "MotifPlus" ) { + setStyle( new QMotifPlusStyle ); + } #endif - else { - QStyle *sty = 0; - QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/lib" + style. lower ( ) + ".so"; + else { + QStyle *sty = 0; + QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/lib" + style. lower ( ) + ".so"; - static QLibrary *lastlib = 0; - static StyleInterface *lastiface = 0; + static QLibrary *lastlib = 0; + static StyleInterface *lastiface = 0; - QLibrary *lib = new QLibrary ( path ); - StyleInterface *iface = 0; + QLibrary *lib = new QLibrary ( path ); + StyleInterface *iface = 0; - if ( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) - sty = iface-> create ( ); + if ( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) + sty = iface-> create ( ); - if ( sty ) { - setStyle ( sty ); + if ( sty ) { + setStyle ( sty ); - if ( lastiface ) - lastiface-> release ( ); - lastiface = iface; + if ( lastiface ) + lastiface-> release ( ); + lastiface = iface; - if ( lastlib ) { - lastlib-> unload ( ); - delete lastlib; - } - lastlib = lib; - } - else { - if ( iface ) - iface-> release ( ); - delete lib; + if ( lastlib ) { + lastlib-> unload ( ); + delete lastlib; + } + lastlib = lib; + } + else { + if ( iface ) + iface-> release ( ); + delete lib; - setStyle ( new QPEStyle ( )); - } - } + setStyle ( new QPEStyle ( )); + } + } #endif } /*! \internal */ void QPEApplication::prepareForTermination( bool willrestart ) { - if ( willrestart ) { - // Draw a big wait icon, the image can be altered in later revisions - // QWidget *d = QApplication::desktop(); - QImage img = Resource::loadImage( "launcher/new_wait" ); - QPixmap pix; - pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) ); - QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize | - QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); - lblWait->setPixmap( pix ); - lblWait->setAlignment( QWidget::AlignCenter ); - lblWait->show(); - lblWait->showMaximized(); - } + if ( willrestart ) { + // Draw a big wait icon, the image can be altered in later revisions + // QWidget *d = QApplication::desktop(); + QImage img = Resource::loadImage( "launcher/new_wait" ); + QPixmap pix; + pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) ); + QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize | + QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); + lblWait->setPixmap( pix ); + lblWait->setAlignment( QWidget::AlignCenter ); + lblWait->show(); + lblWait->showMaximized(); + } #ifndef SINGLE_APP - { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); - } - processEvents(); // ensure the message goes out. - sleep( 1 ); // You have 1 second to comply. + { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); + } + processEvents(); // ensure the message goes out. + sleep( 1 ); // You have 1 second to comply. #endif } /*! \internal */ void QPEApplication::shutdown() { - // Implement in server's QPEApplication subclass + // Implement in server's QPEApplication subclass } /*! \internal */ void QPEApplication::restart() { - // Implement in server's QPEApplication subclass + // Implement in server's QPEApplication subclass } static QPtrDict<void>* stylusDict = 0; static void createDict() { - if ( !stylusDict ) - stylusDict = new QPtrDict<void>; + if ( !stylusDict ) + stylusDict = new QPtrDict<void>; } /*! - Returns the current StylusMode for \a w. + Returns the current StylusMode for widget \a w. - \sa setStylusOperation() + \sa setStylusOperation() StylusMode */ -QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget * w ) +QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w ) { - if ( stylusDict ) - return ( StylusMode ) ( int ) stylusDict->find( w ); - return LeftOnly; + if ( stylusDict ) + return ( StylusMode ) ( int ) stylusDict->find( w ); + return LeftOnly; } /*! \enum QPEApplication::StylusMode \value LeftOnly the stylus only generates LeftButton - events (the default). + events (the default). \value RightOnHold the stylus generates RightButton events - if the user uses the press-and-hold gesture. + if the user uses the press-and-hold gesture. - See setStylusOperation(). + \sa setStylusOperation() stylusOperation() */ /*! - Causes \a w to receive mouse events according to \a mode. + Causes widget \a w to receive mouse events according to the stylus + \a mode. - \sa stylusOperation() + \sa stylusOperation() StylusMode */ void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode ) { - createDict(); - if ( mode == LeftOnly ) { - stylusDict->remove - ( w ); - w->removeEventFilter( qApp ); - } - else { - stylusDict->insert( w, ( void* ) mode ); - connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) ); - w->installEventFilter( qApp ); - } + createDict(); + if ( mode == LeftOnly ) { + stylusDict->remove + ( w ); + w->removeEventFilter( qApp ); + } + else { + stylusDict->insert( w, ( void* ) mode ); + connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) ); + w->installEventFilter( qApp ); + } } /*! \reimp */ bool QPEApplication::eventFilter( QObject *o, QEvent *e ) { - if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { - QMouseEvent * me = ( QMouseEvent* ) e; + if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { + QMouseEvent * me = ( QMouseEvent* ) e; + StylusMode mode = (StylusMode)(int)stylusDict->find(o); + switch (mode) { + case RightOnHold: + switch ( me->type() ) { + case QEvent::MouseButtonPress: if ( me->button() == LeftButton ) { - StylusMode mode = ( StylusMode ) ( int ) stylusDict->find( o ); - switch ( mode ) { - case RightOnHold: - switch ( me->type() ) { - case QEvent::MouseButtonPress: - d->presstimer = startTimer( 500 ); // #### pref. - d->presswidget = ( QWidget* ) o; - d->presspos = me->pos(); - d->rightpressed = FALSE; - break; - case QEvent::MouseButtonRelease: - if ( d->presstimer ) { - killTimer( d->presstimer ); - d->presstimer = 0; - } - if ( d->rightpressed && d->presswidget ) { - // Right released - postEvent( d->presswidget, - new QMouseEvent( QEvent::MouseButtonRelease, me->pos(), - RightButton, LeftButton + RightButton ) ); - // Left released, off-widget - postEvent( d->presswidget, - new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1 ), - LeftButton, LeftButton ) ); - postEvent( d->presswidget, - new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1 ), - LeftButton, LeftButton ) ); - d->rightpressed = FALSE; - return TRUE; // don't send the real Left release - } - break; - default: - break; - } - break; - default: - ; - } + d->presstimer = startTimer(500); // #### pref. + d->presswidget = (QWidget*)o; + d->presspos = me->pos(); + d->rightpressed = FALSE; } - } - else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { - QKeyEvent * ke = ( QKeyEvent * ) e; - if ( ke->key() == Key_Enter ) { - if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { - postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', - ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); - return TRUE; - } + break; + case QEvent::MouseMove: + if (d->presstimer && (me->pos()-d->presspos).manhattanLength() > 8) { + killTimer(d->presstimer); + d->presstimer = 0; + } + break; + case QEvent::MouseButtonRelease: + if ( me->button() == LeftButton ) { + if ( d->presstimer ) { + killTimer(d->presstimer); + d->presstimer = 0; + } + if ( d->rightpressed && d->presswidget ) { + // Right released + postEvent( d->presswidget, + new QMouseEvent( QEvent::MouseButtonRelease, me->pos(), + RightButton, LeftButton+RightButton ) ); + // Left released, off-widget + postEvent( d->presswidget, + new QMouseEvent( QEvent::MouseMove, QPoint(-1,-1), + LeftButton, LeftButton ) ); + postEvent( d->presswidget, + new QMouseEvent( QEvent::MouseButtonRelease, QPoint(-1,-1), + LeftButton, LeftButton ) ); + d->rightpressed = FALSE; + return TRUE; // don't send the real Left release + } + } + break; + default: + break; + } + break; + default: + ; + } + }else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { + QKeyEvent *ke = (QKeyEvent *)e; + if ( ke->key() == Key_Enter ) { + if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { + postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', + ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); + return TRUE; } } - - return FALSE; + } + return FALSE; } /*! \reimp */ void QPEApplication::timerEvent( QTimerEvent *e ) { - if ( e->timerId() == d->presstimer && d->presswidget ) { - // Right pressed - postEvent( d->presswidget, - new QMouseEvent( QEvent::MouseButtonPress, d->presspos, - RightButton, LeftButton ) ); - killTimer( d->presstimer ); - d->presstimer = 0; - d->rightpressed = TRUE; - } + if ( e->timerId() == d->presstimer && d->presswidget ) { + // Right pressed + postEvent( d->presswidget, + new QMouseEvent( QEvent::MouseButtonPress, d->presspos, + RightButton, LeftButton ) ); + killTimer( d->presstimer ); + d->presstimer = 0; + d->rightpressed = TRUE; + } } void QPEApplication::removeSenderFromStylusDict() { - stylusDict->remove + stylusDict->remove ( ( void* ) sender() ); - if ( d->presswidget == sender() ) - d->presswidget = 0; + if ( d->presswidget == sender() ) + d->presswidget = 0; } /*! \internal */ bool QPEApplication::keyboardGrabbed() const { - return d->kbgrabber; + return d->kbgrabber; } /*! Reverses the effect of grabKeyboard(). This is called automatically on program exit. */ void QPEApplication::ungrabKeyboard() { - QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d; - if ( d->kbgrabber == 2 ) { - QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); - e << QString::null; - d->kbregrab = FALSE; - d->kbgrabber = 0; - } + QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d; + if ( d->kbgrabber == 2 ) { +#ifndef QT_NO_COP + QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); + e << QString::null; +#endif + d->kbregrab = FALSE; + d->kbgrabber = 0; + } } /*! - Grabs the keyboard such that the system's application launching - keys no longer work, and instead they are receivable by this - application. + Grabs the physical keyboard keys, e.g. the application's launching + keys. Instead of launching applications when these keys are pressed + the signals emitted are sent to this application instead. Some games + programs take over the launch keys in this way to make interaction + easier. \sa ungrabKeyboard() */ void QPEApplication::grabKeyboard() { - QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d; - if ( qApp->type() == QApplication::GuiServer ) - d->kbgrabber = 0; - else { - QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); - e << d->appName; - d->kbgrabber = 2; // me - } + QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d; + if ( qApp->type() == QApplication::GuiServer ) + d->kbgrabber = 0; + else { +#ifndef QT_NO_COP + QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); + e << d->appName; +#endif + d->kbgrabber = 2; // me + } } /*! \reimp */ int QPEApplication::exec() { - d->sendQCopQ(); - if ( d->keep_running ) - //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) - return QApplication::exec(); +#ifndef QT_NO_COP + d->sendQCopQ(); +#endif + if ( d->keep_running ) + //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) + return QApplication::exec(); - { - QCopEnvelope e( "QPE/System", "closing(QString)" ); - e << d->appName; - } - processEvents(); - return 0; +#ifndef QT_NO_COP + { + QCopEnvelope e( "QPE/System", "closing(QString)" ); + e << d->appName; + } +#endif + processEvents(); + return 0; } /*! \internal External request for application to quit. Quits if possible without loosing state. */ void QPEApplication::tryQuit() { - if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 ) - return ; // Inside modal loop or konsole. Too hard to save state. - { - QCopEnvelope e( "QPE/System", "closing(QString)" ); - e << d->appName; - } - processEvents(); + if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 ) + return ; // Inside modal loop or konsole. Too hard to save state. +#ifndef QT_NO_COP + { + QCopEnvelope e( "QPE/System", "closing(QString)" ); + e << d->appName; + } +#endif + processEvents(); - quit(); + quit(); } /*! \internal User initiated quit. Makes the window 'Go Away'. If preloaded this means hiding the window. If not it means quitting the application. As this is user initiated we don't need to check state. */ void QPEApplication::hideOrQuit() { - // notify of our demise :) - { - QCopEnvelope e( "QPE/System", "closing(QString)" ); - e << d->appName; - } - processEvents(); - if ( d->preloaded && d->qpe_main_widget ) - d->qpe_main_widget->hide(); - else - quit(); + processEvents(); + + // If we are a preloaded application we don't actually quit, so emit + // a System message indicating we're quasi-closing. + if ( d->preloaded && d->qpe_main_widget ) +#ifndef QT_NO_COP + { + QCopEnvelope e("QPE/System", "fastAppHiding(QString)" ); + e << d->appName; + d->qpe_main_widget->hide(); + } +#endif + else + quit(); } #if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) // The libraries with the skiff package (and possibly others) have // completely useless implementations of builtin new and delete that // use about 50% of your CPU. Here we revert to the simple libc // functions. -void* operator new[] ( size_t size ) +void* operator new[]( size_t size ) { - return malloc( size ); + return malloc( size ); } void* operator new( size_t size ) { - return malloc( size ); + return malloc( size ); } -void operator delete[] ( void* p ) +void operator delete[]( void* p ) { - free( p ); + free( p ); } -void operator delete[] ( void* p, size_t /*size*/ ) +void operator delete[]( void* p, size_t /*size*/ ) { - free( p ); + free( p ); } void operator delete( void* p ) { - free( p ); + free( p ); } void operator delete( void* p, size_t /*size*/ ) { - free( p ); + free( p ); } #endif #if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP) #include <qwidgetlist.h> +#ifdef QWS #include <qgfx_qws.h> extern QRect qt_maxWindowRect; -void qt_setMaxWindowRect( const QRect & r ) +void qt_setMaxWindowRect(const QRect& r ) { - qt_maxWindowRect = qt_screen->mapFromDevice( r, - qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) ); - // Re-resize any maximized windows - QWidgetList* l = QApplication::topLevelWidgets(); - if ( l ) { - QWidget * w = l->first(); - while ( w ) { - if ( w->isVisible() && w->isMaximized() ) { - w->showMaximized(); - } - w = l->next(); - } - delete l; - } + qt_maxWindowRect = qt_screen->mapFromDevice( r, + qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) ); + // Re-resize any maximized windows + QWidgetList* l = QApplication::topLevelWidgets(); + if ( l ) { + QWidget * w = l->first(); + while ( w ) { + if ( w->isVisible() && w->isMaximized() ) { + w->showMaximized(); + } + w = l->next(); + } + delete l; + } } #endif +#endif diff --git a/library/qpeapplication.h b/library/qpeapplication.h index 23606db..2515f1b 100644 --- a/library/qpeapplication.h +++ b/library/qpeapplication.h @@ -1,130 +1,156 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef __QPE_APPLICATION_H__ #define __QPE_APPLICATION_H__ #include <qapplication.h> +#include <qdialog.h> #if defined(_WS_QWS_) && !defined(Q_WS_QWS) #define Q_WS_QWS #endif #include "qpedecoration_qws.h" #include "timestring.h" class QCopChannel; class QPEApplicationData; class QWSEvent; class QWSKeyEvent; class QPEApplication : public QApplication { Q_OBJECT public: QPEApplication( int& argc, char **argv, Type=GuiClient ); ~QPEApplication(); static QString qpeDir(); static QString documentDir(); void applyStyle(); static int defaultRotation(); static void setDefaultRotation(int r); static void grabKeyboard(); static void ungrabKeyboard(); enum StylusMode { LeftOnly, RightOnHold // RightOnHoldLeftDelayed, etc. }; static void setStylusOperation( QWidget*, StylusMode ); static StylusMode stylusOperation( QWidget* ); enum InputMethodHint { Normal, AlwaysOff, AlwaysOn }; - + enum screenSaverHint { Disable = 0, DisableLightOff = 1, DisableSuspend = 2, Enable = 100 }; - + static void setInputMethodHint( QWidget *, InputMethodHint ); static InputMethodHint inputMethodHint( QWidget * ); void showMainWidget( QWidget*, bool nomax=FALSE ); void showMainDocumentWidget( QWidget*, bool nomax=FALSE ); + static void showDialog( QDialog*, bool nomax=FALSE ); + static int execDialog( QDialog*, bool nomax=FALSE ); static void setKeepRunning(); bool keepRunning() const; + bool keyboardGrabbed() const; + int exec(); signals: void clientMoused(); void timeChanged(); void clockChanged( bool pm ); + void micChanged( bool muted ); void volumeChanged( bool muted ); - void micChanged( bool muted ); void appMessage( const QCString& msg, const QByteArray& data); void weekChanged( bool startOnMonday ); void dateFormatChanged( DateFormat ); void flush(); void reload(); - + private slots: void systemMessage( const QCString &msg, const QByteArray &data ); void pidMessage( const QCString &msg, const QByteArray &data ); void removeSenderFromStylusDict(); void hideOrQuit(); protected: bool qwsEventFilter( QWSEvent * ); void internalSetStyle( const QString &style ); void prepareForTermination(bool willrestart); virtual void restart(); virtual void shutdown(); bool eventFilter( QObject *, QEvent * ); void timerEvent( QTimerEvent * ); - bool keyboardGrabbed() const; bool raiseAppropriateWindow(); virtual void tryQuit(); private: void mapToDefaultAction( QWSKeyEvent *ke, int defKey ); #if defined(Q_WS_QWS) && !defined(QT_NO_COP) QCopChannel *sysChannel; QCopChannel *pidChannel; #endif QPEApplicationData *d; bool reserved_sh; }; +inline void QPEApplication::showDialog( QDialog* d, bool nomax ) +{ + QSize sh = d->sizeHint(); + int w = QMAX(sh.width(),d->width()); + int h = QMAX(sh.height(),d->height()); + if ( !nomax + && ( w > qApp->desktop()->width()*3/4 + || h > qApp->desktop()->height()*3/4 ) ) + { + d->showMaximized(); + } else { + d->resize(w,h); + d->show(); + } +} + +inline int QPEApplication::execDialog( QDialog* d, bool nomax ) +{ + showDialog(d,nomax); + return d->exec(); +} + #endif diff --git a/library/qpedebug.cpp b/library/qpedebug.cpp index 29bcbb6..b7cbc7b 100644 --- a/library/qpedebug.cpp +++ b/library/qpedebug.cpp @@ -1,51 +1,51 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "qpedebug.h" #include <stdio.h> #include <sys/time.h> #include <unistd.h> struct timeval qpe_debuglast; void qpe_debugTime( const char *file, int line, const char *desc ) { struct timeval tv; gettimeofday( &tv, 0 ); int tdiff = tv.tv_usec - qpe_debuglast.tv_usec; tdiff += (tv.tv_sec - qpe_debuglast.tv_sec) * 1000000; fprintf( stderr, "%s:%d Time: %ld.%06ld", file, line, tv.tv_sec, tv.tv_usec); static int pid = getpid(); if ( qpe_debuglast.tv_sec ) fprintf( stderr, " (pid %d delta %dus)", pid, tdiff ); if ( desc ) fprintf( stderr, " (%s)", desc ); fprintf( stderr, "\n" ); qpe_debuglast = tv; } diff --git a/library/qpedebug.h b/library/qpedebug.h index 434ddec..6bf2e8b 100644 --- a/library/qpedebug.h +++ b/library/qpedebug.h @@ -1,29 +1,29 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef QPEDEBUG_H #define QPEDEBUG_H #define QPE_DEBUGTIMEDESC(X) qpe_debugTime( __FILE__, __LINE__, X ); #define QPE_DEBUGTIME qpe_debugTime( __FILE__, __LINE__ ); void qpe_debugTime( const char *file, int line, const char *desc=0 ); #endif diff --git a/library/qpedecoration_qws.cpp b/library/qpedecoration_qws.cpp index e041945..222d906 100644 --- a/library/qpedecoration_qws.cpp +++ b/library/qpedecoration_qws.cpp @@ -1,640 +1,911 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ +#ifdef QWS #define QTOPIA_INTERNAL_LANGLIST #include <qapplication.h> #include <qstyle.h> #include <qwidget.h> #include <qpainter.h> #include <qtimer.h> #include <qwhatsthis.h> #include "qcopenvelope_qws.h" #include "qpedecoration_qws.h" #include <qdialog.h> #include <qdrawutil.h> #include <qgfx_qws.h> #include "qpeapplication.h" #include "resource.h" #include "global.h" +#include "qlibrary.h" +#include "windowdecorationinterface.h" #include <qfile.h> #include <qsignal.h> #include <stdlib.h> extern QRect qt_maxWindowRect; -//#define MINIMIZE_HELP_HACK // use minimize button when not a dialog - -//#define WHATSTHIS_MODE +#define WHATSTHIS_MODE #ifndef QT_NO_QWS_QPE_WM_STYLE #ifndef QT_NO_IMAGEIO_XPM /* XPM */ static const char * const qpe_close_xpm[] = { "16 16 3 1", " c None", ". c #FFFFFF", "+ c #000000", " ", " ", " ..... ", " ..+++++.. ", " .+++++++++. ", " .+..+++..+. ", " .++...+...++. ", " .+++.....+++. ", " .++++...++++. ", " .+++.....+++. ", " .++...+...++. ", " .+..+++..+. ", " .+++++++++. ", " ..+++++.. ", " ..... ", " "}; /* XPM */ static const char * const qpe_accept_xpm[] = { "16 16 3 1", " c None", ". c #FFFFFF", "+ c #000000", " ", " ", " ..... ", " ..+++++.. ", " .+++++++++. ", " .+++++++++. ", " .+++++++..++. ", " .++.+++...++. ", " .+...+...+++. ", " .+......++++. ", " .++....+++++. ", " .++..+++++. ", " .+++++++++. ", " ..+++++.. ", " ..... ", " "}; #endif // QT_NO_IMAGEIO_XPM +class HackWidget : public QWidget +{ +public: + bool needsOk() { + return (getWState() & WState_Reserved1 ) || + (inherits( "QDialog" ) && !inherits( "QMessageBox" ) ); + } +}; + +static QImage scaleButton( const QImage &img, int height ) +{ + if ( img.height() != height ) { + return img.smoothScale( img.width()*height/img.height(), height ); + } else { + return img; + } +} + class TLWidget : public QWidget { public: QWSManager *manager() { return topData()->qwsManager; } QTLWExtra *topExtra() { return topData(); } + + void setWState( uint s ) { QWidget::setWState( s ); } + void clearWState( uint s ) { QWidget::clearWState( s ); } }; + QPEManager::QPEManager( QPEDecoration *d, QObject *parent ) - : QObject( parent ), decoration( d ), helpState(0) + : QObject( parent ), decoration( d ), helpState(0), inWhatsThis(FALSE) { wtTimer = new QTimer( this ); connect( wtTimer, SIGNAL(timeout()), this, SLOT(whatsThisTimeout()) ); } void QPEManager::updateActive() { QWidget *newActive = qApp->activeWindow(); - if ( (QWidget*)active == newActive ) + if ( newActive && (QWidget*)active == newActive ) return; - if ( active ) { + if ( active && (!newActive || ((TLWidget *)newActive)->manager()) ) { ((TLWidget *)(QWidget*)active)->manager()->removeEventFilter( this ); } if ( newActive && ((TLWidget *)newActive)->manager() ) { active = newActive; ((TLWidget *)(QWidget*)active)->manager()->installEventFilter( this ); - } else { + } else if ( !newActive ) { active = 0; } } int QPEManager::pointInQpeRegion( QWidget *w, const QPoint &p ) { - if ( decoration->region( w, w->geometry(), - (QWSDecoration::Region)QPEDecoration::Help ).contains(p) ) { + QRect rect(w->geometry()); + + if ( decoration->region( w, rect, + (QWSDecoration::Region)QPEDecoration::Help ).contains(p) ) return QPEDecoration::Help; + + for (int i = QWSDecoration::LastRegion; i >= QWSDecoration::Title; i--) { + if (decoration->region(w, rect, (QWSDecoration::Region)i).contains(p)) + return (QWSDecoration::Region)i; } return QWSDecoration::None; } bool QPEManager::eventFilter( QObject *o, QEvent *e ) { QWSManager *mgr = (QWSManager *)o; QWidget *w = mgr->widget(); switch ( e->type() ) { case QEvent::MouseButtonPress: { - if ( QWhatsThis::inWhatsThisMode() ) { - QWhatsThis::leaveWhatsThisMode(); - return true; - } pressTime = QTime::currentTime(); QPoint p = ((QMouseEvent*)e)->globalPos(); - if ( pointInQpeRegion( w, p ) == QPEDecoration::Help ) { + int inRegion = pointInQpeRegion( w, p ); +#ifdef WHATSTHIS_MODE + if ( !w->geometry().contains(p) && QWhatsThis::inWhatsThisMode() ) { + QString text; + switch ( inRegion ) { + case QWSDecoration::Close: + if ( ((HackWidget*)w)->needsOk() ) + text = tr("Click to close this window, discarding changes."); + else + text = tr("Click to close this window."); + break; + case QWSDecoration::Minimize: + text = tr("Click to close this window and apply changes."); + break; + case QWSDecoration::Maximize: + if ( w->isMaximized() ) + text = tr("Click to make this window moveable."); + else + text = tr("Click to make this window use all available screen area."); + break; + default: + break; + } + QWhatsThis::leaveWhatsThisMode( text ); + whatsThisTimeout(); + helpState = 0; + return true; + } +#endif + if ( inRegion == QPEDecoration::Help ) { +#ifdef WHATSTHIS_MODE + wtTimer->start( 400, TRUE ); +#endif helpState = QWSButton::Clicked|QWSButton::MouseOver; drawButton( w, QPEDecoration::Help, helpState ); return true; } } break; case QEvent::MouseButtonRelease: if ( helpState & QWSButton::Clicked ) { + wtTimer->stop(); helpState = 0; drawButton( w, QPEDecoration::Help, helpState ); QPoint p = ((QMouseEvent*)e)->globalPos(); if ( pointInQpeRegion( w, p ) == QPEDecoration::Help ) { -#ifdef WHATSTHIS_MODE - if ( pressTime.msecsTo( QTime::currentTime() ) > 250 ) { - decoration->help( w ); - } else { - QWhatsThis::enterWhatsThisMode(); - wtTimer->start( 200 ); - } -#else decoration->help( w ); -#endif } return true; } break; case QEvent::MouseMove: if ( helpState & QWSButton::Clicked ) { int oldState = helpState; QPoint p = ((QMouseEvent*)e)->globalPos(); - if ( pointInQpeRegion( w, p ) == QPEDecoration::Help ) + if ( pointInQpeRegion( w, p ) == QPEDecoration::Help ) { helpState = QWSButton::Clicked|QWSButton::MouseOver; - else + } else { helpState = 0; + } if ( helpState != oldState ) drawButton( w, QPEDecoration::Help, helpState ); } break; default: break; } return QObject::eventFilter( o, e ); } void QPEManager::drawButton( QWidget *w, QPEDecoration::QPERegion r, int state ) { QPainter painter(w); QRegion rgn = ((TLWidget *)w)->topExtra()->decor_allocated_region; painter.internalGfx()->setWidgetDeviceRegion( rgn ); painter.setClipRegion(decoration->region(w, w->rect(),QWSDecoration::All)); decoration->paintButton( &painter, w, (QWSDecoration::Region)r, state ); } +void QPEManager::drawTitle( QWidget *w ) +{ + QPainter painter(w); + QRegion rgn = ((TLWidget *)w)->topExtra()->decor_allocated_region; + painter.internalGfx()->setWidgetDeviceRegion( rgn ); + painter.setClipRegion(decoration->region(w, w->rect(),QWSDecoration::All)); + decoration->paint( &painter, w ); + decoration->paintButton(&painter, w, QWSDecoration::Menu, 0); + decoration->paintButton(&painter, w, QWSDecoration::Close, 0); + decoration->paintButton(&painter, w, QWSDecoration::Minimize, 0); + decoration->paintButton(&painter, w, QWSDecoration::Maximize, 0); +} + void QPEManager::whatsThisTimeout() { if ( !QWhatsThis::inWhatsThisMode() ) { - wtTimer->stop(); - if ( active ) - drawButton( active, QPEDecoration::Help, 0 ); - } else if ( active ) { - static int state = 0; - if ( !state ) - state = QWSButton::Clicked|QWSButton::MouseOver; + if ( inWhatsThis ) { + if ( whatsThis ) { + QWidget *w = whatsThis; + whatsThis = 0; + drawTitle( w ); + } + wtTimer->stop(); + } else { + QWhatsThis::enterWhatsThisMode(); + helpState = 0; + updateActive(); + if ( active ) { + whatsThis = active; + drawTitle( active ); + // check periodically to see if we've left whats this mode + wtTimer->start( 250 ); + } + } + inWhatsThis = !inWhatsThis; + } +} + +//=========================================================================== + +static QImage *okImage( int th ) +{ + static QImage *i = 0; + if ( !i || i->height() != th ) { + delete i; + i = new QImage(scaleButton(Resource::loadImage("OKButton"),th)); + } + return i; +} + +static QImage *closeImage( int th ) +{ + static QImage *i = 0; + if ( !i || i->height() != th ) { + delete i; + i = new QImage(scaleButton(Resource::loadImage("CloseButton"),th)); + } + return i; +} + +static QImage *helpImage( int th ) +{ + static QImage *i = 0; + if ( !i || i->height() != th ) { + delete i; + i = new QImage(scaleButton(Resource::loadImage("HelpButton"),th)); + } + return i; +} + +static QImage *maximizeImage( int th ) +{ + static QImage *i = 0; + if ( !i || i->height() != th ) { + delete i; + i = new QImage(scaleButton(Resource::loadImage("MaximizeButton"),th)); + } + return i; +} + +int WindowDecorationInterface::metric( Metric m, const WindowData *wd ) const +{ + switch ( m ) { + case TitleHeight: + if ( QApplication::desktop()->height() > 320 ) + return 19; + else + return 15; + case LeftBorder: + case RightBorder: + case TopBorder: + case BottomBorder: + return 4; + case OKWidth: + return okImage(metric(TitleHeight,wd))->width(); + case CloseWidth: + return closeImage(metric(TitleHeight,wd))->width(); + case HelpWidth: + return helpImage(metric(TitleHeight,wd))->width(); + case MaximizeWidth: + return maximizeImage(metric(TitleHeight,wd))->width(); + case CornerGrabSize: + return 16; + } + + return 0; +} + +void WindowDecorationInterface::drawArea( Area a, QPainter *p, const WindowData *wd ) const +{ + int th = metric( TitleHeight, wd ); + QRect r = wd->rect; + + switch ( a ) { + case Border: + { + const QColorGroup &cg = wd->palette.active(); + qDrawWinPanel(p, r.x()-metric(LeftBorder,wd), + r.y()-th-metric(TopBorder,wd), + r.width()+metric(LeftBorder,wd)+metric(RightBorder,wd), + r.height()+th+metric(TopBorder,wd)+metric(BottomBorder,wd), + cg, FALSE, &cg.brush(QColorGroup::Background)); + } + break; + case Title: + { + const QColorGroup &cg = wd->palette.active(); + QBrush titleBrush; + QPen titleLines; + + if ( wd->flags & WindowData::Active ) { + titleBrush = cg.brush(QColorGroup::Highlight); + titleLines = titleBrush.color().dark(); + } else { + titleBrush = cg.brush(QColorGroup::Background); + titleLines = titleBrush.color(); + } + + p->fillRect( r.x(), r.y()-th, r.width(), th, titleBrush); + + p->setPen( titleLines ); + for ( int i = r.y()-th; i < r.y(); i += 2 ) + p->drawLine( r.left(), i, r.right(), i ); + } + break; + case TitleText: + p->drawText( r.x()+3+metric(HelpWidth,wd), r.top()-th, + r.width()-metric(OKWidth,wd)-metric(CloseWidth,wd), + th, QPainter::AlignVCenter, wd->caption); + break; + } +} + +void WindowDecorationInterface::drawButton( Button b, QPainter *p, const WindowData *wd, int x, int y, int, int, QWSButton::State state ) const +{ + QImage *img = 0; + switch ( b ) { + case OK: + img = okImage(metric(TitleHeight,wd)); + break; + case Close: + img = closeImage(metric(TitleHeight,wd)); + break; + case Help: + img = helpImage(metric(TitleHeight,wd)); + break; + case Maximize: + img = maximizeImage(metric(TitleHeight,wd)); + break; + } + + if ( img ) { + if ((state & QWSButton::MouseOver) && (state & QWSButton::Clicked)) + p->drawImage(x+2, y+2, *img); else - state = 0; - drawButton( active, QPEDecoration::Help, state ); + p->drawImage(x+1, y+1, *img); } } -//========= +QRegion WindowDecorationInterface::mask( const WindowData *wd ) const +{ + int th = metric(TitleHeight,wd); + QRect rect( wd->rect ); + QRect r(rect.left() - metric(LeftBorder,wd), + rect.top() - th - metric(TopBorder,wd), + rect.width() + metric(LeftBorder,wd) + metric(RightBorder,wd), + rect.height() + th + metric(TopBorder,wd) + metric(BottomBorder,wd)); + return QRegion(r) - rect; +} -class HackWidget : public QWidget +class DefaultWindowDecoration : public WindowDecorationInterface { public: - bool needsOk() { return (getWState() & WState_Reserved1 ); } + DefaultWindowDecoration() : ref(0) {} + QString name() const { + return "Default"; + } + QPixmap icon() const { + return QPixmap(); + } + QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) { + *iface = 0; + if ( uuid == IID_QUnknown ) + *iface = this; + else if ( uuid == IID_WindowDecoration ) + *iface = this; + + if ( *iface ) + (*iface)->addRef(); + return QS_OK; + } + Q_REFCOUNT + +private: + ulong ref; }; +static WindowDecorationInterface *wdiface = 0; +static QLibrary *wdlib = 0; + //=========================================================================== QPEDecoration::QPEDecoration() : QWSDefaultDecoration() { - imageOk = Resource::loadImage( "OKButton" ); - imageClose = Resource::loadImage( "CloseButton" ); - imageHelp = Resource::loadImage( "HelpButton" ); + if ( wdlib ) { + wdiface->release(); + wdlib->unload(); + delete wdlib; + wdlib = 0; + } else { + delete wdiface; + } + wdiface = new DefaultWindowDecoration; + helpFile = QString(qApp->argv()[0]) + ".html"; - QStringList path = Global::helpPath(); + QStringList helpPath = Global::helpPath(); helpExists = FALSE; - for (QStringList::ConstIterator it=path.begin(); it!=path.end() && !helpExists; ++it) + for (QStringList::ConstIterator it=helpPath.begin(); it!=helpPath.end() && !helpExists; ++it) + helpExists = QFile::exists( *it + "/" + helpFile ); + qpeManager = new QPEManager( this ); +} + +QPEDecoration::QPEDecoration( const QString &plugin ) + : QWSDefaultDecoration() +{ + if ( wdlib ) { + wdiface->release(); + wdlib->unload(); + delete wdlib; + wdlib = 0; + } else { + delete wdiface; + } + WindowDecorationInterface *iface = 0; + QString path = QPEApplication::qpeDir() + "/plugins/decorations"; + QLibrary *lib = new QLibrary( path + "/" + plugin ); + if ( lib->queryInterface( IID_WindowDecoration, (QUnknownInterface**)&iface ) == QS_OK && iface ) { + wdiface = iface; + wdlib = lib; + } else { + delete lib; + wdiface = new DefaultWindowDecoration; + } + + helpFile = QString(qApp->argv()[0]) + ".html"; + QStringList helpPath = Global::helpPath(); + helpExists = FALSE; + for (QStringList::ConstIterator it=helpPath.begin(); it!=helpPath.end() && !helpExists; ++it) helpExists = QFile::exists( *it + "/" + helpFile ); -#ifndef MINIMIZE_HELP_HACK qpeManager = new QPEManager( this ); -#else - qpeManager = 0; -#endif } QPEDecoration::~QPEDecoration() { delete qpeManager; } const char **QPEDecoration::menuPixmap() { return (const char **)0; } const char **QPEDecoration::closePixmap() { return (const char **)qpe_close_xpm; } const char **QPEDecoration::minimizePixmap() { return (const char **)qpe_accept_xpm; } const char **QPEDecoration::maximizePixmap() { return (const char **)0; } const char **QPEDecoration::normalizePixmap() { return (const char **)0; } -int QPEDecoration::getTitleHeight(const QWidget *) +int QPEDecoration::getTitleHeight( const QWidget *w ) { - return 15; + WindowDecorationInterface::WindowData wd; + windowData( w, wd ); + return wdiface->metric(WindowDecorationInterface::TitleHeight,&wd); } /* If rect is empty, no frame is added. (a hack, really) */ QRegion QPEDecoration::region(const QWidget *widget, const QRect &rect, QWSDecoration::Region type) { - int titleHeight = getTitleHeight(widget); -// int titleWidth = getTitleWidth(widget); -// int bw = rect.isEmpty() ? 0 : BORDER_WIDTH; - QRegion region; - -#ifndef MINIMIZE_HELP_HACK qpeManager->updateActive(); -#endif + + WindowDecorationInterface::WindowData wd; + windowData( widget, wd ); + wd.rect = rect; + + int titleHeight = wdiface->metric(WindowDecorationInterface::TitleHeight,&wd); + int okWidth = wdiface->metric(WindowDecorationInterface::OKWidth,&wd); + int closeWidth = wdiface->metric(WindowDecorationInterface::CloseWidth,&wd); + int helpWidth = wdiface->metric(WindowDecorationInterface::HelpWidth,&wd); + int grab = wdiface->metric(WindowDecorationInterface::CornerGrabSize,&wd); + + QRegion region; switch ((int)type) { case Menu: - case Maximize: break; - case Minimize: { - if ( ((HackWidget *)widget)->needsOk() || - (widget->inherits( "QDialog" ) && !widget->inherits( "QMessageBox" ) ) ) { - QRect r(rect.right() - imageOk.width(), - rect.top() - titleHeight - 2, - imageOk.width(), titleHeight); - if (r.left() > rect.left() + titleHeight) - region = r; + case Maximize: + if ( !widget->inherits( "QDialog" ) && qApp->desktop()->width() > 350 ) { + int maximizeWidth = wdiface->metric(WindowDecorationInterface::MaximizeWidth,&wd); + int left = rect.right() - maximizeWidth - closeWidth; + if ( ((HackWidget *)widget)->needsOk() ) + left -= okWidth; + QRect r(left, rect.top() - titleHeight, closeWidth, titleHeight); + region = r; } -#ifdef MINIMIZE_HELP_HACK - else if ( helpExists ) { - QRect r; - r = QRect(rect.right() - imageClose.width() - imageHelp.width(), - rect.top() - titleHeight - 2, - imageHelp.width(), titleHeight); + break; + case Minimize: + if ( ((HackWidget *)widget)->needsOk() ) { + QRect r(rect.right() - okWidth, + rect.top() - titleHeight, okWidth, titleHeight); if (r.left() > rect.left() + titleHeight) region = r; } -#endif - } - break; - case Close: { - if ( ((HackWidget *)widget)->needsOk() || - (widget->inherits( "QDialog" ) && !widget->inherits( "QMessageBox" ) ) ) { - QRect r; - r = QRect(rect.right() - imageOk.width() - imageClose.width(), - rect.top() - titleHeight - 2, - imageClose.width(), titleHeight); - if (r.left() > rect.left() + titleHeight) - region = r; - } else { - QRect r(rect.right() - imageClose.width(), - rect.top() - titleHeight - 2, - imageClose.width(), titleHeight); - if (r.left() > rect.left() + titleHeight) - region = r; + break; + case Close: + { + int left = rect.right() - closeWidth; + if ( ((HackWidget *)widget)->needsOk() ) + left -= okWidth; + QRect r(left, rect.top() - titleHeight, closeWidth, titleHeight); + region = r; } break; - } - case Title: { - if ( widget->isMaximized() ) { - region = QRegion(); - } else { - int btnWidth = imageClose.width(); - if ( ((HackWidget *)widget)->needsOk() || - (widget->inherits( "QDialog" ) && !widget->inherits( "QMessageBox" ) ) ) - btnWidth += imageOk.width(); - QRect r(rect.left() + 1, rect.top() - titleHeight, - rect.width() - btnWidth - 2, titleHeight); + case Title: + if ( !widget->isMaximized() ) { + int width = rect.width() - helpWidth - closeWidth; + if ( ((HackWidget *)widget)->needsOk() ) + width -= okWidth; + QRect r(rect.left()+helpWidth, rect.top() - titleHeight, + width, titleHeight); if (r.width() > 0) region = r; } break; - } - case Help: { - if ( helpExists ) { - QRect r; - int l = rect.right() - imageClose.width() - imageHelp.width(); - if ( ((HackWidget *)widget)->needsOk() || - (widget->inherits( "QDialog" ) && !widget->inherits( "QMessageBox" ) ) ) - l -= imageOk.width(); - r = QRect(l, rect.top() - titleHeight - 2, - imageHelp.width(), titleHeight); - if (r.left() > rect.left() + titleHeight) - region = r; + case Help: + if ( helpExists || widget->testWFlags(Qt::WStyle_ContextHelp) ) { + QRect r(rect.left(), rect.top() - titleHeight, + helpWidth, titleHeight); + region = r; } break; - } case Top: + if ( !widget->isMaximized() ) { + QRegion m = wdiface->mask(&wd); + QRect br = m.boundingRect(); + int b = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); + region = m & QRect( br.left()+grab, br.top(), + br.width()-2*grab, b ); + } + break; case Left: + if ( !widget->isMaximized() ) { + QRegion m = wdiface->mask(&wd); + QRect br = m.boundingRect(); + int b = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd); + region = m & QRect( br.left(), br.top()+grab, + b, br.height()-2*grab ); + } + break; case Right: + if ( !widget->isMaximized() ) { + QRegion m = wdiface->mask(&wd); + QRect br = m.boundingRect(); + int b = wdiface->metric(WindowDecorationInterface::RightBorder,&wd); + region = m & QRect( rect.right(), br.top()+grab, + b, br.height()-2*grab ); + } + break; case Bottom: + if ( !widget->isMaximized() ) { + QRegion m = wdiface->mask(&wd); + QRect br = m.boundingRect(); + int b = wdiface->metric(WindowDecorationInterface::BottomBorder,&wd); + region = m & QRect( br.left()+grab, rect.bottom(), + br.width()-2*grab, b ); + } + break; case TopLeft: + if ( !widget->isMaximized() ) { + QRegion m = wdiface->mask(&wd); + QRect br = m.boundingRect(); + int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); + int lb = wdiface->metric(WindowDecorationInterface::LeftBorder,&wd); + QRegion crgn( br.left(), br.top(), grab, tb ); + crgn |= QRect( br.left(), br.top(), lb, grab ); + region = m & crgn; + } + break; case TopRight: + if ( !widget->isMaximized() ) { + QRegion m = wdiface->mask(&wd); + QRect br = m.boundingRect(); + int tb = wdiface->metric(WindowDecorationInterface::TopBorder,&wd); + int rb = wdiface->metric(WindowDecorationInterface::RightBorder,&wd); + QRegion crgn( br.right()-grab, br.top(), grab, tb ); + crgn |= QRect( br.right()-rb, br.top(), rb, grab ); + region = m & crgn; + } + break; case BottomLeft: + if ( !widget->isMaximized() ) { + QRegion m = wdiface->mask(&wd); + QRect br = m.boundingRect(); + region = m & QRect( br.left(), br.bottom()-grab, grab, grab ); + } + break; case BottomRight: - if ( widget->isMaximized() ) { - region = QRegion(); - break; + if ( !widget->isMaximized() ) { + QRegion m = wdiface->mask(&wd); + QRect br = m.boundingRect(); + region = m & QRect( br.right()-grab, br.bottom()-grab, grab, grab ); } - //else fallthrough!!! + break; case All: + if ( widget->isMaximized() ) + region = QWSDefaultDecoration::region(widget, rect, type); + else + region = wdiface->mask(&wd) - rect; + break; default: region = QWSDefaultDecoration::region(widget, rect, type); break; } return region; } void QPEDecoration::paint(QPainter *painter, const QWidget *widget) { -#ifndef QT_NO_STYLE -// QStyle &style = QApplication::style(); -#endif + WindowDecorationInterface::WindowData wd; + windowData( widget, wd ); int titleWidth = getTitleWidth(widget); - int titleHeight = getTitleHeight(widget); + int titleHeight = wdiface->metric(WindowDecorationInterface::TitleHeight,&wd); QRect rect(widget->rect()); - // Border rect - QRect br( rect.left() - BORDER_WIDTH, - rect.top() - BORDER_WIDTH - titleHeight, - rect.width() + 2 * BORDER_WIDTH, - rect.height() + BORDER_WIDTH + BOTTOM_BORDER_WIDTH + titleHeight ); - // title bar rect - QRect tr; - - tr = QRect( rect.left(), rect.top() - titleHeight, rect.width(), titleHeight ); + QRect tr( rect.left(), rect.top() - titleHeight, rect.width(), titleHeight ); +#ifndef QT_NO_PALETTE QRegion oldClip = painter->clipRegion(); painter->setClipRegion( oldClip - QRegion( tr ) ); // reduce flicker - -#ifndef QT_NO_PALETTE - // const QColorGroup &cg = QApplication::palette().active(); - const QColorGroup &cg = widget->palette().active(); - - qDrawWinPanel(painter, br.x(), br.y(), br.width(), - br.height() - 4, cg, FALSE, - &cg.brush(QColorGroup::Background)); - + wdiface->drawArea( WindowDecorationInterface::Border, painter, &wd ); painter->setClipRegion( oldClip ); if (titleWidth > 0) { + const QColorGroup &cg = widget->palette().active(); QBrush titleBrush; QPen titlePen; - QPen titleLines; - int titleLeft = titleHeight + 4; - if (widget == qApp->activeWindow()) { + if ( wd.flags & WindowDecorationInterface::WindowData::Active ) { titleBrush = cg.brush(QColorGroup::Highlight); titlePen = cg.color(QColorGroup::HighlightedText); } else { titleBrush = cg.brush(QColorGroup::Background); titlePen = cg.color(QColorGroup::Text); } - titleLines = titleBrush.color().dark(150); - -#define CLAMP(x, y) ( ((x) > (y)) ? (y) : (x) ) + wdiface->drawArea( WindowDecorationInterface::Title, painter, &wd ); - titleLeft = rect.left() + 5; - painter->setPen( cg.midlight() ); - painter->drawLine( rect.left() - BORDER_WIDTH + 2, - rect.bottom() + 1, rect.right() + BORDER_WIDTH - 2, - rect.bottom() + 1 ); - - fillTitle( painter, widget, rect.left() - 2, - rect.top() - titleHeight - 2, - rect.width() + 3, titleHeight + 2 ); -/* - painter->fillRect(rect.left() - 2, - rect.top() - titleHeight - 2, - rect.width() + 3, titleHeight + 2, - titleBrush); - - painter->setPen( titleLines ); - for ( int i = rect.top() - titleHeight - 2; i < rect.top(); i += 2 ) - painter->drawLine( rect.left() - 2, i, rect.left() + rect.width() + 2, i ); -*/ + // Draw caption painter->setPen(titlePen); QFont f( QApplication::font() ); f.setWeight( QFont::Bold ); painter->setFont(f); - painter->drawText( titleLeft, -titleHeight, - rect.width() - titleHeight - 10, titleHeight-1, - QPainter::AlignVCenter, widget->caption()); + wdiface->drawArea( WindowDecorationInterface::TitleText, painter, &wd ); } - #endif //QT_NO_PALETTE -#ifndef MINIMIZE_HELP_HACK paintButton( painter, widget, (QWSDecoration::Region)Help, 0 ); -#endif } void QPEDecoration::paintButton(QPainter *painter, const QWidget *w, QWSDecoration::Region type, int state) { -#ifndef QT_NO_PALETTE -#ifndef QT_NO_STYLE -// QStyle &style = QApplication::style(); -#endif - const QColorGroup &cg = w->palette().active(); - - QRect brect(region(w, w->rect(), type).boundingRect()); - -// int xoff=2; -// int yoff=2; - -// const QPixmap *pm=pixmapFor(w,type,state & QWSButton::On, xoff, yoff); - - const QImage *img = 0; - - switch ((int)type) { - case Close: - img = &imageClose; - break; - case Minimize: - if ( ((HackWidget *)w)->needsOk() || - (w->inherits( "QDialog" ) && !w->inherits( "QMessageBox" ) ) ) - img = &imageOk; - else if ( helpExists ) - img = &imageHelp; - break; - case Help: - img = &imageHelp; - break; - default: + WindowDecorationInterface::Button b; + switch ((int)type) { + case Close: + b = WindowDecorationInterface::Close; + break; + case Minimize: + if ( ((HackWidget *)w)->needsOk() ) + b = WindowDecorationInterface::OK; + else if ( helpExists ) + b = WindowDecorationInterface::Help; + else return; - } - - QBrush titleBrush; - - if (w == qApp->activeWindow()) { - titleBrush = cg.brush(QColorGroup::Highlight); - } else { - titleBrush = cg.brush(QColorGroup::Background); - } - - fillTitle( painter, w, brect.x(), brect.y(), brect.width()+1, - brect.height()+1 ); - if ((state & QWSButton::MouseOver) && (state & QWSButton::Clicked)) { - if (img) painter->drawImage(brect.x()+1, brect.y()+3, *img); - } else { - if (img) painter->drawImage(brect.x(), brect.y()+2, *img); - } - -#endif - -} - -void QPEDecoration::fillTitle( QPainter *p, const QWidget *widget, - int x, int y, int w, int h ) -{ - QBrush titleBrush; - QPen topLine; - QPen titleLines; + break; + case Help: + b = WindowDecorationInterface::Help; + break; + case Maximize: + b = WindowDecorationInterface::Maximize; + break; + default: + return; + } - const QColorGroup &cg = widget->palette().active(); + WindowDecorationInterface::WindowData wd; + windowData( w, wd ); - if (widget == qApp->activeWindow()) { - titleBrush = cg.brush(QColorGroup::Highlight); - titleLines = titleBrush.color().dark(); - topLine = titleBrush.color().light(); - } else { - titleBrush = cg.brush(QColorGroup::Background); - titleLines = titleBrush.color(); - topLine = titleBrush.color(); - } + int titleHeight = wdiface->metric(WindowDecorationInterface::TitleHeight,&wd); + QRect rect(w->rect()); + QRect tr( rect.left(), rect.top() - titleHeight, rect.width(), titleHeight ); + QRect brect(region(w, w->rect(), type).boundingRect()); - p->fillRect( x, y, w, h, titleBrush); + const QColorGroup &cg = w->palette().active(); + if ( wd.flags & WindowDecorationInterface::WindowData::Active ) + painter->setPen( cg.color(QColorGroup::HighlightedText) ); + else + painter->setPen( cg.color(QColorGroup::Text) ); - p->setPen( topLine ); - p->drawLine( x, y+1, x+w-1, y+1 ); - p->setPen( titleLines ); - for ( int i = y; i < y+h; i += 2 ) - p->drawLine( x, i, x+w-1, i ); + QRegion oldClip = painter->clipRegion(); + painter->setClipRegion( QRect(brect.x(), tr.y(), brect.width(), tr.height()) ); // reduce flicker + wdiface->drawArea( WindowDecorationInterface::Title, painter, &wd ); + wdiface->drawButton( b, painter, &wd, brect.x(), brect.y(), brect.width(), brect.height(), (QWSButton::State)state ); + painter->setClipRegion( oldClip ); } //#define QPE_DONT_SHOW_TITLEBAR void QPEDecoration::maximize( QWidget *widget ) { #ifdef QPE_DONT_SHOW_TITLEBAR if ( !widget->inherits( "QDialog" ) ) { widget->setGeometry( qt_maxWindowRect ); } else #endif { QWSDecoration::maximize( widget ); } } #ifndef QT_NO_DIALOG class HackDialog : public QDialog { public: void acceptIt() { if ( isA( "QMessageBox" ) ) qApp->postEvent( this, new QKeyEvent( QEvent::KeyPress, Key_Enter, '\n', 0, "\n" ) ); else accept(); } }; #endif void QPEDecoration::minimize( QWidget *widget ) { #ifndef QT_NO_DIALOG // We use the minimize button as an "accept" button. if ( widget->inherits( "QDialog" ) ) { HackDialog *d = (HackDialog *)widget; d->acceptIt(); } #endif else if ( ((HackWidget *)widget)->needsOk() ) { QSignal s; s.connect( widget, SLOT( accept() ) ); s.activate(); } else { help( widget ); } } -void QPEDecoration::help( QWidget * ) +void QPEDecoration::help( QWidget *w ) { if ( helpExists ) { Global::execute( "helpbrowser", helpFile ); + } else if ( w && w->testWFlags(Qt::WStyle_ContextHelp) ) { + QWhatsThis::enterWhatsThisMode(); + QWhatsThis::leaveWhatsThisMode( qApp->tr( + "<Qt>Comprehensive help is not available for this application, " + "however there is context-sensitive help.<p>To use context-sensitive help:<p>" + "<ol><li>click and hold the help button." + "<li>when the title bar shows <b>What's this...</b>, " + "click on any control.</ol></Qt>" ) ); } } +void QPEDecoration::windowData( const QWidget *w, WindowDecorationInterface::WindowData &wd ) const +{ + wd.rect = w->rect(); + if ( qpeManager->whatsThisWidget() == w ) + wd.caption = qApp->tr("What's this..." ); + else + wd.caption = w->caption(); + wd.palette = qApp->palette(); + wd.flags = 0; + wd.flags |= w->isMaximized() ? WindowDecorationInterface::WindowData::Maximized : 0; + wd.flags |= w->testWFlags(Qt::WStyle_Dialog) ? WindowDecorationInterface::WindowData::Dialog : 0; + const QWidget *active = qpeManager->activeWidget(); + wd.flags |= w == active ? WindowDecorationInterface::WindowData::Active : 0; + wd.reserved = 1; +} /* #ifndef QT_NO_POPUPMENU QPopupMenu *QPEDecoration::menu(QWSManager*, const QWidget*, const QPoint&) { return 0; } #endif */ #endif // QT_NO_QWS_QPE_WM_STYLE +#endif diff --git a/library/qpedecoration_qws.h b/library/qpedecoration_qws.h index b8afd05..691c6f6 100644 --- a/library/qpedecoration_qws.h +++ b/library/qpedecoration_qws.h @@ -1,101 +1,111 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef QPE_DECORATION_QWS_H__ #define QPE_DECORATION_QWS_H__ +#ifdef QWS #include <qwsdefaultdecoration_qws.h> #include <qimage.h> #include <qdatetime.h> #include <qguardedptr.h> +#include "windowdecorationinterface.h" #ifndef QT_NO_QWS_QPE_WM_STYLE class QPEManager; class QTimer; class QPEDecoration : public QWSDefaultDecoration { public: QPEDecoration(); + QPEDecoration( const QString &plugin ); virtual ~QPEDecoration(); virtual QRegion region(const QWidget *, const QRect &rect, Region); virtual void paint(QPainter *, const QWidget *); virtual void paintButton(QPainter *, const QWidget *, Region, int state); void maximize( QWidget * ); void minimize( QWidget * ); virtual void help( QWidget * ); enum QPERegion { Help=LastRegion+1 }; void buttonClicked( QPERegion r ); protected: - void fillTitle( QPainter *p, const QWidget *w, int x, int y, int w, int h ); -// virtual int getTitleWidth(const QWidget *); virtual int getTitleHeight(const QWidget *); virtual const char **menuPixmap(); virtual const char **closePixmap(); virtual const char **minimizePixmap(); virtual const char **maximizePixmap(); virtual const char **normalizePixmap(); +private: + void windowData( const QWidget *w, WindowDecorationInterface::WindowData &wd ) const; + protected: QImage imageOk; QImage imageClose; QImage imageHelp; QString helpFile; bool helpExists; QPEManager *qpeManager; }; class QPEManager : public QObject { Q_OBJECT friend class QPEDecoration; public: QPEManager( QPEDecoration *d, QObject *parent=0 ); void updateActive(); + const QWidget *activeWidget() const { return (const QWidget *)active; } + const QWidget *whatsThisWidget() const { return (const QWidget *)whatsThis; } protected: int pointInQpeRegion( QWidget *w, const QPoint &p ); virtual bool eventFilter( QObject *, QEvent * ); void drawButton( QWidget *w, QPEDecoration::QPERegion r, int state ); + void drawTitle( QWidget *w ); protected slots: void whatsThisTimeout(); protected: QPEDecoration *decoration; QGuardedPtr<QWidget> active; int helpState; QTime pressTime; QTimer *wtTimer; + bool inWhatsThis; + QGuardedPtr<QWidget> whatsThis; }; #endif // QT_NO_QWS_QPE_WM_STYLE #endif // QPE_DECORATION_QWS_H__ +#endif // QWS diff --git a/library/qpedialog.cpp b/library/qpedialog.cpp index 06b0c94..0db161b 100644 --- a/library/qpedialog.cpp +++ b/library/qpedialog.cpp @@ -1,45 +1,46 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ -#include "qpedialog.h" -#include "qpeapplication.h" - #define protected public #include <qdialog.h> +#undef protected + +#include "qpedialog.h" +#include "qpeapplication.h" QPEDialogListener::QPEDialogListener(QDialog *di ) : QObject(di) { dialog = di; connect(qApp, SIGNAL(appMessage(const QCString&, const QByteArray&)), this, SLOT(appMessage(const QCString&, const QByteArray&)) ); } QPEDialogListener::~QPEDialogListener() {} -void QPEDialogListener::appMessage( const QCString &msg, const QByteArray &data ) +void QPEDialogListener::appMessage( const QCString &msg, const QByteArray & ) { if (!dialog) return; if (msg == "accept()") { dialog->accept(); } else if (msg == "reject()") { dialog->reject(); } } diff --git a/library/qpedialog.h b/library/qpedialog.h index 1fde09a..ed77720 100644 --- a/library/qpedialog.h +++ b/library/qpedialog.h @@ -1,44 +1,44 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef __QPE_DIALOG_H__ #define __QPE_DIALOG_H__ #include <qobject.h> class QPEDialogListenerData; class QPEDialogListener : public QObject { Q_OBJECT public: QPEDialogListener(QDialog *di); ~QPEDialogListener(); private slots: void appMessage( const QCString &msg, const QByteArray &data ); private: QDialog *dialog; QPEDialogListenerData *d; }; #endif diff --git a/library/qpemenubar.cpp b/library/qpemenubar.cpp index bb3ad8d..f0171ba 100644 --- a/library/qpemenubar.cpp +++ b/library/qpemenubar.cpp @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2001 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #define INCLUDE_MENUITEM_DEF #include "qpemenubar.h" #include <qapplication.h> #include <qguardedptr.h> #include <qtimer.h> class QMenuBarHack : public QMenuBar { public: int activeItem() const { return actItem; } void goodbye() { activateItemAt(-1); for ( unsigned int i = 0; i < count(); i++ ) { QMenuItem *mi = findItem( idAt(i) ); if ( mi->popup() ) { mi->popup()->hide(); } } } }; QPEMenuToolFocusManager *QPEMenuToolFocusManager::me = 0; QPEMenuToolFocusManager::QPEMenuToolFocusManager() : QObject() { qApp->installEventFilter( this ); } @@ -202,123 +202,124 @@ bool QPEMenuToolFocusManager::eventFilter( QObject *object, QEvent *event ) if ( i == c ) { mb->goodbye(); moveFocus( TRUE ); return TRUE; } else if ( i < 0 ) { mb->goodbye(); moveFocus( FALSE ); return TRUE; } QMenuItem *mi = mb->findItem( mb->idAt(i) ); if ( mi->isEnabled() && !mi->isSeparator() ) { break; } } } } } if ( ke->key() == Key_F11 ) { setActive( !isActive() ); return TRUE; } } else if ( event->type() == QEvent::KeyRelease ) { QKeyEvent *ke = (QKeyEvent *)event; if ( isActive() ) { if ( object->inherits( "QButton" ) ) { // Deactivate when a button is selected if ( ke->key() == Key_Space ) QTimer::singleShot( 0, this, SLOT(deactivate()) ); } } } else if ( event->type() == QEvent::FocusIn ) { if ( isActive() ) { // A non-menu/tool widget has been selected - we're deactivated QWidget *w = (QWidget *)object; if ( !w->isPopup() && !list.contains( GuardedWidget( w ) ) ) { inFocus = 0; } } } else if ( event->type() == QEvent::Hide ) { if ( isActive() ) { // Deaticvate if a menu/tool has been hidden QWidget *w = (QWidget *)object; if ( !w->isPopup() && !list.contains( GuardedWidget( w ) ) ) { setActive( FALSE ); } } } else if ( event->type() == QEvent::ChildInserted ) { QChildEvent *ce = (QChildEvent *)event; - if ( ce->child()->inherits( "QMenuBar" ) ) { - addWidget( (QWidget *)ce->child() ); - ce->child()->installEventFilter( this ); - } else if ( object->inherits( "QToolBar" ) && ce->child()->isWidgetType() ) { - addWidget( (QWidget *)ce->child() ); + if ( ce->child()->isWidgetType() ) { + if ( ce->child()->inherits( "QMenuBar" ) ) { + addWidget( (QWidget *)ce->child() ); + ce->child()->installEventFilter( this ); + } else if ( object->inherits( "QToolBar" ) ) { + addWidget( (QWidget *)ce->child() ); + } } } else if ( event->type() == QEvent::ChildRemoved ) { QChildEvent *ce = (QChildEvent *)event; - if ( ce->child()->inherits( "QMenuBar" ) ) { - removeWidget( (QWidget *)ce->child() ); - ce->child()->removeEventFilter( this ); - } else if ( object->inherits( "QToolBar" ) && ce->child()->isWidgetType() ) { - removeWidget( (QWidget *)ce->child() ); + if ( ce->child()->isWidgetType() ) { + if ( ce->child()->inherits( "QMenuBar" ) ) { + removeWidget( (QWidget *)ce->child() ); + ce->child()->removeEventFilter( this ); + } else if ( object->inherits( "QToolBar" ) ) { + removeWidget( (QWidget *)ce->child() ); + } } } return FALSE; } void QPEMenuToolFocusManager::deactivate() { setActive( FALSE ); } /*! \class QPEMenuBar qpemenubar.h \brief The QPEMenuBar class is obsolete. Use QMenuBar instead. \obsolete This class is obsolete. Use QMenuBar instead. - \sa QMenuBar */ /*! Constructs a QPEMenuBar just as you would construct a QMenuBar, passing \a parent and \a name. */ QPEMenuBar::QPEMenuBar( QWidget *parent, const char *name ) : QMenuBar( parent, name ) { } /*! \reimp */ QPEMenuBar::~QPEMenuBar() { } /*! \internal */ void QPEMenuBar::keyPressEvent( QKeyEvent *e ) { QMenuBar::keyPressEvent( e ); } - -void QPEMenuBar::activateItem( int index ) -{ +/*! + \internal +*/ +void QPEMenuBar::activateItem( int index ) { activateItemAt( index ); } - -void QPEMenuBar::goodbye() -{ +void QPEMenuBar::goodbye() { activateItemAt(-1); - for ( unsigned int i = 0; i < count(); i++ ) { - QMenuItem *mi = findItem( idAt(i) ); - if ( mi->popup() ) { + for ( uint i = 0; i < count(); i++ ) { + QMenuItem* mi = findItem( idAt(i) ); + if (mi->popup() ) mi->popup()->hide(); - } } } diff --git a/library/qpemenubar.h b/library/qpemenubar.h index 5bfbe83..05abc4e 100644 --- a/library/qpemenubar.h +++ b/library/qpemenubar.h @@ -1,73 +1,78 @@ /********************************************************************** -** Copyright (C) 2001 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef QPEMENUBAR_H #define QPEMENUBAR_H #include <qmenubar.h> #include <qguardedptr.h> #include <qvaluelist.h> class QPEMenuToolFocusManager : public QObject { Q_OBJECT public: QPEMenuToolFocusManager(); void addWidget( QWidget *w ); void removeWidget( QWidget *w ); void setActive( bool a ); bool isActive() const; void moveFocus( bool next ); static QPEMenuToolFocusManager *manager(); static void initialize(); protected: void setFocus( QWidget *w, bool next=TRUE ); bool eventFilter( QObject *object, QEvent *event ); private slots: void deactivate(); private: typedef QGuardedPtr<QWidget> GuardedWidget; QValueList<GuardedWidget> list; GuardedWidget inFocus; GuardedWidget oldFocus; static QPEMenuToolFocusManager *me; }; class QPEMenuBar : public QMenuBar { Q_OBJECT public: QPEMenuBar( QWidget *parent=0, const char* name=0 ); ~QPEMenuBar(); protected: virtual void keyPressEvent( QKeyEvent *e ); + + /* Patch from Mickey + * Sharp Qtopia1.5 seems to have these functions + * TO BE RESOLVED - zecke + */ void activateItem( int index ); void goodbye(); }; #endif diff --git a/library/quickexec.cpp b/library/quickexec.cpp index f3b5089..fad5677 100644 --- a/library/quickexec.cpp +++ b/library/quickexec.cpp @@ -1,41 +1,61 @@ +/********************************************************************** +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. +** +** This file is part of the Qtopia Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> #define QUICKEXEC "/tmp/.quickexec" int quickexecv( const char *path, const char *argv[] ) { int fd = open( QUICKEXEC, O_WRONLY ); if ( fd == -1 ) { perror( "quickexec pipe" ); return -1; } write( fd, path, strlen( path )+1 ); const char **s = argv; while( *s ) { write( fd, *s, strlen( *s )+1 ); ++s; } close(fd); return 0; } int quickexec( const char *path, const char *, ...) { int fd = open( QUICKEXEC, O_WRONLY ); if ( fd == -1 ) { perror( "quickexec pipe" ); return -1; } const char** s = &path; do { write( fd, *s, strlen( *s )+1 ); } while ( *(++s) ); close( fd ); return 0; } diff --git a/library/quuid.cpp b/library/quuid.cpp index fb4387c..46fd816 100644 --- a/library/quuid.cpp +++ b/library/quuid.cpp @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "quuid.h" /*! \class QUuid quuid.h \brief The QUuid class defines a Universally Unique Identifier (UUID). This class is temporarily copied from Qt 3.0. */ /*! \fn QUuid::QUuid() Creates the null UUID {00000000-0000-0000-0000-000000000000}. */ /*! \fn QUuid::QUuid( uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3, uchar b4, uchar b5, uchar b6, uchar b7, uchar b8 ) Creates an UUID with the value specified by the parameters, \a l, \a w1, \a w2, \a b1, \a b2, \a b3, \a b4, \a b5, \a b6, \a b7, \a b8. Example: \code // {67C8770B-44F1-410A-AB9A-F9B5446F13EE} QUuid IID_MyInterface( 0x67c8770b, 0x44f1, 0x410a, 0xab, 0x9a, 0xf9, 0xb5, 0x44, 0x6f, 0x13, 0xee ) \endcode */ /*! \fn QUuid::QUuid( const QUuid &orig ) Creates a copy of the QUuid \a orig. diff --git a/library/quuid.h b/library/quuid.h index 4f7a720..841a00f 100644 --- a/library/quuid.h +++ b/library/quuid.h @@ -1,142 +1,163 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef QUUID_H #define QUUID_H #ifndef QT_H #include <qstring.h> #endif // QT_H #include <memory.h> #if defined(Q_OS_WIN32) #ifndef GUID_DEFINED #define GUID_DEFINED typedef struct _GUID { ulong Data1; ushort Data2; ushort Data3; uchar Data4[ 8 ]; } GUID; #endif #endif #if defined( Q_WS_QWS ) && !defined( UUID_H_INCLUDED ) typedef unsigned char uuid_t[16]; #endif struct Q_EXPORT QUuid { QUuid() { memset( this, 0, sizeof(QUuid) ); } QUuid( uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3, uchar b4, uchar b5, uchar b6, uchar b7, uchar b8 ) { data1 = l; data2 = w1; data3 = w2; data4[0] = b1; data4[1] = b2; data4[2] = b3; data4[3] = b4; data4[4] = b5; data4[5] = b6; data4[6] = b7; data4[7] = b8; } QUuid( const QUuid &uuid ) { memcpy( this, &uuid, sizeof(QUuid) ); } #ifndef QT_NO_QUUID_STRING QUuid( const QString & ); QString toString() const; #endif bool isNull() const; QUuid &operator=(const QUuid &orig ) { memcpy( this, &orig, sizeof(QUuid) ); return *this; } bool operator==(const QUuid &orig ) const { return !memcmp( this, &orig, sizeof(QUuid) ); } bool operator!=(const QUuid &orig ) const { return !( *this == orig ); } + inline bool operator<(const QUuid &orig) const + { + return ( memcmp(this, &orig, sizeof(QUuid)) < 0); + } + + inline bool operator>(const QUuid &orig) const + { + return ( memcmp(this, &orig, sizeof(QUuid) ) > 0); + } + #if defined(Q_OS_WIN32) // On Windows we have a type GUID that is used by the platform API, so we // provide convenience operators to cast from and to this type. QUuid( const GUID &guid ) { memcpy( this, &guid, sizeof(GUID) ); } QUuid &operator=(const GUID &orig ) { memcpy( this, &orig, sizeof(QUuid) ); return *this; } operator GUID() const { GUID guid = { data1, data2, data3, { data4[0], data4[1], data4[2], data4[3], data4[4], data4[5], data4[6], data4[7] } }; return guid; } bool operator==( const GUID &guid ) const { return !memcmp( this, &guid, sizeof(QUuid) ); } bool operator!=( const GUID &guid ) const { return !( *this == guid ); } + + inline bool operator<(const QUuid &orig) const + { + return ( memcmp(this, &orig, sizeof(QUuid) ) < 0); + } + + inline bool operator>(const QUuid &orig) const + { + return ( memcmp(this, &orig, sizeof(QUuid) ) > 0); + } + #endif #if defined (Q_WS_QWS) QUuid( uuid_t uuid ) { - memcpy( this, &uuid, sizeof(uuid_t) ); + memcpy( this, uuid, sizeof(uuid_t) ); } QUuid &operator=(const uuid_t &orig ) { memcpy( this, &orig, sizeof(uuid_t) ); return *this; } #endif ulong data1; ushort data2; ushort data3; uchar data4[ 8 ]; }; #endif //QUUID_H diff --git a/library/resource.cpp b/library/resource.cpp index 0915c45..0db2a75 100644 --- a/library/resource.cpp +++ b/library/resource.cpp @@ -1,140 +1,211 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ +#define QTOPIA_INTERNAL_MIMEEXT #include "qpeapplication.h" #include "resource.h" +#include "mimetype.h" #include <qdir.h> #include <qfile.h> #include <qregexp.h> #include <qpixmapcache.h> #include <qpainter.h> #include "inlinepics_p.h" /*! \class Resource resource.h \brief The Resource class provides access to named resources. The resources may be provided from files or other sources. + + The allSounds() function returns a list of all the sounds available. + A particular sound can be searched for using findSound(). + + Images can be loaded with loadImage(), loadPixmap(), loadBitmap() + and loadIconSet(). + + \ingroup qtopiaemb */ /*! \fn Resource::Resource() \internal */ /*! - Returns the QPixmap named \a pix. You should avoid including - any filename type extension (eg. .png, .xpm). + Returns the QPixmap called \a pix. You should avoid including + any filename type extension (e.g. .png, .xpm). */ -QPixmap Resource::loadPixmap( const QString &pix ) +QPixmap Resource::loadPixmap( const QString &pix ) { QPixmap pm; QString key="QPE_"+pix; if ( !QPixmapCache::find(key,pm) ) { pm.convertFromImage(loadImage(pix)); QPixmapCache::insert(key,pm); } return pm; } /*! - Returns the QBitmap named \a pix. You should avoid including - any filename type extension (eg. .png, .xpm). + Returns the QBitmap called \a pix. You should avoid including + any filename type extension (e.g. .png, .xpm). */ -QBitmap Resource::loadBitmap( const QString &pix ) +QBitmap Resource::loadBitmap( const QString &pix ) { QBitmap bm; bm = loadPixmap(pix); return bm; } /*! - Returns the filename of a pixmap named \a pix. You should avoid including - any filename type extension (eg. .png, .xpm .jpg .jpeg). + Returns the filename of a pixmap called \a pix. You should avoid including + any filename type extension (e.g. .png, .xpm). Normally you will use loadPixmap() rather than this function. */ QString Resource::findPixmap( const QString &pix ) { QString picsPath = QPEApplication::qpeDir() + "pics/"; - if ( QFile( picsPath + pix + ".png").exists() ) - return picsPath + pix + ".png"; - else if ( QFile( picsPath + pix + ".jpeg").exists() ) - return picsPath + pix + ".jpeg"; - else if ( QFile( picsPath + pix + ".jpg").exists() ) - return picsPath + pix + ".jpg"; - else if ( QFile( picsPath + pix + ".xpm").exists() ) - return picsPath + pix + ".xpm"; - else if ( QFile( picsPath + pix ).exists() ) + QString f; + + // Common case optimizations... + f = picsPath + pix + ".png"; + if ( QFile( f ).exists() ) + return f; + f = picsPath + pix + ".xpm"; + if ( QFile( f ).exists() ) + return f; + + // All formats... + QStrList fileFormats = QImageIO::inputFormats(); + QString ff = fileFormats.first(); + while ( fileFormats.current() ) { + QStringList exts = MimeType("image/"+ff.lower()).extensions(); + for ( QStringList::ConstIterator it = exts.begin(); it!=exts.end(); ++it ) { + QString f = picsPath + pix + "." + *it; + if ( QFile(f).exists() ) + return f; + } + ff = fileFormats.next(); + } + + // Finally, no (or existing) extension... + if ( QFile( picsPath + pix ).exists() ) return picsPath + pix; //qDebug("Cannot find pixmap: %s", pix.latin1()); return QString(); } /*! - Returns a sound file for a sound named \a name. - You should avoid including any filename type extension (eg. .wav, .au, .mp3). + Returns a sound file for a sound called \a name. + + You should avoid including any filename type extension (e.g. .wav), + as the system will search for only those fileformats which are supported + by the library. + + Currently, only WAV files are supported. */ QString Resource::findSound( const QString &name ) { QString picsPath = QPEApplication::qpeDir() + "sounds/"; QString result; if ( QFile( (result = picsPath + name + ".wav") ).exists() ) return result; return QString(); } /*! Returns a list of all sound names. */ QStringList Resource::allSounds() { QDir resourcedir( QPEApplication::qpeDir() + "sounds/", "*.wav" ); QStringList entries = resourcedir.entryList(); QStringList result; for (QStringList::Iterator i=entries.begin(); i != entries.end(); ++i) result.append((*i).replace(QRegExp("\\.wav"),"")); return result; } +static QImage load_image(const QString &name) +{ + QImage img = qembed_findImage(name.latin1()); + if ( img.isNull() ) { + // No inlined image, try file + QString f = Resource::findPixmap(name); + if ( !f.isEmpty() ) + img.load(f); + } + return img; +} + /*! - Returns the QImage named \a name. You should avoid including - any filename type extension (eg. .png, .xpm .jpg). + Returns the QImage called \a name. You should avoid including + any filename type extension (e.g. .png, .xpm). */ QImage Resource::loadImage( const QString &name) { - QImage img = qembed_findImage(name.latin1()); - if ( img.isNull() ) - return QImage(findPixmap(name)); +#ifndef QT_NO_DEPTH_32 // have alpha-blended pixmaps + static QImage last_enabled; + static QString last_enabled_name; + if ( name == last_enabled_name ) + return last_enabled; +#endif + QImage img = load_image(name); +#ifndef QT_NO_DEPTH_32 // have alpha-blended pixmaps + if ( img.isNull() ) { + // No file, try generating + if ( name[name.length()-1]=='d' && name.right(9)=="_disabled" ) { + last_enabled_name = name.left(name.length()-9); + last_enabled = load_image(last_enabled_name); + if ( last_enabled.isNull() ) { + last_enabled_name = QString::null; + } else { + img.detach(); + img.create( last_enabled.width(), last_enabled.height(), 32 ); + for ( int y = 0; y < img.height(); y++ ) { + for ( int x = 0; x < img.width(); x++ ) { + QRgb p = last_enabled.pixel( x, y ); + int a = qAlpha(p)/3; + int g = qGray(qRed(p),qGreen(p),qBlue(p)); + img.setPixel( x, y, qRgba(g,g,g,a) ); + } + } + img.setAlphaBuffer( TRUE ); + } + } + } +#endif return img; } /*! - \fn QIconSet Resource::loadIconSet( const QString &name ) + \fn QIconSet Resource::loadIconSet( const QString &name ) Returns a QIconSet for the pixmap named \a name. A disabled icon is generated that conforms to the Qtopia look & feel. You should avoid including any filename type extension (eg. .png, .xpm). */ diff --git a/library/resource.h b/library/resource.h index 982c58a..1f1ba9a 100644 --- a/library/resource.h +++ b/library/resource.h @@ -1,80 +1,57 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef PIXMAPLOADER_H #define PIXMAPLOADER_H #include <qimage.h> #include <qbitmap.h> #include <qiconset.h> #include <qstringlist.h> class Resource { public: Resource() {} static QImage loadImage( const QString &name); static QPixmap loadPixmap( const QString &name ); static QBitmap loadBitmap( const QString &name ); static QString findPixmap( const QString &name ); static QIconSet loadIconSet( const QString &name ); static QString findSound( const QString &name ); static QStringList allSounds(); }; // Inline for compatibility with SHARP ROMs inline QIconSet Resource::loadIconSet( const QString &pix ) { - QImage img = loadImage( pix ); - QPixmap pm; - pm.convertFromImage( img ); - QIconSet is( pm ); - QIconSet::Size size = pm.width() <= 22 ? QIconSet::Small : QIconSet::Large; - QPixmap dpm = loadPixmap( pix + "_disabled" ); - -#ifndef QT_NO_DEPTH_32 // have alpha-blended pixmaps - if ( dpm.isNull() ) { - QImage dimg( img.width(), img.height(), 32 ); - for ( int y = 0; y < img.height(); y++ ) { - for ( int x = 0; x < img.width(); x++ ) { - QRgb p = img.pixel( x, y ); - uint a = (p & 0xff000000) / 3; - p = (p & 0x00ffffff) | (a & 0xff000000); - dimg.setPixel( x, y, p ); - } - } - - dimg.setAlphaBuffer( TRUE ); - dpm.convertFromImage( dimg ); - } -#endif - + QPixmap pm = loadPixmap( pix ); + QIconSet is( pm ); if ( !dpm.isNull() ) - is.setPixmap( dpm, size, QIconSet::Disabled ); - + is.setPixmap( dpm, pm.width() <= 22 ? QIconSet::Small : QIconSet::Large, QIconSet::Disabled ); return is; } #endif diff --git a/library/backend/stringutil.h b/library/stringutil.h index e9daf70..f6cc3f4 100644 --- a/library/backend/stringutil.h +++ b/library/stringutil.h @@ -1,57 +1,56 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included -** in the packaging of this file. +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. ** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING -** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A -** PARTICULAR PURPOSE. +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef QTPALMTOP_stringutil_h__ #define QTPALMTOP_stringutil_h__ #include <qstring.h> -#include "qpcglobal.h" +#include <qtopia/private/qpcglobal.h> namespace Qtopia { // Simplifies white space within each line but keeps the new line characters QString QPC_EXPORT simplifyMultiLineSpace( const QString &multiLine ); // Creates a QString which doesn't contain any "dangerous" // characters (i.e. <, >, &, ") QString QPC_EXPORT escapeString( const QString& plain ); // Takes a UTF-8!! string and removes all the XML thingies (entities?) // from the string and also calls fromUtf8() on it... so make sure // to pass a QCString/const char* with UTF-8 data only QString QPC_EXPORT plainString( const char* escaped, unsigned int length ); QString QPC_EXPORT plainString( const QCString& string ); QString QPC_EXPORT plainString( const QString& string ); // collation functions int compare( const QString & s1, const QString & s2 ); QString buildSortKey( const QString & s ); QString buildSortKey( const QString & s1, const QString & s2 ); QString buildSortKey( const QString & s1, const QString & s2, const QString & s3 ); } #endif diff --git a/library/taskbarappletinterface.h b/library/taskbarappletinterface.h index 7e20329..705dd9a 100644 --- a/library/taskbarappletinterface.h +++ b/library/taskbarappletinterface.h @@ -1,41 +1,53 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef TASKBARAPPLETINTERFACE_H #define TASKBARAPPLETINTERFACE_H #include <qpe/qcom.h> +#include <qpixmap.h> #ifndef QT_NO_COMPONENT // {6CA34D0B-C637-4865-A667-7D4CD8A70407} # ifndef IID_TaskbarApplet # define IID_TaskbarApplet QUuid( 0x6ca34d0b, 0xc637, 0x4865, 0xa6, 0x67, 0x7d, 0x4c, 0xd8, 0xa7, 0x04, 0x07) # endif #endif class QWidget; struct TaskbarAppletInterface : public QUnknownInterface { virtual QWidget *applet( QWidget *parent ) = 0; virtual int position() const = 0; }; +// {7505E192-4977-465A-B72F-0A8DD491CF43} +#ifndef IID_TaskbarNamedApplet +#define IID_TaskbarNamedApplet QUuid( 0x7505e192, 0x4977, 0x465a, 0xb7, 0x2f, 0x0a, 0x8d, 0xd4, 0x91, 0xcf, 0x43) +#endif + +struct TaskbarNamedAppletInterface : public TaskbarAppletInterface +{ + virtual QString name() const = 0; + virtual QPixmap icon() const = 0; +}; + #endif diff --git a/library/textcodecinterface.h b/library/textcodecinterface.h new file mode 100644 index 0000000..3b5fb5b --- a/dev/null +++ b/library/textcodecinterface.h @@ -0,0 +1,44 @@ +/********************************************************************** +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. +** +** This file is part of the Qtopia Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ +#ifndef TEXTCODECINTERFACE_H +#define TEXTCODECINTERFACE_H + +#include <qstringlist.h> +#include <qpe/qcom.h> + +class QTextCodec; + +#ifndef QT_NO_COMPONENT +#ifndef IID_QtopiaTextCodec +#define IID_QtopiaTextCodec QUuid( 0x3ee02ba3, 0x57dc, 0x9b1e, 0x40, 0xf4, 0xda, 0xdf, 0x21, 0x89, 0xb6, 0xb4) +#endif +#endif + +struct TextCodecInterface : public QUnknownInterface +{ +public: + virtual QStringList names() const = 0; + virtual QTextCodec *createForName( const QString &name ) = 0; + + virtual QValueList<int> mibEnums() const = 0; + virtual QTextCodec *createForMib( int mib ) = 0; +}; + +#endif diff --git a/library/timestring.cpp b/library/timestring.cpp index d5d78ae..4c6fa72 100644 --- a/library/timestring.cpp +++ b/library/timestring.cpp @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "timestring.h" #include <qobject.h> #include "qpeapplication.h" //for qApp #include "config.h" class TimeStringFormatKeeper : public QObject { Q_OBJECT public: static DateFormat currentFormat() { if ( !self ) self = new TimeStringFormatKeeper; return self->format; } private slots: void formatChanged( DateFormat f ) { format = f; } private: static TimeStringFormatKeeper *self; DateFormat format; TimeStringFormatKeeper() : QObject( qApp ) { Config config("qpe"); config.setGroup( "Date" ); format = DateFormat(QChar(config.readEntry("Separator", "/")[0]), (DateFormat::Order)config .readNumEntry("ShortOrder", DateFormat::DayMonthYear), @@ -72,158 +72,154 @@ QString DateFormat::toNumberString() const case 0x0002: buf += QObject::tr( "M" ); break; case 0x0004: buf += QObject::tr( "Y" ); break; } if (i < 2) buf += _shortSeparator; } return buf; } QString DateFormat::toWordString() const { QString buf = ""; // for each part of the order for (int i = 0; i < 3; i++) { // switch on the relavent 3 bits. switch((_longOrder >> (i * 3)) & 0x0007) { case 0x0001: buf += QObject::tr( "day" ); if (i < 2) { if ((_shortOrder << ((i+1) * 3)) & 0x0007) buf += ", "; else buf += " "; } break; case 0x0002: buf += QObject::tr( "month" ); if (i < 2) buf += " "; break; case 0x0004: buf += QObject::tr( "year" ); if (i < 2) buf += ", "; break; } } return buf; } QString DateFormat::numberDate(const QDate &d, int v) const { QString buf = ""; - int pad = 0; - if (v & padNumber) - pad = 2; + int pad = 2; // for each part of the order for (int i = 0; i < 3; i++) { // switch on the relavent 3 bits. switch((_shortOrder >> (i * 3)) & 0x0007) { case 0x0001: - buf += QString("%1").arg(d.day(), pad); + if (pad==2) buf += QString().sprintf("%02d",d.day()); + else buf += QString().sprintf("%d",d.day()); break; case 0x0002: - buf += QString("%1").arg(d.month(), pad); + if (i==0) { // no padding with only MM/DD/YY format + pad=0; + } + if (pad==2) buf += QString().sprintf("%02d",d.month()); + else buf += QString().sprintf("%d",d.month()); break; case 0x0004: { int year = d.year(); if (!(v & longNumber)) year = year % 100; - - if (year < 10) - buf += "0"; - - buf += QString::number(year); - + buf += QString().sprintf("%02d",year); } break; } if (i < 2) - buf = _shortSeparator; + buf += _shortSeparator; } return buf; } QString DateFormat::wordDate(const QDate &d, int v) const { QString buf = ""; // for each part of the order if (v & showWeekDay) { QString weekDay = d.dayName(d.dayOfWeek()); if (!(v & longWord)) { weekDay = weekDay.left(3); } buf += weekDay; - if (_longOrder & 0x0007 == 0x0002) + if ((_longOrder & 0x0007) == 0x0002) buf += ' '; else buf += ", "; } - int pad = 0; - if (v & padNumber) - pad = 2; - for (int i = 0; i < 3; i++) { // switch on the relavent 3 bits. switch((_longOrder >> (i * 3)) & 0x0007) { case 0x0001: - buf += QString("%1").arg(d.day(), pad); - if (i < 2) { - if ((_shortOrder << ((i+1) * 3)) & 0x0007) - buf += ", "; + if (i==1) { + buf += QString().sprintf("%02d, ",d.day()); + } else { + buf += QString().sprintf("%2d",d.day()); + if (separator()=='.') // 2002/1/11 + buf += ". "; else buf += " "; } break; case 0x0002: { QString monthName = d.monthName(d.month()); if (!(v & longWord)) { monthName = monthName.left(3); } buf += monthName; } if (i < 2) buf += " "; break; case 0x0004: { int year = d.year(); if (!(v & longNumber)) year = year % 100; if (year < 10) buf += "0"; buf += QString::number(year); } if (i < 2) buf += ", "; break; } } return buf; } #ifndef QT_NO_DATASTREAM void DateFormat::save(QDataStream &d) const { d << _shortSeparator.unicode(); uint v= _shortOrder; d << v; v = _longOrder; d << v; } void DateFormat::load(QDataStream &d) { ushort value; d >> value; @@ -312,49 +308,58 @@ QString TimeString::timeString( const QTime &t, bool ampm, bool seconds ) if ( t.minute() < 10 ) strMin.prepend( "0" ); if ( t.second() < 10 ) strSec.prepend( "0" ); argString = argString.arg( strMin ); if ( seconds ) argString = argString.arg( strSec ); if ( hour >= 12 ) argString = argString.arg( QObject::tr("PM") ); else argString = argString.arg( QObject::tr("AM") ); return argString; } QString TimeString::shortTime( bool ampm, bool seconds ) { static const char* const day[] = { QT_TRANSLATE_NOOP( "QObject", "Mon" ), QT_TRANSLATE_NOOP( "QObject", "Tue" ), QT_TRANSLATE_NOOP( "QObject", "Wed" ), QT_TRANSLATE_NOOP( "QObject", "Thu" ), QT_TRANSLATE_NOOP( "QObject", "Fri" ), QT_TRANSLATE_NOOP( "QObject", "Sat" ), QT_TRANSLATE_NOOP( "QObject", "Sun" ) }; // just create a shorter time String QDateTime dtTmp = QDateTime::currentDateTime(); QString strTime; strTime = QObject::tr( day[dtTmp.date().dayOfWeek()-1] ) + " " + timeString( dtTmp.time(), ampm, seconds ); return strTime; } QString TimeString::dateString( const QDateTime &t, bool ampm ) { return dateString(t,ampm,FALSE); } QString TimeString::timeString( const QTime &t, bool ampm) { return timeString(t,ampm,FALSE); } QString TimeString::shortTime( bool ampm ) { return shortTime(ampm,FALSE); } +QString TimeString::numberDateString( const QDate &d, DateFormat dtf ) +{ + return dtf.numberDate(d); +} +QString TimeString::longNumberDateString( const QDate &d, DateFormat dtf ) +{ + return dtf.numberDate(d,DateFormat::longNumber); +} + #include "timestring.moc" diff --git a/library/timestring.h b/library/timestring.h index fd06d5b..f8cb3e6 100644 --- a/library/timestring.h +++ b/library/timestring.h @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef _TIMESTRING_H_ #define _TIMESTRING_H_ #include <qdatetime.h> #include <qstring.h> // return a string with the time based on whether or not you want // you want it in 12 hour form. if ampm is true, then return // it in 12 hour (am/pm) form otherwise return it in 24 hour form // in theory Qt 3,0 handles this better (hopefully obsoleteing this) class DateFormat { public: // date format type 001,010,100 = day month year enum Order { DayMonthYear = 0x0111, // 0x001 + 0x010(0x2 << 3) + 0x100(0x4 << 3) MonthDayYear = 0x010A, YearMonthDay = 0x0054 }; DateFormat(QChar s = '/', Order so = MonthDayYear) : _shortOrder(so), _longOrder(so), _shortSeparator(s) { } DateFormat(QChar s, Order so, Order lo) : _shortOrder(so), _longOrder(lo), _shortSeparator(s) { } DateFormat(const DateFormat &o) : _shortOrder(o._shortOrder), _longOrder(o._longOrder), _shortSeparator(o._shortSeparator) { } bool operator==(const DateFormat &o) { if (o._shortOrder == _shortOrder && o._longOrder == _longOrder && o._shortSeparator == _shortSeparator) return TRUE; return FALSE; @@ -69,63 +69,68 @@ public: QString toWordString() const; // the Month day, year string. QString numberDate(const QDate &d, int v = 0) const; QString wordDate(const QDate &d, int v = 0) const; #ifndef QT_NO_DATASTREAM void load(QDataStream&); void save(QDataStream&) const; #endif QChar separator() const { return _shortSeparator; }; Order shortOrder() const { return _shortOrder; }; Order longOrder() const { return _longOrder; }; private: Order _shortOrder; Order _longOrder; QChar _shortSeparator; }; #ifndef QT_NO_DATASTREAM QDataStream &operator<<(QDataStream &s, const DateFormat&df); QDataStream &operator>>(QDataStream &s, DateFormat&df); #endif class TimeString { public: //enum DateFormat { MonthDayYear, DayMonthYear, ISO8601, //YearMonthDay = ISO8601 }; static QString shortDate( const QDate &d ) { return shortDate( d, currentDateFormat() ); } static QString dateString( const QDate &d ) { return dateString( d, currentDateFormat() ); } static QString longDateString( const QDate &d ) { return longDateString( d, currentDateFormat() ); } static QString dateString( const QDateTime &dt, bool ampm, bool seconds ) { return dateString( dt, ampm, seconds, currentDateFormat() ); } static QString dateString( const QDateTime &t, bool ampm = false ); static QString timeString( const QTime &t, bool ampm, bool seconds ); static QString timeString( const QTime &t, bool ampm = false ); static QString shortTime( bool ampm, bool seconds ); static QString shortTime( bool ampm = false ); - + static QString numberDateString( const QDate &d, DateFormat ); + static QString numberDateString( const QDate &d ) + { return numberDateString( d, currentDateFormat() ); } + static QString longNumberDateString( const QDate &d, DateFormat ); + static QString longNumberDateString( const QDate &d ) + { return longNumberDateString( d, currentDateFormat() ); } static QString shortDate( const QDate &, DateFormat ); static QString dateString( const QDate &, DateFormat ); static QString longDateString( const QDate &, DateFormat ); static DateFormat currentDateFormat(); private: static QString dateString( const QDateTime &t, bool ampm, bool seconds, DateFormat ); }; -#endif +#endif diff --git a/library/tzselect.cpp b/library/tzselect.cpp index 5f102d5..6cc0bea 100644 --- a/library/tzselect.cpp +++ b/library/tzselect.cpp @@ -1,228 +1,274 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ +#define QTOPIA_INTERNAL_TZSELECT_INC_LOCAL + #include "tzselect.h" #include "resource.h" #include "global.h" #include "config.h" #include <qtoolbutton.h> #include <qfile.h> #include <stdlib.h> #ifdef Q_WS_QWS #include <qcopchannel_qws.h> #endif +class TimeZoneSelectorPrivate +{ +public: + TimeZoneSelectorPrivate() : includeLocal(FALSE) {} + bool includeLocal; +}; + TZCombo::TZCombo( QWidget *p, const char* n ) : QComboBox( p, n ) { updateZones(); // check to see if TZ is set, if it is set the current item to that QString tz = getenv("TZ"); + if (parent()->inherits("TimeZoneSelector")) { + if ( ((TimeZoneSelector *)parent())->localIncluded() ) { + // overide to the 'local' type. + tz = "None"; + } + } if ( !tz.isNull() ) { int n = 0, index = 0; - for ( QStringList::Iterator it=identifiers.begin(); + for ( QStringList::Iterator it=identifiers.begin(); it!=identifiers.end(); ++it) { if ( *it == tz ) index = n; n++; } setCurrentItem(index); } else { setCurrentItem(0); } // listen on QPE/System #if defined(Q_WS_QWS) #if !defined(QT_NO_COP) QCopChannel *channel = new QCopChannel( "QPE/System", this ); connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), this, SLOT(handleSystemChannel(const QCString&, const QByteArray&)) ); #endif #endif } TZCombo::~TZCombo() { } void TZCombo::updateZones() { QString cur = currentText(); clear(); identifiers.clear(); int curix=0; QString tz = getenv("TZ"); bool tzFound = FALSE; - Config cfg("CityTime"); + Config cfg("WorldTime"); cfg.setGroup("TimeZones"); - int i=0; - for ( ; 1; i++ ) { - QString zn = cfg.readEntry("Zone"+QString::number(i), QString::null); + int listIndex = 0; + if (parent()->inherits("TimeZoneSelector")) { + if ( ((TimeZoneSelector *)parent())->localIncluded() ) { + // overide to the 'local' type. + identifiers.append( "None" ); + insertItem( tr("None") ); + if ( cur == tr("None")) + curix = 0; + listIndex++; + } + } + int cfgIndex = 0; + while (1) { + QString zn = cfg.readEntry("Zone"+QString::number(cfgIndex), QString::null); if ( zn.isNull() ) break; if ( zn == tz ) tzFound = TRUE; - QString nm = cfg.readEntry("ZoneName"+QString::number(i)); + QString nm = cfg.readEntry("ZoneName"+QString::number(cfgIndex)); identifiers.append(zn); insertItem(nm); if ( nm == cur ) - curix = i; + curix = listIndex; + ++cfgIndex; + ++listIndex; } - if ( !tzFound && !tz.isEmpty()) { - int i = tz.find( '/' ); - QString nm = tz.mid( i+1 ); - identifiers.append(tz); - insertItem(nm); - if ( nm == cur ) - curix = i; - ++i; + if ( !listIndex ) { + QStringList list = timezoneDefaults(); + for ( QStringList::Iterator it = list.begin(); it!=list.end(); ++it ) { + QString zn = *it; + QString nm = *++it; + if ( zn == tz ) + tzFound = TRUE; + if ( nm == cur ) + curix = listIndex; + identifiers.append(zn); + insertItem(nm); + ++listIndex; + } } for (QStringList::Iterator it=extras.begin(); it!=extras.end(); ++it) { insertItem(*it); identifiers.append(*it); if ( *it == cur ) - curix = i; - ++i; + curix = listIndex; + ++listIndex; } - if ( !i ) { - QStringList list = timezoneDefaults(); - for ( QStringList::Iterator it = list.begin(); it!=list.end(); ++it ) { - identifiers.append(*it); ++it; - insertItem(*it); - } + if ( !tzFound && !tz.isEmpty()) { + int i = tz.find( '/' ); + QString nm = tz.mid( i+1 ).replace(QRegExp("_"), " "); + identifiers.append(tz); + insertItem(nm); + if ( nm == cur ) + curix = listIndex; + ++listIndex; } setCurrentItem(curix); } void TZCombo::keyPressEvent( QKeyEvent *e ) { // ### should popup() in Qt 3.0 (it's virtual there) // updateZones(); QComboBox::keyPressEvent(e); } void TZCombo::mousePressEvent(QMouseEvent*e) { // ### should popup() in Qt 3.0 (it's virtual there) // updateZones(); QComboBox::mousePressEvent(e); } QString TZCombo::currZone() const { return identifiers[currentItem()]; } void TZCombo::setCurrZone( const QString& id ) { for (int i=0; i< count(); i++) { if ( identifiers[i] == id ) { setCurrentItem(i); return; } } insertItem(id); setCurrentItem( count() - 1); identifiers.append(id); extras.append(id); } void TZCombo::handleSystemChannel(const QCString&msg, const QByteArray&) { if ( msg == "timeZoneListChange()" ) { updateZones(); } } TimeZoneSelector::TimeZoneSelector(QWidget* p, const char* n) : QHBox(p,n) { + d = new TimeZoneSelectorPrivate(); // build the combobox before we do any updates... cmbTz = new TZCombo( this, "timezone combo" ); cmdTz = new QToolButton( this, "timezone button" ); - QPixmap pixGlobe = Resource::loadPixmap( "citytime_icon" ); - cmdTz->setPixmap( pixGlobe ); + cmdTz->setIconSet( Resource::loadIconSet( "citytime_icon" ) ); cmdTz->setMaximumSize( cmdTz->sizeHint() ); // set up a connection to catch a newly selected item and throw our // signal QObject::connect( cmbTz, SIGNAL( activated( int ) ), this, SLOT( slotTzActive( int ) ) ); QObject::connect( cmdTz, SIGNAL( clicked() ), this, SLOT( slotExecute() ) ); } TimeZoneSelector::~TimeZoneSelector() { } +void TimeZoneSelector::setLocalIncluded(bool b) +{ + d->includeLocal = b; + cmbTz->updateZones(); +} + +bool TimeZoneSelector::localIncluded() const +{ + return d->includeLocal; +} + QString TimeZoneSelector::currentZone() const { return cmbTz->currZone(); } void TimeZoneSelector::setCurrentZone( const QString& id ) { cmbTz->setCurrZone( id ); } void TimeZoneSelector::slotTzActive( int ) { emit signalNewTz( cmbTz->currZone() ); } void TimeZoneSelector::slotExecute( void ) { - // execute the city time application... - Global::execute( "citytime" ); + // execute the world time application... + Global::execute( "worldtime" ); } QStringList timezoneDefaults( void ) { QStringList tzs; // load up the list just like the file format (citytime.cpp) tzs.append( "America/New_York" ); tzs.append( "New York" ); tzs.append( "America/Los_Angeles" ); tzs.append( "Los Angeles" ); tzs.append( "Australia/Brisbane" ); tzs.append( "Brisbane" ); tzs.append( "Europe/Oslo" ); tzs.append( "Oslo" ); tzs.append( "Asia/Tokyo" ); tzs.append( "Tokyo" ); tzs.append( "Asia/Hong_Kong" ); tzs.append( "Hong Kong" ); return tzs; } diff --git a/library/tzselect.h b/library/tzselect.h index 9898d84..55e45a3 100644 --- a/library/tzselect.h +++ b/library/tzselect.h @@ -1,79 +1,89 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef TZSELECT_H #define TZSELECT_H #include <qhbox.h> #include <qcombobox.h> #include <qstringlist.h> class QToolButton; +class TimeZoneSelector; // a function to load defaults in case there is no file QStringList timezoneDefaults( void ); class TZCombo : public QComboBox { Q_OBJECT public: TZCombo( QWidget* parent, const char* name = 0 ); ~TZCombo(); QString currZone() const; void setCurrZone( const QString& id ); protected: + friend class TimeZoneSelector; void keyPressEvent( QKeyEvent *e ); void mousePressEvent(QMouseEvent*e); void updateZones(); private slots: void handleSystemChannel(const QCString&, const QByteArray&); private: QStringList identifiers; QStringList extras; }; class TimeZoneSelectorPrivate; class TimeZoneSelector : public QHBox { Q_OBJECT public: TimeZoneSelector( QWidget* parent = 0, const char* name=0 ); ~TimeZoneSelector(); + +#ifdef QTOPIA_INTERNAL_TZSELECT_INC_LOCAL + // badly named.. not to be used outside of qtopia (not forward compatable) + // basically allows the "No Timezone" or "None" option. + void setLocalIncluded(bool); + bool localIncluded() const; +#endif + QString currentZone() const; void setCurrentZone( const QString& id ); signals: void signalNewTz( const QString& id ); private slots: void slotTzActive( int index ); void slotExecute( void ); private: TZCombo *cmbTz; QToolButton *cmdTz; TimeZoneSelectorPrivate *d; }; #endif diff --git a/library/windowdecorationinterface.h b/library/windowdecorationinterface.h new file mode 100644 index 0000000..dbec0fe --- a/dev/null +++ b/library/windowdecorationinterface.h @@ -0,0 +1,65 @@ +/********************************************************************** +** Copyright (C) 2002 Trolltech AS. All rights reserved. +** +** This file is part of the Qtopia Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +// !!! IMPORTANT !!! +// This interface is still experimental and subject to change. + +#ifndef WINDOWDECORATIONINTERFACE_H +#define WINDOWDECORATIONINTERFACE_H + +#include <qpe/qcom.h> +#include <qpixmap.h> +#include <qpalette.h> +#include <qwsmanager_qws.h> + +// {11A45864-4CBA-4DDA-9846-FF234FD307CC} +#ifndef IID_WindowDecoration +#define IID_WindowDecoration QUuid( 0x11a45864, 0x4cba, 0x4dda, 0x98, 0x46, 0xff, 0x23, 0x4f, 0xd3, 0x07, 0xcc) +#endif + +struct WindowDecorationInterface : public QUnknownInterface +{ + virtual ~WindowDecorationInterface() {} + + struct WindowData { + QRect rect; + QPalette palette; + QString caption; + enum Flags { Maximized=0x01, Dialog=0x02, Active=0x04 }; + Q_UINT32 flags; + Q_UINT32 reserved; + }; + + enum Metric { TitleHeight, LeftBorder, RightBorder, TopBorder, BottomBorder, OKWidth, CloseWidth, HelpWidth, MaximizeWidth, CornerGrabSize }; + virtual int metric( Metric m, const WindowData * ) const; + + enum Area { Border, Title, TitleText }; + virtual void drawArea( Area a, QPainter *, const WindowData * ) const; + + enum Button { OK, Close, Help, Maximize }; + virtual void drawButton( Button b, QPainter *, const WindowData *, int x, int y, int w, int h, QWSButton::State ) const; + + virtual QRegion mask( const WindowData * ) const; + + virtual QString name() const = 0; + virtual QPixmap icon() const = 0; +}; + +#endif diff --git a/library/xmlreader.cpp b/library/xmlreader.cpp index 1ae4485..1caab28 100644 --- a/library/xmlreader.cpp +++ b/library/xmlreader.cpp @@ -1,128 +1,143 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "xmlreader.h" +/*! \class Node xmlreader.h + \brief A single element in an XML structure defined by XmlHandler + + \ingroup qtopiaemb + */ + Node::Node() : parent( 0 ), prev( 0 ), next( 0 ), first( 0 ), last( 0 ) { } Node::~Node() { Node *n = first, *m; while ( n ) { m = n->next; delete n; n = m; } } void Node::addChild( Node *child ) { child->parent = this; if ( last ) last->next = child; child->prev = last; if ( !first ) first = child; last = child; } QString Node::attribute( const QString& name ) { return attributes[name]; } void Node::setAttributes( const QXmlAttributes &a ) { for ( int i = 0; i < a.length(); i++ ) attributes[ a.qName( i ) ] = a.value( i ); } QMap<QString, QString> Node::attributeMap() { return attributes; } QString Node::subData(const QString& tag) const { Node* c = firstChild(); while ( c ) { if ( c->tagName() == tag ) return c->data(); c = c->nextNode(); } return QString::null; } +/*! \class XmlHandler xmlreader.h + \brief XML document structure holder + + This class provides a Node structure that developers can read their + xml data into. + + \ingroup qtopiaemb +*/ + XmlHandler::XmlHandler() : node( 0 ), tree( 0 ) { } XmlHandler::~XmlHandler() { } bool XmlHandler::startDocument() { tree = node = new Node; node->setTagName( "DOCUMENT" ); return TRUE; } bool XmlHandler::endDocument() { if ( node != tree ) return FALSE; return TRUE; } bool XmlHandler::startElement( const QString &, const QString &, const QString &qName, const QXmlAttributes &attr ) { Node *nnode = new Node; nnode->setAttributes( attr ); nnode->setTagName( qName ); node->addChild( nnode ); node = nnode; return TRUE; } bool XmlHandler::endElement( const QString &, const QString &, const QString & ) { if ( node == tree ) return FALSE; node = node->parentNode(); return TRUE; diff --git a/library/xmlreader.h b/library/xmlreader.h index 2a51176..a4a6697 100644 --- a/library/xmlreader.h +++ b/library/xmlreader.h @@ -1,52 +1,52 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef XMLREADER_H #define XMLREADER_H #include <qstring.h> #include <qxml.h> #include <qmap.h> class Node { public: Node(); ~Node(); void addChild( Node *child ); void setAttributes( const QXmlAttributes &a ); QMap<QString, QString> attributeMap(); QString attribute( const QString& name ); Node *nextNode() const { return next; } Node *prevNode() const { return prev; } Node *parentNode() const { return parent; } Node *lastChild() const { return last; } Node *firstChild() const { return first; } void setTagName( const QString &s ) { tagN = s; } QString tagName() const { return tagN; } void setData( const QString &s ) { dt = s; } QString data() const { return dt; } QString subData(const QString& tag) const; void appendData( const QString s ) { dt += s; } |