diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-07-10 15:24:15 -0500 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-07-10 15:24:15 -0500 |
commit | bd0f3345a938b35ce6a12f6150373b0955b8dd12 (patch) | |
tree | 7a520322212d48ebcb9fbe1087e7fca28b76185c /examples/demo | |
download | qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.tar.gz qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.zip |
Add Qt3 development HEAD version
Diffstat (limited to 'examples/demo')
287 files changed, 25471 insertions, 0 deletions
diff --git a/examples/demo/categoryinterface.h b/examples/demo/categoryinterface.h new file mode 100644 index 0000000..422881f --- /dev/null +++ b/examples/demo/categoryinterface.h @@ -0,0 +1,32 @@ +#ifndef CATEGORYINTERFACE_H +#define CATEGORYINTERFACE_H + +#include <qstring.h> +#include <qiconset.h> +#include <qobject.h> + +class QWidgetStack; + +class CategoryInterface : public QObject +{ + Q_OBJECT + +public: + CategoryInterface( QWidgetStack *s ) : stack( s ) {} + virtual ~CategoryInterface() {} + virtual QString name() const = 0; + virtual QIconSet icon() const = 0; + virtual int numCategories() const = 0; + virtual QString categoryName( int i ) const = 0; + virtual QIconSet categoryIcon( int i ) const = 0; + virtual int categoryOffset() const = 0; + +public slots: + virtual void setCurrentCategory( int i ) = 0; + +protected: + QWidgetStack *stack; + +}; + +#endif diff --git a/examples/demo/demo.doc b/examples/demo/demo.doc new file mode 100644 index 0000000..10f7135 --- /dev/null +++ b/examples/demo/demo.doc @@ -0,0 +1,15 @@ +/*! \page demo-example.html + + \ingroup examples + \title Qt Demo + + This program shows off some of Qt's widgets and functionality. It + isn't intended as a code example, but rather as a single application + that you can run to see many of Qt's features. + + See $QTDIR/examples/demo for the source code. + +*/ + + + diff --git a/examples/demo/demo.pro b/examples/demo/demo.pro new file mode 100644 index 0000000..3413fcd --- /dev/null +++ b/examples/demo/demo.pro @@ -0,0 +1,105 @@ +TEMPLATE = app +TARGET = demo + +CONFIG += qt warn_off release +unix:LIBS += -lm +DEFINES += QT_INTERNAL_ICONVIEW +DEFINES += QT_INTERNAL_WORKSPACE +DEFINES += QT_INTERNAL_CANVAS +INCLUDEPATH += . +DEPENDPATH = ../../include + +REQUIRES = full-config nocrosscompiler + +HEADERS = frame.h \ + categoryinterface.h \ + qthumbwheel.h \ + display.h \ + textdrawing/textedit.h \ + textdrawing/helpwindow.h \ + dnd/dnd.h \ + dnd/styledbutton.h \ + dnd/iconview.h \ + dnd/listview.h \ + i18n/i18n.h \ + i18n/wrapper.h \ + ../aclock/aclock.h +SOURCES = frame.cpp \ + qthumbwheel.cpp \ + display.cpp \ + textdrawing/textedit.cpp \ + textdrawing/helpwindow.cpp \ + dnd/dnd.cpp \ + dnd/styledbutton.cpp \ + dnd/iconview.cpp \ + dnd/listview.cpp \ + i18n/i18n.cpp \ + ../aclock/aclock.cpp \ + main.cpp + +FORMS = dnd/dndbase.ui + +include( ../../src/qt_professional.pri ) + +canvas { + HEADERS +=graph.h \ + qasteroids/toplevel.h \ + qasteroids/view.h \ + qasteroids/ledmeter.h + SOURCES +=graph.cpp \ + qasteroids/toplevel.cpp \ + qasteroids/view.cpp \ + qasteroids/ledmeter.cpp +} + +opengl { + HEADERS +=opengl/glworkspace.h \ + opengl/glcontrolwidget.h \ + opengl/gltexobj.h \ + opengl/glbox.h \ + opengl/glgear.h \ + opengl/gllandscape.h \ + opengl/fbm.h \ + opengl/glinfo.h \ + opengl/glinfotext.h + SOURCES +=opengl/glworkspace.cpp \ + opengl/glcontrolwidget.cpp \ + opengl/gltexobj.cpp \ + opengl/glbox.cpp \ + opengl/glgear.cpp \ + opengl/gllandscape.cpp \ + opengl/fbm.c + win32 { + SOURCES +=opengl/glinfo_win.cpp + } mac { + SOURCES +=opengl/glinfo_mac.cpp + LIBS +=-framework Carbon + } else:unix { + SOURCES +=opengl/glinfo_x11.cpp + } + + FORMS +=opengl/printpreview.ui \ + opengl/gllandscapeviewer.ui + + CONFIG -= dlopen_opengl +} + +sql { + FORMS +=sql/connect.ui \ + sql/sqlex.ui +} + +table { + FORMS +=widgets/widgetsbase.ui +} + +!table { + FORMS +=widgets/widgetsbase_pro.ui +} + +TRANSLATIONS = translations/demo_ar.ts \ + translations/demo_de.ts \ + translations/demo_fr.ts \ + translations/demo_he.ts + +PRECOMPILED_HEADER = demo_pch.h diff --git a/examples/demo/demo_pch.h b/examples/demo/demo_pch.h new file mode 100644 index 0000000..b80e646 --- /dev/null +++ b/examples/demo/demo_pch.h @@ -0,0 +1,13 @@ +/* + * This is a precompiled header file for use in Xcode / Mac GCC / + * GCC >= 3.4 / VC to greatly speed the building of the Demo example. + * It may also be of use to people developing their own project, but + * it is probably better to define your own header. Use of this + * header is currently UNSUPPORTED. + */ + +#if defined __cplusplus + +#include "../../src/kernel/qt_pch.h" + +#endif diff --git a/examples/demo/display.cpp b/examples/demo/display.cpp new file mode 100644 index 0000000..eceef05 --- /dev/null +++ b/examples/demo/display.cpp @@ -0,0 +1,230 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#include "display.h" + +#include <qpainter.h> +#include <qlayout.h> +#include <qtimer.h> +#include <qpushbutton.h> +#include <qframe.h> +#include <qdial.h> +#include <qlcdnumber.h> +#include <qprogressbar.h> +#include <qspinbox.h> + +#include <math.h> + +Screen::Screen( QWidget *parent, const char *name ) + : QFrame( parent, name ) +{ + setLineWidth( FrameWidth ); + setFrameStyle( Panel | Sunken ); + setBackgroundMode( PaletteBase ); + setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding ); + setPaletteBackgroundColor( black ); + setPaletteForegroundColor( blue ); + + yval = new int[width()]; + memset( yval, 0, sizeof(int)*width() ); + pos0 = 0; + t0 = 0; + step = 0; +} + +Screen::~Screen() +{ + delete yval; +} + +void Screen::resizeEvent( QResizeEvent *e ) +{ + delete yval; + int w = e->size().width(); + yval = new int[w]; + memset( yval, 0, sizeof(int)*w); +} + +void Screen::animate() +{ + if ( step == 0 ) + return; + + int t = t0; + int p = pos0; + if ( step < 0 ) { + t += width() + step; + } else { + t -= step; + p -= step; + if ( p < 0 ) + p += width(); + } + + for ( int i = 0; i < QABS( step ); i++ ) { + int y = (int)((height()-FrameWidth)/2 * sin( 3.1415*(double)t/180.0 )); + yval[ p ] = y; + ++t; + t %= 360; + ++p; + p %= width(); + } + t0 -= step; + if ( t0 < 0 ) + t0 += 360; + pos0 = (pos0 - step) % width(); + if ( pos0 < 0 ) + pos0 += width(); + + scroll( step, 0, QRect( FrameWidth, FrameWidth, width()-2*FrameWidth, height()-2*FrameWidth )); +} + +void Screen::setStep( int s ) +{ + step = s; +} + +void Screen::drawContents( QPainter *p ) +{ + QRect r = p->hasClipping() ? + p->clipRegion().boundingRect() : contentsRect(); + + int vp = ( r.left() - FrameWidth + pos0 ) % width(); + int y0 = FrameWidth + height()/2; + + for ( int x = r.left(); x <= r.right(); x++ ) { + p->drawLine( x, y0 + yval[ vp ], x, r.bottom()); + ++vp; + vp %= width(); + } +} + +/***********************************************************************/ + +Curve::Curve( QWidget *parent, const char *name ) + : QFrame( parent, name ) +{ + setLineWidth( FrameWidth ); + setFrameStyle( Panel | Sunken ); + setBackgroundMode( PaletteBase ); + setPaletteBackgroundColor(black); + setPaletteForegroundColor(red); + setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding ); + + shift = 0; + n = 1; +} + +void Curve::drawContents( QPainter *p ) +{ + p->moveTo( width()/2, height()/2 + (int)(90.0*sin( double(shift)*3.1415/180.0))); + + for ( double a = 0.0; a < 360.0; a += 1.0 ) { + double rad = 3.1415 / 180.0 * a; + double x = width()/2 + 90.0 * sin(rad); + double y = height()/2 + 90.0 * sin(n * rad + double(shift)*3.1415/180.0); + p->lineTo( int(x), int(y) ); + } +} + +void Curve::animate() +{ + shift = (shift + 1) % 360; + update( FrameWidth, FrameWidth, width() - 2*FrameWidth, height() - 2*FrameWidth ); +} + +void Curve::setFactor( int f ) +{ + n = f; +} + +/***********************************************************************/ + +DisplayWidget::DisplayWidget( QWidget *parent, const char *name ) + : QWidget( parent, name ) +{ + timer = 0; + + QVBoxLayout *vbox = new QVBoxLayout( this, 10 ); + + QHBoxLayout *hbox = new QHBoxLayout( vbox ); + screen = new Screen( this ); + dial = new QDial( this ); + dial->setNotchesVisible( TRUE ); + dial->setRange( -10, 10 ); + dial->setValue( 1 ); + screen->setStep( dial->value() ); + connect( dial, SIGNAL( valueChanged( int )), + screen, SLOT( setStep( int ))); + lcd = new QLCDNumber( 2, this ); + lcd->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred ); + lcdval = 0; + + hbox->addWidget( screen ); + + QVBoxLayout *vb2 = new QVBoxLayout( hbox ); + + curve = new Curve( this ); + spin = new QSpinBox( 1, 10, 1, this ); + connect( spin, SIGNAL( valueChanged( int )), curve, SLOT( setFactor( int ))); + spin->setValue( 2 ); + vb2->addWidget( curve ); + vb2->addWidget( spin ); + + QHBoxLayout *hbox2 = new QHBoxLayout( vb2 ); + + hbox2->addWidget( dial ); + hbox2->addWidget( lcd ); + + bar = new QProgressBar( 10, this ); + tbar = 0; + + vbox->addWidget( bar ); +} + +void DisplayWidget::run() +{ + if ( !timer ) { + timer = new QTimer( this ); + connect( timer, SIGNAL( timeout() ), SLOT( tick() ) ); + } + + timer->start( 5 ); +} + +void DisplayWidget::stop() +{ + timer->stop(); +} + +void DisplayWidget::tick() +{ + // sine + screen->animate(); + // Lissajous + curve->animate(); + // lcd display + lcd->display( ++lcdval % 100 ); + // progress bar + bar->setProgress( 5 + (int)(5*sin( 3.1415 * (double)tbar / 180.0 ))); + ++tbar; + tbar %= 360; +} + +void DisplayWidget::showEvent( QShowEvent * ) +{ + run(); + screen->repaint(); +} + +void DisplayWidget::hideEvent( QHideEvent * ) +{ + stop(); +} + diff --git a/examples/demo/display.h b/examples/demo/display.h new file mode 100644 index 0000000..761a327 --- /dev/null +++ b/examples/demo/display.h @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#ifndef DISPLAY_H +#define DISPLAY_H + +#ifndef QT_H +#include <qwidget.h> +#include <qframe.h> +#endif // QT_H + +class QTimer; +class QDial; +class QLCDNumber; +class QProgressBar; +class QSpinBox; +class Screen; +class Curve; + +class DisplayWidget : public QWidget { + Q_OBJECT +public: + DisplayWidget( QWidget *parent=0, const char *name=0 ); + + void run(); + void stop(); + +protected: + virtual void showEvent( QShowEvent * ); + virtual void hideEvent( QHideEvent * ); + +private slots: + void tick(); + +private: + Screen *screen; + QDial *dial; + Curve *curve; + QSpinBox *spin; + QLCDNumber *lcd; + int lcdval; + QProgressBar *bar; + int tbar; + QTimer *timer; +}; + +class Screen : public QFrame { + Q_OBJECT +public: + enum { FrameWidth = 3 }; + Screen( QWidget *parent=0, const char *name=0 ); + ~Screen(); + + void animate(); + +public slots: + void setStep( int s ); + +protected: + virtual void drawContents( QPainter * ); + virtual void resizeEvent( QResizeEvent * ); + +private: + int *yval; + int pos0; // buffer pointer for x == 0 + int t0; // time parameter at x == 0 + int step; +}; + +class Curve : public QFrame { + Q_OBJECT + enum { FrameWidth = 3 }; +public: + Curve( QWidget *parent=0, const char *name=0 ); + + void animate(); +public slots: + void setFactor( int ); + +protected: + virtual void drawContents( QPainter * ); + +private: + int shift, n; +}; + +#endif // PLOT_H diff --git a/examples/demo/dnd/dnd.cpp b/examples/demo/dnd/dnd.cpp new file mode 100644 index 0000000..eb3684d --- /dev/null +++ b/examples/demo/dnd/dnd.cpp @@ -0,0 +1,120 @@ +#include <qiconview.h> +#include <qdragobject.h> +#include <qlayout.h> +#include <qmultilineedit.h> + +#include "dnd.h" +#include "styledbutton.h" +#include "listview.h" +#include "iconview.h" + +DnDDemo::DnDDemo( QWidget* parent, const char* name ) + : DnDDemoBase( parent, name ) +{ + buttonPixmap1->setEditor( StyledButton::PixmapEditor ); + buttonPixmap2->setEditor( StyledButton::PixmapEditor ); + buttonPixmap3->setEditor( StyledButton::PixmapEditor ); + buttonPixmap4->setEditor( StyledButton::PixmapEditor ); + + multiLine1->setTextFormat( RichText ); + multiLine1->setText( "<p><b>Faust</b> - <i>Goethe</i></p>" + "Habe nun, ach! Philosophie,<br>" + "Juristerei und Medizin,<br>" + "Und leider auch Theologie<br>" + "Durchaus studiert, mit heißem Bemühn.<br>" + "Da steh ich nun, ich armer Tor!<br>" + "Und bin so klug als wie zuvor;<br>" + "Heiße Magister, heiße Doktor gar<br>" + "Und ziehe schon an die zehen Jahr<br>" + "Herauf, herab und quer und krumm<br>" + "Meine Schüler an der Nase herum-<br>" + "Und sehe, daß wir nichts wissen können!<br>" + "Das will mir schier das Herz verbrennen.<br>" + "Zwar bin ich gescheiter als all die Laffen,<br>" + "Doktoren, Magister, Schreiber und Pfaffen;<br>" + "Mich plagen keine Skrupel noch Zweifel,<br>" + "Fürchte mich weder vor Hölle noch Teufel-<br>" + "Dafür ist mir auch alle Freud entrissen,<br>" + "Bilde mir nicht ein, was Rechts zu wissen,<br>" + "Bilde mir nicht ein, ich könnte was lehren,<br>" + "Die Menschen zu bessern und zu bekehren.<br>" + "Auch hab ich weder Gut noch Geld,<br>" + "Noch Ehr und Herrlichkeit der Welt;<br>" + "Es möchte kein Hund so länger leben!<br>" + "Drum hab ich mich der Magie ergeben,<br>" + "Ob mir durch Geistes Kraft und Mund<br>" + "Nicht manch Geheimnis würde kund;<br>" + "Daß ich nicht mehr mit saurem Schweiß<br>" + "Zu sagen brauche, was ich nicht weiß;<br>" + "Daß ich erkenne, was die Welt<br>" + "Im Innersten zusammenhält,<br>" + "Schau alle Wirkenskraft und Samen,<br>" + "Und tu nicht mehr in Worten kramen. <br>" ); + + multiLine2->setTextFormat( RichText ); + multiLine2->setText( "<p><b>To Milton</b> - <i>Oscar Wilde</i></p>" + "Milton! I think thy spirit hath passed away<br>" + "From these white cliffs and high-embattled towers;<br>" + "This gorgeous fiery-coloured world of ours<br>" + "Seems fallen into ashes dull and grey,<br>" + "And the age changed unto a mimic play<br>" + "Wherein we waste our else too-crowded hours:<br>" + "For all our pomp and pageantry and powers<br>" + "We are but fit to delve the common clay,<br>" + "Seeing this little isle on which we stand,<br>" + "This England, this sea-lion of the sea,<br>" + "By ignorant demagogues is held in fee,<br>" + "Who love her not: Dear God! is this the land<br>" + "Which bare a triple empire in her hand<br>" + "When Cromwell spake the word Democracy!<br>" ); + + + items.insert( tr("copy"), IconItem( tr("Copy"), "editcopy.png" ) ); + items.insert( tr("cut"), IconItem( tr("Cut"), "editcut.png" )); + items.insert( tr("paste"), IconItem( tr("Paste"), "editpaste.png" )); + items.insert( tr("raise"), IconItem( tr("Raise"), "editraise.png" )); + items.insert( tr("lower"), IconItem( tr("Lower"), "editlower.png" )); + items.insert( tr("new"), IconItem( tr("New"), "filenew.png" )); + items.insert( tr("load"), IconItem( tr("Load"), "fileopen.png" )); + items.insert( tr("save"), IconItem( tr("Save"), "filesave.png" )); + items.insert( tr("undo"), IconItem( tr("Undo"), "undo.png" )); + items.insert( tr("redo"), IconItem( tr("Redo"), "redo.png" )); + items.insert( tr("delete"), IconItem( tr("Delete"), "editdelete.png" )); + items.insert( tr("help"), IconItem( tr("Help"), "help.png" )); + items.insert( tr("home"), IconItem( tr("Home"), "home.png" )); + + listView->addColumn( tr("Actions"), 240 ); + listView->setColumnWidthMode( 0, QListView::Maximum ); + + QMap<QString,IconItem>::Iterator it; + for( it = items.begin(); it != items.end(); ++it ) { + IconItem item = it.data(); + + QIconViewItem *iitem = new IconViewItem( iconView, item.name(), *item.pixmap(), it.key() ); + iitem->setRenameEnabled( TRUE ); + QListViewItem *litem = new ListViewItem( listView, item.name(), it.key() ); + litem->setPixmap( 0, *item.pixmap() ); + } +} + +DnDDemo::~DnDDemo() +{ + +} + +IconItem::IconItem( const QString& name, const QString& icon ) +{ + _name = name; + _pixmap = loadPixmap( icon ); +} + +QPixmap IconItem::loadPixmap( const QString& name ) +{ + QPixmap pix( "textdrawing/" + name ); + return pix; +} + +IconItem DnDDemo::findItem( const QString& tag ) +{ + return items[ tag ]; +} diff --git a/examples/demo/dnd/dnd.h b/examples/demo/dnd/dnd.h new file mode 100644 index 0000000..79d4526 --- /dev/null +++ b/examples/demo/dnd/dnd.h @@ -0,0 +1,40 @@ +#include <qpixmap.h> +#include <qmap.h> +#include "dndbase.h" + +#ifndef DNDDEMO_H +#define DNDDEMO_H + +class IconItem +{ +public: + IconItem( const QString& name = QString::null, const QString& icon = QString::null ); + + QString name() { return _name; } + QPixmap *pixmap() { return &_pixmap; } + + Q_DUMMY_COMPARISON_OPERATOR( IconItem ) + +protected: + QPixmap loadPixmap( const QString& name ); + +private: + QString _name; + QPixmap _pixmap; +}; + +class DnDDemo : public DnDDemoBase +{ + Q_OBJECT + +public: + DnDDemo( QWidget* parent = 0, const char* name = 0 ); + ~DnDDemo(); + + IconItem findItem( const QString& tag ); + +private: + QMap<QString,IconItem> items; +}; + +#endif diff --git a/examples/demo/dnd/dndbase.ui b/examples/demo/dnd/dndbase.ui new file mode 100644 index 0000000..3e01350 --- /dev/null +++ b/examples/demo/dnd/dndbase.ui @@ -0,0 +1,355 @@ +<!DOCTYPE UI><UI version="3.0" stdsetdef="1"> +<class>DnDDemoBase</class> +<widget class="QWidget"> + <property name="name"> + <cstring>DnDDemoBase</cstring> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>677</width> + <height>586</height> + </rect> + </property> + <property name="caption"> + <string>Form1</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>Layout5</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="StyledButton"> + <property name="name"> + <cstring>buttonColor1</cstring> + </property> + <property name="minimumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="color" stdset="0"> + <color> + <red>255</red> + <green>0</green> + <blue>0</blue> + </color> + </property> + </widget> + <widget class="StyledButton"> + <property name="name"> + <cstring>buttonColor2</cstring> + </property> + <property name="minimumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="color" stdset="0"> + <color> + <red>0</red> + <green>170</green> + <blue>0</blue> + </color> + </property> + </widget> + <widget class="StyledButton"> + <property name="name"> + <cstring>buttonColor3</cstring> + </property> + <property name="minimumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="color" stdset="0"> + <color> + <red>0</red> + <green>0</green> + <blue>255</blue> + </color> + </property> + </widget> + <widget class="StyledButton"> + <property name="name"> + <cstring>buttonColor4</cstring> + </property> + <property name="minimumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="color" stdset="0"> + <color> + <red>255</red> + <green>255</green> + <blue>0</blue> + </color> + </property> + </widget> + <widget class="StyledButton"> + <property name="name"> + <cstring>buttonPixmap1</cstring> + </property> + <property name="minimumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="pixmap" stdset="0"> + <pixmap>image0</pixmap> + </property> + </widget> + <widget class="StyledButton"> + <property name="name"> + <cstring>buttonPixmap2</cstring> + </property> + <property name="minimumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="pixmap" stdset="0"> + <pixmap>image1</pixmap> + </property> + </widget> + <widget class="StyledButton"> + <property name="name"> + <cstring>buttonPixmap3</cstring> + </property> + <property name="minimumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="pixmap" stdset="0"> + <pixmap>image2</pixmap> + </property> + </widget> + <widget class="StyledButton"> + <property name="name"> + <cstring>buttonPixmap4</cstring> + </property> + <property name="minimumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>40</width> + <height>40</height> + </size> + </property> + <property name="pixmap" stdset="0"> + <pixmap>image3</pixmap> + </property> + </widget> + <spacer> + <property name="name"> + <cstring>Spacer1</cstring> + </property> + <property name="orientation"> + <enum>Horizontal</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </hbox> + </widget> + <widget class="ListView" row="0" column="1"> + <property name="name"> + <cstring>listView</cstring> + </property> + </widget> + <widget class="IconView" row="0" column="0"> + <property name="name"> + <cstring>iconView</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>7</vsizetype> + <horstretch>0</horstretch> + <verstretch>1</verstretch> + </sizepolicy> + </property> + </widget> + <widget class="QTextEdit" row="1" column="0"> + <property name="name"> + <cstring>multiLine1</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>7</vsizetype> + <horstretch>0</horstretch> + <verstretch>2</verstretch> + </sizepolicy> + </property> + </widget> + <widget class="QTextEdit" row="1" column="1"> + <property name="name"> + <cstring>multiLine2</cstring> + </property> + </widget> + </grid> +</widget> +<customwidgets> + <customwidget> + <class>StyledButton</class> + <header location="local">styledbutton.h</header> + <sizehint> + <width>40</width> + <height>25</height> + </sizehint> + <container>0</container> + <sizepolicy> + <hordata>5</hordata> + <verdata>5</verdata> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + <pixmap>image4</pixmap> + <signal>clicked()</signal> + <signal>changed()</signal> + <property type="Color">color</property> + <property type="Pixmap">pixmap</property> + <property type="Bool">scale</property> + </customwidget> + <customwidget> + <class>IconView</class> + <header location="local">iconview.h</header> + <sizehint> + <width>-1</width> + <height>-1</height> + </sizehint> + <container>0</container> + <sizepolicy> + <hordata>7</hordata> + <verdata>7</verdata> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + <pixmap>image5</pixmap> + </customwidget> + <customwidget> + <class>ListView</class> + <header location="local">listview.h</header> + <sizehint> + <width>-1</width> + <height>-1</height> + </sizehint> + <container>0</container> + <sizepolicy> + <hordata>7</hordata> + <verdata>7</verdata> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + <pixmap>image5</pixmap> + </customwidget> +</customwidgets> +<images> + <image name="image0"> + <data format="XPM.GZ" length="72495">789cecbd49732339b6a8b97fbfa2ec6277adcd1f4989d3a217a4268a1225512229896dbd80033ecf13a7f7e71bf0730e24454466466456559659df92b1949fdc89f18c00dce37ffff73fde9e16fff8effffdbfaa9ad781f887f079f98fff964d921cff9ffff7fffe3fffebbfba83ce3fbabdf13fbae3eee01fbdfffabffed77f59f63fc43f1eb2d469817d8265fdf90a57c03aedff34476786479ae30171b7bd9ede1b6eaf7b11f2397c5f370e19bebf2086ef270fc823b8bfa0fb4778dd4516707dff0cdcc3f20ef8fd9ee88ddbf69eb73ca2f6c74f86dbfb0b498ced0f0db7d7a347646c7ffc6018da7f24c6f69d1986eb7de25e7bdd65c8d8bfe8c2707b7fde2586f2e2a5e1f6bab347c6fee7aee1f67ac389e1fb3e7ebf8bfd9f08646c6f798f3c82f61503642cafde11c3fdc777c3edf5e310b887e3777c2586f2f6d8bf1ef6fff8868cfd396e8861be2abcee0c642b7f8701b13368af47c81cb81c1a6eefafee34778d7c156b621ccf33641aff4bc3d0df8818eecf1686613e63641cffc036dc5ecf36c4f07d6b0f4ce39f7886dbfb937362b8bfd911c378c536f159b7bdff1119e571fa6a18ca1b20637f1afa3ef6e7f8440ce51f12c330fed8fe2ef6af792786efd78d6198bf2d319457af0cb7e525381f3decff2e35dc7e7f1f1143f9076618caef10a33c2586dbf24fe7c4303ed5abe1f67a43f5e3fceffb86c15ed8c4505e732286f2f6541e8e5715186eefdf5d10c3fd271719c7e3f0488cd71de033d4873d8ef7199677b82286fb0f63e0f3d1396fdb87e50f64bf35e3fb0c58f664bf6d0fde2f515f9a033217b2659c2fe9c0f5fd10d8a1ef2f89f1fb0bc3ad7eed0432e9e31419f5f140e571b7e51dea97e340f9d58418ca2b1f88e1feb2047607aedbea576b0fbbc6de796fc0469ffac430bfbb29318c6f2388613c778fc8a83f3234dccac3f48c18e5bd360cfa352786f27799e176fed22132eadf91ea2379b92186f6144bc3a02f97c8d85f3937dc9657dd1343fbbc3bc3edf513b517f5afcc89a1be10c783f4316286c15ec4c4d8ff67c3601f5f88511f8ec4209f01dd8fe35b2e89717eee0d437ba93d389e8d67b86dffd122c6f9cb89a1beba44c6f13e507968ef4e9218e7ab6718ec878d4cf6ad2046fdb50cc3fd3362d44f4e0ced39a23c9ee1f8ed1d622cef60b82dafc0f93dc3f12876c4e82fcf91b13d7bd0efd17907f47f87f37f8ee355d6c4e760bf70be06dd417b7ff9842c076d7b0be4617768b7e38fe335ea8f5ade6d91c7a3b3f6fbd8bff1782cdafee07cf22e3f6fc70ffb47f6a6de1083feef57865bfd6f707ca403f7ef3ac478ff9a18eccbb1300cf608dbabec57cbb520c6f8a0320cf104eaab33407b9812a37d1a1a6eef3f96c4609fea0532f6a7b689a1fce29c18eeaf501fc8fe351bc310afbc13437b77b7c02ef6e770438cf636360cf6f39118ede70099ec67fbfd9e89378e0fc418cf1c90515fbdade1f67a7a490cf2eccc9051dffc9c18e32561b8bd5e9e88417e4f8161b0773e32da3b471a867897da87fa79280dc3f52931966fca437dad88c1beca3b60b27f9c196ecbe32e31da8327c350df2d31c63bb161f0df97c418af5d20e378ba39318ee79a18caf31d62f8be6f21e378365d62b40f03648ad7e97e1cafddd130e4174362b4dfd85eb257656018ec91478cf69311a3ffc2fac85e15383f67d8dea2838cf5ef1262ac7f4c0cf393239fe378ee0b628ceff6c868efaa1531b6e71e19e56b3f41467b5de3f7fb7db0d7bb11f278d8dab7438a2cfbedf5430f78d085eb0df6673046ff734f0cf67587f333c0efef6f88e1fa31041e76e17a9d12c3f506c767d8c7fa17c8687f1bac6f28c13ed71c78dc85ebfb2be2716b8f4f383fe33edaef05315c2f717cc7585e352086ebc51930efc2f5e6480cd76b945f7b60b75c61fb8523c0dea1bd91685f8b3e32daffdd1331da77943f89df3fdc11a33f480d83fd3c11a3fdc4fe3b3db0ef873e31fa872331deff8c8cf67e5710637bd09e38e8cff65d62b4e723c3608fd17e9a78776918daeb1063f9c864efcb1931dafb9161f87e834cf1fdd8307c1fe5d3c5f13cc1fde30ee5f7a0ff63b2e7876764b4e7d39a18f4270c8951ffd6c868af0f4f86dbefdb8c18ed89430cf547b786215e06fb32267bec2586c1bf4862b4c74b6228cfe921a3ff8aba8661fdc92686efb327c3edf5e09618caf33a86c11e45c8b85ee09e196ebf2f4ec4507e101b067bff4e8cfd9f1383bd9b5e22e378a62bc3edf7e59118cacf33c3e0afb6c4385fd45eb47725b6f70cc7b7792346ff6c18f3931762f8fea440a6f5032c8fe2cb23ce771fe3ffe611b90ff165798d3cc6fb717c065d885f9b9561889fef89c11ed638be833edc5ff791c7683fb1be81447b1e11c3f7f7a0bfe321d6b72b89d15ecf90b1fc9d6318cadb23a37dafa561b88eed19623cbdcf89219e2e20fe188fba70fd88fa3392688f713cc67d8cbf5f91c7606f8f1e31d8db03caeb18bfbfb30cc3fd789da33fa8b6c4f87db0276389f66687fa21311edee37c197b8cf240eb03c79c18f3fdb961b04f682f1cb44747818cf6f1b02586ef17a81f641feb0131c6ef389f640f8fd2707bffa9bd7ed635f1656818e23f0f19f521d903937d299e8971bde9400cf767efc8685fc4a56188b72a628ce732c350de9118ca9b9af2305f6e90d19e78d41ed437ef6418aedf13437ff985e1b6bf5e8a4cf643124379d1da30c493d7c4509e381a86f573ec1fd90fc10d43f98218ed7dcf30e417e6fb685fcf0c83bd31d7617cbc73641cefeccd30ac7f3c10637f5e0c833d4b9069ff60448cf3332686f6843131c68701328ecf01e5cbe4d3283f7d6cefb18b4cf19a0f3c403ea2bc9878f19518ecc1a140267b85f34bf161332486fb4f0c19ef2fdf0d437d3531e8fb71093ceac3fd071cdf11daa73dca3bc58fcd1532c6870dcaf398f27fec2fd99f1aaf73bcbfb830dcae0f542e3287ebfb0eb283f6ea0ed8e6bcbdff88f22fb80df15b0e4cf6aac4f954f60ae2c319327d7f420cf7efe97eb26738ff141f1e5d62b06f8733c360afae8971bd14f5d1ac1fac89f1fe0d32c68b454d8cf1eb9118caab519e295e2c2e0d4379543ec58b33c3701de7dfc48ba8ef141f168fc4b01e706afddfd998ece104e6cfc447bb0131eac71a99d6d362c3ad7e84b7c8686ffc1331da03cf30c4970b62cc7713c3ad3d08ce88213e0a40dfc6646fa22762289f9f1986f62c89313eec12437ff31e32da13fb8118f7cbce0c43beef11a37d9c196edbe798fba17c5722a33dcfd6c4b81fb4310cf123b597e243410ce589ca705b9f4bedc7f10e57c450be3c370cebabb7c4e81f16c450be33370cf1e33531d8bb2436dcda971ce7f79ce2f1b961f08767c4b89e3b350cf5778931fe8d88a1be5d888cf3d30c8831fe047f39a67c7d8ff5517c78c4f121fb5a6079948f1fc05f7cc47b381f2a5e83fc1ff453c56bc0c71d32e6cfc71331d8b73db68fd6471b94d79184f5d002eca989ef8a8618cb1b2163bc57e27c513cb7bf24c6f556f01f63ce71bd15fcc358f4c0fe5535b203f6f3981283bdac507f68bfa8ba40467b56dc21a3fd3a56c4686fb0ffb45e7b5c11a3bd02fb3e36f977408cf675828ceb01e58d6188470fc858ff6e4e8cf6b3478cf6d006a6fc79ef11637edfc60fe7265edbbf23a33ed63931aeaf07c8a84fc11a98ec8fbd23c6f5ce33c3ed751613e37ecb8561d0af0299f6a7bbc4509e3b370cf672420ced930e32adbf8e88e1fbe2c130d8972b62d03fee11437bf89418f4cfa7f6a17d613362b42f13c3705d10633cfa68b82d9fbd13e378507d685fc23ef039c5938fc4509ffd6a18aee7c4509f7d65b8ad4ff8c4683f6bc3d0df0e31f6d735dcda07af41a6f31d73628cc76f0c433c5e11e3fcf488b1be1331d457ec9169bde0cd30d4372186f226f786dbf27c8f18fac77dc3605fa97e9ccf8498e27dea1fed4773e03eedafdf21f7a17d05b68fe2cbc30ad8467bb34779b31db04fc51658e07ae001bf4ff6e7780d4cfb4115ea13adf7ed70be8dbd0891319ed92f90291ec2f930eb63203f9cf4c37926c6f3373131cac71b328e4f392146f93a23c6f14c88c19f2420df9ce455ae0c43bce213633cf26818d6bffac4b8de3f330cf1cf8018e4b3b84646f98c4a62d4ff0f6eaf5b67c4284f1131d497ae0d837dea11837fcc71fcce713c63ea0fcaafb40c837da4f6533c73340cfa79438ce37f6d18f4a54b0ce3cd1f0cb7fde77362689fe320a37dca2e0d837da4fed0f9146618f489fa83fa20f686e17a400ced71ee0cc3fa56064cfae35ac458dec130eccf9e23f7511e3ac4b83e90238f71ff1bfc07a7f5f83d966f0f30dfc1f60af4df9540e6a07f47d06f2e7b180f80fde5e6bc07ea83d9ff7c4146ff2a5af9e9f7c89e57736092f7ca320ceb9d3e318ec72331c6df0e329dafe81806799d11c3f7f395e1b6fe78488cf66f420cf3e156c8289fdc310cf24bed45f9b407c4385f8d61d89fdc10a3fc2d8841fee21d329db7bb310ce341f7a3fc859961f08fe6fb50bfdd18067d31d751fece0db7ed89af89a13d01f6bf8ff3236e0d83ffec12e37a8c300ce3bb25c6f6bc1b06fd0c88a13d2c310ceb5938dffd3eda278b18f5d3370cfa49ede943fd16b517f5c1fd60c8b7a87d7da85f98faa0fef40e790ce55754df18fa9bd4c4b81e78320ce7bf726489fef99c18ca3fa13e0cf0fbf90898d6938f38bfbc0ff1f911c747603c5c86c8a89f27985fdea17c1ce48dd3fe4008e36dfc5175054cfae68c9051def337c330fe2131cadf8418ca8f36c4d0fe5c22d3fe3add4ff15d4a0cedb54e86617ecc75981febd1703b7e59044cf2e9bf1a8678ca2246fbf16218f2df9218ea974fc4503e5b12833ef853c350ff0119e5915f1a0679bc2246fb9c1b86f1728871bd726a18da1710437b12418ced490d83bef48921becae6c863685f38340cf9beb98eeb27f47d945f4ee387fb2dbc67b82d3fa2fe8cd15e2486dbeb536a1fee77a40532ea4345e32fd1bf3f1b86f90f89617c820b62dc1f02fbc8075d94d723319e8f8a89511fb1bf43ba8ef239423ee27cd1fec811ef57f127ec67b8c8b89e786adb3be875317eab66c024df090326f90cf7c4d8df9418fbe713c3788647649aaf3762f8be250d83bd7d25467beb1986787e420ce5db9561b0ff77c8383feec8309cdfa989b1fd7dc3107f52fd385ffedc30f83faa1fe72f2a88a13d966318da83d7693ead0f86fa46c4505ffc460ce5cb3362ecef8de1f6bae313837c4aecdf00f5371a13e37a9d6db8ad7f322746fbbd310cfda5fad0bfc49218dac313c3d05e460ced89a83de47fa8ff38df1947c6f12fb03fb603fea00880291e9bb6f663c069fffd3400ee613e99c3fc7cd8877b649cfffd23319edfa98931bfc888b1fdd7c0347f766a18e4b52646ffb123467b6713c378a5a63c28df7a350cf6fa8618d6db7c6c3fcd6741d7713ea337c3108fe6c498cf9c0cc379af17628c0f2362983ff1440cede307c3d03eea4f1fdae7ad9071bc3d9f18f3ffc030cc378d0fea77260d833ecc88713dc4350cf2de27467db8360cfd2988a1fde19961d0571aef31ac3fba5b649487921986fc84da87f6c0a3f946fd670d31d63f2086fad99b61b8ff9918eacf41fe8d3dafce0c43fc372686f1897bc4303ed10d318e87290fdbf3448cfbf13132ca4b3d21c6f825370cfa2f89d15f5d20e37c057362dc9fc3f91b61fb26adbf1e9e75315f983c21633c341901f730df9edac8b4be9f00933d9e56c0a47f518c8ced4f5262187f77824cf1c18361f0cf4362fcfe9118e3812b6294a7d470db1f7f8d8cf6455e1263bc746318e4fb8218c7db5cc7f8272046fbd033dc5eb7a83fb83eefe3780dbb985fed89a17ef66018f227468cfbbb33c3d0be9218e52b2186f6d97d62685f706718dae71143fb2cdf702befc91531acf7e70219ed5b901363fb1f0dc3f9852d31da8f176294ff37621cbf0f86f64d89a17dcc7c1ff72332648c37a3c630f813ea2fca9343e383fab07b27c6f13b11e3faccca30cc774a8ced0d0d43fee610437be36764b43ffc9e18da3f417d18e1fc368c18d76776c8a4ff1e31b47f02edb7e9f99049888cfa383903a6e78926207f36ad9f7b0360d2b77c4d8cfa6518fa1fbe13a33c4d91517f82d230e8eb3d31ea4f420cfd0b3d62f4df9218c6273c2786fda402e6c726fdb11362dc9fbb20c6f8ac6318d6c3cc758c7f2a62eccfbb61f05fe67ed40fd730f8830019f5c1ee11c378a49561b07f36318ec73d31aecfbe12e3783f1163bc78320cfa1113a37de9186edb677589417fd30332ea874bfdc3f98fae0c433e46ed4579109961e80ff517f5a7ee1a86f322e7c4187fde11a3bf35e5617f2262d4f74bc36d7fd21b62e80f9b2093fd7e300cf6d35c47fb796318e21b8f18dac768fcc99e5f1a86f6917ca03d6743c36dfb1823c6f146fd1aa17c260b62f4976fc4305efe2d318ecfca30c8c38c18ea2f713c47283f279ccf11cedf84eac3f998b4df57c138e67b933532c6e3a70259e0799d2930c577d31819c7377e21c6f3455b60f26799438cfb670fc4b85e83f5197f2289317e5f10637ccc0cc3fc0d8831febc2186f6c786d19f5d13c3fcc80819e5ffe0196ecbb72f89f1fc706618e4eb8e18f3877b623cef191a86f86e460cfd17b161f0d73531da9bc030c8574a8cf25f1906fd7846267d5818867ce295189fffba300cf6fa488ce369cac3f61b467da0f9267d181b86f65e11637b2dc3609fb03e5a0f111786c1fe34c4b8bee01b86f65e13637b5f88517f3686a1bd0b621c5f531fb677448cfa4bf7933c6e0d43bc3f20c6f8e69518da630b62688fed188678202486f68489e1b63db64d8ce7d7a83c94d76c6518e219c3783ee6c530d81baa0fe52fe186617f74878cf2b2a3eb282ffbd230e4af3d62b4ff389e639caf13cecf18eb3fb5f1eec826fb739a00d37ae304c6d3a6f51517f4d7d87bab63b81d9f2c24c6f37b0932b6f7d427c6fd068718f3bb3531facb6b62acefc1707bdd7f0226f964e7c4289f27c3601fdf89617c824b62acbf204679bc32dcd6c78fc4a83fb56190574e0cfd17387e465e5f0cc3fc537b515e036e18da9b10c378d92531ae0f52ff507e45488cfa9f1b06f97589b1fdd78621bec3f920798e578621be9810637b43c330fe7d628cdf0fc4984f2e0d43bc47fd41fbea9f1b86f18e89a1bd0e43467b1a978621def488319e1b1a86fc8cda8ff1447a6618eca9b91fe35d9cdf31dac3746318fcd12331da6f733fcedf3d31aeff45c8688ff6b7c8387e93d67f8cf58107d0c70498d6db4fefc0032cef80f793ff2b5d648ab786c0a40fbb07625c4f9b12c3f8467bc36dff9d8018f78bdf90519ecb4bc3e0ff6d62a88f2d0cc3785179d4ff1931b427ab89d1fe3e1a06fd2a89a1bdf6b96168ef0999f2cb57c3303e17c4381ee67e688f2c8861fcbd3531b4874786dbfa04f507e5b360c8b89ee15e13633ee61806ffef12e3fad8d130c8eb3b31ee7fcd8971fe2431ead39218da2b22c3d05e1a2f8a877b86215eb9051e633e2712626cbf6718fcfd2531ee9f71c3d0bf8618d7fba6c4b8de200d43fb9f89a1fdd313319e0fdf2293bcd175f2f79561f087d7c4307ecd9218ea2fa8bf282fe59e18f78bfac4707f49fdc1f99ac07c09a3af50bee875603c4f77c8e7303f53e8afa0f5e41ce45b90bed48961b007afc4988f46c828cfc99618ee2f5264da0f7089717fa26318c6ef8618da9f35c430de197e9fe69f6f0c43febe25c6f29786a1fe1531ee2f84c8683ffca16188df9e88511f3686a1bc17628c6f6e9171fec28361b0bf17c4688ff686a1fd77c4e8af1e88713f6f410ce3336d88e17cda84ee477d0f4ec4a82f1bc3b0de3b2246fda0f6937ea786a17eb02782d3faca9218c78713e37a701bef7363dfa69c18c7eb0e98e6a3982063beb717c4a80faf86dbf6ee77c4b8fe30350cf25a1263f91132ae6f444b621c9fa16190c78018e76b6bb8bd7ed813e3789d1b8678f59618f4cda3fa70fcf91b31b6df330cf2901143f9596a18cecb15c0341ffe2331c6231bc3601f05319e2fba350cf18af93edaa773627c9e312286fee40b645acf8a0d43791931ea636218fcef9818ed896318ecf30531d4ef1e8951fecd75907fff80ccd13eec89d1fe527f39ae9fae901db4af35b03d007d9ba03c8a1eca13dc2fba683f273d62f067a71c7984fc868ce7974e307f421fc06a790e4cfe720afd37f6aaea23e378ed16c8288f61438ceb430219f5bd090d83fd9911a3be3a86c1bf7789515f407e04c953ea1a86f17a21c6e771a78621de5b10e3fa508718ce0fed0264941f37330cf6e88218dbdb370cfa1113e3f31513628c479e90491ed686c17e537b39ae679bfbb1fc9018fd05d5cfa1fc88fae7e0f9da2b62f427dc30e8c32d31c627f78621ff328ce7cf0686413eb6c420ef49056cf7f07c47d730cce71531e603e63a9687fdb30750fffe1c19fbbf5f223b28cfadbfb0cfbb237cffc21098e28b69014cf1c9a48f4cf1c98918e5950193fc38966118ff1532cdff0331ee5f4e90717efdca70fbfd3027c6fd934bc350fe9e18edcfce303cffdc10e37ae41332ceaf37340cf1534a8cf9fedc30ccef1d31d4e75d19067b7e04a6f90c4bc3a00f37c428af33c3e0cfc7c4507e69cac3f93e2786f9996686c19e1f9007283f8218edf78b61f0272e318e5f6918fac39149df1e88b1fd8161b8ee10637ce013e37a698f189f4fa7fa71bcf75362b85fa0bc92fd6ef0fb02fbd33c1906fbdeea972d957d077b7d20467b3d461e014f9686413f1e89c1be9d40de650ffdc10ee445927c1f1c641a0fba8efd0f0a64ec5f3d22c6fcfd9c18f773415f24c9433e20c6fbbb86211e7927c6f59b4b62e87fec210f303e5a18067b7620c6f379e7c428df33c3205f3e31cadf35319cf79ef688e1bc50f0848cfa9d9f19067fb62746fb501a86f30773623c4f7b4f8cf6e9ce30b48fbe8ffa1d6e0d833fcb8971bfc1370cf1e29018eb730cc3f9c72331fa8f2931da171c2fd1c37c7d478cebb99661187f468ceb5ff786617c32628c1f4df9381fb7c838bfe50b31ee67a486417fa87e9cbf499b1f8b7eb783fee0887c0ef9f2e9017904f37bca9005e8cb8413e3f79f0cb7f747efc0647fd8bd61881f43628c2f568661fdb14f8ce73f6a6494a7e2408cf130370cf62027c6f21f0c83ffba24c6f5bb3764f2ff47c3e08f18318eaf6d18fa3324c678c35c47f9e911e379df09b0921788cf1e0cc3f3b92362941f6618ec77438cebe9a961f0377d62688ffb6a18ce3b18467dbe330cfee68618f4393f471ee0f9cd8018fdcd9118d74fae0d837e517b70be536e18e271533e3edf3345e6f8fc9d478cefeb3a2346fb5211a3ffce0c43fc4de5a33c941b627c5ee2848cf31f3f1a067dbd24c678796c18f415db2b713e26303eb283fa34a991497f603e6517e3afc90e19fd4f03fa69ecd7e49118cf831d88d15ef50c837c41ff3feccfbd6190d73b62b43f9661f03f3131da1f733f9eb77589d15f3f1b06f9792146f999230ff07dd20d319eb77e350cf23526c6f38b33c3206fe6fbe83f62c3104f2d8971ff501a86f14988f1fcc2ce30ec2799fa315f9d12c3f38039ce27c9679a12e3f324e786a1bf1e31eedf3c1b06fb42fd47f9cdf686e13a27c67c696718faf3408cf6c5948feda7f1e0d0fe2c477670fcf78661fd89ca437d702ac330be2b62cc874686a1bd1b621cff816188ffae89f17dc1389e12e5b5c80d437d1131cae70331da13ba9ffca1458cfa6a1b86fdca0e328ee7e90ad8c1f24e6dbe29fb9d73f06f936bc3b05ed741a6f58217628c275f81957e83febf18067ddf1363f916f2397e7f418cfef51eb8d781faa71e30e97fba0326fd4af7c4389eafc478ff2332ca676618fd5f4d8ce7ef7786c1fe84c4681fb686c13e78c4287f6fc4f0bc51364646f9cba686dbf62423626cffcc30c4736b623c0fd61806ff77458cf6511083bc55dc30e8cb05b044ffbbf389713c5e0c833f0888d17e9aebe8efae8851fe6dc3505f97189fbf690cc379936764b28f966198af2531faabc030ec9f46c4387f6f86217ed811e3fe5f6318ce3b527fc8ff768871bdc2320cfac98831be36f7a3bc14c4f87cfbc630d8db1c19e77f42edc5f9aeaf8971bc778661bd83eac7f9dea1fc39389ffb9018ed434a8cf9996b18ecc32531be1f0ec7d3c1f1afaf88d13f27c458de9818d7634b641c9ffa8d18f72f9f8871fd12daef74c83edc209f437c30e9228fc01e9c36c8188f4fae0c83bd82f975c8be4c0ec4505e04faeb907e4f13628cc72e90c95f5c1a86f16d8831be2888717d12cb9314ef5a86c15e65c418cfed0c83be8d88d1dfcf0dc3f56b628cef0e86e1bc67490cfd49c6c8a45f578641bf9e8871fd746918f265498ceb2b378641bf6a623c2f641986fced1e19f52b7921c6e7bb1686617fe09d18db3337dcd61799f2503f668661fdca23c6fde9b561d82fa5f1c2f9f670feb484b5dfa7f1c1f90f2dc3f03ce61b31c60bb661d88feb13e3798ab561d84fe7c4682f7dc3b01e1503abe2e179ec15313e2ff96218f6b72e88519e9861b08f67c498cf5586613c03627c7ffa8218f7f33ac8283fe5da303c1f342646fb7c6b18d6cba83c9497aa4b8cfb3538fe0ece77e313c3fdf59418f3a79418da573e23e37c34d43ff47f93767dc31974687f79854cf1ce1419d7cbf26b60a31f0531da539f18f70b2dc3b05eb62446ff468cf21d0d88d1bf740c437e151243f9856d18ecbf61ccf71f89e1fd3bf91d32ca73d210e3f3d413c3f0fcd49e18f7371e0c437cdb25c6fd3f6918e28f2931aea78586e17c509f18f5edc5308c0fce07c9bbbb21c6f75bd886e17dabe67e3c6f39370cedf189313fbe370cf6ea9d189fcf1d1986f59857625c2f981986f38e37c8187f7a3b62d4cf67c3701e644c8ccf97740c837ef688319e38370cf6e48e18d75bb786613df596189f071d1986fcb44b0cef930850be1db4bf32330ce37f20c6f68686411f1d62b46fc230d8379a0f944f3b370cfba59218db6beac7f39cd41f94cf784d8cfa1d1886f893c613e593bf1a067da98871bdfedd309c0fc3f171517eea4b623c7fd923c67805aeeb7805e20d9718d60f273e32e64f5368aff157598c8cfd8b226294e7d430d84b8f18e3db816190e78218c77b4f8cf2fb4c8ccfb39aeb200f2eb69ff44fee89519ec786e1fa8618dbfb6218fcafb91ff3e5816188273262686f75300cf13123c6e797ae0c83bc778931dfba2786fe841532eaa74de5a37eda9161b0273362dc7fad0d437c7724c6f5dd9361e88f20c6f5476e18e231ea3feae7e98618db6fda07ed9fee0cb7f6dccb91317eb2a7c4383f43c3d09f3e31f6676918eca3b91fede3c830c813b51ff5975f1986f9318cf2756b18e667828cfe47a6c4686fde0d83fd247941f9b73b86617c9f88d1ff5886217ea1f923f927f944f967b786a1fd28ef2ef99b8618df2f66aea3bc8f89f1f9a23bc3b03f7b4d8cf28cf3eb92fc3c11e379a3d6feb903b217d31258e2fecad40736fab422c678c3350cf92831ca7734340cfd7388717c63c330be1531941f750c433c63cac778e38918e5f5ca30fcfb2b3d6494574f12e3fc3f1806792d88d1df1c0d837fec12a37dbf360cf9d02b31ae7fac0cc3fa3ff507e535991a86eb541fc9eb9618f52b370ced1d10637b7dc3200f636294d7c2308c77498ce72702c3b0df49e34bf6dbb40fc6d7c1eb24bfcc25c6f7ebcf0d43fe7020c6f5e56bc330bee63ab6776318d69fde89f1fd47916178be5b1263bcd127c6f3a8a63cfcf717ce91d13ecb9818e523310cf27b498cfbbb07c3d0fe3b62dc9fce0c833da3fad11eefd6c498efe3fcba28af714a8cf95fc730ac6f6f8971ff756418f61f6f89319e8b0c833e4d89d1bed2f8d2fe8c4076717da8cdef5c97e28908fae792fec423628c8fce0cc37a848d8cf2ec4786e1f9e21d31cac7c230c457b7c4187f9486e1ba613c5ff1064cf22977c4f8feefa561888fbbc4987fac0d43fc6beec7f54f6e18e63726c6f3039786e179a91762dccf1e19067935f5c1bfdf94e4c8289ffe8218df1fdc1886f6bbc4180f750c837c7ac4b87f591b067b3121c6f3993bc3b07ef24e8cfb077362dccfdd1a867c8bea47790ec7c4d8feca30d887676294e72bc3e0bf687c509ee59b61989f9218e31f6118da43f34bf10223c6e75b503e9584833d7388515e9f0d437b69fc5c9497a961b057341e2efa336e18fc658f18cf2faf0c437b4fc438dee6fb202fcbda62eac3f1f7ff7c3e7d2c6e7e7ef39e760e6d3d82fa47fdb6ffe7f3fd0747f137aea31cfee158fffffcc3718c7e5b0e8dbcfeddf3fd9ffad132f8dbb2f83f72f87372f849ca7e2c87f60fe45058d2722cd7f22c5ffd04566845566c25566a6556fe77cbc5bfe15358a55559b5d5583b6bfffb7afa8d1c9a71b60ed6d13a5913357a53ebc2bab4aed4185e5b37d6ccbab5e6d69d75ffb7cbc6bfeab3b01eac47eba91dc1a5f56cbdfc916ffe2a879ff47d65adad8df56abda9517c57e56ead8ed5b57ad699756ef5ad8135b446d6f83f405efea91f6631c638b399609239cc651ef359f047fee2b7e490852c62314b58ca3296b38295ac62356bd88eedd9811dd9894dd8945dfc07c8cd3fe9c32e55ffaed8b51ac51b3663b76cceeed83d5b28a9f92939fc348aedd85a9c3db047f6c496ec99bdb0155bb38dfa79656fec9d6d598775594fcdd0193b677d36f8fbe5e72fcb5fcd866cc4c6ac56162b52c380b135e7acc7edef74f4c772f85d3cce0597dce12ef7b8cf031ef288e53ce6094f79c6735ef09257accb6b450ddff1fddf2f477ffec30f6afc6a36e6477ee2133ee517fc925ff18a5fabfe5dfdbe4ffea11ca2cef31b3ee3b7aab439bfe3f7ed9c2cf8037f648ffc8975f8923fab917c519f951ac935dff057fef6f7cbd3af7ff8bbb5e15bde51a3d7e1dd560a7bfc4c3fc7c807aa8f433efa81aff80d395c7e132332978f6d25e47c6173dbb6857ebac07679cff66cdf0eec508d5c9fe776c48e76cc023bb1533bb3f3bf5fa67ee5631716b74beeda9515d9ae75a13e0bbbb61b7b67eff9c03ea8cfd13efd42befc8d6fb627f6d4beb02fed2bfbda0a6d97bdf250d57063cfec5b6b6dcf7963dfd9f75c2899ecb39ebd50ad79b01fed277bf9f7cbd6cf7cec67fbc55ed96b7b63bf2a0b75549187fa61b9fd66bfdb5bbba3fa35e3cf76f76772b84f72c83eeb3df394cd5bda3dfb4c79fa11bbb4cfad0b1edb7d7b600fed91f22a813dd6f70a8b75ec8d68bf2bb8b08510f2ef96af1f7cbeb5675c38ccb39e852b3ce1abdc612b02118a487d62bb1189d2e181487929b23fb2855fe570f9c5268a5c14d65a94ec4954a2168d2a7927f6e2208ee2f44962b992cb93987ce20731b5376cfb77cbd997cfd79863262e3eda2b2ec595b8e681d8a9cfde7e173762266eed9198b37b71f7c7b6f0b7e450ebbe68fd88588807f1a8a2ec2dcbad058fac4bf12496e259bc288f35132b15251ec5faf398b6e3b8101bf1fab7cbdeb77dd2fd7913efcc135bd151ffdf553f3d71a6ec93abe4ef9c1fc5b9d2e71b51ea2761c4500538bb3ff6c9bf2d87aab691751063f1222d3e958cadad4b6d0fad2bd6085f725e4b9b0fc558f99567156f3f7c7c4f0a29a5235de9495f06ff0132f8c9cecb504632668e4cac67993257667c239505b416b2b0852cd5a7127b594b9f75552ef655327e520e3f8fa26cd85ceee45e1ee4d1aee449e5cb5a0e55cec703399153153b8d95d59829ff3c93179f6b9397f24a5ecb1b391396bcfdbbe5f04316e55cdec97b357a3bf55988ae7cb08ff2513eb14cd979472ed9463ecb17b9926be6cb0dbf96afdfc6cc3f2587f697b17893ef722b3bb22b7b2a3fc9940c6ef418ca33792efbd65a0ec45c0ea5cffbf2730cc5edb91cb3b932da96c31ceed88ef8cf90437d54885fb1b9d5c8f736f6eb3baee3393ebbb2de95a5ba7002fbcd0965ad6ce1982fe5f4739f7ebf8edf92435567e4c4762c874e622b9bc1c656a422f9c04985ef644efee9bec2293f8dfcc4a984cb73e68b17a7e68ed3f095b3fbf1fc39fb3fef677f5d0e9d83736481b5748c4f7426ce54d4dcb71e555473cdae9d0bbb712eed911ae199f313f9c98fe5f0f3283ad7edffdf3833e7561c9db9aa2dd076d19a3a77cebd982b9f325623bc7316ce83f368ec68691d9c2767a9a2abbe5339cfaa8417fb82453f9a3f67f5e764cb59ff9e7dfa7acdd9d80f728ef36b39af62a0f5c73e3a6fcebb55f0aecdd98a6d9cadd3515187ef749d1ef6e4fee76ce10fe4f0931f936f56c58ece95aaf9cc39772eac37bd8ea8fdb3d397967d142fac6b472a8e7a7106ce1047f0e88c9404baeca862fc48cec8428af98f64d119bbd69f914397fde8ef2ec9cb27fbe52a97eb4ad327d52a6be93a3c775dfbe07aaeef06ca3aa93e697be8866ee4c66e22072af78afe921c1afbe1a632510d18ba999bf38ee35b81b2890b6513afdcc22da5aff4dc6747e59f6b311766ecddcaadddc659aa4c69e89ad8c0ddbb07e5e9be9b43f7f867e450f6beff1b1fb92777f28dfd6adca913b19969c5857bc98772a1f28fa97be55e8b193f585357dba90b1eba33f7d69dbb77cc5739cad0bdffa6ac5f90c30f6d7617562d77cc771fdc47fb8a1fdc272d87eed27db602f745598d31ebba2b3d67ece4dc180b3072d7ca6a3fa8b9deb89f3c9bbcd17ee63bd979fb753974dfbff793626e95eef6ab1f753b566d3dbb5d17b5d33d73cfe575dbb681dcdb91dbe7a93b6063bb56f1c6853bb4b97572475cb86365a5e69ef5733ef9f7e5d0e21e137a85a6f6b867f39e15b217356397ec4a9e3c2172880df9b327f9ca738c57ee898ee73a7a5d67e5799fcaf2bd802fbdf01b3964bf2e87def7b655cd9a177bc967ed732f99a37cf0b3f2b097d882d4cbac677b22775eae7e0aaff42a5959536b6b6d6dd776bcda6bac3b6fc767dede3bfcac4ffe7d3954b51e955ed6bc9207efe44dac376659efaadb6336f6a6de8590eca4e6ecda55f2e85d9aef5c394b6501b6bcf0aebd9b4f65cdbc5b6fae6ca5fc5c9777e7fdf2be8cb7f84606c756653f7b0fdee3476da2f4f47ec8b3b37496de125bf0ecbdb043bbbaaf62062ebc95d831bdd3b160250fbdb5d3f736b6ca2cdcb1f7faf3b1e18fe5f06314bd37ef1dff6beb7544e575b9aff2c9bdd7f3cea4fc54cbc7489d7b7de6a9b872671fbdc1972bb7f6da1b7a236fec7c53d7afc9a16f7df593cabbd64ee5336fec7f69896f5bcf2ad3eada535fc0aab4ca8c27f6a7fd255ffa8eeffa9eefeb3cd90fec3329f04ae87cc8e14fb4e90772f8d937f7ad673f72b81ffb899faaac59efad6c6c975bd68c0b651367de98d7f691677ee6ab98d12f84b096f65aeefcf2c3c2b763a8fa235cbff2559eed375feafa2539fcf67ef9e6effcbdca37e7fee1737dcaa674dbb5a7dc3ffa2a22f41247f813bd4fa734fca0722bdfedf953f6625db00dcb65e95fa85863a8caf179ed5f7e94f3336dfaa11c1a9be85ff9d7a2e31ef8cabff167ac61151b5a0bffd69ffb7752e7cb858e115947fdf75c4efd7b5eda1d7fd1e60243ff53162db8bc57118febaefd471535dafe9391aba58ab47f410ebde833fbcffe8bbf52367ba03c6df6790cfdb570d5fcea7ca4f637feabffa672ae77e5631a197bb91ad9777fcbbb7ec78a6c8787d695dff5567a8f488ced91dffb34827f520e3fdb44f7d55d2b0f31f61bffcc7ab5a6acb62efc73bfeff579cd7315490f78adfcb31a4d77ec0ffca1ab7cb955293b147bfea71e8d1cfdf746b57dccdf021526051ff2c403fb67e53010dfd8c6c0dfcb6b36b76355ee97f5a3402a4d763d291ffc41e0c82b772c1f44d75d33cf59fa8bc0b58f81fab235e547b6f2cf8380a72a3aba54723b909facf8cfb5ebf7e550b525141d955fe64114c44112a4ec55e5cd974116e44a939fb51caa7a572a5e78e603d60b0a39d3f2a6e3cae0530618546a76172a36bb967650078d9b063b76fe63d9fabdcfb7f629d84bd5737baa66b3efaf3e8fa1bb0f0e320d74fcca8393aa75e2497b6a355a4754445108194c830bbf63d7c1a5ed045772628f826b5eb08e6ad72ff8e4df91436313831b51e8f90c66c1ade3077315dd6cd5bcddc96e70cfbae245d9c299d2e4173954766ecc8ec12278b02a9e3beffea7f90c1e8383ca685cf96047c1938ed582a51c7d96fb5fb1891f6d0c9e8317150774957c2f8255f049123dcb79d791bed3041b3e0b264a6354fb541b3a2a7e3da876be066fc13bbbe4475b88c82d146dad836a5dc7997d1ac1bf20871fda1c74831e9bb3839ad7b3e05c49603f1870dfb9f316df7b6665bdc7d63a180a4b6c822f6b39c1d81babf91ff23c546166dbc734e4a1a94f863f2587dfca050f45284557befb0bb7b1d7ecf14b6b6215d21f43874be72d78b27b5fdbea9e8999a8c5b5d887ae2d42cfbeb2b7acc797e1270bf4b336fab7e49046d199b136eb0983300ca330164ffcceba0893300d335eaadc53d9431d87f36b760acd6a8eff1a165efad19ab0d4eb76721b56eed8c67c22d8072f614df5fd844dfc562ea0e4266cedac2a3f0916ce97790dcd59a3f0c04e7cac343e172afe5711f96b7874fae1896d441004e1249c86177e1b13861f3ef9a7f5e137e5d0d8c460c9eec22b150bbc84d74a9bd3f0c6ba0c67eec01eb050b5ea59e72bad5dd43e706077aca51784b75fa4b062773a77b1a7c1d1790be7a66777fef527b9ff5dfffcbdcdc432eeddb54cad8ab956252cc7f95caf92805ada72132e545cf1aef7e998b2d5fe42a64e246ec307b691a5b5081fc3276e792bfd4f07a8ccf617f2e49f95433502af62ab6db197854bf1183e874fe1297cb12efd9eaffd89f2cfea77ade2aabe8abb724baf37acb9194329c25568ab1e366a8c0761255e3e8de1dade861baacffd5d19fc462e3e3456450d2a236998a3e2a9b7f0737ea1b4991d9567debbe360624772dfca61472edcda7b0adf9c0bfb9ce522529afc6ecfc2adbaa6d7e4dd5fb385bf2f874bb3a31876c22bbb13763d3bec8567e1b98aaa1eaca9ec2afb31d47228e62ab3dbe948c752be50cdf33bbb0b46a0cb61df7f5339849a7b6b296d2589b38f316caf0f3ec9d54fc7899fbe3f0c473209c73a16e07de64bb30fe208bdc3c95776e45ec9bd57d807dd46152336f6446c22cb7d56f175693b4a1a9fe4c4d16bdb75d089c89bfe42ccfa3b7248a5b1885b7a6dba1fd991b05e23c9522b6279e444aef2cb91dc686fabcf3ca8163e6839549f2739d47ae5a50cd64ab62aeb8a558434893cffeccb181eddd73f9ae76f6dd3e7ef477e1458b5bfb09e43656f558c750d6b48512807ced27558576e94b79db8e328e27df9a062dd9c796e1ac5d642c9a023a228895271c1cb2853df3671cd3f4d0ecd1964ab9689e8b007c78b7277264fd6a575191551e972255b47e9f3a550710d53da6d77548ee5ab28661cda4ecf59f0273582a9d0abb585bbb18ffed5e711507dadec93f3f207b2f89d3ffe52421d1c743415eedc8d92bc157f8a1a3537b6d2cc41b8537fe9f3173e73ded47c5fa8ff56312a1f0555b48bf66e181dc293ac22edbd5584e4ed289ffe7919fc2339fcd066a5285395c75d8a99e54427a505ef6c2c7cfff4795fe5473fc186796cae4674a17204c71e4593cf57ed9d7bee2adf194da9bee822bafc63990cbed4110a7eabb28bad7d50d679cc87eef8fb764457f2953dda27f9aa4669105d0bce766c25ce5568b48c6eac93fdc27c768c66dce8debf400edbdf4c44b7d1dc99f34ed86349f824bbc2633de5cdceb42caadfdacb2c95d51e8757d19dcaf897d17db450516da3ed21cfbdc0fe62f3bdc6f5fc8d3e1b113d7cf8dfe8f13b99fb46269d5df4f4652e5e9d77bddfed5ed991f3162d83a5d8b807ad0beaa3ec9cb2d7b5638b17e59b6bd6111ba5c0cffead9e62f7d6b57c2f7a11b75fc7fc9f2a87c6f6442bd171aea275b4895e55ae12dbaefb1cbd395c59e2b18a1a9487961b250d2a27f523ebd96aac4ad9a8c65a46efd1d65a6a8b1f75beaee4a8f8d0b10efec41f46dda8f75127f9e7e84cff8ecebf6d933b155b36f9dae7a8af2293bd788906f69dff281f02579f62c076283b1d0d95ad5319b3feed47d1281af34809f0b9bb14214f622b663167edf9a4d8fef59ce9f7e5f0c3f6c48239fcc979b0af6219252cb32e63279cdb1de5eb0a25033a3e9ce9f8900f955d51b19af3e4766215d15887d80b5fb53cc86f2c61ecc78155796e1caa0848c626fe53fafc18c7b2eb89af321827edf9dc8e55c76974ff39826f4bcbc438ce39f7876a2e57eca8a205150b2a7f3d57794caae358f9a0fdb27d503a318c0be5510211ba4b67e5dec66570b027fc63bdf31764f067e4104791597538b6d7721a57516e052abab9b0b6b15e39cc950cf655bbfb6d3eaa63c4815e2b161deba0d791f54aa8bd8a1bd68b775f24e729de5bcf7aef8517d6537c887a545f20e2a360ee213eb9b9d2ec33fa7b3cf1b6fe56b7c3573989bdfa3a86de4d3c75d3f842cc552ca8f778e6da0e2b59acdaa82757edd2918eca53d83cbeb4d3f091e53c7297e153f0165fa9fc7ea9bee5fdba2dfc2939b4c93e3047c6ac13c4f1757017dfb0ccaed92e9e495fefd5aa99bde5cbf8d6ee283b34ffda3bfde35fc5dffc35be537e7eaed784e4d6eaeb3c2bbe47795bc40f51377ef479fc142f5b8d567f8f9f554ecdc5bbdba8785ac9177f12e5d712c583cce3972f75acdc6bd653333f762fe3b5755039fb215eb343bc895fad852c55027b19bfc9476bad7427f75ec1a3fc9a0cfea41c52c9cf56adea7f8fb76afcf4399f9393c69db8fbed78059e96417bedaec32b9587bdb96bd151d9c83777d943bdefe2476afe23bed2a7d9e21ed9c1f8213e8bcfe524eec78300f702e3a15e2757323e8f473afeb49eedefe62a1e275630d16b3462cebaec28affd713cfbf62ef72e617edf1d265c9cb34d62c7a5e868398cdeb19fff02395c1adfa8b5993789b0269667bdc99ee3d90f1ed36bd87a8fb95dcb1eb20ef3bd31d822d5d38acdad2aba73f75ffb110e555eddb4fb2e07de0fadb095a944b6f6f0d18be2b3c471ef5ce62f1357ff4dd48997f849c06b6fa7ed1a53f69505d1379228552bc2459b1fcfa4fe8702946591ef7a3d5b7454dc8a9f246433e1bb96bbd4cb3ef19b3fb40eee9a0f93e8cfd8c29f95c325ae99445c0ee22a899344f862678549eadf2419aff5f9146fdcae69b73973bb36522579380e777add3829be95854459f1e0c85c25834377e3ed92aad5c66bf0cbf19973604f49ede62e9e6908627d6acb2b93868fbd3d1f07aedc896eb2fba6d47d72f0f6fa1e9593ccc24a6e75fe0eebeae115fae9675e86f7c95144c92999b8b7b61795c994f9d12cb9f833b6f0a7e5f0233f9d2597ce5d72955c5b537699dc24b3e456654f4358b301bfcce67adf427b14e6aa16f7dd3af82612777ba1cd427dbe91cfdc2b77135ab19728cd4cee927b6baf245d594465132f920776113debc83b79d4e7b692a764993c0793e445af15c96bf7f5dbb9b1d36096acc28548434b49f8b35e097196b25d33d1de45e7d5d6b3779bacad0b59baa12cdcc0ff74aef7d765f017e4106da21387fb6463eb678aaeac2879f56e55249df381eba82c2f66befeadd794f5da8d9af72679136efc8d2d4cde8399d74fb6fe4ee5f82a8f4d3a629eb456d53d4bfcf8dd2a939eb689c959721e672ab3bd4cfa491b7724c364948c534bf930dbaf532616e977de4b4c9346ee954d1ccb3d1f46433f4a6d9dc387e3e42d1c2bdba17c4b2ac22711b03c95e14b62bbd74a77967fd616febc1ca236db2ae37be2978e3260a9a362ecc4bf12562b877a1db1d0cface8a842e5c7ae3e63a0d797c32ebffcda4be755b5f8c03aa92b92d67ed9c90bad9ea65eeaa741f2e03265131fd230f6d34894491b73d82c8dd3244dd32cd572fdc4baaabea57bf1b5f4a8746a2ddbc94b3b9243fba0e450d944d40b659ffd495a842f6ec8236b2b5fa2b11ccad47b8dba7fce16fe8a1cd2c77ff6c7696979ac4a1db6765f9250e5525dbd1fa6eda15ed756b98a1b2a1ba42c966b2dbd6fcee4060e2fddda8fb42d4cc2b492b364c95749276d3d97b84c9b70abf4f82c5ee8519456a447a5dd3956b67794ee94243ed997e91e72233bf65ed32ffbca51572aab9d2cb57f5651abd20a4f5a8dde6b56f181b2a2e1383da6271ecae774924ed30b95f9e93dc863fa0779fa3f450ef1131cdc697a955ea737ecc58ad2595af1523f53047bcdda266a5fa8a38f70acf295bbc8fa2283a7e82ebc627367195c2b4bf5e6edd35bfb2e9d4b3f6dcfe0078da37ea2b3f45e45cd91f22eb19ba60b8c5c76e943fa983e392c1985dd742937d2d63e5a74d2e72fda5c062bbe4a5f9246e5cf07e5c7b7f6445997a7768db1a372ad05bf6365984487b4b487da4e0a2b5dfd5919fc3372a83e155fa66bebbab5893751986eb4e5d66bd97a5f45efedb13b79adec61c79f849f9f4ee0e191053a6e6ccf273e495b285b28a7beca3edc7edafa07ef3958a66fcaa30cbc48e52817f15928fd237aa245b0741e5215c5a5731522acf4dab48a040be6a75bfff58b245ea69db0abecec8bb757d9c7911db4262b69ecf032edba23b6f1cfd35e7a16bd09a97a53466f7f5e06ff8c1caa586d9b9ea77d2b0e2ed96510a403fb3e1d5a1b6b137c39cdfd2b3fe9284669b51f122b1deb0c2f3a53d1357755629ee1ba47b4f67b4e9e7df7edccb65f3ed6d49c4326fc3c93699539cecdd73b1d9629cd704e99e72e65193e66be3ea394057f4506ffa41c32766b37b66b5d6661dc1145bb0f51f96d7cd89e5719584bb950b6e7dafd228559e40a6529afe4c22fedb8ddf31d6b9b95a9ff66b813e4bffacfa98a6ad2fbf45ecba1b3cf126122a32ccdb2f431cbfdf7ac5036b45191d198f97e24dcacfcd8c3f33aeace4afade5ed9c54e6b3755bb4447c7acfec2aadc9a2db23a6bfcf36c6789eccf9f09ff0b72f8f16169e406d76cae62425f0e79a16c5caeb28e9db6872a5eb8cabe587b6ba06ce13876e1ac7668e97c426e9cb7f6b9b8218d61384ac7ca0eb6da1c28a5cf8e1f16353b655936c9a6d985b2011d69ab68bbe27d15af4c62fe754523bbccaef8cabde263152746ee46efa3e80c145642b2ebec263a4407bfffd7e4efafc8e1c7279b894dd4d1fb7bad1df47991ddf24a794137beb4932f23c8b37992c96b25a30fea67aff30db9d1f64aaff7485c63e36e7697ddc771f4183f7851a662edece1e3bc04bf7577d9a392c4a76ca9ec9d9e8b59bb16d36181ff25de76cff4f948bd8f22373a7fb623bd8f02118ed864cfd98b7cf9ebf2f7cf9043f8b0f3cc6a738e323d871d52bd3ee205c1faeb6ab396446bf0cd5ff047a23d13a76c15f4bc1b1561ab18313a17a5bfc9f00448b689be5bdf402bbacd7004b3373363efd9d6b1a51d5a7ca53e339dc7679d6c1fffc96711fe7572f8dde7877dccbaf4349a7c1442456d336f2fe6dede1df3958acf0b79f858c772a4ecbbafd163a2e4308eb39e33f954ce99bc97b3ec3c7b4a33f721e9d8fa44d232eb2778d2d45d382fded11a78c76fea1f38b37f621fff0572f8f1c9b45dcc60dd46af657bda838c55cefc1498331cd1955e6f54b2b1d032a2a21395db649fcee6b867d981dd056f7a5f252abd38fd92e5f037a5cde36c9a2c734bcdc1951de5ccc1f85128639c6476871da23b99c84c59e8951de9330e01f366ff6cd9fbd7c8616eb383ceeeb5dd71d7b046e2ae6d1d0d7ab9a051c8a5f4c127ebf515fd5c9cf299efe92709ce9d88c7f3dc8d2edc2afc7cd65f7d37f5734fdbc376e561691fa41d74c89b082e2365ef746e7ca57e2f550cbad47b3dca26da7198fbfff97218dcab6826b5962a176edc06d60df56a7cfbfb907f7a474cf8ca5fec83f699fe3b3be5a1fedbc789ad3ccae360c69e12bd7253daf7d9e7f37022db456f49643ffbefe1a25dbf99b9e9c7f327be1d1c543ebc50f948970fe53669cf38f0b1ce57f82ab7ffb3e5d07e105b7fe13feb353a8ac3941cb63fced2ad3fe4508d52c24eee033bf96d3ce3ef94671e64e6a450d0782c6d74ae1c9d49e9bc879f6c9b58c859bacfdbdd286fc92225d12befd3aea68c5424e8822ee8d58f6828f76ab654661e452aa317729567ffb172c8b335bb634e9efbcf71da3e1f5cab4f651d9ca59645fe947f5a854dd1fa65f7d13d5f59caabb08e78a7e826a8ac3a2f758ea27cb39b571f11b67f93b1bcce9b7c97efd3797e886c3bb12ff34f63accf60ebfd96764f79ac3d57bb9e3de43772abcd49deae14fee7c921b65fcbe2da529f888b8e3b152ee4c57abd443f0f10449f7aaadf4952f0a11de928596ee44647e8f4244e3e618ecef6e2a7e8dcd907f74e63bccd22f7f2697e915fe657b99534f9b51aa355f244670e953d3ca8995bfa657b32a5afd7b261bf51c59045cc5353d27f961c7eb2f8bf912dc72b6f1edde59f9ff629f53e8a977bd255f1afffaefa7b2387244fb954f23c4b542c149d270fc13237518fece6b7d9349fa759ee4583f425bfcbef955f5e184de7f9837b19bee68f3f6e89fd6947fa3f470e3fb510ffe63f5bb55569595451cdb55b6bbf9c3fe5cbfcd3ea54fea26da6bb761d3e4b1a6dafe4837d077beef92a5fab8cf65adbc3f82177ddd469f28d8fdaefdde6afc9484736c9529f52d732ec0d3f95fc16af54fc93b7b97bad73202de3de5849e7217fffecd7feb9b2f8cfb187f0db7ff69ff3ad55c3595365dd537dbe8179deede7e7df448e67058f7af54afbd66c0f798a779e77c485d83a4ede8d07f183bfccf6c193e3d2c990bc979fe5e769a6239bfc5eeadda7e1e7277bf27e3ee04fed7a7adfbd6a7394a15ecf749b70ec8ddd5a9fc9ce87f9281f17d63f5316ffa41c7e923d2383ca2f8763abd6f64f3e58079515abd82fea142c5dc69f64a0e096f6df2a6fe6c3a4f1f6854dd1a13c049dbca3a243ab1085d4f650f6ed3b3171bdc2110fe057c41ae490af94bdabc54b62229bec2d983955e1eab51ad93e0b40675f9d25ecedf92a922cbcc22f8222fcaa3f7f871cfec0a63c33274ec3b17c6f63b3f6791515bd3d1451cced4efa693fdd2b550ed3c8546e8b58da69a7c0b509e735ba2bd2e43dbc8ae76d96f2e845b9939f2debb40a66053e05155d654fb9a5bc5121f7fabce1871cbab2c8fd891c1691ffc26b959fa8b810f653785f74e5b5700b151d1465511575d1146d649e0eff4e7bf8c9a6682d4ada730d63257dd7aea3d76594a7a80bdb1f322fdc597a0fa6a2be2633e6e9f36176ac22e087a03d85eef4bca328ac278b39237bcd9d363e3cf7a262efb4cff6b917c521c015c274e07ad993964395c95585896d8a532bdf2a772c26de8875742e94c56a360bd1556d58aabf4fdb31bc282e8b2b5fcd9ceddb2f72fe77da43eb631f8c3bf7fa091e7bc25c6fc787ca9a47a1e5662291d7ed99fd39f37c936fa8ffa91cc29ef27eb68f70c78acdc28d5cebb28aeba017bc45172ab6d1e71dfc02e53d293fce4a1437c54c29e338b4bc711a1b6b18e8bd44fd4619310f9ce256e7d34aa79f95c4eb33e25b6ba977268a7971a7e4f05eca70582c78513ce82784ff1e395ce2d987e2b1782a96c573dc5807bd1aabdfeca7626659bc387912ea5d71b953f9ebf263d52115f0dc9eeacf8a4e16dbdb10f3596764ed622b10c51ae4d04da93e36a0e7a1a36be7b2d8e8f8efb33d547eb76acf31e875e02d4f032e5ed41816ed19f127ab29daf5b1e2ad782fb645a7e83aaef55cf494efeb7956eefe7d72589c15e745bf1814c362c4a47e5f6031b64469950c2c94786fcf15b8a2f3212ff15ed92769bf14b392c33302d9bab44b01e546a59cb94cf9e5a7f8499f512c8c8c94d26e23bfd20987d2cf58e9aaccbb5f980cc85f418e2e13d6d34f222bb37b51fad267077dd65a58b1affe1694611995b1146562dfb279b8f376c96d9996d9df2587655e16655956a5fa6fefae6cf433f5ae57eeca7db0858cce8fedb5f6d7564351b63b6281f3ae7cf0351f9607582f70cf83172a57afd5b4fbcb2a4f0944ecfb47aa2fb9288f528d62792a27c948e51f99987aa36c4f714fb88173af3c2fdbf7fba4053b9517e5a5986b9b5cb6125f5e9737e5acbc8d9edc9ea3a22e76d46f5328e7e5dd5ff1d1bf24875fec866ad17db9281fcac752494cb98c308e2e9fe3dbac53b62701dd3b6d0f656c5505e6bd41e5bcfb8ffa39169549e3dfca95fd42e516d77a1f4fe7cbd1b996c3fcf051a70cf20eda03bf5ccb548de3a6dcd0faad53931c16ed3a44d6d7e7afc5b87c8d26851b17e59baae9bddc969db25bf6ca337692a98af50f4a6fceff5aeef20b72f825bee7ed1b84ca7e392887e548eb63aae654cc1dee1edc839adbf674be23e00c98b280680f2bd5cd767db1e17d58b9f16eaa4f32a0e490e9bd1415db9c4767f973f5e9393ee790f7657bfe359ae8b54ab9e533cf9ce6891b7d8e41dbc3b47dd629b779cdc7fa2941a5ddf3b8d1ef17a944252ba7720b8bcd2acf5fd8537b54d1538eff2639fc982fad8f5550855554c5958e135474c79fed4eb9f6c6c5d83d546deec61ef4d97c2d1f01ee0688526cf47302d68197105b575974f549d61ef52a8317911c068bcf6da8f2aab57f5529c642bf4d755099982978d1cf6379aebc86a7cf83a5f3a606722aba2a47b974b8de31a8ea725b35d5aeda0b5ea9b996efb93939fbef96433bcc955c55c7ea544daa6975515d5657cc973b95190c59e88d59a7ba066f51ddc069a114dfee51cd986f35a9adbc4c47b6bb9ed59777d355736d0fbd769da7ba8bfd70fbb90dd57db5a8d46ce427357607abf12351d029e572ace24e2573e51cac6c70afa46caa9f9dd7a78f1d5e295b5a3d55cbeab97aa956e12dbff466ee989ecffbb7c9a18909ab75a574a87a5572f856bd57dbea325779bdde6bae3af13abeadba153e2f5c9d8977870b373d921cf281cea3ed4e78004dfe5a47d84f8ffa9c889243e557b2cbfce5eb75b1f45ac9d367f9f533f1e9399d8695574aded696a07705e5cb9cf1a5de7fe67975ce9f2b158b56836a588d8abb6a1caed3556dc96ecdfead7248b26864d25206a7b66b51cb3c531d7b6acfdef76ba7766baff66bcc91a3b13f7458804f2fe552bfeb438de300f641eaf06b1db91332bdf2a5e2eb631d491d287dd386b0951cb912d2aa9d657c2957751b3779177512f02886e7e0c5433175cfe3d05a3a4b7dde9a977af547a58da3caa955de582b7f561775595775fdef9543fad4ed7a66bdabf7f5a13ed627af13c4f5a49eca61a66288faa2beacafeaebfaa69ea5abec4abec73c2e480ef5de9fbcae5bdf597ff79e25f9a89ffc8cce54342ce307f7ad9e7f5b377f84a7adb220ece83d43f2cbf59ddecbb19fbd34bd109360a54fb6f38d7e128f3fd91baff545f57dbda81f6ab3c2585bf553bdac6965eedf1a1f96abe4c2cfeb977a55afeb4dfdeadceab770155df99a77eab7fa3d5e671d1535acebadd83065b72a8fde5c54ebb75fa92c0532b7bafb7dd9f54d20a233adcf815df7eab3efebafcfc1af043d7dc21174b9ca9d4b7fa0c43c617e7c91dff03a6994c4574e5cdf6615edddd7fd7a500f431563570fd95b3d62217fadc7fa710defaef9179f83fd768eac3ad87247bfacb8918dd3b80dbed92b5fb33316367e13c4b7d17de0e93338c215b209ad75d6aef607b97e8f2c44c6d93adf7c5f57e6811ceaf3874dd4c4dfb7c709a3d69b861b5f4502741256e9805bd82ad774d52c6d8255bb8f5df0a13fcec96bf02669d22653d161afc95d6e1ff533354dd1944dd5d44df3af3c8ffdbdbd703bfe7375487acdaed93787e6d8b4bb3de9457dadfd72d6a99de4c91a6a89b30ecda4099d659281ad4f76f6c11f47ad75cc7ef8ee62f6ae3d8a8eb273b799fea83db1d5b4e3e64e44c75e37b813d3be9b7613b4d6d61d17aea7df3231d3fb7b85398b536dcb5973d55c3737fc89e72abf9fc9617a5e5f3498753b7feadf3df8e9e7a4682ed5df9a5bab965b7668e6cd5d73df2c9a87e6d1bbf34e4920c6fca5096a65139b27a6624539f4b937e20315b78d8336032ba7bcc84bafb540cd6fbdd39d6b6d0e44fb46a01fb629c63daefc462639ee93f07e701deed2c61beaf32762de3ce70bfd264b478d65f392ab6f34ab66dd6c9ad7e62d1de87733c98c0fadb5ffcd299e7f891cf26f7e987ebf8370f9b577d1bc978b665b8ba6d3748bae75c757621cecaadba617afa56d8ff4feb17e46a439b396a0bff5c88eddbd7ba6cfde34e73fae53c787f183de1dfdad3635fdb88d70642db6f036932cd132a7d7686c353f7a1d5b6ebc585e30fdbc4c3766cd408de1b01935e39db563f235bbd5ebe8ca2d7edbbb7fc9f37adf8ea2235564e6d99dd47564e3edec9dd8c99d532e93f762ac6d90c577ae25761eebe88c43ef67a848574517bb367bf0c36028db583159fc767d7a14b546ff769b22dc47f436f06ea90cfe9d091d7b76f5cce9b543314fc7bb40ef94b26017aa7645d5a8d9ece25d227831d5a7999df7dd37cf9ffe9be243ceb6d69d7fe3e7bb6c97ef8a9da807bb7257f15bbb23fde63263cad75da5e75cbafa1dda03a5576e6afb0b789ffb0ecbc81deff7fc208f2e5a59fccdb6ec1af3a6bd766e763bfd3e89409f101d28af7f5dd89a79e1d77ee5aed56f1543eef695a3e4f050dcef8ed99b97c90d9d97ff73fef897e4f08b6d546d39ed2611db29fbb6bba80fbbcbddd52eca8751592cb44cc861316e8252e5718eddbeab73aef758e47bb4fc98edd8df5d3b97bf5d8f96c21fbc6ff3d34738850dedd9b572986eec8e187b523fb32533a6243de9783bed35e2262ce34bbd7ab89b55cdee7637dfdda9ffbe77cf760be74fbdbfe12fca61eba3770fbbc7b2f5c4bb8bddd36eb97b5672f8e2cec3b734d66fe8d6d9de6ea524f149f9cab93eff22bae2c5790831ceb62ff39bddfaf7eb5123f8076d115b6a8ffe89ae022687f6416edb779c1cd8297d16ed1ab66ac14514ea2c65b769e5b0f5d279e6d9bbb7dd9f7e56f4cfcba1d6325f29519eee30d6df6d9bedaeb3ebee7ace94cdf4bf0ae28dc12fbb8762acdf4b28773255792ccfaed85e7b12afafb2c26a77f6d7e6deb2d9097e676f89cfb6bbf3e645c9fdccdde877ede877d4729ebafa992d99a4781e77a722ec725baa0c69374857e98abf25c15fc94ffeac1cca30bb5319d6603784bc7437da8d6bb1b7ea67afe3ddb09e3716e33dab2ff8ab7bf0c67ce82cf5b97df7a179d1ef1e14853fb10efa3493bcfa6b73fff1916f7b1e737f12787b5b9fabb523e5716776e48ef7c27d5075ba7ba93579efecdd7ab0f7f67ef5b00f8275b96a827d981df7d1bfd71eea8f3ed395ddb263edec959dde27fb749fedf37da157a454eef412ddefcb7d555fd99daa23dfeda9dedf55f7d57a6fcd5fe85891cde3bf3cf79f3f79aed7aff72a0a50b9b8dd3e0730e3ed79b2fd4efad633bc076cbfdf1ff6c7fd693f119c9d872a972ad77aff673ffd1bf6f52a1d1feabd8bea20cafdc5fe727fb5bfde2bcb5ecfbd500efcbbfd6c7fbbaff4db5a5494f6ce736fae7a77a7e54fbf8b53bf8729fea79e7751eda998a3ca55318db689fa1d27f6484ed93608f317b1d9cff7ca8beceff78be6b85771e7fe51b52df174d6395792f0b45ffebbe5507f98633d8763766727fbe7fdcb7eb55fef61cf87c551b96ceef69bffafbd6b6b4a5d59c2effb6fe43d05a220b59fa641949b5750e16d720f24841092f474d5f9ef6726a082aeb55d2ea3ecaabd2ad50555c64a98f9a62f33dd5fe70ff33bbbbd38369b9ab732032efddf6c93173b6b3aa9312813878ea158329653ddcc1ff9c5bc615a4f59edb9b419ee655e44997925afe647b9f4eeeda1f4bc6f151723bfce9fd8a9be078705769e748739d56c736a9fe727793d8bf3467e9a3751cf16d9020b5b891c0d34d14a93c5b5eb6b9eca4394ab399b555407186751260ea58dae9853c51de10668a354c4d2a6bd8ae0d0437f5dc7194aed67b61423a7cad73106f87c66fb1d387cedcbeb6b75de88212e304aef93062e31c61d8605bb9b9fa0a9f730898c6505d79613e5515765bc87559e968943ddc034e31161163bda313ee743e436167be5718602697591dc204b462e458fb12898adeec2777b899689c35751b9a6af11b025c7b08d67d8c96ef17c3dc40bec620ffbd8c1010ef112afb8837b753e490d6ffc465c9d27e5e210f7aa6fb7c8bbc3917c9331dee3033ee204a7498a95bcf05135a679d27e4f70a7422dac7f3d0e77f0a86ce114b7ab45aed923ac491c4ef018a7789200d6b191dde0293685be4eb3a36cb0ffeb78ab2cfc6dd7c49bf15347efc210a6b0d27b610b47b8c2939fbed8e6cc3935deb51a626e5c1d224eb929f422efac763800ecb10844281622124bec24b036442c565212b116a9c8e27edc1779da489aeb5b81423893d230f8accb0409960b01a225dae24c74c4b93025063be2228be3b6e88a9ee88bbdb9b42fc5305f1d264e5173bf7c1497e24a5c67d1e644271b78faca1737e256dc8991188b7bf190f8e2514cd6196a622a2a794b54c591a889637122ea1f78debb3a7af35d22aff1033c9e8ae6ea9c7492ba28a5d4ddff2bf1543b449cb27deb376fabea86b384e4af424d06ab2659598b6c72b03def924bbb8cc9a5fa86af46c5a719cd29f8d1fbfdfc3a080eb9da2749bb0e6a9e3fb71e36a7e4bb4c70a92b1e66c11c28a40545b4a498569450f1df541206f7df8752ca28272441448c607f949eb82189538bdae92af5e88c3ac9532de0617098a9dc7f3d95b1bd8c09c258afd3790c2f2cf1f99c2ea84b3dead38086744957744d375458cf3c2c138737cf67de7447231ad33d3dd0234df81eeb2c4dad813e36aea892277193aadaccebe87d3aa21a1d1f02879b4fabb3e94f22a3fbd359df4119a39e68356d9b63805adaa713aa53834ee5e83599ce34c699e230e4ace47e7b4f386216b399c35ce6319fcdd84e55916226d0476a2f8405f1304f5848d5b8b9b659c816f4213ee45270b89df3820ff14cf383953fb3188bd872c32563884dc70fd458cc562c616b96cad1cb58ce9009468ce925e5e2bf1506acc5daec8c75d839bb60cf757cac67d5a340314b321935b3c1aacf869eeab97dabe2e52d9bc637e27077ce9ce1cb4ccfafe54a99ab5c6c76a9b22cc356c4d915bb6637ec96ddb1111bb37bf6c01ecde5a25d2606f7854dd8945558951db1dad2b0b6318809cb4e142ccfdc59b2d3d1c54dac815693633888bc6ff60ff77a186faeb06df56ccb8b8c40ab1ae016f95ec6253bb627ec84d559839db2a654f191aa9b0f7eab9fdeaf0a68c055aa17586083c3f9a62b04b8e0816fc7bb1eede65a8eac81710ab3cfdae64fe5636f2f98dbb0702170b8d6b313e995d5b52bcb2bb8db1b464b46f62dad122ccddea234bff027a23a1d61c083ae62c3d0685e6488401856c0cfb711c90c14433a3cfb10dc8608969fd3899fa94f79b9cc8e76edd4b0c5cfec0d6f97ab79d2662fe323956760cc6755f34d6fbd2f91221f5bebf98e6b990b2862e3288415c89985b50d904206b9140401041b5dc86d2718d917df8cc3c2a7323675e913287c31685902dad178c3a4e24456a41825a5ddbeb5f9acaec75f8abf6709218c14efa6aefc8478e325040db6adb1f27d38d31a7a50dcdb860e9cf3a246cbecc2865dfc9b71f84a940e7c7cc165aa43d70b62077a8bf262e35f149e42dfb8e3c7bc3377e29d5d443385b7bdfc865058467b0897bf6f9f4be315e1b053371c4c9d9a1b7e0ff67e2c36fae92e13bf99c1f58fef553b9d863633ecfa57f370be277003426babacc87262d032645763c32ddcfdec3e57eac538e46b1859b3df794e79fc3630d677f7450e88c197b5f174cdcee1fe9fee2df885b856597af0f0f1e794c76f03aa872d87c9e7fdfe1285af8bfc309842e59fefb523a3e78cbda6ff1b6ba84c9e25a886f79fb16f5f8745387aff5e69152bced89f6e35d14170a88457ddfec1b1f77a7dd47e7d5dc0319c7c7c1dbddb4fead0383a086e3ff6bb7fa59fd4f761e65f211ff62bcad487ff552999fff03f297f70f879f983c33f38fc37c81f1c9680c3fffdfdd7ff0129439aee</data> + </image> + <image name="image1"> + <data format="XPM.GZ" length="2212">789c8d95cf6edb300cc6ef790a21bc0543bad46d80a0d8236ce8b1c0b00325db725c7405baee30147df7919428ff93a3f092d0e2cffaf489926f76e6e9f1bbd9dd6cfebce3fbd919d7e19bd9d57f5f5efefdfcf5ed63b3bdbf33d59d3954e6b0fdb2d9ee8d333f5e7f37fc9f8a0d7c95e0b4d6b492ca674d8fb79c5a4eab4315471b4dc3e859d393e3b4d7d4d59c22a7c7dbe37d28ee340dc5ada6a118383db9d3298c7a4dc3e87e1980d65a84cc488a2c894ec3aec31912ac1b055e4f82d4032b0ed35e4bc258235e4017244b1d325c173c27b974ec8aac396bd38c8485ba91dee90b66e47ccaa8971f91e597483759e564527097481aad9b96c2cf262d92ddb94fa13044b91748ef5b094f8c6f196e935c1497f3a4e7a03e6fbaa8d6ebcc5648719d4e81823e90006c3950208d85b97d9cb8b762112f1751bb8b74c9a1a3dfb02a44a67924ca66f839989bd452396b123269b7dceb01f6096e88ac5b1f49afce4fbdc5f0fa292c64dfd7e430b0069fdb15dd3b650516877c4b6437dee84527a4ee4b30938da89df465a6fb868e1758dfb6ba9fc9a2d06a887a7fe9f12990e12aa18618ae2f1b17502087930ca17586135b2261586940d3ed5222e7a84d6617bcddeb359d9618ff023fb7e41cac9361562a23a386ed8dbb33525cf83a24e588ecd9f853b3f245927da13a1b37079637e70a39556ee7ee5c41eaa2339f8812a9e8f29a2f92d24cb9cfe8f6f361f31f007ffc50</data> + </image> + <image name="image2"> + <data format="XPM.GZ" length="93620">789cdcbd47733cc9b1edb9bf9f82766b776dac1e50004a2cdea2b4d61278368bd4a2b416f3e52732fd1c6f924df27693bc6633ddb0faa37f08919111e1ee272245fdaffffad36ad4ffd37ffdafff385fac4be4fcc909add39ffecbbd6eb7cffff37fffefffe73ffe33f7f6f6a777f3f9f8c87dfc29f79fffd77ffca7d3fa93f3a7cc5bfa5fc26e56b998a6b7c19f48cf28a7e9ae457e4fd31da61791bfac2cf5d96047d26f39e5343d7817ce15df530eafc21f6fb9347feb53b994b07d207fbca7f53fc09f48ff214b7aefa29ca6c738ff8fa2e45fcdc9927f515696faf6e4cf347dda50b6129ed5c95f292fd03f1f8ed4e7de95d3fae627f2573a1eb30fe5b4fcfc4bf8f34dd83a823fe578f68e2ce5e743723e650bfdf389f659cc5f94fccb82729abe8cc852de437f7da27dcb1c59d2971fe4c247da7f33e1af379c4f8d9c97fe689225ff12f3edeb0be53d7049dae316c8385e918cf2efca76ca6f6057787e2417d3fcf38170febd28f94be02fc9ef74522ed21efc93b2ccdf2618f6e0949425dd0263fe3b45e534dd2b93612f5d30ecc1ad284bfe1759f2bbe077b4cf2928a7f9af0db2e4f73260b6d75116fb7d82d1bef0269c43f9600bfe147bacd7c0b097ca04ecc0de8e6499ef37199fe2c71bec794e46fe37b2e49f16c8625f4e0e0c7b6e66c892bfb5564ed3471db294cf6695d3f93440fb69cfc36fb2e4df0760b4df79574ef3f78a64c93f71c932df23cc8fcf37c9bf9c9325bffdad2cf6f00946fbbd1119e77f5716fbac90e578d385b2d487fefcc4f9597b32ecf75359eacb93c5be1681729abec27cfdc4f95a27b2d4676d95c55ff964d4d75296e365c862bfd65998fe629a5796e357c15f38de860c7f505696fa0760f887de14ec4afed65059fc35e697f10769fe05fa93fe608ef6e44b92be7c29a7e98b12b9f499a6c7c285f79293b61ffd51607d077049d21745b29596cf4afc28964aee57ca984fd6bb974ff898dae7bbc66b2f07867d7b1fcaa9bdf94f32fc47150cffe459ca92ff4186ffb0c1f44fbfb0f8a71919f5d784d53f659525ff832cf9fd89b2c4ff0d98feaaa12ce55764b4ef5d59d22b60fadfba729a6e97c852be325316ff7407e3fc9c1e19fe30248b1eb15fc239c607972cf9ed3218ed0f17649cff5159da87fecba17d414e59ce6f4296e3ef0660b42f6e9225fd78554efdc13a12a63f0e3264c95f0e94451f95c8e20f039c8ff1c7d2bf4f65f1e7ef64c95fcb92c57f44e81feaade88d2cf9bb5d65d1639f60b4df5f9025bf3555167f3721cbf15698df9f6cff4e59fc7f48867f1b2b8b3fc5f97ce27c1edfca69f9768f2ce5973c1efcf192f5438f05e80ffae7dd9d2ce58397725a7efd4616ff37769545cf8dc852ff0cf6457fed5d95d3fce1852cf5f5ceca72be6d32fceb97729afee8087fa17fec1519fe1beda5bf5ef694d3fcfe125c92f4cd5159cee742c6f1fbca125f5a6057f2c73e19e73f238bbf5da03ff2ef188f2b59eab3b764e8c92159fcfb1ce39747fb573db21caf5656167df14596fa9c37e5b43e17fe3b8ff8b46890e578f503d845ba4f96f832467f1718af4e64c49f1ff01718f65970ad34deb879e122e25306fdc1789359835dc49f2259e24ff6aaeca58cf3b5de5de10619f92365492f907d49877fb1be50be4646f98bb2a49fc952de82bd599694cfecc828df5696f4988ce3633e9964a9bf4346fdb0373b87fa3e9425ff962cf99d39382fe9569b8cf48db29fda03fadb467bdc8d729aeec2bfdb684f2bd573efba3e69e5c18897174b39f5eff1088c78183e9425decfc188efc187b29497f1d7f586f7549678f44d463c9b294bbc7b07538fdcc888df7365499f9225beb80b30f7131c6539fe1b19c73f2b4b7d1930cecf6b2b4bf93b19ed992a4b7c8cc8127f5cd113ba3e3a9d94e5780332f441058cf3b7ab64acfff2ca72bc1659ca077db2c41f1bfd4f3de0333ff4401028a7ed0d7a6429efa1ff72383ffb4196f2b5a1725a3ecc90a5fc16f381fac1f1c852fe745096f5614496f2c35f384d1f5fc912afb64730fae35a27633e3494d3f2551e0ffd33fc514ed32739b2d47fc17ca1fe08fb64ac27bf94d3f469932cf16ec7fc9c0f0fb2940f3f94d3f47a950c3d82f44ff4cf724796f29b86b2e89f7732cae37ca847dca6b2e82365c93ff8544edbdf9b9025fede6b60ee77d9ca697da73d19fae85339ad6f7a244b7d37ccbf4f9cfff34146fb5d6589f75f64293fba29cbfa0ce3f985f30f67cab23fd4224bf9c15e59f401eafbfa92fcf32e19fb5367b2c4f306ce9ffa64b55496f8cff2d01f0fcc7fa32fd2fc7e4359f4db8d2cf5db4bb2c4771bf5514f4437e5b4bca38cf5f29a2cf1df2f81a197dcb6725a3e80bfa09ef086caa9dee84a7c35eb55e14e8b2cf54febcab25f36228bbe5861fca93756276559ffa27f0b581faf303e05e899d58e2cebdf01ecb9483df3ad2cebe53a59f2f7615f451c6fe191ed34bd9705f3f85bb2a4cf61cf45e8a325e66be95dd2976bb293eaa14501fc259cc57c54fd84f357fd345116bdc0faa1a732f0af463f49febcb2e41f91a13feeca928ef134fa498e9f5596f42a19e55d6549ff248bbec8607ca8a7b26f64940f9425dd23a3fc4d39d52f59f82f935dcac7ca52de27a37c5f392d6fc11ea9bf32aeb294df93513e5216fd84fa8c1e93f4b1b294cf91a10737ca727cc44b9bfa714446fe9d729a3fc4fcb271be1e8f8ff3b37d65d17fa8dfc1f9380b32da8ffa1cb4a795da474ef77bf63e18fa281e83a177e2bb721a4fb75932f60b66c2d477514b59f267c8d0574365493f81d19e60ad2c7ac622a3fc5d59d26330f45cc0fab9fff4a32c7a3202f37a51958cfadbcaa28fba64d10febbab0eecf1495450f2ec892dfef294b7cc5f9e470be76818ce38dc9d063aeb2e805f4778e7a76ae2cfbf1cc8ff30f7bca72fe3932eaf79445eff1fc10bff7982fd47b4e958cf2beb294cf93a1672c65d99f4679ea3de74b59d2b36429bf47ffe87ed1a7b2e8c32919c7cb2acb7e7e972cf1db298371bece8b8cfda68cb2e83f8f2cf1d9c1f9ea7ed2818cfdfe0fe534fd80f3a53e733d65d9ef3a91a18f66ca697bbd1a18e7e7ef9565bf6a4e863eb295456f54c8d2fe32ce9f7acd5a2acbf5c4882cf52d3e9465ffe340c6f5c23359f4c3ed0d4cbd5f5096f1bd91a5fefa5e59ea677dd0732bad4ff4903310a69ef3eaca697a74254bf9f645394dafa03f8d9e93f5504b59f4e81759ca87b1b2e8bf4fb29cef05fec5c897b4be6b4d39cdbfdf93b19fd555167dc57457d20f3565197fb607fb53739e2ff4d71dfe87fad1ee28cb7ed98b2ce5c76732ca637ee6b9dfb65596e3bb645c0fce2b8bfe1e92451f6e317fa927672fe534ffc4218b1e7cacc038bfc93b59f4e315ed2ba0fda78cb2f4df1b598e3fef29a7f5afa664a9eff20d46fb5735b2e48f7ec892dfba2aa7e916e64301ed5ff5c168ef7449865e3c28a7fa701e90457f5e703e45b4b77d25432f2fc8a8ef4296f233f40ff5ab87f12de27ad06a03863e5de1f825eae133197ab6a1eca6f9d19e12f4f00af65b2a897ecdd864d18f73cce7922be9ce4e39ad2fbb2443afce95451fb13dd0b74bcc0f0bfa7939514eebcb5864d43755167d3626433f3e95d3f425f404f56f76a02ce57b64943f2a4b7a992cfa6c81fe32fa57faa7a22cf9fb64d4775296f41b59ea0b4b600ff5b17dd4c35d6529ef90a167efcaa9fecb60bea81ef695a57c4846794f59f429e6939d97f3714f64d4575496f13c90a177d7caa25f593ffac33b28a7e56d4d477b2ecad21e1e0ffde1579565ffb449c67e6c4b59ca633e513ffb2e197adb564ef37b980fd4d301c6db417b36321f4bd4d31b1b0c3d7da828a77a6a2fe757a27e5e379525dd05432fc65365d1734bb2e8bd6808a61eae90713d700ca6fe9d90513ea79ca6afe5fc4ad4bbe153598eef92459f850118ed093d65399e4d96fcde5259ae2f2ec0d0ab4e8d0c3d7d5516bd5920637ff30b4c7d7621e3fa1dfa97fa32b495459f6cc1bc1ebe514edbb31b92a53d0f5f59f4dc2719f55794456f92d1fed3912cf9abbfb09c5f890cbdf201c6f9b436ca727cd10725ee0fda17b2a46fa764e83b8cb7ee079694d3fcad0119d7272fca72fdab01e6fd220b32ea7f29cb7e9ce6177df1e2f1a99ffbca72bf0e8f07bd388f95458f75c8d08b0b65d12712ef4b5f387feb9d8cfe6c2a8bdef924430f1d95451fdec0d08fd687b2b4674d96f213b487fa705a564ef38f1e64e8f391b25c4fed9045afb470fed48b765b59aecf0ec8a2977a120f4af97739defd4096f2e7bcb2e8eb902ce51dcc77eabff05339cd7ffb01a3fdaf0fe534fdbc21a33d0565d97f0dc8a2df466db2e8a91bec2b8ff39b2dc952df3eaf2ce3d7204b7d65d81bf5a31391b11f5a504ef556780643cfee77ca69faf444c6fd3c3330dabfc92acbf563870cfd38208b9ef3e01f0bbcde9c214bfdc141394db7d19fd487bb1e18fa7479238bfe6b62bc8ae8cf68a42cf9c764e83dd86b11fad5f9514ef5e2ec4296fa239c9feac92559ea9bcdc15fa23f67b0bf128fb726637f14fe9efa30e328a7f17985f94f3de81cc8d06fdfca12ff2b64d10716fa9b7acfd92a8bfe5990a1679eca69ba87f1b72cb477a52c7ab44e46fb7bcad29e2c19faed4516bdb1ba83a9f71aca52be4c46fba6caa2b742b2d4e7c37eec1cf4758d8cf24765492f90511ef551ef792d32ca3f94a5fc8b8cf2b06fea3b7bac2cface2543df9595533de5c0bea8e79c25197aaea69ce68f319e0ececf8f94a5fd5d32aea71f95d3f26bcc0f07e7e7c7645c5fff5096e3b13cda1f2c94d3f408f6eca07ddbb4bf3edea907371d65d17b7361d5830de5347dd3268bbe3ac660eac3b9729a3ff2c8927fcdfcd087d13b59d23b3965d99f6d82a9174764ecff1694450fbe09532f460365b91fe041869eeb9025fe974330f5a3af2ce5b364ec3fd6c8d05b2c8ff6471732f21795451f8ec8d0876d65b9be4b76a47cd453167d9527a37c4759f41bcf1ffa659311e6fe67f0a92cf9bfc8381f4759da53254b7df1068cf1de1cc8d8affe5696f22b32daeb284b7a832cf5bb4b30ef7fbc9351bea12ce59b64dc8fd65516bd7803a3bf624759fa3347c6fede5af813f6605fc9c87f264bfee15059f40ee6e727ceffc6749cff6047863e2b2aa7e59fb017ee97366664ecb73acaa267f7609cdfe2a92cd7eb351dfb853765d18f6d32f4e74959f4ec8f30f5ac5b24438fae94452f29439fd594d3f4f107187a76fa5296f24f32ee1f44fba967274b65695f8e2cf9bdb1b2ecff75c8a2c7466c8f8bfac6caa2b72b64dc1ff8a92cfad127e37ef1908cfd48d803f5ef644e467defcab2ff5c25e379932359f4d9a004c6f9dc466439fe730a467be2a1b21c3f43865eac0b539fbeaaca69feea020cbd7dda91a53d33f85beac7c98a2c7a6f8bf12a42efae43b2a4af26caf2fc0ace877ab28cf12942cfda0bb2e83dab4f163d68dd94d3f41dfc7d11faf5c0fcd0976e4739cdef5cc9a82f22cbfee302f3a184fd4ebf4896e3592159f2bb57e5549f9de14f4a687fc321cbf1326f64291fc1bf95d09ed54059ee7f447f703f32bb228b5e1a203e58688fb327438f6dc9d053f02faa1f4b64e8d78cb2940fc8d08f387fcb93f62c2e64a96fd55416fde59071fc8db2e8e10319fb7715e554cf4ce0dfed9c1c6f1591e57876a82ced6d91713c2d8ff3c993e57873f86fa33fd3fadc2f6569ff888cfa9aca52df848cf6dbcab2ff88f3b5a1cf8333197a355096e3b13eead5a1b2e83bf4a78dfe9e1795457f1ec952bf7b5696fdd41c19fab6aa2c7a12fd4f7deb9c94a5fc9a8cf20d65d1b7e84f07fd19b33cfacfed91a5bcd75196f22e18fd131694a5ffbec9d0ff6fca52be0cc6f946ca923f5a2a4b7e8cb78bf38b666449df891ed4fdd5a3af2cfa55f48aeea76e6f64d197873218fa697b254bfa7e0686fe89276449df3860e8e14d4b59f498d8afee9f6ecfca697ad32243affd80a177d77db2a4dfeb60eadb3619fa7443867eec82a95f0365797e624b46fe9ab23caf86f653af86dfca52be4bc6f5e9beb2e8c13a19fab708c6f9c4aeb2e46f91a5bee8a02ce96532f4e914ccf5cc898cf24765692fdb07fdb6d981d11feb1519fad45696f23119c747fe4fccafb8419674ff038cf9b55e92f1fc709e0cfde32b8b3ebb9171ff01c68ffa73f2a12cfb8957b2e4ef57c0d09313f197baff69bd298bde3a90911ff35df5e15559f4cc940c7d88f3a13e1c87ca52ff830cfdf5a12ce7fb09861e1c7f294b7a818cf24fe534fdc2f383fe1a61be50ff8d9e64b477ad2cfadb238bde19637ee479be3332ee37ad2aa7e9b50119d7db615f799cff7843c6f14bca727ccd2fe5bbf05f799c7ff34196fc1df1d7a502dadfed90a5fd5b8c07f7332703b2e8bf368e5f803e1d8ec9789e7a4596fc55d82baf57afbec9b89f74a72ce9684f11f7772ee0dfb81f795c2ba7f97d1c8ffa30c67ce3fea297278b1e9b58ca69fa0bf65f827eddd4c852dfacac9ce6b77b64d4f74d16bdf6e2f1b05fbb667dd08b5bcccf12f46b1c90a1275764d19f4bd88b85f6bb2119fa70ac2cfb894bb2ec3776d11faa272fca69fef13759f29f309f2c4b8ee7d7c9d8affc24436fce95d3787b823d183d29fba513e5b4bce593a5bcc7f3417c3f61be187d287a70a09c9677d664296fbd9445cfecc8b83e8bf1b3f372bebb2a59ea732f64e8cf4859f460878cebcd81b2b417f1dc46ffd843b2948f783ce89fe8a92cf5b7c9d03fefcaa95e59623ca90f371765d9df3c93a13fa7caa21f4b64a9ff84fe73d07fd14439cd1fefc868ef4b59fa372663fff2a29cb6f78cf174d07f518d0cfd375696f64fc9d09f7565d1c7387f07fd39e991a5beb5a32ce39d27e37e8883b2d4c7f347ffac9f64e43f2aa7f98ff00f2efa63fd224bfef8a02cfa13c777713e9b97b2d497a67fea7eeef94b98fbb7c712197a330bc67eed6eac2c7ab14bc6fe6e4159ae3fff80a177364d32f6775b60e8d19a254cfd197bca527e0246fd9b982cfaac7a02436fc60b32f4ea50599e47bd81a9373f94453ff964ecbfc5ca69faab2e4cbdb93e298bfeeb90a1cf32ca928efea19e8c4a64e8db97b25cdf46fff27a7cfc4146fd96b2d4b7234b3cee94c1d48b5565c9bf26e3f9e548392dbfd90bf3fed0b84e96fc9dbcb2dcdfa8f9453f9c0230e6cf9de9bcffb54796fc1dcc17ea47ff13cce7f756ca723f31e6c717f4ed53197af00e86be997d93458fb4bfc8d043682ff5db64a82cfa03e369f45a5affa8a22cfaa94886fecb298bbec3f852af0db364c93f9c2b8bdeda90f1bc70a02ccfe3623e53bf0d6db2d4d72c28a7e9fd3619fb911159f452cf0543cf35bec9789efa1796e7addec8525f93e7037dd6c4f916d01ffd96b2940fc828df5196e363bc0be88fc60f59f25742e534bd7e06e3fafd3847163dd7807d533f5630dfb8ff38382bcbf3cab0ef22f46819e34b7de8c464d15f5d8c4711fb9de53a19e50bca72bd9df5419f856bb2e8a117f297a05f9f39e5b4fcab4896e3bfaecaa2372f64d487f3a3deb44a64497f2cc1389f87ab2cf7678ec9a2670f383feacbc7802cf58d0fcaa28f9b64d187cfadb085f6060fb2a4677ec8a2cff6b0570bfba93ecb436f663ec8a2371e988f9625e976868cfb43df95533db5467f589ee4bf4d95d3f4934f96f2d7a7729a7e9991e5f8ad91b09d93fada79e534fffe870cfdd95796f46f32f4675739d51307f4a7d19769baffad2cfa704696f2bb9ab25cafef90b13ff945163d71443cb1d15f7e4139ad7fcbe3419f3bbfb0ec475a64a9ff8cfea5bedcfe28a7f9b73e19fbc94f65d16f2bb2b4efec08534fba5db2940f4ecaa2bf2c32f454a89ceaa529ec83fb8f615e59da179371fdbda62cfa734146fb703ed49331eb477fc47b32aedf7f2aa7ed99c19e753f724e96fc7bcc5fea45bfa22c7abc4896fc3bf87f17ed3d74c8d0eb727c4baff74b7b2dee4f9e2d30f55f5159f45f0086de3b6595a5be1718f51f23b2e4df8d9425bfc4338b7a70f70dc6f177a1b2ec8f5ec8787f8c0fc6f1376bb2a46f1b60e8c1bda32ccfef487f5bd47bf15359f4d32719fa28a79ca66fc660b4671329cb7ede818cfdc0b3b2d45f248bdea8a17fa807d75332cae795452f7e91b19fb805430f461d65395e812cf1bf8ff1e2f5ecf5918cebfb3530dad7427bb95fd7b0c8d84f5a82b9bfe428cbf5d21fb02bf3a33a23438fb59545efa07ed5531332ea8f94456f603ca9973a59329e17ba90450fcc3e95d3783b447f531fb55f64e8a395b2b46746c6fd85b2beb10ad08b831719fa77a42cfb659a8ee74fb2ca72fdb74bc6f3cd7d30cebf5d5696fb33e764bc2f2ca32ce9ac1ffab07e5196ebbd7bb2f44f03f657c0f9d5eaca927f4596fcb5aa72dade4a878cfd3bcc0feab1d60718fb8395b6b28cc7822ce52bb067eab3eb9d8ce75330bfa8bf46cc8ffdbcb2e8538b7aaa8c74eed78543b2e88f2de61ff7db462de534fd5e01a3fed78d2ce95594a7fe79aec8926eafc9a217ac1e19f7f7e1fc2cec173e776429ff1893457f845fcab2bff64d861eca9125fe3d31ded44f9eaf2cfa624e163d10b13ee8a5db8c2cf5dfafca928ef2d43bc18c8ceb7f987fd437e1882ce9674f59f44c40967878c3fca65ed94764291fdc95a5fc832ce54f883f36dabf1a2aa7f51d5a64ec2f1694458ff078d03331ec93fb61c18f729a7f572163ffe75359f44b8e2cf1fa81f639d07bf71719fb6d75e5b47c38254bfd5b4f59f4494496fad75a3ff6b3606f0efa6fbb224b7dbba6b2d4d725434f227e38e89fb54f467f47caa2772c32f6ff6eca697b2e983f2efaefb220a3ff2aca727f6e968cf620debae89f9b4d96fcdb0fb2e4dfe694a53f36609cdfa6ac9ca6ef591ee773e892a1c75aca921ff57bd0a3a7349e7ee5a8b7ce9f60ecaf9df2645c0fbe80a1a78ea1b2e8ad800cbd5312e6fedb66a12c7a4ad3a15f7a60eabd2b197aea09a6de9a92513ea72ccf6f5b60b4673b5116fdf4264cbdb51e9145bfb46330af3f3794d3fcdd3519faec5d394dbfe2fc544f313ff7d7787ce8a7ea198cf63d3fc8d053a1b2d437234bf9c65e987a2aae90257d8df1d3f7dbacc888e71b30f45d7b4b46f9b3b2e88f3732de1f83f6f27aabfb2dccfdb32eeae7f5d336eaa33e8bd1dfaacf3264bc1f262b9c2fa1be1219fb6d981fd44b838bb2ecd7c464d1139d8130f5516baa2ce7e79125ffe0ae2cfb672332de0783e3531f0daecaa27f6664e8b51f65b9be89f329e07c3a1619ed1d2bcbfd7a3e19cfffd6c8a2277a4b30faa35924e37d3d0159ca57bf95e5f908d6073dd36d0917797fde0f19e53d6539fe090c7d550d94459fb13ee8ab2adac7fbed2a387fee6f55b2cab2ffd514e67e541ff6cdfda741952cfa29982acbfe15fa9bfb4f8f2e59f297d1bfd457cfbb729aff32264bfef64358f5d69a2ce9f14059d29764ec57c13f524f8d4fca69fcad3a605ccfb4b364495f7c91454fdc301e9687fdb73e19c73b28a7e5431e0f7ae485faec1cf4e49c2ce5ef67b2e45fdf95d3facae87f3b2ff9e33619fb51b1729affb8274bfcbf4c95255ef2f838df88c7a3fe5a91a1df5c65d15f9a5fe27783f5e1fcb73b32ce275016fd78244bfdeb0c59eaebe0fc1c9cff714b46fe87b2e8b13259cadfd1ff0efae7365196ebbd5db2d4b7a82a4bff4464a96fba52163df441c6fd632f309f3f1e28a7f9374f329eefce2b8b3ee1f9416f4563b2d4b7392bcbf5cc1f32f4cc4339adaf0f7f43bd750ac952dfa1ad2cfaaf47867e7295d3fa7a181f17fd710e94d3f2fb3732f4524359ae7fc21fb9e88f7d4c46fe0e98fb85e87f0fed3b8b7d5bbcbe79fa02434f9d3360e8a96d5759f6a7643ee8fed4be0f863e3a0460d4b72b2a4bfe23197a6caa2cfae40ac6f1b663b2a45f6c32de4783f672bf6af3a32c7aaa40c6fbf83e95452f91b95f152a8b5e7991f1fe7ba6f3faea858cfaf3caf23ee2988cf721d6c1389f474096f2ebbdb2e8a909197a0cc7d3eb933fca927f4cc6f5ca0618ed6faf95e5fcca64e4ff5096fdac0318e7d3ed91f17cc7bbb2e8a54f32eec71a81d1fe8ed893c5fbd3061118f17f83f1cfbfe3fda2186feaabc113ccfd27894fbaffd3fb5496fd2f1f4cfd3224e37ada988ce73de764e88b07187a6da08ceb774f65a9df26e37df518ff229f67e89025bd5e218b9ea8a17fa8476a0d32f4c81b18ed6d77c9923eaa2b4bfbdb605e8f137da1fb3d15d80ff549f30e86fe182ec9d027682ff5c47005867e19a13cf5c0ed5b59f40cfa5fe339e617e3f9fd4896f8fc189125de9c61cfbcdfe8d12363bfe54246bcc578303ebf583ff508c69ff17656214bfae4872cf5edd11f8ca7fb2d19fa00fdc178796890b1bf04ffe9401fdc4b64c4e3aab2acdf3364dc2f642bcbfddd7332e217cb33feb13d887771878cfc77e534be3c643d90ec2fa4ed69df94a53d0db294bfa3bcee273864ecb78464a9ff6681717ef72719f1b94296fa670b65b9ff09f6e4e2fc2e5932f63b1e64ec2fc8fa2ed95f90eb47f07f1eda734efb27ffcbfec20719d7734aca723d88e9888fe7ac30e3e1e141467c2b83b19f71b8284bfe0118f51f5e64949f28cbfbcb7c308e5fff5496fd891219e58bcaf2feda2f61beef777722633f62a42cefa76881110f371f643c7f87f3ff407baf4de5347fe34e46bc5a29cb7a9ef5717fe149463cfd524ed30775b2c4933b8ec778585b2acbf385e85fc6bfcd868cfb7fbe9453ffbcd6fc783eaf01467b6b6332e2d95159cacfc952be8ef632fef53364496fa03cefdfe96695e57a88a623ff198cfd8a6e9f8cf534fa93f7ffb4998ef83552967855a90aebfd3c77b2a477f760c43b17e75f407cdebe91f17d21983f852fbc9f05e75f40fceef7c9b83f674896fa878eb2dcbf342563ffe01d8cf3e977c9d88fc8284bfcc77817b1bfd16f2a4bbcc67815b99f01fb2aa2fca04c96785bd574694fb32dccfb531a3b329e67833d32be0e0361c6c319fadbac87539efe9071bf33ec9bf1708ce333de3dd17ec6b75a058cf8f5dc28cbf36075b2f8f72bf23b582f8f8f64f1afcf6f30e2d57143463c833f7350df13ed7719af8b64ac073fc9e2ef17aeb2a4bf93c55f8f591faf6f2c95d3fc471c9ff1e3915196fde71e18f1e1fa22e3fa7fac2cfbeba89feba5db828ce7a11eca125f703e1ed66b8382b2dc5f81f679bcdf358ddf795d5f9d7f9453fbb888bf31eb2bbcff7f4896f453812cfef6bc0073bffc5b59ec6f43c6fd01ef60c69b2759d2eb236589171f60b4ef7025e3fb68a43f74fdb5ed28cbfae848c67a6dac2cfbe15930e2cb2e43c6fb2aab607e3f4e4159e2514096fcbbb3b2b43f0f467b770b6549df92111f56ca52ff3b19efc7447f7ee27ceb3b6589371119f58d94657da6f9b11eac81f97d343fca123faf64c9bf43fbf8fc7b79ac2cf5b7c98837596589070332de17cff6e0fc2bb1b2c4e31719f73b34c952fe29f3df62fc6a5c94c5ffa23c9f57aa4d94a53d3b32e2db09ccf7310dc9b83f00e7cbfdf7d1802cfebb2cf1dce2fdaa833519cfef301debc30e8eaffbef5565391eeae7fe7a9fccfdf21c98ebcb2f329e27bf815db1cfde0719fbf92e19ef4b427b8a88afdd3219c73b28cbfba5f660c4db6e9d8c78d75396f68fc8f83e9a988cfb39311f351e2ec1e89f6e5559ce7743c6fa99edc3fe7427142ea1bd9d1f32d6b325b2e46f637e95189f3d32becfa74e96f8da81fd97a017da4c47ffb72232daf3ae2ce5dfc06c2ffc01f7c7873e18f1fa3913e6fa73d424237ea27ec6e34e178cf85eee91259eb7600f0eea2b3b60ac4ff70b6559bfc29e1cc4f769958cebbf5965d91f44ff733df73c2acbf31e6f64ac9f5a64ecafa23e17ebd793a52cf1da26cbf1e74d65d9df7d27e3fa3dce97ebbfc7948cf88dfa197faf65329ea77f2aa7f1748178e7e178ab1119d793313f3dc4fbfb4359e271dabec287c6e33761c6cb7d1d8cf5e065a02cebc177b2e46f309dfba53d32e2a547463c1c0a335eee4764493fcec05c2f9ec952dfe1ae2cf18cf5217eecd11ec6cb6d8f2cf59fcecab2be5c83d1fef60f19e5591fe3e55c59e2e5928cfbe57ee1d43e8f0de14fe8997a898cf83f21a3fe6f65896f5d32aefff694d3faf71530fae3782763fff643599e37617b185f313e1a4f3764ec6fb23d889f0fcc17c6c7cd4c59e2c74998ef87a90fc8781f4e1efc85f61cc988977365f1dfe84fde4fd87b2a4bbcbd92b1bfb900e3febdc1868cebebefca69fa0bccf8d9fe04f379e00719f7cfedc07c9f4a4016ffdb3d08f37a756b0b863fef62be73ff35ca82192f513fe35fbfa32cebc32659fcb7ff05463cec6dc988270e18edef4cc15c2f4664bcaf10ed29211e772232f2c35e189f7a47b2c4b7fe58d8e2fab008c6f5df32ec95fba515f49f9d13ee617e30de0c30bf195f1a980fdcbf2c233fe3c5a40f467c98d8caa9bfacc0bf71bdf67a90c53f6f4e64293fbb81110fae0fe534ffb446167ffb847fa17fdf3d95657d09fb71b17ebc97c958efad94255ec01e3cb4efe19025ffa0a89ca6cf7764f1f74dcc0f0ff1aa5d204b7b97b00f0ffb8d43cc4fc68b39fc958ff87291f967f3fb422f1d32ee47ca81192f94c57f5f5a60debf9425235eb8c2ba9e5a93111fa6607ebfd6858cf83007e3f84d96e7f5b62219fb791930afb739645c9fda92e12f914e7fddb89125fdd607737d3727637d375496f8e193b19e7880b91e0dc852fede5296eb6d6b32f6df0a60b4ff1192b19e03d33f372764f8df85b2e8cb2119cf77693abe3f2a02c37f0f3764ac97bec058df0c1a64d4375796fada60bc7fa155524ed3cb3c1efcf9f8a99ca63fc5ffd8f4e7953519fdd35016ffbf03a3fd3d96e7fb6247cae23ff760beaf6040c6f365122f6dbedfb55301f379be2518d7a78e122fece217fcff9e8cfbbf7b64d1efee1bb824f9bb0d32fc734846bcc1f1e9ef7dd8a3fa77978cf5d19a8cf5c10c8ceb73ed2a18f1ab83f950c27aa8f34dc6f7d57f90f17d56980f8c0fb53e59ceaf85f2168fd7204b7d2db4d7f2849b2d32ee3f427efaf75b962cfeb36c83e1cf9b7930afaf4cc8f0d7b06ffadbe655394d6f321d7afce692b19ff7a69cfacf81c44bdbe7fd9fe9f9163ff87d3c973619fabb0b863f3badc078bee65022c37f3a64f84be4d7eb1f3932fc711f0cff79fc5496fd18a6b3fe2f32fc99a6437f378455dfeec892bf3e5616ff5604f37ac55059d27d30f7bb0eca527f4416fb3d5dc068df2d5616bdbf10fe427b0ea1b25cef3f93e12f519e7af5f14e86bfdb29cbfd785730de3ff32c2bcbfece848cfdfc1919efefc3f9d0ff35a7caf27e17655cdf1893a57cf526cceb1b8d2919d7779acae2ff5a60f8ebda4c599eb7ed93a1af3760f8efce4959f2f7c8b85f33a72cfeb30e46fbeb1d32f4725f59f21784e94ffb1618fe717421e37ec70718feaf7753167ff302c35f4f3e95c57f8179ffc1b4a42ce9183fea650ff3a384eb4121e64309febcb322c39f55c852ffec8b2cfeab8bf129e1facf6246c6fbba313f4ab83fd77d27cbf1e663329eb75d0a5b685f674dc6fb776a60bebfbb41c67ecd1bd892f6b7703eea7fabc2761ed787ca64696f03edb52df867cc47de4f5071c1d0fb3d1b8ceb3715b08beb35e58eb2e87f9477a1ffcb1930fcf9eb4916fffd447f514fafda64f1c74fd82ffd79fb0e869e6f8d95d3f4c58d2cfebe87f9c9fd9786ab2cfe1ff642ffdf873d505f5f53bd59fc451f7f08ebf7d3be83a10f8f1659fcd9790446f9d35c59f4f88c8ceb299a0e7fbd27c3bfcafcb4e9cf0f4532fce74d394d3fe1f89fd4e77932e2454559d6ff7530dadffe5616ffef82e1cf0f627f36fd777dad2cfb356db2f8bfd310fc85feaa92111f9fcaa2ff5d32fc7b8e2cfeeacefae1df9b1be5347dc3f2f08ff5080c7fde8d95257f9f8cf7436c9545cfa2ffe8bfdb7b65d1935b32fc670b0c7fdd46fbe97feb4c87bfed8bbddadcef9fc464e8d73318f5756764e8cb2518fe76ba5796f7c18660f8d7b1c45f9bf77fcd4e60eec763bc78bdb983f6d07f6e0361fab3768b0cffb420c3bf61bca81f973619f74363fe5816de5f7223e3fde153b027dcfa21e37d13b04ffabb960fb6b0fff14ec6fd6615e5d41fd6cb64d92faf3fc0d0b3558947b683fd912afac3c1f37ad5b5b2f8cb0118fb2315d18346efc23f76c1b89e5d86ff507f29fe4ef5ee0bede3fec1f45b59f623d0dff4871df1cf36fd5903e93ef617ae697b4b9f5c9f9f7264b1c74b1d0cff743d9361af1965b1e76f61faa7e31b59f2376330f4ecb540869edc2a8bbf417b546f7e288bbeed92b1deef81797dd523c35f39cae23f8fc2f457873c19fba90332ec3d02c33f6dcb64accf57e012daf720633ff3a09ce6dfc564f827b4efcb85bf9f91e19f3cb2e45f77c8f02f4b61aeb7f75732fcd9a7b2ac970f643c4f7c03437fee2c6539bf37329e971981713e8d0919e55d65d18733b2f8b7da05cce77172caa2c7bfc9d0bb981f7c1ea9de26e3fae28a8cf7e1e078fabe9a2e19fe32a32ccfcf603c78ff4faf4ec6f337e85f5e2fed5a64f8e783b2f8575b98cfff54a7601cbfbf258bff9ab494453fa3bdbc7f763a278bffea63bca85f7b4361aedf5d32f46f0bed37eb73f97e3f970c7d89f6da39f8cf9c725a5fb306a67f0dc9787f21ecc986bf6e3964dc8f84f963e3f99b06fadb41fdb53619fe17e7e7e4f1bccd8e0c7f0b7f40ff5b1991459fd69ac22eee5faae694e5f921b4dfc5f5d34a4f59fc33dac3eb8515d89f0b3d5cee93c57fd771febabf5b0443aff6301fa947c7a88ffaf39aea9792c3fdd44b0fccfd52e92f87f77f5c2330f60bae0765f1670532be5fe004e6f3039f64f8bf2f32d6ef3330fce72eaf2cfe7d214cff79df82a1e7f61d65c93f01c33fde71bef477b51519fbbb3619cf0bcafc73f2efb83f24244bfef35639cdbf7d9171bf7f5359fcdf9e0c7f3604c39f8fa664b1f707cbc39f37c6cae20f2232fced890c7ff700c3df3dd6caa21f5b64dc8ff8a52cd7bf783ef02f3589c78ebebf220786ffaede9565bf7642c6f3953b30f607da2765e99f3c19cf0b3495454faec9d80fc478f3fe92ae4d46fe0d19fe4ae2a743ff38ec93e10f2365f9be0517ccfb496c32f61b9a643c1f89f3d3fdd73959d2076f60e8dbb9c44b87cf13cc31febc3f72d926e3fd0c983f764efcddb24916ffd27a07e7c5bf2d3d32fc25ec95feb2dd214b7a2b00437fb6509efeb29123c39f62be38a8bf8ef9e250cfdec9d2fe3aced7c1f9d47aca723f27e623fd6505e343ff58c5f870bd5fe992c51f36d05eead72ac68bfeef9cf6afa57af1f446c6f3e23b30afa7ff90c5bf5c8f60f8b3f3044c7dba5496fabec8f06f48e7faf55203c37fddbacaa227dfc1b0ffc349399d8fd710ece2fad097b2dc9fb716a67fdabd91717dc60773bdfb41c6f77d8cc138fee59d0cfd7456167f159361df685f1efeb5f6ad9ce63fb864ec3f5ec9f0474765597fa37d05f8dfc352394dbf6dc8a8cf56167f7827e379a6adb2f827e6873f3b649425fd44c67e6d4559ea673aef1f2893c55f8ce664bcefaf0ae6fb759ecae29fdfc952fe5910e6fd00ed1159fc4d3b0b467b26cccfef53c1fca77f1a2dc8f08f3565f9bec11918fe7374228b3f187484793ff8e48b8cf53cec83f7834f5bcab21fc8fcd8dfecdd95653f14e3437d393a80713fc10cf5f17eb539fa97cf5bcf67ca927e13e6fde52d0b0cff379f90c5ffb87b30d6ff59cc0713c0e5fe27cc37fabb06eccdc1f19a756197fe724b863e2c90a11fd19f2ef6431b4ca7ffcb83a137ab38be8bfbe3aaefcaa2173d61eac1f200ccfbc3c51e8dbe829edb93b17e8e94c55f8a3f54fd75a980e1bf4e0b70097aac49c6fab005867f3acec9b067195fd55b8f1619cfbf7c82b9ff3606a3fc6ba32cfe91e5e15f8e622f0efdc55359d2f73565f1975332be1f09fd55805e7bf6c9d05739b2e43fa0bf0af097a7abb2f8937732ea8fc168efb5ad2cfeaf43c6f78fde94d3f47343b888f36b76c9584f1fc952fef1a12cfae60c46fba73b32ee2fed81e13ffa5765d14b6d32fc419e2cf65d7d8079ffd4960c7f82fee2f32413cc1fbe9f6b6c91a5bec94e59fc03ce4fef676d29cbf39ba84ffd85f8cb441f895e6a91c59ee64f30f22f601f7cde645e5596ef5f42fb1de8ab26c6c3c5fab281f9eb623d59c3f8a83da33f68bf95a1b087fb8daee97ac536fa01ebb32518f676a92a8b3e1982a10ff66d65299f13a6bd5d3fc9b87e19284b7ced80a1172e4f308e776b9361cf1f64dc7fbf06c35e9f4365d11b13618def1b65b1378f8cf8fca92c7a620b867d1e9b64d8f79d2cf3ef85f6d03e1f0d6559bfa0fdb4bfd71b19f6b3514ed32b6561da5bf9938cfdf9aeb2a4a3ff8ad017d50919fb4f2565e91fe687bfa88e9465bd7a22633f6aae2cef136e93f1fcf5018cfda4674d59aee7edc9927f5820e37d2c685f89fb4d59329ebf5e2bcbf3d90b32fc411f0cfff2ea90a5fc78ae2cfae94c167b1fcfc05c5f75c9b8df9dedc3fb647a1530f7b33e94e57e758c27ef4fe935c8d0230e98fa254f86bf692b4bfb3260ec47f55a64c93fe881a157665965795e0ef39dcf8bcf703cbd3f12fd49bd327f80b19e9a63be3bd01b83900c7f6581a16fc617e5743f68e990b1df84f9a7fa04eda1ff6ac2dee8bfaa5fc21ef4cb358d77b64bfff0da8261ffaf1f61daeb73a02cfbbd3d30d63fe51719ef8faa2acb7aa40e46fd67995f6e11fea3525116ff6193a1af0330daf35a298b3fea91c51ecf3b6589bf2330da571d90b17f8bf6f37993ca5359ea2f92f17e2bf41fefc77d6cc978ffe65e59e2b103c67e455f19d7a3dec0b09f3eeb47bc3e76c1684f794616fb18f6c8b08f2919fb0962af2eafc70d2660ee97ec9565bf7b4596e38fb3ca52bfa6e37de7689f85eb6dfd4fb2a44f3bcaf2bc691b0cfb9a94c8621f238c1fef479e59ca62ef9a2ef9e70b30f637665d6579bf42014c7b9478edd21ebb7965c95f22435f607ef0fe88c5942ce9b3104cfbcf8071bc6b6a4fce17e3f9f50d8cfd85eb828cf40f30ecebd6142e307dae2c7a340746fec39e0cbd3b0543cfdedf85a94f8f7532e2d95059fcc112ccfdc41c59f25f7e61897f1530ecbff2224bfedb5659d2f364b19f7d5559bedf9ec7e7f70b74c0389f4a918cf7ab8d95e57a749b2ce5ebb67089d7bf1cb2943f5594653eff90b1df5906a33f8e2d32e2fd8f725a7eff24239e4ec0d4e70d32ded7c6f671bfa14e867fc891b11f88fa2dde9f755216fd7020237e97c8785f6e160c7b1f2dc9b05fcc1f8d9f55b2d863e70246fcec1495c5be95c5de865d61daf3644f167be9afc1580fcc6c32ecbba39ce66f67c0b8be3fbc9051ff810cfbf6c17cff8a4b167b1ea13efa877e41599ebfdb9325ffb0a19ca64ffb603e9f07fbe5f5a981a72cc7ef81f97c5d46599ea7b890f17da29630f767a7e81fde4f3bc7fce0fd56159cafef63ff55ec43e3fd4dc6d3a5debfb59425bd06e67aa34c16fbbb55c0d013e72e98fe2612a6bf390fc8488f95455fa03ce3fdd3554ed32f0f30fcdbb9a72cfe6f4616ff72f1c8d0d70e18eb89038f8ff87ab0c8623f77b16713cfa13f2265b1ff2119fe44f34b7db74fb21cffe0298b9ef8208b7d9feb60ae3f0a64a4637c4af0a7c71a59ea3bb03df097278c17fdc983ed813fa91d95657d3f25c31fc97c74e94f2e1f643c4ffb54167fb32043dfbf29cb7e1cda67e1fc6a4c87bfbcedc8b8bf7105867d8f8a64f1374d8c3fef07aafec272bfe7988cf58ec423a31f24bd7521e3fd54dfcab27e1891b1be3893f17e8c8ab2ecf76dc1b8fe339d90a197d09fbc3e3e53c6f5960318feb4bf21c3deb364dc8f89fee2f5a061890cffe690e15fd03f7c9fe2e44416ff31c278d05fcd8aca525f00c6f1c75565a9ef4696fa266765b99f53fc95cbfd985944467d7565395ff80b5eaf1fcc9425dd21e37857e5f4785df40faf57cdfa60b4b7d7234bf93ee6b387ebffd7f47c5dd553b78630fdd76107a61e1893c5feaf5330fcd3fd0d4cff182acb7aa246c6fe465598fea6fc20637f734a86bf5a80f93e609f8cf594a6e3faee4459ae2fefc8b83e6281f9be83bbb2f8f33d19d76febcae20f707e16da5bb993e578c71719f6fe4dc6fdcb6d30d7730e19fb29181fcbc2fd3e1932fc2debb350ff910c7bff04c35f0cb264acbffac2760eebb91118f7c30cc6cab23e71c978bef20ac6faa8f241c6fbec3a6499df2de6c7f5dff29c8cf54f4816ff33c17ca1bd0f8b64d487f9e2e0fef051960c7fd05516fb3d92c51e86182f5e5f198564ec674c95e5f85732fc475b59fc23e61fafcf8c2c32f4d7bbb2e82d8c2fafd70cfa64a4db609ccf624396f68f61afbc3e3db92ba7f6bdc478f1facde44196fc534b39cd3f8b853dbcdf60b606e378bd0118d77bfaa8cfc7f5f09bd88747ff71ee8361afd71919eba51798df6fac0c7b94fef2b8fea83cc832dfef0118f53fbb64d8cb1b19fac806a3fed7820c7b1a93b17ff0a59cceaf7353d882fea95b64941f91a5fc2b04c3be0fef64b1b7d38d8cef639b8369ef3f64ecbfb864a9ff10294bbc47ff599ee43f56c8927ed274e88d0219d70f5bc2c61f48fb7d65d12f5f64ecef2cc9288ffeb1f3f0bf5965e9bf0319f7db3dc178fea37c25430f9ec9787ff78e8cef871b93c57e1a383f1be7d7ec2bcbfb461a647cdf4aac2cf6ba2163bf66ab9cda6353e6bfe7e430ffba64bc1fdc03c31f55cb647c9f5e8f8ce345641c6f4546fc477be87f6ee83f07ed7ff595458f8dc9f037df64bc7f12f395fea673554eebef223ff5c7e8870c7f535396e71dd11e17fd3f2f93e15f2bca69fe619d2cfe628cfea05e19b7c878ff759f8cfce26f3dfaa7fe5e599e971f82d1befe9d8cfbcb313ed43fd3880cff95b6dfcb53ef5c7d30fcd5dd11a65eb9bb60e8fdbb0746feeb842cf6f040fd25eaa10a19f9591efee8fe2d4c7d715f81e11f4e0332f44c070cfbaf6dc992de792acb7ac727c35e0261dafbe18d2ce5bba1b2e89b3219f1fc06cec37ffec2f27d98683fedfd352363bdf6ae2cfaca254bfb4e5565596fa1fdb687e7eb1e64c95f2b0ad35e6f79b294bfedc9d80fda92c51e2e6730fc55f947392d7fbe92f1fc445759eeffcd81d1decb2719fae9a22cfa27268b3d341a608c57ad40467b589efebb26ece2fcee3d32de376c91f17d921365593f1cc972fc36fadfc5f9b56eca32de7b32d6772c0fbd322c93b1fec278f17ace90f5c15fbc6c30fced284fc6fecf4a59ee5f3e097b5c5ff5c9781f53858cf7230ec1dcbf1a9025ff4059f20fabcaf23cde180c7f3c75c9a81ffde9c19fcd0e64f89b1119efffd809fb68ef6c40c6fb9f1c65699f4f96fdae39ecc5e77a10f3c3c7f332f7544f78aa57ee3e19fe6509863eb9cfc0d01be537b2ccbf6706ece1fad08b0cfd93539678df16a63fb9ba60e88167160c7fd09e93a1577a6499eff56f30fc596d43867f78288bfd958469ffb5b5b2f8a32919f77768ba8cef710086ff7a313fd743ac1ff6d1bf288bbde17c1db4bf5126637fc75396fa94e5f8758c0fedfd72524ef31f3b64a9effa0b8b5efa22e37e308c87de1fd65196fde9888cfb5deb60daff5d59eadf93a1bfaa609ccfad40c6f7913495456fb864395e0ded75713ed5a6725a5fdb21637f7c4a167bbe603c3c9e5f5559dec73320637f69a92cfee6930c7f955316fb5d93619f3f603e5fdc264b7aed038cf3add6c858cf8d94c59f84641cff4b393dfec82163fd555416ff017bf078ffd09bb2f4d78c8cf5e2938cf3f95696fa241e7a3edf77712263fd18284bfb5c32f496af2cfe734786ffaa28a7cf8b7430bf7cf4df6240c6fb60e7caf2fd1f7d309e8f9ec6ca697a17fdc3eb038340394dbfa7f1c6cfab3fb4c0dcdf1a83e19f1e4f61ae8f1e0f30fcd9a94f167f719f80a16f6e3730fcd7cb13a63faac560fabb99b2f8b3104c7fd755167f33218bfd740365291f09f37ed1f349394dafe4c8623fe79bb2dc3fef83e1ff6a0159ea3bb695451f5dc8a8efae2cfe6d01863face595e5fa5f852ce52fb1b2e88d1fb2ccf7beaf2cd7a7b3609ebf47867fa8284b7d6732ee976b097b7c7e6b4e96f2d7aeb2947f2363fdf541c67ae8a59cda43b501e6fd7a9fcaf27d0c07b2d4773b2a8bbe989011ef4760f44ff94c86dee92a4bfa8a8cfd1e2d0f3de191f1beb3aab21c6f08e6f74ffcc2523fdb0b7f33ee90f13e31d81ffdcbbd4f96fcb7a2b23cff7b23433f8d95e579e10218fd55ad2b4b7bbec9f87ef7bcb29ccf808cf5e65059fae3872cfe64585396f72f303ffdb547467bf7cae25f35bfd4d73f28a7f595619fbe2fe5bb6f64e43f2acbf741887ff2a9bfee1961aec7ee5330fcd9ed4196f4cb5d59d6873730d61fd71159fccf03f91dec07ddc8582f5daecaa9fd9c341ddf575602e3788f1b59ca5f1de5b4fc614586be60fdf07f970b59eabf0464b1af1bd2b93eba0ec9f0873530da77b595a5fd9a8ef74d7594c5df58607e3fcb950cff775496fbeb343fd6434f65d1630119eff3cb82a9ef8a64bcdf7eac2cebd7902cf5df914e7f76ea90e1cf06caa2cf7c329e277d57167ddc03a33fae196539fe1759ca3f5bcaf23efb2a18fd716a9025ffe3a22cfacd21c39f3e9465bd5726e3fb60793cf4c7a94996faaf3d65696f44c67a74a42cfe45fca9efa33f4e7565d1479a8eefafd928cbfbbfd6647c5f5905ccfb17fb647cdfce43598e7f244bf9cb5659ceff45c6fb86351def036b83d19fe73219ef33d674b4374fc6f10acad29e13598e772b29cbfb1c0f601ffdcbf6fb38bfa7b27c9f1adb0f7f77292a4b7b766439de65af9c1e6f7cc966b25636f3fff7df593beb981f37eb998f9f0db2a1f91d64a36c6cfeb2363f9bec36bbcbeecdfff9265f903d648fd913f27bd973f692bd9a4f94bd65ef26e5613ecfec2b5bce56cca76cfe7633ff3ae6b79bad666bd9baf9344c2dc97192a335b3ad6c3bdb311fdfe4e8a69fa4fe5eb69f1d98cfd0941a19ae9a9f87f9ebd8fc6d929d6667e633cf2eb2cbeccafcfece2e93313167f3f387f89c4c8fbd994f35fdeda79f9ae99b9af9fd9ecd993ecb653fcc2736bd98e4eba7798fe6f399e649f27ea53d7ecce6cd788ccd18f4ccc735e98d6c215b34bf47664c923c2593bb64724afed85064b8653eb1613fada3674665607e0fccff0dcd279fad66b226259f1d6532d95ec64a47646e46636a3ef38c9dfc7f26f5fbff5f98e3ff96df8e99c9a1f93734b33e3433779fce61f9ed9bf99bcbb86644523bc978e62f619aff94da8c933d659251ec9a3e33f33b13649f19936ef2251f2f1365e24c6cacc84bed2ec8249651cdacd3b9df4deb3899d2c9e804a98d3866fc9cf4f7d1703fb33133e02dadbb6afe6f643ec67ecca88ccd380c3256666b7e8fcd886cb3e33f949d54d39e111b08d2dffbc45632bb741ec799bd1993f7ccc1fcbb31299bd45ede937ca687fb69fe6e669ff4606a3f77631baef9094dbe643477a92da57562f464de27bd9cd857d1cc7db29fda5e80d1ee27f5678e26cd359fe4772ff918fb19674eb493ccd9fc4e4668fc878a276223e9bccf1cb2a1f9f8b091c45662d333b1f9db3e7331d62271659fe649caadcdbffb349f9fc61bdfd8839fda5bc2495d89055c600723e37daec602123bf0523bba99b453eaad4ee9dfeed9cff4ef5e6a8bddccc3a474d3b26f699ce99a71d998fcbdd436a6693c313126f3fc83d94937f332e71aa61e24ce9433bee9c977f3ffc9dc36f691da429cdac92e892ba9277b4f7b7b9d71cd482523d24e472f32b695c4896ea692a99a4f2d53cf34cc4f33d3cab4339d4c3793f4e8d4f4602ff15099be990511e258e2053dcc84c47386998169c920b545d8a1e18af94bc58c4bc68c83955dc08b8dcde81cff48f1c48c4898199a8ff4469829a7f35be67862036bb187cc2833361f37f924b66246243223b2319fc4ae12db703293ccd48cc02c33cf2c32cbcc2af39df931bfdfccbf3f9977f37fb9cc8749fbcc7c65f29982e83bb10b63216b3346e9279bcc8a38534c6db49bb6cbd851c65849261919a30232a5ecd834df32bfe756d6fc7f26bbf823d9899979afccc38c446a1bc61e8ac656928f9b31cbec6cd2e3ebc476922f21b5dcccd872535bd9189bd999ffbb98bcaf64fe5a5ea665f95660855664c5d6dada585b6b67edad8375343f27eb6cfe72317fbf5ab7cc8f75b71ed6d37a659a628789cda523bd49ed30f196efa6057bb115fc3ea63653b1cac62e12fd956ab08c6555122ff6878a2776a600dbe826f66155cdb894cde792fe6d6faca16cd5ccdfeb56c36a667356cb6a5bc98a22ed3933161deb657533ef56cfea5b036b688dacb135b1a6d6cc9a5b0b6b69adac6febc77cdeac772b677da46f64c85b05ab68956c7370db329675ccbe5bd5642d94896cdb8cf72e8d59c64ecccfc4b4e395fc369f97b1c36eba76e9d98e69bc190b1357be8dadfcb1ecc44fcfd8f46ee2bf6c57ecc4f6c436d29ebf243664e6e9c1c48b5c3667fba917abda811dda911ddb6b7b636fed9dbdb70ff6d13ed967fb625fed9b7db71ff6d37ed965f3a9987fabe653b3eb76c35ada4dbb65b7ed8eddb57b76df1ed8437b648f2ddbb6adb6a97f644626678ee75bb5f4b803d32af97d349f69ba7619187b19641796977cec3fd4fa24892736e6a23dc9bccca81c12965149e247d23b699c718cef5f9bdeda2569f6d49ed9737b612fed95fd6dffd86ff6bb9db33fec4f3b7936a86017ed92638aa43f967e927f6dc749ef57f79dc07a7742277262333233676d3c99d176cec6f6cd8f398ed5322d38a4edf0533b9e64bba67dd3447b9911e9db4e76e06c9d9db3770e7f283b49e249159fa299973e6d443e99b1e1a2d5b0137f9fda8c73744eced9b93857e7e6dc9d87f3343f2fa7ec549caa5373ea4ec3f47cd369e94f1b9fa6d3319f669ada353f0df3d3b3eb4edf19384367e48c9d89337566b6edcc9d8dd57616c97c48dbf08bad1c8d9a7b98f8354de24af2717619cb8ccae18f144ffedc469ca5b19389b1132ff924b662e24823892de66768b4559ced3a2bebe97c3b3fce9b7574de9d9cf3e17c3a5ff6d3c91bbb28a4b6d0768ae65332cb90522214cc1232937c30421d7ccce8b8b6d3751dd7752aaee7fa6e602fdcd08ddcd85d1b05b17537aef9485c633c496cc58c8789f646599bd86265dd9d954d62cbffbc9db87bf7603e4777ff3f6e270fe30d92b89ec692f4e3b9a7c436e4b7b34cec23bb339ddbb2c7eed9bdb857f7669ddcbb35751fc6573dedaafb745fa98f6a8b4db865b762c6a568c6c18c8c199544c465d55e3a7f363ac676dcaa5b73eb6ec36dba2db7ed76ecbedb757b6e3f337207c656123bad261fd872cdd84ac57cccbac7584af23b59f774ff67e2891985a13b72c7eec49dba3377ee2ecc67e62edd95fbedfeb86fee7b3a42ffe6e35ac97926f1c34d6c241b1a5b39b8268224bf130d66bc9967e6eaceb6dd0ff7337d4ea0e0dc4dff15dd92973571a1ee65d211e9aa8d5866fe9b11719a5e229fede4c7e99a309c84622bfd29a63fc6969c9649ada69eaeee39f6d5fa486eccf57c638953dbb37d8929497ba47de9e798da88516b5e90d88c95f5c27fbf9d7891177b6b6f63ceabf50f7ebaded69d783befdf6a3bf6d8f47e3a07137bf10eeec96a9af8917ebc83e911331ee9889cbca377f2cedec5bb7a37b7e894ed92fbf2ee663cecd43eda699c28ba15ef6116e9a6f7cdfcb7bda75bd5d1e822c65b6ec58c44c57b7965ef958c8af96b62339657f1aa5ecdab7b0daf69cf8c4df66ddf1469658aa68dc96bb85b6678c7a69d494c19984f238d2fcd84ff7df1c4d8c69bbbf2daff702cfeeac7d8cfc4d8d3bfc966bc8ed53467ec27676607998755f7ba5ecf6ada766664b5cc68f8eec6ebbb676fe086ded01b79636be1bcbc8937f51ede0c31bb9bd88419819953f4e6dec25b7a2b6fe67d9b1fcbfb494728ebbd99889e3523b13223627ebcf7e4271d9daa977cebe687d33176d53551e9d3fbf4bebcbc57f08a8907cbeedc0fab656ce56846e3e1956c376d6fd178dbb13df64a665ccc08fd7becc4ddfbd9ffd636feca5290bb6b1653960900c77fdd4e7cc7777dcf1efbbe1ff8a133f3233ff69d44f39811312b447fed6e7dcfdff85b7f67b7fcbd7f703efda3d3730a6ec53f99f99deaa7b4ff7fcc78ccfdb37ff1afded4bff9f7f4af6fded358f8c3f0cd6880ac493f7b2bf3999ab19bfa6753f6e959fec37ffa0fefc34b6c2deb1fcd715e6ec72ffb15bf6aec64ec1cbdaebb36b366ec99d1496ddbd88e7b7296091bfb19ffebf1c4d8c7d85d19fdfe3bece3d72364e24e6a2fff8aad9839d834675b4cced6ac39c66ecfd849c7c4733b592324bfdd0fbfe6d74d0f35fca67ff05b4e4fe67af20a5933bfdfbcbb5df4db7edb5bf81dbfebf7ec4fbfef0f4c8ffff843efdb6f1b1b49462419899bb1ad453a1a0bff6a7e46fed8fc9ccd484efca9f977e6dafedcd85dc38ccac25ffa2bffdbff31fe6a62bbfe9b19979269dfdaac2dab56cd6a9831890de73213ff3d33f957edc4cff91fbf9afbffbd8dfc7964b1854d18fcf4bfdcc3bfd096aad7f5bd74cecdfcc0fc7f6227d5c47b793ddbf77ae6af79bfe017fd52900d329ee33e8d5d7493486ee6f733b09cba591d16bd855d0c6cd3bf3d7f1038c652cc98f85de3bf12bbb925d661c6eeed17fb08dcc0f32f81677efc2008c2200a2253d6e40de2601d6c9c7ab00d76c13e3804c7e0149c4ddf9f92b6791d3f486cc4aa3933afe3cc12dbc9bc8cfe2afc2bf1c4782c9bf1c3adfd4b7682f226be8cddc33fdb9ee062ecbf9bce3f37b111676ace3df65daf63dbc1d53906b7e01e3c8267f00acae98864cd8cb0921109aca0125483aa59b37ff9e3a066e6fdc5f4753d6804cda0152476734eacc77b939148ff4d7e0f9211093a66e42e6644ba5e36e805fd60e05fbc65300c46c13898786dbbea786ec96e05d36016cc4da4f333e360e1c7468fb9c95e43622beedab4bd64562cafccf49fb7936019accc1cff8b9efd6bfefd3f46af6cbce89fb3136766d6e8c63f8b8d04df899d98f9f76196700bafe7bf053f6644debc51f01ee4ecb299c1897632113df830fd17a763f2157c065fe6df2fd3c7cda069e7ccbf79f3ff056f11a45ecd8cc622f16fe9888cfdab1911932f70d27f4bc90582d00aedd0f1afa11112a11f06611846ae6357ed4b18876b3b76bbe1c6af865bdf35f6d135eb2613ed9d6562277690c693e09f8d27e1cec4f45f7ba2df6a13bf94f91b71c8ff08f7ff8cad180f90f865379973e1c1ebb81f493c31f6b1703fc2a3330d4fe139bc84d7f016de8d7d1b55eb56c38719914a32a7c3287cda5fe12b30231234c37258099cb01256837cd0f42f612df862fcf096c697a523627abe1e3ac98884f564044dfe86191133467edfa985adb01d76c26e1826231ef6c27e380887e1281c1b2fea9ad8f7e12c838b696fce7c6237e79e334d678531f9dd73d2ff3262fb9f1a8fbffaf93be5bd8d9ffb67ecc44f22e5da0fcca89cfc373f3263313176626c261c87536714cec2799009174edd1cb9e3d9c187f70c97c1247c2656627e8ac988183b31b33ed98e31bf9338e125facbfc3db594c04ec72589ecc9a85cc2d44652ef654627b4937f139f67c67715b682cff0dbfcfc846fe17b980b3fc2cff02bcc8785b0182cd23872b2eaa98d987687a5e0ec7ed9d37f269e445977f61771e0f769aeee5fe5ff9be3e2b5ddd1ef6d979f4f54a6e994953d315ae6181e6d3bca9808338dacc88e1ceb14b9dec471cdba41bc5612d9274125f282a1e9eb6a64062f0a83afb016ae4c9f7e465132f74d5fb7a3385adbf968e32d4237b0a3ad1997a51925137792118876c9bf6674cafe25da4771580e1ae1cafe8a0ee12a3a46a7e81c5d42df1c69e854a36b748beed1c339b9bde062c6c1aceced69e6e1ae93dfd1337ad9a3df6f27ff8d8dfc5a5375bd4ab20671672656d87f3b27b5d75f94dd78bbdf672761212a4715671a558d070b9ca3fb1165fc38f88e6a513d6ab8eda8696ce496ecbb277b206ed59f472da38c8626c20fbdb7f019b5cda874c25632c3cd02a7627a3699f15ffe355a9bbeed3ab5c0369aac18f582a253b3f349dc497bddfca4d69144a146d40f9a516cca9971493ed1c9d849371a04a368e8dd9da7778d46d1389a18d5656cc43d1b2572143b3156123b67b193df17477eb1917f640b5edbdba46bf46134c52ee4c1dbfb39b3d61fb94b77f15b2cca9dfbb9df632bd1ccf4ff3c7a450bafe47e7a9d68192dc363388e56d177f41335a337ff98ecf8ba691c4946c47cdecda89878e2fd44b9e823fa8cbea2bc8903aba0633c92198fa860fccf97e9f562548a82381b6da25ed48d7a7126f88a2df3f78219af756c9bdfc7e810148c6d35022776a2c8d8561c9d622b76c3efa81d7bd17b343073cf7572b19928916d8fa2851b271f67ea9ee3d0cd99d129c551f4fc7d76122cbded3f8a0332e7bd6d1cff23ed14af83a53b8a375c97fc83ba7e97068bb7c6522ae138dec57b3f1f1fe263b48c4ff139bec4d7f816ce8ddfeaa52bc4a6591fe6e27bd44aec446cc57bc68ff819bfe2725c3163d2323691c4faaf681dbea2aee9fd6ed48982a0186793f8602848fe1a57cd4f2daec7553322c6968c7f8be386fd99dac7d18cd4298927d125ba182b798f866615598f9b71cb89e276dcb187c69ea7f13eb10d3bb0eaf6d4d8f8d32bfd9e7862e6fae42ffa2cfbcbd8607dd2f53f7eebfe5534357169f567eb9b5f79af24ee98fa7ef37ac5993a276315afd8ac4ce283b190a3db8b7b713f1ec4437f1fe4fc71b26a97357b3c8ac7f1249e46eff12c9e2723132fe265bc8abfe39ff82dea261e2ace84adb862eca318e5e3f7a813e7cc4804a68fcfc9a884dff15bfc1185664c3ecdc8189b898d3a881b71dec49e7b12dfe3afd4462ef1221ac405732c2f2e86ef76352e7957abb44e6e97791abd1527b6e1c66b6b6d1bfb8e7f9f9df8d9744e77ffacd7fea20f937dab78fd7b6280b7777ffccc5fd5f697f577e3f837dbc96eed24761255d6ceda8dca6b2f9aaffd75b00ebdfa3a725ca364bf937d46b76a466464ace43d7a5fc7666c66a6bf5aebf57ab3deae77ebfdfa10954c24ef999ffcfa68d46c270acddfc2f0677d32cad6fcbb3ea563538a4af1c7fabcbe245128b6c26f13656e71debe25f6117f98bc460787e1fa6a94f6325cfa737f6ef4b7e3e4edf7f56d7d5f3feca9fbe5c6c1696d45d5686162fccbfc7efdf678e2e7fede9a5db497bb7287ffdc7e99b1853f8f2f7f6e7bdd646d1fee7e5b7df1def8ad6e385e3fc3c2fab52e9b9fcababaae790d7f613fd7756f6e2ce4c3ad061ffe7cdd58378d9dccd7ad786cfe6f1a4fd6ed7567dd5df78cff7a995eef1b4bd9469df5603d5c8fd6e3f5c458c4cffa10bfafa766f44ed1a7f98451693d5b5fd67363436fe6f3b15ec4d5f572bd5a7f9b91fc599b9f786114d7c8d8a1172e93ddfe78968c4adc5cbf0587f5bb198d9c59487e78a5752e38c57b7bbafe0c4ebfd54e929efbdb91446c2758fdf3d711dd631c8b4dfc4dfb6b79ebdf769dc539fbb5c456e2931991af757e5d5817d7a54dd66eb90dc7dd645c3bd9454ff496b18c99b190796c62fcc6dad8f17ce36cdc8d59166d824d183f375134302aacbd1ec73f9b78b3de6c8cf5243feb4d6446646aacc6e881e4f77a1a978d9d84e6ff2f9b6dd8deec36fbcd6193592fd6a760bc4ec7255c1acf784ffe75abd1301e191d5eb5df37c7cd697376bbae1905134f8671d7edfab5cd25eefed678b2b9feca46ba7f6623a37ff5fac7e6f617a3f2573fbefd5bead9dc378fcd33aafab5b5b3796dca9bcaa6baa96dea9b86e7985e48be60ac9aacdd933189ccca7dd3dcb436ed4d67d335e3d2dbf43783cdd0fc849bd1c6f4e666b2996e669bf966b1596e569befcd6addddfc98317bdbbc6f729b8ff568f319bf365febfde67393df148c1dbd99e0e0069f5177bd30a353dc94824a5c88061b3322dbec36b36927aa222e1a3bbd05bef5b9b5b67634de3a5bd79e26b369eb6dfde0b4f57f9b9db87b6ffd777baceb8e7eeff5c26df06b5bf17fbd46f9654c3e7e4b9c32e7146ea36dec76a3f976bddd6cb7dbdd76bf3d6c8f5ed5c97babf41aa15933f9f3ed291a6e9ced797bd95eb7b7ed7dfbd83eb7af6d795bd956b7b56d7ddbd83637936d6bdbde76b6dd6d6fdbdf0eb6c3cd6a3b4a7e36c1766c46a7b09d247e6ef395fcde5ed623e3af528d157aebebfa1a86c9b807a3b8102e8d774c3ce43d51df46e18db6197fbc9d6e67dbf976b15d6e57db787331ff7e6f7df3f9f96df1c4f457f6efedfdba3fbff7bac7e6e66db76fbf8e2b7fa5eafefc188b5fe7ff1bf1a4b375b7ef5b2fee79c56d6efbb1fddc7e6df3dbc2b6e855bd29ae93d89e1dcfb627e3ab9ccd743bd9968c957477d95d6667edec9db3ededdc9db7f377c12edc453be30a779bdd76b7dbed7787cd70dbda1d7727936bb4cb6c42333ae1eebcbb98f179db5d37ebf8b5bb25f1c3c4f4f1a614be45c375bc6e253ed28cc77c63af1bf138f162e9cfc379edeebbc7eeb95ded5edbef5d795771be77d5e0beabfd163b718fd86ffc8b792ceb8adfeaeb7ff9ecea5e25d9ffddd5ff3a2d5e2731eb6faf57bced7f1fafc2e9aee10d76cd7565d7dab5779d5d77d70bf6bbfe6eb01b3a85643f251d91625c4c66706c7adef4e5c8f47e7637de4d76d3dd6c37df2d76cbdd6af7bdfb317d3fdbbdedde77b9ddc7ee73f7b5cb9bd4c2aeb82bed0afbec3eb36d99cf68f3637e5b9be9de36a3f2b6778c759d8371b24b1fbeeddd6d331911e364e2bdbbb1f7dede332aefbef7e37b300c8c3c0fcffb301afb85edb7dddf47f6c09ed97d7bf65be289fbf6f77cbd3bfbbd5a6b73a3c6721751f657b6f2eeceff8ea5d4fefbbd62ffc7ac463adb781fef5a26206ff6dbfd6ebf0f328eb73fb8c93cf87fbbfbaee6449aa6cbfbfd1bdc137850ec557bef2ddc75d3066868ef23f6bf6f1648339a1964e67d9f8df8f6898a52016a35a84e9e3c99e540f3ec03f8f3e4acdcaaab9e1550ca34ceaaacce9aaccdba34cffa6cb889d99861199e11199951199d31199b71199f09e931133309c26539536e7ca6a62fd0aa999636999e199976350099e39501ad7a89d5ccbce8d7e3c54ab5cc8412a6870c31c6447c3939c78d67ddccccce9ccccdf6500f8fd697bec393bb963cc34400edfd2b8ebcd38c3bca7f7225509fb204b813e85fea899bcdce146032cf16d9325b65eb6c13301726db1e3747eec83f56038503e4edd067104a79d92e7bc95ef2695ae693dccbfdfc9807799847797c23f2537ece2f79925ff35b0e60e5795ee4655ee575dee46dde4169f22653f20e6a9f0f999a8fd90e220206fa1c223a88b4a12034722c61efa89877ce30399ee3172dec722227732aa773266751cd0e2715d5aff5e46cdcf3922763b9d1f26cfc4d1ef2c691d7b164947b98bf7305e87d7d82ca3d4ff98a933997e0d7ea92e67c2e40402ae652349e9617c66f8fe80817fece933d6082c7eaad063511b329f4ab9c61a9952bb99a6bb99e1bb9995bb90dd838b99beff3433ecbe7f902ca2d5fe6ab7c8dbc59bec9b7f92e7f29a6c5a4f0a0fac5b140cb0a95224ce32242b1dcad296250aaf8ca14a7842dcea02c6c71b975082ff063d6697e5cf96c9114d7e256c01fe52cf25c4596edbfe6497879de47e09bff6adcb6c8918efc917bfca12b45fe91d27ff57e4591cd4e9bdba528b3655115753cf3b9a2f17b1fc5d94cd1a2555af1f2368993cb163c975774a95ef4459f47c5508c0556e00551900555d00553b0f0882bf84228c4422a64284aa1165aa1174661165661174e46156eb12f0ec5ac98178b6259ac8a35b0a62c364574eb8a6daa16bbe2a59c826641dc0d8a73c8b1cc02d6d080997766fdc15b9693d22bfdf25806f1a10cb37d193d30f9dcc603f7831ebafdcdbaac9f3af267f99d2b81f14c4f8e42197ffe3ee5a93c97903066976c595ecb5b99965999974559222d29da7809c58bbd2b9b1c50345b5637253f96753a2b9bb22dbbb22f87722cb1122fc89228c9922ae99229d992839f7c299462299572a9946aa9957a699466699576e91487d22df7e5a19c95f3729189e5b25c95eb72536ecb5df992f7e5f62654d36a524d41b7ea2b5379b72ec720ce20a22ca42bffb64a89ea186daba00aabe06b3df91173fdc194ef8f43bdc55aeffddef1dd2a97dfd777058727f329ecd7b157155571b2ab4ed9bc3a57972aa9ae484d4ab4828b432be1d0ccfbdd73e1d7cb8dbe1ed26dbea96ef9aa4aabaccaaba22aabaaaaa16daab6eaaabe1aaab1c2a0a2160784f88aa8c88aaae88aa9d88aabf84aa8c44aaae44aa9d44aabf4caa8cccaaaeccaa9dc6a5f1d009d6535abe6d5a2dae743b5045c56e506a23cad5ae758ac5f8ed5a6da56bb1221f272d4e30ee2affd577a12281fce03ceff9623bfe437d3df7a5bf9797da0c0f54fe62ed17b7ef63ee529e7cefd99ace27a5a7af50430e98fe1710598b0a7bef61e3c3939976d72a8fdeba13ed641d6d5611d95621dd72748f72ed55827f515eaad4ec1a8d39f056153e775519775550a755d917553b7503bf8d9d7433dd6588dd7444dd6544dd74ccdd65ccd43156a11f1a796f2975aae16b5522b80cd1218a39fcb5aadb55acf1988b7cc0c22e2daa8cd2f79f2340e42bdf87d1d79324ff26ba6039af2ebbaae0fb8c946ebcfdeabb6921da071aeeddaa9dd7a5f1fea99df1fd7c723bcc7e2d4a3b1e0fb0c967ab1330ff23fbb0eea79bda897655fafea7549011a9b7a0b3f53c024834759bd7b6d0121e0cc501770d54bc934d392a98866d2788ddf1c9ba0a2eaae099ba8929bb83935e7d26a2e90cc5f9b1b54089521442b9ab238a4eba66a00c84c2cfaa639bf346dd3357db445f1563354e11b4f3eb3bd407beeb95064fa5fe888f08e2b423003447e8dd1fec8e81f1cfb7cdc2b17abf8dc27783336588337444326e7863a860d0d980047d0d80620a25ff58b7d631be6aad441c3365c315679c3370270640b7dbfbd33e4594901b1b4de0163faaa2fa96a68c446025ce4c62b494047a9db466db4466f8cc66cacc66e9cc66df6cda19935f366d12ca1ae0abb59379b669bd1cdae7939c6b74d3b6d27fea58c8a2c36aba0f972fe245a3d65891fa87fad234fb3ce67f93cfabb27335cec57394aeb65d764d74298d5066dd8466d8c3001a62086f2972e42735790c12787cbd09eda737b6993f6dadedab4cddabc2dda12f5f783137fe0f2f61ae2cd06ae0354ea735b0126800a680d53d215e0d2022c6ddb766ddf0eedd8622dde122dd95295dcd22dd3b22dd7f285de0aad589aadd4caadd2aaadd6eaadd10cad99b9adf5757ef22c06badbb6f2fcfa271cf9a1e97f8e9741cef1741c2b983f5f0b13de3ecd4fc46cd5da97aa755ab7ddb78776d6cea3dcefdb05e2c9a54323f4d7e36996b6d77392b6cb6b980755daaeda75bb69b780c90e74e4238e64edcb3b7c109740771a11bcd9b911011188d12aa29b16623745c880dab4dda4f33abf3b76411776511777a7eedc5d4abd4bba6b6175b71c82f12e83e4b3e8caaef22749d75a1db8c0cf791264af6b54fec0a46bffb37ce4d7bb3ce3c8e37d7fe1d74f0ccdcfdeb3ebbabe1b4e9b6eecb00eef880e7cd711039ea05d573c1a9345e3c1b7aaa33aba633ab6e332b2e34bbc4d3ba11321d492ea4d27dff523fdc18b67f576e70b70057e168dd42915dea9103173801151529dd64ddba639767a677466677576e7746eb7ef0eddac9b778b6ed9adba75c61644b7e9b6dd2ea7ba977eda1a6104a8980f4c3ecbbd9fef2701fbfe622cf8753ee443343ee6c8a3fde07dcdcfb8d906fda4f77abfc3fa631ff4a1b7ba307d741f5761d1ae3688832fa7a8a312b58ffb537fee2f7dd25ffb5b0fbeabcffabc2f50b4d59775f6563f2c08b3dd5d59205a46b8945c5f81dfbb42ec06b1425fd76b48569bbeedbb1e7ef4433ff6588ff7444ff6544ff74ccf667c9bf45cabf47c2ff4622ff572af9cca5eedbf386fe5237b8d269fef17f94d479e20f231471ef5039e589fbd6faff70654b3b77abb777ab7df17cd711da128853f7ac7e9691e2bb18658d21ffa593f4f837ed12ffb5555f5eb4eecebfeaee0af9af1194f762832be6b0ff0a41a4aae2efa6d853552d5f7750bc90d440034dc6fd7ef4aa17f19a67ddfb9c364f0067f380e417e18c2211ae2e1349c878bcf0fc9701d6ebd3ca4a772c886fc733d09f2e7e3b481f9710eff735ceba3f29db9c9cff8f9d1df0dc5500ee0e00790cba1bb99435f34f11130615054028810f125563b6a1886f12a0dd8800fc4400ed440d7ab811958e8e1edaf0a8f34e49d8efcca933b53deb80279653f706d055c8378fa810e30866f64d0fc0ef24bae1f071e5011866010076990076550076dd0076330076b487a67b06fdee00cee7fa627c0930ff68904f99b8ebce6231fae96847b7c12bb7da4279fed4f19f6c575380026b3613e2caa6b99bdf2e4be2bee8e899e34693b2c87d5b01e36c376d80d2fe3749c8cdee8577d8bfa78f31af16e1f79c90f2ff616733d6afa832b90e30fdc23df6fab7a031ab381f6dad7e311e2311ab8d28cc1188e513e1be3f1349e87002dc218afe32d77c674ccaed4988fc558f601805b8fcdd87e999f38cfed35fc404fde62adb7f55e9fee4bf9902baf63d17f94f0fa998e8ddd08c6388e23068ff09118c9a2f157a745e01f993b4fd4a4e9a8914ab2911e99911db991074484511ca5511e15c0e2f688a90085f4690496fe50fff4a7a6fcac284a86ba1955844a7d05eeadfbdda88dfa680026e6688df6e88ceeb81f0f853acec6f9b81897e36a5c8f9b71db0be30eeacb57f9c9ebdcc9ef7de363d367d747fec3bebfbb0fe523ae8497e7fc8a969f7d566c8279988f1db1000bb1e8a28414161fd77188563e06e0b700151d3b9d84b4ede361c4ced8054bb02b76c3522cc372ec9e9f60e52b4fde6bcbee952b0f6edc2beafd81fb59c165fe68efb57f7830ac42b158bdc6ea768335588b4100820d159fdfb0117445c3300c1fd71881911885d11883b1fd97fbe383fd079af02466fa2d1ff9b2200ea1f5f37fdafe7d44e7d9bca6fe19a7310ee331011331099331653030b5684ed3380afb23132fef3bd992f31c29ca6548524cc374ccc04c40c5c26cccc1dc7687ed1f1a817a1c9461f70b671ebc48df7e0f7eeaeeb15eb9f1932bbb1ff7005400a72b6496727dc10ea30198ccb079bbc2066c812db115b6f6dc5b866dc61cdb623bec059fe213dcfb8a27f1b3917a14c9fe61dfbfe5231facd5fae335341393fe3ede1bf97f70ed1b6b22711f13f023da1c8d47788c9fbc258636324cd15c3cf0448160c7ba8f79a9371a62af18bfe0097ec56f788a67788e1778d9499d548da82747a5ea3b68215f1feff6ffe0c72b2fd035a0247835dc5bece7f87123bd55f060cac0a17bf5395e8d125ee30ddee21ddee3033ee2180e11064ee0e4b8c3a9c1ba65388d33388b7338ffa59ecc7eedc9b7fd2681f3eb3adeb77ce44d47be81cccff287ae7cb476ff947dc6695cc0455cc2655c8156c54fb886eba7296ee066d4223c50bdaf0cd6cff3c7ba95ab7e1b70ab3fe036ee00322ebe1f45e8bb0a3fd497768bcffa1a8d6b010e0f1e6cfae21163b515e4ed2ccadf2bbcaf1a09a2df01a262c84faabe11113750dc35aa4857ea353ec717fd1a5fe2ab02c7d7f806dfb62b7c87bf10536212068447f8c49108708608a144c497fbb4b0e96ffdf9fa2cc463e7e775b7f875bdfdfb6b84df10f904975f75253cff5843fc1b4ffe5c17f6be1227e24c5c8884b81237222532223c2d899c40fb1ba68f53201e73f1c0930a1079b9e8090bad4e941d4d80d3c734a2215aa2237a6220c68627303064a21109b291080a45bac010bcc27a200f4137138229448285166a3305ffb41ed8aaa84ff5a53e111cc11342d5f66bc87d843623c43625a45c21644221544223747c4718841939843576b546d88443b8c49e3810b3aff424ccee36fbccb7ff62dbb7d96b4ef2364e35fd0591dff766fd5190aefce05cf38c4bf78cf1d335f6c49c58104b6245ac890db12576c48bcf90537212c35fc72ae2489cdcaae49094d7f3c54d92ebf23aab7d34bb05d520bd1b9f4dd15831e9e713f2480625311afd8e0c4bba531117205ba71a09b1038d9e9011199327f24c5e4a814cc82b792bdb822453e0c096ccb281cc51a44d16258e1e133259921559930dd9921dd9f70b722047cf253112277c6c4b12444c922445d2e437d677ddc7cd9f8cd25eaebfae4d7c1dcbfd9523af3f532a509fd8fe2ff7435c41baf2414e84ae587df639a707922159624572244f0aa4484a4448cafe8cc84925ec12eabe23eb9e9f902aa9913a6990e6c8901669271ce974f435b98af988d6a4002a2eb9270fe48c9c938b7e4730254d2e4baa534b865c3513724d6ec8ed18903bf2859a8e2635a13cca1f1dea98f154408554d45ea838cd8b8e3af5f38e231aea4c5da884ba6638754b8f540a6d3c60c484caa87c1ca8822aa90a00a981292e497f3d1f7fca3eeac7dfe7d1cfd3dfbcd5f4fd75104b7db896f28d0b482fe0fda6efeef1ee7e9f8d8fa1966aa896eaa89e1aa89114288cc2893d4550a4bf382d205f4c2edb58bf4c4f42a253144543612896e2289e12289192289952b21da5de784a4b8fddb56c283d9f530665f64dc1350265d5eb6e5af2944d6e28670c2897da0f3c75a8586a3604d83844d49c5aa46b3463452df3865ae532b5ce646a7353a82d20b2a576d44b6ab5e79b4c4fe949c7d01eedd3473aa0433a425bede81821427f63df6ff8fb98d78fbefa730d644abdb3f1c77a23efe71ce2d75c01ef7478b6c71bc560d1e4abb168fa4cb5f485eae984bed237f05e319d86144582f78a02f23487fc044f1ac0a404bf75a3330a4193432de892aee89a6ee896eec092f534a57bd26d387ca407724e8f3486d5344e1364489300263d063443b33437f8344f0bb438deba75e9d05239a7e5740ec98e9ccb6909c5465c211a5aa155a85a3da775daa04ef989da8e346d661bdaa26ddac14fb44befe903e80930e53beb85c17bfdf44aef740134e0f0473e337bdf9781f9ab6d072ae4e75f45c71f7028d0bffa9cf48c9ed30b7a49afe835bda1b7f48e7e61a6cc04378eeb3b2209e2ca797196cff2ad8ad533078fd03e2d0ded6d3cb38cc778b7fa46832593e07d2eed95f1c9fb21765042f25cf2484380210e13a1cdda5847f395dc25f55093cc99b9a46b7a52ac99244d3b36bd3057e6c6a40c880959303953f42b481676f074604ab267aa61c5d461c8344ccb744ccf0ccc48c7e0bd42e28bf1aef7f6fd2e5ff831bffe6cdcebdd1ce1b7d7397e81cd37c69151653006024a86642886a6570cc3b00cc7f09e81c56511ce621d30f1d08c7c382004ce2cda4157b445fb38db31208e7cb828da0b4465372a753b8e3ad31a23f42b46642402bbf30474a42e191930513a9b51bb39a3e57977abf4625fec99849e64727d2c3a46678c34604cc61a79c61ea78cc3b8cc9e39902933632ca263e6cc8259a61db362d6cc86b0992db3635ed82955b313e21bebbb7ee40b7ff8f7bb6f7ab2dff03c4531d8f3f99120fb509f3e2ddf5973c97aac8fc8c9866cc442b0c59e8803daf0c142c80b985ce021445f975decc54bb48e05ad9a80c451bda880ca96bd81712fc3e1c8b3199b5f0db6205b5a674bb6626bb61925b62570b68302490b3bb0238bb17869b0044b167aae17364bdd24f058f3a661694cc3ce49c232a4c9b27774168cc5a42c876fc88ce5598115598995598555598dd5d9096bb026f3c20cac85b8f2bdfd27bfcf8fff1cf30df167b975e48749e43f1fc30db2575df9326b796f01d1d3f1b55f2b6bb30eebb27b40e5c0ced839bb60a7ecb255d915bb3e2d101a910559ca80106137e8548ff382dd9e65f49affc2ee2e7eecc744780094baeba58fd91766c14d09919b701ee7e32577c4676ccb055c5857d4041d29818ddca9bbe63677a6a2bc6a1aead69eb80b517109773dd7dc8d4be9123bd306970d6b4c63742ea7d5b2e10aaee42aaee61aaee53aaea7f7dcc08dacc961f0792d76f2bdfd27418ee6e59feed14263bfdaef367c3f0f32ffe47eeadf9d3d11dec26facb9e4708ee0488ee2688ee1588ee37876ca0938cb8927eb7c09dde0789f6b5c5ebada43fba6ce75bce2a478057e0b9d32e81d85d3fc7c8db8d04b244e4e6b4e19594ee5344ee70cce6c7768acb711c9b0998e0167511e67e78786e51ccea5626ecf1db8195d276a47c5173483763f4b928f97899470dc9c5b9066bbe49629da8c5d722b6eedd5dc86db723bee8535f9293fe13de0c994f75f31f9922748073e1bebfd88135f69d477c72b3f5fd7f556f9231ff0211ff131daaacb5ff884bf123bfed6aa270bc55ea70e9d181cb5f1f2363d3997fec45e483e6577c763e886b3a8054cc223099ecde7333ee78b61c5977cc5d77cc3b77c57a7f5b5dea25944caea1bbee7077e1caf9c432bd4a5ac8b81a948ebccf3188ffbed914e5c9ee0c9131a3d00d5825862496a3c356c5ae946f034cf04e0c2788ee779811779899779058a0a2cb1f86f7fffc91f7be35fcbebbe7621d0ff668dfddf7125d89f8defdc97d7798337798bb77907d0317897dff3077ec6cf39d19f1d9751710cc22e56f805bf00eb2df9254ff22b7ecd6f001374f28a82cec139d7fc96dff12f02faf2054ff021fd0d84f0c77c4ada178d2444422c9cf0dd20e501e7d473e1cc54c2454884ab701352213b1eb99b900b0560b108071439b09b8b413a4299f542c5177e29d442c3344323b44227f4c28078c29ac2f87d3db96bc4fac339f63b2ad1f2efcedd42baf2d10ea0d7bb3eeefb655ef256054cc0050230390990320a343c670456e03045e0fd5c102e8c3f04d429bc9facb23c9f04519004595004f542207b46bb4f9346d0045d3004934b054bb005477085bd7010663f66b5766dd5d7345612c2bcbd090bb2ef97c292568495b01636c256d8092f473fa0e2e4c8172d44d90bb446f93424a0539995ee2899dd796b712a4e444ff4c5a31888a11881ca1bf45e18c5374cbe65dbf7731f3f9f67b7d06ed3cf74e4f736faf50c84df30799db737bfbb5f523c41427e162f62225ec59b988a99988b8558d23ba6132bb13e49111b6947129d252024c332e1f8426cc456ecc45e1cb804d3c451c4445c24045d24454a70455a644456e484c3cfb9c6beac37f55ae44b2257089515c86349d44bd2174a511045511265510989537466af7e16a1338f62efb4175551ebe38b756b4eaca88b4619b4b6686211af8a96688b0eaf882e6b8a7bf120cefee61c89276bec851ff3ee6ffb1b6f45febd3350832c4c3f5ab3ff8b964c9ecf693ee50926f462241080cd5c5c884b7125ae050ef7c48db81577ec3a8efc2d60c2892f23952449264dcf6b69c2cd254ff2a5a31448a11449b17492ce42205da444ba4a3729953229978a3a4315f93050fb33c1b5995412ba5449755533075a951aa9953aa987eb86c409404b20ceeecf8b53102bd208ef808df48d3ec712eed51221911225d1542531a02512f25eac214180cc6c25eeefceef0ae6ef4ee47cda8377be18c1e1f33d55c1fcda40cef35c4ffee4cd37f7df4bf0cf49a2d04ba23887c792244b8aa44a1afd22e992e16dc829519cdc2399e4a703daa17b9d27a9644a96644b8ee44a7bc6920ed24c9a4b0b69c9efa495e04a6b69236da59d94ff322bbf1b8ff8417a91a7f264a0aa52f6645f3eca81b49643399263a9904ff2f9c845dd2940a77bca17391126f255be5d30399533398fb67221977225eee51a78b2e225b9915bd680e7dddff104d55f6c5bf828160bfdc80bafb19b52e139bc9f148578d1b5e125502f97c8fb74dceb498926dfc94f784512845eee0115418c00924152e451c6708fe9645c2664f2f2725ca3f3b4ce71da0a495acb146973994c5f25f8c9a401d9300b99654c999379591059c195455992e53a93e39feb866505a2af2dc1c9aaacc97a7d6940c484a8beca86b0974da9035c2cd9961d745267e8c8aebc970ff24c9ecb0b7929afe4b5bc91b7f2aec1e51765aa4c148f1b0111b448c317f76f3cf9beff47edfddc95af6258e175fe04dac00eb9c779f5dff8bb0fcbfbf9958f5a7e2246fc8479e12772a31cc59512f08a12b216e4289e122971992a27e57c395e88f38b0251d2c54d6b2551aeca4d49954cc99522f59452dacb9cb454200696ae4aad344a2b1c7e59e3052adf88034be3fdba6ac6094850a674a35a274aaf0ccaa8600aae100aa9500aad300aab7010e60a8aa88081288aa7d0c75450d471503471a67872ade84aa8f8aca1004b145f3115eb3f390f1294fcc97ef96ff7ee676b5a3e3aa1f8cbf560779ea872c3abf073e455b0bd1a7263839f82f5c584abd88aa3b821adec95c3f9a2cc94390f915792dc57a9ce485b59284b65a5ac958db2155c65a7bca0affb533dd5578f6af0aa25af3c51c3aaeff3811d3dbc523a355263f504e5ac5ed444bdaa3735051ddaaa999a4ba95aa8a560a915d45a6dd4d6bfa64251b7aedaa9bd3a28ba3a42c5d451c58133e82b868807267f9757a0f694bd46b19fafdffafbf2d1fd848fd7b8bc1bef32e93dd89b2fba720b363755a62a2ed72aa958ec44a5545a655456e500344115554995554555136e18554dd5554335554bb55507426357ddab0775a6ce65495da8c7befc6d2d645a27a32a44f85c5daa2bcc51d7ea46d8031233a650b78cadeed4176daa4d344fa421766344529e69be76d482382fa3db4a0bb5e8a278732dd64ef01931edace2c20b3fd52eca54e2b4e43f3d5f189b7eb497eaff5179cd4c3f8be9b4abe26b3775d4522dbde52a862afcc799b7176744a8d85aae155aa955d3a9d668add669bdbce0e6da4049da28b91a260b1a2e5dd5bd4668a44669b4c668acc6693ce2c98fdd0ee97dffc94613c623e628bd266a92266b8a262b98a66a1a93e35b4dd70ccc9402cd94e69aa58882aed99a13319aabedb58336d3e6dac267829db6d44eda4a5b6b1b68b7da0e78335587574cfe8a233f750562b06fcc7bdc6dfce998f2d39eff38b71702e7f3f321c558bb8a2e2072d552667bcbb517a83b2d43ffbd3ed527ba5764baef89fa510ff4508ff4583fe967fda227fa55bfe9a99ea1015ebdd42bbdd61bbdd53bbdd707f5a88fbff104ed5301f5a8131d13421d7f642fed8b4ee8a43463399dc2b7b952e28c4d4c755a677456e7749ec474487be452977499ca747059eaa06bca141059e93a3c37b4445b2b96b6fd6fceab47e76e7dba7efeafcbfd3b1e9ec464f09a10585f8d1330bdb8bf7325d54ddd826aebce51023b5cfab4b7ac36baabeff5833e8b7b7dae05fa425fea2b7dad6f1449df0ababed35f8ca99ae9ad31313cc3378e426a0446684446f4eb0a5523aeaf985b27c6a94ec06f1d8db3941b17944d1a8971356e8c8d6fe5a37430d261a7da4666e4466194edc4a88c7a28c61a533ddbb38dc69b7b4ba3d51d5d373aa3370663d41d6fa1fd57e7d5a3f6947eb47ffeaf3dd37d5c2bc8a2c51f5cb9af27fb7a3c0db860323c2889a56b2a6160dad6c00cdc683d376cbdb9cf0691b7b9c806619093b94119b4c16847833538c1d53c8337384330a686a831eadc9034ca900d45ef0df57d0eff9ac76fd1faad92828878576fc0b3dd47c2500ed3977da96e0ccdd00d63e4b1c4300d4b570cdb700c371086cad81b0763e6adbd45a819a331780b630e8e6e6134c6f2fe7c69acbce57ffffd27e8bb4fa2e58f75c25f7bb3e77bbb6fd1fa6d5cebc798f18f199640ffcef95dba09def845dc1b38b0c432706f0976b7f49647d99b435d7a73637daa7a2da75ba79de87b63636c8d9df1624ecd89e999be7934216037236163c6e6c93c0b293a0e4f98a1b1aeb7b80bad5445a3f6e6b591eef5d66f4cc044d84905bace04c5317375231b6601f72cc3955999f5717fc6cdc66ccdaeba9abdcf869acff88cb7340703f316881d80c8089f70e12dd5fe9ff93eadb3719b85d7b798e95dfbe158d68ff55f53347a19f9bfce8ffc382feca1ecdfe0086a811bb8626a2fa895386008a0a26dd17f69b488335936f439698e2666e2b5aecf4cc2244dcaa44dc6644d6089c99b82219a4743baa322eabd2999b2a9fcb6b6fed61768e70f5aefd8487d61aa7c6b6a75a6903f50cbf4d1d4f5ca34d4d6344deb165dd2dbc2b4bbc2747cf7d2626ad89aaecf842b9f3196881bc668ee8d31d4e0f1f04ff0e4ad8659988274e2dfe2ca6b094c94eb3fe3c08ff91ad091ef9ec50a5e0057079540edbdb4e0bb5ae4b3115bd4de3c808552437f69cd592fdd56d1de9c9b0b73a907e6ca5c9b1b736beecc17736b4d35c69a08a9e5699c091ee9dd9830da93b21d95fa4c906d65f9d5d06ffa82ef1e3cb28ea02bafda6305e88b86acd8978fd5ed286f5b3b3b58a79ebfb46a5f66d699caac4bd8fa0c9521c600475c7340ccf19656f24f7f3f63a09cb2320eaf5f7caf16d83efafeb9cfe645ee3910baeed3b323deb7d6d5c0ad9b4a6889ee18f387cda9fd832b608bd8b98116f7e65476698fea9059e92db2322bb70aabb42aabb61aab9543abb37a6bb046ab33630b33b5dff66aa57d81d6023722562145a9466049264a722c470fe5b1708bb0488b32498bf64fc9f17695288b31318b8dc7a1cf32c4116f19ae3ccbe200199eca46d26750459c01fdff0779f2abc684e7681d4d8137b7c08c3c301a1c5cf50dbcd40a62b5f4167f67ec183244fdbb63c2a8226ee8165277f0cfd8a3dc756409afc04f9f459aa2410d5b4bb0c424be56972aba5a92255b8a1688f0c79686a4c8322dcbb22dc772adfd6f3be876f5ae93eab375e8147259e1d6acdf58f3879edc1159584b6b65adadcdc4b6b6d62e9b5b2ff6d49e40a0e50f3d62a97546fc804f70b1ce882b548638038f56882721f58ac93fc4914fe614f3e07524f2af3897fddd7706410ce3481c603207be5c1f5cf1203b435c01f59ca398a6697ddae8995a5e1d3bfbd84fed009d8f6965e8cb33ec580bec937db62f7662b296a966f6d5befdb19f3145bb181ab1cf3ba5531157eebb52323bb5333bb70b2bb24bbbb26bbbb956ad6db77667f7f1543bd91065dd3932b7ce57dae2909e001aefb882a9800a7cde7fd3f7fd1a18c4fad6434f50dcf5e089cf20aea0d80b792ea686dcc03596f61831361670366e13e5e9581d539bb4299bb6199bb5399bb7055b843e966cf9a1153fe64fa0f05dbbb3155bb5b54eb275331752dbb04ddb122bc0c3b61ddb8dae6752dedafb5eb70ff6cc9e63d831b217c050c73a1b63047a827041fc402cb197e82760443deabfe9fb7eb504e9074459c3fb36a4508c83b8027e616ebaacac3616379254e6adec9557c6337b6db8f6c68fc3786ad85b7b67bf385367e278a0d2aae33b47940ffe5a40437227306427b44d277262a3704eced9b938c999f0d588bc88ceb50d8ac4b9d9be933a1958c2fcce1170618007c7d4166f9d9d1c6a41654e692f9d8aca4c179e57ff2e9e8062809da1181ff96b64710fff7cb7bff628dfb646cbd4f6e8d41667dd0fe10e9833138f4ee3b4da3e2ec3e2584691d339bd3338a3b970302b7270b5750887742887761887753887b3343b717827f2394770444772644771544773f4288a4e272d8912c2311cf3d2969993062f3e6d9de36909eaeed90f8edcb5e41c310f2db197f6b28447a031e7327bc5e47f828dff032dd28b7b6ebc0a29a7b2ce881b8fe7909d810d82f7029e3c6c7224eda5c587adbdf40cc7f24a7deed8b7bde39c8c40385661e9b8966457cede39383367ee2c9ca5b372d65ae0a9d06ebc1458b17576ce0bf83bf07b56e61f27c2d170a756ea4ea25b39891c7be57a91edfa9e1db601536625628be51e91c687ad53a1881850003d419fd5a9d0e72ac18f85edbf892780c102551465216edc3d162002f1ef02c55d0f0f4241efb801f8ada575b647a8cb082dff3d1d3b377423378ef617e9acc587dbc53db967f7e226eed5bdd9949bba999bbb855bba955b879545bb8ddb5a99dbb9dd793c5b6eef0e36e18e01e762f62a9e7a4bb4f4dbb3d0fd03c686778e32cf0a1878471f215466118abecee8f3207e50f7570226fc727ffcff4fad3180860027eef9f08ff6ae2b77ae4838b2d9a13f99e053c02e2dcef55d1cb41ed061e52b7d6ec2e654a36d3926e6527690ccaf954b47e42d049550dcb37f9ed0c1daedfcb3cb403d2593e0ecb2c9dce59279321d0b974fda64d6ef41a99c8071bd735366a20e16708cb2e025248d1de4246764116536f48813e5dd5f21d410676c40310246fd9b7872d70ef00be55b0cd3221f8d2a8abd405dee0a7b9487fe28836fbf473bc836af749445994f8724f41d33f43def0aae48e5ae64d6ae1ced5de5acdd6e57fcacb97d332aaaab6ab3d6699d9cce6e43e66aaeee1aae6963ae15a728aef2ec2074bda14f3b60df1cf5b767e7441006214201bd6e421d7adb4708215543fc419f3b60e2f41593ff0136fe4fb428eb1a49a49e2886413e1b55e4ab811710e3b836e206ca0120b74f0cdce7bce5e3fa47afa03ef156fdbeccfa3d27f6fb18f27dd7316649eb0baeebeedd3d11b807fb00f19459a6be90b4c6ec543b1627ba015783cdafa20c98e73b45b8726769c789a02773f05836e8086e2f51752af09bebb40bd8a17f7005b801ef8b74047d0e7915fcabe22e14735909e2071a4742c8f88fc8e6deeb11e80b8ab6cc01b2495cd7b417140320cf81ae47fd837a096980eb415d40ff2e218e4d83de5dc5a9ed87d45146b15b1bdb737b9ec5a8d8beed07c0336082e559886feedc9d2b276fe506c61add13f5f89576e7de0a10635026e2068827267850148b3d7e0f98f8e0bbeef78afe55f909ca81c3d5831bc8ea4c17fcd60ac5360fcea00818e2afcb2387467902bcc62354106ad0bfcb075f5cffcd7611424e8a9e2354efbf771eede3f9e37ddefe0e62380bddc9c9915e0d3de2eae33af43af830eef179106f7fc65e0143dd9f3dee83cabf892728d242baf188addec69542ea4d57903d238b462db248649f57fa110b3d2afadddd569117b3509c849e3f7ef778edd7f69e6b9c1fb6fe768f47455af1f81df289a8cf915e3c622ec45974cd0391f235ee42a83c5eff37e9c93d57d71eb93b7002f293c7f811d826e4f2800dca5f90dfe6514efd40e7c10114b13e7ad0f51f88b87e943d9e3fb2bcf71cfad94619fabbb7fbbcbdfee0068a741fcf111ee8fd1ff9c7038d47acf5d63ef4e4f1fb574cfe07d8f83f5151dcf598abbbf3a34579fc23977fc4613e83e628903d3e7cc5c3f3bcd9f39bbd239e3c328b47fd69efbf730571ec81dc1be7defef67eedfd333c10408fa80c457b65f688411ef77c70e471fde333ddf393fff3bfffd7ff0527554e47</data> + </image> + <image name="image3"> + <data format="XPM.GZ" length="9213">789cedd6b10ac2301845e13d4ff1d36c416c429782f80882a3200e314574e8a27510f1dd35191c1ce2206488e76cb7217c5b686b64b35e8969d565f2d3294838fab398e13a8eb7ed6e79578d73567a2b9db866a61a2f41b47dd57771cee3dc0ff1439c3ace432a9d66d331ff2ecdfc8d7c888888888888888888888888758afa7b1fe22f21d623faa2212222febb58fe9543ac432cff678588888888888888888888885899f858a827579f8c14</data> + </image> + <image name="image4"> + <data format="XPM.GZ" length="1112">789c9dd2cb8e9b301406e07d9e0225bba89a09601350d505302c5b7559a9eac23e6672b363620c0ca9faeef53949da2e2a55eab123f9e38f2f217e5e475f3e7f8cd6cf8bde0b7f8008f6c2456b3518337ffdf6e1fb62992451e8691ac5cb778be55304d1277b6e71fc12c6ab0d157222e61bd8e4c812196f6216535a13f318624a6764b2495842e99558249014c81e99c6294b69d3376291424ae9806431638cd28628183081f4489e70ce13e4852878c129ad905992f18cd291283295517a466ed32ddfa64847945bb595c80e99a739cf29d54499ab9c528b2c58c10b86344428540148400a26b8a0541241b482d215523299494a0551c9562ae409091c32e0c82351410b942aa4e22a53941e882d36e41ed966d8903b2215f215f99a6143b6442afaafff5aff485658622584a091941256948443d1cabbdd6ebf3f28753c09a9e9cdc1fe703c9e4ea19f689a0430fa4c8908082be093d08d016bbb0bbd5e7ceafade5b30de19d083b3fa9e008cd39b9fafd69495b473af7fcfb15325c1d61eea0afaf005ddf97b5295c658a866338f97591babef7340fa396c6c5ca9e7fe650807d0bf566b4262299986ba335a3b4a2cc84b69ac85b1b673037d8fabf95b023a9c09cc7530e104dd5419ed6e27083fb09a7c752db5a9bd31cde4ec634ed8a39aebbe337618c3f6fdc5dee6d8b0bb0d6b5b8b1fad43d78fe4e14e3f6aace8e29d9d736777fea3c686eee0138c9726d4d00c548df7a315ff750f7ebc5ffc04a0e5308d</data> + </image> + <image name="image5"> + <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data> + </image> +</images> +<slots> + <slot access="protected">init()</slot> + <slot access="protected">destroy()</slot> +</slots> +<layoutdefaults spacing="6" margin="11"/> +</UI> diff --git a/examples/demo/dnd/iconview.cpp b/examples/demo/dnd/iconview.cpp new file mode 100644 index 0000000..c7c184e --- /dev/null +++ b/examples/demo/dnd/iconview.cpp @@ -0,0 +1,42 @@ +#include <qdragobject.h> + +#include "dnd.h" +#include "iconview.h" + + +IconView::IconView( QWidget* parent, const char* name ) + : QIconView( parent, name ) +{ + connect( this, SIGNAL(dropped(QDropEvent*, const QValueList<QIconDragItem>&)), + SLOT(slotNewItem(QDropEvent*, const QValueList<QIconDragItem>&))); +} + +IconView::~IconView() +{ + +} + + +QDragObject *IconView::dragObject() +{ + if ( !currentItem() ) return 0; + + QTextDrag * drg = new QTextDrag( ((IconViewItem*)currentItem())->tag(), this ); + drg->setSubtype("dragdemotag"); + drg->setPixmap( *currentItem()->pixmap() ); + + return drg; +} + +void IconView::slotNewItem( QDropEvent *e, const QValueList<QIconDragItem>& ) +{ + QString tag; + if ( !e->provides( "text/dragdemotag" ) ) return; + + if ( QTextDrag::decode( e, tag ) ) { + IconItem item = ((DnDDemo*) parentWidget())->findItem( tag ); + IconViewItem *iitem = new IconViewItem( this, item.name(), *item.pixmap(), tag ); + iitem->setRenameEnabled( TRUE ); + } + e->acceptAction(); +} diff --git a/examples/demo/dnd/iconview.h b/examples/demo/dnd/iconview.h new file mode 100644 index 0000000..cd917f7 --- /dev/null +++ b/examples/demo/dnd/iconview.h @@ -0,0 +1,31 @@ +#include <qiconview.h> +#include <qstring.h> + +#include "dnd.h" + +class IconViewItem : public QIconViewItem +{ +public: + IconViewItem( QIconView * parent, const QString & text, const QPixmap & icon, const QString& tag ) + : QIconViewItem( parent, text, icon ), _tag( tag ) {} + virtual ~IconViewItem() {} + + QString tag() { return _tag; } + +private: + QString _tag; +}; + +class IconView : public QIconView +{ + Q_OBJECT + +public: + IconView( QWidget* parent = 0, const char* name = 0 ); + ~IconView(); + + QDragObject *dragObject(); + +public slots: + void slotNewItem( QDropEvent *t, const QValueList<QIconDragItem>& ); +}; diff --git a/examples/demo/dnd/listview.cpp b/examples/demo/dnd/listview.cpp new file mode 100644 index 0000000..8c87b23 --- /dev/null +++ b/examples/demo/dnd/listview.cpp @@ -0,0 +1,72 @@ +#include <qdragobject.h> +#include <qapplication.h> +#include "listview.h" +#include "dnd.h" + +ListView::ListView( QWidget* parent, const char* name ) + : QListView( parent, name ) +{ + setAcceptDrops( TRUE ); + setSorting( -1, FALSE ); + dragging = FALSE; +} + +ListView::~ListView() +{ + +} + +void ListView::dragEnterEvent( QDragEnterEvent *e ) +{ + if ( e->provides( "text/dragdemotag" ) ) + e->accept(); +} + +void ListView::dropEvent( QDropEvent *e ) +{ + if ( !e->provides( "text/dragdemotag" ) ) + return; + + QString tag; + + if ( QTextDrag::decode( e, tag ) ) { + IconItem item = ((DnDDemo*) parentWidget())->findItem( tag ); + QListViewItem *after = itemAt( viewport()->mapFromParent( e->pos() ) ); + ListViewItem *litem = new ListViewItem( this, after, item.name(), tag ); + litem->setPixmap( 0, *item.pixmap() ); + } +} + +void ListView::contentsMousePressEvent( QMouseEvent *e ) +{ + QListView::contentsMousePressEvent( e ); + dragging = TRUE; + pressPos = e->pos(); +} + +void ListView::contentsMouseMoveEvent( QMouseEvent *e ) +{ + QListView::contentsMouseMoveEvent( e ); + + if ( ! dragging ) return; + + if ( !currentItem() ) return; + + if ( ( pressPos - e->pos() ).manhattanLength() > QApplication::startDragDistance() ) { + QTextDrag *drg = new QTextDrag( ((ListViewItem*)currentItem())->tag(), this ); + + const QPixmap *p = ((ListViewItem*)currentItem())->pixmap( 0 ); + if (p) + drg->setPixmap(*p); + drg->setSubtype( "dragdemotag" ); + drg->dragCopy(); + dragging = FALSE; + } +} + +void ListView::contentsMouseReleaseEvent( QMouseEvent *e ) +{ + QListView::contentsMouseReleaseEvent( e ); + dragging = FALSE; +} + diff --git a/examples/demo/dnd/listview.h b/examples/demo/dnd/listview.h new file mode 100644 index 0000000..507e594 --- /dev/null +++ b/examples/demo/dnd/listview.h @@ -0,0 +1,35 @@ +#include <qlistview.h> + +class ListViewItem : public QListViewItem +{ +public: + ListViewItem ( QListView * parent, const QString& name, const QString& tag ) + : QListViewItem( parent, name ), _tag( tag ) {} + ListViewItem ( QListView * parent, QListViewItem * after, const QString& name, const QString& tag ) + : QListViewItem( parent, after, name ), _tag( tag ) {} + virtual ~ListViewItem() {} + + QString tag() { return _tag; } + +private: + QString _tag; +}; + +class ListView : public QListView +{ + Q_OBJECT + +public: + ListView( QWidget* parent = 0, const char* name = 0 ); + ~ListView(); + + void dragEnterEvent( QDragEnterEvent * ); + void dropEvent( QDropEvent * ); + void contentsMousePressEvent( QMouseEvent * ); + void contentsMouseMoveEvent( QMouseEvent * ); + void contentsMouseReleaseEvent( QMouseEvent * ); + +private: + QPoint pressPos; + bool dragging; +}; diff --git a/examples/demo/dnd/styledbutton.cpp b/examples/demo/dnd/styledbutton.cpp new file mode 100644 index 0000000..b592ee6 --- /dev/null +++ b/examples/demo/dnd/styledbutton.cpp @@ -0,0 +1,308 @@ +/********************************************************************** +** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** Alternatively you may (at your option) use any later version +** of the GNU General Public License if such license has been +** publicly approved by Trolltech ASA (or its successors, if any) +** and the KDE Free Qt Foundation. +** +** Please review the following information to ensure GNU General +** Public Licensing requirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/. +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at sales@trolltech.com. +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with +** the Software. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +#include "styledbutton.h" + +#include <qcolordialog.h> +#include <qpalette.h> +#include <qlabel.h> +#include <qpainter.h> +#include <qimage.h> +#include <qpixmap.h> +#include <qapplication.h> +#include <qdragobject.h> +#include <qstyle.h> + +StyledButton::StyledButton(QWidget* parent, const char* name) + : QButton( parent, name ), pix( 0 ), spix( 0 ), edit( ColorEditor ), s( 0 ), mousePressed( FALSE ) +{ + setMinimumSize( minimumSizeHint() ); + setAcceptDrops( TRUE ); + + connect( this, SIGNAL(clicked()), SLOT(onEditor())); +} + +StyledButton::StyledButton( const QBrush& b, QWidget* parent, const char* name, WFlags f ) + : QButton( parent, name, f ), spix( 0 ), s( 0 ) +{ + col = b.color(); + pix = b.pixmap(); + setMinimumSize( minimumSizeHint() ); +} + +StyledButton::~StyledButton() +{ + if ( pix ) { + delete pix; + pix = 0; + } + if ( spix ) { + delete spix; + spix = 0; + } +} + +void StyledButton::setEditor( EditorType e ) +{ + if ( edit == e ) + return; + + edit = e; + update(); +} + +StyledButton::EditorType StyledButton::editor() const +{ + return edit; +} + +void StyledButton::setColor( const QColor& c ) +{ + col = c; + update(); +} + +void StyledButton::setPixmap( const QPixmap & pm ) +{ + if ( !pm.isNull() ) { + delete pix; + pix = new QPixmap( pm ); + } else { + delete pix; + pix = 0; + } + scalePixmap(); +} + +QColor StyledButton::color() const +{ + return col; +} + +QPixmap* StyledButton::pixmap() const +{ + return pix; +} + +bool StyledButton::scale() const +{ + return s; +} + +void StyledButton::setScale( bool on ) +{ + if ( s == on ) + return; + + s = on; + scalePixmap(); +} + +QSize StyledButton::sizeHint() const +{ + return QSize( 50, 25 ); +} + +QSize StyledButton::minimumSizeHint() const +{ + return QSize( 50, 25 ); +} + +void StyledButton::scalePixmap() +{ + delete spix; + + if ( pix ) { + spix = new QPixmap( 6*width()/8, 6*height()/8 ); + QImage img = pix->convertToImage(); + + spix->convertFromImage( s? img.smoothScale( 6*width()/8, 6*height()/8 ) : img ); + } else { + spix = 0; + } + + update(); +} + +void StyledButton::resizeEvent( QResizeEvent* e ) +{ + scalePixmap(); + QButton::resizeEvent( e ); +} + +void StyledButton::drawButton( QPainter *paint ) +{ + style().drawPrimitive(QStyle::PE_ButtonBevel, paint, rect(), colorGroup(), + isDown() ? QStyle::Style_Sunken : QStyle::Style_Default); + drawButtonLabel(paint); + + if (hasFocus()) + style().drawPrimitive(QStyle::PE_FocusRect, paint, + style().subRect(QStyle::SR_PushButtonFocusRect, this), + colorGroup(), QStyle::Style_Default); +} + +void StyledButton::drawButtonLabel( QPainter *paint ) +{ + QColor pen = isEnabled() ? + hasFocus() ? palette().active().buttonText() : palette().inactive().buttonText() + : palette().disabled().buttonText(); + paint->setPen( pen ); + + if(!isEnabled()) { + paint->setBrush( QBrush( colorGroup().button() ) ); + } + else if ( edit == PixmapEditor && spix ) { + paint->setBrush( QBrush( col, *spix ) ); + paint->setBrushOrigin( width()/8, height()/8 ); + } else + paint->setBrush( QBrush( col ) ); + + paint->drawRect( width()/8, height()/8, 6*width()/8, 6*height()/8 ); +} + +void StyledButton::onEditor() +{ + switch (edit) { + case ColorEditor: { + QColor c = QColorDialog::getColor( palette().active().background(), this ); + if ( c.isValid() ) { + setColor( c ); + emit changed(); + } + } break; + case PixmapEditor: { + QPixmap p; + /* + if ( pixmap() ) + p = qChoosePixmap( this,*pixmap() ); + else + p = qChoosePixmap( this, QPixmap() ); + if ( !p.isNull() ) { + setPixmap( p ); + emit changed(); + } + */ + } break; + default: + break; + } +} + +void StyledButton::mousePressEvent(QMouseEvent* e) +{ + QButton::mousePressEvent(e); + mousePressed = TRUE; + pressPos = e->pos(); +} + +void StyledButton::mouseMoveEvent(QMouseEvent* e) +{ + QButton::mouseMoveEvent( e ); +#ifndef QT_NO_DRAGANDDROP + if ( !mousePressed ) + return; + if ( ( pressPos - e->pos() ).manhattanLength() > QApplication::startDragDistance() ) { + if ( edit == ColorEditor ) { + QColorDrag *drg = new QColorDrag( col, this ); + QPixmap pix( 25, 25 ); + pix.fill( col ); + QPainter p( &pix ); + p.drawRect( 0, 0, pix.width(), pix.height() ); + p.end(); + drg->setPixmap( pix ); + mousePressed = FALSE; + drg->dragCopy(); + } + else if ( edit == PixmapEditor && pix && !pix->isNull() ) { + QImage img = pix->convertToImage(); + QImageDrag *drg = new QImageDrag( img, this ); + if(spix) + drg->setPixmap( *spix ); + mousePressed = FALSE; + drg->dragCopy(); + } + } +#endif +} + +#ifndef QT_NO_DRAGANDDROP +void StyledButton::dragEnterEvent( QDragEnterEvent *e ) +{ + setFocus(); + if ( edit == ColorEditor && QColorDrag::canDecode( e ) ) + e->accept(); + else if ( edit == PixmapEditor && QImageDrag::canDecode( e ) ) + e->accept(); + else + e->ignore(); +} + +void StyledButton::dragLeaveEvent( QDragLeaveEvent * ) +{ + if ( hasFocus() ) + parentWidget()->setFocus(); +} + +void StyledButton::dragMoveEvent( QDragMoveEvent *e ) +{ + if ( edit == ColorEditor && QColorDrag::canDecode( e ) ) + e->accept(); + else if ( edit == PixmapEditor && QImageDrag::canDecode( e ) ) + e->accept(); + else + e->ignore(); +} + +void StyledButton::dropEvent( QDropEvent *e ) +{ + if ( edit == ColorEditor && QColorDrag::canDecode( e ) ) { + QColor color; + QColorDrag::decode( e, color ); + setColor(color); + emit changed(); + e->accept(); + } + else if ( edit == PixmapEditor && QImageDrag::canDecode( e ) ) { + QImage img; + QImageDrag::decode( e, img ); + QPixmap pm; + pm.convertFromImage(img); + setPixmap(pm); + emit changed(); + e->accept(); + } else { + e->ignore(); + } +} +#endif // QT_NO_DRAGANDDROP diff --git a/examples/demo/dnd/styledbutton.h b/examples/demo/dnd/styledbutton.h new file mode 100644 index 0000000..5f23c40 --- /dev/null +++ b/examples/demo/dnd/styledbutton.h @@ -0,0 +1,106 @@ +/********************************************************************** +** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** Alternatively you may (at your option) use any later version +** of the GNU General Public License if such license has been +** publicly approved by Trolltech ASA (or its successors, if any) +** and the KDE Free Qt Foundation. +** +** Please review the following information to ensure GNU General +** Public Licensing requirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/. +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at sales@trolltech.com. +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with +** the Software. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +#ifndef STYLEDBUTTON_H +#define STYLEDBUTTON_H + +#include <qbutton.h> +#include <qpixmap.h> + +class QColor; +class QBrush; + +class StyledButton : public QButton +{ + Q_OBJECT + + Q_PROPERTY( QColor color READ color WRITE setColor ) + Q_PROPERTY( QPixmap pixmap READ pixmap WRITE setPixmap ) + Q_PROPERTY( EditorType editor READ editor WRITE setEditor ) + Q_PROPERTY( bool scale READ scale WRITE setScale ) + + Q_ENUMS( EditorType ) + +public: + enum EditorType { ColorEditor, PixmapEditor }; + + StyledButton( QWidget* parent = 0, const char* name = 0 ); + StyledButton( const QBrush& b, QWidget* parent = 0, const char* name = 0, WFlags f = 0 ); + ~StyledButton(); + + void setEditor( EditorType ); + EditorType editor() const; + + void setColor( const QColor& ); + void setPixmap( const QPixmap& ); + + QPixmap* pixmap() const; + QColor color() const; + + void setScale( bool ); + bool scale() const; + + QSize sizeHint() const; + QSize minimumSizeHint() const; + +public slots: + virtual void onEditor(); + +signals: + void changed(); + +protected: + void mousePressEvent(QMouseEvent*); + void mouseMoveEvent(QMouseEvent*); +#ifndef QT_NO_DRAGANDDROP + void dragEnterEvent ( QDragEnterEvent * ); + void dragMoveEvent ( QDragMoveEvent * ); + void dragLeaveEvent ( QDragLeaveEvent * ); + void dropEvent ( QDropEvent * ); +#endif // QT_NO_DRAGANDDROP + void drawButton( QPainter* ); + void drawButtonLabel( QPainter* ); + void resizeEvent( QResizeEvent* ); + void scalePixmap(); + +private: + QPixmap* pix; + QPixmap* spix; // the pixmap scaled down to fit into the button + QColor col; + EditorType edit; + bool s; + QPoint pressPos; + bool mousePressed; +}; + +#endif //STYLEDBUTTON_H diff --git a/examples/demo/frame.cpp b/examples/demo/frame.cpp new file mode 100644 index 0000000..30277d8 --- /dev/null +++ b/examples/demo/frame.cpp @@ -0,0 +1,152 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#include "frame.h" + +#include <qapplication.h> +#include <qpopupmenu.h> +#include <qmenubar.h> +#include <qaccel.h> +#include <qtoolbox.h> +#include <qpainter.h> +#include <qwidgetstack.h> +#include <qstylefactory.h> +#include <qaction.h> +#include <qsignalmapper.h> +#include <qdict.h> +#include <qdir.h> +#include <qtextcodec.h> +#include <stdlib.h> +#include <qbuttongroup.h> +#include <qtoolbutton.h> + +static QTranslator *translator = 0; +static QTranslator *qt_translator = 0; + +Frame::Frame( QWidget *parent, const char *name ) + : QMainWindow( parent, name ) +{ + QMenuBar *mainMenu = menuBar(); + QPopupMenu *fileMenu = new QPopupMenu( this, "file" ); + fileMenu->insertItem( tr( "&Exit" ), this, SLOT( close() ), + QAccel::stringToKey( tr( "Ctrl+Q" ) ) ); + + QPopupMenu *styleMenu = new QPopupMenu( this, "style" ); + styleMenu->setCheckable( TRUE ); + QActionGroup *ag = new QActionGroup( this, 0 ); + ag->setExclusive( TRUE ); + QSignalMapper *styleMapper = new QSignalMapper( this ); + connect( styleMapper, SIGNAL( mapped( const QString& ) ), + this, SLOT( setStyle( const QString& ) ) ); + + QStringList list = QStyleFactory::keys(); + list.sort(); + QDict<int> stylesDict( 17, FALSE ); + for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { + QString style = *it; + QString styleAccel = style; + if ( stylesDict[styleAccel.left(1)] ) { + for ( uint i = 0; i < styleAccel.length(); i++ ) { + if ( !stylesDict[styleAccel.mid( i, 1 )] ) { + stylesDict.insert(styleAccel.mid( i, 1 ), (const int *)1); + styleAccel = styleAccel.insert( i, '&' ); + break; + } + } + } else { + stylesDict.insert(styleAccel.left(1), (const int *)1); + styleAccel = "&"+styleAccel; + } + QAction *a = new QAction( style, QIconSet(), + styleAccel, 0, ag, 0, ag->isExclusive() ); + connect( a, SIGNAL( activated() ), styleMapper, SLOT(map()) ); + styleMapper->setMapping( a, a->text() ); + } + ag->addTo( styleMenu ); + + mainMenu->insertItem( tr( "&File" ), fileMenu ); + mainMenu->insertItem( tr( "St&yle" ), styleMenu ); + + stack = new QWidgetStack( this ); + + setCentralWidget( stack ); +} + +void Frame::setCategories( const QPtrList<CategoryInterface> &l ) +{ + categories = l; + QDockWindow *dw = new QDockWindow( QDockWindow::InDock, this ); + dw->setResizeEnabled( TRUE ); + dw->setVerticalStretchable( TRUE ); + addDockWindow( dw, DockLeft ); + setDockEnabled( dw, DockTop, FALSE ); + setDockEnabled( dw, DockBottom, FALSE ); + dw->setCloseMode( QDockWindow::Always ); + + toolBox = new QToolBox( dw ); + dw->setWidget( toolBox ); + + dw->setCaption( tr( "Demo Categories" ) ); + + for ( int i = 0; i < categories.count(); ++i ) + toolBox->addItem( createCategoryPage( categories.at(i) ), + categories.at(i)->icon(), + categories.at(i)->name() ); + + categories.first()->setCurrentCategory( 0 ); +} + +QWidget *Frame::createCategoryPage( CategoryInterface *c ) +{ + QButtonGroup *g = new QButtonGroup( 1, Horizontal, toolBox ); + g->setFrameStyle( QFrame::NoFrame ); + g->setEraseColor(green); + g->setBackgroundMode(PaletteBase); + for ( int i = 0; i < c->numCategories(); ++i ) { + QToolButton *b = new QToolButton( g ); + b->setBackgroundMode(PaletteBase); + b->setTextLabel( c->categoryName( i ) ); + b->setIconSet( c->categoryIcon( i ) ); + b->setAutoRaise( TRUE ); + b->setTextPosition( QToolButton::Right ); + b->setUsesTextLabel( TRUE ); + g->insert( b, i + c->categoryOffset() ); + connect( g, SIGNAL( clicked( int ) ), c, SLOT( setCurrentCategory( int ) ) ); + } + return g; +} + +void Frame::setStyle( const QString& style ) +{ + QStyle *s = QStyleFactory::create( style ); + if ( s ) + QApplication::setStyle( s ); +} + +void Frame::updateTranslators() +{ + if ( !qt_translator ) { + qt_translator = new QTranslator( qApp ); + translator = new QTranslator( qApp ); + qApp->installTranslator( qt_translator ); + qApp->installTranslator( translator ); + } + + QString base = QDir("../../translations").absPath(); + qt_translator->load( QString( "qt_%1" ).arg( QTextCodec::locale() ), base ); + translator->load( QString( "translations/demo_%1" ).arg( QTextCodec::locale() ) ); +} + +bool Frame::event( QEvent *e ) +{ + if ( e->type() == QEvent::LocaleChange ) + updateTranslators(); + + return QMainWindow::event( e ); +} diff --git a/examples/demo/frame.h b/examples/demo/frame.h new file mode 100644 index 0000000..cb98048 --- /dev/null +++ b/examples/demo/frame.h @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#include <qmainwindow.h> +#include <qintdict.h> +#include "categoryinterface.h" + +class QToolBox; +class QStyle; +class QWidgetStack; + +class Frame : public QMainWindow +{ + Q_OBJECT + +public: + Frame( QWidget *parent=0, const char *name=0 ); + void setCategories( const QPtrList<CategoryInterface> &l ); + + static void updateTranslators(); + + QWidgetStack *widgetStack() const { return stack; } + +private slots: + void setStyle( const QString& ); + +protected: + bool event( QEvent *e ); + +private: + QWidget *createCategoryPage( CategoryInterface *c ); + +private: + QToolBox *toolBox; + QWidgetStack *stack; + QIntDict<QWidget> categoryPages; + QPtrList<CategoryInterface> categories; + +}; diff --git a/examples/demo/graph.cpp b/examples/demo/graph.cpp new file mode 100644 index 0000000..f41fa3b --- /dev/null +++ b/examples/demo/graph.cpp @@ -0,0 +1,445 @@ +#include "graph.h" +#include <qcanvas.h> +#include <stdlib.h> +#include <qdatetime.h> +#include <qhbox.h> +#include <qpushbutton.h> +#include <qslider.h> +#include <qlabel.h> +#include <qlayout.h> + +const int bounce_rtti = 1234; + +// We use a global variable to save memory - all the brushes and pens in +// the mesh are shared. +static QBrush *tb = 0; +static QPen *tp = 0; + +class EdgeItem; +class NodeItem; +class FigureEditor; +typedef QValueList<NodeItem*> NodeItemList; +typedef QValueList<EdgeItem*> EdgeItemList; + +#define SPEED2ADVANCE(x) (301-x) + +class GraphWidgetPrivate +{ +public: + GraphWidgetPrivate() { + moving = 0; + speed = 275; + } + ~GraphWidgetPrivate() { + delete canvas; + } + NodeItemList nodeItems; + FigureEditor* editor; + QCanvas* canvas; + QCanvasItem* moving; + int speed; +}; + +class EdgeItem: public QCanvasLine +{ +public: + EdgeItem( NodeItem*, NodeItem*, QCanvas* ); + void setFromPoint( int x, int y ) ; + void setToPoint( int x, int y ); + void moveBy(double dx, double dy); + + NodeItem* from; + NodeItem* to; +}; + + + +class NodeItem: public QCanvasEllipse +{ +public: + NodeItem( GraphWidgetPrivate* g ); + ~NodeItem() {} + + void addInEdge( EdgeItem *edge ) { inList.append( edge ); } + void addOutEdge( EdgeItem *edge ) { outList.append( edge ); } + + void moveBy(double dx, double dy); + + void calcForce(); + void advance( int stage ); + +private: + GraphWidgetPrivate* graph; + EdgeItemList inList; + EdgeItemList outList; +}; + + + +void EdgeItem::moveBy(double, double) +{ + //nothing +} + +EdgeItem::EdgeItem( NodeItem *fromItem, NodeItem *toItem, QCanvas *canvas ) + : QCanvasLine( canvas ) +{ + from = fromItem; + to = toItem; + setPen( *tp ); + setBrush( *tb ); + from->addOutEdge( this ); + to->addInEdge( this ); + setPoints( int(from->x()), int(from->y()), int(to->x()), int(to->y()) ); + setZ( 127 ); +} + +void EdgeItem::setFromPoint( int x, int y ) +{ + setPoints( x,y, endPoint().x(), endPoint().y() ); +} + +void EdgeItem::setToPoint( int x, int y ) +{ + setPoints( startPoint().x(), startPoint().y(), x, y ); +} + + +void NodeItem::moveBy(double dx, double dy) +{ + double nx = x() + dx; + double ny = y() + dy; + if ( graph->moving != this ) { + nx = QMAX( width()/2, nx ); + ny = QMAX( height()/2, ny ); + nx = QMIN( canvas()->width() - width()/2, nx ); + ny = QMIN( canvas()->height() - height()/2, ny ); + } + QCanvasEllipse::moveBy( nx-x(), ny-y() ); + EdgeItemList::Iterator it; + for ( it = inList.begin(); it != inList.end(); ++it ) + (*it)->setToPoint( int(x()), int(y()) ); + for ( it = outList.begin(); it != outList.end(); ++it ) + (*it)->setFromPoint( int(x()), int(y()) ); +} + +NodeItem::NodeItem( GraphWidgetPrivate* g ) + : QCanvasEllipse( 32, 32, g->canvas ) +{ + graph = g; + graph->nodeItems.append( this ); + setPen( *tp ); + setBrush( *tb ); + setZ( 128 ); +} + +void NodeItem::advance( int stage ) { + switch ( stage ) { + case 0: + calcForce(); + break; + case 1: + QCanvasItem::advance(stage); + break; + } +} + +void NodeItem::calcForce() { + if ( graph->moving == this ) { + setVelocity( 0, 0 ); + return; + } + double xvel = 0; + double yvel = 0; + for ( NodeItemList::Iterator it = graph->nodeItems.begin(); it != graph->nodeItems.end(); ++it ) { + NodeItem* n = (*it); + if ( n == this ) + continue; + double dx = x() - n->x(); + double dy = y() - n->y(); + double l = 2 * ( dx * dx + dy * dy ); + if ( l > 0 ) { + xvel = xvel + dx*260 / l; + yvel = yvel + dy*260 / l; + } + } + double w = 1 + outList.count() + inList.count(); + w *= 10; + EdgeItemList::Iterator it2; + EdgeItem * e; + NodeItem* n; + for ( it2 = outList.begin(); it2 != outList.end(); ++it2 ) { + e = (*it2); + n = e->to; + xvel = xvel - ( x() - n->x() ) / w; + yvel = yvel - ( y() - n->y() ) / w; + } + for ( it2 = inList.begin(); it2 != inList.end(); ++it2 ) { + e = (*it2); + n = e->from; + xvel = xvel - ( x() - n->x() ) / w; + yvel = yvel - ( y() - n->y() ) / w; + } + if ( QABS( xvel ) < .1 && QABS( yvel ) < .1 ) + xvel = yvel = 0; + setVelocity( xvel, yvel ); +} + + +class FigureEditor : public QCanvasView { +public: + FigureEditor( GraphWidgetPrivate *g, QWidget* parent=0, const char* name=0, WFlags f=0); + + QSize sizeHint() const; + + +protected: + void contentsMousePressEvent(QMouseEvent*); + void contentsMouseReleaseEvent(QMouseEvent*); + void contentsMouseMoveEvent(QMouseEvent*); + + + void resizeEvent( QResizeEvent* ); + void showEvent( QShowEvent* ); + void hideEvent( QHideEvent* e); + +private: + void initialize(); + QPoint moving_start; + GraphWidgetPrivate* graph; +}; + + +FigureEditor::FigureEditor( + GraphWidgetPrivate* g, QWidget* parent, + const char* name, WFlags f) : + QCanvasView(g->canvas, parent,name,f) +{ + graph = g; +} + +void FigureEditor::contentsMousePressEvent(QMouseEvent* e) +{ + QCanvasItemList l=canvas()->collisions(e->pos()); + for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) { + if ((*it)->rtti()==bounce_rtti ) + continue; + graph->moving = *it; + moving_start = e->pos(); + return; + } + graph->moving = 0; +} + +void FigureEditor::contentsMouseReleaseEvent(QMouseEvent* ) +{ + if ( graph->moving ) + graph->moving = 0; +} + +void FigureEditor::contentsMouseMoveEvent(QMouseEvent* e) +{ + if ( graph->moving ) { + graph->moving->moveBy(e->pos().x() - moving_start.x(), + e->pos().y() - moving_start.y()); + moving_start = e->pos(); + canvas()->update(); + } +} + +class BouncyText : public QCanvasText { + void initPos(); + void initSpeed(); +public: + int rtti() const; + BouncyText(const QString&, QFont, QCanvas*); + void advance(int); +}; + +BouncyText::BouncyText( const QString& text, QFont f, QCanvas* canvas) : + QCanvasText(text, f, canvas) +{ + setAnimated(TRUE); + initPos(); +} + + +int BouncyText::rtti() const +{ + return bounce_rtti; +} + +void BouncyText::initPos() +{ + initSpeed(); + int trial=1000; + do { + move(rand()%(canvas()->width()-boundingRect().width()), + rand()%(canvas()->height()-boundingRect().height())); + advance(0); + } while (trial-- && xVelocity()==0.0 && yVelocity()==0.0); +} + +void BouncyText::initSpeed() +{ + const double speed = 2.0; + double d = (double)(rand()%1024) / 1024.0; + double e = (double)(rand()%1024) / 1024.0; + + if ( d < .5 ) + d = -1 - d; + else + d = d + 1; + if ( e < .5 ) + e = -1 - e; + else + e = e + 1; + + setVelocity( d*speed, e * speed ); +} + +void BouncyText::advance( int stage ) +{ + switch ( stage ) { + case 0: { + double vx = xVelocity(); + double vy = yVelocity(); + + if ( vx == 0.0 && vy == 0.0 ) { + // stopped last turn + initSpeed(); + vx = xVelocity(); + vy = yVelocity(); + } + + QRect r = boundingRect(); + r.moveBy( int(vx), int(vy) ); + + if ( r.left() < 0 || r.right() > canvas()->width() ) + vx = -vx; + if ( r.top() < 0 || r.bottom() > canvas()->height() ) + vy = -vy; + + r = boundingRect(); + r.moveBy( int(vx), int(vy) ); + if ( r.left() < 0 || r.right() > canvas()->width() ) + vx = 0; + if ( r.top() < 0 || r.bottom() > canvas()->height() ) + vy = 0; + + setVelocity( vx, vy ); + } break; + case 1: + QCanvasItem::advance( stage ); + break; + } +} + +GraphWidget::GraphWidget( QWidget *parent, const char *name) + : QWidget( parent, name ) +{ + d = new GraphWidgetPrivate; + d->canvas = 0; + QVBoxLayout* vb = new QVBoxLayout( this, 11, 6 ); + d->editor = new FigureEditor( d, this ); + vb->addWidget( d->editor ); + QHBoxLayout* hb = new QHBoxLayout( vb ); + hb->addWidget( new QLabel("Slow", this ) ); + QSlider* slider = new QSlider( 0, 300, 25, d->speed, Horizontal, this ); + connect( slider, SIGNAL( valueChanged(int) ), this, SLOT( setSpeed(int) ) ); + hb->addWidget( slider ); + hb->addWidget( new QLabel("Fast", this ) ); + hb->addSpacing( 10 ); + QPushButton* btn = new QPushButton( "Shuffle Nodes", this ); + connect( btn, SIGNAL( clicked() ), this, SLOT( shuffle() ) ); + hb->addWidget( btn ); +} + + +GraphWidget::~GraphWidget() +{ + delete d; +} + +void GraphWidget::setSpeed(int s) +{ + d->speed = s; + if ( isVisible() && d->canvas ) + d->canvas->setAdvancePeriod( SPEED2ADVANCE( s ) ); +} + +void GraphWidget::shuffle() +{ + + for ( NodeItemList::Iterator it = d->nodeItems.begin(); it != d->nodeItems.end(); ++it ) { + NodeItem* ni = (*it); + ni->move(rand()%(d->canvas->width()-ni->width()),rand()%(d->canvas->height()-ni->height())); + } +} + + +QSize FigureEditor::sizeHint() const +{ + return QSize( 600, 400 ); +} + +void FigureEditor::resizeEvent( QResizeEvent* e ) +{ + if ( canvas() ) + canvas()->resize( contentsRect().width(), contentsRect().height() ); + QCanvasView::resizeEvent( e ); +} + +void FigureEditor::showEvent( QShowEvent* ) +{ + initialize(); + canvas()->setAdvancePeriod( SPEED2ADVANCE(graph->speed) ); +} + +void FigureEditor::hideEvent( QHideEvent* ) +{ + initialize(); + canvas()->setAdvancePeriod( -10 ); +} + +void FigureEditor::initialize() +{ + if ( canvas() ) + return; + resize( sizeHint() ); + graph->canvas = new QCanvas( contentsRect().width(), contentsRect().height() ); + if ( !tb ) tb = new QBrush( Qt::red ); + if ( !tp ) tp = new QPen( Qt::black ); + srand( QTime::currentTime().msec() ); + int nodecount = 0; + + int rows = 3; + int cols = 3; + + QMemArray<NodeItem*> lastRow(cols); + for ( int r = 0; r < rows; r++ ) { + NodeItem *prev = 0; + for ( int c = 0; c < cols; c++ ) { + NodeItem *ni = new NodeItem( graph ); + ni->setAnimated( TRUE ); + nodecount++; + ni->move(rand()%(graph->canvas->width()-ni->width()),rand()%(graph->canvas->height()-ni->height())); + + if ( r > 0 ) + (new EdgeItem( lastRow[c], ni, graph->canvas ))->show(); + if ( prev ) + (new EdgeItem( prev, ni, graph->canvas ))->show(); + prev = ni; + lastRow[c] = ni; + ni->show(); + } + } + + graph->canvas->advance(); + + QCanvasItem* i = new BouncyText( tr( "Drag the nodes around!" ), QFont("helvetica", 24), graph->canvas); + i->show(); + setCanvas( graph->canvas ); + setMinimumSize( 600, 400 ); + setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding ); +} diff --git a/examples/demo/graph.h b/examples/demo/graph.h new file mode 100644 index 0000000..10b04d6 --- /dev/null +++ b/examples/demo/graph.h @@ -0,0 +1,31 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#include <qwidget.h> +class QStyle; +class QListBox; +class QListBoxItem; +class QWidgetStack; + +class GraphWidgetPrivate; + +class GraphWidget : public QWidget +{ + Q_OBJECT +public: + GraphWidget( QWidget *parent=0, const char *name=0 ); + ~GraphWidget(); + +private slots: + void shuffle(); + void setSpeed(int); + +private: + GraphWidgetPrivate* d; +}; diff --git a/examples/demo/i18n/en.po b/examples/demo/i18n/en.po new file mode 100644 index 0000000..32980ce --- /dev/null +++ b/examples/demo/i18n/en.po @@ -0,0 +1,848 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: none:0 +msgid "--language--" +msgstr "English" + +#: none:0 +msgid "&File" +msgstr "&File" + +#: none:0 +msgid "New" +msgstr "New" + +#: none:0 +msgid "&New..." +msgstr "&New..." + +#: none:0 +msgid "Open" +msgstr "Open" + +#: none:0 +msgid "&Open..." +msgstr "&Open.." + +#: none:0 +msgid "Save As" +msgstr "Save As" + +#: none:0 +msgid "Save &As..." +msgstr "Save &As..." + +#: none:0 +msgid "Save" +msgstr "Save" + +#: none:0 +msgid "&Save..." +msgstr "&Save..." + +#: none:0 +msgid "Print" +msgstr "Print" + +#: none:0 +msgid "&Print..." +msgstr "&Print..." + +#: none:0 +msgid "&Close" +msgstr "&Close" + +#: none:0 +msgid "&Edit" +msgstr "&Edit" + +#: none:0 +msgid "&Undo" +msgstr "&Undo" + +#: none:0 +msgid "Undo" +msgstr "Undo" + +#: none:0 +msgid "&Redo" +msgstr "&Redo" + +#: none:0 +msgid "Redo" +msgstr "Redo" + +#: none:0 +msgid "Cut" +msgstr "Cut" + +#: none:0 +msgid "&Cut" +msgstr "&Cut" + +#: none:0 +msgid "C&opy" +msgstr "C&opy" + +#: none:0 +msgid "Copy" +msgstr "Copy" + +#: none:0 +msgid "Paste" +msgstr "Paste" + +#: none:0 +msgid "&Paste" +msgstr "&Paste" + +#: none:0 +msgid "Clear" +msgstr "Clear" + +#: none:0 +msgid "Select All" +msgstr "Select All" + +#: none:0 +msgid "Line up" +msgstr "Line up" + +#: none:0 +msgid "For&mat" +msgstr "For&mat" + +#: none:0 +msgid "Bold" +msgstr "Bold" + +#: none:0 +msgid "&Bold" +msgstr "&Bold" + +#: none:0 +msgid "Italic" +msgstr "Italic" + +#: none:0 +msgid "&Italic" +msgstr "&Itatlic" + +#: none:0 +msgid "Underline" +msgstr "Underline" + +#: none:0 +msgid "&Underline" +msgstr "&Underline" + +#: none:0 +msgid "Left" +msgstr "Left" + +#: none:0 +msgid "&Left" +msgstr "&Left" + +#: none:0 +msgid "Center" +msgstr "Center" + +#: none:0 +msgid "C&enter" +msgstr "C&enter" + +#: none:0 +msgid "Right" +msgstr "Right" + +#: none:0 +msgid "&Right" +msgstr "&Right" + +#: none:0 +msgid "Justify" +msgstr "Justify" + +#: none:0 +msgid "&Justify" +msgstr "&Justify" + +#: none:0 +msgid "Color" +msgstr "Color" + +#: none:0 +msgid "&Color..." +msgstr "&Color..." + +#: none:0 +msgid "Standard" +msgstr "Standard" + +#: none:0 +msgid "Bullet List (Disc)" +msgstr "Bullet List (Disc)" + +#: none:0 +msgid "Bullet List (Circle)" +msgstr "Bullet List (Circle)" + +#: none:0 +msgid "Bullet List (Square)" +msgstr "Bullet List (Square)" + +#: none:0 +msgid "Ordered List (Decimal)" +msgstr "Ordered List (Decimal)" + +#: none:0 +msgid "Ordered List (Alpha lower)" +msgstr "(Ordered List (Alpha lower)" + +#: none:0 +msgid "Ordered List (Alpha upper)" +msgstr "Ordered List (Alpha upper)" + +#: none:0 +msgid "OK" +msgstr "OK" + +#: none:0 +msgid "Cancel" +msgstr "Cancel" + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"locally connected" +msgstr "" +"_: QPrintDialog\n" +"locally connected" + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"Aliases: " +msgstr "" +"_: QPrintDialog\n" +"Aliases: " + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"unknown" +msgstr "" +"_: QPrintDialog\n" +"unknown" + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"Unknown Location" +msgstr "" +"_: QPrintDialog\n" +"Unknown Location" + +#: none:0 +msgid "Printer settings" +msgstr "Printer settings" + +#: none:0 +msgid "Print in color if available" +msgstr "Print in color if available" + +#: none:0 +msgid "Print in grayscale" +msgstr "Print in grayscale" + +#: none:0 +msgid "Print destination" +msgstr "Print destination" + +#: none:0 +msgid "Print to printer:" +msgstr "Print to printer:" + +#: none:0 +msgid "Printer" +msgstr "Printer" + +#: none:0 +msgid "Host" +msgstr "Host" + +#: none:0 +msgid "Comment" +msgstr "Comment" + +#: none:0 +msgid "Print to file:" +msgstr "Print to file:" + +#: none:0 +msgid "Browse..." +msgstr "Browse..." + +#: none:0 +msgid "Options" +msgstr "Options" + +#: none:0 +msgid "Print all" +msgstr "Print all" + +#: none:0 +msgid "Print range" +msgstr "Print range" + +#: none:0 +msgid "From page:" +msgstr "From page:" + +#: none:0 +msgid "To page:" +msgstr "To page:" + +#: none:0 +msgid "Print first page first" +msgstr "Print first page first" + +#: none:0 +msgid "Print last page first" +msgstr "Print last page first" + +#: none:0 +msgid "Number of copies:" +msgstr "Number of copies:"" + +#: none:0 +msgid "Paper format" +msgstr "Paper format" + +#: none:0 +msgid "Portrait" +msgstr "Portrait" + +#: none:0 +msgid "Landscape" +msgstr "Landscape" + +#: none:0 +msgid "A0 (841 x 1189 mm)" +msgstr "A0 (841 x 1189 mm)" + +#: none:0 +msgid "A1 (594 x 841 mm)" +msgstr "A1 (594 x 841 mm)" + +#: none:0 +msgid "A2 (420 x 594 mm)" +msgstr "A2 (420 x 594 mm)" + +#: none:0 +msgid "A3 (297 x 420 mm)" +msgstr "A3 (297 x 420 mm)" + +#: none:0 +msgid "A4 (210x297 mm, 8.26x11.7 inches)" +msgstr "A4 (210x297 mm, 8.26x11.7 inches)" + +#: none:0 +msgid "A5 (148 x 210 mm)" +msgstr "A5 (148 x 210 mm)" + +#: none:0 +msgid "A6 (105 x 148 mm)" +msgstr "A6 (105 x 148 mm)" + +#: none:0 +msgid "A7 (74 x 105 mm)" +msgstr "A7 (74 x 105 mm)" + +#: none:0 +msgid "A8 (52 x 74 mm)" +msgstr "A8 (52 x 74 mm)" + +#: none:0 +msgid "A9 (37 x 52 mm)" +msgstr "A9 (37 x 52 mm)" + +#: none:0 +msgid "B0 (1030 x 1456 mm)" +msgstr "B0 (1030 x 1456 mm)" + +#: none:0 +msgid "B1 (728 x 1030 mm)" +msgstr "B1 (728 x 1030 mm)" + +#: none:0 +msgid "B10 (32 x 45 mm)" +msgstr "B10 (32 x 45 mm)" + +#: none:0 +msgid "B2 (515 x 728 mm)" +msgstr "B2 (515 x 728 mm)" + +#: none:0 +msgid "B3 (364 x 515 mm)" +msgstr "B3 (364 x 515 mm)" + +#: none:0 +msgid "B4 (257 x 364 mm)" +msgstr "B4 (257 x 364 mm)" + +#: none:0 +msgid "B5 (182x257 mm, 7.17x10.13 inches)" +msgstr "B5 (182x257 mm, 7.17x10.13 inches)" + +#: none:0 +msgid "B6 (128 x 182 mm)" +msgstr "B6 (128 x 182 mm)" + +#: none:0 +msgid "B7 (91 x 128 mm)" +msgstr "B7 (91 x 128 mm)" + +#: none:0 +msgid "B8 (64 x 91 mm)" +msgstr "B8 (64 x 91 mm)" + +#: none:0 +msgid "B9 (45 x 64 mm)" +msgstr "B9 (45 x 64 mm)" + +#: none:0 +msgid "C5E (163 x 229 mm)" +msgstr "C5E (163 x 229 mm)" + +#: none:0 +msgid "DLE (110 x 220 mm)" +msgstr "DLE (110 x 220 mm)" + +#: none:0 +msgid "Executive (7.5x10 inches, 191x254 mm)" +msgstr "Executive (7.5x10 inches, 191x254 mm)" + +#: none:0 +msgid "Folio (210 x 330 mm)" +msgstr "Folio (210 x 330 mm)" + +#: none:0 +msgid "Ledger (432 x 279 mm)" +msgstr "Ledger (432 x 279 mm)" + +#: none:0 +msgid "Legal (8.5x14 inches, 216x356 mm)" +msgstr "Legal (8.5x14 inches, 216x356 mm)" + +#: none:0 +msgid "Letter (8.5x11 inches, 216x279 mm)" +msgstr "Letter (8.5x11 inches, 216x279 mm)" + +#: none:0 +msgid "Tabloid (279 x 432 mm)" +msgstr "Tabloid (279 x 432 mm)" + +#: none:0 +msgid "US Common #10 Envelope (105 x 241 mm)" +msgstr "US Common #10 Envelope (105 x 241 mm)" + +#: none:0 +msgid "Setup Printer" +msgstr "Setup Printer" + +#: none:0 +msgid "Postscript files (*.ps);;All files (*)" +msgstr "Postscript files (*.ps);;All files (*)" + +#: none:0 +msgid "Hu&e:" +msgstr "Hu&e:" + +#: none:0 +msgid "&Sat:" +msgstr "&Sat:" + +#: none:0 +msgid "&Val:" +msgstr "&Val:" + +#: none:0 +msgid "&Red:" +msgstr "&Red:" + +#: none:0 +msgid "&Green:" +msgstr "&Green:" + +#: none:0 +msgid "Bl&ue:" +msgstr "Bl&ue:" + +#: none:0 +msgid "A&lpha channel:" +msgstr "A&lpha channel:" + +#: none:0 +msgid "&Basic colors" +msgstr "&Basic colors" + +#: none:0 +msgid "&Custom colors" +msgstr "&Custom colors" + +#: none:0 +msgid "&Define Custom Colors >>" +msgstr "&Define Custom Colors >>" + +#: none:0 +msgid "&Add To Custom Colors" +msgstr "&Add To Custom Colors" + +#: none:0 +msgid "Select color" +msgstr "Select color" + +#: none:0 +msgid "Copy or Move a File" +msgstr "Copy or Move a File" + +#: none:0 +msgid "Read: %1" +msgstr "Read: %1" + +#: none:0 +msgid "Write: %1" +msgstr "Write: %1" + +#: none:0 +msgid "&Cancel" +msgstr "&Cancel" + +#: none:0 +msgid "All files (*)" +msgstr "All files (*)" + +#: none:0 +msgid "Name" +msgstr "Name" + +#: none:0 +msgid "Size" +msgstr "Size" + +#: none:0 +msgid "Type" +msgstr "Type" + +#: none:0 +msgid "Date" +msgstr "Date" + +#: none:0 +msgid "Attributes" +msgstr "Attributes" + +#: none:0 +msgid "Look &in:" +msgstr "Look &in:" + +#: none:0 +msgid "File &name:" +msgstr "File &name:" + +#: none:0 +msgid "File &type:" +msgstr "File &type:" + +#: none:0 +msgid "Back" +msgstr "Back" + +#: none:0 +msgid "One directory up" +msgstr "One directory up" + +#: none:0 +msgid "Create New Folder" +msgstr "Create New Folder" + +#: none:0 +msgid "List View" +msgstr "List View" + +#: none:0 +msgid "Detail View" +msgstr "Detail View" + +#: none:0 +msgid "Preview File Info" +msgstr "Preview File Info" + +#: none:0 +msgid "Preview File Contents" +msgstr "Preview File Contents" + +#: none:0 +msgid "Read-write" +msgstr "Read-write" + +#: none:0 +msgid "Read-only" +msgstr "Read-only" + +#: none:0 +msgid "Write-only" +msgstr "Write-only" + +#: none:0 +msgid "Inaccessible" +msgstr "Inaccessible" + +#: none:0 +msgid "Symlink to File" +msgstr "Symlink to File" + +#: none:0 +msgid "Symlink to Directory" +msgstr "Symlink to Directory" + +#: none:0 +msgid "Symlink to Special" +msgstr "Symlink to Special" + +#: none:0 +msgid "File" +msgstr "File" + +#: none:0 +msgid "Dir" +msgstr "Dir" + +#: none:0 +msgid "Special" +msgstr "Special" + +#: none:0 +msgid "Save as" +msgstr "Save as" + +#: none:0 +msgid "&Open" +msgstr "&Open" + +#: none:0 +msgid "&Save" +msgstr "&Save" + +#: none:0 +msgid "&Rename" +msgstr "&Rename" + +#: none:0 +msgid "&Delete" +msgstr "&Delete" + +#: none:0 +msgid "R&eload" +msgstr "R&eload" + +#: none:0 +msgid "Sort by &Name" +msgstr "Sort by &Name" + +#: none:0 +msgid "Sort by &Size" +msgstr "Sort by &Size" + +#: none:0 +msgid "Sort by &Date" +msgstr "Sort by &Date" + +#: none:0 +msgid "&Unsorted" +msgstr "&Unsorted" + +#: none:0 +msgid "Sort" +msgstr "Sort" + +#: none:0 +msgid "Show &hidden files" +msgstr "Show &hidden files" + +#: none:0 +msgid "the file" +msgstr "the file" + +#: none:0 +msgid "the directory" +msgstr "the directory" + +#: none:0 +msgid "the symlink" +msgstr "the symlink" + +#: none:0 +msgid "Delete %1" +msgstr "Delete %1" + +#: none:0 +msgid "<qt>Do you really want to delete %1 \"%2\"?</qt>" +msgstr "<qt>Do you really want to delete %1 \"%2\"?</qt>" + +#: none:0 +msgid "&Yes" +msgstr "&Yes" + +#: none:0 +msgid "&No" +msgstr "&No" + +#: none:0 +msgid "New Folder 1" +msgstr "New Folder 1" + +#: none:0 +msgid "New Folder" +msgstr "New Folder" + +#: none:0 +msgid "New Folder %1" +msgstr "New Folder %1" + +#: none:0 +msgid "Find Directory" +msgstr "Find Directory" + +#: none:0 +msgid "Directories" +msgstr "Directories" + +#: none:0 +msgid "Error" +msgstr "Error" + +#: none:0 +msgid "" +"%1\n" +"File not found.\n" +"Check path and filename." +msgstr "" +"%1\n" +"File not found.\n" +"Check path and filename." + +#: none:0 +msgid "ERROR" +msgstr "ERROR" + +#: none:0 +msgid "&Font" +msgstr "&Font" + +#: none:0 +msgid "Font st&yle" +msgstr "Font st&yle" + +#: none:0 +msgid "&Size" +msgstr "&Size" + +#: none:0 +msgid "Effects" +msgstr "Effects" + +#: none:0 +msgid "Stri&keout" +msgstr "Stri&keout" + +#: none:0 +msgid "&Color" +msgstr "&Color" + +#: none:0 +msgid "Sample" +msgstr "Sample" + +#: none:0 +msgid "Scr&ipt" +msgstr "Scr&ipt" + +#: none:0 +msgid "Apply" +msgstr "Apply" + +#: none:0 +#: none:0 +msgid "Close" +msgstr "Close" + +#: none:0 +msgid "Select Font" +msgstr "Select Font" + +#: none:0 +msgid "&OK" +msgstr "&OK" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"OK" +msgstr "OK" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Yes" +msgstr "Yes" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"No" +msgstr "No" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Abort" +msgstr "Abort" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Retry" +msgstr "Retry" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Ignore" +msgstr "Ignore" + +#: none:0 +msgid "" +"<h3>About Qt</h3><p>This program uses Qt version %1, a multiplatform C++ GUI " +"toolkit from Trolltech. Qt provides single-source portability across Windows " +"95/98/NT/2000, Mac OS X, Linux, Solaris, HP-UX and many other versions of Unix with X11" +".</p><p>See <tt>http://www.trolltech.com/qt/</tt> for more information.</p>" +msgstr "" +"<h3>About Qt</h3><p>This program uses Qt version %1, a multiplatform C++ GUI " +"toolkit from Trolltech. Qt provides single-source portability across Windows " +"95/98/NT/2000, Mac OS X, Linux, Solaris, HP-UX and many other versions of Unix with X11" +".</p><p>See <tt>http://www.trolltech.com/qt/</tt> for more information.</p>" + +#: none:0 +msgid "Minimize" +msgstr "Minimize" + +#: none:0 +msgid "Maximize" +msgstr "Maximize" diff --git a/examples/demo/i18n/en.qm b/examples/demo/i18n/en.qm Binary files differnew file mode 100644 index 0000000..eccc5fd --- /dev/null +++ b/examples/demo/i18n/en.qm diff --git a/examples/demo/i18n/i18n.cpp b/examples/demo/i18n/i18n.cpp new file mode 100644 index 0000000..41d866d --- /dev/null +++ b/examples/demo/i18n/i18n.cpp @@ -0,0 +1,253 @@ +#include "i18n.h" +#include "wrapper.h" +#include "../textdrawing/textedit.h" + +#include <qaction.h> +#include <qlayout.h> +#include <qvbox.h> +#include <qworkspace.h> +#include <qpopupmenu.h> +#include <qmenubar.h> +#include <qtoolbar.h> +#include <qtoolbutton.h> +#include <qpixmap.h> +#include <qiconset.h> +#include <qapplication.h> +#include <qwidgetlist.h> +#include <qlabel.h> +#include <qtextedit.h> + + +static int windowIdNumber = 5000; +static bool firstShow = TRUE; + + +I18nDemo::I18nDemo(QWidget *parent, const char *name) + : QMainWindow(parent, name, 0), lastwrapper(0) +{ + initActions(); + initMenuBar(); + + QVBox *box = new QVBox(this); + box->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken ); + box->setMargin( 1 ); + box->setLineWidth( 1 ); + + workspace = new QWorkspace(box); + connect(workspace, SIGNAL(windowActivated(QWidget *)), + SLOT(windowActivated(QWidget *))); + workspace->setBackgroundMode(PaletteMid); + + setCentralWidget(box); +} + + +I18nDemo::~I18nDemo() +{ +} + + +void I18nDemo::initActions() +{ + actionClose = new QAction(tr("Close the current window."), + tr("Close"), + CTRL + Key_F4, + this); + connect(actionClose, SIGNAL(activated()), SLOT(closeSlot())); + + actionCloseAll = new QAction(tr("Close all opened windows."), + tr("Close All"), + 0, + this); + connect(actionCloseAll, SIGNAL(activated()), SLOT(closeAllSlot())); + + actionTile = new QAction(tr("Tile opened windows."), + tr("Tile"), + 0, + this); + connect(actionTile, SIGNAL(activated()), SLOT(tileSlot())); + + actionCascade = new QAction(tr("Cascade opened windows."), + tr("Cascade"), + 0, + this); + connect(actionCascade, SIGNAL(activated()), SLOT(cascadeSlot())); +} + + +void I18nDemo::initMenuBar() +{ + newMenu = new QPopupMenu(this); + connect(newMenu, SIGNAL(activated(int)), SLOT(newSlot(int))); + + newMenu->insertItem("&English", 0); + newMenu->insertItem("&Japanese", 1); + newMenu->insertItem("&Korean", 2); + newMenu->insertItem("&Norwegian", 3); + + windowMenu = new QPopupMenu(this); + connect(windowMenu, SIGNAL(activated(int)), SLOT(windowSlot(int))); + + windowMenu->setCheckable(TRUE); + + actionClose->addTo(windowMenu); + actionCloseAll->addTo(windowMenu); + windowMenu->insertSeparator(); + actionTile->addTo(windowMenu); + actionCascade->addTo(windowMenu); + windowMenu->insertSeparator(); + + menuBar()->insertItem(tr("&New"), newMenu); + menuBar()->insertItem(tr("&Window"), windowMenu); +} + + +void I18nDemo::newSlot(int id) +{ + QString qmfile; + switch (id) { + default: + case 0: qmfile = "i18n/en.qm"; break; + case 1: qmfile = "i18n/ja.qm"; break; + case 2: qmfile = "i18n/ko.qm"; break; + case 3: qmfile = "i18n/no.qm"; break; + } + + if (lastwrapper) { + qApp->removeTranslator(&lastwrapper->translator); + lastwrapper = 0; + } + + Wrapper *wrapper = new Wrapper(workspace, windowIdNumber); + wrapper->translator.load(qmfile, "."); + + qApp->installTranslator(&wrapper->translator); + + connect(wrapper, SIGNAL(destroyed()), SLOT(wrapperDead())); + wrapper->setCaption(tr("--language--")); + + TextEdit *te = new TextEdit(wrapper); + te->layout()->setResizeMode( QLayout::FreeResize ); + te->setMinimumSize(500, 400); + te->fileNew(); + te->currentEditor()-> + setText(tr("<h3>About Qt</h3>" + "<p>This program uses Qt version %1, a multiplatform C++ " + "GUI toolkit from Trolltech. Qt provides single-source " + "portability across Windows 95/98/NT/2000, Mac OS X, Linux, Solaris, " + "HP-UX and many other versions of Unix with X11.</p>" + "<p>See <tt>http://www.trolltech.com/qt/</tt> for more " + "information.</p>").arg(QT_VERSION_STR)); + + qApp->removeTranslator(&wrapper->translator); + + te->show(); + wrapper->show(); + + windowMenu->insertItem(wrapper->caption(), wrapper->id); + windowMenu->setItemChecked(wrapper->id, TRUE); + lastwrapper = wrapper; + + windowIdNumber++; +} + + +void I18nDemo::windowSlot(int id) +{ + if (id < 5000) + return; + + QWidgetList list = workspace->windowList(); + Wrapper *wrapper = (Wrapper *) list.first(); + while (wrapper) { + if (wrapper->id == id) { + wrapper->setFocus(); + break; + } + + wrapper = (Wrapper *) list.next(); + } +} + + +void I18nDemo::windowActivated(QWidget *w) +{ + if (lastwrapper) { + qApp->removeTranslator(&lastwrapper->translator); + windowMenu->setItemChecked(lastwrapper->id, FALSE); + } + + if (! w) { + lastwrapper = 0; + return; + } + + Wrapper *wrapper = (Wrapper *) w; + + windowMenu->setItemChecked(wrapper->id, TRUE); + lastwrapper = wrapper; +} + + +void I18nDemo::closeSlot() +{ + QWidget *w = workspace->activeWindow(); + delete w; +} + + +void I18nDemo::closeAllSlot() +{ + QWidget *w; + while ((w = workspace->activeWindow())) + w->close(TRUE); +} + + +void I18nDemo::tileSlot() +{ + workspace->tile(); +} + + +void I18nDemo::cascadeSlot() +{ + workspace->cascade(); +} + + +void I18nDemo::wrapperDead() +{ + Wrapper *w = (Wrapper *) sender(); + + if (w == lastwrapper) { + qApp->removeTranslator(&w->translator); + lastwrapper = 0; + } + + windowMenu->removeItem(w->id); +} + + +void I18nDemo::showEvent(QShowEvent *) +{ + if (firstShow) { + newSlot(1); + firstShow = FALSE; + return; + } + + if (! lastwrapper) + return; + + qApp->installTranslator(&lastwrapper->translator); +} + + +void I18nDemo::hideEvent(QHideEvent *) +{ + if (! lastwrapper) + return; + + qApp->removeTranslator(&lastwrapper->translator); +} diff --git a/examples/demo/i18n/i18n.h b/examples/demo/i18n/i18n.h new file mode 100644 index 0000000..aca836b --- /dev/null +++ b/examples/demo/i18n/i18n.h @@ -0,0 +1,44 @@ +#ifndef I18N_H +#define I18N_H + +#include <qmainwindow.h> + +class QWorkspace; +class QAction; +class QPopupMenu; +class Wrapper; + + +class I18nDemo : public QMainWindow +{ + Q_OBJECT + +public: + I18nDemo(QWidget *, const char * = 0); + ~I18nDemo(); + + void initActions(); + void initMenuBar(); + + void showEvent(QShowEvent *); + void hideEvent(QHideEvent *); + + QWorkspace *workspace; + QAction *actionClose, *actionCloseAll, *actionTile, *actionCascade; + QPopupMenu *windowMenu, *newMenu; + Wrapper *lastwrapper; + + +public slots: + void newSlot(int); + void windowSlot(int); + void windowActivated(QWidget *); + void closeSlot(); + void closeAllSlot(); + void tileSlot(); + void cascadeSlot(); + void wrapperDead(); +}; + + +#endif // I18N_H diff --git a/examples/demo/i18n/ja.po b/examples/demo/i18n/ja.po new file mode 100644 index 0000000..c61d213 --- /dev/null +++ b/examples/demo/i18n/ja.po @@ -0,0 +1,847 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: none:0 +msgid "--language--" +msgstr "日本語" + +#: none:0 +msgid "&File" +msgstr "ファイル (&F)" + +#: none:0 +msgid "New" +msgstr "æ–°è¦" + +#: none:0 +msgid "&New..." +msgstr "æ–°è¦(&N)..." + +#: none:0 +msgid "Open" +msgstr "é–‹ã" + +#: none:0 +msgid "&Open..." +msgstr "é–‹ã(&O)..." + +#: none:0 +msgid "Save As" +msgstr "åå‰ã‚’付ã‘ã¦ä¿å˜" + +#: none:0 +msgid "Save &As..." +msgstr "åå‰ã‚’付ã‘ã¦ä¿å˜(&A)..." + +#: none:0 +msgid "Save" +msgstr "ä¿å˜" + +#: none:0 +msgid "&Save..." +msgstr "ä¿å˜(&S)..." + +#: none:0 +msgid "Print" +msgstr "å°åˆ·" + +#: none:0 +msgid "&Print..." +msgstr "å°åˆ·(&P)..." + +#: none:0 +msgid "&Close" +msgstr "é–‰ã˜ã‚‹(&C)" + +#: none:0 +msgid "&Edit" +msgstr "編集(&E)" + +#: none:0 +msgid "&Undo" +msgstr "å…ƒã«æˆ»ã™(&U)" + +#: none:0 +msgid "Undo" +msgstr "å…ƒã«æˆ»ã™" + +#: none:0 +msgid "&Redo" +msgstr "やり直ã—(&R)" + +#: none:0 +msgid "Redo" +msgstr "やり直ã—" + +#: none:0 +msgid "Cut" +msgstr "切りå–り" + +#: none:0 +msgid "&Cut" +msgstr "切りå–り(&C)" + +#: none:0 +msgid "C&opy" +msgstr "コピー(&O)" + +#: none:0 +msgid "Copy" +msgstr "コピー" + +#: none:0 +msgid "Paste" +msgstr "貼り付ã‘" + +#: none:0 +msgid "&Paste" +msgstr "貼り付ã‘(&P)" + +#: none:0 +msgid "Clear" +msgstr "クリア" + +#: none:0 +msgid "Select All" +msgstr "å…¨ã¦é¸æŠž" + +#: none:0 +msgid "Line up" +msgstr "ツールãƒãƒ¼ã‚’ラインアップ" + +#: none:0 +msgid "For&mat" +msgstr "フォーマット(&M)" + +#: none:0 +msgid "Bold" +msgstr "ボールド" + +#: none:0 +msgid "&Bold" +msgstr "ボールド(&B)" + +#: none:0 +msgid "Italic" +msgstr "イタリック" + +#: none:0 +msgid "&Italic" +msgstr "イタリック(&I)" + +#: none:0 +msgid "Underline" +msgstr "下線" + +#: none:0 +msgid "&Underline" +msgstr "下線(&U)" + +#: none:0 +msgid "Left" +msgstr "å·¦" + +#: none:0 +msgid "&Left" +msgstr "å·¦(&L)" + +#: none:0 +msgid "Center" +msgstr "ä¸å¤®" + +#: none:0 +msgid "C&enter" +msgstr "ä¸å¤®(&E)" + +#: none:0 +msgid "Right" +msgstr "å³" + +#: none:0 +msgid "&Right" +msgstr "å³(&R)" + +#: none:0 +msgid "Justify" +msgstr "ブãƒãƒƒã‚¯æƒãˆ" + +#: none:0 +msgid "&Justify" +msgstr "ブãƒãƒƒã‚¯æƒãˆ(&J)" + +#: none:0 +msgid "Color" +msgstr "色" + +#: none:0 +msgid "&Color..." +msgstr "色(&C)..." + +#: none:0 +msgid "Standard" +msgstr "普通" + +#: none:0 +msgid "Bullet List (Disc)" +msgstr "ビュレットリスト (円 塗りã¤ã¶ã—)" + +#: none:0 +msgid "Bullet List (Circle)" +msgstr "ビュレットリスト (円)" + +#: none:0 +msgid "Bullet List (Square)" +msgstr "ビュレットリスト (æ£æ–¹å½¢)" + +#: none:0 +msgid "Ordered List (Decimal)" +msgstr "列挙リスト (10進法)" + +#: none:0 +msgid "Ordered List (Alpha lower)" +msgstr "列挙リスト (å°æ–‡å—ã«)" + +#: none:0 +msgid "Ordered List (Alpha upper)" +msgstr "列挙リスト (大文å—ã«)" + +#: none:0 +msgid "OK" +msgstr "ã¯ã„" + +#: none:0 +msgid "Cancel" +msgstr "ã‚ャンセル" + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"locally connected" +msgstr "ãƒãƒ¼ã‚«ãƒ«ã«æŽ¥ç¶šä¸" + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"Aliases: " +msgstr "エイリアス" + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"unknown" +msgstr "未知" + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"Unknown Location" +msgstr "未知ã®å ´æ‰€" + +#: none:0 +msgid "Printer settings" +msgstr "プリンターã®è¨å®š" + +#: none:0 +msgid "Print in color if available" +msgstr "å¯èƒ½ãªã‚‰ã‚«ãƒ©ãƒ¼ã§å°åˆ·" + +#: none:0 +msgid "Print in grayscale" +msgstr "白黒ã§å°åˆ·" + +#: none:0 +msgid "Print destination" +msgstr "å°åˆ·å¯¾è±¡" + +#: none:0 +msgid "Print to printer:" +msgstr "å°åˆ·ã™ã‚‹ãƒ—リンタ:" + +#: none:0 +msgid "Printer" +msgstr "プリンタ" + +#: none:0 +msgid "Host" +msgstr "ホスト" + +#: none:0 +msgid "Comment" +msgstr "コメント" + +#: none:0 +msgid "Print to file:" +msgstr "ファイルã«å‡ºåŠ›:" + +#: none:0 +msgid "Browse..." +msgstr "ブラウズ..." + +#: none:0 +msgid "Options" +msgstr "オプション" + +#: none:0 +msgid "Print all" +msgstr "å…¨ã¦å°åˆ·" + +#: none:0 +msgid "Print range" +msgstr "å°åˆ·ç¯„囲" + +#: none:0 +msgid "From page:" +msgstr "開始ページ:" + +#: none:0 +msgid "To page:" +msgstr "終了ページ:" + +#: none:0 +msgid "Print first page first" +msgstr "最åˆã®ãƒšãƒ¼ã‚¸ã‹ã‚‰å°åˆ·" + +#: none:0 +msgid "Print last page first" +msgstr "最後ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰å°åˆ·" + +#: none:0 +msgid "Number of copies:" +msgstr "ã‚³ãƒ”ãƒ¼ã®æ•°:" + +#: none:0 +msgid "Paper format" +msgstr "ページャフォーマット" + +#: none:0 +msgid "Portrait" +msgstr "縦長" + +#: none:0 +msgid "Landscape" +msgstr "横長" + +#: none:0 +msgid "A0 (841 x 1189 mm)" +msgstr "A0 (841 x 1189 mm)" + +#: none:0 +msgid "A1 (594 x 841 mm)" +msgstr "A1 (594 x 841 mm)" + +#: none:0 +msgid "A2 (420 x 594 mm)" +msgstr "A2 (420 x 594 mm)" + +#: none:0 +msgid "A3 (297 x 420 mm)" +msgstr "A3 (297 x 420 mm)" + +#: none:0 +msgid "A4 (210x297 mm, 8.26x11.7 inches)" +msgstr "A4 (210x297 mm, 8.26x11.7 inch)" + +#: none:0 +msgid "A5 (148 x 210 mm)" +msgstr "A5 (148 x 210 mm)" + +#: none:0 +msgid "A6 (105 x 148 mm)" +msgstr "A6 (105 x 148 mm)" + +#: none:0 +msgid "A7 (74 x 105 mm)" +msgstr "A7 (74 x 105 mm)" + +#: none:0 +msgid "A8 (52 x 74 mm)" +msgstr "A8 (52 x 74 mm)" + +#: none:0 +msgid "A9 (37 x 52 mm)" +msgstr "A9 (37 x 52 mm)" + +#: none:0 +msgid "B0 (1030 x 1456 mm)" +msgstr "B0 (1030 x 1456 mm" + +#: none:0 +msgid "B1 (728 x 1030 mm)" +msgstr "B1 (728 x 1030 mm)" + +#: none:0 +msgid "B10 (32 x 45 mm)" +msgstr "B10 (32 x 45 mm)" + +#: none:0 +msgid "B2 (515 x 728 mm)" +msgstr "B2 (515 x 728 mm)" + +#: none:0 +msgid "B3 (364 x 515 mm)" +msgstr "B3 (364 x 515 mm)" + +#: none:0 +msgid "B4 (257 x 364 mm)" +msgstr "B4 (257 x 364 mm)" + +#: none:0 +msgid "B5 (182x257 mm, 7.17x10.13 inches)" +msgstr "B5 (182x257 mm, 7.17x10.13 inch)" + +#: none:0 +msgid "B6 (128 x 182 mm)" +msgstr "B6 (128 x 182 mm)" + +#: none:0 +msgid "B7 (91 x 128 mm)" +msgstr "B7 (91 x 128 mm)" + +#: none:0 +msgid "B8 (64 x 91 mm)" +msgstr "B8 (64 x 91 mm)" + +#: none:0 +msgid "B9 (45 x 64 mm)" +msgstr "B9 (45 x 64 mm)" + +#: none:0 +msgid "C5E (163 x 229 mm)" +msgstr "C5E (163 x 229 mm)" + +#: none:0 +msgid "DLE (110 x 220 mm)" +msgstr "DLE (110 x 220 mm)" + +#: none:0 +msgid "Executive (7.5x10 inches, 191x254 mm)" +msgstr "Executive (7.5x10 inch, 191x254 mm)" + +#: none:0 +msgid "Folio (210 x 330 mm)" +msgstr "Folio (210 x 330 mm)" + +#: none:0 +msgid "Ledger (432 x 279 mm)" +msgstr "Ledger (432 x 279 mm)" + +#: none:0 +msgid "Legal (8.5x14 inches, 216x356 mm)" +msgstr "Legal (8.5x14 inch, 216x356 mm)" + +#: none:0 +msgid "Letter (8.5x11 inches, 216x279 mm)" +msgstr "Letter (8.5x11 inch, 216x279 mm)" + +#: none:0 +msgid "Tabloid (279 x 432 mm)" +msgstr "タブãƒã‚¤ãƒ‰ (279 x 432 mm)" + +#: none:0 +msgid "US Common #10 Envelope (105 x 241 mm)" +msgstr "US 一般 #10 å°ç’ (105 x 241 mm)" + +#: none:0 +msgid "Setup Printer" +msgstr "プリンタã®è¨å®š" + +#: none:0 +msgid "Postscript files (*.ps);;All files (*)" +msgstr "Postscript files (*.ps);;All files (*)" + +#: none:0 +msgid "Hu&e:" +msgstr "色調(&e):" + +#: none:0 +msgid "&Sat:" +msgstr "彩度(&S):" + +#: none:0 +msgid "&Val:" +msgstr "値(&V):" + +#: none:0 +msgid "&Red:" +msgstr "赤(&R):" + +#: none:0 +msgid "&Green:" +msgstr "ç·‘(&G):" + +#: none:0 +msgid "Bl&ue:" +msgstr "é’(&u):" + +#: none:0 +msgid "A&lpha channel:" +msgstr "アルファãƒãƒ£ãƒ³ãƒãƒ«(&l):" + +#: none:0 +msgid "&Basic colors" +msgstr "基本色(&B)" + +#: none:0 +msgid "&Custom colors" +msgstr "カスタム色(&C)" + +#: none:0 +msgid "&Define Custom Colors >>" +msgstr "カスタム色を定義(&D) >>" + +#: none:0 +msgid "&Add To Custom Colors" +msgstr "カスタム色ã«è¿½åŠ (&A)" + +#: none:0 +msgid "Select color" +msgstr "è‰²ã‚’é¸æŠž" + +#: none:0 +msgid "Copy or Move a File" +msgstr "ファイルをコピーã€ç§»å‹•" + +#: none:0 +#, c-format +msgid "Read: %1" +msgstr "èªã¿è¾¼ã¿: %1" + +#: none:0 +#, c-format +msgid "Write: %1" +msgstr "書ãè¾¼ã¿: %1" + +#: none:0 +msgid "&Cancel" +msgstr "ã‚ャンセル(&C)" + +#: none:0 +msgid "All files (*)" +msgstr "å…¨ã¦ã®ãƒ•ァイル (*)" + +#: none:0 +msgid "Name" +msgstr "åå‰" + +#: none:0 +msgid "Size" +msgstr "サイズ" + +#: none:0 +msgid "Type" +msgstr "タイプ" + +#: none:0 +msgid "Date" +msgstr "日付" + +#: none:0 +msgid "Attributes" +msgstr "属性" + +#: none:0 +msgid "Look &in:" +msgstr "Look &in:" + +#: none:0 +msgid "File &name:" +msgstr "ファイルå(&n):" + +#: none:0 +msgid "File &type:" +msgstr "ファイルタイプ(&t):" + +#: none:0 +msgid "Back" +msgstr "戻る" + +#: none:0 +msgid "One directory up" +msgstr "ディレクトリを一ã¤ä¸Šã«" + +#: none:0 +msgid "Create New Folder" +msgstr "æ–°ã—ã„フォルダを作æˆ" + +#: none:0 +msgid "List View" +msgstr "リストビュー" + +#: none:0 +msgid "Detail View" +msgstr "詳細ãªãƒ“ュー" + +#: none:0 +msgid "Preview File Info" +msgstr "ãƒ•ã‚¡ã‚¤ãƒ«æƒ…å ±ã‚’ãƒ—ãƒ¬ãƒ“ãƒ¥ãƒ¼" + +#: none:0 +msgid "Preview File Contents" +msgstr "ファイルã®ä¸èº«ã‚’プレビュー" + +#: none:0 +msgid "Read-write" +msgstr "èªã¿è¾¼ã¿ 書ãè¾¼ã¿" + +#: none:0 +msgid "Read-only" +msgstr "èªã¿è¾¼ã¿ã®ã¿" + +#: none:0 +msgid "Write-only" +msgstr "書ãè¾¼ã¿ã®ã¿" + +#: none:0 +msgid "Inaccessible" +msgstr "アクセスä¸å¯" + +#: none:0 +msgid "Symlink to File" +msgstr "ファイルã«ã‚·ãƒ リンク" + +#: none:0 +msgid "Symlink to Directory" +msgstr "ディレクトリã«ã‚·ãƒ リンク" + +#: none:0 +msgid "Symlink to Special" +msgstr "特殊ã«ã‚·ãƒ リンク" + +#: none:0 +msgid "File" +msgstr "ファイル" + +#: none:0 +msgid "Dir" +msgstr "ディレクトリ" + +#: none:0 +msgid "Special" +msgstr "特殊" + +#: none:0 +msgid "Save as" +msgstr "åå‰ã‚’付ã‘ã¦ä¿å˜" + +#: none:0 +msgid "&Open" +msgstr "é–‹ã(&O)" + +#: none:0 +msgid "&Save" +msgstr "ä¿å˜(&S)" + +#: none:0 +msgid "&Rename" +msgstr "åå‰å¤‰æ›´(&R)" + +#: none:0 +msgid "&Delete" +msgstr "削除(&D)" + +#: none:0 +msgid "R&eload" +msgstr "å†èªã¿è¾¼ã¿(&e)" + +#: none:0 +msgid "Sort by &Name" +msgstr "åå‰ã§ã‚½ãƒ¼ãƒˆ(&N)" + +#: none:0 +msgid "Sort by &Size" +msgstr "サイズã§ã‚½ãƒ¼ãƒˆ(&S)" + +#: none:0 +msgid "Sort by &Date" +msgstr "日付ã§ã‚½ãƒ¼ãƒˆ(&D)" + +#: none:0 +msgid "&Unsorted" +msgstr "ソートãªã—(&U)" + +#: none:0 +msgid "Sort" +msgstr "ソート" + +#: none:0 +msgid "Show &hidden files" +msgstr "éš ã—ファイルを表示(&h)" + +#: none:0 +msgid "the file" +msgstr "ファイル" + +#: none:0 +msgid "the directory" +msgstr "ディレクトリ" + +#: none:0 +msgid "the symlink" +msgstr "シムリンク" + +#: none:0 +#, c-format +msgid "Delete %1" +msgstr "%1 を削除" + +#: none:0 +msgid "<qt>Do you really want to delete %1 \"%2\"?</qt>" +msgstr "<qt>本当㫠%1 \"%2\" を削除ã—ã¾ã™ã‹?</qt>" + +#: none:0 +msgid "&Yes" +msgstr "ã¯ã„(&Y)" + +#: none:0 +msgid "&No" +msgstr "ã„ã„ãˆ(&N)" + +#: none:0 +msgid "New Folder 1" +msgstr "æ–°è¦ãƒ•ォルダ 1" + +#: none:0 +msgid "New Folder" +msgstr "æ–°è¦ãƒ•ォルダ" + +#: none:0 +#, c-format +msgid "New Folder %1" +msgstr "æ–°è¦ãƒ•ォルダ %1" + +#: none:0 +msgid "Find Directory" +msgstr "ディレクトリを検索" + +#: none:0 +msgid "Directories" +msgstr "ディレクトリ" + +#: none:0 +msgid "Error" +msgstr "エラー" + +#: none:0 +msgid "" +"%1\n" +"File not found.\n" +"Check path and filename." +msgstr "" +"%1\n" +"ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“\n" +"パスã¨ãƒ•ァイルåã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ä¸‹ã•ã„。" + +#: none:0 +msgid "ERROR" +msgstr "エラー" + +#: none:0 +msgid "&Font" +msgstr "フォント(&F)" + +#: none:0 +msgid "Font st&yle" +msgstr "フォントスタイル(&y)" + +#: none:0 +#: none:0 +msgid "&Size" +msgstr "サイズ(&S)" + +#: none:0 +msgid "Effects" +msgstr "効果" + +#: none:0 +msgid "Stri&keout" +msgstr "Stri&keout" + +#: none:0 +msgid "&Color" +msgstr "色(&C)" + +#: none:0 +msgid "Sample" +msgstr "例" + +#: none:0 +msgid "Scr&ipt" +msgstr "スクリプト(&i)" + +#: none:0 +msgid "Apply" +msgstr "é©ç”¨" + +#: none:0 +#: none:0 +msgid "Close" +msgstr "é–‰ã˜ã‚‹" + +#: none:0 +msgid "Select Font" +msgstr "ãƒ•ã‚©ãƒ³ãƒˆã‚’é¸æŠž" + +#: none:0 +msgid "&OK" +msgstr "ã¯ã„(&O)" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"OK" +msgstr "ã¯ã„" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Yes" +msgstr "ã¯ã„" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"No" +msgstr "ã„ã„ãˆ" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Abort" +msgstr "䏿¢" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Retry" +msgstr "å†è©¦è¡Œ" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Ignore" +msgstr "無視" + +#: none:0 +msgid "" +"<h3>About Qt</h3><p>This program uses Qt version %1, a multiplatform C++ GUI " +"toolkit from Trolltech. Qt provides single-source portability across Windows " +"95/98/NT/2000, Mac OS X, Linux, Solaris, HP-UX and many other versions of Unix with X11" +".</p><p>See <tt>http://www.trolltech.com/qt/</tt> for more information.</p>" +msgstr "" +"<h3>Qt ã«ã¤ã„ã¦</h3><p>ã“ã®ãƒ—ãƒã‚°ãƒ©ãƒ 㯠Trolltech社ã®ãƒžãƒ«ãƒ" +"プラットフォームC++ GUI ツールã‚ットQt ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %1 ã‚’" +"使用ã—ã¦ã„ã¾ã™ã€‚Qt ã¯Windows 95/98/NT/2000, Mac OS X, Linux, Solaris, HP-UX " +"ä»–X11ã¨Unixã®å¤šãã®ç‰ˆã§ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰äº’æ›ã‚’実ç¾ã—ã¾ã™ã€‚<" +"/p><p>詳細ã¯<tt>http://www.trolltech.com/qt/</tt>ã‚’å‚ç…§ã—ã¦ãã ã•" +"ã„。</p>" + +#: none:0 +msgid "Minimize" +msgstr "最å°åŒ–" + +#: none:0 +msgid "Maximize" +msgstr "最大化" diff --git a/examples/demo/i18n/ja.qm b/examples/demo/i18n/ja.qm Binary files differnew file mode 100644 index 0000000..788888e --- /dev/null +++ b/examples/demo/i18n/ja.qm diff --git a/examples/demo/i18n/ko.po b/examples/demo/i18n/ko.po new file mode 100644 index 0000000..81a3ec7 --- /dev/null +++ b/examples/demo/i18n/ko.po @@ -0,0 +1,847 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: none:0 +msgid "--language--" +msgstr "한êµì–´" + +#: none:0 +msgid "&File" +msgstr "íŒŒì¼ ì°¾ê¸° (&F)" + +#: none:0 +msgid "New" +msgstr "새" + +#: none:0 +msgid "&New..." +msgstr "새 (&N)..." + +#: none:0 +msgid "Open" +msgstr "열기" + +#: none:0 +msgid "&Open..." +msgstr "열기 (&O)..." + +#: none:0 +msgid "Save As" +msgstr "다른 ì´ë¦„으로 ì €ìž¥" + +#: none:0 +msgid "Save &As..." +msgstr "다른 ì´ë¦„으로 ì €ìž¥ (&A)..." + +#: none:0 +msgid "Save" +msgstr "ì €ìž¥" + +#: none:0 +msgid "&Save..." +msgstr "ì €ìž¥ (&S)..." + +#: none:0 +msgid "Print" +msgstr "ì¸ì‡„" + +#: none:0 +msgid "&Print..." +msgstr "ì¸ì‡„ (&P)..." + +#: none:0 +msgid "&Close" +msgstr "닫기 (&C)" + +#: none:0 +msgid "&Edit" +msgstr "편집 (&E)" + +#: none:0 +msgid "&Undo" +msgstr "실행취소 (&U)" + +#: none:0 +msgid "Undo" +msgstr "실행취소" + +#: none:0 +msgid "&Redo" +msgstr "다시 실행 (&R)" + +#: none:0 +msgid "Redo" +msgstr "다시 실행" + +#: none:0 +msgid "Cut" +msgstr "ìžë¥´ê¸°" + +#: none:0 +msgid "&Cut" +msgstr "ìžë¥´ê¸° (&C)" + +#: none:0 +msgid "C&opy" +msgstr "복사 (&O)" + +#: none:0 +msgid "Copy" +msgstr "복사" + +#: none:0 +msgid "Paste" +msgstr "붙여넣기" + +#: none:0 +msgid "&Paste" +msgstr "붙여넣기 (&P)" + +#: none:0 +msgid "Clear" +msgstr "지움" + +#: none:0 +msgid "Select All" +msgstr "ëª¨ë‘ ê³ ë¥´ê¸°" + +#: none:0 +msgid "Line up" +msgstr "ë„구줄 올리기" + +#: none:0 +msgid "For&mat" +msgstr "í˜•ì‹ (&M)" + +#: none:0 +msgid "Bold" +msgstr "볼드" + +#: none:0 +msgid "&Bold" +msgstr "볼드 (&B)" + +#: none:0 +msgid "Italic" +msgstr "ì´íƒ¤ë¦" + +#: none:0 +msgid "&Italic" +msgstr "ì´íƒ¤ë¦ (&I)" + +#: none:0 +msgid "Underline" +msgstr "밑줄" + +#: none:0 +msgid "&Underline" +msgstr "밑줄 (&U)" + +#: none:0 +msgid "Left" +msgstr "왼쪽" + +#: none:0 +msgid "&Left" +msgstr "왼쪽 (&L)" + +#: none:0 +msgid "Center" +msgstr "중앙" + +#: none:0 +msgid "C&enter" +msgstr "중앙 (&E)" + +#: none:0 +msgid "Right" +msgstr "오른쪽" + +#: none:0 +msgid "&Right" +msgstr "오른쪽 (&R)" + +#: none:0 +msgid "Justify" +msgstr "ì°½ ë„ˆë¹„ì— ë§žì¶¤" + +#: none:0 +msgid "&Justify" +msgstr "ì°½ ë„ˆë¹„ì— ë§žì¶¤ (&J)" + +#: none:0 +msgid "Color" +msgstr "색ìƒ" + +#: none:0 +msgid "&Color..." +msgstr "ìƒ‰ìƒ (&C)..." + +#: none:0 +msgid "Standard" +msgstr "Standard" + +#: none:0 +msgid "Bullet List (Disc)" +msgstr "Bullet List (Disc)" + +#: none:0 +msgid "Bullet List (Circle)" +msgstr "Bullet List (Circle)" + +#: none:0 +msgid "Bullet List (Square)" +msgstr "Bullet List (Square)" + +#: none:0 +msgid "Ordered List (Decimal)" +msgstr "Ordered List (Decimal)" + +#: none:0 +msgid "Ordered List (Alpha lower)" +msgstr "Ordered List (Alpha lower)" + +#: none:0 +msgid "Ordered List (Alpha upper)" +msgstr "Ordered List (Alpha upper)" + +#: none:0 +msgid "OK" +msgstr "확ì¸" + +#: none:0 +msgid "Cancel" +msgstr "취소" + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"locally connected" +msgstr "로컬로 ì ‘ì†ë¨" + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"Aliases: " +msgstr "Aliases: " + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"unknown" +msgstr "알 수 없는 í¬ë§·" + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"Unknown Location" +msgstr "Unknown Location" + +#: none:0 +msgid "Printer settings" +msgstr "프린터 ì„¤ì •" + +#: none:0 +msgid "Print in color if available" +msgstr "ë 수 있으면 ìƒ‰ì„ ê°™ì´ ì¸ì‡„" + +#: none:0 +msgid "Print in grayscale" +msgstr "회색으로 ì¸ì‡„" + +#: none:0 +msgid "Print destination" +msgstr "프린트 대ìƒ" + +#: none:0 +msgid "Print to printer:" +msgstr "프린터로 ì¸ì‡„" + +#: none:0 +msgid "Printer" +msgstr "프린터" + +#: none:0 +msgid "Host" +msgstr "호스트" + +#: none:0 +msgid "Comment" +msgstr "설명" + +#: none:0 +msgid "Print to file:" +msgstr "파ì¼ë¡œ 안쇄" + +#: none:0 +msgid "Browse..." +msgstr "브ë¼ìš°ì¦ˆ..." + +#: none:0 +msgid "Options" +msgstr "옵션" + +#: none:0 +msgid "Print all" +msgstr "ëª¨ë‘ ì¸ì‡„" + +#: none:0 +msgid "Print range" +msgstr "ì¸ì‡„í• ë²”ìœ„" + +#: none:0 +msgid "From page:" +msgstr "쪽ì—서:" + +#: none:0 +msgid "To page:" +msgstr "쪽까지:" + +#: none:0 +msgid "Print first page first" +msgstr "순서대로 ì¸ì‡„" + +#: none:0 +msgid "Print last page first" +msgstr "ì—순서로 ì¸ì‡„" + +#: none:0 +msgid "Number of copies:" +msgstr "ì¸ì‡„부수:" + +#: none:0 +msgid "Paper format" +msgstr "용지 í¬ë§·" + +#: none:0 +msgid "Portrait" +msgstr "묘사" + +#: none:0 +msgid "Landscape" +msgstr "í’ê²½" + +#: src/dialogs/qprintdialog.cpp:1069 +msgid "A0 (841 x 1189 mm)" +msgstr "A0 (841 x 1189 mm)" + +#: src/dialogs/qprintdialog.cpp:1070 +msgid "A1 (594 x 841 mm)" +msgstr "A1 (594 x 841 mm)" + +#: src/dialogs/qprintdialog.cpp:1071 +msgid "A2 (420 x 594 mm)" +msgstr "A2 (420 x 594 mm)" + +#: src/dialogs/qprintdialog.cpp:1072 +msgid "A3 (297 x 420 mm)" +msgstr "A3 (297 x 420 mm)" + +#: src/dialogs/qprintdialog.cpp:1073 +msgid "A4 (210x297 mm, 8.26x11.7 inches)" +msgstr "A4 (210x297 mm, 8.26x11.7 inches)" + +#: src/dialogs/qprintdialog.cpp:1074 +msgid "A5 (148 x 210 mm)" +msgstr "A5 (148 x 210 mm)" + +#: src/dialogs/qprintdialog.cpp:1075 +msgid "A6 (105 x 148 mm)" +msgstr "A6 (105 x 148 mm)" + +#: src/dialogs/qprintdialog.cpp:1076 +msgid "A7 (74 x 105 mm)" +msgstr "A7 (74 x 105 mm)" + +#: src/dialogs/qprintdialog.cpp:1077 +msgid "A8 (52 x 74 mm)" +msgstr "A8 (52 x 74 mm)" + +#: src/dialogs/qprintdialog.cpp:1078 +msgid "A9 (37 x 52 mm)" +msgstr "A9 (37 x 52 mm)" + +#: src/dialogs/qprintdialog.cpp:1079 +msgid "B0 (1030 x 1456 mm)" +msgstr "B0 (1030 x 1456 mm)" + +#: src/dialogs/qprintdialog.cpp:1080 +msgid "B1 (728 x 1030 mm)" +msgstr "B1 (728 x 1030 mm)" + +#: src/dialogs/qprintdialog.cpp:1081 +msgid "B10 (32 x 45 mm)" +msgstr "B10 (32 x 45 mm)" + +#: src/dialogs/qprintdialog.cpp:1082 +msgid "B2 (515 x 728 mm)" +msgstr "B2 (515 x 728 mm)" + +#: src/dialogs/qprintdialog.cpp:1083 +msgid "B3 (364 x 515 mm)" +msgstr "B3 (364 x 515 mm)" + +#: src/dialogs/qprintdialog.cpp:1084 +msgid "B4 (257 x 364 mm)" +msgstr "B4 (257 x 364 mm)" + +#: src/dialogs/qprintdialog.cpp:1085 +msgid "B5 (182x257 mm, 7.17x10.13 inches)" +msgstr "B5 (182x257 mm, 7.17x10.13 inches)" + +#: src/dialogs/qprintdialog.cpp:1086 +msgid "B6 (128 x 182 mm)" +msgstr "B6 (128 x 182 mm)" + +#: src/dialogs/qprintdialog.cpp:1087 +msgid "B7 (91 x 128 mm)" +msgstr "B7 (91 x 128 mm)" + +#: src/dialogs/qprintdialog.cpp:1088 +msgid "B8 (64 x 91 mm)" +msgstr "B8 (64 x 91 mm)" + +#: src/dialogs/qprintdialog.cpp:1089 +msgid "B9 (45 x 64 mm)" +msgstr "B9 (45 x 64 mm)" + +#: src/dialogs/qprintdialog.cpp:1090 +msgid "C5E (163 x 229 mm)" +msgstr "C5E (163 x 229 mm)" + +#: src/dialogs/qprintdialog.cpp:1091 +msgid "DLE (110 x 220 mm)" +msgstr "DLE (110 x 220 mm)" + +#: src/dialogs/qprintdialog.cpp:1092 +msgid "Executive (7.5x10 inches, 191x254 mm)" +msgstr "Executive (7.5x10 inches, 191x254 mm)" + +#: src/dialogs/qprintdialog.cpp:1094 +msgid "Folio (210 x 330 mm)" +msgstr "Folio (210 x 330 mm)" + +#: src/dialogs/qprintdialog.cpp:1095 +msgid "Ledger (432 x 279 mm)" +msgstr "Ledger (432 x 279 mm)" + +#: src/dialogs/qprintdialog.cpp:1096 +msgid "Legal (8.5x14 inches, 216x356 mm)" +msgstr "Legal (8.5x14 inches, 216x356 mm)" + +#: src/dialogs/qprintdialog.cpp:1097 +msgid "Letter (8.5x11 inches, 216x279 mm)" +msgstr "Letter (8.5x11 inches, 216x279 mm)" + +#: src/dialogs/qprintdialog.cpp:1098 +msgid "Tabloid (279 x 432 mm)" +msgstr "Tabloid (279 x 432 mm)" + +#: src/dialogs/qprintdialog.cpp:1099 +msgid "US Common #10 Envelope (105 x 241 mm)" +msgstr "US Common #10 Envelope (105 x 241 mm)" + +#: none:0 +msgid "Setup Printer" +msgstr "Setup Printer" + +#: none:0 +msgid "Postscript files (*.ps);;All files (*)" +msgstr "í¬ìŠ¤íŠ¸ìŠ¤í¬ë¦½í™”ì¼ (*.ps);;ëª¨ë“ íŒŒì¼ (*)" + +#: none:0 +msgid "Hu&e:" +msgstr "색ìƒ: (&e)" + +#: none:0 +msgid "&Sat:" +msgstr "시작 (&S)" + +#: none:0 +msgid "&Val:" +msgstr "ê°’ (&V)" + +#: none:0 +msgid "&Red:" +msgstr "ì 색: (&R)" + +#: none:0 +msgid "&Green:" +msgstr "녹색:(&G)" + +#: none:0 +msgid "Bl&ue:" +msgstr "ì²ìƒ‰:(&u)" + +#: none:0 +msgid "A&lpha channel:" +msgstr "알파체ë„:(&l)" + +#: none:0 +msgid "&Basic colors" +msgstr "기본 색ìƒ(&B)" + +#: none:0 +msgid "&Custom colors" +msgstr "ì‚¬ìš©ìž ìƒ‰(&C)" + +#: none:0 +msgid "&Define Custom Colors >>" +msgstr "ì‚¬ìš©ìž ìƒ‰ ì •ì˜ >>(&D)" + +#: none:0 +msgid "&Add To Custom Colors" +msgstr "색 ì •ì˜ì— 추가(&A)" + +#: none:0 +msgid "Select color" +msgstr "색 ì„ íƒ" + +#: none:0 +msgid "Copy or Move a File" +msgstr "íŒŒì¼ ì´ë™/복사" + +#: none:0 +msgid "Read: %1" +msgstr "ì½ê¸°: %1" + +#: none:0 +msgid "Write: %1" +msgstr "쓰기: %1" + +#: none:0 +msgid "&Cancel" +msgstr "취소(&C)" + +#: none:0 +msgid "All files (*)" +msgstr "ëª¨ë“ íŒŒì¼ (*)" + +#: none:0 +msgid "Name" +msgstr "ì´ë¦„" + +#: none:0 +msgid "Size" +msgstr "í¬ê¸°" + +#: none:0 +msgid "Type" +msgstr "형ì‹" + +#: none:0 +msgid "Date" +msgstr "ë‚ ì§œ" + +#: none:0 +msgid "Attributes" +msgstr "ì†ì„±" + +#: none:0 +msgid "Look &in:" +msgstr "찾기:(&i)" + +#: none:0 +msgid "File &name:" +msgstr "íŒŒì¼ ì´ë¦„(&n):" + +#: none:0 +msgid "File &type:" +msgstr "íŒŒì¼ í˜•ì‹(&t):" + +#: none:0 +msgid "Back" +msgstr "뒤로" + +#: none:0 +msgid "One directory up" +msgstr "í•œê°œì˜ ë””ë ‰í† ë¦¬" + +#: none:0 +msgid "Create New Folder" +msgstr "새 í´ë” 만들기" + +#: none:0 +msgid "List View" +msgstr "ëª©ë¡ ë³´ê¸°" + +#: none:0 +msgid "Detail View" +msgstr "ìžì„¸ížˆ 보기" + +#: none:0 +msgid "Preview File Info" +msgstr "íŒŒì¼ ì •ë³´ 미리보기" + +#: none:0 +msgid "Preview File Contents" +msgstr "íŒŒì¼ ë‚´ìš© 미리보기" + +#: none:0 +msgid "Read-write" +msgstr "ì½ê¸°-쓰기ì½ê¸° ì „ìš©" + +#: none:0 +msgid "Read-only" +msgstr "ì½ê¸° ì „ìš©" + +#: none:0 +msgid "Write-only" +msgstr "쓰기 ì „ìš©:" + +#: none:0 +msgid "Inaccessible" +msgstr "ì ‘ê·¼í• ìˆ˜ 없는" + +#: none:0 +msgid "Symlink to File" +msgstr "íŒŒì¼ ì—°ê²°" + +#: none:0 +msgid "Symlink to Directory" +msgstr "-" + +#: none:0 +msgid "Symlink to Special" +msgstr "ë””ë ‰í† ë¦¬ ì—°ê²°" + +#: none:0 +msgid "File" +msgstr "파ì¼" + +#: none:0 +msgid "Dir" +msgstr "ë””ë ‰í† ë¦¬" + +#: none:0 +msgid "Special" +msgstr "íŠ¹ì •" + +#: none:0 +msgid "Save as" +msgstr "다른 ì´ë¦„으로 ì €ìž¥" + +#: none:0 +msgid "&Open" +msgstr "열기(&O)" + +#: none:0 +msgid "&Save" +msgstr "ì €ìž¥(&S)" + +#: none:0 +msgid "&Rename" +msgstr "ì´ë¦„ 바꾸기(&R)" + +#: none:0 +msgid "&Delete" +msgstr "지우기(&D)" + +#: none:0 +msgid "R&eload" +msgstr "다시 불러오기(&e)" + +#: none:0 +msgid "Sort by &Name" +msgstr "ì´ë¦„으로 ì •ë ¬(&N)" + +#: none:0 +msgid "Sort by &Size" +msgstr "íŒŒì¼ í¬ê¸°ë¡œ ì •ë ¬(&S)" + +#: none:0 +msgid "Sort by &Date" +msgstr "ë‚ ì§œë¡œ ì •ë ¬(&D)" + +#: none:0 +msgid "&Unsorted" +msgstr "ì •ë ¬ 안함(&U)" + +#: none:0 +msgid "Sort" +msgstr "ì •ë ¬" + +#: none:0 +msgid "Show &hidden files" +msgstr "숨겨진 íŒŒì¼ ë³´ê¸°(&h)" + +#: none:0 +msgid "the file" +msgstr "파ì¼" + +#: none:0 +msgid "the directory" +msgstr "ìžë£Œë°©" + +#: none:0 +msgid "the symlink" +msgstr "ì—°ê²°" + +#: none:0 +msgid "Delete %1" +msgstr "지우기: %1" + +#: none:0 +msgid "<qt>Do you really want to delete %1 \"%2\"?</qt>" +msgstr "<qt>ì •ë§ë¡œ ì‚ì œí•˜ì‹œê¸¸ ì›í•˜ì‹ë‹ˆê¹Œ? %1 \"%2\"?</qt>" + +#: none:0 +msgid "&Yes" +msgstr "예(&Y)" + +#: none:0 +msgid "&No" +msgstr "아니오(&N)" + +#: none:0 +msgid "New Folder 1" +msgstr "새í´ë” 1" + +#: none:0 +msgid "New Folder" +msgstr "새 í´ë”" + +#: none:0 +msgid "New Folder %1" +msgstr "새 í´ë” %1" + +#: none:0 +msgid "Find Directory" +msgstr "ìžë£Œë°© 찾기" + +#: none:0 +msgid "Directories" +msgstr "ìžë£Œë°©" + +#: none:0 +msgid "Error" +msgstr "오류" + +#: none:0 +msgid "" +"%1\n" +"File not found.\n" +"Check path and filename." +msgstr "" +"%1\n" +"파ì¼ì„ ë°œê²¬í• ìˆ˜ 없습니다.\n" +"파ì¼ëª…ê³¼ 경로를 확ì¸í•´ 주시길 ë°”ëžë‹ˆë‹¤." + +#: none:0 +msgid "ERROR" +msgstr "오류" + +#: none:0 +msgid "&Font" +msgstr "글꼴(&F)" + +#: none:0 +msgid "Font st&yle" +msgstr "글꼴 스타ì¼(&y)" + +#: none:0 +msgid "&Size" +msgstr "í¬ê¸°(&S)" + +#: none:0 +msgid "Effects" +msgstr "효과" + +#: none:0 +msgid "Stri&keout" +msgstr "삼진(&k)" + +#: none:0 +msgid "&Color" +msgstr "색깔(&C)" + +#: none:0 +msgid "Sample" +msgstr "견본" + +#: none:0 +msgid "Scr&ipt" +msgstr "스í¬ë¦½íЏ(&p)" + +#: none:0 +msgid "Apply" +msgstr "ì ìš©" + +#: none:0 +#: none:0 +msgid "Close" +msgstr "닫기" + +#: none:0 +msgid "Select Font" +msgstr "글꼴 ê³ ë¥´ê¸°" + +#: none:0 +msgid "&OK" +msgstr "예(&O)" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"OK" +msgstr "확ì¸" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Cancel" +msgstr "취소" + + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Yes" +msgstr "확ì¸" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"No" +msgstr "취소" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Abort" +msgstr "중지" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Retry" +msgstr "재시ë„" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Ignore" +msgstr "무시" + +#: none:0 +msgid "Minimize" +msgstr "가장 작게" + +#: none:0 +msgid "Maximize" +msgstr "가장 í¬ê²Œ" + +#: none:0 +msgid "" +"<h3>About Qt</h3><p>This program uses Qt version %1, a multiplatform C++ GUI " +"toolkit from Trolltech. Qt provides single-source portability across Windows " +"95/98/NT/2000, Mac OS X, Linux, Solaris, HP-UX and many other versions of Unix with X11" +".</p><p>See <tt>http://www.trolltech.com/qt/</tt> for more information.</p>" +msgstr "" +"<h3>Qtì— ëŒ€í•˜ì—¬</h3><p>ì´ í”„ë¡œê·¸ëž¨ì€ Qt version %1ì„ ì‚¬ìš©í•©ë‹ˆë‹¤, 트롤í…ì‚¬ì˜ " +"ë‹¤ì¤‘í”Œë ›í¼ C++ GUI 툴킷.Qt는 윈ë„우즈 95/98/NT/2000, X11ì´ ê°€ëŠ¥í•œ Mac OS X, Linux, " +"Solaris, HP-UXì—ì´ì „가능한 싱글소스를 ì œê³µí•©ë‹ˆë‹¤. </p><p>좀 ë” ë§Žì€ ì •ë³´ë¥¼ " +"ì›í•˜ì‹œë©´ <tt>http://www.trolltech.com/qt/</tt>ì„방문해 주시길 ë°”ëžë‹ˆë‹¤.</p>" diff --git a/examples/demo/i18n/ko.qm b/examples/demo/i18n/ko.qm Binary files differnew file mode 100644 index 0000000..028e8b5 --- /dev/null +++ b/examples/demo/i18n/ko.qm diff --git a/examples/demo/i18n/no.po b/examples/demo/i18n/no.po new file mode 100644 index 0000000..1aaffb7 --- /dev/null +++ b/examples/demo/i18n/no.po @@ -0,0 +1,847 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: none:0 +msgid "--language--" +msgstr "Norsk" + +#: none:0 +msgid "&File" +msgstr "&Fil" + +#: none:0 +msgid "New" +msgstr "Ny" + +#: none:0 +msgid "&New..." +msgstr "&Ny..." + +#: none:0 +msgid "Open" +msgstr "Ã…pne" + +#: none:0 +msgid "&Open..." +msgstr "&Ã…pne..." + +#: none:0 +msgid "Save As" +msgstr "Lagre som" + +#: none:0 +msgid "Save &As..." +msgstr "L&agre som..." + +#: none:0 +msgid "Save" +msgstr "Lagre" + +#: none:0 +msgid "&Save..." +msgstr "&Lagre..." + +#: none:0 +msgid "Print" +msgstr "Skriv ut" + +#: none:0 +msgid "&Print..." +msgstr "&Skriv ut..." + +#: none:0 +msgid "&Close" +msgstr "Lu&kk" + +#: none:0 +msgid "&Edit" +msgstr "&Rediger" + +#: none:0 +msgid "&Undo" +msgstr "&Angre" + +#: none:0 +msgid "Undo" +msgstr "Angre" + +#: none:0 +msgid "&Redo" +msgstr "&Gjør om" + +#: none:0 +msgid "Redo" +msgstr "Gjør om" + +#: none:0 +msgid "Cut" +msgstr "Klipp ut" + +#: none:0 +msgid "&Cut" +msgstr "&Klipp ut" + +#: none:0 +msgid "C&opy" +msgstr "K&opier" + +#: none:0 +msgid "Copy" +msgstr "Kopier" + +#: none:0 +msgid "Paste" +msgstr "Lim inn" + +#: none:0 +msgid "&Paste" +msgstr "&Lim inn" + +#: none:0 +msgid "Clear" +msgstr "Tøm" + +#: none:0 +msgid "Select All" +msgstr "Velg Alle" + +#: none:0 +msgid "Line up" +msgstr "Ordne" + +#: none:0 +msgid "For&mat" +msgstr "For&mat" + +#: none:0 +msgid "Bold" +msgstr "Uthevet" + +#: none:0 +msgid "&Bold" +msgstr "&Uthevet" + +#: none:0 +msgid "Italic" +msgstr "Kursiv" + +#: none:0 +msgid "&Italic" +msgstr "&Kursiv" + +#: none:0 +msgid "Underline" +msgstr "Understreket" + +#: none:0 +msgid "&Underline" +msgstr "&Understreket" + +#: none:0 +msgid "Left" +msgstr "Venstre" + +#: none:0 +msgid "&Left" +msgstr "&Venstre" + +#: none:0 +msgid "Center" +msgstr "Senter" + +#: none:0 +msgid "C&enter" +msgstr "S&enter" + +#: none:0 +msgid "Right" +msgstr "Høyre" + +#: none:0 +msgid "&Right" +msgstr "&Høyre" + +#: none:0 +msgid "Justify" +msgstr "Justert" + +#: none:0 +msgid "&Justify" +msgstr "&Justert" + +#: none:0 +msgid "Color" +msgstr "Farge" + +#: none:0 +msgid "&Color..." +msgstr "&Farge..." + +#: none:0 +msgid "Standard" +msgstr "Vanlig tekst" + +#: none:0 +msgid "Bullet List (Disc)" +msgstr "Liste (kule)" + +#: none:0 +msgid "Bullet List (Circle)" +msgstr "Liste (sirkel)" + +#: none:0 +msgid "Bullet List (Square)" +msgstr "Liste (firkant)" + +#: none:0 +msgid "Ordered List (Decimal)" +msgstr "Sortert liste (tall)" + +#: none:0 +msgid "Ordered List (Alpha lower)" +msgstr "Sortert liste (smÃ¥ bokstaver)" + +#: none:0 +msgid "Ordered List (Alpha upper)" +msgstr "Sortert liste (store bokstaver)" + +#: none:0 +msgid "OK" +msgstr "OK" + +#: none:0 +msgid "Cancel" +msgstr "Avbryt" + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"locally connected" +msgstr "" +"_: QPrintDialog\n" +"lokalt tilkoblet" + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"Aliases: " +msgstr "" +"_: QPrintDialog\n" +"Aliaser: " + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"unknown" +msgstr "" +"_: QPrintDialog\n" +"ukjent" + +#: none:0 +msgid "" +"_: QPrintDialog\n" +"Unknown Location" +msgstr "" +"_: QPrintDialog\n" +"Ukjent sted" + +#: none:0 +msgid "Printer settings" +msgstr "Skriverinnstillinger" + +#: none:0 +msgid "Print in color if available" +msgstr "Skriv ut i farger hvis mulig" + +#: none:0 +msgid "Print in grayscale" +msgstr "Skriv ut i grÃ¥toner" + +#: none:0 +msgid "Print destination" +msgstr "UtskriftsmÃ¥l" + +#: none:0 +msgid "Print to printer:" +msgstr "Skriv ut til:" + +#: none:0 +msgid "Printer" +msgstr "Skriver" + +#: none:0 +msgid "Host" +msgstr "Vert" + +#: none:0 +msgid "Comment" +msgstr "Kommentar" + +#: none:0 +msgid "Print to file:" +msgstr "Skriv til fil:" + +#: none:0 +msgid "Browse..." +msgstr "Bla gjennom..." + +#: none:0 +msgid "Options" +msgstr "Valg" + +#: none:0 +msgid "Print all" +msgstr "Skriv ut alt" + +#: none:0 +msgid "Print range" +msgstr "Skriv ut i omrÃ¥det" + +#: none:0 +msgid "From page:" +msgstr "Fra side:" + +#: none:0 +msgid "To page:" +msgstr "Til side:" + +#: none:0 +msgid "Print first page first" +msgstr "Skriv ut første side først" + +#: none:0 +msgid "Print last page first" +msgstr "Skriv ut siste side først" + +#: none:0 +msgid "Number of copies:" +msgstr "Antall kopier" + +#: none:0 +msgid "Paper format" +msgstr "Papirformat" + +#: none:0 +msgid "Portrait" +msgstr "StÃ¥ende" + +#: none:0 +msgid "Landscape" +msgstr "Sidelengs" + +#: src/dialogs/qprintdialog.cpp:1069 +msgid "A0 (841 x 1189 mm)" +msgstr "A0 (841 x 1189 mm)" + +#: src/dialogs/qprintdialog.cpp:1070 +msgid "A1 (594 x 841 mm)" +msgstr "A1 (594 x 841 mm)" + +#: src/dialogs/qprintdialog.cpp:1071 +msgid "A2 (420 x 594 mm)" +msgstr "A2 (420 x 594 mm)" + +#: src/dialogs/qprintdialog.cpp:1072 +msgid "A3 (297 x 420 mm)" +msgstr "A3 (297 x 420 mm)" + +#: src/dialogs/qprintdialog.cpp:1073 +msgid "A4 (210x297 mm, 8.26x11.7 inches)" +msgstr "A4 (210x297 mm, 8,26x11,7 tommer)" + +#: src/dialogs/qprintdialog.cpp:1074 +msgid "A5 (148 x 210 mm)" +msgstr "A5 (148 x 210 mm)" + +#: src/dialogs/qprintdialog.cpp:1075 +msgid "A6 (105 x 148 mm)" +msgstr "A6 (105 x 148 mm)" + +#: src/dialogs/qprintdialog.cpp:1076 +msgid "A7 (74 x 105 mm)" +msgstr "A7 (74 x 105 mm)" + +#: src/dialogs/qprintdialog.cpp:1077 +msgid "A8 (52 x 74 mm)" +msgstr "A8 (52 x 74 mm)" + +#: src/dialogs/qprintdialog.cpp:1078 +msgid "A9 (37 x 52 mm)" +msgstr "A9 (37 x 52 mm)" + +#: src/dialogs/qprintdialog.cpp:1079 +msgid "B0 (1030 x 1456 mm)" +msgstr "B0 (1030 x 1456 mm)" + +#: src/dialogs/qprintdialog.cpp:1080 +msgid "B1 (728 x 1030 mm)" +msgstr "B1 (728 x 1030 mm)" + +#: src/dialogs/qprintdialog.cpp:1081 +msgid "B10 (32 x 45 mm)" +msgstr "B10 (32 x 45 mm)" + +#: src/dialogs/qprintdialog.cpp:1082 +msgid "B2 (515 x 728 mm)" +msgstr "B2 (515 x 728 mm)" + +#: src/dialogs/qprintdialog.cpp:1083 +msgid "B3 (364 x 515 mm)" +msgstr "B3 (364 x 515 mm)" + +#: src/dialogs/qprintdialog.cpp:1084 +msgid "B4 (257 x 364 mm)" +msgstr "B4 (257 x 364 mm)" + +#: src/dialogs/qprintdialog.cpp:1085 +msgid "B5 (182x257 mm, 7.17x10.13 inches)" +msgstr "B5 (182x257 mm, 7,17x10,13 tommer)" + +#: src/dialogs/qprintdialog.cpp:1086 +msgid "B6 (128 x 182 mm)" +msgstr "B6 (128 x 182 mm)" + +#: src/dialogs/qprintdialog.cpp:1087 +msgid "B7 (91 x 128 mm)" +msgstr "B7 (91 x 128 mm)" + +#: src/dialogs/qprintdialog.cpp:1088 +msgid "B8 (64 x 91 mm)" +msgstr "B8 (64 x 91 mm)" + +#: src/dialogs/qprintdialog.cpp:1089 +msgid "B9 (45 x 64 mm)" +msgstr "B9 (45 x 64 mm)" + +#: src/dialogs/qprintdialog.cpp:1090 +msgid "C5E (163 x 229 mm)" +msgstr "C5E (163 x 229 mm)" + +#: src/dialogs/qprintdialog.cpp:1091 +msgid "DLE (110 x 220 mm)" +msgstr "DLE (110 x 220 mm)" + +#: src/dialogs/qprintdialog.cpp:1092 +msgid "Executive (7.5x10 inches, 191x254 mm)" +msgstr "Executive (7,5x10 tommer, 191x254 mm)" + +#: src/dialogs/qprintdialog.cpp:1094 +msgid "Folio (210 x 330 mm)" +msgstr "Folio (210 x 330 mm)" + +#: src/dialogs/qprintdialog.cpp:1095 +msgid "Ledger (432 x 279 mm)" +msgstr "Ledger (432 x 279 mm)" + +#: src/dialogs/qprintdialog.cpp:1096 +msgid "Legal (8.5x14 inches, 216x356 mm)" +msgstr "Legal (8,5x14 tommer, 216x356 mm)" + +#: src/dialogs/qprintdialog.cpp:1097 +msgid "Letter (8.5x11 inches, 216x279 mm)" +msgstr "Brev (8.5x11 tommer, 216x279 mm)" + +#: src/dialogs/qprintdialog.cpp:1098 +msgid "Tabloid (279 x 432 mm)" +msgstr "Tabloid (279 x 432 mm)" + +#: src/dialogs/qprintdialog.cpp:1099 +msgid "US Common #10 Envelope (105 x 241 mm)" +msgstr "Standard US-#10-konvolutt (105 x 241 mm)" + +#: src/dialogs/qprintdialog.cpp:1123 +msgid "Setup Printer" +msgstr "Oppsett av skriver" + +#: src/dialogs/qprintdialog.cpp:1201 +msgid "Postscript files (*.ps);;All files (*)" +msgstr "Postskript-filer (*.ps);;Alle filer (*)" + +#: none:0 +msgid "Hu&e:" +msgstr "Hu&e:" + +#: none:0 +msgid "&Sat:" +msgstr "&Sat:" + +#: none:0 +msgid "&Val:" +msgstr "&Val:" + +#: none:0 +msgid "&Red:" +msgstr "&Rød:" + +#: none:0 +msgid "&Green:" +msgstr "&Grønn:" + +#: none:0 +msgid "Bl&ue:" +msgstr "B&lÃ¥:" + +#: none:0 +msgid "A&lpha channel:" +msgstr "A&lfakanal:" + +#: none:0 +msgid "&Basic colors" +msgstr "&Standardfarger" + +#: none:0 +msgid "&Custom colors" +msgstr "&Brukerdefinerte farger"" + +#: none:0 +msgid "&Define Custom Colors >>" +msgstr "&Definer egne farger >>"" + +#: none:0 +msgid "&Add To Custom Colors" +msgstr "&Føy til egendefinerte farger" + +#: none:0 +msgid "Select color" +msgstr "Velg farge" + +#: none:0 +msgid "Copy or Move a File" +msgstr "Kopier eller flytt en fil" + +#: none:0 +msgid "Read: %1" +msgstr "Lese: %1" + +#: none:0 +msgid "Write: %1" +msgstr "Skrive: %1" + +#: none:0 +msgid "&Cancel" +msgstr "&Avbryt" + +#: none:0 +msgid "All files (*)" +msgstr "Alle filer (*)" + +#: none:0 +msgid "Name" +msgstr "Navn" + +#: none:0 +msgid "Size" +msgstr "Størrelse" + +#: none:0 +msgid "Type" +msgstr "Type" + +#: none:0 +msgid "Date" +msgstr "Dato" + +#: none:0 +msgid "Attributes" +msgstr "Attributter" + +#: none:0 +msgid "Look &in:" +msgstr "Se &i:" + +#: none:0 +msgid "File &name:" +msgstr "Fil&navn:" + +#: none:0 +msgid "File &type:" +msgstr "Fil&type:" + +#: none:0 +msgid "Back" +msgstr "Tilbake" + +#: none:0 +msgid "One directory up" +msgstr "En katalog opp" + +#: none:0 +msgid "Create New Folder" +msgstr "Lag ny mappe" + +#: none:0 +msgid "List View" +msgstr "Listevisning" + +#: none:0 +msgid "Detail View" +msgstr "Detaljertvisning" + +#: none:0 +msgid "Preview File Info" +msgstr "ForhÃ¥ndsvis filinformasjon" + +#: none:0 +msgid "Preview File Contents" +msgstr "ForhÃ¥ndsvis innhold" + +#: none:0 +msgid "Read-write" +msgstr "Lese-skrive" + +#: none:0 +msgid "Read-only" +msgstr "Bare lese" + +#: none:0 +msgid "Write-only" +msgstr "Bare skrive" + +#: none:0 +msgid "Inaccessible" +msgstr "Utilgjenglig" + +#: none:0 +msgid "Symlink to File" +msgstr "Symbolsk lenke til fil" + +#: none:0 +msgid "Symlink to Directory" +msgstr "Symbolsk lenke til katalog" + +#: none:0 +msgid "Symlink to Special" +msgstr "Symbolsk lenke til spesial" + +#: none:0 +msgid "File" +msgstr "Fil" + +#: none:0 +msgid "Dir" +msgstr "Katalog" + +#: none:0 +msgid "Special" +msgstr "Spesial" + +#: none:0 +msgid "Save as" +msgstr "Lagre som"" + +#: none:0 +msgid "&Open" +msgstr "&Ã…pne" + +#: none:0 +msgid "&Save" +msgstr "&Lagre" + +#: none:0 +msgid "&Rename" +msgstr "&Endre navn"" + +#: none:0 +msgid "&Delete" +msgstr "&Slett" + +#: none:0 +msgid "R&eload" +msgstr "Last &pÃ¥ nytt" + +#: none:0 +msgid "Sort by &Name" +msgstr "Sorter etter &navn" + +#: none:0 +msgid "Sort by &Size" +msgstr "Sorter etter &størrelse" + +#: none:0 +msgid "Sort by &Date" +msgstr "Sorter etter &dato" + +#: none:0 +msgid "&Unsorted" +msgstr "&Usortert" + +#: none:0 +msgid "Sort" +msgstr "Sorter" + +#: none:0 +msgid "Show &hidden files" +msgstr "Vis &skjulte filer" + +#: none:0 +msgid "the file" +msgstr "filen" + +#: none:0 +msgid "the directory" +msgstr "katalogen" + +#: none:0 +msgid "the symlink" +msgstr "den symbolske lenken" + +#: none:0 +msgid "Delete %1" +msgstr "Slett %1" + +#: none:0 +msgid "<qt>Do you really want to delete %1 \"%2\"?</qt>" +msgstr "<qt>Vil du virkelig slette %1 \"%2\"?</qt>" + +#: none:0 +msgid "&Yes" +msgstr "&Ja" + +#: none:0 +msgid "&No" +msgstr "&Nei" + +#: none:0 +msgid "New Folder 1" +msgstr "Ny mappe 1" + +#: none:0 +msgid "New Folder" +msgstr "Ny mappe" + +#: none:0 +msgid "New Folder %1" +msgstr "Ny mappe %1" + +#: none:0 +msgid "Find Directory" +msgstr "Finn katalog" + +#: none:0 +msgid "Directories" +msgstr "Kataloger" + +#: none:0 +msgid "Error" +msgstr "Feil" + +#: none:0 +msgid "" +"%1\n" +"File not found.\n" +"Check path and filename." +msgstr " +"%1\n" +"Fil ikke funnet.\n" +"Sjekk sti og filnavn." + +#: none:0 +msgid "ERROR" +msgstr "FEIL" + +#: none:0 +msgid "&Font" +msgstr "&Skrifttype" + +#: none:0 +msgid "Font st&yle" +msgstr "S&kriftstil" + +#: none:0 +msgid "&Size" +msgstr "&Størrelse" + +#: none:0 +msgid "Effects" +msgstr "Effekter" + +#: none:0 +msgid "Stri&keout" +msgstr "Strek &over" + +#: none:0 +msgid "&Color" +msgstr "&Farge" + +#: none:0 +msgid "Sample" +msgstr "Eksempel" + +#: none:0 +msgid "Scr&ipt" +msgstr "Skr&ipt" + +#: none:0 +msgid "Apply" +msgstr "Bruk" + +#: none:0 +msgid "Close" +msgstr "Lukk" + +#: none:0 +msgid "Select Font" +msgstr "Velg skrifttype" + +#: none:0 +msgid "&OK" +msgstr "&OK" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"OK" +msgstr "OK" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Yes" +msgstr "Ja" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"No" +msgstr "Nei" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Abort" +msgstr "Avbryt" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Retry" +msgstr "Prøv igjen" + +#: none:0 +msgid "" +"_: QMessageBox\n" +"Ignore" +msgstr "Ignorer" + +#: none:0 +msgid "" +"<h3>About Qt</h3><p>This program uses Qt version %1, a multiplatform C++ GUI " +"toolkit from Trolltech. Qt provides single-source portability across Windows " +"95/98/NT/2000, Mac OS X, Linux, Solaris, HP-UX and many other versions of Unix with X11" +".</p><p>See <tt>http://www.trolltech.com/qt/</tt> for more information.</p>" +msgstr "" +"<h3>Om Qt</h3><p>Dette programmet bruker Qt versjon %1, et multiplatform C++ " +"GUI-verktøy fra Trolltech. Kode skrevet for Qt gir portabel kode for Windows 9" +"5/98/NT/2000, Mac OS X, Linux, Solaris, HP-UX og mange andre versjoner av Unix med X11." +"</p><p>Se <tt>http://www.trolltech.com/qt/</tt> for mer informasjon.</p>" + +#: none:0 +msgid "Minimize" +msgstr "Minimer" + +#: none:0 +msgid "Maximize" +msgstr "Maksimer" diff --git a/examples/demo/i18n/no.qm b/examples/demo/i18n/no.qm Binary files differnew file mode 100644 index 0000000..05482a8 --- /dev/null +++ b/examples/demo/i18n/no.qm diff --git a/examples/demo/i18n/wrapper.h b/examples/demo/i18n/wrapper.h new file mode 100644 index 0000000..ed5c98b --- /dev/null +++ b/examples/demo/i18n/wrapper.h @@ -0,0 +1,21 @@ +#ifndef WRAPPER_H +#define WRAPPER_H + +#include <qvbox.h> +#include <qtranslator.h> + + +class Wrapper : public QVBox +{ +public: + Wrapper(QWidget *parent, int i, const char *name = 0) + : QVBox(parent, name, WDestructiveClose), translator(this), id(i) + { + } + + QTranslator translator; + int id; +}; + + +#endif // WRAPPER_H diff --git a/examples/demo/icons.h b/examples/demo/icons.h new file mode 100644 index 0000000..3217768 --- /dev/null +++ b/examples/demo/icons.h @@ -0,0 +1,1938 @@ +/* XPM */ +const char *widgeticon[] = { +/* columns rows colors chars-per-pixel */ +"48 48 64 1", +" c #e7e7e7", +". c Gray59", +"X c #e9d3b7", +"o c #a79783", +"O c #968775", +"+ c #cfbba2", +"@ c #bbbbbb", +"# c Gray70", +"$ c #6f6557", +"% c #838383", +"& c #7b7b7b", +"* c #baa891", +"= c #837666", +"- c #a2a2a2", +"; c #c9b59d", +": c Gray54", +"> c Gray67", +", c Gray42", +"< c #e4ceb2", +"1 c #cbcbcb", +"2 c #f9f9f9", +"3 c #c1c1c1", +"4 c #070706", +"5 c #4a443b", +"6 c #3c3731", +"7 c #dac5ab", +"8 c #dddddd", +"9 c #d2d2d2", +"0 c #484848", +"q c #b6a58f", +"w c #2c2823", +"e c #f1f1f1", +"r c #38332d", +"t c #555454", +"y c #665d51", +"u c #5b5348", +"i c #433d36", +"p c #ddc8ad", +"a c #c0ad96", +"s c #534b41", +"d c #d3bfa6", +"f c #867f76", +"g c #9e9d9c", +"h c #d7c3a9", +"j c #a8a198", +"k c #e0caaf", +"l c #312d29", +"z c #9f8f7c", +"x c #919090", +"c c #8e8d8c", +"v c #7f7263", +"b c #af9e89", +"n c #edd7bd", +"m c #b7b7b6", +"M c #796d5e", +"N c #e0cbb2", +"B c #8d7f6e", +"V c #252220", +"C c #191714", +"Z c #a7a7a7", +"A c #bdb3a7", +"S c #afafb0", +"D c Gray53", +"F c None", +/* pixels */ +"FFFFFFFe81S.%,t06li FFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"F28@g&t0irr666rrrlV,2FFFFFFFFFFFFFFFFFFFFFFFFFFF", +">,t005ii50tt,%xg-ZS#mFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"#.,y,&x->m313S-.x%&9SFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"91191@>-gxD&&&&&&&,S@2FFFFFFFFFFFFFFFFFFFFFFFFFF", +"129-D%DD:ccc:D%%%%,Sm2FFFFFFFFFFFFFFFFFFFFFFFFFF", +"3e@-.xcc:DDD%%%%%&,mm2FFFFFFFFFFFFFFFFFFFFFFFFFF", +"3 >.cc::::&&%%%%%&,@#FFFFFFFFFFFFFFFFFFFFFFFFFFF", +"@ Zxcc::D%t0:%%%&&,3#FFFFFFFFFFFFFFFFFFFFFFFFFFF", +"m Zxc:::%,0tc%%%%&,1#FFFFFFFFFFFFFFFFFFFFFFFFFFF", +"# Zxc::D%c05tlw6y&&9SFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"S Zx::DD%:ilrV444V, #FFFFFFFFFFFFFFFFFFFFFFFFFFF", +"Ze-c:DDD%%,$t0lC44V.&@ FFFFFFFFFFFFFFFFFFFFFFFFF", +"ge-:DDD%%%%O=y5VCwwwwVw8FFFFFFFFFFFFFFFFFFFFFFFF", +"ge-D%D%%%%&Bbzv$v==$uiCC.2FFFFFFFFFFFFFFFFFFFFFF", +"g -%%%%D:cxco;*bbbbzvy5l4,eFFFFFFFFFFFFFFFFFFFFF", +"Z #.g-Z>SS#Sj*;**aaqzB$s6Ct FFFFFFFFFFFFFFFFFFFF", +"Z81333@@mmm#Sjbob*;+aoB$siCl1FFFFFFF29>1FF89eFFF", +">89913@@mmSg>S-cfzod+*zBys6C4D8FFFF>t6wV,tC4V,9F", +"#91 13@@@-t0tS>Z-gDqh+qOMs6V444t3 %5ssirC44CC44g", +"@93 13@@@,,StcSZZ-%chh;bBys56VC4C665ss5irV44CC44", +"11@ 13@@@,%3,,SZ--D:jddaoOOvy5wwwlr6i5s5i6lC4444", +"91# 93@@@,&3&,SZ--c%3Ad;*a;qO$iwwwlr6i555i6wC44C", +"83S893@m@&t@,,SZ--.&8 q++hph*Bu6rrrr6ii55i6rwC4C", +"em#983@mm>0tt->Z-g.& F3a7kkd*zvys5i66666ii66rlCC", +"F>#@8@@mmm>.Z>>ZZ>-&FFFgkkpdaoBvyus5i6666666rlwV", +"FmSZ83@mmmmm#>-.cD.3FFFmdkkdabO=M$yu5i66rr66rlwl", +"FeS1 1@@S-.xxg#1 2FFFFF8*Nkh;qoB=M$yusi6rrrrllwl", +"FF9SZx.Z#1 2FFFFFFFFFFF2jNN7+abzB=M$yysirrrrlwVl", +"FFFFFFFFFFFFFFFFFFFFFFFFmdNpd;*bzB=vM$yu56rllwVl", +"FFFFFFFFFFFFFFFFFFFFFFFF q<k7+aqozO=vM$yu56rlwVl", +"FFFFFFFFFFFFFFFFFFFFFFFFFjkkph+aqbzOBvM$yusirwwl", +"FFFFFFFFFFFFFFFFFFFFFFFFF1;kk7d;aqozOB=M$yusirwr", +"FFFFFFFFFFFFFFFFFFFFFFFFF2q7kph+;*bozOB=M$yusirr", +"FFFFFFFFFFFFFFFFFFFFFFFFF f+kkph+a*bozOB=M$yus5i", +"FFFFFFFFFFFFFFFFFFFFFF2g,lwopkk7d;a*bozOB=M$yuss", +"FFFFFFFFFFFFFFFFFFFFFFxM5V4ydkNk7d;a*bozOB=M$yuu", +"FFFFFFFFFFFFFFFFFFFFF>OBsC4w*k<<k7d;aqbozOB=M$yy", +"FFFFFFFFFFFFFFFFFFFFeO*z$w44vp<<<k7d;aqbozOB=M$$", +"FFFFFFFFFFFFFFFFFFFF8b;bB5C4s7<<<<k7d;aqbozOB=MM", +"FFFFFFFFFFFFFFFFFFFF8*dao$r4id<<XX<k7+;aqbozOB==", +"FFFFFFFFFFFFFFFFFFFFeb7;qBuVi+<<XXX<k7d;aqbozOBB", +"FFFFFFFFFFFFFFFFFFFFFgp+;o=5s;N<XXXX<N7d;aqbozOO", +"FFFFFFFFFFFFFFFFFFFFF1;d+*zM=;k<XXXXX<N7d;aqbozz", +"FFFFFFFFFFFFFFFFFFFFFFj7+abo*+7<XXXXXXXN7d;a*boo", +"FFFFFFFFFFFFFFFFFFFFFF@+d;aa;d7<XXXXnnXXN7d;a*bb", +"FFFFFFFFFFFFFFFFFFFFFF2oh;+;+hp<<XXXnnnnX<pd+a*q", +"FFFFFFFFFFFFFFFFFFFFFFF@;dhhhpN<XXnnnnnnnnXN7+;;" +}; + +/* XPM */ +const char *widgeticon_sel[] = { +/* columns rows colors chars-per-pixel */ +"48 48 64 1", +" c #706557", +". c #818181", +"X c #100f0e", +"o c Gray73", +"O c #797979", +"+ c #e9d3b7", +"@ c #c9b59d", +"# c #cfbba2", +"$ c #847766", +"% c Gray91", +"& c Gray84", +"* c Gray64", +"= c #b4b4b4", +"- c #8b8b8b", +"; c #baa891", +": c #e3cdb2", +"> c Gray42", +", c #a9a9a9", +"< c #3b3732", +"1 c #dac5ab", +"2 c #4c443b", +"3 c #c1c1c1", +"4 c #b7a58f", +"5 c #2b2823", +"6 c #9a9a9b", +"7 c #464646", +"8 c #cbcbcb", +"9 c Gray33", +"0 c #38332c", +"q c #928472", +"w c #665d51", +"e c #929292", +"r c #9d8d7a", +"t c #5c5348", +"y c #aa9985", +"u c #433d35", +"i c #ddc8ad", +"p c #c0ae96", +"a c #a59581", +"s c #544b41", +"d c #d3bfa5", +"f c #e0caaf", +"g c #a2927e", +"h c #847c73", +"j c #ae9d88", +"k c #928d86", +"l c #302d29", +"z c #796d5e", +"x c #7f7263", +"c c #b1a08a", +"v c #252320", +"b c #d7c2a8", +"n c #8c7e6d", +"m c #968775", +"M c #dfcab1", +"N c #1d1b19", +"B c #a6a099", +"V c #9e907d", +"C c #9a8a78", +"Z c #a79782", +"A c Gray94", +"S c #afafaf", +"D c #868686", +"F c None", +/* pixels */ +"FFFFFFFFFFFFXXXNvNNXFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFXXXN5l0<<<<00lvlFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"N77777uu7799>.e6*,S=0FFFFFFFFFFFFFFFFFFFFFFFFFFF", +"66>w>Oe*So383S*6eDO&OFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"388&8o,*6eD.O.OO..>SDFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"3A&*DDDD-----DD...>S.FFFFFFFFFFFFFFFFFFFFFFFFFFF", +"*Ao*ee---DDDD.....>=.FFFFFFFFFFFFFFFFFFFFFFFFFFF", +"6%,e------.OD....O>oOFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"6%,e----D.97-D...O>3>FFFFFFFFFFFFFFFFFFFFFFFFFFF", +".%,e----.>79-..D..>8>FFFFFFFFFFFFFFFFFFFFFFFFFFF", +"O%*e---DD-779l5<wOO&>FFFFFFFFFFFFFFFFFFFFFFFFFFF", +"O%*e--DDD-ul0vXFFv>%9FFFFFFFFFFFFFFFFFFFFFFFFFFF", +"9A*--DDDDD> 97lXFFve7XXFFFFFFFFFFFFFFFFFFFFFFFFF", +"7A*-DDDDD..m$w2vN5555vXXFFFFFFFFFFFFFFFFFFFFFFFF", +"<A*DDDD....qcgx x$$ tuNXNFFFFFFFFFFFFFFFFFFFFFFF", +"l%*.DDDD--eky@;yjjjrxw2lXNFFFFFFFFFFFFFFFFFFFFFF", +"5%Se6**,SS=SB;@;;pp4gn s<XNXFFFFFFFFFFFFFFFFFFFF", +"v%8333ooo===SBcyj;p#;an suNXNFFFFFFFFXXXFFXXFFFF", +"N&&&83ooooS*,S*khVyd#;gnws<NFNXFFFFl<05NXXXFXNXF", +"X&8%83ooo*979S,,*6D4b#4Czs<NFFFXNX<2ssu0XFFXXFFN", +"X&3%83oo3>>S9-S,**Dkbb@ynws2<vXXNl<2ss2u0vXXXXFF", +"X8o%83ooo>.3>>S,**DDhddpamCxw25vvl0<u2s2u<lNXXFF", +"F3=%83ooo>O3O>S***-ONzd@;p@4q u555l0<u222u<5NXFF", +"F=S&&3oooO9o>>S***eOXFm##bib;nt<0000<uu22u<05NXF", +"F6=8&3ooo,799*,***6>FFN;1ffd;Cxw22u<<<<uuuu<0lNF", +"F9=3&ooo==,6,S,,,,*<FFF2ffidpaqxwts2u<<<<<<<0l5X", +"FNS*&3ooo==o=,*eO90FFFFXdffdpjC$z wt2u<<00<<0l5N", +"FF-8%8ooS6.w<NXFFFFFFFFFc:fb@4gq$z wtsu<0000ll5v", +"FFFN97<NXFFFFFFFFFFFFFFF ::1#pcgq$z wwsu0000l5vN", +"FFFFFFFFFFFFFFFFFFFFFFFF5d:id@;jVq$xz wt2<0ll5vN", +"FFFFFFFFFFFFFFFFFFFFFFFFFg:f1#p4yVq$xz wt2<0l5vN", +"FFFFFFFFFFFFFFFFFFFFFFFFFuffib#p4jgqnxz wt2u055v", +"FFFFFFFFFFFFFFFFFFFFFFFFFX@ff1d@p4yrmn$z wtsu05v", +"FFFFFFFFFFFFFFFFFFFFFFFFFFq1fib#@;cZVmn$z wtsu05", +"FFFFFFFFFFFFFFFFFFFFFFFFFXs#ffib#p;cygmn$z wtsu0", +"FFFFFFFFFFFFFFFFFFFFFFFXNv5yiff1d@p;cyVmn$z wtsu", +"FFFFFFFFFFFFFFFFFFFFFFvz2NXwdf:f1d@p;cZVmn$z wt2", +"FFFFFFFFFFFFFFFFFFFFFXCnsXFv4f::f1d@p4jZrmn$z ws", +"FFFFFFFFFFFFFFFFFFFFF ;g 5FFxi:::f1d@p4jarmn$z t", +"FFFFFFFFFFFFFFFFFFFFFZ@cn2XFs1::::f1d@p4jarqn$zw", +"FFFFFFFFFFFFFFFFFFFFFcdpa 0Fud::++:f1d@p4jarqn$ ", +"FFFFFFFFFFFFFFFFFFFFF$1@4qtNu#::+++:f1d@p4jarmnz", +"FFFFFFFFFFFFFFFFFFFFF<i#@y$2s@::++++:M1d@p4jZVm$", +"FFFFFFFFFFFFFFFFFFFFFX@d#;rz$@f:++++++:1d@p4jZVn", +"FFFFFFFFFFFFFFFFFFFFFFt1#pcy;#1:+++++++:1d@p;cZm", +"FFFFFFFFFFFFFFFFFFFFFFX#d@pp@d1:++++++++:1d@p;cV", +"FFFFFFFFFFFFFFFFFFFFFFF b@#@#bi:+++++++++:id#p;y", +"FFFFFFFFFFFFFFFFFFFFFFFXcp@@@@#d11iiMMMMMib#@p;a" +}; + +/* XPM */ +const char *dbicon[] = { +/* columns rows colors chars-per-pixel */ +"48 48 128 2", +" c #9b8471", +". c #c4a48e", +"X c #ab806c", +"o c #93918c", +"O c #6a534a", +"+ c #9c7d69", +"@ c #a27d69", +"# c #b4a69a", +"$ c #a4816d", +"% c #6f6d6d", +"& c #b1826e", +"* c #91816d", +"= c #a59687", +"- c #c5baaf", +"; c #8e7e6a", +": c #94816e", +"> c #a28571", +", c #e8e7e5", +"< c #ad4e34", +"1 c #99806c", +"2 c Gray99", +"3 c #393534", +"4 c #dad9d8", +"5 c #cbc6c1", +"6 c #9e816d", +"7 c #c5937d", +"8 c #ba8a75", +"9 c #c8c1ba", +"0 c #f4f3f2", +"q c #ab8974", +"w c #b38672", +"e c #d6927d", +"r c #4a6299", +"t c #d19b85", +"y c #595754", +"u c #292828", +"i c #aa8470", +"p c #abb9d7", +"a c #917d6a", +"s c #8c6856", +"d c #874c32", +"f c #7a472d", +"g c #967d69", +"h c #b89a86", +"j c #b98671", +"k c #915c44", +"l c #c38974", +"z c #744a31", +"x c #a87f6b", +"c c #b28975", +"v c #ba937e", +"b c #9f4c31", +"n c #52453d", +"m c #6e462d", +"M c #9598b1", +"N c #73758b", +"B c #907f6c", +"V c #bbb3ab", +"C c #7586b4", +"Z c #897b77", +"A c #c58d79", +"S c #bcbcbc", +"D c #934a30", +"F c #7c5f51", +"G c #9b7b67", +"H c #8e7f6c", +"J c #bd8d78", +"K c #8d7966", +"L c #93715e", +"P c #cc8e79", +"I c #e1deda", +"U c #81472e", +"Y c #c45035", +"T c #9f8d7e", +"R c #85624c", +"E c #b8836f", +"W c #926c5b", +"Q c #bbaca0", +"! c #647aab", +"~ c #d0ccc7", +"^ c #654931", +"/ c #927864", +"( c #adabb7", +") c #8d8477", +"_ c #423c3a", +"` c #a79f95", +"' c #e0a690", +"] c #a27666", +"[ c #98624c", +"{ c #8b7d6a", +"} c #a58773", +"| c #d8d4e3", +" . c #a55941", +".. c #7e7164", +"X. c #a27b67", +"o. c #2f2e2e", +"O. c #ac8e79", +"+. c #927b68", +"@. c #947f74", +"#. c #d7d4cf", +"$. c #333130", +"%. c #947f6c", +"&. c #181715", +"*. c #f8f7f7", +"=. c #af806c", +"-. c #8d7c68", +";. c #835941", +":. c #2d2f34", +">. c #c98c77", +",. c #cf907b", +"<. c #a89180", +"1. c #ab7a68", +"2. c #c5c4d8", +"3. c #9ea4bf", +"4. c #e49f88", +"5. c #eeedeb", +"6. c #8a7564", +"7. c #817d84", +"8. c #a05f48", +"9. c #c08873", +"0. c #977462", +"q. c #9b705d", +"w. c #8b7e6f", +"e. c #74543d", +"r. c #98836f", +"t. c #586997", +"y. c #8e806c", +"u. c None", +/* pixels */ +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.*.I 5 Q # = <.<.h # V 5 I *.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.*.#.# > G G X.X.@ @ @ @ X.X.X.+ T Q #.*.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.*.9 T G G + @ @ @ @ @ @ @ @ @ @ @ @ + + G T 9 0 u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.2 5 T G G + + + @ @ @ x x x x x x @ @ @ @ + + G G > - 0 u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.5.` g G G G + @ @ @ @ x x x X X X X x x @ @ @ + + + + G <.I u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u., T g g g + + + @ @ @ x x X X X X X X X x x x @ @ + + + g g g - 2 u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.4 +.g g g + + + @ @ $ x X =.=.=.=.=.=.X X X x x @ @ + + g g g +.# *.u.u.u.u.u.u.u.", +"u.u.u.u.u.I : +.+.g g g + + 6 $ $ x X =.=.=.=.& & =.X X X X x $ 6 + + 1 g g +.+.` *.u.u.u.u.u.u.", +"u.u.u.u.0 T +.a a g g g + 1 6 $ $ x X X =.=.& & & =.=.X X x $ $ 6 6 1 1 g g a a -.# 2 u.u.u.u.u.", +"u.u.u.u.V K a a a a g g 1 1 6 6 $ $ x X =.=.& & & & =.X X x $ $ 6 6 1 1 g g a a a -.- u.u.u.u.u.", +"u.u.u.#.K -.; a a %.%.%.1 6 6 6 6 $ x X X & & & & & =.X x $ $ 6 6 6 1 1 %.%.a a ; ; -.4 u.u.u.u.", +"u.u.2 = -.; ; ; a a %.%.1 1 1 6 6 $ $ x X =.& & & & =.X x $ $ 6 6 1 1 1 1 %.a a ; ; -.= *.u.u.u.", +"u.u.#.-.-.; ; ; B B %.%.1 1 1 1 6 6 $ $ X & w & E w & X $ $ 6 6 1 1 %.%.%.%.B a ; ; ; -.9 u.u.u.", +"u.u.` -.{ ; ; ; B B B %.%.%.1 1 1 6 $ i $ L R F F s X.i $ 6 6 1 1 %.%.%.%.%.B B ; ; ; ; r.5.u.u.", +"u.5.y.{ { ; ; ; H B B B B %.%.%.1 1 6 L e.^ m U U m z [ + 6 1 1 %.%.%.B B B B B ; ; ; ; -.9 u.u.", +"u.~ { { { { ; H B B B B B B B * %.r.W z m D b < Y b U f ;.g 1 %.%.B B B B B B B H ; ; ; ; = 2 u.", +"u.V { { { ; H H B B B B B B B B * K d m f d < Y Y < d U f k : %.* B B B B B H H H H H ; ; ; I u.", +"u.` { { { ; H H B H H H B B B B * W U ^ z d d d D D d z ^ d q.* B B B H H H H H H H H H H { 9 u.", +"u.= ; ; H H H H H y.y.y.y.y.y.y.y.8.U ^ z z n m U ^ m m z f 8.y.H H H H H H H H H H H H H ; Q u.", +"u.T H H H H H H y.y.y.y.y.y.y.y.y. .U ^ z ^ m f d ^ ^ m ^ m .B y.y.y.y.H H H y.y.y.y.H H H ` u.", +"u.T y.H H y.y.y.y.y.y.y.y.y.y.y.y.[ D z z m b < Y < z m ^ f .y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.= u.", +"u.) y.y.y.y.y.y.y.y.y.y.y.B B B * s b U z f d < Y b f z ^ D [ * y.y.y.y.y.y.y.y.y.y.y.y.y.y.= u.", +"u.w.: B B B B B B B B B * * * * : * ;.b D d d b b D D d D b / * * B B B y.y.B y.y.y.y.y.* * = u.", +"u.w.: * * * * * * * B * * : : : : / d D b < < < < < < D s r.: : : * * * * * B * * * * * * ` u.", +"u.o : * * * : : : : * : : : : 1 1 6 > G ;.f D b < b D d s 6 r.1 : : : : : * * * * * * * * * Q u.", +"u.` -.: : : : : : : : : 1 1 1 1 6 6 $ i i q.R ;.;.;.s X.i $ 6 1 1 1 1 : : : : : : * : : : : 9 u.", +"u.9 ..r.r.r.: : : : r.w.Z 1 6 6 6 $ $ i & w j E E j j & i $ $ 6 6 1 1 1 1 : : : : r.: : r.r.I u.", +"u., ..1 r.r.r.r.r.r. @.t.t.Z $ i i i X & & E E E E E & X i $ $ $ 6 6 1 1 1 r.r.r.r.r.r.r.<.*.u.", +"u.u.o K r. 6 @.t.r 7.6.G w & & & E E E E E & & i i $ $ $ 6 6 6 6 r.r.r.r.r.r.r.9 u.u.", +"u.u.~ ..6 6 > Z N % :.3 F w j E E E E E E E & & i i $ $ $ 6 6 6 <.5.u.u.", +"u.u.*.) K } > > > > > > q ..:.u u o.n 0.9.j E E E E E & & & i i $ $ > > > > > > 9 u.u.u.", +"u.u.u.~ ..6 } } } } } } i q 0.o.u O X.n $.O 1.l j E E E E & & & i i i > > > } > > > > = 0 u.u.u.", +"u.u.u.u.` 6.> q q q q q i i c R u s J 8 ] n $.F E l E E E & & i i i i i i } } } } } } ~ u.u.u.u.", +"u.u.u.u., { K q q q q c c w c 8 O o.X.9.9.9.s 3 _ W l j j E w w w w w q q q q q q q h *.u.u.u.u.", +"u.u.u.u.u.~ K g c c c c c c c 8 j _ n 9.9.9.>.E O $.O =.l 8 j j w w c c c c c q c } 4 u.u.u.u.u.", +"u.u.u.u.u.u.9 +.1 c J 8 8 8 8 8 A =.3 F >.l l l P 1.O _ F 9.A 8 8 8 8 8 c c c J } 5 u.u.u.u.u.u.", +"u.u.u.u.u.u.u.9 1 6 q J J J J J A ,.q.u W ,.>.>.>.P P ] n n ] P A J J J 8 J v q - u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.5 > } O.7 7 A A A A ,.O o.1.e >.>.>.>.,.P F $.O j ,.7 A 7 7 O.V u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.I ` q O.v 7 t ,.P ,.,.O 3 9.e ,.,.,.,.,.e 1.3 3 F 7 t v <.~ u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.*.9 O.v v h t t t t ,._ O e e e e e e e 4.] u u _ y o , u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u., V h h h . . . ' v 3 s ' ' ' ' t ' 7 O u o.u u ` u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u., 9 Q . . . . . _ u O > O.> ..n &.&.$.o.o.o.% 4 u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.2 , ~ - - T u u u 3 y y % o 9 y u $.o.o.o.u $.V u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.0 % u o.o.o 5.2 u.u.7.u o.u o.3 $.u u S u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u., n u o.o.y % % y 3 o.3 N M 3.( 7._ $.4 u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.4 3 u $.o.o.o.o.o.3 M C t.r ! 2.( 3 y *.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.S u o.$.$.$.$.u % M r r ! ! 3.| 7.u 5 u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.` $._ _ _ _ 3 7.C r t.p p C | ( 3 o u.u.u.u.u." +}; + +/* XPM */ +const char *dbicon_sel[] = { +/* columns rows colors chars-per-pixel */ +"48 48 128 2", +" c #a3816d", +". c #2a2929", +"X c #b1826e", +"o c #91816d", +"O c #796a5b", +"+ c #8e7e6a", +"@ c #4b433b", +"# c #94816d", +"$ c #9d8571", +"% c #ad4e34", +"& c #9a816d", +"* c #a28571", +"= c #9e816d", +"- c #0b0b0a", +"; c #756c73", +": c #c4937d", +"> c #3a3633", +", c #ad816d", +"< c #ba8a75", +"1 c #ab8974", +"2 c #574d44", +"3 c #cdc9da", +"4 c #b38672", +"5 c #876858", +"6 c #d6927d", +"7 c #d19984", +"8 c #aa8570", +"9 c #917d6a", +"0 c #a9816d", +"q c #4b6399", +"w c #874c32", +"e c #63574c", +"r c #7a472d", +"t c #957d69", +"y c #b98671", +"u c #a17d6a", +"i c #915c44", +"p c #c38974", +"a c #9a7d6a", +"s c #744a31", +"d c #aa7f6b", +"f c #b28975", +"g c #9d7d69", +"h c #9f4c31", +"j c #6e462d", +"k c #b8937e", +"l c #8491ba", +"z c #a57e6a", +"x c #907f6c", +"c c #c58d79", +"v c #735749", +"b c #c5a28c", +"n c #934a30", +"m c #6b7397", +"M c #bd9b85", +"N c #9a7a66", +"B c #897b77", +"V c #8e7f6c", +"C c #647aa9", +"Z c #9da9c6", +"A c #bd8d78", +"S c #8d7966", +"D c #817261", +"F c #93705e", +"G c #cc8e79", +"H c #2f2d2c", +"J c #81472e", +"K c #353230", +"L c #c45035", +"P c #88644d", +"I c #433c37", +"U c #927864", +"Y c #b8836f", +"T c #8a7361", +"R c #916958", +"E c #5a6c98", +"W c #795e52", +"Q c #654930", +"! c #dba993", +"~ c #43598f", +"^ c #c5a892", +"/ c #daa28b", +"( c #e4a58f", +") c #a27666", +"_ c #98624c", +"` c #8b7d6a", +"' c #645d52", +"] c #a55941", +"[ c #a58773", +"{ c #a37a66", +"} c #adaab7", +"| c #ab8e78", +" . c #907b68", +".. c #947f74", +"X. c #947f6c", +"o. c #634d45", +"O. c #232120", +"+. c #b0806c", +"@. c #a47a68", +"#. c #6e6358", +"$. c #a5806c", +"%. c #9e7b68", +"&. c #8d7c68", +"*. c #835941", +"=. c #2d2f34", +"-. c #c98c77", +";. c #997c68", +":. c #cf907b", +">. c #99836f", +",. c #a27c69", +"<. c #9c9bab", +"1. c #31302f", +"2. c #ab7a68", +"3. c #e49f88", +"4. c #987f6c", +"5. c #967561", +"6. c #7b5f4a", +"7. c #9ca1bb", +"8. c #807c84", +"9. c #a05f48", +"0. c #987262", +"q. c #181816", +"w. c #96836f", +"e. c #c08873", +"r. c #947b68", +"t. c #9b705d", +"y. c #8e806c", +"u. c None", +/* pixels */ +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.- O.I 2 e W O W W e 2 > O.- u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.- . e T %.%.%.,.,.,.,.,.,.,.%.g 5 o.H - u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.- > O N %.%.,.,.u u ,.z z z z ,.,.,.%.%.N 5 I - u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.> O ;.;.g %.g u ,.z z z z z z z z z z u g g ;.;.T @ - u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.q.e r.;.;.;.g u u z z z d d d d d d d z z ,.u g g a a ;.O O.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.q.O r.t ;.a g g u u z z d d d , , , d d d z z u u g g a t t r.@ u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.. D r.r.t t a g u u z $.0 d , , +.+.+., , , d d z u u g a ;.;.t r.e - u.u.u.u.u.u.u.", +"u.u.u.u.u.O.T .r.r.t t a g = $.0 d , +.+.+.+.+.+., , d d $. = g a a a t 9 .e - u.u.u.u.u.u.", +"u.u.u.u.- O .9 t t t 4.a a = 0 d , +.+.+.X X +., , d 0 $. = = a a 4.t t 9 .e u.u.u.u.u.u.", +"u.u.u.u.2 . . .9 9 t t 4.& = = $.0 , , +.X X X +., , d $.$. = = 4.4.4.t 9 9 9 &.2 u.u.u.u.u.", +"u.u.u.. S &.+ 9 9 X.X.X.4.= = = = $.d , +.X X X +., , 0 $.$.= = = & 4.X.X.9 9 + + &.H u.u.u.u.", +"u.u.u.#.&.+ + + 9 9 X.X.4.& & = = $.0 , +.X X X +., , $.$. = = 4.4.4.4.X.9 9 + + &.O - u.u.u.", +"u.u.H &.&.+ + + x x X.X.4.4.4.& = = $., X 4 X Y 4 X 0 $. = = & 4.X.X.X.X.x 9 + + + &.@ u.u.u.", +"u.u.' &.` + + + x x x X.X.X.4.4.& & 0 $.F P 6.6.R @.8 = & & 4.X.X.X.X.X.x x + + + + D q.u.u.", +"u.q.D ` ` + + + V x x x x X.X.X.4.4.= F v Q j J J j s _ g = & 4.X.X.X.x x x x x + + + + &.@ u.u.", +"u.K ` ` ` ` + V x x x x x x x o X.w.F s j n h % L h J r *.;.& X.X.x x x x x x x V + + + + O - u.", +"u.2 ` ` ` + V V x x x x x x x x o .w j r w % L L % w J r i # X.o x x x x x V V V V V + + + O.u.", +"u.e ` ` ` + V V x V V V x x x x o R J Q s w w w n n w s Q w t.o x x x V V V V V V V V V V ` @ u.", +"u.#.+ + V V V V V y.y.y.y.y.y.y.y.9.J Q s s @ j J Q j j s r 9.y.V V V V V V V V V V V V V + e u.", +"u.O V V V V V V y.y.y.y.y.y.y.y.y.] J Q s Q j r w Q Q j Q j ] x y.y.y.y.V V V y.y.y.y.V V V #.u.", +"u.O y.V V y.y.y.y.y.y.y.y.y.y.y.y._ n s s j h % L % s j Q r ] y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.O u.", +"u.O y.y.y.y.y.y.y.y.y.y.y.x x x o 5 h J s r w % L h r s Q n _ o y.y.y.y.y.y.y.y.y.y.y.y.y.y.D u.", +"u.#.# x x x x x x x x x o o o o # o *.h n w w h h n n w n h U o o x x x y.y.x y.y.y.y.y.o o O u.", +"u.' # o o o o o o o x o o # # # # >.U w n h % % % % % % n R w.# # # o o o o o x o o o o o o #.u.", +"u.2 # o o o # # # # o # # # # # & & * N *.r n h % h n w R = & & # # # # # o o o o o o o o o e u.", +"u.@ &.w.# # # # # # # # & # & & & = 8 , t.P *.*.*.P { 8 = & & & # # # # # # # o # # # # 2 u.", +"u.1.D >.w.w.w.w.w.w.>.B B & = & = 0 , 4 y Y Y y y X 0 = = & & & # # # # # w.# # w.w.H u.", +"u.q.O & >.>.>.>.>.>.>...E E B 8 8 0 , X X Y Y Y Y Y X , 0 = & & & & w.w.w.w.w.w.w.T - u.", +"u.u.e S $ >.>.>.$ $ >.= ..q q 8.T %.4 X X X Y Y Y Y Y X X , 0 = = & & >.>.>.>.>.>.>.2 u.u.", +"u.u.1.O & $ $ $ $ $ $ = * B m ; =.K W 4 y Y Y Y Y Y Y Y X X , 8 0 = = = $ $ $ $ $ $ t q.u.u.", +"u.u.- ' S [ $ * * * * * * 8 ; =.. . H @ 0.e.y Y Y Y Y Y X X X , 0 * * * * * $ $ $ $ 2 u.u.u.", +"u.u.u.H D & [ [ [ [ [ [ 8 1 5.H . v { o.K o.2.p y Y Y Y Y X X X 8 8 8 * * * [ * * * * U - u.u.u.", +"u.u.u.u.e T * 1 1 1 1 1 8 8 f 5 . 5 A < ) 2 K W Y p Y Y Y X X 8 8 8 8 8 8 8 [ [ [ [ [ I u.u.u.u.", +"u.u.u.u.q.D S 1 1 1 1 f f 4 f < o.H @.e.e.e.R > I F p y y Y 4 4 4 4 4 1 1 1 1 1 1 1 T - u.u.u.u.", +"u.u.u.u.u.> S t f f f f f f f < y I @ e.e.e.-.Y v K o.+.p < y y 4 4 f f f f f 1 f [ H u.u.u.u.u.", +"u.u.u.u.u.u.I .& f A < < < < < c +.> v -.p p p G 2.o.I W e.c < < < < < f f f A [ I u.u.u.u.u.u.", +"u.u.u.u.u.u.u.> & = 1 A A A A A c :.t.. R :.-.-.-.G G ) @ @ ) G c A A A < A A 1 @ u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.> = [ | : : c c c c :.v H 2.6 -.-.-.-.:.G W 1.e y :.c c : : | 2 u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.O.O 1 | k : 7 :.G :.:.o.> e.6 :.:.:.:.:.6 2.K > 5 : 7 k >.> u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.- @ 1 k k M b 7 7 7 :.I o.6 6 6 6 6 6 6 3.) . . I ' 2 q.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.q.#.k M M b b b ! k > 5 ( ( ( / / ! : v . H . . . u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.q.2 X.M b ^ ^ ^ I . e * | $ >.D 2 - O.1.H H H 1.q.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.q.@ #.$ ` . . . > @ @ I K O.q.O.1.1.H H . H O.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.- 1.. H 1.. - u.u.u.. . H O.1.> K . . O.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.q.H . H H 1.. O.H 1.H > 8.<.7.} 8.I . O.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.O.H . 1.1.1.1.1.H K <.l E q C 3 } > 1.- u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.. . H 1.1.1.1.. #.l ~ q C C Z 3 8.. O.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.H . H H H H . ; E ~ ~ Z Z C 3 <.K H u.u.u.u.u." +}; + +/* XPM */ +const char *internicon[] = { +/* columns rows colors chars-per-pixel */ +"48 48 32 1", +" c #54706a", +". c #32494f", +"X c #a5b6b0", +"o c #1f6796", +"O c #56758a", +"+ c #273133", +"@ c #465450", +"# c #173547", +"$ c #5e7968", +"% c #7192af", +"& c #6e8c86", +"* c #112836", +"= c #688370", +"- c #2d5161", +"; c #5885a9", +": c #134c6e", +"> c #53605e", +", c #080f14", +"< c #656860", +"1 c #405c65", +"2 c #2e3f44", +"3 c #131b21", +"4 c #44677a", +"5 c #17425c", +"6 c #8e9185", +"7 c #3f4944", +"8 c #3979a3", +"9 c #797770", +"0 c #202527", +"q c #363936", +"w c #7e9c93", +"e c None", +/* pixels */ +"eeeeeeeeeeeeeeeeeeee%&&OOOO&eeeeeeeeeeeeeeeeeeee", +"eeeeeeeeeeeeeeeewOO 4OOOO4411..9eeeeeeeeeeeeeeee", +"eeeeeeeeeeeeeX&OOwwO4OOOO411-.2q2@9eeeeeeeeeeeee", +"eeeeeeeeeeee;OO%XXwO444411.22.qqq+07eeeeeeeeeeee", +"eeeeeeeeeewO;%XXX&O4411--..222q2++000>eeeeeeeeee", +"eeeeeeeee%;;XXXwOO444411-..222qq++00+0qeeeeeeeee", +"eeeeeeee%;;%%%%OOOOO4411-..22++++0000q3+eeeeeeee", +"eeeeeee8%;;;%%%OOOOO4>>11-.77q+++003300,3eeeeeee", +"eeeeee8%%;;;%%;OOOO4>><>>@@77qqq++000000,3eeeeee", +"eeeee88%%;;%%;;OOO>>>>>>>>@77q+q+0000+033,0eeeee", +"eeee%8%%%;%%;;OOOO $411>>@777qq++000q2+033,<eeee", +"eeee88;;;%%;;;OOO4O 4>>>@@7722qqq+++7q++033,eeee", +"eee8o88;%;;%;OOOO <>@@77777qqqqq++q0q+00,0eee", +"eeXooo8%;;;;;OO <<>>@@@@7@7qqqqq+077q+q03,9ee", +"ee;o8;%;8;;;8O4411>>>1@@>@7@77qqqq++q@70+703,0ee", +"eeoo88888;;&;&44>>><<>>>>@772#22+++q77307q0,,,ee", +"e%ooo88888;= &$>$>>>@@@.5.2##22+++21+07q0003,@e", +"e8ooo88888&&44OOO>---.555#5@7##2+++2-.77+00+3,3e", +"eoooo8oooo4444O4----.---..@@72*22++2.2@q0+000,,e", +"e8;oooooo8OOO=4-:-:-5->@@@@@.2#22+2.*0q7q++003,e", +"%88oooooo $&6=$ ::::5:-..@@@@7722+220330000003,>", +";oooooo8O =&==&$-:::55555@@7@.722+0++000300303,7", +"8ooooo;w&&&w&&&= 1: 1-:5-@@777.7.++++000300333,+", +"8oooo8w66=&w&&=$$ =$$ 11@@@@7#22+2+**0000033,,0", +"8oooo;www&ww= $$ $$$$>-.@@772###****0000033,,0", +"8oooo&XXXwww= $= $$$$$ .5..77722.+***3++0033,,0", +";oooo&XXXw&=$$$$$$>$$ $ @5-.777777+***00q0033,,+", +"%o4O4&66&&&==$$$$1@$$$$ >25.277@77+****0+03033,@", +"eo4OO&996===$ === $$$ @#5277@7#****00000333,9", +"eo4ooO=99$$=$==$=$$$$$$ >>.5-772******+000003,,e", +"e4::::4$ > $=$$$===$$ <>><2-7###****++00003,,3e", +"e%::::-141>>>> $9999<<>>@<>22#52#***+++0003,3,7e", +"ee:::::-1111>-199<<9<<@><<@77272******0003333,9e", +"ee45:::::-11111><<<<>@>><@@q2q7###+++**0333333ee", +"eee5::::::-111--1>11>-@>@..+227##22+++*033,3,<ee", +"eee455:5555------1-1>@@@...22222222++**33,,,3eee", +"eeee5555555555-11-1><<>@..2.2.2.772+**33,,,,&eee", +"eeee%#555-5555--@@><<<>@-.q2.22222+***3333,7eeee", +"eeeee1#555--555--@@@>@.7.7q22###2#***3333,,eeeee", +"eeeeee.#555--555-....@@.7772####*****333,,6eeeee", +"eeeeeee-##55--55-......77772####*****33,,9eeeeee", +"eeeeeeee-*##555--....222.772###+****03,,6eeeeeee", +"eeeeeeeee1####5......2222222#2+*****3,3eeeeeeeee", +"eeeeeeeeee 2###55.77..2++##222+****3,0eeeeeeeeee", +"eeeeeeeeeeee@####2.772.+#####+++0033>eeeeeeeeeee", +"eeeeeeeeeeeeew@###2@@72+**#****330>eeeeeeeeeeeee", +"eeeeeeeeeeeeeeee>2##++q2#****0+79eeeeeeeeeeeeeee", +"eeeeeeeeeeeeeeeeeee$>@27722@>eeeeeeeeeeeeeeeeeee" +}; + +/* XPM */ +const char *internicon_sel[] = { +/* columns rows colors chars-per-pixel */ +"48 48 32 1", +" c #526f6b", +". c #2d4750", +"X c #226a98", +"o c #a7b7ae", +"O c #293233", +"+ c #53748a", +"@ c #44534e", +"# c #1c3848", +"$ c #112a39", +"% c #2e5263", +"& c #5d7a67", +"* c #688472", +"= c #688cae", +"- c #457fa9", +"; c #6f9383", +": c #144c6e", +"> c #506462", +", c #0e1419", +"< c #686c63", +"1 c #405c65", +"2 c #313d3f", +"3 c #151e23", +"4 c #16425c", +"5 c #43667d", +"6 c #617f93", +"7 c #8f8d7a", +"8 c #3d4844", +"9 c #829e9a", +"0 c #7f7769", +"q c #212728", +"w c #575c58", +"e c None", +/* pixels */ +"eeeeeeeeeeeeeeeeeee@1 66+6>8eeeeeeeeeeeeeeeeeeee", +"eeeeeeeeeeeeeeee +6+5+6++5551.2Oeeeeeeeeeeeeeeee", +"eeeeeeeeeeeee>+6699+5+6++511%.282O3eeeeeeeeeeeee", +"eeeeeeeeeeee+669oo96555511..282222Oqeeeeeeeeeeee", +"eeeeeeeeee6669ooo6+5511%%...2222OOqqO3eeeeeeeeee", +"eeeeeeeee6==ooo96+55551%%..222OOOOqqOq,eeeeeeeee", +"eeeeeeee6=-=9==6++++551%%...2OOOOqq3qOq3eeeeeeee", +"eeeeeee-=======6++++5>>11%8882OOqqq33qq3,eeeeeee", +"eeeeeeX=======6+++5>>>>www@8822OOqq3qqq33,eeeeee", +"eeeeeX-======66+++>>>>>www@882OOOqqqqOq33,,eeeee", +"eeee%-=======6++++ <511ww@8882OOOqqq22qq,,,,eeee", +"eeeeX-=======6+++++ 5>>w@@@82222OOqO82qO33,,eeee", +"eeeXXX--=-===++++ <w@@@@8882222OOOOqOqq3,3eee", +"eeeXXX-=--==-++ <<>w@@@@8@82222OqO88OO2q,,eee", +"ee5X--=------+5511>>>1@@w@8@88222OOq2@8322q3,,ee", +"eeXXX------666 >>><<wwww@882#22OOO2@23q8Oq,,,ee", +"e%XXXXX---6* *&><>>>@@@.4.2##.2OOq2@qq82qq3,,3e", +"e:XXXXX-XX;* 5+++>%%%.444#.@8##2OOO2%288qqqO3,,e", +"eXXXXXXXXX5555+5%%%1..%%.%@@82$22OO2.2@OqOqq3,,e", +"eX=XXXXXXX++6*5%:%:%4%w@1@@@.2#.2O2.$q28OOqq3,,e", +"e--XXXXXX ;7*& ::::4:...@@@@8822O22q33qqqqq33,e", +"%XXXXXX-+ *;**;&%:::44444@@@@@822OqOO3q33qq33,,,", +":XXXXX-9;;;;;;;* 1% 1%:4%@@888.82OOOOqqq3qq33,,,", +"5XXXXX99;**;;**&& +*&&>1>@@@@8#.2O2$$qqqqqq3,,,,", +"5XXXX-99;;9;* &&> &&&&>..@@@82$##$$33qqqqq3,,,,", +"1XXXX6ooo99;* &* &&&&&>.4.8@888.2$$$33Oqqq3,,,,", +"%XXXX6ooo9;*&&&&&&>&& & @4%8888@88O$$$3qOq33,,,,", +"eX5+5677;;;**&&&&1>&&&& >.4.888@88O$$$qqOq333,,e", +"eX5++6*07***& &** &&& @#.28@@2$$$$$qqqq33,,,e", +"e%55X5*00<&&&**&*&&&&&& >>.4%8@2$$$$$qOqqqq3,,,e", +"e%::::5& > &*&&&**&&& >www#%8#$$$$$$OOqqq3,,,,e", +"e1:::::1>>>>>> &0000<<www<w2.#.2$$$$OOOq33,,3,,e", +"ee:::::%1111>%1<0<<0<w@w<<@88282$$$$$qq333,33,ee", +"ee%::::::%11>11><<<<wwww<w@2228#$##OOqq33333,,ee", +"eee::::::4%%11%%1>11>%@w@..O228##22OOq333,,3,,ee", +"eee.44::444%%%%%%1%1>@@@8..22222222OO$33,,,,,eee", +"eeee4444444444%11%1>www@%8282..8882$$$3,,,,,eeee", +"eeee$4444.44444%1@wwwww@%828..2222O$$333,,,,eeee", +"eeeee#4444%%444%%@@@w@8@882..####$$$3333,,,eeeee", +"eeeeee.4444%%444....8@@8@28###$$$$$$333,,,eeeeee", +"eeeeeee##444.%44%......8888##$$$$$$$333,,eeeeeee", +"eeeeeeee###44..%%.......8@82#$#O$$$q33,,eeeeeeee", +"eeeeeeeee####44.........22.2##O$$$$33,,eeeeeeeee", +"eeeeeeeeeeO.###4..8@8..OO##222q$$$q33,eeeeeeeeee", +"eeeeeeeeeeee.#####8@8..O#####OOOqq33,eeeeeeeeeee", +"eeeeeeeeeeeee2####2@@82$$$$$$$$qq3,eeeeeeeeeeeee", +"eeeeeeeeeeeeeeeeO##22222#$$$$qq33eeeeeeeeeeeeeee", +"eeeeeeeeeeeeeeeeeeeqqOO882q33eeeeeeeeeeeeeeeeeee" +}; + + + +/* XPM */ +const char *texticon[] = { +/* columns rows colors chars-per-pixel */ +"48 48 128 2", +" c #c1ad96", +". c #b3a28e", +"X c #cdc4ba", +"o c #c6b9ac", +"O c #aaaaaa", +"+ c #645a4f", +"@ c #dddddd", +"# c #151613", +"$ c #696054", +"% c #d3d2d3", +"& c #4b4c4b", +"* c #747474", +"= c #f6f6f6", +"- c #faf9f9", +"; c #49433a", +": c #9a9a9a", +"> c #948473", +", c #c9b59c", +"< c Gray64", +"1 c #6e6e6d", +"2 c Gray70", +"3 c #bcbcbc", +"4 c #434342", +"5 c #cccccb", +"6 c #959595", +"7 c #597046", +"8 c Gray52", +"9 c #38322b", +"0 c Gray99", +"q c #5c5248", +"w c #c6b299", +"e c Gray95", +"r c #e4e4e3", +"t c #a89884", +"y c #7d7e7d", +"u c #555555", +"i c #9a8b79", +"p c #a39481", +"a c #eeeeee", +"s c Gray77", +"d c #3d3e3d", +"f c #7d7162", +"g c #bfac95", +"h c #74695b", +"j c #8b7d6c", +"k c #c1af99", +"l c #ac9c88", +"z c #544c42", +"x c #7a6e60", +"c c #a3b3a2", +"v c #d2cac1", +"b c #087106", +"n c #c3b098", +"m c #807464", +"M c #8b8b8b", +"N c #c4b29c", +"B c #b6a692", +"V c #bda991", +"C c #232422", +"Z c #323231", +"A c #c6b49e", +"S c #c1c1c0", +"D c #bead99", +"F c #94897c", +"G c #bdab94", +"H c #443e36", +"J c #807a72", +"K c #2d2924", +"L c #322d27", +"P c #093809", +"I c #2c2c2a", +"U c #e9e9e9", +"Y c #786c5e", +"T c #3c3935", +"R c #626261", +"E c #877a6a", +"W c #25201d", +"Q c #6f6457", +"! c #a1927f", +"~ c #c2b19c", +"^ c #c3ae96", +"/ c #726658", +"( c #2b2621", +") c #d7d5d3", +"_ c #968776", +"` c #9e9488", +"' c #40403f", +"] c #9e8f7d", +"[ c #c6b097", +"{ c #005000", +"} c #c1ac93", +"| c #dad8d6", +" . c #988a78", +".. c #beb7b1", +"X. c #bfa991", +"o. c #bbab96", +"O. c #272826", +"+. c #8f8171", +"@. c #8b7f70", +"#. c #1b1c1a", +"$. c #3b362f", +"%. c #1f211f", +"&. c #baa892", +"*. c #cebba3", +"=. c #6c6862", +"-. c #847767", +";. c #dedcd9", +":. c #363933", +">. c #ececeb", +",. c #e6e6e5", +"<. c #2c7f24", +"1. c #a0988f", +"2. c #aa9284", +"3. c #a9a197", +"4. c #908677", +"5. c #b09f8b", +"6. c #fbfbfb", +"7. c #b9a58e", +"8. c #dae1da", +"9. c #c0b2a2", +"0. c #484847", +"q. c #c7c6c6", +"w. c #b7afa5", +"e. c #737875", +"r. c #777777", +"t. c #7f7e73", +"y. c Gray0", +"u. c None", +/* pixels */ +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +": :.& 0.0.0.0.0.& & & 0.0.0.0.0.0.0.& & & & & & & & & & & & & 0.' a u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"1 6 = = = 0 u.u.u.u.u.u.u.u.- = = = - u.u.u.u.u.u.u.u.u.6.- - >.O.% u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"R O u.u.u.5 O : 6 6 6 6 6 : a u.u.u.e : 6 6 6 6 6 : O 5 u.u.u.- :.5 u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u 2 u.@ & u 6 < O O O O O & < u.u.u.q.O.< O O O O < 6 =.0.s u.= d s u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"& s r Z M 0 u.u.u.u.u.u.u.8 < a ,.= s & u.u.u.u.u.u.u.u.2 0.s u.d 3 u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"4 % =.8 u.u.u.u.u.u.u.a 5 1 =.@.> ` 4.J ;.- u.u.u.u.u.u.u.5 :.@ 0.2 u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"d 6 0.- u.u.u.u.u.6.q.+ z z z / .! ! _ E F ..;.- u.u.u.u.u.y 1 u 2 u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"Z ' M u.u.u.u.8.c t.q H 9 L W 9 Y _ t l i E -.E ` ) = u.u.u.,.0.4 O u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"#.d 8 2 3 | 2 :.$.H H K # %.#.C $.Q > t t ] E -.j i B w.) 6.u.& C O u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"I Z y I %.I #.# W ( W L =.1 : U 4 L Q +.i _ > i p 5.V 7.l v 0 8 %.2 u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"e e u.@ u #.#.P b 7 q q 1.y < u.,.I L $ m j l n g n n } v e - 0 u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.= q.y { b <.> h R u : - u.r 0.9 $ f l N w n k [ ^ v - u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.- 4 { b 7 2.Q I d =.O a 5 W q Y ! k w n g g n w X.o = u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.% # b 7 > t H I C O.' R O.z h p ~ A k g g w [ 7.X u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.r.L Q f l _ y y Z O.C O.Z ; x . *.*.n g n w 7.e u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.U L q Y .. s u.@ O 1 Z O.%.O.' $ 4.B , w n n w [ X.X u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.8 9 / _ ..u.u.u.% I K 9 C #.#.%.:.$ .7.w , , [ 7.r u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.>.T q +.D , v = u.% $.#.H + q H C # #.C :.+ @.7., w 9.= u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.2 L Q ] D n 9.r q.( y.L $ m . .$ $.#.# #.C Z $ i 5.X u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.0 y L + j l g &.F z 9 T + h E t N k ] Q T #.# #.O.T q 3 a u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.0 : L q f p g &.i Q q + $ x > 5.N *.*.n _ z I #.# #.d y e u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.r.L z h @.B . f $ $ $ Q -.! B N A A , w . +.z C & e.e u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.8 u T z $ E ] E Y Q Q / f > t o.N A N n n , , l 4.3.0 u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.r.O % K ; + x -.m f Y Y m j .5.D A A N g ^ w , V ;.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.r.: u.3 ( ; + / x f m f f E +.! . k A A n g n } 9.- u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.r.: u.u.3 H $.z $ h Y x x m E > p B ~ A A n g ^ X.| u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.r.: u.u.u.3 O.K H q Q h h Y f E _ t B ~ A N k g g ^ ~ = u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.r.: u.u.u.5 4 : & K ; + Q / h Y E i l o.N A N k g g n ^ v u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.r.: u.u.u.S 0.u.= O K K z + $ Q h -.i l o.N A N G [ >.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.r.: u.u.u.S 4 6.u.u.@ 4 #.H q + $ Q m i l o.N N n g G k ^ o 0 u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.r.: u.u.u.S 4 - u.u.u.e 8 # K ; z q + m _ 5.D N N k G G n } X u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.r.: u.u.u.S 4 - u.u.u.u.0 2 T # 9 ; z + f _ l D N ~ g G g ^ V % u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.r.: u.u.u.S 4 - u.u.u.u.u.u.e M # #.$.; q Y +.l k ~ g g g V a u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.* : u.u.u.S ' - u.u.u.u.u.u.u.u.% R # ( $.q Y _ B N A , , k } X 0 u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.R O u.u.u.5 Z = u.u.u.u.u.u.u.u.u.0 s I # 9 q f i t ! ] ! B G , [ | u.", +"u.u.u.u.u.u.u.u.u.u.u.u.0 d s u.u.u.r O.a u.u.u.u.u.u.u.u.u.u.u.U 1 # 9 L #.# y.y.y.# ( ; m D = ", +"u.u.u.u.u.u.u.u.u.u.u.u.3 C e u.u.u.0 & 2 u.u.u.u.u.u.u.u.u.u.u.u.e O.y.y.y.y.y.y.y.y.y.y.y.( S ", +"u.u.u.u.u.u.u.0 ) q.3 8 ' 2 u.u.u.u.u.| u 8 3 q.) u.u.u.u.u.u.u.u.u.;.#.y.y.y.y.y.y.y.y.y.y.y.T ", +"u.u.u.u.u.u.u.;.# T ' u 2 ,.@ @ @ @ @ r s R 4 T # S u.u.u.u.u.u.u.u.u.) Z y.y.y.y.y.y.y.y.y.Z q.", +"u.u.u.u.u.u.u.U 1 1 * y * 1 1 1 1 1 1 1 * y * 1 R % u.u.u.u.u.u.u.u.u.u.e O 1 Z # # # d * S = u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u." +}; + +/* XPM */ +const char *texticon_sel[] = { +/* columns rows colors chars-per-pixel */ +"48 48 128 2", +" c #5a534a", +". c Gray35", +"X c #6a6153", +"o c Gray77", +"O c #49443a", +"+ c #acacac", +"@ c #9c8d7b", +"# c Gray71", +"$ c #645b4f", +"% c #938573", +"& c #b3a28d", +"* c Gray42", +"= c #cfbaa2", +"- c #897d6c", +"; c #979797", +": c #a59582", +"> c #554e44", +", c #aa9a86", +"< c #cacaca", +"1 c Gray70", +"2 c Gray72", +"3 c #36312b", +"4 c #e9e9e9", +"5 c #7d7162", +"6 c #bfac95", +"7 c #bebebe", +"8 c #c9b69e", +"9 c #727272", +"0 c #817464", +"q c Gray55", +"w c #0b4d09", +"e c #b5a490", +"r c #057905", +"t c #2d2e2d", +"y c #75695b", +"u c #1a1c1b", +"i c Gray23", +"p c #a4a4a4", +"a c Gray26", +"s c gainsboro", +"d c #c5b39d", +"f c #0b0b0a", +"g c #141413", +"h c Gray47", +"j c Gray38", +"k c #222422", +"l c Gray29", +"z c #a0917e", +"x c #2e2a25", +"c c #c2af98", +"v c #433e37", +"b c #bca991", +"n c #ad9d88", +"m c #3d3a34", +"M c #c1af99", +"N c #312d27", +"B c #716c64", +"V c #092708", +"C c #25221e", +"Z c #71675a", +"A c #bcaa94", +"S c #2e312a", +"D c #d5d5d5", +"F c #333332", +"G c #c4b098", +"H c #c6b49e", +"J c #908272", +"K c Gray1", +"L c #c2ae97", +"P c #c6b098", +"I c Gray50", +"U c #786d5e", +"Y c #bead98", +"T c #baa995", +"R c #86796a", +"E c #c0ac95", +"W c #c8b299", +"Q c #c0ae96", +"! c #c5b29b", +"~ c #c0ad96", +"^ c #c6b39b", +"/ c #9e8f7d", +"( c #9a8b78", +") c #c5af97", +"_ c Gray51", +"` c #cdb69d", +"' c #50483e", +"] c #c2b19c", +"[ c #201e1b", +"{ c #cab49b", +"} c #2c2622", +"| c #c6b199", +" . c #c4b19a", +".. c #171918", +"X. c #262725", +"o. c #c5b098", +"O. c #1d1a16", +"+. c #0b120c", +"@. c #12100f", +"#. c #8e806f", +"$. c #171615", +"%. c #202220", +"&. c #282a28", +"*. c #0e0e0e", +"=. c #837767", +"-. c #080706", +";. c #080908", +":. c #978676", +">. c #988977", +",. c #a0a0a0", +"<. c #060606", +"1. c #957e73", +"2. c #4b813b", +"3. c #b8a793", +"4. c #514a42", +"5. c #2f4a24", +"6. c #bfb2a3", +"7. c #6e6456", +"8. c #a89885", +"9. c #7e7b79", +"0. c #676867", +"q. c #bca792", +"w. c #817f65", +"e. c #373835", +"r. c #3d362f", +"t. c #8c7e6e", +"y. c #b0a08b", +"u. c None", +/* pixels */ +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"0.< 1 2 2 2 2 2 # 1 1 # 2 2 2 2 2 # # # # # # # # # 1 1 1 1 1 < 9 u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"; 0.f f ;.<.u.u.u.u.u.u.u.u.-.;.;.;.K u.u.u.u.u.u.u.u.K <.<.<.. p u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"; . u.u.u...l 0.* * * * * u.u.u.u.g j * * * * * j i f u.u.u.l p u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"p l u.[ ; + q I h h h h h D t u.u.u.j 7 h h h h h I q ,.I ;.u.a + u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"1 i *.o q f u.u.u.u.u.u.u.+ &.K <.u. * u.u.u.u.u.u.u.g ; ; K e.# K u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"2 F ; _ u.u.u.u.u.u.u.K g 9.4. Z > Z > K u.u.u.u.u.u.u.u.q h &.7 <.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"o 9 < f u.u.u.u.u.u.g v > O 0 z : ( 0 X v u <.u.u.u.u.u.*.o j 7 ;.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"< # 9 u.u.u.u.<.+.x ' r.3 x ' R / , : % - t.7.x <.u.u.u.u.q + 2 f u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"s 2 t u.K u.f S O 4.' N g @.<.O. =.z n 8.J R - % 5 m $.K u.l o < *.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"4 2 %.%.X.&.[ C } } } C [ h &.@.C > =.@ / >.#.J / & 6 , y f K s 4 *.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"l a K f k k [ V w O r.O.u.+ k u.g C > 5 - J , b A A c | o.#.@.X.a K u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.<.g u w r 2.1.O X.,.X.u.K ..C 4.Z t.3.^ W Q ~ c G ` J ;.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.K V r r w.:.v F &.[ f u.@.r.$ 5 , ! .c 6 6 ~ | { :.@.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.*.w r 7.z - %.t S F k u 3 0 , ! .L 6 6 6 G | P % f u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.<.+.5.Z R n B e.S &.&.&.S O Z z 8 8 G ~ 6 ~ L | ) ) v u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.g 3 7.5 : 6.[ g k S &.X.X.S > J 3.8 8 c Q ~ G | o.( <.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.K C y / T g u.u.;.e.i &.%.u k F - e | { | | o.P 4.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.f r.7.z 8 U f u.u.a [ O m X.....%.e.$ - & { ` W b u u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.K [ > #.A ` #.u u.F m @.' Z U $ m %...u k F X @ b ` J K u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.;.x $ J y.8 y. F [ -.v X 0 z e : Z 3 u ..u X.m $ ( N u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.<.x > 5 z Y 6 % 7.' ' $ y - , ] = Y J S ....u &.e.t g u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.-.C 4.y :.3.M ( 7. $ X 5 >.& ] 8 = 8 e 5 O %.g &.0.F u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.. 3 ' 7.=.y.: 5 X X X Z - : T d H ^ ! { G : $ O * &.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.+ t ..' $ 0 J R U Z Z U 0 % n Y H H .Q Q ^ ` b & v u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.K 1 u u.C ' $ U 0 5 5 U 5 =.t.@ y.Y H H .Q 6 L | | / f u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.K 1 t u.<.} O 7.U 5 5 5 0 - % z e ] H d .~ 6 L c | > u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.K 1 i u.u.K [ 3 > X y U U U 0 R % 8.3.] H d c 6 6 L P y.f u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.K 1 i u.u.u.u a } O 7.Z y U 5 - ( n T d H ! M 6 E c { u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.K 1 i u.u.u.. . u.$.N ' $ 7.7.Z U t./ y.Y d H ! ~ 6 ~ | c u u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.K 1 i u.u.u.0.9 u.u.f C r.> $ X 7.U t.z & Y H d G 6 6 c { R u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.K 1 i u.u.u.0.I u.u.u.<.$.x O $ $ Z - z y.M d ! M 6 ~ | W x u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.K 1 i u.u.u.0.I u.u.u.u.K f [ r.O > X R / e ] d ] ~ A ~ | n $.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.K 1 i u.u.u.0.I u.u.u.u.u.u.<.$.C r.O > X =./ e ] ! L A A ~ W : -.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.K 1 i u.u.u.0.I u.u.u.u.u.u.u.K @.O.x m O $ 0 ( T ] M ~ 6 6 E { > u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.K # i u.u.u.0._ u.u.u.u.u.u.u.u.u.;.g [ 3 v $ =.8.Y d H 8 ^ E ) & @.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.;.< t u.u.u.j q u.u.u.u.u.u.u.u.u.u.<.@.$.} v X % , 8.: : n A { = - K u.", +"u.u.u.u.u.u.u.u.u.u.u.u.$.s ..u.u.u.l p u.u.u.u.u.u.u.u.u.u.u.u.<.$.x v 3 C f -.<.;.C ' 5 q.N u.", +"u.u.u.u.u.u.u.u.u.u.u.u.. o K u.u.u.u D $.u.u.u.u.u.u.u.u.u.u.u.u.<.$.;.u.u.u.u.u.u.u.u.u.O.4.K ", +"u.u.u.u.u.u.u.u.*.g %.j o l u.u.u.u.u.9 + a ..g <.u.u.u.u.u.u.u.u.u.;.u.u.u.u.u.u.u.u.u.u.u.u.f ", +"u.u.u.u.u.u.u.F D 7 7 + a K f f f f f K . + 7 o 1 <.u.u.u.u.u.u.u.u.K f K u.u.u.u.u.u.u.u.K ;.<.", +"u.u.u.u.u.u.u.i s o 7 1 + 2 2 2 2 2 2 2 + # 7 < < ;.u.u.u.u.u.u.u.u.u.u.f *.-.K u.u.K -.*.f u.u.", +"u.u.u.u.u.u.u.K *.g g g $.$.$.$.$.$.$.$.$.g g g f u.u.u.u.u.u.u.u.u.u.u.u.u.<.-.<.<.-.K u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u." +}; +/* XPM */ +const char *twodicon[] = { +/* columns rows colors chars-per-pixel */ +"48 48 128 2", +" c #959292", +". c #6d6a6a", +"X c #797575", +"o c #eae9e8", +"O c #a4a1a1", +"+ c #c1bfbf", +"@ c #6a6767", +"# c #bcbaba", +"$ c #070808", +"% c #8c8989", +"& c #555352", +"* c #acaaa9", +"= c #585555", +"- c #9e9b9b", +"; c #b2afaf", +": c #383736", +"> c #5c5959", +", c #656161", +"< c #a9a6a6", +"1 c #615e5d", +"2 c #222121", +"3 c #817e7e", +"4 c #121211", +"5 c #2a2929", +"6 c #e2e0e0", +"7 c #4c4a4a", +"8 c #e0dede", +"9 c #b8b5b5", +"0 c #262525", +"q c #494646", +"w c #878383", +"e c #1d1d1d", +"r c #3c3b3a", +"t c #918d8e", +"y c #c6c4c4", +"u c #191918", +"i c #aeacac", +"p c #7c7979", +"a c #898686", +"s c #444242", +"d c #2d2c2c", +"f c #3f3d3c", +"g c #747171", +"h c #302e2e", +"j c #151515", +"k c #323130", +"l c #514e4e", +"z c #363434", +"x c #4e4c4b", +"c c #3f3e3d", +"v c #3a3838", +"b c #343232", +"n c #434140", +"m c #2c2b2b", +"M c #e5e4e4", +"N c #999696", +"B c #848181", +"V c #1c1b1b", +"C c #c8c6c6", +"Z c #e7e6e6", +"A c #f4f3f3", +"S c #474444", +"D c #cbc9c9", +"F c #fbfbfb", +"G c #fafaf9", +"H c #f0eeee", +"J c #5f5c5b", +"K c #dbd9d9", +"L c #878585", +"P c #736f6f", +"I c #d7d5d5", +"U c #42403f", +"Y c #e5e3e3", +"T c #7e7b7b", +"R c #706d6d", +"E c #625f5e", +"W c Gray95", +"Q c #575454", +"! c #d0cdcd", +"~ c #b7b4b4", +"^ c #dcdada", +"/ c #535150", +"( c #d2d0cf", +") c #7b7878", +"_ c #cccaca", +"` c #353433", +"' c #272626", +"] c #f2f1f0", +"[ c #757272", +"{ c #676463", +"} c #b5b3b3", +"| c #cecccb", +" . c #dedcdb", +".. c #242423", +"X. c #d5d3d3", +"o. c #31302f", +"O. c #cac8c7", +"+. c #52504f", +"@. c #777373", +"#. c #5f5c5c", +"$. c #aba8a8", +"%. c #d8d6d6", +"&. c #b3b0b0", +"*. c #7f7c7c", +"=. c #4b4848", +"-. c #9b9797", +";. c #4a4847", +":. c #464443", +">. c #d3d1d1", +",. c #dad8d7", +"<. c #636060", +"1. c #939090", +"2. c #999695", +"3. c #eeeded", +"4. c #5a5756", +"5. c #ecebeb", +"6. c #838080", +"7. c #6f6c6c", +"8. c #989494", +"9. c #8b8888", +"0. c #bab8b7", +"q. c #a19e9e", +"w. c #5b5958", +"e. c #f7f6f6", +"r. c #8e8b8b", +"t. c #1f1f1e", +"y. c #716e6e", +"u. c None", +/* pixels */ +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.9 p = s v 7 J L y u.u.u.u.u.u.u.( > q & 1 . g g y.{ 1 > x q q & { t C u.u.u.u.u.u.u.", +"u.u.u.u.O k 4 : @ 3 9.X <.m 4 v C u.u.u.u.u.& : p . E & q q =.> { R p 3 *.. Q ..4 h O u.u.u.u.u.", +"u.u.u.P j / C W _ < O } 6 u.&.;.u 3 u.u.u.u.S & D | ! G u.u.u.u.; 8.a O D u.u.i > t.x 8 u.u.u.", +"u.u.r.$ O u.a m 4 u e j 4 & O.u.P $ i u.u.u.O e 4 4 4 5 ! u.] x 4 ' 5 ..V 4 e , X.u.; ..r A u.u.", +"u.~ $ u.: ..T y Y M K $.S $ u.P o.F u.u.u.Y _ _ C S & u.; $ # H A 5.M C U 4 = u.Z d 7 u.u.", +"u.+.h u.7 ` K u.u.u.u.u.u.u.X 2 ( H ..w u.u.u.u.u.u.u.B : u.N u 5.u.u.u.u.u.u.u. ' J u.+ $ L u.", +"H 5 1.u.$ s o u.u.u.u.u.u.u.u.q E u.Q ` u.u.u.u.u.u.u.B : u.N V M u.u.u.u.u.u.u.u.I u y.u.R ..W ", +"6 ' K F <.0 +.G u.u.u.u.u.u.u.w o.u.@.5 e.u.u.u.u.u.u.B : u.N V M u.u.u.u.u.u.u.u.u.[ j Y W 5 < ", +"6 ' I u.u.D ' Y u.u.u.u.u.u.u. 0 u.p 5 A u.u.u.u.u.u.B : u.N V M u.u.u.u.u.u.u.u.u.^ u u./ <.", +"A m #.u.u.9 ' o u.u.u.u.u.u.u.{ s u.P m G u.u.u.u.u.u.B : u.N V M u.u.u.u.u.u.u.u.u.u.4.4.u.3 s ", +"u.L 4 4.{ 5 { u.u.u.u.u.u.u.D ..-.u.q U u.u.u.u.u.u.u.B : u.N V M u.u.u.u.u.u.u.u.u.u.L s u.i ` ", +"u.u.~ 4.+.% u.u.u.u.u.u.6 #.4 & u. .u < u.u.u.u.u.u.u.B : u.N V M u.u.u.u.u.u.u.u.u.u.* : F %.5 ", +"u.u.u.u.u.u.u.u.u.Z -.7 2 ` *.u.o s S u.u.u.u.u.u.u.u.B : u.N V M u.u.u.u.u.u.u.u.u.u.+ o.] M ' ", +"u.u.u.u.u.u.u.X.) ..j c 2.u.u.; 5 2 >.u.u.u.u.u.u.u.u.B : u.N V M u.u.u.u.u.u.u.u.u.u.C h H Z 5 ", +"u.u.u.u.u.%.S j h a .u.u.% ` 4 #.,.u.u.u.u.u.u.u.u.u.B : u.N V M u.u.u.u.u.u.u.u.u.u.y h H Z 5 ", +"u.u.u.u.X ..c u.u.< & 5 ' +.i u.u.u.u.u.u.u.u.u.u.u.B : u.N V M u.u.u.u.u.u.u.u.u.u.~ b A 6 ' ", +"u.u.u.E $ ) u.A a 5 4 : 3 3.u.u.u.u.u.u.u.u.u.u.u.u.u.B : u.N V M u.u.u.u.u.u.u.u.u.u.- r u._ 5 ", +"u.G 1 ..| K Q 2 r p C u.u.u.u.i :.: E X.u.u.u.u.u.u.u.B : u.N V M u.u.u.u.u.u.u.u.u.u.[ 7 u.- r ", +"u.% $ # 9 ' r O u.u.u.u.u.u.I t.c > ..5 Z u.u.u.u.u.u.B : u.N V M u.u.u.u.u.u.u.u.u.u.c . u.. x ", +"W ..@ ( 4 7 R 4.{ C u.u.u.u.B c u.u.Y t.X u.u.u.u.u.u.B : u.N V M u.u.u.u.u.u.u.u.u.} $ # u.U X ", +"q.d u.1 $ 2 z n ` 2 s O.u.u.r.o.+ O.*.S u.u.u.u.u.u.B : u.N V M u.u.u.u.u.u.u.u.u.;.d u.+ 2 D ", +"J 4.u.` h } u.u.u.+ : 2 $.u.o k 4 $ E ; r G u.u.u.u.u.w z u.2.e Z u.u.u.u.u.u.u.u.O 4 ; u.: f u.", +"r T F 7.N p . t Z u.u.. u J ^ u.>.q , i c G u.u.u.u.u.T r u.- j o u.u.u.u.u.u.o . u r.u.w 4 9 u.", +"z w u.r.4 5 h u 5 O u.u.i 2 t.X @ u + T q u.u.+ < D I f <.u.C 4 X C K 8 ( i p d u w u.# 4 t u.u.", +"n g u., $ B F ^ P 4 v M u.M L U q O H e T u.1.4 4 4 4 h ,.u.u.N t.4 4 4 4 4 k 6.] u.) $ . u.u.u.", +"@.r u.u.& z u.u.u.; f d 8.u.u.u.u.u.x e 8 u.:.@ A C # u.u.u.u.u.F | # 9 + M u.3. s 2 @.u.u.u.u.", +"I u > 0.n : u.u.u.u.u.+.$ 7 N + O =.V &.u.u.= : X [ @ J 7 q 7 w.<.. X ) X @ l e u U ! u.u.u.u.u.", +"u.* c o.U ~ u.u.u.u.u.u.+ > v h : = ! u.u.u.^ { / Q > <.R g R , J 4.& / & = @ - .u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u." +}; + +/* XPM */ +const char *twodicon_sel[] = { +/* columns rows colors chars-per-pixel */ +"48 48 128 2", +" c #868282", +". c #b8b6b6", +"X c #757272", +"o c #918d8e", +"O c #adaaaa", +"+ c #7d7a7a", +"@ c #a29f9f", +"# c #8a8787", +"$ c #cdcaca", +"% c #605d5d", +"& c #bebcbc", +"* c #6a6666", +"= c #a8a5a5", +"- c #dad8d8", +"; c #555252", +": c #989595", +"> c #3f3d3c", +", c #595656", +"< c #eae9e9", +"1 c #514e4d", +"2 c #d3d0d0", +"3 c #4d4a4a", +"4 c #5c5a59", +"5 c #222121", +"6 c #6e6b6b", +"7 c #e3e1e1", +"8 c #a4a1a1", +"9 c #969393", +"0 c #9d9999", +"q c #b1aeae", +"w c #0f0f0e", +"e c #2d2c2c", +"r c #151515", +"t c #181818", +"y c #b3b1b1", +"u c #9f9b9b", +"i c #111111", +"p c #939091", +"a c #484645", +"s c #b5b2b2", +"d c #1d1d1d", +"f c #040404", +"g c #272626", +"h c #535050", +"j c #636060", +"k c #787474", +"l c #c9c7c7", +"z c #343232", +"x c #575454", +"c c #393736", +"v c #2f2e2d", +"b c #434140", +"n c #323130", +"m c #2c2b2a", +"M c #2a2929", +"N c #3a3838", +"B c Gray3", +"V c #454242", +"C c #3f3e3d", +"Z c #3c3a39", +"A c #a3a0a0", +"S c #4e4c4b", +"D c #d0cdcd", +"F c #dddbdb", +"G c #42403f", +"H c #8e8b8b", +"J c #e0dedd", +"K c #201f1f", +"L c #736f6f", +"P c #5f5c5c", +"I c #7a7777", +"U c #c3c1c1", +"Y c #4b4948", +"T c #6c6969", +"R c #373535", +"E c #cecccc", +"W c #706d6c", +"Q c #bab8b8", +"! c #676463", +"~ c #dedddd", +"^ c #c7c5c5", +"/ c #afacac", +"( c #e8e6e6", +") c #1b1b1a", +"_ c #6b6868", +"` c #bdbbbb", +"' c #838080", +"] c #d6d4d4", +"[ c #0b0b0b", +"{ c #c2c0bf", +"} c #31302f", +"| c #4b4847", +" . c #a6a4a3", +".. c #7b7878", +"X. c #474544", +"o. c #797676", +"O. c #c0bebe", +"+. c #292827", +"@. c #fafaf9", +"#. c #5a5857", +"$. c #d5d3d3", +"%. c #e5e3e3", +"&. c #edebeb", +"*. c #20201f", +"=. c #8b8787", +"-. c #cac8c8", +";. c #b7b5b4", +":. c #c5c4c3", +">. c #c4c2c2", +",. c #8f8c8b", +"<. c #f0efef", +"1. c #e1e0df", +"2. c #7f7c7c", +"3. c #282727", +"4. c #716e6e", +"5. c #878585", +"6. c #5b5958", +"7. c #716e6d", +"8. c #efeded", +"9. c #4f4c4c", +"0. c #83807f", +"q. c #d1cfcf", +"w. c #807d7d", +"e. c #d8d5d5", +"r. c #e6e5e5", +"t. c #353333", +"y. c #464443", +"u. c None", +/* pixels */ +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.m h k o u W Y 5 u.u.u.u.u.u.u.) 4.=...6 j #.6.4 * 6 L ' =.# I ! V 5 u.u.u.u.u.u.u.", +"u.u.u.u.R = 7 A j 1 a x _ s 1.u 5 u.u.u.u.u.I A ; % T + =.=.5.4.! P ; 1 h j k U 7 / c u.u.u.u.u.", +"u.u.u.4 - + 5 f K t.R e i u.v # 2 1 u.u.u.u.H I K d d f u.u.u.u.v G | G c K u.u.n L $ ' r u.u.u.", +"u.u.X.( R u.| s J 2 E - J ..*.u.4 &.} u.u.u.R $ F F F . d u.f ' F & . U q.~ $ * t u.v O.u f u.u.", +"u.m <.G u.8 U h 5 i w r z H ( G u.4 O u.u.u.u.i K K 5 H I u.v &.+.B f [ w 5 G p %.k u.w y ' u.u.", +"u.2./ u. = r u.u.u.u.u.u.u.x ^ ) B U Y u.u.u.u.u.u.u.S A u.> 2 [ u.u.u.u.u.u.u.G & 7.u.g <.Y u.", +"B Q b u.< o [ u.u.u.u.u.u.u.u.# T u.o.= u.u.u.u.u.u.u.S 8 u.> D w u.u.u.u.u.u.u.u.t e.P u.P O.f ", +"i ` r u._ & 2.f u.u.u.u.u.u.u.3 O u., . f u.u.u.u.u.u.S A u.> D w u.u.u.u.u.u.u.u.u., - i f ;.t.", +"i & t u.u.K & i u.u.u.u.u.u.u.G & u.h . f u.u.u.u.u.u.S A u.> D w u.u.u.u.u.u.u.u.u.r ] G u.+ _ ", +"f s 6 u.u.m & [ u.u.u.u.u.u.u.! o u.4 s f u.u.u.u.u.u.S A u.> D w u.u.u.u.u.u.u.u.u.u.X X u.1 o ", +"u.Y J X * . ! u.u.u.u.u.u.u.K { > u.# 9 u.u.u.u.u.u.u.S A u.> D w u.u.u.u.u.u.u.u.u.u.Y o u.} = ", +"u.u.m X + a u.u.u.u.u.u.i 6 F I u.r 2 t.u.u.u.u.u.u.u.S A u.> D w u.u.u.u.u.u.u.u.u.u.n A u.t Q ", +"u.u.u.u.u.u.u.u.u.w > :.= 1 u.[ o H u.u.u.u.u.u.u.u.S A u.> D w u.u.u.u.u.u.u.u.u.u.g O f w ` ", +"u.u.u.u.u.u.u.t ; U - : C u.u.v . ^ ) u.u.u.u.u.u.u.u.S A u.> D w u.u.u.u.u.u.u.u.u.u.5 q B w Q ", +"u.u.u.u.u.t H - q | r u.u.X.= 7 6 t u.u.u.u.u.u.u.u.u.S A u.> D w u.u.u.u.u.u.u.u.u.u.5 q B w Q ", +"u.u.u.u.x { 9 G u.u.t...Q ` + n u.u.u.u.u.u.u.u.u.u.u.S A u.> D w u.u.u.u.u.u.u.u.u.u.m = f i ` ", +"u.u.u.T ( ; u.f | . ~ @ 1 B u.u.u.u.u.u.u.u.u.u.u.u.u.S A u.> D w u.u.u.u.u.u.u.u.u.u.Z 0 u.K . ", +"u.f 6 O.d r o.^ 0 ; 5 u.u.u.u.} ,.8 T ) u.u.u.u.u.u.u.S A u.> D w u.u.u.u.u.u.u.u.u.u., ' u.Z u ", +"u.a @.+.m & u c u.u.u.u.u.u.t -.9 L U Q w u.u.u.u.u.u.S A u.> D w u.u.u.u.u.u.u.u.u.u.: % u.% 0.", +"f { j ) J ' P X ! 5 u.u.u.u.S 9 u.u.i l x u.u.u.u.u.u.S A u.> D w u.u.u.u.u.u.u.u.u.e 8.3.u.p ; ", +"N y u.6 @.>. .p = ^ o *.u.u.y.O g G *.h H u.u.u.u.u.u.S A u.> D w u.u.u.u.u.u.u.u.u.# y u.g l K ", +"W X u.= q e u.u.u.g 8 ^ z u.[ O F &.T v 0 f u.u.u.u.u.3 8 u.C E w u.u.u.u.u.u.u.u.c 7 v u.@ : u.", +"0 h u.P > ; % V w u.u.% 2 W r u.) =.* } : f u.u.u.u.u.h 0 u.Z - [ u.u.u.u.u.u.[ % $.X.u.3 1.M u.", +" .Y u.X.%.;.q $.Q c u.u.} :.$ , j $.g h # u.u.g t.K t : * u.5 %.x 5 r r ) n h y ] Y u.+.~ V u.u.", +"p #.u.* @.S u.r 4 r.u w u.w Y p =.R B E h u.b J F F ~ / t u.u.> -.F F F ~ J O 9.f u.; < j u.u.u.", +", 0 u.u.I .u.u.u.v : y C u.u.u.u.u.' E i u.,.j f 5 3.u.u.u.u.u.u.d +.m g w u.B G o >., u.u.u.u.", +"t ] L M p @ u.u.u.u.u.+ ( > g c 5.D v u.u.k 8 , , j W =. L * % x ; ; j w.E ] p d u.u.u.u.u.", +"u.n : O p m u.u.u.u.u.u.g L u / @ k d u.u.u.r ! + o.L _ P #.P * W X + + + k j Z r u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", +"u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u." +}; + +/* XPM */ +const char * threedicon[] = { +/* columns rows colors chars-per-pixel */ +"48 48 16 1", +" c #a2a5a5", +". c #f3f2f2", +"X c #cccbc9", +"o c #5d5257", +"O c #904857", +"+ c #b3b2af", +"@ c #8e9393", +"# c #c3c4bf", +"$ c #b5838c", +"% c #dad7d7", +"& c #697377", +"* c #bcbcb8", +"= c #dac0c5", +"- c #7f8184", +"; c #e4e4e4", +": c None", +/* pixels */ +"::::::::::::::::::::::::::::::::::::::::::::::::", +"::::::::::::::::::::::::::::::::::::::::::::::::", +"::::::::::::::::::::::::::::::::::::::::::::::::", +"::::::::::::::::::::::::::::::::::::::::::::::::", +"::::::::::;+ @@+%:::::::::::::::::::::::::::::::", +"::::::::.#-&--&o&-X:::::::::::::::::::::::::::::", +":::::::;@ &&--o--&& .:::::::::::::::::::::::::::", +":::::::o@ --&&&--%::::::::::::::::::::::::::", +"::::::+o +++*+@&@ -.:::::::::::::::::::::::::", +"::::::@@ +++** @:::::::::::::::::::::::::", +"::::::+ +*++++*+ &#::::::::::::::::::::::::", +"::::::.# #..:;#+++++@--&.::.;:::::::::::::::::::", +"::::::::;::::::X++++@-&&%::%& .:::::::::::::::::", +"::::::::::::::::*+++ o X*::;&&&*.:::::::::::::::", +"::::::::::. @;::#+++++:;*::;&&&&-%::::::::::::::", +":::::.::::%+@&@%#**++.:X%::.-&&&&o-;::::::::::::", +"::X@-@@%:.**+ &@*****::+:::;*@&&-ooo .::::::::::", +":@&@@@- ;%+**++*****%;@;::.###+@-oooo-#.::::::::", +"#&++*+@-%;*+******#+$@;:::.X####+&ooo-@@%:::::::", +" @++++@@X:.#+**##***%:::::: +####*@oo@ @-+.:::::", +"* ++++@@%:::#**%:X&.::::::%&####*## @@@@@@@;::::", +"X+++++@@%:::.***%#&X::::::-@#********+ @@ -%:::", +"; +++*+@+:::.****+@@:::::;o #****++++++ + -.::", +":++++* +.:.****%#-.::::@@###*# @;*++++ +@&.:", +":;+++* @-@*****;.@;:::%-X###**-;:.#+++ @&-+:", +"::* ++*+ @-@*****;: %:::-*X#### ::::%++ @-@-&.", +"::: +++*++******.:*:::X %#####-.:::::#++++@-&OX", +":::.@-+*+*******;:.%:::@%X###X ::::::;++++ OOo+", +"::::.@& +*******.:.:::X+%#####-;::::::.*++++-&- ", +"::::::#&o- $$$%:::::@%####X :::::::.***++ +@", +":::::::.+OOOOOO$.::.% +%#####-.:::::::.*****+ @ ", +":::::::::.;====.:.@--&X####X *::::::::.*****+@ +", +":::::::::::::::::*++ @#####*@:::::::::;***** @@*", +"::::::::::::::::*&+#**#####*#:::::::::X###***++%", +"::::::::::::::::&o #****###%*;:::::::;#####*##*.", +"::::::::::::::::.* +******X+@- ;.::;#######* X:", +"::::::::::::::::::;+ +****# @@@-o--@*######*++.:", +"::::::::::::::::::::X ****#+@-oo&@#X#####*+ %::", +":::::::::::::::::::::.+@+***##*++*X######*@@ :::", +":::::::::::::::::::::::%@@+***###########$O&;:::", +"::::::::::::::::::::::::.+- +##*######X*$OO=::::", +"::::::::::::::::::::::::::;#-- *###X#*$OOO%:::::", +"::::::::::::::::::::::::::::; oo-$ $$OOO$.::::::", +"::::::::::::::::::::::::::::::.X $OO$$=;::::::::", +"::::::::::::::::::::::::::::::::::::::::::::::::", +"::::::::::::::::::::::::::::::::::::::::::::::::", +"::::::::::::::::::::::::::::::::::::::::::::::::", +"::::::::::::::::::::::::::::::::::::::::::::::::" +}; + +/* XPM */ +const char *threedicon_sel[] = { +/* columns rows colors chars-per-pixel */ +"48 48 64 1", +" c #9b495a", +". c Gray99", +"X c #728b91", +"o c #abaaa6", +"O c #dbabb3", +"+ c #4e4f4f", +"@ c #c1c2bd", +"# c #92a9b0", +"$ c #9b9996", +"% c #0d0c0c", +"& c #b9bab5", +"* c #bdbdb8", +"= c #2d2d2c", +"- c #ac7881", +"; c #b2b2ae", +": c #c4c5c0", +"> c #b09598", +", c #7d7679", +"< c #b5b4b0", +"1 c #b8a4a8", +"2 c #dbdbd8", +"3 c #848687", +"4 c #6a6968", +"5 c #82989d", +"6 c #637e84", +"7 c #6b323e", +"8 c #c9cac5", +"9 c #89a0a5", +"0 c #5c7276", +"q c #b9b6b3", +"w c #7a414d", +"e c #403a3c", +"r c #ffccdd", +"t c #69757a", +"y c #c5c8c2", +"u c #bfbfba", +"i c #b7b8b3", +"p c #a2a19e", +"a c #8f8d8a", +"s c #eae9e9", +"d c #a1a9ae", +"f c #7b5960", +"g c #c7c6c2", +"h c #706b6b", +"j c #979391", +"k c #cecdc9", +"l c #83807f", +"z c #afafaa", +"x c #261317", +"c c #727f83", +"v c #828e91", +"b c #7a6c70", +"n c #a3b4b5", +"m c #72716f", +"M c Gray10", +"N c #36191f", +"B c #b4aab6", +"V c #fd87a5", +"C c #5a5758", +"Z c #91b5bc", +"A c #484645", +"S c #918a8e", +"D c #616162", +"F c None", +/* pixels */ +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFM=+CA=MFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFM6X6XX60,+=FFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFF%vZ66X6Dcv6t+%FFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFF+9d$pd93vt6t5,MFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFF=mpoooz<&zvt5#dl%FFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFCpoooz;;<iio##d#4FFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFF4<ooo$pqi<i&<dZ#3=FFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFMmz,M%%ej*qqqn5XXDFFF%MFFFFFFFFFFFFFFFFFFF", +"FFFFFFFF=%FFFF%,&<<<9X,,MFF3cAMFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFF%;i<<pf12=Fe266te%FFFFFFFFFFFFFFF", +"FFFFFFFFFFM4AMFFj&<<zq.s=Fks660t4=FFFFFFFFFFFFFF", +"FFFFFFFFFFpu$he=p*&qq..2M%.sX00t,DCMFFFFFFFFFFFF", +"FF=e+,b=FM@*;pmju**&u..jFFs2&960,CADA%FFFFFFFFFF", +"FAlj$jadMm@ii;<*&*uu2s$%FF;k@g<v,CeeCce%FFFFFFFF", +"=lz<&oajAA&*i&&q&*@q>h%FFFMp:@::obee+X5mMFFFFFFF", +"Dpzz<za$eFM$u&&g@&<C=%FFFFFC*@@@:*S+CX99vA%FFFFF", +"azoz<;jpeFF%$u&2.kD%FFFFFFMly@@@uu:ov595954MFFFF", +"liz;;ij$AFFF=:*&2:,MFFFFFF+$yuuuuu***;9999zSMFFF", +"eiz;<uqpX%FFM*u*&;$+FFFFFMho:uuu*iu&<<zd9dB#c%FF", +"%oq;<&p#n0%F=@u**2:,%FFFFApg@uu@z+A;&;zzod#Z9CFF", +"FA*;<qop#9cel@**&2.aMFFFMak:@@u@l%FM3izoodZXcv=F", +"FFl;<q&;p5,j@***&2.$MFFFCg8::@:;eFFFFD<ooo$c5XD%", +"FF%3zqqqq<<*&&*&*..$FFFMo2::::83%FFFFFl<zoo9c,f=", +"FFFM3j;&qq&ii&&&2..AFFFm28yg:8<eFFFFFF=&;zzpfwfe", +"FFFF%Alp<**&&uuOs.:FFFM@2:ygg8l%FFFFFFMii<<;,ha+", +"FFFFFF=Dh->11>-Vrg%FFFm2g:yykzeFFFFFFFMi*&iipp;m", +"FFFFFFF%=7w -f%FM=A<2@::yg,%FFFFFFFM&*&&&zpp4", +"FFFFFFFFFF%NNNx%FMl3S,8:@@:8z=FFFFFFFFe:u**&o$oC", +"FFFFFFFFFFFFFFFFF1O1pjg@@@:@mFFFFFFFFFD8@u*uoj$A", +"FFFFFFFFFFFFFFFF=,1guu@@@@:kAFFFFFFFFFzy@@uui<u=", +"FFFFFFFFFFFFFFFFDho@uuuu@uy2vMFFFFFFF+k::@@u@8;%", +"FFFFFFFFFFFFFFFF%Cpq*u*uuu8n5X+MFFF%C8y::@:ipzAF", +"FFFFFFFFFFFFFFFFFF=lo&uu**:ovv$3Ae+a88::@@@&<z%F", +"FFFFFFFFFFFFFFFFFFF%A$;*u**uq$,fwh$yy:::@@ioqAFF", +"FFFFFFFFFFFFFFFFFFFFFM4p;uu*u:*;zu8y:::@:*jj,FFF", +"FFFFFFFFFFFFFFFFFFFFFFF=mjquuuu::::::::y:-fbMFFF", +"FFFFFFFFFFFFFFFFFFFFFFFF%el;q@@u@@@::y8*- xFFFF", +"FFFFFFFFFFFFFFFFFFFFFFFFFFMCljo*:yy8yu> xFFFFF", +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFM=+f->>>- 7%FFFFFF", +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF%%N7ww77N%FFFFFFFF", +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" +}; + +/* XPM */ +const char *joyicon[] = { +/* columns rows colors chars-per-pixel */ +"48 48 64 1", +" c #e7e4e5", +". c #8a898f", +"X c #4d4c5c", +"o c #7b7a8a", +"O c #1c1b2b", +"+ c #680a0f", +"@ c #575564", +"# c #cfd8ef", +"$ c #282535", +"% c #6b6a7c", +"& c #383648", +"* c #8c0101", +"= c #dbdbde", +"- c #bdbcc2", +"; c #dca9a8", +": c #c4c8da", +"> c #2b1625", +", c #fefefe", +"< c #c6c7ca", +"1 c #f3f2f4", +"2 c #ececee", +"3 c #0c0916", +"4 c #151322", +"5 c #cc0505", +"6 c #801115", +"7 c #a4a4aa", +"8 c #f8f8f8", +"9 c #a50000", +"0 c #ea1515", +"q c #dee6f8", +"w c #171625", +"e c #ecf2ff", +"r c #ababb2", +"t c #932c2d", +"y c #727180", +"u c #f5e9e9", +"i c #a25757", +"p c #413f4f", +"a c #2e2b3c", +"s c #656372", +"d c #95959e", +"f c #5e5d6e", +"g c #1b1928", +"h c #f62020", +"j c #222030", +"k c #41111c", +"l c #333142", +"z c #161b2b", +"x c #12101e", +"c c #191727", +"v c #ac97a6", +"b c #fbfbfb", +"n c #f9fafe", +"m c #73515a", +"M c #eacac9", +"N c #b1b0bc", +"B c #bea6a8", +"V c #ac8a8a", +"C c #bcc0d4", +"Z c #d0d0d6", +"A c #1f1d2d", +"S c #ff4545", +"D c #b93939", +"F c None", +/* pixels */ +"FFFFFFFFFFFFF i6t;,FFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFF *9959;FFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFF,i95h555uFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFF1690Sh00;FFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFF8t950hh5MFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFB+9555DbFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFF,V+**tuFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFF, Bv=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFF8:qbFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFF,:q1FFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFF=#2FFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFF2:q,FFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFbCq8FFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFFZ#1FFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFF #2FFFFFFF81bFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFF8Cq,FFb -.paX<,FFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFF,:q=-.X>+***kg7,FFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFb <dqoxcz+999**>4d,FFFFFFFFFFFFFF", +"FFFFFFFFFFF,2<.X$4a#rcOzk*****>OcobFFFFFFFFFFFFF", +"FFFFFFF,2<d@$c4ccw4N#$4cc>+++kAAO4y8FFFFFFFFFFFF", +"FFF,2<dmkk>4www4443oe@3wwwzzwwgOOO4s8FFFFFFFFFFF", +"Fb7Xj>*999*kwcccccxped344cggccccOOgxs1FFFFFFFFFF", +",s3x4k99***+gcwwwwxgZZc3xwcgcggggOOg4X2FFFFFFFFF", +"734w4k*****+zc44xxx3dn&cAOwcccccggOOgxp FFFFFFFF", +"XA4wxxk+66kOOOAgwAg4lfc4gjAwcccccggOAO4a FFFFFFF", +"pAO4cxxx44wwgOAAA$j4c4334l&OccccwccgOAAcaZFFFFFF", +"7xjwcgcc4444wcOOAjAg$l&jcp@lOccwwwccgOAjg$=FFFFF", +"1jAA4OOOOgc444wgOAjApdNo&pfpAOOOgcwccOOAjA$<FFFF", +"Fr3jwcOOOOOgc44wgOAjpNq7@pljAjjjjjAOOOOAj$jj-,FF", +"Fb&cAwOAOOOOgcwwwc$lps%p$AOAAOOOOAAAAjjjj$$$$7,F", +"FF<3jgcAOOOOOggcccl&l&OcOgcwwwcgOAAAAAjj$$$$$aNF", +"FF,@4jwOAOggggggc$p$&&cw4wwcgOOOOOOAAAjjjAgwwlp=", +"FFF=3jOcAOgcccccc&aO&j4cggggggggggOAOOg4xxwA$lpy", +"FFF,oxjcOAOccccwj&Oa&Oggggcwccccggw4x33xgja&p@@X", +"FFFF2wAOcAOcwwwwaaA&$cccwwwwwww4x333xwA$lpXsyof@", +"FFFFFdxjgOAOwwwgljlacww44444xx33334A$lpXfyooyf$-", +"FFFFF1AOAgAOc4w>>O$>>444xx333334A$lpXfyooosXaxo,", +"FFFFFFr3jOOAO44>>>>>4xx333334AalpXf%ooo%@l44fZ,F", +"FFFFFF8&cjgAAc4444x33333xcja&pXf%oooy@pOxp7 ,FFF", +"FFFFFFF<3jOOAO4x333334O$&pXXf%oooyfpjxa.=bFFFFFF", +"FFFFFFF,@4jOAOx33xg$lpXX@f%yooyfX$x$.Z8FFFFFFFFF", +"FFFFFFFF=3AAO$&&apX@ffs%yyoysXawOs-1FFFFFFFFFFFF", +"FFFFFFFF,yxjj@-Ny%%%%yyy%sXlcxXN2FFFFFFFFFFFFFFF", +"FFFFFFFFF2xgA@:Co%%%%%fX&gxp7 ,FFFFFFFFFFFFFFFFF", +"FFFFFFFFFFd3Olfsf%sfX&j4l.ZbFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFF8jxjjapX&jxAy<8FFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFF=g3cAA4gs-2FFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFF2.l$@72,FFFFFFFFFFFFFFFFFFFFFFFFFFFF" +}; + +/* XPM */ +const char *joyicon_sel[] = { +/* columns rows colors chars-per-pixel */ +"48 48 64 1", +" c #373546", +". c #eaf2ff", +"X c #4a4758", +"o c #2e1725", +"O c #8c0102", +"+ c #afafc0", +"@ c #585567", +"# c #ce0606", +"$ c #f01919", +"% c #71070b", +"& c #d0d7ed", +"* c #aea2b4", +"= c #151322", +"- c #4e0c14", +"; c #c8c8d7", +": c #a60000", +"> c #222132", +", c #020103", +"< c #1a1828", +"1 c #7b7a8c", +"2 c #6b6a7c", +"3 c #181625", +"4 c #1f1d2d", +"5 c #2f090f", +"6 c #737284", +"7 c #3f3d4e", +"8 c #858b99", +"9 c #0a0812", +"0 c #626173", +"q c #12111e", +"w c #9595a5", +"e c #5f5e71", +"r c #312f40", +"t c #1c1826", +"y c #e1e9fd", +"u c #1b1a2a", +"i c #24212e", +"p c #f92f2f", +"a c #0f0d19", +"s c #b7bed0", +"d c #2b293b", +"f c #272434", +"g c #1e1c2b", +"h c #706f81", +"j c #6e6d7f", +"k c #151a2a", +"l c #2d2835", +"z c #1f2030", +"x c #5c5b6c", +"c c #111626", +"v c #69687a", +"b c #1a1c2c", +"n c #282638", +"m c #160000", +"M c #4f4d5f", +"N c #1c1b2b", +"B c #161824", +"V c #181727", +"C c #777688", +"Z c #7e7d8f", +"A c #62616b", +"S c #797889", +"D c #666578", +"F c None", +/* pixels */ +"FFFFFFFFFFFFFm-%%5,FFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFmO::##-FFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFF,-:#p###mFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFF,%:$p$$$5FFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFF,%:#$$p#mFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFmO:###O,FFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFF,m%OO%mFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFF,,5*AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFF,ss,FFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFF,0.aFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFi.7FFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFF9&8,FFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFF,8&,FFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFF7.iFFFFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFFqyxFFFFFFF,,,FFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFF,s+,FF,,9at4B,,FFFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFFFF,vyB,aBo%OO%-z9,FFFFFFFFFFFFFFF", +"FFFFFFFFFFFFFFF,,,XyS=>z%:::OOoz9,FFFFFFFFFFFFFF", +"FFFFFFFFFFF,,9aB4b &+<ub-OOOOOo4>a,FFFFFFFFFFFFF", +"FFFFFFF,,9a=g44guV=+&l=VVo-%%ob44>q,FFFFFFFFFFFF", +"FFF,,,95--okV33===aS.@a33ckkcc<Nggzq,FFFFFFFFFFF", +"F,9qkoO:::O-cV<<<<q7.89==V<<<VV<ugu4=,FFFFFFFFFF", +",q33c-::OOO%<V3333qu;;3aq3<<<<<<<ugu43,FFFFFFFFF", +"9u=3c5OOOOO-kV==qqa9w. <4N3<<VV<<uugu4u,FFFFFFFF", +"=>=3qq5%%%-Nbgg<3g<= x<=tig3<<VVV<uNgNg4,FFFFFFF", +"a>N=Vqqq=ccV<u444n>=V=99=r uVVVV3V<<N444i,FFFFFF", +",N>3Vu<V====3<ug4z4ufr i37@rb<V3333<<N44ii,FFFFF", +",a>4=NNNu<V===3<N4>47w+C Xx74ggN<V33<ug4iin,FFFF", +"F,<>3VggNNu<V==3<Nz>X+y*@7r>zz>>zz4NNuggiifl9,FF", +"F,azz3N4NNuuu<333<n 7Dv7f4N44NNNNgg44zziifflr9,F", +"FF,3><<4guuuu<<<VV 7r bVNuV333<<ugg444iifflnl aF", +"FF,94z3g4N<<<<<<Vf7f <3=33<<uuuNNggg4iii4t33 X,", +"FFF,=>N<4N<<VV<<< rN >=V<uuuuu<<<uuggut=qq3gfrMg", +"FFF,,N>Vg4uVVVV3> ud N<<<<V33VV<<<3=qaaqt>d 7@@i", +"FFFF,q>g<4g<3333rd47fV<V3333333=qa9aa34nr7M0hCe=", +"FFFFF,u><N4u333trzrrt33=====qaa99a=4nr7MehSShe ,", +"FFFFF,az4<4gV=3ttgloo===qaa999a=gnr7Meh1ZCDMrt,,", +"FFFFFF,V>Nu4N==ooooo=qaa999a=4d 7Mxj1Z12@ 4a,,,F", +"FFFFFF,94z<44V====qa9999q3id 7Mx2SZ1hx7fq9,,,FFF", +"FFFFFFF,=>gN4N=aa999aqgl 7XMx2CZZ6eXd=9,,,FFFFFF", +"FFFFFFF,9N>N4Na99qtfr7XM@xv6116eXr<9,,,FFFFFFFFF", +"FFFFFFFF,qz4gn7 r7M@xe0vhCCh0M 4a,,,FFFFFFFFFFFF", +"FFFFFFFF,,uzz@s+hvvv2j66j0M >q9,,FFFFFFFFFFFFFFF", +"FFFFFFFFF,a44@;;Z2jjjveM f=9,,,FFFFFFFFFFFFFFFFF", +"FFFFFFFFFF,=grx0ev0xM7n39,,,FFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFF,9<>>d7X7d<a9,,FFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFF,qV<4>Nq9,,FFFFFFFFFFFFFFFFFFFFFFFFFF", +"FFFFFFFFFFFF,9==9,,,FFFFFFFFFFFFFFFFFFFFFFFFFFFF" +}; diff --git a/examples/demo/main.cpp b/examples/demo/main.cpp new file mode 100644 index 0000000..8d604a9 --- /dev/null +++ b/examples/demo/main.cpp @@ -0,0 +1,377 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#include "frame.h" +#include "graph.h" +#include "display.h" +#include "icons.h" + +#include "textdrawing/textedit.h" +#include "textdrawing/helpwindow.h" +#include "dnd/dnd.h" +#include "i18n/i18n.h" + +#include <qmodules.h> + +#if defined(QT_MODULE_OPENGL) +#include "opengl/glworkspace.h" +#include "opengl/gllandscapeviewer.h" +#include "opengl/glinfotext.h" +#endif + +#if defined(QT_MODULE_CANVAS) +#include "qasteroids/toplevel.h" +#endif + +#if defined(QT_MODULE_TABLE) +#include "widgets/widgetsbase.h" +#else +#include "widgets/widgetsbase_pro.h" +#endif + +#include <stdlib.h> + +#include <qapplication.h> +#include <qimage.h> + +#include <qtabwidget.h> +#include <qfont.h> +#include <qworkspace.h> +#include <qwidgetstack.h> + +#if defined(QT_MODULE_SQL) +#include <qsqldatabase.h> +#include "sql/sqlex.h" +#endif + +#if defined(Q_OS_MACX) +#include <stdlib.h> +#include <qdir.h> +#endif + +#include "categoryinterface.h" + +static void qdemo_set_caption( CategoryInterface *c, int i ) +{ + QWidget *w = qApp->mainWidget(); + if ( !w ) + return; + QString title = Frame::tr( "Qt Demo Collection" ); + title += " - " + c->categoryName( i - c->categoryOffset() ); + w->setCaption( title ); +} + +class WidgetCategory : public CategoryInterface +{ +public: + WidgetCategory( QWidgetStack *s ) : CategoryInterface( s ), created( FALSE ) {} + + QString name() const { return "Widgets"; } + QIconSet icon() const { return QPixmap( widgeticon ); } + int numCategories() const { return 2; } + QString categoryName( int i ) const { + switch ( i ) { + case 0: + return Frame::tr( "Widgets" ); + break; + case 1: + return Frame::tr( "Drag and Drop" ); + break; + } + return QString::null; + } + QIconSet categoryIcon( int ) const { return QIconSet(); } + void setCurrentCategory( int i ) { + create(); + stack->raiseWidget( i ); + qdemo_set_caption( this, i ); + } + void create() { + if ( created ) + return; + created = TRUE; + stack->addWidget( new WidgetsBase( stack ), categoryOffset() + 0 ); + stack->addWidget( new DnDDemo( stack ), categoryOffset() + 1 ); + } + + int categoryOffset() const { return 0; } + +private: + bool created; + +}; + +#if defined(QT_MODULE_SQL) +class DatabaseCategory : public CategoryInterface +{ +public: + DatabaseCategory( QWidgetStack *s ) : CategoryInterface( s ), created( FALSE ) {} + + QString name() const { return "Database"; } + QIconSet icon() const { return QPixmap( dbicon ); } + int numCategories() const { return 1; } + QString categoryName( int i ) const { + switch ( i ) { + case 0: + return Frame::tr( "SQL Explorer" ); + break; + } + return QString::null; + } + QIconSet categoryIcon( int ) const { return QIconSet(); } + void setCurrentCategory( int i ) { + create(); + stack->raiseWidget( i ); + qdemo_set_caption( this, i ); + } + void create() { + if ( created ) + return; + created = TRUE; + stack->addWidget( new SqlEx( stack ), categoryOffset() + 0 ); + } + + int categoryOffset() const { return 10; } + +private: + bool created; + +}; +#endif + +#if defined(QT_MODULE_CANVAS) +class CanvasCategory : public CategoryInterface +{ +public: + CanvasCategory( QWidgetStack *s ) : CategoryInterface( s ), created( FALSE ) {} + + QString name() const { return "2D Graphics"; } + QIconSet icon() const { return QPixmap( twodicon ); } + int numCategories() const { return 2; } + QString categoryName( int i ) const { + switch ( i ) { + case 0: + return Frame::tr( "Graph Drawing" ); + break; + case 1: + return Frame::tr( "Display" ); + break; + } + return QString::null; + } + QIconSet categoryIcon( int ) const { return QIconSet(); } + void setCurrentCategory( int i ) { + create(); + stack->raiseWidget( i ); + qdemo_set_caption( this, i ); + } + void create() { + if ( created ) + return; + created = TRUE; + stack->addWidget( new GraphWidget( stack ), categoryOffset() + 0 ); + stack->addWidget( new DisplayWidget( stack ), categoryOffset() + 1 ); + } + + int categoryOffset() const { return 100; } + +private: + bool created; + +}; +#endif + +#if defined(QT_MODULE_OPENGL) +class OpenGLCategory : public CategoryInterface +{ +public: + OpenGLCategory( QWidgetStack *s ) : CategoryInterface( s ), created( FALSE ) {} + + QString name() const { return "3D Graphics"; } + QIconSet icon() const { return QPixmap( threedicon ); } + int numCategories() const { return 3; } + QString categoryName( int i ) const { + switch ( i ) { + case 0: + return Frame::tr( "3D Demo" ); + break; + case 1: + return Frame::tr( "Fractal landscape" ); + break; + case 2: + return Frame::tr( "OpenGL info" ); + break; + } + return QString::null; + } + QIconSet categoryIcon( int ) const { return QIconSet(); } + void setCurrentCategory( int i ) { + create(); + stack->raiseWidget( i ); + qdemo_set_caption( this, i ); + } + void create() { + if ( created ) + return; + created = TRUE; + stack->addWidget( new GLWorkspace( stack ), categoryOffset() + 0 ); + stack->addWidget( new GLLandscapeViewer( stack ), categoryOffset() + 1 ); + stack->addWidget( new GLInfoText( stack ), categoryOffset() + 2 ); + } + int categoryOffset() const { return 1000; } + +private: + bool created; + +}; +#endif + +class TextCategory : public CategoryInterface +{ +public: + TextCategory( QWidgetStack *s ) : CategoryInterface( s ), created( FALSE ) {} + + QString name() const { return "Text Drawing/Editing"; } + QIconSet icon() const { return QPixmap( texticon ); } + int numCategories() const { return 2; } + QString categoryName( int i ) const { + switch ( i ) { + case 0: + return Frame::tr( "Richtext Editor" ); + break; + case 1: + return Frame::tr( "Help Browser" ); + break; + } + return QString::null; + } + QIconSet categoryIcon( int ) const { return QIconSet(); } + void setCurrentCategory( int i ) { + create(); + stack->raiseWidget( i ); + qdemo_set_caption( this, i ); + } + void create() { + if ( created ) + return; + created = TRUE; + TextEdit *te = new TextEdit( stack ); + te->load( "textdrawing/example.html" ); + stack->addWidget( te, categoryOffset() + 0 ); + QString home = QDir( "../../doc/html/index.html" ).absPath(); + HelpWindow *w = new HelpWindow( home, ".", stack, "helpviewer" ); + stack->addWidget( w, categoryOffset() + 1 ); + } + int categoryOffset() const { return 10000; } + +private: + bool created; + +}; + +class I18NCategory : public CategoryInterface +{ +public: + I18NCategory( QWidgetStack *s ) : CategoryInterface( s ), created( FALSE ) {} + + QString name() const { return "Internationalization"; } + QIconSet icon() const { return QPixmap( internicon ); } + int numCategories() const { return 1; } + QString categoryName( int i ) const { + switch ( i ) { + case 0: + return Frame::tr( "Internationalization" ); + break; + } + return QString::null; + } + QIconSet categoryIcon( int ) const { return QIconSet(); } + void setCurrentCategory( int i ) { + create(); + stack->raiseWidget( i ); + qdemo_set_caption( this, i ); + } + void create() { + if ( created ) + return; + created = TRUE; + stack->addWidget( new I18nDemo( stack ), categoryOffset() + 0 ); + } + int categoryOffset() const { return 100000; } + +private: + bool created; + +}; + +#if defined(QT_MODULE_CANVAS) +class GameCategory : public CategoryInterface +{ +public: + GameCategory( QWidgetStack *s ) : CategoryInterface( s ), created( FALSE ) {} + + QString name() const { return "Game"; } + QIconSet icon() const { return QPixmap( joyicon ); } + int numCategories() const { return 1; } + QString categoryName( int i ) const { + switch ( i ) { + case 0: + return Frame::tr( "Asteroids" ); + break; + } + return QString::null; + } + QIconSet categoryIcon( int ) const { return QIconSet(); } + void setCurrentCategory( int i ) { + create(); + stack->raiseWidget( i ); + qdemo_set_caption( this, i ); + } + void create() { + if ( created ) + return; + created = TRUE; + stack->addWidget( new KAstTopLevel( stack ), categoryOffset() + 0 ); + } + int categoryOffset() const { return 1000000; } + +private: + bool created; + +}; +#endif + +int main( int argc, char **argv ) +{ + QString category; + QApplication a( argc, argv ); + + Frame::updateTranslators(); + Frame frame; + a.setMainWidget( &frame ); + + QPtrList<CategoryInterface> categories; + categories.append( new WidgetCategory( frame.widgetStack() ) ); +#if defined(QT_MODULE_SQL) + categories.append( new DatabaseCategory( frame.widgetStack() ) ); +#endif + categories.append( new CanvasCategory( frame.widgetStack() ) ); +#if defined(QT_MODULE_OPENGL) + categories.append( new OpenGLCategory( frame.widgetStack() ) ); +#endif + categories.append( new TextCategory( frame.widgetStack() ) ); + categories.append( new I18NCategory( frame.widgetStack() ) ); + categories.append( new GameCategory( frame.widgetStack() ) ); + frame.setCategories( categories ); + + frame.resize( 1000, 700 ); + frame.show(); + + return a.exec(); +} diff --git a/examples/demo/opengl/fbm.c b/examples/demo/opengl/fbm.c new file mode 100644 index 0000000..47d5a61 --- /dev/null +++ b/examples/demo/opengl/fbm.c @@ -0,0 +1,207 @@ +/***************************************************************** + + Implementation of the fractional Brownian motion algorithm. These + functions were originally the work of F. Kenton Musgrave. + For documentation of the different functions please refer to the + book: + "Texturing and modeling: a procedural approach" + by David S. Ebert et. al. + +******************************************************************/ + +#if defined (_MSC_VER) +#include <qglobal.h> +#endif + +#include <time.h> +#include <stdlib.h> +#include "fbm.h" + +#if defined(Q_CC_MSVC) +#pragma warning(disable:4244) +#endif + +/* Definitions used by the noise2() functions */ + +#define B 0x100 +#define BM 0xff + +#define N 0x1000 +#define NP 12 /* 2^N */ +#define NM 0xfff + +static int p[B + B + 2]; +static float g3[B + B + 2][3]; +static float g2[B + B + 2][2]; +static float g1[B + B + 2]; +static int start = 1; + +static void init(void); + +#define s_curve(t) ( t * t * (3. - 2. * t) ) + +#define lerp(t, a, b) ( a + t * (b - a) ) + +#define setup(i,b0,b1,r0,r1)\ + t = vec[i] + N;\ + b0 = ((int)t) & BM;\ + b1 = (b0+1) & BM;\ + r0 = t - (int)t;\ + r1 = r0 - 1.; +#define at3(rx,ry,rz) ( rx * q[0] + ry * q[1] + rz * q[2] ) + +static float noise3(float vec[3]); + +/* Fractional Brownian Motion function */ + +double fBm( Vector point, double H, double lacunarity, double octaves, + int init ) +{ + + double value, frequency, remainder; + int i; + static double exponent_array[10]; + float vec[3]; + + /* precompute and store spectral weights */ + if ( init ) { + start = 1; + srand( time(0) ); + /* seize required memory for exponent_array */ + frequency = 1.0; + for (i=0; i<=octaves; i++) { + /* compute weight for each frequency */ + exponent_array[i] = pow( frequency, -H ); + frequency *= lacunarity; + } + } + + value = 0.0; /* initialize vars to proper values */ + frequency = 1.0; + vec[0]=point.x; + vec[1]=point.y; + vec[2]=point.z; + + + /* inner loop of spectral construction */ + for (i=0; i<octaves; i++) { + /* value += noise3( vec ) * exponent_array[i];*/ + value += noise3( vec ) * exponent_array[i]; + vec[0] *= lacunarity; + vec[1] *= lacunarity; + vec[2] *= lacunarity; + } /* for */ + + remainder = octaves - (int)octaves; + if ( remainder ) /* add in ``octaves'' remainder */ + /* ``i'' and spatial freq. are preset in loop above */ + value += remainder * noise3( vec ) * exponent_array[i]; + + return( value ); + +} /* fBm() */ + + +float noise3(float vec[3]) +{ + int bx0, bx1, by0, by1, bz0, bz1, b00, b10, b01, b11; + float rx0, rx1, ry0, ry1, rz0, rz1, *q, sy, sz, a, b, c, d, t, u, v; + register int i, j; + + if (start) { + start = 0; + init(); + } + + setup(0, bx0,bx1, rx0,rx1); + setup(1, by0,by1, ry0,ry1); + setup(2, bz0,bz1, rz0,rz1); + + i = p[ bx0 ]; + j = p[ bx1 ]; + + b00 = p[ i + by0 ]; + b10 = p[ j + by0 ]; + b01 = p[ i + by1 ]; + b11 = p[ j + by1 ]; + + t = s_curve(rx0); + sy = s_curve(ry0); + sz = s_curve(rz0); + + + q = g3[ b00 + bz0 ] ; u = at3(rx0,ry0,rz0); + q = g3[ b10 + bz0 ] ; v = at3(rx1,ry0,rz0); + a = lerp(t, u, v); + + q = g3[ b01 + bz0 ] ; u = at3(rx0,ry1,rz0); + q = g3[ b11 + bz0 ] ; v = at3(rx1,ry1,rz0); + b = lerp(t, u, v); + + c = lerp(sy, a, b); + + q = g3[ b00 + bz1 ] ; u = at3(rx0,ry0,rz1); + q = g3[ b10 + bz1 ] ; v = at3(rx1,ry0,rz1); + a = lerp(t, u, v); + + q = g3[ b01 + bz1 ] ; u = at3(rx0,ry1,rz1); + q = g3[ b11 + bz1 ] ; v = at3(rx1,ry1,rz1); + b = lerp(t, u, v); + + d = lerp(sy, a, b); + + return lerp(sz, c, d); +} + +static void normalize2(float v[2]) +{ + float s; + + s = sqrt(v[0] * v[0] + v[1] * v[1]); + v[0] = v[0] / s; + v[1] = v[1] / s; +} + +static void normalize3(float v[3]) +{ + float s; + + s = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); + v[0] = v[0] / s; + v[1] = v[1] / s; + v[2] = v[2] / s; +} + +static void init(void) +{ + int i, j, k; + + for (i = 0 ; i < B ; i++) { + p[i] = i; + + g1[i] = (float)((rand() % (B + B)) - B) / B; + + for (j = 0 ; j < 2 ; j++) + g2[i][j] = (float)((rand() % (B + B)) - B) / B; + normalize2(g2[i]); + + for (j = 0 ; j < 3 ; j++) + g3[i][j] = (float)((rand() % (B + B)) - B) / B; + normalize3(g3[i]); + } + + while (--i) { + k = p[i]; + p[i] = p[j = rand() % B]; + p[j] = k; + } + + for (i = 0 ; i < B + 2 ; i++) { + p[B + i] = p[i]; + g1[B + i] = g1[i]; + for (j = 0 ; j < 2 ; j++) + g2[B + i][j] = g2[i][j]; + for (j = 0 ; j < 3 ; j++) + g3[B + i][j] = g3[i][j]; + } +} diff --git a/examples/demo/opengl/fbm.h b/examples/demo/opengl/fbm.h new file mode 100644 index 0000000..474cd3c --- /dev/null +++ b/examples/demo/opengl/fbm.h @@ -0,0 +1,39 @@ +/***************************************************************** + + Prototypes for the fractional Brownian motion algorithm. These + functions were originally the work of F. Kenton Musgrave. For + documentation of the different functions please refer to the book: + "Texturing and modeling: a procedural approach" + by David S. Ebert et. al. + +******************************************************************/ + +#ifndef _fbm_h +#define _fbm_h + +#include <math.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define TRUE 1 +#define FALSE 0 + +typedef struct { + double x; + double y; + double z; +} Vector; + +double fBm( Vector point, double H, double lacunarity, double octaves, + int init ); +#endif + +#ifdef __cplusplus +} +#endif + + + + diff --git a/examples/demo/opengl/gear.xpm b/examples/demo/opengl/gear.xpm new file mode 100644 index 0000000..ccba9ec --- /dev/null +++ b/examples/demo/opengl/gear.xpm @@ -0,0 +1,304 @@ +/* XPM */ +static char *gear[] = { +/* width height num_colors chars_per_pixel */ +" 48 48 249 2", +/* colors */ +".. c #7a7a7b", +".# c #afafaf", +".a c #adadad", +".b c #727273", +".c c #a7a7a7", +".d c #a5a5a5", +".e c #9d9f9d", +".f c #9d9d9d", +".g c #9b9b9b", +".h c #656666", +".i c #9a999a", +".j c #626463", +".k c #979797", +".l c #969796", +".m c #5e5e5f", +".n c #5e5c5f", +".o c #5c5e5d", +".p c #919191", +".q c #c6c6c5", +".r c #8d8d8d", +".s c #535454", +".t c #bdbcbc", +".u c #bbbaba", +".v c #838383", +".w c #818181", +".x c #8e8f91", +".y c #484849", +".z c #797979", +".A c #aeaead", +".B c #777777", +".C c #acacab", +".D c #abaaaa", +".E c #747574", +".F c #a8a8a7", +".G c #706f70", +".H c #b1b2b3", +".I c #323233", +".J c #9b9a9a", +".K c #656565", +".L c #9a9a99", +".M c #cfcdcd", +".N c #999898", +".O c #dedfdf", +".P c #2b2c2c", +".Q c #959694", +".R c #5f5f5f", +".S c #5f5d5f", +".T c #939292", +".U c #5c5b5c", +".V c #a0a0a2", +".W c #242425", +".X c #595959", +".Y c #8e8e8d", +".Z c #575757", +".0 c #555555", +".1 c #c0bfbe", +".2 c #545554", +".3 c #8a8889", +".4 c #888887", +".5 c #cdcdce", +".6 c #858484", +".7 c #cacbcb", +".8 c #161617", +".9 c #807e7f", +"#. c #131414", +"## c #8d8e8f", +"#a c #7b7a7a", +"#b c #454545", +"#c c #c0c1c1", +"#d c #444344", +"#e c #bfbfc0", +"#f c #424342", +"#g c #f2f2f2", +"#h c #757674", +"#i c #403f40", +"#j c #3f3f3f", +"#k c #3d3d3d", +"#l c #6a6a69", +"#m c #696868", +"#n c #e2e2e2", +"#o c #2f2f2f", +"#p c #a8a9a9", +"#q c #626261", +"#r c #616060", +"#s c #d8d8d8", +"#t c #5a5a59", +"#u c #232323", +"#v c #9e9f9f", +"#w c #1d1d1d", +"#x c #1c1b1c", +"#y c #cdcccd", +"#z c #1a1b1a", +"#A c #191919", +"#B c #cacaca", +"#C c #949595", +"#D c #151515", +"#E c #121312", +"#F c #c2c2c2", +"#G c #8c8d8d", +"#H c #0f0f0f", +"#I c #444443", +"#J c #434242", +"#K c #414040", +"#L c #b9bab9", +"#M c #b6b6b6", +"#N c #b5b4b5", +"#O c #b4b4b4", +"#P c #6d6b6b", +"#Q c #7a7b7b", +"#R c #343433", +"#S c #696767", +"#T c #acacac", +"#U c None", +"#V c #dedddd", +"#W c #717172", +"#X c #a6a6a6", +"#Y c #707171", +"#Z c #292828", +"#0 c #a4a4a4", +"#1 c #6e6f6f", +"#2 c #6a6b6b", +"#3 c #9d9c9d", +"#4 c #d0d1cf", +"#5 c #c8c7c7", +"#6 c #929092", +"#7 c #c6c5c5", +"#8 c #141413", +"#9 c #131412", +"a. c #c5c3c4", +"a# c #9fa0a2", +"aa c #d2d3d4", +"ab c #8b8c8b", +"ac c #8a8a8a", +"ad c #bfbfbe", +"ae c #bfbdbe", +"af c #515352", +"ag c #878687", +"ah c #828282", +"ai c #b7b7b6", +"aj c #fbfcfc", +"ak c #494b4a", +"al c #49494a", +"am c #7e7e7e", +"an c #484949", +"ao c #f9fafa", +"ap c #474748", +"aq c #f7f8f8", +"ar c #797a79", +"as c #787878", +"at c #aaa9a9", +"au c #737473", +"av c #a8a9a7", +"aw c #ececed", +"ax c #39393a", +"ay c #6d6c6d", +"az c #6b6c6b", +"aA c #e5e6e6", +"aB c #afb1b1", +"aC c #9f9f9e", +"aD c #323333", +"aE c #676667", +"aF c #2f3130", +"aG c #646464", +"aH c #636463", +"aI c #949393", +"aJ c #181716", +"aK c #141312", +"aL c #d3d2d4", +"aM c #212122", +"aN c #565656", +"aO c #1e1f1f", +"aP c #525452", +"aQ c #888787", +"aR c #515251", +"aS c #858584", +"aT c #4e4e4e", +"aU c #ffffff", +"aV c #4d4e4d", +"aW c #828181", +"aX c #5c5c5f", +"aY c #151516", +"aZ c #5a5c5d", +"a0 c #141515", +"a1 c #8f8f91", +"a2 c #111112", +"a3 c #464646", +"a4 c #101111", +"a5 c #c1c2c2", +"a6 c #f5f5f5", +"a7 c #bfc0c0", +"a8 c #414241", +"a9 c #3f403f", +"b. c #3e3e3e", +"b# c #727171", +"ba c #3b3c3b", +"bb c #716f70", +"bc c #e9e9e9", +"bd c #363636", +"be c #353435", +"bf c #afb0b0", +"bg c #686767", +"bh c #313031", +"bi c #e1e1e1", +"bj c #2e2e2e", +"bk c #626361", +"bl c #2c2c2c", +"bm c #605f5f", +"bn c #dadbda", +"bo c #a2a2a3", +"bp c #262626", +"bq c #6b6d6d", +"br c #a1a0a2", +"bs c #5a5b59", +"bt c #242424", +"bu c #d5d5d5", +"bv c #595758", +"bw c #575556", +"bx c #8c8a8a", +"by c #d1d1d1", +"bz c #1e1e1e", +"bA c #cfcfcf", +"bB c #535352", +"bC c #979898", +"bD c #515150", +"bE c #1b1a1b", +"bF c #504f4f", +"bG c #181a18", +"bH c #848282", +"bI c #c9c9c9", +"bJ c #4e4b4d", +"bK c #161616", +"bL c #151415", +"bM c #141414", +"bN c #c5c5c5", +"bO c #111011", +"bP c #bdbdbd", +"bQ c #777675", +"bR c #0b0a0b", +"bS c #bbbbbb", +"bT c #858686", +"bU c #848685", +"bV c #b8b9b8", +"bW c #4b4b4d", +"bX c #808081", +"bY c #4a4b4c", +"bZ c #b5b5b5", +"b0 c #393738", +"b1 c #7c7e7d", +"b2 c #b3b1b3", +/* pixels */ +"#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#G.Rbpab#UboaEb.axb0b0aNbU#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#WbWbM#8#.b0.Gbp.8aK#.bM#.#.bMbzak#C#U#U#U#U#U#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#U#U#U#U#U#U#Uar.WbMbMbMbM#zaO#.bMbMbMbMbMbMbMbMaJaO.o#U#U#U#U#U#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#U#U#U#Uad.wbp#.#.bMbM#uaN#zbMbMbMbMbMbMbMbMbKaO#xaY.U#U#U#U#U#U#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#U#U#Ba6aj.6.8bMbMbMbMacaUaL#PbLbMbMbMbM#D#wbzbKbMbM.G#U#U#U#U#U#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#Uadbcajaqbc.5.IbMbMbMbM#nawbcao#g.NbFbMbEaO.8bMbMbMaK.6#U#U#U#U#U#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U.OaUaoawbcaA#nb#bMbMbM#KaUbi#4.M#sawajbb#zbMbMbMbMbM#9#z.B#U#U#U#U#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#Uaa#ebcaA#nbi.OaQbMbMa0#QaUby.M.7#5#7.5.KbMbMbMbMbMbMbM#.#x.B#U#hbh.W.N#U#U#U#U#U#U#U", +"#U#U#U#U#U#Ubo.oaA#n.O#VbnbnaS.vaQa7aA.7#5#7#F#c.1#RbMbMbMbMbMbMbMbM#.bl#d#z#.a4#I#v#U#U#U#U#U#U", +"#U#U#U#U#U#U.zaF.Y.O#Vbn#sbuaa#4bA#y.7#5bNa5#caeat#wbMbMbMbMbMbMbM#D#xbz#DbMbMbM#A.G#U#U#U#U#U#U", +"#U#U#U#U.rbdbO#E.d#n#sbuaabybA.M.7#5bN#F#cad.t.u.g#wbMbMbMbMbMbMbGbz.8bMbMbMbMbM#8bp.N#U#U#U#U#U", +"#U#UbZ#e.vbhbMaza6#saaby#4.5.5bI#5bNa5.1ae.u#L#M#O.6bpbLbM#u#aaNbEbMbMbMbMbMbMbMbMbMax#U#U#U#U#U", +"#U#Ubcaoaqbi#Paobnaa#4bA.M.7#5#7a5#cad.t.ubV#O.Hbf.a.T#f.I#7aoaIbEbMbMbMbMbMbMbMbMbMbKay#U#U#U#U", +"#U#UaU.Obna6aU#nby#4.5.7bI.q#F#cadbP.ubV#N#Obf.A#T.D.c#Xbfaobf#3a3.8bMbMbMbMbMbMbMbMbGbm#U#U#U#U", +"#Uadajbu#sbu#n#4.M#y#B#5bNa5a7adbS#Lai#O.H.#.a.Cat#Xbo.VaC.f.gbC.Ybl#DbMbMbMbMbMbLbp.X#U#U#U#U#U", +"#UbAawaaaabybA.M.7bI#7#F#cad.t.u#LbZ#Obf.##T#Tav.dboa##v.g.L.laI#6ar#xbMbMbMbMbG.PaS#U#U#U#U#U#U", +"#Ubcbiby#4bA.7bI.qa.a5.1ad.u#L#M#OaB.#.a.Dav.dbr.V#v.f.g.k#C.T#6.YabaP#AbM#Dbz#waK.z#U#U#U#U#U#U", +"#UbP#0bA#y.7#5#7a5a7aebS.uai#O.Hbf.a.C#p.cbobr#v.f.J.N.laIa1.x#G.3.4bTbJbzaObKbM#9a9#U#U#U#U#U#U", +"#U..bM.X#O#7a.a5a7aebS#L#M#Obf.#.f#2.saf.w.V#v#3.LbCaI.Ta1.xab.3aQbTaW.X#AbMbMbM#D#x#v#U#U#U#U#U", +"#U#U#abhbMa5#eadbS#Lai#O.H.#.a.Qb.bdbl.W.I.Z.l.N.QaIa1.x.rac.4bT.vay#RbLbMbMbMbMbM#9#Y#U#U#U#U#U", +"#U#U#U#U#bad.t.ubVbZ#Obf.a.C.CbJ#RbEbMbMbK#RazaI#6.x#Gbx.4bT.6.wambhbMbMbMbMbMbMbM#8a4#HaKar#U#U", +"#U#U#U#U#bbS#Lai#Obfbf.a.Dav.pbd.WbMbMbMbMbMb#.f##ab.3.4bTah.9am#QblbMbMbMbMbMbMbMbMbMbM#9.o#U#U", +"#U#U#U#U#6#B#N.Hbf.a#Tat.c.dagbd#wbMbMbMbMbMa8#Mab.4bT.v.wamb1aras#I#.bMbMbMbMbMbMbMbMbM#D.o#U#U", +"#U#UbZaAa6#cbf.##T#Tav.dbr.V.Bbd#wbMbV.Na2aKbM.L#MaS.wbXb1#aas#h.E.Za2bMbMbMbMbMbMbMbM#z#Z.o#U#U", +"#UbZa6aw.ubf#T.Dav.c#0.V#v.f.vbd#wbFac#oaObRbMa8#g.vb1#Q.zbQ#h.b.G#1aYbMbMbMbMbMbM.8#ubdaT.o#U#U", +"#Uadaobf.A#Tat.c.dbra#.f#3.N.Tba#ibMbfaDbj#HbMbMaU.Y#aasbQau#Y.Gbq#2aX#obtaO#DbLaJbpbabWaP.o#U#U", +"#UbZaU.t.Dav#Xbo.V#v#3.JbC.Q#6aN.0bMbk#0aObRbMbMbN#ObQ#hb#.Gbqaz#m.haH#r.S.XbjaM.P#JbFbB.y.o#U#U", +"#U#Ua6.5.F#0br#v.e.g.N.laI#6.x#Q.m.IbM#Z#HbRbMbMac.c.bbb#1az#lbg.Kbk#r.n.Ubs.Ib0.yaPaTbY.W.r#U#U", +"#U#Ubn#Vbr.V.f.g.L.kaI.T.x.Yab.4.iasbMbMbMbMbMbMbS.a.Gay#2bg.hbk#r.naX#t.Z.2bd#faRaVapbt#Y#U#U#U", +"#U#Uad#g.d.f.LbC.l.T.p.x#GacaQbT.TaabhbMbMbMbMaRa6.waz#maEaH#qbmaXaZbvaN.saRbe.yak#dbt#Y#U#U#U#U", +"#U#U#UaU#v.N.laI.T.x##ab.4aQ.6.w.9.c#n.nbMbM.n#Vbn#lbg.K.j#r.n.U.Xbw.0aPaRaTbjal#i#u.r#U#U#U#U#U", +"#U#U#UaibhbMbMbMakab.3.4aSaW.wb1#a.zb2aqaUaUaUbPb#.haH#r.RaX#tbv.0.saRbWalan.Pb0#8#i#U#U#U#U#U#U", +"#U#U#U.V.6.6.6#a.WaragbH.wamb1aras#hau.G.T.p#Q.haG#qbm.naXbvaN.2aPbFap#k#i#j.W#8#.a4.y#U#U#U#U#U", +"#U#U#U#U#U#U#U#UbgaVaW.9b1#Q.zbQ.E#W.Gayaz#m.K.j#q.SaXbsbv.0bBaRbF.yb.#Rbpbt#A#.bM#8#H#U#U#U#U#U", +"#U#U#U#U#U#U#U#U#Ua8aub1.z.B.Eb#.G#1#2#maEaGbk.RaXbsbvaN.saRbFaTak#K.I#zbMbMbMaYa2aK#Y#U#U#U#U#U", +"#U#U#U#U#U#U#U#UbN#s.Eas#h.Ebb.Gbq#l#S.KaH#r.maZ.X.Z.2aPbDaTbYan#IbdbEbMbMbMbMbObO#Y#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#UawbSbQ.E#Y.Gbq#2#m.KaH#r.S.n#tbv.0bBaRbFbJana3#d#fbl#AbMbMbMbOa4#Y#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#Ua6au.b.G#1az#lbg.K#qbm.nbsbv.0.2bBbFaTbYana3#da8#jbdbp#Aa2bOa2.b#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#UbV#d.nbq#2bg.haH#r.SaXbsbv.0.sbDbFbWaka3#d#f#ib.bab0aD#uaJa2.b#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#U#U.vbla9aGaH.Xb..0#t.X.0.saRbFbJakap#b#I#K#i#kaxb0be.IbjaO.k#U#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#U#U#U#GbWbtbF.Wbp#daOa9aPbDaTbY.ya3#da9bebj#kaxbe#RaFblaM.Y#U#U#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#U#U#U#U#0bQblbz#a#U.kax#IbJakap#b#fbdaO#zbM#wax.IaF.WaO.Y#U#U#U#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#Ubmb.apa3#da8#i#ibMbMbMbMaJbl#o#dbr#U#U#U#U#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#Ubm#o#d#f#i#k#k#ibMbMbMbMbMbpaS#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#lbpaxbabaaxba#ibzbzbM#daS#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#db0b0b0#Z#wbjbg#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U", +"#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U#U" +}; diff --git a/examples/demo/opengl/glbox.cpp b/examples/demo/opengl/glbox.cpp new file mode 100644 index 0000000..6e9e686 --- /dev/null +++ b/examples/demo/opengl/glbox.cpp @@ -0,0 +1,142 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +/**************************************************************************** +** +** This is a simple QGLWidget displaying an openGL wireframe box +** +** The OpenGL code is mostly borrowed from Brian Pauls "spin" example +** in the Mesa distribution +** +****************************************************************************/ + +#include "glbox.h" + +#if defined(Q_CC_MSVC) +#pragma warning(disable:4305) // init: truncation from const double to float +#endif + +/*! + Create a GLBox widget +*/ + +GLBox::GLBox( QWidget* parent, const char* name, WFlags f ) + : GLControlWidget( parent, name, 0, f ) +{ + setAnimationDelay( -1 ); + xRot = yRot = zRot = 0.0; // default object rotation + scale = 1.25; // default object scale + object = 0; +} + + +/*! + Release allocated resources +*/ + +GLBox::~GLBox() +{ + makeCurrent(); + glDeleteLists( object, 1 ); +} + + +/*! + Paint the box. The actual openGL commands for drawing the box are + performed here. +*/ + +void GLBox::paintGL() +{ + glClear( GL_COLOR_BUFFER_BIT ); + + glLoadIdentity(); + transform(); + glCallList( object ); + drawText(); + qglColor( green ); + glLineWidth( 1.0 ); + glBegin( GL_LINES ); + { + glVertex3f( 0.0, 0.0, 0.0 ); + glVertex3f( 0.98, 0.98, 0.98 ); + } + glEnd(); + renderText( 1.0, 1.0, 1.0, "Wirebox", QFont( "helvetica", 12, QFont::Bold, TRUE ) ); +} + + +/*! + Set up the OpenGL rendering state, and define display list +*/ + +void GLBox::initializeGL() +{ + qglClearColor( black ); // Let OpenGL clear to black + object = makeObject(); // Generate an OpenGL display list + glShadeModel( GL_FLAT ); +} + + + +/*! + Set up the OpenGL view port, matrix mode, etc. +*/ + +void GLBox::resizeGL( int w, int h ) +{ + glViewport( 0, 0, (GLint)w, (GLint)h ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 15.0 ); + glMatrixMode( GL_MODELVIEW ); +} + + +/*! + Generate an OpenGL display list for the object to be shown, i.e. the box +*/ + +GLuint GLBox::makeObject() +{ + GLuint list; + + list = glGenLists( 1 ); + + glNewList( list, GL_COMPILE ); + + qglColor( white ); // Shorthand for glColor3f or glIndex + + glLineWidth( 2.0 ); + + glBegin( GL_LINE_LOOP ); + glVertex3f( 1.0, 0.5, -0.4 ); + glVertex3f( 1.0, -0.5, -0.4 ); + glVertex3f( -1.0, -0.5, -0.4 ); + glVertex3f( -1.0, 0.5, -0.4 ); + glEnd(); + + glBegin( GL_LINE_LOOP ); + glVertex3f( 1.0, 0.5, 0.4 ); + glVertex3f( 1.0, -0.5, 0.4 ); + glVertex3f( -1.0, -0.5, 0.4 ); + glVertex3f( -1.0, 0.5, 0.4 ); + glEnd(); + + glBegin( GL_LINES ); + glVertex3f( 1.0, 0.5, -0.4 ); glVertex3f( 1.0, 0.5, 0.4 ); + glVertex3f( 1.0, -0.5, -0.4 ); glVertex3f( 1.0, -0.5, 0.4 ); + glVertex3f( -1.0, -0.5, -0.4 ); glVertex3f( -1.0, -0.5, 0.4 ); + glVertex3f( -1.0, 0.5, -0.4 ); glVertex3f( -1.0, 0.5, 0.4 ); + glEnd(); + + glEndList(); + + return list; +} diff --git a/examples/demo/opengl/glbox.h b/examples/demo/opengl/glbox.h new file mode 100644 index 0000000..6f5089b --- /dev/null +++ b/examples/demo/opengl/glbox.h @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +/**************************************************************************** +** +** This is a simple QGLWidget displaying an openGL wireframe box +** +****************************************************************************/ + +#ifndef GLBOX_H +#define GLBOX_H + +#include "glcontrolwidget.h" + +class GLBox : public GLControlWidget +{ + Q_OBJECT + +public: + + GLBox( QWidget* parent = 0, const char* name = 0, WFlags f = 0 ); + ~GLBox(); + +protected: + + void initializeGL(); + void paintGL(); + void resizeGL( int w, int h ); + + virtual GLuint makeObject(); + +private: + GLuint object; +}; + + +#endif // GLBOX_H diff --git a/examples/demo/opengl/glcontrolwidget.cpp b/examples/demo/opengl/glcontrolwidget.cpp new file mode 100644 index 0000000..d81d328 --- /dev/null +++ b/examples/demo/opengl/glcontrolwidget.cpp @@ -0,0 +1,195 @@ +#include "glcontrolwidget.h" + +#include <qcursor.h> +#include <qtimer.h> + +#include <math.h> + +GLControlWidget::GLControlWidget( QWidget *parent, const char *name, QGLWidget *share, WFlags f ) +: QGLWidget( parent, name, share, f ), + xRot(0),yRot(0),zRot(0),xTrans(0),yTrans(0),zTrans(-10.0),scale(5.0), animation(TRUE), wasAnimated(FALSE), delay( 50 ) +{ + setCursor( pointingHandCursor ); + timer = new QTimer( this ); + connect( timer, SIGNAL(timeout()), SLOT(animate()) ); + timer->start( delay ); +} + +void GLControlWidget::transform() +{ + glTranslatef( xTrans, yTrans, zTrans ); + glScalef( scale, scale, scale ); + + glRotatef( xRot, 1.0, 0.0, 0.0 ); + glRotatef( yRot, 0.0, 1.0, 0.0 ); + glRotatef( zRot, 0.0, 0.0, 1.0 ); +} + +void GLControlWidget::drawText() +{ + glPushAttrib( GL_LIGHTING_BIT | GL_TEXTURE_BIT ); + glDisable( GL_LIGHTING ); + glDisable( GL_TEXTURE_2D ); + qglColor( white ); + QString str( "Rendering text in OpenGL is easy with Qt" ); + QFontMetrics fm( font() ); + renderText( (width() - fm.width( str )) / 2, 15, str ); + QFont f( "courier", 8 ); + QFontMetrics fmc( f ); + qglColor( QColor("skyblue") ); + int x, y, z; + x = (xRot >= 0) ? (int) xRot % 360 : 359 - (QABS((int) xRot) % 360); + y = (yRot >= 0) ? (int) yRot % 360 : 359 - (QABS((int) yRot) % 360); + z = (zRot >= 0) ? (int) zRot % 360 : 359 - (QABS((int) zRot) % 360); + str.sprintf( "Rot X: %03d - Rot Y: %03d - Rot Z: %03d", x, y, z ); + renderText( (width() - fmc.width( str )) / 2, height() - 15, str, f ); + glPopAttrib(); +} + +/*! + Set the rotation angle of the object to \e degrees around the X axis. +*/ +void GLControlWidget::setXRotation( double degrees ) +{ + xRot = (GLfloat)fmod(degrees, 360.0); + updateGL(); +} + +/*! + Set the rotation angle of the object to \e degrees around the Y axis. +*/ +void GLControlWidget::setYRotation( double degrees ) +{ + yRot = (GLfloat)fmod(degrees, 360.0); + updateGL(); +} + + +/*! + Set the rotation angle of the object to \e degrees around the Z axis. +*/ +void GLControlWidget::setZRotation( double degrees ) +{ + zRot = (GLfloat)fmod(degrees, 360.0); + updateGL(); +} + +void GLControlWidget::setScale( double s ) +{ + scale = s; + updateGL(); +} + +void GLControlWidget::setXTrans( double x ) +{ + xTrans = x; + updateGL(); +} + +void GLControlWidget::setYTrans( double y ) +{ + yTrans = y; + updateGL(); +} + +void GLControlWidget::setZTrans( double z ) +{ + zTrans = z; + updateGL(); +} + +void GLControlWidget::setRotationImpulse( double x, double y, double z ) +{ + setXRotation( xRot + 180*x ); + setYRotation( yRot + 180*y ); + setZRotation( zRot - 180*z ); +} + +void GLControlWidget::setTranslationImpulse( double x, double y, double z ) +{ + setXTrans( xTrans + 2*x ); + setYTrans( yTrans - 2*y ); + setZTrans( zTrans + 2*z ); +} + +void GLControlWidget::mousePressEvent( QMouseEvent *e ) +{ + e->accept(); + oldPos = e->pos(); +} + +void GLControlWidget::mouseReleaseEvent( QMouseEvent *e ) +{ + e->accept(); + oldPos = e->pos(); +} + +void GLControlWidget::mouseMoveEvent( QMouseEvent *e ) +{ + e->accept(); + double dx = e->x() - oldPos.x(); + double dy = e->y() - oldPos.y(); + + oldPos = e->pos(); + + double rx = dx / width(); + double ry = dy / height(); + + if ( e->state() == LeftButton ) + setRotationImpulse( ry, rx, 0 ); + else if ( e->state() == RightButton ) + setRotationImpulse( ry, 0, rx ); + else if ( e->state() == MidButton ) + setTranslationImpulse( rx, ry, 0 ); + else if ( e->state() == ( LeftButton | RightButton ) ) + setTranslationImpulse( rx, 0, ry ); +} + +void GLControlWidget::wheelEvent( QWheelEvent *e ) +{ + e->accept(); + if ( scale <= ( (double)e->delta() / 1000 ) ) + return; + setScale( scale - ( (double)e->delta() / 1000 )); +} + +void GLControlWidget::mouseDoubleClickEvent( QMouseEvent * ) +{ + if ( delay <= 0 ) + return; + + animation = !animation; + if ( animation ) + timer->start( delay ); + else + timer->stop(); +} + +void GLControlWidget::showEvent( QShowEvent *e ) +{ + if ( wasAnimated && !timer->isActive() ) + timer->start( delay ); + + QGLWidget::showEvent( e ); +} + +void GLControlWidget::hideEvent( QHideEvent *e ) +{ + wasAnimated = timer->isActive(); + timer->stop(); + QGLWidget::hideEvent( e ); +} + +void GLControlWidget::animate() +{ +} + +void GLControlWidget::setAnimationDelay( int ms ) +{ + timer->stop(); + delay = ms; + if ( animation ) { + wasAnimated = TRUE; + timer->start( delay ); + } +} diff --git a/examples/demo/opengl/glcontrolwidget.h b/examples/demo/opengl/glcontrolwidget.h new file mode 100644 index 0000000..05d026f --- /dev/null +++ b/examples/demo/opengl/glcontrolwidget.h @@ -0,0 +1,56 @@ +#ifndef GLCONTROLWIDGET_H +#define GLCONTROLWIDGET_H + +#include <qgl.h> + +class GLControlWidget : public QGLWidget +{ + Q_OBJECT + +public: + GLControlWidget( QWidget *parent, const char *name = 0, QGLWidget *share = 0, WFlags f = 0 ); + + virtual void transform(); + +public slots: + void setXRotation( double degrees ); + void setYRotation( double degrees ); + void setZRotation( double degrees ); + + void setScale( double s ); + + void setXTrans( double x ); + void setYTrans( double y ); + void setZTrans( double z ); + + virtual void setRotationImpulse( double x, double y, double z ); + virtual void setTranslationImpulse( double x, double y, double z ); + void drawText(); + +protected: + void setAnimationDelay( int ms ); + void mousePressEvent( QMouseEvent *e ); + void mouseReleaseEvent( QMouseEvent *e ); + void mouseMoveEvent( QMouseEvent * ); + void mouseDoubleClickEvent( QMouseEvent * ); + void wheelEvent( QWheelEvent * ); + + void showEvent( QShowEvent * ); + void hideEvent( QHideEvent * ); + + GLfloat xRot, yRot, zRot; + GLfloat xTrans, yTrans, zTrans; + GLfloat scale; + bool animation; + +protected slots: + virtual void animate(); + +private: + bool wasAnimated; + QPoint oldPos; + QTimer* timer; + int delay; +}; + +#endif diff --git a/examples/demo/opengl/glgear.cpp b/examples/demo/opengl/glgear.cpp new file mode 100644 index 0000000..e9b837b --- /dev/null +++ b/examples/demo/opengl/glgear.cpp @@ -0,0 +1,271 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ +// +// Draws a gear. +// +// Portions of this code have been borrowed from Brian Paul's Mesa +// distribution. +// + +#include "glgear.h" + +#include <math.h> + +#if defined(Q_CC_MSVC) +#pragma warning(disable:4305) // init: truncation from const double to float +#endif + +/* + * Draw a gear wheel. You'll probably want to call this function when + * building a display list since we do a lot of trig here. + * + * Input: inner_radius - radius of hole at center + * outer_radius - radius at center of teeth + * width - width of gear + * teeth - number of teeth + * tooth_depth - depth of tooth + */ +static void gear( GLfloat inner_radius, GLfloat outer_radius, GLfloat width, + GLint teeth, GLfloat tooth_depth ) +{ + GLint i; + GLfloat r0, r1, r2; + GLfloat angle, da; + GLfloat u, v, len; + + r0 = inner_radius; + r1 = outer_radius - tooth_depth/2.0; + r2 = outer_radius + tooth_depth/2.0; + + const double pi = 3.14159264; + da = 2.0*pi / teeth / 4.0; + + glShadeModel( GL_FLAT ); + + glNormal3f( 0.0, 0.0, 1.0 ); + + /* draw front face */ + glBegin( GL_QUAD_STRIP ); + for (i=0;i<=teeth;i++) { + angle = i * 2.0*pi / teeth; + glVertex3f( r0*cos(angle), r0*sin(angle), width*0.5 ); + glVertex3f( r1*cos(angle), r1*sin(angle), width*0.5 ); + glVertex3f( r0*cos(angle), r0*sin(angle), width*0.5 ); + glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), width*0.5 ); + } + glEnd(); + + /* draw front sides of teeth */ + glBegin( GL_QUADS ); + da = 2.0*pi / teeth / 4.0; + for (i=0;i<teeth;i++) { + angle = i * 2.0*pi / teeth; + + glVertex3f( r1*cos(angle), r1*sin(angle), width*0.5 ); + glVertex3f( r2*cos(angle+da), r2*sin(angle+da), width*0.5 ); + glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da), width*0.5 ); + glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), width*0.5 ); + } + glEnd(); + + + glNormal3f( 0.0, 0.0, -1.0 ); + + /* draw back face */ + glBegin( GL_QUAD_STRIP ); + for (i=0;i<=teeth;i++) { + angle = i * 2.0*pi / teeth; + glVertex3f( r1*cos(angle), r1*sin(angle), -width*0.5 ); + glVertex3f( r0*cos(angle), r0*sin(angle), -width*0.5 ); + glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), -width*0.5 ); + glVertex3f( r0*cos(angle), r0*sin(angle), -width*0.5 ); + } + glEnd(); + + /* draw back sides of teeth */ + glBegin( GL_QUADS ); + da = 2.0*pi / teeth / 4.0; + for (i=0;i<teeth;i++) { + angle = i * 2.0*pi / teeth; + + glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), -width*0.5 ); + glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da), -width*0.5 ); + glVertex3f( r2*cos(angle+da), r2*sin(angle+da), -width*0.5 ); + glVertex3f( r1*cos(angle), r1*sin(angle), -width*0.5 ); + } + glEnd(); + + + /* draw outward faces of teeth */ + glBegin( GL_QUAD_STRIP ); + for (i=0;i<teeth;i++) { + angle = i * 2.0*pi / teeth; + + glVertex3f( r1*cos(angle), r1*sin(angle), width*0.5 ); + glVertex3f( r1*cos(angle), r1*sin(angle), -width*0.5 ); + u = r2*cos(angle+da) - r1*cos(angle); + v = r2*sin(angle+da) - r1*sin(angle); + len = sqrt( u*u + v*v ); + u /= len; + v /= len; + glNormal3f( v, -u, 0.0 ); + glVertex3f( r2*cos(angle+da), r2*sin(angle+da), width*0.5 ); + glVertex3f( r2*cos(angle+da), r2*sin(angle+da), -width*0.5 ); + glNormal3f( cos(angle), sin(angle), 0.0 ); + glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da), width*0.5 ); + glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da), -width*0.5 ); + u = r1*cos(angle+3*da) - r2*cos(angle+2*da); + v = r1*sin(angle+3*da) - r2*sin(angle+2*da); + glNormal3f( v, -u, 0.0 ); + glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), width*0.5 ); + glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), -width*0.5 ); + glNormal3f( cos(angle), sin(angle), 0.0 ); + } + + glVertex3f( r1*cos(0.0), r1*sin(0.0), width*0.5 ); + glVertex3f( r1*cos(0.0), r1*sin(0.0), -width*0.5 ); + + glEnd(); + + + glShadeModel( GL_SMOOTH ); + + /* draw inside radius cylinder */ + glBegin( GL_QUAD_STRIP ); + for (i=0;i<=teeth;i++) { + angle = i * 2.0*pi / teeth; + glNormal3f( -cos(angle), -sin(angle), 0.0 ); + glVertex3f( r0*cos(angle), r0*sin(angle), -width*0.5 ); + glVertex3f( r0*cos(angle), r0*sin(angle), width*0.5 ); + } + glEnd(); + +} + +void GLGear::draw() +{ + glPushMatrix(); + glRotatef( view_rotx, 1.0, 0.0, 0.0 ); + glRotatef( view_roty, 0.0, 1.0, 0.0 ); + glRotatef( view_rotz, 0.0, 0.0, 1.0 ); + + glPushMatrix(); + glTranslatef( -3.0, -2.0, 0.0 ); + glRotatef( angle, 0.0, 0.0, 1.0 ); + glCallList(gear1); + glPopMatrix(); + + glPushMatrix(); + glTranslatef( 3.1, -2.0, 0.0 ); + glRotatef( -2.0*angle-9.0, 0.0, 0.0, 1.0 ); + glCallList(gear2); + glPopMatrix(); + + glPushMatrix(); + glTranslatef( -3.1, 2.2, -1.8 ); + glRotatef( 90.0, 1.0, 0.0, 0.0 ); + glRotatef( 2.0*angle-2.0, 0.0, 0.0, 1.0 ); + glCallList(gear3); + glPopMatrix(); + + glPopMatrix(); +} + +GLGear::GLGear( QWidget *parent, const char *name, WFlags f ) + : GLControlWidget( parent, name, 0, f ) +{ + scale = 1.0; + setAnimationDelay( 15 ); + view_rotx = 20.0; + view_roty = 30.0; + view_rotz = 0.0; + angle = 0.0; +} + +void GLGear::initializeGL() +{ + static GLfloat pos[4] = {5.0, 5.0, 10.0, 1.0 }; + static GLfloat ared[4] = {0.8, 0.1, 0.0, 1.0 }; + static GLfloat agreen[4] = {0.0, 0.8, 0.2, 1.0 }; + static GLfloat ablue[4] = {0.2, 0.2, 1.0, 1.0 }; + + glLightfv( GL_LIGHT0, GL_POSITION, pos ); + glEnable( GL_CULL_FACE ); + glEnable( GL_LIGHTING ); + glEnable( GL_LIGHT0 ); + glEnable( GL_DEPTH_TEST ); + + /* make the gears */ + gear1 = glGenLists(1); + glNewList(gear1, GL_COMPILE); + glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ared ); + gear( 1.0, 4.0, 1.0, 20, 0.7 ); + glEndList(); + + gear2 = glGenLists(1); + glNewList(gear2, GL_COMPILE); + glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, agreen ); + gear( 0.5, 2.0, 2.0, 10, 0.7 ); + glEndList(); + + gear3 = glGenLists(1); + glNewList(gear3, GL_COMPILE); + glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ablue ); + gear( 1.3, 2.0, 0.5, 10, 0.7 ); + glEndList(); + + glEnable( GL_NORMALIZE ); +} + + +void GLGear::resizeGL( int width, int height ) +{ + GLfloat w = (float) width / (float) height; + GLfloat h = 1.0; + + glViewport( 0, 0, width, height ); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum( -w, w, -h, h, 5.0, 60.0 ); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -40.0 ); +} + + +void GLGear::paintGL() +{ + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + glPushMatrix(); + transform(); + draw(); + drawText(); + + glPushAttrib( GL_LIGHTING_BIT | GL_TEXTURE_BIT ); + glDisable( GL_LIGHTING ); + glDisable( GL_TEXTURE_2D ); + qglColor( green ); + glLineWidth( 1.0 ); + glBegin( GL_LINES ); + { + glVertex3f( 0.0, 0.0, 0.0 ); + glVertex3f( 2.98, 2.98, 2.98 ); + } + glEnd(); + renderText( 3.0, 3.0, 3.0, "Gears", QFont( "helvetica", 12, QFont::Bold, TRUE ) ); + glPopMatrix(); + glPopAttrib(); +} + +void GLGear::animate() +{ + angle += 2.0; + view_roty += 1.0; + updateGL(); +} diff --git a/examples/demo/opengl/glgear.h b/examples/demo/opengl/glgear.h new file mode 100644 index 0000000..e728765 --- /dev/null +++ b/examples/demo/opengl/glgear.h @@ -0,0 +1,26 @@ +#ifndef GLGEAR_H +#define GLGEAR_H + +#include "glcontrolwidget.h" + +class GLGear : public GLControlWidget +{ + Q_OBJECT + +public: + GLGear( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); + +protected: + void draw(); + void animate(); + void initializeGL(); + void resizeGL( int, int ); + void paintGL(); + +private: + GLfloat view_rotx, view_roty, view_rotz; + GLint gear1, gear2, gear3; + GLfloat angle; +}; + +#endif // GLGEAR_H diff --git a/examples/demo/opengl/glinfo.h b/examples/demo/opengl/glinfo.h new file mode 100644 index 0000000..1e1d1dd --- /dev/null +++ b/examples/demo/opengl/glinfo.h @@ -0,0 +1,26 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#ifndef GLINFO_H +#define GLINFO_H + +#include <qstring.h> + +class GLInfo +{ +public: + GLInfo(); + QString info();//extensions(); +/* QString configs(); */ + +protected: + QString infotext; +/* QString config; */ +}; +#endif diff --git a/examples/demo/opengl/glinfo_x11.cpp b/examples/demo/opengl/glinfo_x11.cpp new file mode 100644 index 0000000..1137ef9 --- /dev/null +++ b/examples/demo/opengl/glinfo_x11.cpp @@ -0,0 +1,257 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#define QT_CLEAN_NAMESPACE // avoid clashes with Xmd.h + +#include <qstringlist.h> +#include <qgl.h> +#include "glinfo.h" + +#include <GL/glx.h> +#include <GL/gl.h> +#include <GL/glu.h> + +#ifndef GLX_NONE_EXT +#define GLX_NONE_EXT 0x8000 +#endif + +typedef struct visualAttribs { + /* X visual attribs */ + int id; + int c_class; + int depth; + int redMask, greenMask, blueMask; + int colormapSize; + int bitsPerRGB; + /* GL visual attribs */ + int supportsGL; + int transparent; + int bufferSize; + int level; + int rgba; + int doubleBuffer; + int stereo; + int auxBuffers; + int redSize, greenSize, blueSize, alphaSize; + int depthSize; + int stencilSize; + int accumRedSize, accumGreenSize, accumBlueSize, accumAlphaSize; + int numSamples, numMultisample; + int visualCaveat; +} VisualAttribs; + +static void screenInfo( Display *dpy, int scrnum, QString &infotext ) +{ + const char *serverVendor = glXQueryServerString( dpy, scrnum, GLX_VENDOR ); + const char *serverVersion = glXQueryServerString( dpy, scrnum, GLX_VERSION ); + const char *serverExtensions = glXQueryServerString( dpy, scrnum, GLX_EXTENSIONS ); + const char *clientVendor = glXGetClientString( dpy, GLX_VENDOR ); + const char *clientVersion = glXGetClientString( dpy, GLX_VERSION ); + const char *clientExtensions = glXGetClientString( dpy, GLX_EXTENSIONS ); + const char *glxExtensions = glXQueryExtensionsString( dpy, scrnum ); + const char *glVendor = (const char *) glGetString( GL_VENDOR ); + const char *glRenderer = (const char *) glGetString( GL_RENDERER ); + const char *glVersion = (const char *) glGetString( GL_VERSION ); + const char *glExtensions = (const char *) glGetString( GL_EXTENSIONS ); + const char *gluVersion = (const char *) gluGetString( (GLenum) GLU_VERSION ); + const char *gluExtensions = (const char *) gluGetString( (GLenum) GLU_EXTENSIONS ); + + infotext.sprintf( "%sServer GLX vendor string: %s\n", infotext.ascii(), serverVendor ); + infotext.sprintf( "%sServer GLX version string: %s\n", infotext.ascii(), serverVersion ); + infotext.sprintf( "%sServer GLX extensions:\n", infotext.ascii() ); + + infotext += QString( serverExtensions ).replace( ' ', '\n' ) + "\n\n"; + + infotext.sprintf( "%sClient GLX vendor string: %s\n", infotext.ascii(), clientVendor ); + infotext.sprintf( "%sClient GLX version string: %s\n", infotext.ascii(), clientVersion ); + infotext.sprintf( "%sClient GLX extensions:\n", infotext.ascii() ); + + infotext += QString( clientExtensions ).replace( ' ', '\n' ) + "\n\n"; + + infotext.sprintf( "%sGLX extensions:\n", infotext.ascii() ); + + infotext += QString( glxExtensions ).replace( ' ', '\n' ) + "\n\n"; + + infotext.sprintf( "%sOpenGL vendor string: %s\n", infotext.ascii(), glVendor ); + infotext.sprintf( "%sOpenGL renderer string: %s\n", infotext.ascii(), glRenderer ); + infotext.sprintf( "%sOpenGL version string: %s\n", infotext.ascii(), glVersion ); + infotext.sprintf( "%sOpenGL extensions:\n", infotext.ascii() ); + + infotext += QString( glExtensions ).replace( ' ', '\n' ) + "\n\n"; + + infotext.sprintf( "%sGLU version: %s\n", infotext.ascii(), gluVersion ); + infotext.sprintf( "%sGLU extensions:\n", infotext.ascii() ); + + infotext += QString( gluExtensions ).replace( ' ', '\n' ) + "\n\n"; +} + +static const char * visualClassName( int cls ) +{ + switch ( cls ) { + case StaticColor: + return "StaticColor"; + case PseudoColor: + return "PseudoColor"; + case StaticGray: + return "StaticGray"; + case GrayScale: + return "GrayScale"; + case TrueColor: + return "TrueColor"; + case DirectColor: + return "DirectColor"; + default: + return ""; + } +} + +static const char * caveatString( int caveat ) +{ + switch ( caveat ) { +#if defined(GLX_EXT_visual_rating) + case GLX_NONE_EXT: + return "None"; + case GLX_SLOW_VISUAL_EXT: + return "Slow"; + case GLX_NON_CONFORMANT_VISUAL_EXT: + return "Nonconformant"; +#endif + default: + return "<none>"; + } +} + +static void visualAttribs( Display * dpy, XVisualInfo * vi, VisualAttribs * attribs ) +{ + memset( attribs, 0, sizeof( VisualAttribs ) ); + + attribs->id = vi->visualid; + attribs->c_class = vi->c_class; + attribs->depth = vi->depth; + attribs->redMask = vi->red_mask; + attribs->greenMask = vi->green_mask; + attribs->blueMask = vi->blue_mask; + attribs->colormapSize = vi->colormap_size; + attribs->bitsPerRGB = vi->bits_per_rgb; + + if ( glXGetConfig( dpy, vi, GLX_USE_GL, &attribs->supportsGL ) != 0 ) + return; + attribs->accumAlphaSize = 0; + glXGetConfig( dpy, vi, GLX_BUFFER_SIZE, &attribs->bufferSize ); + glXGetConfig( dpy, vi, GLX_LEVEL, &attribs->level ); + glXGetConfig( dpy, vi, GLX_RGBA, &attribs->rgba ); + glXGetConfig( dpy, vi, GLX_DOUBLEBUFFER, &attribs->doubleBuffer ); + glXGetConfig( dpy, vi, GLX_STEREO, &attribs->stereo ); + glXGetConfig( dpy, vi, GLX_AUX_BUFFERS, &attribs->auxBuffers ); + glXGetConfig( dpy, vi, GLX_RED_SIZE, &attribs->redSize ); + glXGetConfig( dpy, vi, GLX_GREEN_SIZE, &attribs->greenSize ); + glXGetConfig( dpy, vi, GLX_BLUE_SIZE, &attribs->blueSize ); + glXGetConfig( dpy, vi, GLX_ALPHA_SIZE, &attribs->alphaSize ); + glXGetConfig( dpy, vi, GLX_DEPTH_SIZE, &attribs->depthSize ); + glXGetConfig( dpy, vi, GLX_STENCIL_SIZE, &attribs->stencilSize ); + glXGetConfig( dpy, vi, GLX_ACCUM_RED_SIZE, &attribs->accumRedSize ); + glXGetConfig( dpy, vi, GLX_ACCUM_GREEN_SIZE, &attribs->accumGreenSize ); + glXGetConfig( dpy, vi, GLX_ACCUM_BLUE_SIZE, &attribs->accumBlueSize ); + glXGetConfig( dpy, vi, GLX_ACCUM_ALPHA_SIZE, &attribs->accumAlphaSize ); + + attribs->transparent = 0; // transparent pixel missing + attribs->numSamples = 0; // multisample tests missing + attribs->numMultisample = 0; + +#if defined(GLX_EXT_visual_rating) + const char *ext = glXQueryExtensionsString( dpy, vi->screen ); + if ( ext && strstr( ext, "GLX_EXT_visual_rating" ) ) + glXGetConfig(dpy, vi, GLX_VISUAL_CAVEAT_EXT, &attribs->visualCaveat); + else + attribs->visualCaveat = GLX_NONE_EXT; +#else + attribs->visualCaveat = 0; +#endif +} + +static void visualInfo( Display *dpy, int scrnum, QString &configs ) +{ + QString str; + XVisualInfo *visuals, temp; + int numVisuals; + long mask; + int i; + + /* get list of all visuals on this screen */ + temp.screen = scrnum; + mask = VisualScreenMask; + visuals = XGetVisualInfo( dpy, mask, &temp, &numVisuals ); + + VisualAttribs attribs; + configs.append( "Vis Vis Visual Trans buff lev render DB ste r g b a aux dep ste accum buffers MS MS\n" + " ID Depth Type parent size el type reo sz sz sz sz buf th ncl r g b a num bufs Caveat\n" + "-----------------------------------------------------------------------------------------------------------\n" ); + for ( i = 0; i < numVisuals; i++ ) { + visualAttribs( dpy, &visuals[i], &attribs ); + str.sprintf( "0x%2x %2d %-12s %d %2d %d %-4s %d %d %d %d %d %d" + " %d %2d %d %2d %2d %2d %2d %d %d %s\n", + attribs.id, + attribs.depth, + visualClassName( attribs.c_class ), + attribs.transparent, + attribs.bufferSize, + attribs.level, + attribs.rgba ? "rgba" : "ci", + attribs.doubleBuffer, + attribs.stereo, + attribs.redSize, + attribs.greenSize, + attribs.blueSize, + attribs.alphaSize, + attribs.auxBuffers, + attribs.depthSize, + attribs.stencilSize, + attribs.accumRedSize, + attribs.accumGreenSize, + attribs.accumBlueSize, + attribs.accumAlphaSize, + attribs.numSamples, + attribs.numMultisample, + caveatString( attribs.visualCaveat ) ); + configs.append( str ); + } + + + XFree( visuals ); +} + +GLInfo::GLInfo() +{ + QGLWidget gl((QWidget *) 0); + gl.makeCurrent(); + Display *dpy; + char *displayName = 0; + int numScreens, scrNum; + + dpy = gl.x11Display(); + if ( !dpy ) { + qWarning( "Error: unable to open display %s\n", displayName ); + } + + numScreens = ScreenCount( dpy ); + infotext.sprintf( "Display name: %s\nDirect rendering: %s\n", DisplayString( dpy ), + gl.format().directRendering() ? "Yes" : "No" ); + + for ( scrNum = 0; scrNum < numScreens; scrNum++ ) { + screenInfo( dpy, scrNum, infotext ); + visualInfo( dpy, scrNum, infotext ); + if ( scrNum + 1 < numScreens ) + infotext.append( "\n\n" ); + } +} + +QString GLInfo::info() +{ + return infotext; +} diff --git a/examples/demo/opengl/glinfotext.h b/examples/demo/opengl/glinfotext.h new file mode 100644 index 0000000..7d7b656 --- /dev/null +++ b/examples/demo/opengl/glinfotext.h @@ -0,0 +1,23 @@ +#include <qlayout.h> +#include <qtextview.h> +#include <qfont.h> +#include "glinfo.h" + +class GLInfoText : public QWidget +{ +public: + GLInfoText(QWidget *parent) + : QWidget(parent) + { + view = new QTextView(this); + view->setFont(QFont("courier", 10)); + view->setWordWrap(QTextEdit::NoWrap); + QHBoxLayout *l = new QHBoxLayout(this); + l->addWidget(view); + GLInfo info; + view->setText(info.info()); + } + +private: + QTextView *view; +}; diff --git a/examples/demo/opengl/gllandscape.cpp b/examples/demo/opengl/gllandscape.cpp new file mode 100644 index 0000000..e11c8c9 --- /dev/null +++ b/examples/demo/opengl/gllandscape.cpp @@ -0,0 +1,880 @@ +#include <qimage.h> +#include "gllandscape.h" + + +#include <math.h> + +#include "fbm.h" + +#ifndef PI +#define PI 3.14159 +#endif + +#if defined(Q_CC_MSVC) +#pragma warning(disable:4305) // init: truncation from const double to float +#pragma warning(disable:4244) // init: truncation from const double to float +#endif + +GLLandscape::GLLandscape( QWidget * parent, const char * name ) + : QGLWidget( parent, name ) +{ + mouseButtonDown = FALSE; + animationRunning = FALSE; + oldX = oldY = oldZ = 0.0; + landscape = 0; + vertexNormals = 0; + normals = 0; + wave = 0; + wt = 0; + cubeRot = 0; + createGrid( 50 ); + setWireframe( 0 ); +} + +GLLandscape::~GLLandscape() +{ + destroyGrid(); +} + +void GLLandscape::initializeGL() +{ + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glGetFloatv( GL_MODELVIEW_MATRIX,(GLfloat *) views[AxisView].model ); + + glTranslatef( 0.0, 0.0, -50.0 ); + glRotatef( -45, 1, 0, 0 ); + glRotatef( -45, 0, 0, 1 ); + glGetFloatv( GL_MODELVIEW_MATRIX,(GLfloat *) views[CurrentView].model ); + glGetFloatv( GL_MODELVIEW_MATRIX,(GLfloat *) views[DefaultView].model ); + + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + /* Use GL utility library function to obtain desired view */ + gluPerspective( 60, 1, 1, 250 ); + glGetFloatv( GL_PROJECTION_MATRIX, (GLfloat *)views[CurrentView].projection ); + glGetFloatv( GL_PROJECTION_MATRIX, (GLfloat *)views[DefaultView].projection ); + + qglClearColor( black ); + glDepthFunc( GL_LESS ); + calculateVertexNormals(); + + QImage tex; + tex.load("opengl/qtlogo.png"); + tex = QGLWidget::convertToGLFormat(tex); // flipped 32bit RGBA + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); + glTexImage2D(GL_TEXTURE_2D, 0, 3, tex.width(), tex.height(), 0, + GL_RGBA, GL_UNSIGNED_BYTE, tex.bits()); + initDisplayLists(); +} + +void GLLandscape::resizeGL( int width, int height ) +{ + glViewport( 0, 0, width, height ); +} + +void GLLandscape::paintGL() +{ + QString str; + GLboolean lighting; + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + switch ( mode ) { + case Wireframe: + drawWireframe(); + str = tr( "Wireframe" ); + break; + case Filled: + drawFilled(); + str = tr( "Flat shaded" ); + break; + case SmoothShaded: + str = tr( "Smooth shaded" ); + drawSmoothShaded(); + break; + case Landscape: + drawSmoothShaded(); + str = tr( "Landscape" ); + break; + } + glGetBooleanv( GL_LIGHTING, &lighting ); + if ( lighting ) + glDisable( GL_LIGHTING ); + qglColor( white ); + renderText(15, height() - 15, str); + drawAxis(); + drawCube(); + if ( lighting ) + glEnable( GL_LIGHTING ); +} + +void GLLandscape::drawAxis() +{ + glPushAttrib(GL_ALL_ATTRIB_BITS); + glViewport(15, 20, 50, 50); + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + glOrtho(-1.1, 1.1, -1.1, 1.1, 0.1, 10); + glTranslatef(0, 0, -1.2); + glRotatef(-45, 1, 0, 0); + glRotatef(-45, 0, 0, 1); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadMatrixf((GLfloat *) views[AxisView].model); + + glCallList(axisList); + qglColor(white); + renderText(1.1f, 0, 0, "x"); + renderText(0, 1.1f, 0, "y"); + renderText(0, 0, 1.1f, "z"); + + glPopMatrix(); + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glPopAttrib(); +} + +void GLLandscape::drawCube() +{ + glPushAttrib(GL_ALL_ATTRIB_BITS); + glViewport(width()-75, 0, 75, 75); + glMatrixMode( GL_PROJECTION ); + glPushMatrix(); + glLoadIdentity(); + glOrtho(-1.1, 1.1, -1.1, 1.1, 0.1, 10); + glTranslatef(0, 0, -1.2); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); + glRotatef(cubeRot, 1, 0, 0); + glRotatef(cubeRot, 0, 1, 0); + glRotatef(cubeRot, 0, 0, 1); + glTranslatef(-0.5, -0.5, -0.5); + + glCallList(cubeList); + + glPopMatrix(); + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glPopAttrib(); +} + +void GLLandscape::drawWireframe() +{ + qglColor( white ); + glBegin( GL_LINES ); + { + for ( int y = 0; y < (gridSize-1); y++ ) + for ( int x = 0; x < (gridSize-1); x++) { + glVertex3f( x-gridHalf, y-gridHalf, landscape[x][y] ); + glVertex3f( x+1-gridHalf, y-gridHalf, landscape[x+1][y] ); + glVertex3f( x-gridHalf, y-gridHalf, landscape[x][y] ); + glVertex3f( x+1-gridHalf, y+1-gridHalf, landscape[x+1][y+1] ); + + glVertex3f( x-gridHalf, y-gridHalf, landscape[x][y] ); + glVertex3f( x-gridHalf, y+1-gridHalf, landscape[x][y+1] ); + } + } + glEnd(); + glBegin( GL_LINE_STRIP ); + { + for ( int x = 0; x < gridSize; x++ ) { + glVertex3f( x-gridHalf, gridHalf-1, landscape[x][gridSize-1] ); + } + } + glEnd(); + glBegin( GL_LINE_STRIP ); + { + for ( int y = 0; y < gridSize; y++ ) { + glVertex3f( gridHalf-1, y-gridHalf, landscape[gridSize-1][y] ); + } + } + glEnd(); +} + +void GLLandscape::drawFilled() +{ + for ( int y = 0; y < gridSize-1; y++ ) + for ( int x = 0; x < gridSize-1; x++ ) { + qglColor( red ); + glBegin( GL_TRIANGLE_STRIP ); + { + glVertex3f(x-gridHalf,y-gridHalf, landscape[x][y]); + glVertex3f(x+1-gridHalf,y-gridHalf, landscape[x+1][y]); + glVertex3f(x-gridHalf,y+1-gridHalf, landscape[x][y+1]); + } + glEnd(); + qglColor( white ); + glBegin( GL_TRIANGLE_STRIP ); + { + glVertex3f(x+1-gridHalf,y-gridHalf, landscape[x+1][y]); + glVertex3f(x+1-gridHalf,y+1-gridHalf, landscape[x+1][y+1]); + glVertex3f(x-gridHalf,y+1-gridHalf, landscape[x][y+1]); + } + glEnd(); + } +} + +void GLLandscape::drawSmoothShaded() +{ + if ( mode == SmoothShaded ) { + GLfloat materialAmbient[] = { 0.00, 0.00, 1.0, 0.0 }; + GLfloat materialShininess[] = { 128.0 }; + GLfloat materialSpecular[] = { 1.0, 1.0, 1.0, 0.0 }; + + glMaterialfv( GL_FRONT, GL_SPECULAR, materialSpecular ); + glMaterialfv( GL_FRONT, GL_AMBIENT, materialAmbient ); + glMaterialfv( GL_FRONT, GL_SHININESS, materialShininess ); + } else { + GLfloat materialAmbient[] = { 0.20, 0.33, 0.20, 0.0 }; + GLfloat materialShininess[] = { 1.0 }; + GLfloat materialSpecular[] = { 0.1, 0.1, 0.1, 0.1 }; + + glMaterialfv( GL_FRONT, GL_SPECULAR, materialSpecular ); + glMaterialfv( GL_FRONT, GL_AMBIENT, materialAmbient ); + glMaterialfv( GL_FRONT, GL_SHININESS, materialShininess ); + } + + for ( int y = 0; y < gridSize-1; y++ ) + for ( int x = 0; x < gridSize-1; x++ ) { + glBegin( GL_POLYGON ); + { + glNormal3dv(vertexNormals[x][y].n); + glVertex3f(x-gridHalf,y-gridHalf,landscape[x][y]); + + glNormal3dv(vertexNormals[x+1][y].n); + glVertex3f(x+1-gridHalf, y-gridHalf, landscape[x+1][y]); + + glNormal3dv(vertexNormals[x+1][y+1].n); + glVertex3f(x+1-gridHalf, y+1-gridHalf, landscape[x+1][y+1]); + } + glEnd(); + + glBegin( GL_POLYGON ); + { + glNormal3dv(vertexNormals[x][y].n); + glVertex3f(x-gridHalf,y-gridHalf, landscape[x][y]); + + glNormal3dv(vertexNormals[x+1][y+1].n); + glVertex3f(x+1-gridHalf,y+1-gridHalf, landscape[x+1][y+1]); + + glNormal3dv(vertexNormals[x][y+1].n); + glVertex3f(x-gridHalf,y+1-gridHalf, landscape[x][y+1]); + } + glEnd(); + } + + // Draw water + if ( mode == Landscape ) { + GLfloat materialAmbient[] = { 0.00, 0.00, 1.0, 0.0 }; + GLfloat materialShininess[] = { 128.0 }; + GLfloat materialSpecular[] = { 1.0, 1.0, 1.0, 0.0 }; + + glMaterialfv( GL_FRONT, GL_SPECULAR, materialSpecular ); + glMaterialfv( GL_FRONT, GL_AMBIENT, materialAmbient ); + glMaterialfv( GL_FRONT, GL_SHININESS, materialShininess ); + + glEnable( GL_BLEND ); + glBegin( GL_POLYGON ); + { + glNormal3f( 0, 0, 1 ); + glVertex3f( -gridHalf, -gridHalf, .2 ); + glNormal3f( 0, 0, 1 ); + glVertex3f( -gridHalf, gridHalf, .2 ); + glNormal3f( 0, 0, 1 ); + glVertex3f( gridHalf, gridHalf, .2 ); + glNormal3f( 0, 0, 1 ); + glVertex3f( gridHalf, -gridHalf, .2 ); + + } + glEnd(); + glDisable( GL_BLEND ); + } +} + +void GLLandscape::setGridSize( int size ) +{ + destroyGrid(); // destroy old grid + createGrid( size ); // create new grid + initializeGL(); + updateGL(); +} + +void GLLandscape::createGrid( int size ) +{ + if ( (size % 2) != 0 ) + size++; + gridSize = size; + gridHalf = gridSize / 2; + initFractals = TRUE; + landscape = new double*[gridSize]; + normals = new gridNormals*[gridSize]; + vertexNormals = new avgNormals*[gridSize]; + wt = new double*[gridSize]; + wave = new double*[gridSize]; + for ( int i = 0; i < gridSize; i++ ) { + landscape[i] = new double[gridSize]; + normals[i] = new gridNormals[gridSize]; + vertexNormals[i] = new avgNormals[gridSize]; + wt[i] = new double[gridSize]; + wave[i] = new double[gridSize]; + + memset( landscape[i], 0, gridSize*sizeof(double) ); + memset( normals[i], 0, gridSize*sizeof(gridNormals) ); + memset( vertexNormals[i], 0, gridSize*sizeof(avgNormals) ); + memset( wt[i], 0, gridSize*sizeof(double) ); + memset( wave[i], 0, gridSize*sizeof(double) ); + } +} + +void GLLandscape::destroyGrid() +{ + if ( landscape != NULL ) { + for( int i = 0; i < gridSize; i++ ) { + delete[] landscape[i]; + delete[] normals[i]; + delete[] vertexNormals[i]; + delete[] wt[i]; + delete[] wave[i]; + } + delete[] landscape; + delete[] normals; + delete[] vertexNormals; + delete[] wt; + delete[] wave; + } + landscape = 0; +} + +void GLLandscape::rotate( GLfloat deg, Axis axis ) +{ + makeCurrent(); + glMatrixMode( GL_MODELVIEW ); + for ( int i = DefaultView; i <= AxisView; i++ ) { + glLoadMatrixf((GLfloat *) views[i].model); + if ( axis == XAxis ) + glRotatef( deg, 1, 0, 0 ); + else if ( axis == YAxis ) + glRotatef( deg, 0, 1, 0 ); + else + glRotatef( deg, 0, 0, 1 ); + glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *) views[i].model); + } + glLoadMatrixf((GLfloat *) views[CurrentView].model); +} + +void GLLandscape::rotateX( int deg ) +{ + static int oldDeg = 0; + + rotate( deg-oldDeg, XAxis ); + oldDeg = deg; + updateGL(); +} + +void GLLandscape::rotateY( int deg ) +{ + static int oldDeg = 0; + + rotate( deg-oldDeg, YAxis ); + oldDeg = deg; + updateGL(); +} + +void GLLandscape::rotateZ( int deg ) +{ + static int oldDeg = 0; + + rotate( deg-oldDeg, ZAxis ); + oldDeg = deg; + updateGL(); +} + +void GLLandscape::zoom( int z ) +{ + float zoom; + if ( z < 100 ) { + zoom = 1 + 4.99 - (z*5.0 / 100.0); + } else { + z = 200 - z; + zoom = z / 100.0; + } + makeCurrent(); + glMatrixMode( GL_MODELVIEW ); + // Always scale the original model matrix + glLoadMatrixf((GLfloat *) views[DefaultView].model); + glScalef( zoom, zoom, zoom ); + glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *) views[CurrentView].model); + updateGL(); +} + +void GLLandscape::resetGrid() +{ + setGridSize( gridSize ); +} + +void GLLandscape::fractalize() +{ + Vector p; + double value; + double roughness = 0.5; + int frequency = 50; + + p.x = p.y = p.z = 0; + // Initialise fbm routine + if ( initFractals ) { + initFractals = FALSE; + value = fBm( p, roughness, 2.0, 8.0, 1 ); + } + + // Fractalize grid + for ( int x = 0; x < gridSize; x++ ) { + for ( int y = 0; y < gridSize; y++ ) { + p.x = (double) x / (101 - frequency); + p.y = (double) y / (101 - frequency); + p.z = (double) landscape[x][y] / (101 - frequency); + value = fBm(p, roughness, 2.0, 8.0, 0); + landscape[x][y] += value; + } + } + calculateVertexNormals(); + updateGL(); +} + + +// +// Calculate the vector cross product of v and w, store result in n. +// +static void crossProduct( double v[3], double w[3], double n[3] ) +{ + n[0] = v[1]*w[2]-w[1]*v[2]; + n[1] = w[0]*v[2]-v[0]*w[2]; + n[2] = v[0]*w[1]-w[0]*v[1]; +} + +void GLLandscape::calculateVertexNormals() +{ + double len, v[3], v2[3], w[3], w2[3], n[3], n2[3]; + + // Calculate the surface normals for all polygons in the + // height field + for ( int i = 0; i < (gridSize-1); i++ ) + for ( int k = 0; k < (gridSize-1); k++ ) { + /* Lower poly normal */ + v[0] = 1; // (i+1)-i + v[1] = 0; // k-k + v[2] = landscape[i+1][k]-landscape[i][k]; + w[0] = 1; // (i+1)-i + w[1] = 1; // (k+1)-k + w[2] = landscape[i+1][k+1]-landscape[i][k]; + crossProduct( v, w, n ); + len = sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]); + normals[i][k].l[0] = n[0]/len; + normals[i][k].l[1] = n[1]/len; + normals[i][k].l[2] = n[2]/len; + + /* Upper poly normal */ + v2[0] = -1.0; // i-(i+1); + v2[1] = 0.0; // (k+1)-(k+1); + v2[2] = landscape[i][k+1]-landscape[i+1][k+1]; + w2[0] = -1.0; // i-(i+1); + w2[1] = -1.0; // k-(k+1); + w2[2] = landscape[i][k]-landscape[i+1][k+1]; + crossProduct( v2, w2, n2 ); + len = sqrt(n2[0]*n2[0]+n2[1]*n2[1]+n2[2]*n2[2]); + normals[i][k].u[0] = n2[0]/len; + normals[i][k].u[1] = n2[1]/len; + normals[i][k].u[2] = n2[2]/len; + } + + // Calculate proper vertex normals + averageNormals(); +} + +void GLLandscape::averageNormals() +{ + // Calculate the average surface normal for a vertex based on + // the normals of the surrounding polygons + for ( int i = 0; i < gridSize; i++ ) + for ( int k = 0; k < gridSize; k++ ) { + if ( i > 0 && k > 0 && i < (gridSize-1) && k < (gridSize-1) ) { + // For vertices that are *not* on the edge of the height field + for ( int t = 0; t < 3; t++ ) // X, Y and Z components + vertexNormals[i][k].n[t] = ( normals[i][k].u[t] + + normals[i][k].l[t] + + normals[i][k-1].u[t] + + normals[i-1][k-1].u[t] + + normals[i-1][k-1].l[t] + + normals[i-1][k].l[t] )/6.0; + } else { + // Vertices that are on the edge of the height field require + // special attention.. + if ( i == 0 && k == 0 ) { + for ( int t = 0; t < 3; t++ ) + vertexNormals[i][k].n[t] = ( normals[i][k].u[t] + + normals[i][k].l[t] )/2.0; + } else if ( i == gridSize-1 && k == gridSize-1 ) { + for ( int t = 0; t < 3; t++ ) + vertexNormals[i][k].n[t] = ( normals[i][k].u[t] + + normals[i][k].l[t] )/2.0; + } else if ( i == gridSize-1) { + for ( int t = 0; t < 3; t++ ) + vertexNormals[i][k].n[t] = vertexNormals[i-1][k].n[t]; + } else if ( k == gridSize-1 ) { + for ( int t = 0; t < 3; t++ ) + vertexNormals[i][k].n[t] = vertexNormals[i][k-1].n[t]; + } else if ( k > 0 ) { + for ( int t = 0; t < 3; t++ ) + vertexNormals[i][k].n[t] = (normals[i][k].u[t] + + normals[i][k].l[t] + + normals[i][k-1].u[t])/3.0; + } else if ( i > 0 ) { + for ( int t = 0; t < 3; t++ ) + vertexNormals[i][k].n[t] = (normals[i][k].u[t] + + normals[i][k].l[t] + + normals[i-1][k].l[t])/3.0; + } + } + } +} + +void GLLandscape::setWireframe( int state ) +{ + if ( state != 1 ) { + // Enable line antialiasing + makeCurrent(); + glEnable( GL_LINE_SMOOTH ); + glEnable( GL_BLEND ); + glDisable( GL_DEPTH_TEST ); + glDisable( GL_LIGHTING ); + glDisable( GL_NORMALIZE ); + + glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + glHint( GL_LINE_SMOOTH_HINT, GL_DONT_CARE ); + + mode = Wireframe; + updateGL(); + } +} + +void GLLandscape::setFilled( int state ) +{ + if ( state != 1 ) { + makeCurrent(); + glEnable( GL_DEPTH_TEST ); + glDisable( GL_LINE_SMOOTH ); + glDisable( GL_BLEND ); + glDisable( GL_LIGHTING ); + glDisable( GL_NORMALIZE ); + + mode = Filled; + updateGL(); + } +} + +void GLLandscape::setSmoothShaded( int state ) +{ + if ( state != 1 ) { + makeCurrent(); + glEnable( GL_DEPTH_TEST ); + glEnable( GL_LIGHTING ); + glEnable( GL_LIGHT0 ); + glEnable( GL_NORMALIZE ); + glDisable( GL_LINE_SMOOTH ); + glDisable( GL_BLEND ); + + glShadeModel( GL_SMOOTH ); + glLightModeli( GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE ); + + // Setup lighting and material properties + GLfloat position[] = { 15.0, -15.0, 15.0, 0.0 }; + GLfloat ambient[] = { 0.50, 0.50, 0.50, 0.0 }; + GLfloat diffuse[] = { 1.00, 1.00, 1.00, 0.0 }; + GLfloat specular[] = { 1.0, 1.0, 1.0, 0.0 }; + GLfloat materialAmbient[] = { 0.00, 0.00, 1.0, 0.0 }; + // GLfloat materialDiffuse[] = { 1.00, 1.00, 1.0, 0.0 }; + GLfloat materialShininess[] = { 128.0 }; + GLfloat materialSpecular[] = { 1.0, 1.0, 1.0, 0.0 }; + + glMaterialfv( GL_FRONT, GL_SPECULAR, materialSpecular ); + // glMaterialfv( GL_FRONT, GL_DIFFUSE, materialDiffuse ); + glMaterialfv( GL_FRONT, GL_AMBIENT, materialAmbient ); + glMaterialfv( GL_FRONT, GL_SHININESS, materialShininess ); + + glLightfv( GL_LIGHT0, GL_POSITION, position ); + glLightfv( GL_LIGHT0, GL_AMBIENT, ambient ); + glLightfv( GL_LIGHT0, GL_DIFFUSE, diffuse ); + glLightfv( GL_LIGHT0, GL_SPECULAR, specular ); + + mode = SmoothShaded; + calculateVertexNormals(); + updateGL(); + } +} + +void GLLandscape::setLandscape( int state ) +{ + if ( state != 1 ) { + makeCurrent(); + glEnable( GL_DEPTH_TEST ); + glEnable( GL_LIGHTING ); + glEnable( GL_LIGHT0 ); + glEnable( GL_NORMALIZE ); + glDisable( GL_LINE_SMOOTH ); + glDisable( GL_BLEND ); + + glShadeModel( GL_SMOOTH ); + glLightModeli( GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE ); + + // Setup lighting and material properties + GLfloat position[] = { 15.0, -15.0, 15.0, 0.0 }; + GLfloat ambient[] = { 0.50, 0.50, 0.50, 0.0 }; + GLfloat diffuse[] = { 1.00, 1.00, 1.00, 0.0 }; + GLfloat specular[] = { 1.0, 1.0, 1.0, 0.0 }; + + glLightfv( GL_LIGHT0, GL_POSITION, position ); + glLightfv( GL_LIGHT0, GL_AMBIENT, ambient ); + glLightfv( GL_LIGHT0, GL_DIFFUSE, diffuse ); + glLightfv( GL_LIGHT0, GL_SPECULAR, specular ); + + glBlendFunc(GL_SRC_ALPHA, GL_SRC_COLOR ); + + mode = Landscape; + calculateVertexNormals(); + updateGL(); + } +} + +void GLLandscape::mousePressEvent( QMouseEvent *e ) +{ + oldPos = e->pos(); + mouseButtonDown = TRUE; +} + +void GLLandscape::mouseReleaseEvent( QMouseEvent *e ) +{ + oldPos = e->pos(); + mouseButtonDown = FALSE; +} + +void GLLandscape::mouseMoveEvent( QMouseEvent *e ) +{ + GLfloat rx = (GLfloat) (e->x() - oldPos.x()) / width(); + GLfloat ry = (GLfloat) (e->y() - oldPos.y()) / height(); + + if ( e->state() == LeftButton ) { + // Left button down - rotate around X and Y axes + oldX = 180*ry; + oldY = 180*rx; + rotate( oldX, XAxis ); + rotate( oldY, YAxis ); + updateGL(); + } else if ( e->state() == RightButton ) { + // Right button down - rotate around X and Z axes + oldX = 180*ry; + oldZ = 180*rx; + rotate( oldX, XAxis ); + rotate( oldZ, ZAxis ); + updateGL(); + } + oldPos = e->pos(); +} + +void GLLandscape::timerEvent( QTimerEvent *e ) +{ + if (e->timerId() == cubeTimer) { + cubeRot += 1; + if (!animationRunning) + updateGL(); + return; + } + + int dx, dy; // disturbance point + float s, v, W, t; + int i, j; + + if ( mode == Landscape ) { + dx = dy = 0; + } else { + dx = dy = gridSize >> 1; + } + W = 0.3; + v = -4; // wave speed + + for ( i = 0; i < gridSize; i++ ) + for ( j = 0; j < gridSize; j++ ) + { + s = sqrt( (double) ( (j - dx) * (j - dx) + (i - dy) * (i - dy) ) ); + wt[i][j] += 0.1; + t = s / v; + + if ( mode == Landscape ) { + if ( (landscape[i][j] + wave[i][j]) < 0 ) + landscape[i][j] -= wave[i][j]; + if ( (dy - j != 0) || (dx - i != 0) ) + wave[i][j] = (3 * sin( 2 * PI * W * (wt[i][j] + t ))) / + (0.2*(sqrt( pow((double)(dx-i), 2) + pow((double)(dy-j), 2))+2)); + else + wave[i][j] = ( 3 * sin( 2 * PI * W * ( wt[i][j] + t ) ) ); + if ( landscape[i][j] + wave[i][j] < 0 ) + landscape[i][j] += wave[i][j]; + + } else { + landscape[i][j] -= wave[i][j]; + + if ( s != 0 ) + wave[i][j] = 2 * sin(2 * PI * W * ( wt[i][j] + t )) / + (0.2*(s + 2)); + else + wave[i][j] = 2 * sin( 2 * PI * W * ( wt[i][j] + t ) ); + landscape[i][j] += wave[i][j]; + } + + } + if ( mode == SmoothShaded || mode == Landscape ) + calculateVertexNormals(); + updateGL(); +} + +void GLLandscape::toggleWaveAnimation( bool state ) +{ + if (state) { + animTimer = startTimer(20); + animationRunning = TRUE; + } else { + killTimer(animTimer); + animationRunning = FALSE; + } +} + +void GLLandscape::showEvent( QShowEvent * ) +{ + if (animationRunning) + animTimer = startTimer(20); + cubeTimer = startTimer(50); +} + +void GLLandscape::hideEvent( QHideEvent * ) +{ + if (animationRunning) + killTimer(animTimer); + killTimer(cubeTimer); +} + +void GLLandscape::initDisplayLists() +{ + // axisList + axisList = glGenLists(1); + glNewList(axisList, GL_COMPILE); + + glEnable(GL_LINE_SMOOTH); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_DEPTH_TEST); + glColor3f(1.0, 0.0, 0.0); + glBegin(GL_LINES); + { + glColor3f(1.0, 0.0, 0.0); + glVertex3f(-1.0f, 0, 0); // x axis + glVertex3f(1.0f, 0, 0); + + glVertex3f(1.0f, 0, 0); + glVertex3f(0.8f, 0.2f, 0); + glVertex3f(1.0f, 0, 0); + glVertex3f(0.8f, -.2f, 0); + + glColor3f(0.0, 1.0, 0.0); + glVertex3f(0, -1.0f, 0); // y axis + glVertex3f(0, 1.0f, 0); + + glVertex3f(0, 1.0f, 0); + glVertex3f(0.2f, 0.8f, 0); + glVertex3f(0, 1.0f, 0); + glVertex3f(-0.2f, 0.8f, 0); + + glColor3f(0.5, 0.5, 1.0); + glVertex3f(0, 0, -1.0f); // z axis + glVertex3f(0, 0, 1.0f); + + glVertex3f(0, 0, 1.0f); + glVertex3f(0, 0.2f, 0.8f); + glVertex3f(0, 0, 1.0f); + glVertex3f(0,-0.2f, 0.8f); + } + glEnd(); + + glEndList(); + + // cubeList + cubeList = glGenLists(1); + glNewList(cubeList, GL_COMPILE); + + glEnable(GL_TEXTURE_2D); + glEnable(GL_DEPTH_TEST); + glEnable(GL_CULL_FACE); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_SRC_COLOR); + + glBegin( GL_QUADS ); + { + glTexCoord2f( 0.0, 0.0 ); glVertex3f( 0.0, 0.0, 0.0 ); + glTexCoord2f( 1.0, 0.0 ); glVertex3f( 1.0, 0.0, 0.0 ); + glTexCoord2f( 1.0, 0.0 ); glVertex3f( 1.0, 0.0, 0.0 ); + glTexCoord2f( 1.0, 1.0 ); glVertex3f( 1.0, 1.0, 0.0 ); + glTexCoord2f( 1.0, 1.0 ); glVertex3f( 1.0, 1.0, 0.0 ); + glTexCoord2f( 0.0, 1.0 ); glVertex3f( 0.0, 1.0, 0.0 ); + glTexCoord2f( 0.0, 1.0 ); glVertex3f( 0.0, 1.0, 0.0 ); + glTexCoord2f( 0.0, 0.0 ); glVertex3f( 0.0, 0.0, 0.0 ); + + glTexCoord2f( 0.0, 0.0 ); glVertex3f( 0.0, 0.0, 1.0 ); + glTexCoord2f( 0.0, 1.0 ); glVertex3f( 0.0, 1.0, 1.0 ); + glTexCoord2f( 0.0, 1.0 ); glVertex3f( 0.0, 1.0, 1.0 ); + glTexCoord2f( 1.0, 1.0 ); glVertex3f( 1.0, 1.0, 1.0 ); + glTexCoord2f( 1.0, 1.0 ); glVertex3f( 1.0, 1.0, 1.0 ); + glTexCoord2f( 1.0, 0.0 ); glVertex3f( 1.0, 0.0, 1.0 ); + glTexCoord2f( 1.0, 0.0 ); glVertex3f( 1.0, 0.0, 1.0 ); + glTexCoord2f( 0.0, 0.0 ); glVertex3f( 0.0, 0.0, 1.0 ); + + glTexCoord2f( 0.0, 0.0 ); glVertex3f( 0.0, 0.0, 0.0 ); + glTexCoord2f( 1.0, 0.0 ); glVertex3f( 0.0, 0.0, 1.0 ); + glTexCoord2f( 1.0, 0.0 ); glVertex3f( 0.0, 0.0, 1.0 ); + glTexCoord2f( 1.0, 1.0 ); glVertex3f( 1.0, 0.0, 1.0 ); + glTexCoord2f( 1.0, 1.0 ); glVertex3f( 1.0, 0.0, 1.0 ); + glTexCoord2f( 0.0, 1.0 ); glVertex3f( 1.0, 0.0, 0.0 ); + glTexCoord2f( 0.0, 1.0 ); glVertex3f( 1.0, 0.0, 0.0 ); + glTexCoord2f( 0.0, 0.0 ); glVertex3f( 0.0, 0.0, 0.0 ); + + glTexCoord2f( 1.0, 0.0 ); glVertex3f( 0.0, 1.0, 0.0 ); + glTexCoord2f( 0.0, 0.0 ); glVertex3f( 1.0, 1.0, 0.0 ); + glTexCoord2f( 0.0, 0.0 ); glVertex3f( 1.0, 1.0, 0.0 ); + glTexCoord2f( 0.0, 1.0 ); glVertex3f( 1.0, 1.0, 1.0 ); + glTexCoord2f( 0.0, 1.0 ); glVertex3f( 1.0, 1.0, 1.0 ); + glTexCoord2f( 1.0, 1.0 ); glVertex3f( 0.0, 1.0, 1.0 ); + glTexCoord2f( 1.0, 1.0 ); glVertex3f( 0.0, 1.0, 1.0 ); + glTexCoord2f( 1.0, 0.0 ); glVertex3f( 0.0, 1.0, 0.0 ); + + glTexCoord2f( 0.0, 0.0 ); glVertex3f( 1.0, 0.0, 0.0 ); + glTexCoord2f( 1.0, 0.0 ); glVertex3f( 1.0, 0.0, 1.0 ); + glTexCoord2f( 1.0, 0.0 ); glVertex3f( 1.0, 0.0, 1.0 ); + glTexCoord2f( 1.0, 1.0 ); glVertex3f( 1.0, 1.0, 1.0 ); + glTexCoord2f( 1.0, 1.0 ); glVertex3f( 1.0, 1.0, 1.0 ); + glTexCoord2f( 0.0, 1.0 ); glVertex3f( 1.0, 1.0, 0.0 ); + glTexCoord2f( 0.0, 1.0 ); glVertex3f( 1.0, 1.0, 0.0 ); + glTexCoord2f( 0.0, 0.0 ); glVertex3f( 1.0, 0.0, 0.0 ); + + glTexCoord2f( 1.0, 0.0 ); glVertex3f( 0.0, 0.0, 0.0 ); + glTexCoord2f( 0.0, 0.0 ); glVertex3f( 0.0, 1.0, 0.0 ); + glTexCoord2f( 0.0, 0.0 ); glVertex3f( 0.0, 1.0, 0.0 ); + glTexCoord2f( 0.0, 1.0 ); glVertex3f( 0.0, 1.0, 1.0 ); + glTexCoord2f( 0.0, 1.0 ); glVertex3f( 0.0, 1.0, 1.0 ); + glTexCoord2f( 1.0, 1.0 ); glVertex3f( 0.0, 0.0, 1.0 ); + glTexCoord2f( 1.0, 1.0 ); glVertex3f( 0.0, 0.0, 1.0 ); + glTexCoord2f( 1.0, 0.0 ); glVertex3f( 0.0, 0.0, 0.0 ); + } + glEnd(); + glDisable(GL_TEXTURE_2D); + + glEndList(); +} diff --git a/examples/demo/opengl/gllandscape.h b/examples/demo/opengl/gllandscape.h new file mode 100644 index 0000000..ca87676 --- /dev/null +++ b/examples/demo/opengl/gllandscape.h @@ -0,0 +1,98 @@ +#ifndef GLLANDSCAPE_H +#define GLLANDSCAPE_H + +#include <qgl.h> + +class GLLandscape : public QGLWidget +{ + Q_OBJECT + +public: + GLLandscape( QWidget * parent = 0, const char * name = 0 ); + ~GLLandscape(); + +public slots: + void rotateX( int ); + void rotateY( int ); + void rotateZ( int ); + void zoom( int ); + void fractalize(); + void resetGrid(); + + void setWireframe( int ); + void setFilled( int ); + void setSmoothShaded( int ); + void setLandscape( int ); + void setGridSize( int ); + + void toggleWaveAnimation( bool ); + +signals: + void rotatedX( int ); + void rotatedY( int ); + void rotatedZ( int ); + +protected: + void paintGL(); + void initializeGL(); + void resizeGL( int w, int h ); + void mousePressEvent( QMouseEvent * ); + void mouseReleaseEvent( QMouseEvent * ); + void mouseMoveEvent( QMouseEvent * ); + void timerEvent( QTimerEvent * ); + void showEvent( QShowEvent * ); + void hideEvent( QHideEvent * ); + + void drawWireframe(); + void drawFilled(); + void drawSmoothShaded(); + void drawAxis(); + void drawCube(); + +private: + enum Axis { XAxis, YAxis, ZAxis }; + enum RenderModes { Wireframe, Filled, SmoothShaded, Landscape }; + enum Views { DefaultView, CurrentView, AxisView }; + + void rotate( GLfloat deg, Axis axis ); + void calculateVertexNormals(); + void averageNormals(); + void createGrid( int size ); + void destroyGrid(); + void initDisplayLists(); + + RenderModes mode; + + typedef struct grid_normals { + double u[3], l[3]; + } gridNormals; + + // Structure used to store the vertex normals for the landscape + typedef struct avg_normals { + double n[3]; + } avgNormals; + + typedef struct viewMatrix { + GLfloat model[4][4]; // OpenGL model view matrix for the view + GLfloat projection[4][4]; // OpenGL projection matrix for the view + } viewMatrix; + + double ** landscape; // Height field data + double ** wave; // Wave data + double ** wt; // Parameterized wave data + gridNormals ** normals; + avgNormals ** vertexNormals; + viewMatrix views[3]; + + QPoint oldPos; + GLfloat oldX, oldY, oldZ; + bool initFractals; + int gridSize, gridHalf; + bool animationRunning; + bool mouseButtonDown; + int cubeTimer, animTimer; + GLfloat cubeRot; + GLint axisList, cubeList; +}; + +#endif diff --git a/examples/demo/opengl/gllandscapeviewer.ui b/examples/demo/opengl/gllandscapeviewer.ui new file mode 100644 index 0000000..558cc35 --- /dev/null +++ b/examples/demo/opengl/gllandscapeviewer.ui @@ -0,0 +1,623 @@ +<!DOCTYPE UI><UI version="3.0" stdsetdef="1"> +<class>GLLandscapeViewer</class> +<widget class="QWidget"> + <property name="name"> + <cstring>GLLandscapeViewer</cstring> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>731</width> + <height>519</height> + </rect> + </property> + <property name="caption"> + <string>Qt/OpenGL example</string> + </property> + <property name="layoutMargin" stdset="0"> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLayoutWidget" row="1" column="0"> + <property name="name"> + <cstring>Layout9</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>18</number> + </property> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>Layout5</cstring> + </property> + <vbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLabel"> + <property name="name"> + <cstring>TextLabel1</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>1</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>X-rotation</string> + </property> + </widget> + <widget class="QThumbWheel"> + <property name="name"> + <cstring>wheelX</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>100</width> + <height>30</height> + </size> + </property> + </widget> + </vbox> + </widget> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>Layout6</cstring> + </property> + <vbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLabel"> + <property name="name"> + <cstring>TextLabel1_2</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>1</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Y-rotation</string> + </property> + </widget> + <widget class="QThumbWheel"> + <property name="name"> + <cstring>wheelY</cstring> + </property> + <property name="minimumSize"> + <size> + <width>100</width> + <height>30</height> + </size> + </property> + </widget> + </vbox> + </widget> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>Layout7</cstring> + </property> + <vbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLabel"> + <property name="name"> + <cstring>TextLabel1_3</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>1</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Z-rotation</string> + </property> + </widget> + <widget class="QThumbWheel"> + <property name="name"> + <cstring>wheelZ</cstring> + </property> + <property name="minimumSize"> + <size> + <width>100</width> + <height>30</height> + </size> + </property> + </widget> + </vbox> + </widget> + </hbox> + </widget> + <widget class="QLayoutWidget" row="2" column="0"> + <property name="name"> + <cstring>Layout15</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QButtonGroup"> + <property name="name"> + <cstring>ButtonGroup2</cstring> + </property> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>1</hsizetype> + <vsizetype>1</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title"> + <string>Rendering mode</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QRadioButton" row="0" column="0"> + <property name="name"> + <cstring>RadioButton1</cstring> + </property> + <property name="text"> + <string>&Wireframe</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + <widget class="QRadioButton" row="0" column="1"> + <property name="name"> + <cstring>RadioButton1_2</cstring> + </property> + <property name="text"> + <string>Fl&at shaded</string> + </property> + </widget> + <widget class="QRadioButton" row="0" column="2"> + <property name="name"> + <cstring>RadioButton1_3</cstring> + </property> + <property name="text"> + <string>&Smooth shaded</string> + </property> + </widget> + <widget class="QRadioButton" row="0" column="3"> + <property name="name"> + <cstring>RadioButton1_3_2</cstring> + </property> + <property name="text"> + <string>&Landscape</string> + </property> + </widget> + </grid> + </widget> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>Layout14</cstring> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QPushButton" row="0" column="1"> + <property name="name"> + <cstring>fractalize_btn_2</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>0</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>&Fractalize</string> + </property> + <property name="autoRepeat"> + <bool>true</bool> + </property> + </widget> + <widget class="QPushButton" row="0" column="2"> + <property name="name"> + <cstring>reset_btn</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>0</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>&Reset grid</string> + </property> + <property name="autoRepeat"> + <bool>true</bool> + </property> + </widget> + <widget class="QPushButton" row="0" column="0"> + <property name="name"> + <cstring>animate_btn</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>0</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>&Animate</string> + </property> + <property name="toggleButton"> + <bool>true</bool> + </property> + <property name="autoRepeat"> + <bool>true</bool> + </property> + </widget> + </grid> + </widget> + </hbox> + </widget> + <widget class="QLayoutWidget" row="0" column="0"> + <property name="name"> + <cstring>Layout19</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>Layout18</cstring> + </property> + <vbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLabel"> + <property name="name"> + <cstring>TextLabel2</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>1</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Zoom</string> + </property> + </widget> + <widget class="QThumbWheel"> + <property name="name"> + <cstring>wheelZoom</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>0</hsizetype> + <vsizetype>7</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>30</width> + <height>0</height> + </size> + </property> + </widget> + <widget class="QLabel"> + <property name="name"> + <cstring>TextLabel2_2</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>1</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Size</string> + </property> + </widget> + <widget class="QThumbWheel"> + <property name="name"> + <cstring>wheelSize</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>0</hsizetype> + <vsizetype>7</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>30</width> + <height>0</height> + </size> + </property> + </widget> + </vbox> + </widget> + <widget class="QFrame"> + <property name="name"> + <cstring>Frame5</cstring> + </property> + <property name="frameShape"> + <enum>StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>Raised</enum> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>1</number> + </property> + <property name="spacing"> + <number>0</number> + </property> + <widget class="GLLandscape"> + <property name="name"> + <cstring>landscape</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>7</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </hbox> + </widget> + </hbox> + </widget> + </grid> +</widget> +<customwidgets> + <customwidget> + <class>GLLandscape</class> + <header location="local">gllandscape.h</header> + <sizehint> + <width>100</width> + <height>100</height> + </sizehint> + <container>0</container> + <sizepolicy> + <hordata>3</hordata> + <verdata>3</verdata> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + <pixmap>image0</pixmap> + <signal>rotatedX(int)</signal> + <slot access="public" specifier="">rotateZ(int)</slot> + <slot access="public" specifier="">rotateY(int)</slot> + <slot access="public" specifier="">rotateX(int)</slot> + <slot access="public" specifier="">zoom(int)</slot> + <slot access="public" specifier="">fractalize()</slot> + <slot access="public" specifier="">setWireframe(int)</slot> + <slot access="public" specifier="">setFilled(int)</slot> + <slot access="public" specifier="">setGridSize(int)</slot> + <slot access="public" specifier="">toggleWaveAnimation(bool)</slot> + <slot access="public" specifier="">setSmoothShaded(int)</slot> + <slot access="public" specifier="">setLandscape(int)</slot> + <slot access="public" specifier="">resetGrid()</slot> + </customwidget> + <customwidget> + <class>QThumbWheel</class> + <header location="local">qthumbwheel.h</header> + <sizehint> + <width>100</width> + <height>16</height> + </sizehint> + <container>0</container> + <sizepolicy> + <hordata>7</hordata> + <verdata>0</verdata> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + <pixmap>image0</pixmap> + <signal>valueChanged(int)</signal> + </customwidget> +</customwidgets> +<images> + <image name="image0"> + <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b722ddac1741fc04c5a3201e6615f43085390f22febbb65dd6666dd821dda36996b552b0df6d4055e2d937fdcd82bd361da8f3ab6ddf87e3fa23a431e01e98cb99901a2c6c1ff78bcbf19fe372713275ed6908f441ab51300617649108624641d22a9427c21a192405241a256e08e4850311172a3b95d87159742e98ef09bda403e03271f6a5bc663e9d8214279afd05eaa048f11e242f753c27bb21ee9cef4afc00c1c26728</data> + </image> +</images> +<connections> + <connection> + <sender>RadioButton1</sender> + <signal>stateChanged(int)</signal> + <receiver>landscape</receiver> + <slot>setWireframe(int)</slot> + </connection> + <connection> + <sender>RadioButton1_2</sender> + <signal>stateChanged(int)</signal> + <receiver>landscape</receiver> + <slot>setFilled(int)</slot> + </connection> + <connection> + <sender>animate_btn</sender> + <signal>toggled(bool)</signal> + <receiver>landscape</receiver> + <slot>toggleWaveAnimation(bool)</slot> + </connection> + <connection> + <sender>RadioButton1_3</sender> + <signal>stateChanged(int)</signal> + <receiver>landscape</receiver> + <slot>setSmoothShaded(int)</slot> + </connection> + <connection> + <sender>wheelY</sender> + <signal>valueChanged(int)</signal> + <receiver>landscape</receiver> + <slot>rotateY(int)</slot> + </connection> + <connection> + <sender>wheelZ</sender> + <signal>valueChanged(int)</signal> + <receiver>landscape</receiver> + <slot>rotateZ(int)</slot> + </connection> + <connection> + <sender>wheelSize</sender> + <signal>valueChanged(int)</signal> + <receiver>landscape</receiver> + <slot>setGridSize(int)</slot> + </connection> + <connection> + <sender>wheelZoom</sender> + <signal>valueChanged(int)</signal> + <receiver>landscape</receiver> + <slot>zoom(int)</slot> + </connection> + <connection> + <sender>wheelX</sender> + <signal>valueChanged(int)</signal> + <receiver>landscape</receiver> + <slot>rotateX(int)</slot> + </connection> + <connection> + <sender>RadioButton1_3_2</sender> + <signal>stateChanged(int)</signal> + <receiver>landscape</receiver> + <slot>setLandscape(int)</slot> + </connection> + <connection> + <sender>reset_btn</sender> + <signal>clicked()</signal> + <receiver>landscape</receiver> + <slot>resetGrid()</slot> + </connection> + <connection> + <sender>fractalize_btn_2</sender> + <signal>clicked()</signal> + <receiver>landscape</receiver> + <slot>fractalize()</slot> + </connection> +</connections> +<tabstops> + <tabstop>RadioButton1</tabstop> + <tabstop>RadioButton1_2</tabstop> + <tabstop>RadioButton1_3</tabstop> + <tabstop>RadioButton1_3_2</tabstop> + <tabstop>fractalize_btn_2</tabstop> + <tabstop>reset_btn</tabstop> + <tabstop>animate_btn</tabstop> +</tabstops> +<includes> + <include location="local" impldecl="in implementation">gllandscapeviewer.ui.h</include> +</includes> +<slots> + <slot access="protected">init()</slot> + <slot access="protected">destroy()</slot> +</slots> +<layoutdefaults spacing="6" margin="11"/> +</UI> diff --git a/examples/demo/opengl/gllandscapeviewer.ui.h b/examples/demo/opengl/gllandscapeviewer.ui.h new file mode 100644 index 0000000..395519d --- /dev/null +++ b/examples/demo/opengl/gllandscapeviewer.ui.h @@ -0,0 +1,37 @@ +/**************************************************************************** +** ui.h extension file, included from the uic-generated form implementation. +** +** If you wish to add, delete or rename slots use Qt Designer which will +** update this file, preserving your code. Create an init() slot in place of +** a constructor, and a destroy() slot in place of a destructor. +*****************************************************************************/ + + +void GLLandscapeViewer::init() +{ + wheelX->setOrientation( Horizontal ); + wheelY->setOrientation( Horizontal ); + wheelZ->setOrientation( Horizontal ); + + wheelZoom->setOrientation( Vertical ); + wheelZoom->setRange( 0, 200 ); + wheelZoom->setValue( 100 ); + + wheelSize->setOrientation( Vertical ); + wheelSize->setRange( 25, 200 ); + wheelSize->setValue( 50 ); + wheelSize->setSteps( 10, 10 ); + + wheelX->setRange( 0, 360 ); + wheelY->setRange( 0, 360 ); + wheelZ->setRange( 0, 360 ); + + wheelX->setTransmissionRatio( 0.5 ); + wheelY->setTransmissionRatio( 0.5 ); + wheelZ->setTransmissionRatio( 0.5 ); +} + +void GLLandscapeViewer::destroy() +{ + +} diff --git a/examples/demo/opengl/gllogo.bmp b/examples/demo/opengl/gllogo.bmp Binary files differnew file mode 100644 index 0000000..ee64a10 --- /dev/null +++ b/examples/demo/opengl/gllogo.bmp diff --git a/examples/demo/opengl/gltexobj.cpp b/examples/demo/opengl/gltexobj.cpp new file mode 100644 index 0000000..60627da --- /dev/null +++ b/examples/demo/opengl/gltexobj.cpp @@ -0,0 +1,210 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +/**************************************************************************** +** +** This is a simple QGLWidget demonstrating the use of QImages for textures. +** +** Much of the GL code is inspired by the 'spectex' and 'texcyl' +** public domain demo programs by Brian Paul. +** +****************************************************************************/ + +#include "gltexobj.h" +#include <qimage.h> + +/*! + Create a GLTexobj widget +*/ + +GLTexobj::GLTexobj( QWidget* parent, const char* name, WFlags f ) + : GLControlWidget( parent, name, 0, f ), impX( -2 ), impY( 0.5 ), impZ( 1 ) +{ + object = 0; +} + +/*! + Release allocated resources +*/ + +GLTexobj::~GLTexobj() +{ + makeCurrent(); + glDeleteLists( object, 1 ); +} + + +/*! + Paint the texobj. The actual openGL commands for drawing the texobj are + performed here. +*/ + +void GLTexobj::paintGL() +{ + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + glPushMatrix(); + transform(); + glCallList( object ); + drawText(); + glPushAttrib( GL_LIGHTING_BIT | GL_TEXTURE_BIT ); + glDisable( GL_LIGHTING ); + glDisable( GL_TEXTURE_2D ); + qglColor( green ); + glLineWidth( 1.0 ); + glBegin( GL_LINES ); + { + glVertex3f( 0.0f, 0.0f, 1.0f ); + glVertex3f( 0.98f, 0.98f, 0.98f ); + } + glEnd(); + renderText( 1.0, 1.0, 1.0, "Can", QFont( "helvetica", 12, QFont::Bold, TRUE ) ); + glPopAttrib(); + glPopMatrix(); +} + + +/*! + Set up the OpenGL rendering state, and define display list +*/ + +void GLTexobj::initializeGL() +{ + // Set up the lights + + GLfloat whiteDir[4] = {2.0, 2.0, 2.0, 1.0}; + GLfloat whiteAmb[4] = {1.0, 1.0, 1.0, 1.0}; + GLfloat lightPos[4] = {30.0, 30.0, 30.0, 1.0}; + + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + glEnable(GL_DEPTH_TEST); + glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, whiteAmb); + + glMaterialfv(GL_FRONT, GL_DIFFUSE, whiteDir); + glMaterialfv(GL_FRONT, GL_SPECULAR, whiteDir); + glMaterialf(GL_FRONT, GL_SHININESS, 20.0); + + glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteDir); // enable diffuse + glLightfv(GL_LIGHT0, GL_SPECULAR, whiteDir); // enable specular + glLightfv(GL_LIGHT0, GL_POSITION, lightPos); + + // Set up the textures + + QImage tex1, tex2, buf; + + if ( !buf.load( "opengl/gllogo.bmp" ) ) { // Load first image from file + qWarning( "Could not read image file, using single-color instead." ); + QImage dummy( 128, 128, 32 ); + dummy.fill( Qt::green.rgb() ); + buf = dummy; + } + tex1 = QGLWidget::convertToGLFormat( buf ); // flipped 32bit RGBA + + if ( !buf.load( "opengl/qtlogo.bmp" ) ) { // Load first image from file + qWarning( "Could not read image file, using single-color instead." ); + QImage dummy( 128, 128, 32 ); + dummy.fill( Qt::red.rgb() ); + buf = dummy; + } + tex2 = QGLWidget::convertToGLFormat( buf ); // flipped 32bit RGBA + + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); + glEnable( GL_TEXTURE_2D ); + + // Set up various other stuff + + glClearColor( 0.0, 0.0, 0.0, 0.0 ); // Let OpenGL clear to black + glEnable( GL_CULL_FACE ); // don't need Z testing for convex objects + glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST ); + + // Make the object display list + + object = makeObject( tex1, tex2 ); // Generate an OpenGL display list +} + + + +/*! + Set up the OpenGL view port, matrix mode, etc. +*/ + +void GLTexobj::resizeGL( int w, int h ) +{ + glViewport( 0, 0, w, h ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glFrustum( -1.0, 1.0, -1.0, 1.0, 10.0, 100.0 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -70.0 ); +} + + +/*! + Generate an OpenGL display list for the object to be shown, i.e. the texobj +*/ + +GLuint GLTexobj::makeObject( const QImage& tex1, const QImage& tex2 ) +{ + GLUquadricObj* q = gluNewQuadric(); + GLuint cylinderObj = glGenLists(1); + glNewList( cylinderObj, GL_COMPILE ); + + glTranslatef( 0.0, 0.0, -1.0 ); + + // cylinder + glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1.width(), tex1.height(), 0, + GL_RGBA, GL_UNSIGNED_BYTE, tex1.bits() ); + gluQuadricTexture( q, GL_TRUE ); + gluCylinder(q, 0.6, 0.6, 2.0, 24, 1); + + // end cap + glTexImage2D( GL_TEXTURE_2D, 0, 3, tex2.width(), tex2.height(), 0, + GL_RGBA, GL_UNSIGNED_BYTE, tex2.bits() ); + glTranslatef( 0.0, 0.0, 2.0 ); + gluDisk( q, 0.0, 0.6, 24, 1 ); + + // other end cap + glTranslatef( 0.0, 0.0, -2.0 ); + gluQuadricOrientation( q, (GLenum)GLU_INSIDE ); + gluDisk( q, 0.0, 0.6, 24, 1 ); + + glEndList(); + gluDeleteQuadric( q ); + + return cylinderObj; +} + +void GLTexobj::animate() +{ + xRot += impX; + yRot += impY; + zRot -= impZ; + + impX -= impX * 0.05; + impY -= impY * 0.05; + impZ -= impZ * 0.05; + + if ( impX > 0.1 || impY > 0.1 || impZ > 0.1 || + impX < -0.1 || impY < -0.1 || impZ < -0.1 ) + updateGL(); +} + +void GLTexobj::setRotationImpulse( double x, double y, double z ) +{ + if ( animation ) { + impX += 180*x; + impY += 180*y; + impZ += 180*z; + } else { + GLControlWidget::setRotationImpulse( x, y, z ); + } +} diff --git a/examples/demo/opengl/gltexobj.h b/examples/demo/opengl/gltexobj.h new file mode 100644 index 0000000..e621627 --- /dev/null +++ b/examples/demo/opengl/gltexobj.h @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +/**************************************************************************** +** +** This is a simple QGLWidget displaying an openGL wireframe box +** +****************************************************************************/ + +#ifndef GLTEXOBJ_H +#define GLTEXOBJ_H + +#include "glcontrolwidget.h" + +class GLTexobj : public GLControlWidget +{ + Q_OBJECT + +public: + GLTexobj( QWidget* parent, const char* name = 0, WFlags f = 0 ); + ~GLTexobj(); + +protected: + void animate(); + void initializeGL(); + void paintGL(); + void resizeGL( int w, int h ); + + virtual GLuint makeObject( const QImage& tex1, const QImage& tex2 ); + + void setRotationImpulse( double x, double y, double z ); + +private: + GLuint object; + double impX, impY, impZ; +}; + +#endif // GLTEXOBJ_H diff --git a/examples/demo/opengl/glworkspace.cpp b/examples/demo/opengl/glworkspace.cpp new file mode 100644 index 0000000..4670582 --- /dev/null +++ b/examples/demo/opengl/glworkspace.cpp @@ -0,0 +1,212 @@ +#include "glworkspace.h" +#include "glbox.h" +#include "glgear.h" +#include "gltexobj.h" + +#include <qworkspace.h> +#include <qdialog.h> +#include <qtoolbar.h> +#include <qpopupmenu.h> +#include <qmenubar.h> +#include <qaction.h> +#include <qprinter.h> +#include <qpainter.h> +#include <qcheckbox.h> +#include <qvbox.h> +#include <qimage.h> +#include "printpreview.h" + + +GLWorkspace::GLWorkspace( QWidget *parent, const char *name, WFlags f ) +: QMainWindow( parent, name, f ), printer( 0 ) +{ + setupSceneActions(); + + QVBox *vbox = new QVBox( this ); + vbox->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken ); + vbox->setMargin( 1 ); + vbox->setLineWidth( 1 ); + + workspace = new QWorkspace( vbox ); + workspace->setBackgroundMode( PaletteMid ); + setCentralWidget( vbox ); +} + +GLWorkspace::~GLWorkspace() +{ +} + +void GLWorkspace::setupSceneActions() +{ + QToolBar *tb = new QToolBar( "Scene", this ); + QPopupMenu *menu = new QPopupMenu( this ); + menuBar()->insertItem( tr( "&Scene" ), menu ); + + QAction *a; + QActionGroup *newGroup = new QActionGroup( this ); + newGroup->setMenuText( tr( "&New" ) ); + newGroup->setText( tr( "New" ) ); + newGroup->setUsesDropDown( TRUE ); + newGroup->setExclusive( FALSE ); + newGroup->setIconSet( QPixmap( "textdrawing/filenew.png" ) ); + a = new QAction( tr( "Wirebox" ), QPixmap( "opengl/wirebox.xpm" ), tr( "&Wirebox" ), 0, newGroup ); + connect( a, SIGNAL( activated() ), this, SLOT( newWirebox() ) ); + a = new QAction( tr( "Gear" ), QPixmap( "opengl/gear.xpm" ), tr( "&Gears" ), 0, newGroup ); + connect( a, SIGNAL( activated() ), this, SLOT( newGear() ) ); + a = new QAction( tr( "Texture" ), QPixmap( "opengl/texture.xpm" ), tr( "&Texture" ), 0, newGroup ); + connect( a, SIGNAL( activated() ), this, SLOT( newTexture() ) ); +/* a = new QAction( tr( "Nurbs" ), QPixmap( "opengl/nurbs.xpm" ), tr( "&Nurbs" ), 0, newGroup ); + connect( a, SIGNAL( activated() ), this, SLOT( newNurbs() ) );*/ + newGroup->addTo( tb ); + newGroup->addTo( menu ); + + menu->insertSeparator(); + QActionGroup *printGroup = new QActionGroup( this ); + printGroup->setMenuText( tr( "&Print" ) ); + printGroup->setText( tr( "Print" ) ); + printGroup->setUsesDropDown( TRUE ); + printGroup->setExclusive( FALSE ); + printGroup->setIconSet( QPixmap( "textdrawing/print.png" ) ); + QAction *da = new QAction( tr( "Window Size" ), QPixmap( "textdrawing/print.png" ), tr( "&Window Size" ), CTRL + Key_P, printGroup ); + connect( da, SIGNAL( activated() ), this, SLOT( filePrintWindowRes() ) ); + a = new QAction( tr( "Low Resolution" ), tr( "&Low Resolution" ), 0, printGroup ); + connect( a, SIGNAL( activated() ), this, SLOT( filePrintLowRes() ) ); + a = new QAction( tr( "Medium Resolution" ), tr( "&Medium Resolution" ), 0, printGroup ); + connect( a, SIGNAL( activated() ), this, SLOT( filePrintMedRes() ) ); + a = new QAction( tr( "High Resolution" ), tr( "&High Resolution" ), 0, printGroup ); + connect( a, SIGNAL( activated() ), this, SLOT( filePrintHighRes() ) ); + printGroup->addSeparator(); + a = new QAction( tr( "Setup" ), tr( "&Setup..." ), 0, printGroup ); + connect( a, SIGNAL( activated() ), this, SLOT( filePrintSetup() ) ); + da->addTo( tb ); + printGroup->addTo( menu ); + + a = new QAction( tr( "Close" ), QPixmap(), tr( "&Close" ), 0, this ); + connect( a, SIGNAL( activated() ), this, SLOT( fileClose() ) ); + a->addTo( menu ); +} + +void GLWorkspace::newWirebox() +{ + GLBox *gl = new GLBox( workspace, 0, WDestructiveClose ); + gl->setIcon( QPixmap( "opengl/wirebox.xpm" ) ); + gl->setCaption( tr( "Wirebox" ) ); + gl->resize( 320, 240 ); + gl->show(); +} + +void GLWorkspace::newGear() +{ + GLGear *gl = new GLGear( workspace, 0, WDestructiveClose ); + gl->setIcon( QPixmap( "opengl/gear.xpm" ) ); + gl->setCaption( tr( "Gear" ) ); + gl->resize( 320, 240 ); + gl->show(); +} + +void GLWorkspace::newTexture() +{ + GLTexobj *gl = new GLTexobj( workspace, 0, WDestructiveClose ); + gl->setIcon( QPixmap( "opengl/texture.xpm" ) ); + gl->setCaption( tr( "Texture" ) ); + gl->resize( 320, 240 ); + gl->show(); +} + +void GLWorkspace::newNurbs() +{ + GLGear *gl = new GLGear ( workspace, 0, WDestructiveClose ); + gl->setIcon( QPixmap( "opengl/nurbs.xpm" ) ); + gl->setCaption( tr( "Nurbs" ) ); + gl->resize( 320, 240 ); + gl->show(); +} + +void GLWorkspace::filePrint( int x, int y ) +{ + bool print = printer || filePrintSetup(); + if ( !print || !printer ) + return; + + QWidget *widget = workspace->activeWindow(); + if ( !widget || !widget->inherits( "QGLWidget" ) ) + return; + QGLWidget *gl = (QGLWidget *)widget; + QPixmap pm = gl->renderPixmap( x, y ); + + PrintPreview view( this ); + QImage temp = pm.convertToImage(); + temp = temp.smoothScale( 400, 300 ); + QPixmap temppix; + temppix.convertFromImage( temp ); + view.setPixmap( temppix ); + view.setIcon( QPixmap( "opengl/snapshot.xpm" ) ); + view.setCaption( gl->caption() + " - Print preview" ); + if ( view.exec() ) { + QImage img = pm.convertToImage(); + if ( view.checkInvert->isChecked() ) { + img.invertPixels(); + } + if ( view.checkMirror->isChecked() ) { + img = img.mirror( TRUE, FALSE ); + } + if ( view.checkFlip->isChecked() ) { + img = img.mirror( FALSE, TRUE ); + } + if ( view.checkLeft->isEnabled() && view.checkLeft->isChecked() ) { + } + if ( view.checkRight->isEnabled() && view.checkRight->isChecked() ) { + } + pm.convertFromImage( img ); + + QPainter painter; + if ( !painter.begin( printer ) ) + return; + + painter.drawPixmap( QPoint( 0, 0 ), pm ); + + painter.end(); + } +} + +void GLWorkspace::filePrintWindowRes() +{ + filePrint( 0, 0 ); +} + +void GLWorkspace::filePrintLowRes() +{ + filePrint( 640, 480 ); +} + +void GLWorkspace::filePrintMedRes() +{ + filePrint( 1024, 768 ); +} + +void GLWorkspace::filePrintHighRes() +{ + filePrint( 2048, 1536 ); +} + +bool GLWorkspace::filePrintSetup() +{ + bool newPrinter = !printer; + + if ( !printer ) + printer = new QPrinter; + if ( printer->setup() ) { + return TRUE; + } else { + if ( newPrinter ) { + delete printer; + printer = 0; + } + return FALSE; + } +} + +void GLWorkspace::fileClose() +{ + workspace->closeActiveWindow(); +} diff --git a/examples/demo/opengl/glworkspace.h b/examples/demo/opengl/glworkspace.h new file mode 100644 index 0000000..36e1a23 --- /dev/null +++ b/examples/demo/opengl/glworkspace.h @@ -0,0 +1,37 @@ +#ifndef GLWORKSPACE_H +#define GLWORKSPACE_H + +#include <qmainwindow.h> + +class QWorkspace; +class QPrinter; + +class GLWorkspace : public QMainWindow +{ + Q_OBJECT +public: + GLWorkspace( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); + ~GLWorkspace(); + +protected: + void setupSceneActions(); + +protected slots: + void newWirebox(); + void newGear(); + void newTexture(); + void newNurbs(); + void filePrint( int x, int y ); + void filePrintWindowRes(); + void filePrintLowRes(); + void filePrintMedRes(); + void filePrintHighRes(); + bool filePrintSetup(); + void fileClose(); + +private: + QWorkspace *workspace; + QPrinter *printer; +}; + +#endif //GLWORKSPACE_H diff --git a/examples/demo/opengl/nurbs.xpm b/examples/demo/opengl/nurbs.xpm new file mode 100644 index 0000000..946d081 --- /dev/null +++ b/examples/demo/opengl/nurbs.xpm @@ -0,0 +1,305 @@ +/* XPM */ +static char *nest[] = { +/* width height num_colors chars_per_pixel */ +" 48 48 202 2", +/* colors */ +".. c None", +".# c #1f1000", +".a c #200800", +".b c #201000", +".c c #201700", +".d c #20170f", +".e c #201800", +".f c #201f0f", +".g c #2f1f00", +".h c #2f2710", +".i c #301700", +".j c #301f00", +".k c #30200f", +".l c #302810", +".m c #3f2000", +".n c #3f270f", +".o c #3f2f10", +".p c #402700", +".q c #40270f", +".r c #402f0f", +".s c #402f10", +".t c #40371f", +".u c #403720", +".v c #40382f", +".w c #4f3000", +".x c #4f3010", +".y c #4f371f", +".z c #4f3f1f", +".A c #4f3f3f", +".B c #4f402f", +".C c #4f403f", +".D c #503700", +".E c #50370f", +".F c #503f10", +".G c #50401f", +".H c #504020", +".I c #504030", +".J c #50403f", +".K c #504730", +".L c #50473f", +".M c #5f3f10", +".N c #5f4000", +".O c #5f401f", +".P c #5f471f", +".Q c #5f481f", +".R c #5f482f", +".S c #5f5030", +".T c #5f5040", +".U c #5f5750", +".V c #604010", +".W c #60481f", +".X c #604830", +".Y c #604f20", +".Z c #604f3f", +".0 c #605730", +".1 c #60584f", +".2 c #6f4000", +".3 c #6f4810", +".4 c #6f5730", +".5 c #6f5740", +".6 c #6f5f30", +".7 c #6f5f3f", +".8 c #6f6040", +".9 c #6f6850", +"#. c #704f10", +"## c #70501f", +"#a c #705020", +"#b c #705710", +"#c c #70581f", +"#d c #705830", +"#e c #705f2f", +"#f c #705f3f", +"#g c #705f4f", +"#h c #705f50", +"#i c #70683f", +"#j c #706840", +"#k c #70706f", +"#l c #7f5000", +"#m c #7f5f2f", +"#n c #7f6030", +"#o c #7f673f", +"#p c #7f6840", +"#q c #7f685f", +"#r c #805820", +"#s c #805f10", +"#t c #80602f", +"#u c #80673f", +"#v c #80684f", +"#w c #806f40", +"#x c #806f50", +"#y c #806f5f", +"#z c #80704f", +"#A c #80786f", +"#B c #807f5f", +"#C c #8f6020", +"#D c #8f6f3f", +"#E c #8f6f50", +"#F c #8f7040", +"#G c #8f784f", +"#H c #906010", +"#I c #906720", +"#J c #90682f", +"#K c #906f3f", +"#L c #90702f", +"#M c #907060", +"#N c #90773f", +"#O c #907840", +"#P c #90786f", +"#Q c #907f6f", +"#R c #908050", +"#S c #90875f", +"#T c #90886f", +"#U c #908f70", +"#V c #909080", +"#W c #9f701f", +"#X c #9f702f", +"#Y c #9f7840", +"#Z c #9f804f", +"#0 c #9f8050", +"#1 c #a0680f", +"#2 c #a0783f", +"#3 c #a0804f", +"#4 c #a0806f", +"#5 c #a0874f", +"#6 c #a0875f", +"#7 c #a08f50", +"#8 c #a08f5f", +"#9 c #a0906f", +"a. c #a09770", +"a# c #a0977f", +"aa c #af701f", +"ab c #af782f", +"ac c #af7f3f", +"ad c #af803f", +"ae c #af876f", +"af c #af884f", +"ag c #af8f5f", +"ah c #af8f6f", +"ai c #af8f7f", +"aj c #af9070", +"ak c #af907f", +"al c #af9880", +"am c #af9f70", +"an c #afa080", +"ao c #b06f0f", +"ap c #b0802f", +"aq c #b0904f", +"ar c #b0975f", +"as c #b09780", +"at c #b0a06f", +"au c #b0a890", +"av c #bf8f3f", +"aw c #bf907f", +"ax c #bf974f", +"ay c #bf977f", +"az c #bf985f", +"aA c #bf9860", +"aB c #bf9f6f", +"aC c #bfa080", +"aD c #bfa870", +"aE c #bfa880", +"aF c #bfa890", +"aG c #c09750", +"aH c #c09f80", +"aI c #c0a760", +"aJ c #c0a76f", +"aK c #c0b080", +"aL c #c0b790", +"aM c #cf9740", +"aN c #cfa78f", +"aO c #cfa87f", +"aP c #cfaf6f", +"aQ c #cfaf90", +"aR c #d09f80", +"aS c #d0a860", +"aT c #d0b770", +"aU c #d0b88f", +"aV c #d0b890", +"aW c #dfa750", +"aX c #dfaf90", +"aY c #dfb79f", +"aZ c #dfb8a0", +"a0 c #dfc08f", +"a1 c #e0a780", +"a2 c #e0b790", +"a3 c #e0b79f", +"a4 c #e0b870", +"a5 c #e0bfa0", +"a6 c #e0c8a0", +"a7 c #e0cf9f", +"a8 c #efb090", +"a9 c #efbf90", +"b. c #efd7af", +"b# c #f0bf9f", +"ba c #f0c0a0", +"bb c #f0cfb0", +"bc c #ffc8af", +"bd c #ffd7b0", +"be c #ffd7bf", +"bf c #ffd8bf", +"bg c #ffdfc0", +"bh c #ffe7c0", +/* pixels */ +"............................#8#8#9.Y..........#8#8#2#2..........................................", +"..........................au#3#3a.aD#T#8aIa.#8........#8..#8#8..................................", +"......................#Z#2aOaPar#PaLalaD#8#8....aD..#2......#8#8................................", +"....................#8#Aajam#xa.........aE#x#e#t#p#O#8.G#3aV#Z#9#8#2#o..........................", +"..................a#.....p#0....aE#P.p.i.2ab.P#aat#K.Y#F.4.x#ZazaV....#2aL......................", +"............#F#D....aE#TaA#FaI#D#b#D.E.Y#3ad#D.H.s.l.k.q.E.z.f.O#Y#7an#0#SanaL..................", +"..........#o#v....aBaKaua##2#.#C#C#m#2.w#t#I.P.M.n.k.i##.c.d.q.p.b.6#daI....#b..................", +"..........#q..#2#FaAalaB#s#J#n.W#K##.R.z.k.x.s.d.n.o.r.Q.c.g.E#a.P.c.f#da##8..aI................", +"........#3..#2.1..#D#tad#Zag#w#d#n.n.u.d.#.k.#.c.c.n.b.#.d.F#L.f##.f.c.c#7#D..a7................", +"......aD#9a..Q..#LaW#maTaIa4#6.d.c.d.c.f.c.s.s.c.#.b.o.P.r.r.W.##a.M.#.e.k.4#eaKaOaL............", +"......aD#8aL..#F.2#X.0.Y#e.Y.u.d.c.c.j.#.c.y.j.n#Mak#M#v.W#L.##d#K#c.s.f.l#R.caDa0..a0..........", +"....#Ta.#F#A..#l#W#N.W#s.z.d.k.n.k.y.o.g.t.aawbdb#a3aQ#4#f.Z.y.x#aad#a.O.R.#aD.eaLaz..#F........", +"....#2alal#8#t#n#Z.W.V.g.e.f.t.o.s.g.k.y.E#4babab#a1aRae#M.L.K.N.zaMac.W.4.u.c.c.RaD#8aD........", +"....aU#8#m#Q#L#K#c.M.c.c.e.l.t.f.#.b.Y#a.Obfbfbhbaa5aNas#Q.T.C#a#e#m#X#m#f.S.c.c#j..a0#2#2......", +"..#2#2..#8#s#r#l.w.i.c.t.z.H.t.#.o#x#F.MaRbfbhbgbca9aQas#Q.1.C.H.2.B#u#Y.4.H.S.B.e..#2b.au......", +"....#FaDaO#5.p#W#J.i.#.f.o.H.l.R#v#u#t.waZbfbgbgbca3aQak#E.T.L.H.F#K#f#Y#a#a.R.0.l.Z#T..#W......", +"....aV#9#e#0.pap#C.c.f.#.z.t.4.4.G.3.r.maXbhbgbga6aZaNaj#Q.J.L.K#w.V.3#Y#u.W#d.S.c.taD..aA#2....", +"..azauaL.2ag#2#C.3.g.c.z.G.b.G.n.4.w.q.baXbfbcb#a5aQas#Q.5.I.J.H#.###b.O#Iab.W.e.c.kaD....aU....", +"..#Z..#l#2#7aA.N.F.c.c.c.#aha5bbaZai#y.P.0bba2a2aXawai#y.L.I.A#t.M.Q#L#naa#8.p.D.#.z#FaD..au#8..", +"..#Wa.ab#c.2aG#t.x.c.h.cbebaa8baaYaH#E.Z.WaNaQaNayai#M.1.J.C.K#H#I.P#e.v#s#D.D.n#z.h.Ba7..a.#2..", +"....aF#l#L#2#L#6.P.#.caZbgbgbaa1aXaw#4#g.A.Vaeai#4#y.T.A.C.B#J#L#H#c#S.4.DaI#b.F.4#6ataO..aEa...", +"aA#o#pab#lag#a#r.n.c.vaZbhbgbbbaaXasai#q.J.B#K#E.5.A.A.J.H.W.Vacad#N#R#o.j#C#7##.n#8.c#6aE..aE..", +"....#t#Lao#5#mazag.caebhbhbgbba2aXaC#U#h.C.u#u#K.Y.7#K#K#2.3.k#m.4.Q.0aB.o.xaq#m.c#0.7.R....aE..", +"....az#NaoaMaTaqaA.#aXbhbdbbbaaXaQak#M.1.I.L.u.y.z###5#racad#5#7.k.s#raI#Z.R#s#6.#.0#F.9..#Z....", +"....aI.Nac#5aq#l#I.faNbfbcbba5aQaw#4#y.L.I.L.K.k.E.i.i.D.3aa#Hac.E.l#m#Oah.O#raf.z.c#wauaD#Z....", +"an...X#naS#cap#Y#1.N#gbbbaa5a5aCak#M.1.I.I.I#J.V#faXbbaYas#E#J#I.3.k.4ad#2.4#s.D#f.#.R#GaJ#T....", +"#T#9#oag#saa#J#F#b.m.cbbaXaNaHak#Q#h.C.I.J.B#lahaTbca8a3aHak.U#a#a.G.B#5#w.TaG#K.G#6.laAaAa.....", +"..auaDaI#u#WaxaS.P#b.#.CaQaw#4#M#q.L.C.I.A.M#EaTbcbca1a2aHah#x.X#d.y.G#maq.8ap#X.z#G.g#2aE#8aL..", +"..#Fan#laE#HaWaxat#w.m.c#x#P#y.5.C.L.J.C#u#caAbcbhbeb#aRay#4#P.T.C.s.k#DaS.7.E.baB.c.7aIaK..#9..", +"....aE#q#2.6#a#I#taK.YaP.c.j.X.K.X.H.H.X#taJbcbfbgbfbaaYaHak#P.U.J.G#F#ma4aq#N.Q.c.#.7ar........", +"....a.aG.D#6.p.Dac#d#2.6#z.a.j.O#n.D.E.#.cawbdbdbebba5aRaC#4#y.L.C.S#mafar#d#N.0.h.#az#V#8..#D..", +"aL..aDaG.X#N#o.M#I#u#X.S.E.4.c.f.r.i.3#c.cawbdbcbeb#aXaNak#Q.5.L.L.B#2#mar#m.M.6.c.B#Z.RaT..#Za.", +"#8auaE..#F.w#3ar#a#9ab#o.N###j.c.x.k.g.M.r#EbfbcbaaZaQas#4#y.I.C.A.0#5#m#Z#t#o.h.caA.t#e....al.8", +"....aEaI..aA#r#F#oat#i#oac.2.c.c#J.x.G.P.p.jbca2aXaNaFai#P.5.I.I.v#2#Y#O#Y#C.7.c.caT.c#2..aAaAaG", +"......#8a.am#k#Yag#F#w#FaD.V.#am#m.q.k.G.P.r#gaXawawae#M#g.C.L.A#dac#d#3#o.O.x.caP.c.#aA..aT#S..", +"......#S....#T#i.uaI#n.D#jam.r.aag.W.W.E.W#a.p#gai#Q#y.T.C.C.A.5acaq#o#v.O.o.c.c.c.c.F..aB#OaT#B", +"........#R....#T.w#faj.m.i#n#G#o.zag.O#u#m.F.j.0.K.L.I.I.C.Z#u#5aTaJ.H.E.G.f.#aP.d.##3a.#Z..a...", +"........a#....#T..#e#F#6.O.a#O.w.6#i#8.G.O.6#X#i.O.x.H.X.H#aaxavaA.l.k.x.t.##S#w.c.lazaA#Z#T....", +"..............am....ag#D#i#z.Q.o.#.w#e#0.m.Y#d.W.E.x.x#e#t#e#K#2.p.j.#.c.h.##9.7.#.SaD#DaE......", +"................#N....aC.R.6.4#6.7.F.q.Y#0#e.n.F.O.O#a#w#v.E.E.b.j.c.e.d.#.H#B.#.7#7#U..........", +"................aA#8#2#T#7.X.7.7.0.0.6ag#o#R#f.r.0#n#p.#.c.#.c.#.#.c.c.#.c#G#R#S#i#0............", +"..................aL#8#Zaq#8.0.#.4#n.t.c.##waJ#0.G.z.R.r.o.f.d.c.e.#.4.0#o#8#F.#.o........#U....", +"......................#8#8#DaDaD.T.h.t#8#z.h#Z.0.R.g.m#G#n.l.h.c.##z.0.##G#j.#.UaS#3#8#T#q......", +"....................aE......#8aK#N#R#6.O.#.B#0#6#o.7#G.u.d.#.c.c.#.#.h#v#v#j#z#8#S#T#UaD........", +"......................#Z....#NaL#8#jam#B.6#w.7#i.u#7araT#z#z#p#iaTaPat#p#R.#a....Y..............", +"..........................#R..aEaja#.1#7#A#0.6.c.c.S#6.f.#.d#R.#.e.c.#.7#T......................", +"................................#F#8#6........#o#o.c.c#K#n#u.o.Y#v#R#k..aI..a.a.................", +"..............................#9#9....an#Z............#8#0..#0#RaE....#U#Sa....................." +}; +SIMPLE = T +BITPIX = 8 +NAXIS = 2 +NAXIS1 = 48 +NAXIS2 = 48 +HISTORY Written by XV 3.10 +END + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SSSSSSSSSSSSSSSSS ƒSSSSSSƒSƒ~©SSŠƒ”SSSSSSSSSSSSSSSSSSSSSSSSSSs‰SSSSiirci/M +l~oS¤S””SSSSSSSSSSSSSSSSSSSSS~S©•–Y‹yƒ]P‰~_†SSSSSSSSSSSSSSSSSSSSSSƒSSv´ +dz]m_d6‹–´ppid´°i~”SMSSSSSSSSSSSSSSSSS©SSS®v~‰EBƒ‰i_y6&lldpƒ†Š§SSSS +SSSSSSSSSSSr§§R&6p&ƒTL%yc'&pTydXªƒ†nSSSSSSSSSSSS´ƒTYc6m¦ƒ@?L// +YTis/SSSSŠSSSSSSSSSSœ|†‹L__TT]’i~_/Tciy~ƒdƒSSSSSSSSSSSSSSvSS¥L]Y‰ +_=+Mƒ]+=EESml99 @z_‹ŠSSSSSSSSSSSSSS’rdpI/3]ƒ%MZI955]c]r|) &_P§r©SSS +SSSS–SS†S]s‰Ew3]d@E]vdE5@L@S™“œ'"56ƒm'œœƒ†SSSSSS~SS†3_•%cyi?’Eib= TFHCCERi† +´¦@9@°ƒ”ƒS”SSSSƒSS†d6¤c7d/’II9IS)b—‚rREED[…ilE/=S¢w´zSSS”o|’sms§C +b+"@I/bº‘xbEHDZ…ZƒiE5°œS´ƒSSS©¤Sœ]sidi…Fl5@I) ׿º±¬—~[CC9||w|f_´|Sœœš +§©Ss3ƒ–Si@Sd5"B/uá×ËÁµœˆrCEDT†bƒci&œ6]SSœ`´S§šLviBjivP9Y/LWÞ×áʺ±˜‚[H +HB|b–bB]BƒL´Sƒ”SS”š7‰)7…Z|]p Ec79ÞÞáÕÅ«¥ˆrHEPbŒ–ZvT&œSrSSS©n|]Sjc®M° LF +L@@Lc¦×áåáËÁ¥˜~XE@sbºvI_–SSSSSs S©d¬™m%p~r[EHEEiWœ×éáÊ«¡ˆ~RE0"rª_9¢_¤®SSS§§¤is™ªITEµˆxnHECDBu´××´¿¥•pLZ;@b`ƒv?y|©´S†i’^ylsT%Õº±¥˜‚bECEBS•´×ÀÁ¥˜XSS@B†mRšr@‰'œœ”SS SLcªWƒ|m@bÕËÅÅ¥˜xYCCClC_ºÕÁœuljL"Y†|Y^7_Ly¦†SSSS¤@…†Sj±á×ÕŵˆrHCHF"97Lyd…9'bw•E]Œ?m§§ƒSSSSœvvœ´œºéÞÕ˺µ˜xYCH6;?S†]…††‹"0]¤ƒL^‰TsfSƒSSSScpv†bœ’‘ééåÕ¿º¥ŠbE6irM_rr|L"bYIT¢/5bƒ_LSS©SœiiS’S]+9ÁéåÕ˺œ—nEBru[DDE@IC…†v~i f‹S+‰©S©SSS¬Sp|p‰IÁååË´ºˆbDC‘—ˆrRDEBlpdWƒY7¤T=Y‰¯S©”SSs”WFšc5&áËÀËÁ¥uRI±µ±¡—xYEEFdjI]9^r7+p&BÍS”|SSƒSS|‹œ@=•ÅÕÁ—rITÕ¿¿º—rHCDcBIpcy)7?s§S§SSœ§´F’|fL?@@+Y3+ºá×Êŵœ‚[CE@PSTEjI"§SS¹SSSSº]ƒ)ƒf?6YY@L/%ºéååÊÁ±•‚EHFmCL|iIZP6§Sœ|SSSSs§¯†)sl/@'Llic3Ááåå×Áµ˜uRH@=r_|SSLT'R†SsSSSS||S^]S36?@6/psB«áéå×ȵœ‚YE@FBi|Y@PBS|Ù§SSSSS¹b‚prWB'6MSEááéËűœ‚RES]bvb_PdSÃ||SSSSS|œœccƒIC6/0";9ˆËËÊ´«‘xHF@?œ…IY6L§§SSSSSS†”sySSsvI^?"+";/6ÞÊÁµˆ_R;5S†SEL§´œSsSSSSSSS§´SsFvTM]M6 ; +x˜xlIpZrW0'~§ÃSÃSSSSSSSS§”ISp¬b´¤º‰00/I//ISB"Y]®¯´SSSSSSSSSSƒS|YSrc†ƒ’mZc+6"+=pS‹rSÍSSSSSSSSSSSSSnS|sœœ¢^lcIrSL?"50+//I9SIZ–S¤SSSSSSSSSSSSSilSS¢®§–|Pffb|3cjIB+"S+)]Z¤SSTSSSSSSSSSSSSSSSsrSS©†œs¤rTr9Mƒ†r@0'"+9?E|‹ ƒƒ ´SSSSSSSSSSSSSSSSSS–SS)ƒSS©~)FISrMsY5ƒœºSS|´SSSSSSSSSSSSSSSSSSSSSy•p”SSSS©p]ciw@ƒºƒ|iSSSSSSSSSSSSSSSSSSSSSSSSƒ|¯°–~´œ§SS§S|SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS§ƒƒ”§†¤”SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSMSSSSS||SSSSSSSSSSSSSSSSSSSSS€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ diff --git a/examples/demo/opengl/printpreview.ui b/examples/demo/opengl/printpreview.ui new file mode 100644 index 0000000..559f0cf --- /dev/null +++ b/examples/demo/opengl/printpreview.ui @@ -0,0 +1,277 @@ +<!DOCTYPE UI><UI version="3.0" stdsetdef="1"> +<class>PrintPreview</class> +<widget class="QDialog"> + <property name="name"> + <cstring>PrintPreview</cstring> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>634</width> + <height>195</height> + </rect> + </property> + <property name="caption"> + <string>Print Preview</string> + </property> + <property name="sizeGripEnabled"> + <bool>true</bool> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QGroupBox" row="0" column="0"> + <property name="name"> + <cstring>GroupBox1</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>7</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title"> + <string>Preview</string> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLabel"> + <property name="name"> + <cstring>pixmapLabel</cstring> + </property> + <property name="text"> + <string>TextLabel1</string> + </property> + </widget> + </hbox> + </widget> + <widget class="QGroupBox" row="0" column="1"> + <property name="name"> + <cstring>GroupBox2</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>4</hsizetype> + <vsizetype>7</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title"> + <string>Modify</string> + </property> + <vbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QCheckBox"> + <property name="name"> + <cstring>checkInvert</cstring> + </property> + <property name="text"> + <string>&Invert Colors</string> + </property> + </widget> + <widget class="QCheckBox"> + <property name="name"> + <cstring>checkMirror</cstring> + </property> + <property name="text"> + <string>&Mirror</string> + </property> + </widget> + <widget class="QCheckBox"> + <property name="name"> + <cstring>checkFlip</cstring> + </property> + <property name="text"> + <string>&Flip</string> + </property> + </widget> + <widget class="QCheckBox"> + <property name="name"> + <cstring>checkLeft</cstring> + </property> + <property name="text"> + <string>Rotate 90° &left</string> + </property> + </widget> + <widget class="QCheckBox"> + <property name="name"> + <cstring>checkRight</cstring> + </property> + <property name="text"> + <string>Rotate 90° &right</string> + </property> + </widget> + </vbox> + </widget> + <widget class="QLayoutWidget" row="1" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>Layout1</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QPushButton"> + <property name="name"> + <cstring>buttonHelp</cstring> + </property> + <property name="text"> + <string>&Help</string> + </property> + <property name="autoDefault"> + <bool>true</bool> + </property> + </widget> + <spacer> + <property name="name"> + <cstring>Horizontal Spacing2</cstring> + </property> + <property name="orientation"> + <enum>Horizontal</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + </spacer> + <widget class="QPushButton"> + <property name="name"> + <cstring>buttonOk</cstring> + </property> + <property name="caption"> + <string></string> + </property> + <property name="text"> + <string>&Print</string> + </property> + <property name="autoDefault"> + <bool>true</bool> + </property> + <property name="default"> + <bool>true</bool> + </property> + </widget> + <widget class="QPushButton"> + <property name="name"> + <cstring>buttonCancel</cstring> + </property> + <property name="text"> + <string>&Discard</string> + </property> + <property name="autoDefault"> + <bool>true</bool> + </property> + </widget> + </hbox> + </widget> + </grid> +</widget> +<connections> + <connection> + <sender>buttonOk</sender> + <signal>clicked()</signal> + <receiver>PrintPreview</receiver> + <slot>accept()</slot> + </connection> + <connection> + <sender>buttonCancel</sender> + <signal>clicked()</signal> + <receiver>PrintPreview</receiver> + <slot>reject()</slot> + </connection> + <connection> + <sender>checkLeft</sender> + <signal>toggled(bool)</signal> + <receiver>checkRight</receiver> + <slot>setDisabled(bool)</slot> + </connection> + <connection> + <sender>checkRight</sender> + <signal>toggled(bool)</signal> + <receiver>checkLeft</receiver> + <slot>setDisabled(bool)</slot> + </connection> + <connection> + <sender>checkInvert</sender> + <signal>toggled(bool)</signal> + <receiver>PrintPreview</receiver> + <slot>invertColors(bool)</slot> + </connection> + <connection> + <sender>checkMirror</sender> + <signal>toggled(bool)</signal> + <receiver>PrintPreview</receiver> + <slot>mirror(bool)</slot> + </connection> + <connection> + <sender>checkFlip</sender> + <signal>toggled(bool)</signal> + <receiver>PrintPreview</receiver> + <slot>flip(bool)</slot> + </connection> + <connection> + <sender>checkLeft</sender> + <signal>toggled(bool)</signal> + <receiver>PrintPreview</receiver> + <slot>rotateLeft(bool)</slot> + </connection> + <connection> + <sender>checkRight</sender> + <signal>toggled(bool)</signal> + <receiver>PrintPreview</receiver> + <slot>rotateRight(bool)</slot> + </connection> +</connections> +<includes> + <include location="global" impldecl="in declaration">qimage.h</include> + <include location="global" impldecl="in declaration">qpixmap.h</include> + <include location="local" impldecl="in implementation">printpreview.ui.h</include> +</includes> +<variables> + <variable>QPixmap pix</variable> +</variables> +<slots> + <slot access="protected">init()</slot> + <slot access="protected">destroy()</slot> + <slot>updatePreview()</slot> + <slot>flip( bool )</slot> + <slot>invertColors( bool )</slot> + <slot>mirror( bool )</slot> + <slot>rotateLeft( bool )</slot> + <slot>rotateRight( bool )</slot> + <slot>setPixmap( const QPixmap & pm )</slot> +</slots> +<layoutdefaults spacing="6" margin="11"/> +</UI> diff --git a/examples/demo/opengl/printpreview.ui.h b/examples/demo/opengl/printpreview.ui.h new file mode 100644 index 0000000..db5dbfb --- /dev/null +++ b/examples/demo/opengl/printpreview.ui.h @@ -0,0 +1,70 @@ +/**************************************************************************** +** ui.h extension file, included from the uic-generated form implementation. +** +** If you wish to add, delete or rename functions respectively slots use +** Qt Designer which will update this file, preserving your code. Create an +** init() function in place of a constructor, and a destroy() function in +** place of a destructor. +*****************************************************************************/ + +void PrintPreview::init() +{ + +} + +void PrintPreview::destroy() +{ + +} + +void PrintPreview::updatePreview() +{ + QImage img = pix.convertToImage(); + if ( checkInvert->isChecked() ) { + img.invertPixels(); + } + if ( checkMirror->isChecked() ) { + img = img.mirror( TRUE, FALSE ); + } + if ( checkFlip->isChecked() ) { + img = img.mirror( FALSE, TRUE ); + } + if ( checkLeft->isEnabled() && checkLeft->isChecked() ) { + } + if ( checkRight->isEnabled() && checkRight->isChecked() ) { + } + QPixmap pm; + pm.convertFromImage( img ); + pixmapLabel->setPixmap( pm ); +} + +void PrintPreview::flip( bool ) +{ + updatePreview(); +} + +void PrintPreview::invertColors( bool ) +{ + updatePreview(); +} + +void PrintPreview::mirror( bool ) +{ + updatePreview(); +} + +void PrintPreview::rotateLeft( bool ) +{ + updatePreview(); +} + +void PrintPreview::rotateRight( bool ) +{ + updatePreview(); +} + +void PrintPreview::setPixmap( const QPixmap & pm ) +{ + pix = pm; + updatePreview(); +} diff --git a/examples/demo/opengl/qtlogo.bmp b/examples/demo/opengl/qtlogo.bmp Binary files differnew file mode 100644 index 0000000..b7f9215 --- /dev/null +++ b/examples/demo/opengl/qtlogo.bmp diff --git a/examples/demo/opengl/qtlogo.png b/examples/demo/opengl/qtlogo.png Binary files differnew file mode 100644 index 0000000..e6e3bee --- /dev/null +++ b/examples/demo/opengl/qtlogo.png diff --git a/examples/demo/opengl/snapshot.xpm b/examples/demo/opengl/snapshot.xpm new file mode 100644 index 0000000..1c7180c --- /dev/null +++ b/examples/demo/opengl/snapshot.xpm @@ -0,0 +1,238 @@ +/* XPM */ +static char *camera[] = { +/* width height num_colors chars_per_pixel */ +" 32 32 151 2", +/* colors */ +".. c None", +".# c #1f1f1f", +".a c #202020", +".b c #2f2720", +".c c #302020", +".d c #302820", +".e c #3f2720", +".f c #3f2820", +".g c #3f2f2f", +".h c #3f3730", +".i c #402820", +".j c #402f20", +".k c #403730", +".l c #4f2820", +".m c #4f302f", +".n c #4f403f", +".o c #4f484f", +".p c #50302f", +".q c #50403f", +".r c #5f2f20", +".s c #5f3020", +".t c #5f3830", +".u c #5f4f30", +".v c #5f4f50", +".w c #5f5760", +".x c #60372f", +".y c #60382f", +".z c #60482f", +".A c #604f40", +".B c #60504f", +".C c #60606f", +".D c #6f4030", +".E c #6f4730", +".F c #6f676f", +".G c #6f7790", +".H c #70402f", +".I c #704030", +".J c #704830", +".K c #704f3f", +".L c #705f50", +".M c #706860", +".N c #707780", +".O c #7f6850", +".P c #7f706f", +".Q c #804f2f", +".R c #80573f", +".S c #805f40", +".T c #806740", +".U c #807060", +".V c #807f80", +".W c #80808f", +".X c #8090b0", +".Y c #80a0d0", +".Z c #8f5730", +".0 c #8f5840", +".1 c #8f7f7f", +".2 c #8f8f90", +".3 c #905f40", +".4 c #906740", +".5 c #90684f", +".6 c #907f6f", +".7 c #908780", +".8 c #908f8f", +".9 c #9097a0", +"#. c #909fb0", +"## c #90a7cf", +"#a c #9f5f30", +"#b c #9f684f", +"#c c #9f7750", +"#d c #9f887f", +"#e c #9f8f80", +"#f c #9f9790", +"#g c #9f98a0", +"#h c #9fa0af", +"#i c #9fafd0", +"#j c #9fafdf", +"#k c #a06f4f", +"#l c #a0703f", +"#m c #a07f5f", +"#n c #a0906f", +"#o c #a09780", +"#p c #a09890", +"#q c #a09f9f", +"#r c #a0b0c0", +"#s c #a0b7e0", +"#t c #af7850", +"#u c #af875f", +"#v c #af978f", +"#w c #af9fa0", +"#x c #afa09f", +"#y c #afa0a0", +"#z c #afa7af", +"#A c #afa8a0", +"#B c #afa8b0", +"#C c #afafcf", +"#D c #afb7d0", +"#E c #b07f50", +"#F c #b07f5f", +"#G c #b0a08f", +"#H c #b0a79f", +"#I c #b0a8af", +"#J c #b0afa0", +"#K c #b0b0b0", +"#L c #b0c7ef", +"#M c #bf875f", +"#N c #bfa89f", +"#O c #bfaf9f", +"#P c #bfb0a0", +"#Q c #bfb0af", +"#R c #bfb7b0", +"#S c #bfb8bf", +"#T c #c0b09f", +"#U c #c0b7af", +"#V c #c0b8af", +"#W c #c0b8bf", +"#X c #c0bfb0", +"#Y c #c0c0bf", +"#Z c #c0d0df", +"#0 c #cf9f6f", +"#1 c #cfc0b0", +"#2 c #cfc0c0", +"#3 c #cfd7f0", +"#4 c #d0bfa0", +"#5 c #d0c8c0", +"#6 c #d0cfc0", +"#7 c #d0cfd0", +"#8 c #d0d7a0", +"#9 c #dfcfbf", +"a. c #dfd7cf", +"a# c #dfd7df", +"aa c #dfd8df", +"ab c #dfe0bf", +"ac c #dfe7ff", +"ad c #e0d7af", +"ae c #e0d7d0", +"af c #e0d8df", +"ag c #e0e0e0", +"ah c #efe0e0", +"ai c #efe7e0", +"aj c #efe7ef", +"ak c #efe88f", +"al c #efe8f0", +"am c #eff0a0", +"an c #f0e0c0", +"ao c #f0e7e0", +"ap c #f0e8e0", +"aq c #f0f0ef", +"ar c #f0f0ff", +"as c #f0f8ff", +"at c #fff7ff", +"au c #fff8f0", +/* pixels */ +"............................................#o#N#N#v#P..........", +"........................................#H#U#H#N#U#5ae#Y#H......", +"......................................#H#v#e#N#U#1aeaeahah#H....", +"....................................#H#v.1#d#O#Y#5aeahapaqaa#H..", +"..................................#H#N.1.M.7#Ya#aeagapatapap#5..", +"..................................#1#y.V.7#q#I#S#Ya#agajalalah#O", +"...................8#y.V.P.h.h...1a.#1#P#W#q.V.9#.#.#Kaaatauau#1", +".............8#y#q#y#I#R#Y#q.e.c#Papapaual#B.G###r#i.X#Calauau#1", +".........p.f.8#K#S#R#K#S#S#S#q.b#1auauauau.X#rakab#L.Y#iasauau#7", +".......p.l.j.n#d#K#R#R#S#K#K#S#p#Pauauauau#D#8amac#L.Y##auauaual", +".....p.j.e.p.i.q#d#A#I#W#W#Q#S#S#Pauauauau#D#Zacac#L#j#sauauauag", +"...m.p.m.f.e.i.l.S#Raaaaagalatal#Xauauatah#K#L#3ac#3#j#3auauau#6", +"...l.m.m.e.i.y#b.Laiauauauauauau#Pauauahafaf#7#r#r#i#Dauauauauae", +"...e.f.j.b.e#b.R.haaauauauauauau#Hahaoaf#5#6#7#K#h#Ba#ajauauag#H", +".D.D.l.b.a.f#M.h.#aaauauauauauau.P#5aeae#1#Y#6#w.2.9#g#z#7#7ae..", +".p.s.s.b.a.f#F.t.baiaualagahalag.E#dae#1#P#J#Y#y.F.C.N.W.2#f#H..", +".e.p.p.a.a.f#E.D.calau.F.#.u#n#2.K.f#4#X#x.8#y#A.F.o.w.C.7#H....", +".t.x.f.a.a.e#E.D.caqau.g.z.A.A#J.R.f.O#Y#U#f#y#P#N.M.v#d#x......", +"...i.c.b.a.f#E.D.calaq.Bad#G.d#I.E.#.q#o#N#X#P#P#P#v#A#x........", +"...e.a.a.b.f#t.x.capap.M.L.k.oae.D.#.K.R.f.B#Y#1#1#V............", +"...e.b.b.b.f#t.t.calau#P.n.n#Qau.y.#.R.R.#.c....................", +"...i.e.c.b.f#t.x.haqauau#Y#Yaqau.p.#.R.R.c.h....................", +"...l.c.e.e.j#t.s.tauau#6.q.q#Nau.h.c.T.0.c.j....................", +"...c.e.i.i.j#F.x.Dauau.U.S.1.q#5.D.c.5.R.c.j....................", +"...e.i.l.l.y#b.x.taq#5.A#4an.1#9.H.c#c.Z.c.p....................", +"...e.l.l.l.3.0.r.5auae.U#N#O#e#9.D.c#m.4.r.I....................", +"...c.r.x.r.0.J#t#0arau#9.6#d#9au.J.c.R.3.s.I....................", +"...e.x.y.y.3.3.Z#uauauauauauauah.Q.l.D.0.x......................", +".....l.H.I.Z#k.y#mauauauau#9#v.4.J.r............................", +".......y.I.J#k.x.3#T#q#m.3.Q.Q.y.s..............................", +".........y.Z#t#l#a.Z.J.y.H.x....................................", +"...........y#l.I.x.x.x.........................................." +}; +SIMPLE = T +BITPIX = 8 +NAXIS = 2 +NAXIS1 = 32 +NAXIS2 = 32 +HISTORY Written by XV 3.10 +END + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SSSSSDxNCCCSSSSSSSSSSSSSSSSSSSSSSSSSDd„xmdRDMCSSSSSSSSSSSSSSSSSSSSSDNRzCk²Ÿ…kZZD +=SSSSSSSSSSSSSSSSS4MNdzD…ùùùùÒžoR=SSSSSSSSSSSSSSS.CDDkkdŽùùùùùùåZ4MgCSSSSSSSSSSS +S%=C=gR„¨òùÒ‚ŽÒùR%ak=NSSSSSSSSSSS.444kg=qùÙs®²’ÒM%…o=NSSSSSSSSSSS./44DwCDïÉRÀà„Ò +M%~d%:SSSSSSSSSSS%.//2ŠCMùùse„EÉM%qa%2SSSSSSSSSSS4%..2„=DùùÍEE®ù8%ig%2SSSSSSSSSS +S/.%(.„C8ïùù¿¿ïù:aa%8SSSSSSSSSSS.(((.„D%ëù²EEµùDaa%SSSSSSSSSSS. (.„C%ééib9KÙ +MWa.U¿Â¹SSSSSSS/%( .ˆM%ëïUÓ¢)«QE–®½²²²ž©¥SSSSDC. .ˆM%ïù4LRRa.l¿¸˜¥²®iTŽ¥SSS +.:: .ˆM%ëùkOÅW.À½¥¥©kK[b‰¨SS:==( .ŠD(èùëàåëàQŽÙ²¿¥kbv‚˜¨SMM4( .”8Ûùùùùùù +uÉÙÙ¿ͤ–›«ÏÏÙSS..2(.wa8Ûùùùùùù¨åéÛÉÍϰ¢«Ûëùùà¨S4::./Dwbèùùùùùù²ùùåÛÛÏ®¸ùùùùÙ +S:::../4e¸ÛÛàëûë½ùùûå°ÅØèرØùùùÍSS:2.:/EŽ©«»»µ»»²ùùùù¸ÌèèűµùùùàSSS:42Eް¸¸»°°»™ +²ùùùù¸ÌãèÅœ¥ùùùëSSSS:.°»¸°»»»Ÿ(ÂùùùùÜÚÅœ®öùùÏSSSSSS¥Ÿ¥«¸¿Ÿ.%²ééùë«x¥®´ëùù +SSSSSSSSS¥u88S„ØÂ²»Ÿ–œœ°ÛûùùÂSSSSSSSSSSSSSSSSSÂ¥‰Ÿ«»¿Ûàëëëå²SSSSSSSSSSSSSSSS +S¨®„i‰¿ÛÙàéûééÉSSSSSSSSSSSSSSSSSSS¨ž„޲¿ÉÙåéïÛ¨SSSSSSSSSSSSSSSSSSSS¨ž’®¸ÂÙÙåå¨SSSSSSSSSSSSSSSSSSSSSS¨¸¨®¸ÉÙ¿¨SSSSSSSSSSSSSSSSSSSSSSSSS–®®ž²SSSSS€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ diff --git a/examples/demo/opengl/texture.xpm b/examples/demo/opengl/texture.xpm new file mode 100644 index 0000000..3c423e9 --- /dev/null +++ b/examples/demo/opengl/texture.xpm @@ -0,0 +1,130 @@ +/* XPM */ +static char *Monalisa[] = { +/* width height num_colors chars_per_pixel */ +" 48 48 27 1", +/* colors */ +". c #000000", +"# c #281808", +"a c #38240c", +"b c #492c10", +"c c #553414", +"d c #593818", +"e c #5a5a5a", +"f c #65411c", +"g c #794d24", +"h c #7d5124", +"i c #86592c", +"j c #966534", +"k c #9a6938", +"l c #aa7545", +"m c #ae7949", +"n c #b68251", +"o c #be8a59", +"p c #c79665", +"q c #cf9e6d", +"r c #d3a275", +"s c #d7aa7d", +"t c #dfb28a", +"u c #e3ba92", +"v c #ebc7a6", +"w c #ebcbae", +"x c #ffffff", +"y c None", +/* pixels */ +"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", +"e..............................................x", +"e.oppqnnoononoonnoonpppooqpooonopppqppoonnpoopox", +"e.oloonpnoonpooooopnpolljjllnpnqoopooopnnnnpoopx", +"e.looooopnoonpoppoplifbbbbccdgloppppoqpoooopoqqx", +"e.ooopqppqpoopopppibbdcababbddcdloppqoolpnppppqx", +"e.pporpppppqppqoogbcdgabbbbbaccdckppqqpoopoqrrrx", +"e.rpqqqooppoprrrgbccgdbcbbaababccbjppqqppopoqrrx", +"e.pqppqsqpppqrrkbbdilkigcbabbabbdcclpqpqopppqqqx", +"e.oqqqppqpqqrtpcgnrstrrnmifbbbbccccdnpqrqqqoqqqx", +"e.qpqpqpqpqstrjdnruwwwusrnigcbabccdchrrsrqrqqprx", +"e.oqqpqqpqrttoajrvwwwwwwrrlhdbbaacdcborqrrrrqrrx", +"e.qqqrrtrstwtfdntwvvwvwwuqmjgcbbbacbbirqpqrrrrsx", +"e.qrrrrrrrtvofdntwvwwvwutpmkidcbaaababpnopppprrx", +"e.srprrrprspidhouwwvvwvtsrpnkjfbbaaaabjknnmnpprx", +"e.rrsrrssssoddiruvvvvwvwttrrokgccbbabagjkkkmpnpx", +"e.stwrwrwrvkddipuuvvvvtssrrpnkfdcbbaaafiijkllmnx", +"e.lnrsrwrvpjddfppoqutslllmmkjifcddbbbbffhiklknmx", +"e.kjjrsrwrmfddffkkjpslfilifdbhgcccbbbbcfgghjkkkx", +"e.ijjrwrrrofdddblafmtiimmahfklhbccbabacfffgjjjhx", +"e.hjjppklonddakoonlrtilrrnkornicccbbaacgfggfihfx", +"e.fhfkiidjkdbakttrsrtmosstttrmhddddcbcbdffhkfghx", +"e.dffafhfffhaairuutusqmwuwurplhdfddcdccggggghffx", +"e.dddddfdddaddhruututnrswutrlkfcdfdfdcchjjkkmmkx", +"e.daffdadaddaadrstrutomustsokffddddcdccddfhihjkx", +"e.fgddddabadddalrsotpiktutpmkidcddfddcdddddghfgx", +"e.fcddddbabbdbainrsnfairspnkigdcdfccdcccdddddfdx", +"e.ddddbbddbbbadfmlsrkmmmmomkjgddfdfgdccdfffffffx", +"e.ddcdadbbabddahlnlnmiiioonlffdbfdccddddfffffffx", +"e.cdbbdbdcbcdbdakorrmmkmopniifdcddddcddddffgfgfx", +"e.cddcbdddcabddadkrqmlmmnlkfhdbccccddcccdfdfgfgx", +"e.dgffffhhcfadbddalsvtonkjffddcdccddcdccdggfgggx", +"e.dcdddffgdadddbadaoqomkffffdbbbcbdddcbccfffgfgx", +"e.cdddgilkfbcdbdaaaaiffffdfdbddbccddccbbcffdfgfx", +"e.fhggghkkhddbdbaaaaadfafddbfbddccccbcbbcfddfgdx", +"e.hkhmllkkidabdbbaaaafdfadbddffdcbabbbbabdffdfgx", +"e.imlllhliifddbbb#baakjffddfhhhfcbdbbbbbbfdfiffx", +"e.hljhllhjhfbdbbaaadafmlkihhhiihdbbbbabbbdfgghgx", +"e.dhlggiiigdccdbaa#abgmlmkkjkklkhdbdbbdaabbccccx", +"e.hbadfdcbcbaabaaabdfimnnmllmnmkiddbdddbbbabddcx", +"e.gbbabbbabbbcbbbbbinrppoonppppojfdffddcbbabcbcx", +"e.dba#abcbabcbcbdhknrtrtrrrrrrroliffidccccbdcghx", +"e.fbab#acbbcbbccinsrtttssttwssrpkfigifcbbcbbbcfx", +"e.daacbbdcbbbbdborpwttwwttwswsrpmigfgdbbdbbbbcdx", +"e.dcccbcddcbddfirtuwwwswswswrwprlfigfdcddccbacdx", +"e.fdcdcddbbcddgmrswwwuwtswwtwsrpjiiffccbcfddcbcx", +"e.fdfhccbbbbfhiowwswwwtwutwttwrpjfiggbcdhgdfcbbx", +"exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +}; +SIMPLE = T +BITPIX = 8 +NAXIS = 2 +NAXIS1 = 48 +NAXIS2 = 48 +HISTORY Written by XV 3.10 +COMMENT the GIMP was here +END + + + + + + + + + + + + + + + + + + + + + + + + + + + + +ZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿZ€G>GY::1111GYa”ÑѲÑÑÑ»ÑÁ»Ñ»»Ñ«Ÿ +nGaUU1:>YU>G:11ÿZ€G>:>:>>11:>>Uƒ«²ÑÑÑÁÑ»²ÑѻѲ«ŸnaaGG::1:G>>:1:ÿZ€>:::1:>>:1>>Ga +«»ÁÑÑѲѲѲѫџ«GaUG>:>>::1':>ÿZ€>'':11>:1111>1”«ŸÑ»»ÑÑ»»Ñ²Ñ²«ŸƒaUGU>11>1111:>ÿ +Z€G1'1':11:11::aŒ²«»»»²²»»Ñ²²«ŸrGaUaG:11:111:GÿZ€>1''1:1'1:1:1>YrŒ«»«»«««««««” +aGGa>::::1>:UYÿZ€U11'111'111:11111aŒ«ŸŸ””ŒŸŸŸŸ”nG>GG>>:11'1:1:ÿZ€Y1'>G>:1:1''1' +''1>GaƒŒŒƒƒŒƒra>>1>>>111'1>>:ÿZ€>YUUaaaU>::>1'''1UƒƒrrnrrrY>1>11>''11::::ÿ +Z€YnYYnYG1>11'''>'GƒraYYYaaY>1111'111>GUUYUÿZ€aƒYaaG>>1111''rnGG>>GYYYG +:1>111111G>GaGGÿZ€YrYƒrra>'1>11''''G>G'>1>>GG>:1'1111'1>GG>GUÿZ€GYUUUYrrY>>1>1 +'''''>G'G>>1G1>>::::1:11:G>>GU>ÿZ€:>>>UarG1:>1>''''aGGGG>G>1>>1::>>::11:GG>GUGÿ +Z€>:>>>GGU>'>>>1'>'”§”ƒrGGGG>111:1>>>:1::GGGUGUÿZ€>UGGGGYY:G'>1>>'²Î»”ŒrnGG>>:> +::>>:>::>UUGUUUÿZ€:>>:1>>>:'1>>'>r«§ƒƒƒŒrGY>1::::>>:::>G>GUGUÿZ€:>11>1>:1:>1>' +r”««ƒƒrƒ”ŸŒaaG>:>>>>:>>>>GGUGUGÿZ€>>:>'>11'1>>'YŒŒƒaaa””ŒGG>1G>::>>>>GGGGGGGÿZ€>>>>11>>111'>Gƒ²«rƒƒƒƒ”ƒrnU>>G>GU>::>GGGGGGGÿZ€G:>>>>1'11>1'aŒ«²ŒG'a«²ŸŒraU>:>G::>:::>>>>>G>ÿZ€GU>>>>'1'>>>'«²”»Ÿar»Á»Ÿƒra>:>>G>>:>>>>>UYGUÿZ€>'GG>'>'>>''>«²»«Á»”ƒÁ²»²”rGG>>>>:>::>>GYaYnrÿZ€>>>>>G>>>'>>Y«ÁÁ»Á»Œ«²ÑÁ»«rG:>G>G>::YnnrrƒƒrÿZ€>GG'GYGGGY''a«ÁÁ»Á²§ƒÑÁÑÁ«ŸY>G>>:>::UUUUUYGGÿZ€GYGraa>nr>1'r»»«²«»ƒ”²²»»»«ƒY>>>>:1:1>GGYrGUYÿZ€YnnŸŸr”Œ>>'r””Œ«»a««Œr”«Œa:::11'':UGUUGaYGÿZ€ann«Ñ«««”G>>>1'Gƒ»aaƒƒ'YGrY1::1'1':GGGUnnnYÿZ€rnn«²«Ñ«ƒG>>GGrrnŸ²GaaG>1YU:::1111:GUUYnrrrÿZ€Œ«²«Ñ«ÎŸn>>GŸŸ”§Á»²ƒƒrnaG:>>1111GGYarrŒƒÿZ€²»Ñ«Ñ«Ñ«Îr>>aŸÁÁÎÎÎλ²²««ŸŒrG>:11'''GaanrƒŒÿZ€««²««²²²²”>>a«ÁÎÎÎÎÑÎÑ»»««”rU::11'1'UnrrrƒŸŒŸÿZ€²«Ÿ«««Ÿ«²Ÿa>Y”ÁÑÑÎÎÑ벫ŸŒrnG11''''1nrŒŒƒŒŸŸ«ÿZ€§«««««««»Î”G>Œ»ÑÎÑÑÎÑÁ»Ÿƒra>:1'''1'1ŸŒ”ŸŸŸŸ««ÿZ€§§§««»«²»Ñ»G>Œ»ÑÎÎÑÎÑÑÁ§ƒnU:111':11a«§Ÿ§««««²ÿZ€”§§Ÿ§§Ÿ§«»»”'n«ÎÑÑÑÑÑÑ««Y>11'':>:1”«§««««§««ÿZ€§Ÿ§Ÿ§Ÿ§Ÿ§²»«n>Œ«ÁÑÑÑÁ²«ŒaU:1'1::>:Y««²«§«§§Ÿ«ÿZ€”§§§ŸŸ§Ÿ§§«»Ÿ:UŒ«²»««ŒƒaG1111::::>ŒŸ§«§§§”§§§ÿZ€Ÿ§ŸŸ§²§ŸŸŸ§««r11>araU:1'11'11>::Ÿ§Ÿ§”ŸŸŸ§§§ÿZ€«Ÿ§§§””ŸŸ”Ÿ«««U1::U>1:11''1'1::1nŸŸ§§ŸŸ”Ÿ”§««ÿZ€ŸŸ”«ŸŸŸŸŸ§ŸŸ§””U1:>U'11111'::>:rŸŸ§§Ÿ””Ÿ”§«««ÿZ€”””Ÿ§ŸŸ§Ÿ””Ÿ”ŸŸŸa11>:'1'11>>:>”ŸŸ§””ŸŒŸŸŸŸ§ÿZ€”””””ŸŒ””ŒŸ”ŸŸ”ŸaG1111::>U”ŸŸŸŸ”§Ÿ””””Ÿ”§§ÿZ€”””ŒŸŒ””ŒŸ”””””ŸŒŸ”nnŒŸŒ§””Ÿ”””ŸŒŒŒŒŸ””ŸÿZ€”ŸŸ§ŒŒ””Œ”Œ””ŒŒ””ŒŸŸŸ””§Ÿ”””Œ”ŸŸŸ§ŸŸ””ŒŒŸ””Ÿ”ÿZ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ÿZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ diff --git a/examples/demo/opengl/wirebox.xpm b/examples/demo/opengl/wirebox.xpm new file mode 100644 index 0000000..77ca534 --- /dev/null +++ b/examples/demo/opengl/wirebox.xpm @@ -0,0 +1,155 @@ +/* XPM */ +static char * EscherCube_xpm[] = { +"48 48 104 2", +" c None", +". c #30C230C22081", +"X c #30C230C230C2", +"o c #30C2410330C2", +"O c #410330C24103", +"+ c #410341034103", +"@ c #514451445144", +"# c #514461855144", +"$ c #618551446185", +"% c #618561856185", +"& c #71C671C671C6", +"* c #71C6820771C6", +"= c #965882078617", +"- c #861792488617", +"; c #965892489658", +": c #9658A2899658", +"> c #9E79A2899E79", +", c #AEBAAEBA9E79", +"< c #AEBAAEBAAEBA", +"1 c #AEBABEFBAEBA", +"2 c #BEFBBEFBBEFB", +"3 c #CF3CBEFBCF3C", +"4 c #CF3CCF3CCF3C", +"5 c #DF7DCF3CCF3C", +"6 c #DF7DDF7DCF3C", +"7 c #DF7DDF7DDF7D", +"8 c #EFBEDF7DDF7D", +"9 c #DF7DEFBEDF7D", +"0 c #EFBEDF7DEFBE", +"q c #EFBEEFBEDF7D", +"w c #208130C22081", +"e c #410351445144", +"r c #514451446185", +"t c #71C6618571C6", +"y c #861771C68617", +"u c #9E7992489E79", +"i c #9E79AEBA9E79", +"p c #BEFBAEBABEFB", +"a c #BEFBCF3CBEFB", +"s c #BEFBCF3CCF3C", +"d c #CF3CCF3CDF7D", +"f c #CF3CDF7DCF3C", +"g c #DF7DDF7DEFBE", +"h c #208120812081", +"j c #30C2208130C2", +"k c #410330C230C2", +"l c #4103410330C2", +"z c #410351444103", +"x c #618551445144", +"c c #618561855144", +"v c #618571C66185", +"b c #861771C671C6", +"n c #8617820771C6", +"m c #965882079658", +"M c #9E7992489658", +"N c #AEBAA289AEBA", +"B c #BEFBAEBAAEBA", +"V c #DF7DCF3CDF7D", +"C c #CF3CDF7DDF7D", +"Z c #208120811040", +"A c #965892488617", +"S c #104020812081", +"D c #861782078617", +"F c #861792489658", +"G c #965892489E79", +"H c #104020811040", +"J c #208110402081", +"K c #30C220812081", +"L c #BEFBBEFBCF3C", +"P c #104010401040", +"I c #208110401040", +"U c #618571C671C6", +"Y c #71C671C68617", +"T c #71C682078617", +"R c #CF3CBEFBBEFB", +"E c #CF3CCF3CBEFB", +"W c #000010401040", +"Q c #104010402081", +"! c #9E79AEBAAEBA", +"~ c #104010400000", +"^ c #AEBAA2899E79", +"/ c #71C671C66185", +"( c #000010400000", +") c #000000000000", +"_ c #104000001040", +"` c #2081208130C2", +"' c #9658A2899E79", +"] c #104000000000", +"[ c #000000001040", +"{ c #30C241034103", +"} c #9E79A289AEBA", +"| c #AEBABEFBBEFB", +" . c #514461856185", +".. c #9E79A2899658", +"X. c #71C661856185", +"o. c #30C230C24103", +"O. c #514441035144", +"+. c #514451444103", +"@. c #410341035144", +"#. c #AEBAAEBABEFB", +"$. c #208130C230C2", +"%. c #6185618571C6", +"&. c #514441034103", +"*. c #861782079658", +" . X o O + @ # $ % & * = - ; : > , < 1 2 2 3 4 5 6 7 7 8 9 0 q ", +" w X X O + @ e r % t & y - ; : u i < < p a 3 s d f 7 7 g 9 0 9 ; ", +" h j X k l + z x c t v b n m ; M > N < B 2 2 a 3 4 V 6 7 7 0 9 m ; ", +" h h w X f d f d f V f V f 7 f 7 C 7 f V f V f d f V f 7 9 g 9 m ; ; ", +" Z h w j - 4 4 5 4 5 4 5 4 V f V 6 V f V f V 4 5 4 5 4 V 7 7 7 m A ; ; ", +" S h h j - D s 4 4 4 4 4 4 4 4 d f V f d f d 4 d 4 4 4 V C 7 7 m - ; F G ", +" H J Z K * D D m ; M 5 4 V 7 = D m - ; ; ", +" H h S h * y D L F ; : 4 f V C D D m a ; ; G ", +" P I H J & b n 2 2 m A M 3 4 5 f y D = 2 2 A ; ; ", +" P P H J U Y & p 1 2 - ; : 4 4 d f y T D 1 p 1 ; F G ", +" P P H J % t & < < < m ; u R E 4 f b * y B < < A ; ; ", +" W P P Q % t v < ! < - ; : L a 4 4 & * y < < ! ; ; G ", +" ~ P ~ I c $ % > ^ > m ; M 2 2 3 4 t / b ^ i ^ ; M ; ", +" ( P W P # $ % > > > F ; : p a 3 s t U & > > > ; ; G ", +" ) _ ( _ @ $ # M ; u m ; u p 2 2 a % v t M ; u ; M ; ", +" ( _ ( P P P H h h ` w X o : ; F F ; : & * D - G ' > i < 1 2 a % v t : ; F ; : u ", +" ) ] ( _ ~ P P I Z h w j X O m - m ; ; M & y - m ; > i N < 2 2 $ c % m - m ; M : ", +") [ ( _ W P P Q H h h j X O { D D - F G : y T m ; u > } < p | r .% D D - G : u ", +"V f 5 4 5 f V f V f V f V f V y * y m ; u f 5 f V f 5 4 V f x @ $ y * y : u ..", +"4 d f 4 f d f d 4 d f V f V f U & U F G : d f d f d f 4 4 d @ r # U & U G : > ", +"3 4 3 E 4 E 4 4 3 4 4 4 5 4 5 t v X.; ; u 4 4 4 4 E 4 E 3 4 @ @ x t v X.; u ..", +"a 4 a o.{ + .% v ; G > 3 a 4 e @ # .% v u ' > ", +"3 2 3 X O o $ # $ ; ; u 2 3 2 O.+.@ $ # $ : u > ", +"a 2 a X o + @ @ @ ; u ' 2 2 2 z @ @ @ @ @ u > } ", +"p < p X k l O.z O.; : u 1 p < O.+.@ O.z O...> i ", +"1 < 1 o.o + @.z @.; G > #.1 < z O.@ + @.z > > } ", +"N , N X O o l + o ; ; u 1 1 1 O.+.@ O l + : u > ", +"i } i o.o + O o o.; u o + z @ # % v } i } e @ @ } < #.| L a 4 f V o o.o G ' > ", +"> ..u o O + . X . ; o O + O.@ $ % & u u ..@ @ x , < 1 2 2 3 4 5 6 X . X ; u ..", +"' u : O + + j $.j $.o.{ O.e r % %.U G : u @ r # < < p 2 3 s d f 7 $.j $.u : u ", +"; A M l + + h j . K h j h K h h h h ; ; A x @ $ h h h h h K h j 6 7 7 0 : u ..", +"- m - + { @. h h w %.w h h h h h S h S m - m # r # h S h S h h h f 7 9 g F G : ", +"y D D l + + Z h h t % h Z J Z J Z J Z J D y D x # $ H J Z J Z J f V 7 7 - M ; ", +"* y * + z O. S h h & U t y * y @ $ . 4 d C 7 - m ; ", +"& / b l + + P J Z y & t & & / x c $ E 5 4 V n = D ", +"v %.v + z O. H J H D * & & v %.# % . a 4 f V * D - ", +"X.% % + &.z P P H D n y c $ % $ c $ a 3 4 V * y D ", +"# $ # + z @ P P H J m - D $ # $ # $ % 2 3 4 d * y T ", +"@ @ x + + z W P P Q m D m @ @ @ $ c % 2 R E 4 & b * ", +"z O.e + z @ P ~ I ; ; *. @ z O. .% % L s 4 U & * ", +"&.+ &.l &.+.W P M ; m + &.+ $ c X.2 3 v t & ", +"{ + { @.z O._ u ' ; + { + .$ % 3 v t & ", +"O o k + O.P P P H h h ` w X o l + z @ c X./ b n m ; u o O o $ % % % t v ", +"$.X $.@._ ~ P P I Z h w j X O + + @ # % v & * D - ; : X $.X .% v %.v ", +"j . j _ W P P Q H h h j X O { + &.@ $ c t & y D m ; > . j . % c X.% ", +"w j w ` w j w ` w ` h ` h h S h h h h ` h ` w ` w j w ` w j .% % ", +"h h K h h h h h h h J h J H J Z J H J h h h h h h h J h h h $ % ", +"S h h h H h S h S h S h H Q H J H Q H h H h S h S h S h S h . "}; diff --git a/examples/demo/qasteroids/bg.png b/examples/demo/qasteroids/bg.png Binary files differnew file mode 100644 index 0000000..33cdc48 --- /dev/null +++ b/examples/demo/qasteroids/bg.png diff --git a/examples/demo/qasteroids/ledmeter.cpp b/examples/demo/qasteroids/ledmeter.cpp new file mode 100644 index 0000000..d2113a8 --- /dev/null +++ b/examples/demo/qasteroids/ledmeter.cpp @@ -0,0 +1,117 @@ +/* + * KAsteroids - Copyright (c) Martin R. Jones 1997 + * + * Part of the KDE project + */ + +#include <qpainter.h> +#include "ledmeter.h" + +KALedMeter::KALedMeter( QWidget *parent ) : QFrame( parent ) +{ + mCRanges.setAutoDelete( TRUE ); + mRange = 100; + mCount = 20; + mCurrentCount = 0; + mValue = 0; + setMinimumWidth( mCount * 2 + frameWidth() ); +} + +void KALedMeter::setRange( int r ) +{ + mRange = r; + if ( mRange < 1 ) + mRange = 1; + setValue( mValue ); + update(); +} + +void KALedMeter::setCount( int c ) +{ + mCount = c; + if ( mCount < 1 ) + mCount = 1; + setMinimumWidth( mCount * 2 + frameWidth() ); + calcColorRanges(); + setValue( mValue ); + update(); +} + +void KALedMeter::setValue( int v ) +{ + mValue = v; + if ( mValue > mRange ) + mValue = mRange; + else if ( mValue < 0 ) + mValue = 0; + int c = ( mValue + mRange / mCount - 1 ) * mCount / mRange; + if ( c != mCurrentCount ) + { + mCurrentCount = c; + update(); + } +} + +void KALedMeter::addColorRange( int pc, const QColor &c ) +{ + ColorRange *cr = new ColorRange; + cr->mPc = pc; + cr->mColor = c; + mCRanges.append( cr ); + calcColorRanges(); +} + +void KALedMeter::resizeEvent( QResizeEvent *e ) +{ + QFrame::resizeEvent( e ); + int w = ( width() - frameWidth() - 2 ) / mCount * mCount; + w += frameWidth() + 2; + setFrameRect( QRect( 0, 0, w, height() ) ); +} + +void KALedMeter::drawContents( QPainter *p ) +{ + QRect b = contentsRect(); + + unsigned cidx = 0; + int ncol = mCount; + QColor col = colorGroup().foreground(); + + if ( !mCRanges.isEmpty() ) + { + col = mCRanges.at( cidx )->mColor; + ncol = mCRanges.at( cidx )->mValue; + } + p->setBrush( col ); + p->setPen( col ); + + int lw = b.width() / mCount; + int lx = b.left() + 1; + for ( int i = 0; i < mCurrentCount; i++, lx += lw ) + { + if ( i > ncol ) + { + if ( ++cidx < mCRanges.count() ) + { + col = mCRanges.at( cidx )->mColor; + ncol = mCRanges.at( cidx )->mValue; + p->setBrush( col ); + p->setPen( col ); + } + } + + p->drawRect( lx, b.top() + 1, lw - 1, b.height() - 2 ); + } +} + +void KALedMeter::calcColorRanges() +{ + int prev = 0; + ColorRange *cr; + for ( cr = mCRanges.first(); cr; cr = mCRanges.next() ) + { + cr->mValue = prev + cr->mPc * mCount / 100; + prev = cr->mValue; + } +} + diff --git a/examples/demo/qasteroids/ledmeter.h b/examples/demo/qasteroids/ledmeter.h new file mode 100644 index 0000000..d0f2091 --- /dev/null +++ b/examples/demo/qasteroids/ledmeter.h @@ -0,0 +1,53 @@ +/* + * KAsteroids - Copyright (c) Martin R. Jones 1997 + * + * Part of the KDE project + */ + +#ifndef __LEDMETER_H__ +#define __LEDMETER_H__ + +#include <qframe.h> +#include <qptrlist.h> + + +class KALedMeter : public QFrame +{ + Q_OBJECT +public: + KALedMeter( QWidget *parent ); + + int range() const { return mRange; } + void setRange( int r ); + + int count() const { return mCount; } + void setCount( int c ); + + int value () const { return mValue; } + + void addColorRange( int pc, const QColor &c ); + +public slots: + void setValue( int v ); + +protected: + virtual void resizeEvent( QResizeEvent * ); + virtual void drawContents( QPainter * ); + void calcColorRanges(); + +protected: + struct ColorRange + { + int mPc; + int mValue; + QColor mColor; + }; + + int mRange; + int mCount; + int mCurrentCount; + int mValue; + QPtrList<ColorRange> mCRanges; +}; + +#endif diff --git a/examples/demo/qasteroids/sounds/Explosion.wav b/examples/demo/qasteroids/sounds/Explosion.wav Binary files differnew file mode 100644 index 0000000..7b140b1 --- /dev/null +++ b/examples/demo/qasteroids/sounds/Explosion.wav diff --git a/examples/demo/qasteroids/sprites.h b/examples/demo/qasteroids/sprites.h new file mode 100644 index 0000000..0b0a718 --- /dev/null +++ b/examples/demo/qasteroids/sprites.h @@ -0,0 +1,129 @@ +/* + * KAsteroids - Copyright (c) Martin R. Jones 1997 + * + * Part of the KDE project + */ + +#ifndef __SPRITES_H__ +#define __SPRITES_H__ + +#include <qcanvas.h> + +#define ID_ROCK_LARGE 1024 +#define ID_ROCK_MEDIUM 1025 +#define ID_ROCK_SMALL 1026 + +#define ID_MISSILE 1030 + +#define ID_BIT 1040 +#define ID_EXHAUST 1041 + +#define ID_ENERGY_POWERUP 1310 +#define ID_TELEPORT_POWERUP 1311 +#define ID_BRAKE_POWERUP 1312 +#define ID_SHIELD_POWERUP 1313 +#define ID_SHOOT_POWERUP 1314 + +#define ID_SHIP 1350 +#define ID_SHIELD 1351 + +#define MAX_SHIELD_AGE 350 +#define MAX_POWERUP_AGE 500 +#define MAX_MISSILE_AGE 40 + +class KMissile : public QCanvasSprite +{ +public: + KMissile( QCanvasPixmapArray *s, QCanvas *c ) : QCanvasSprite( s, c ) + { myAge = 0; } + + virtual int rtti() const { return ID_MISSILE; } + + void growOlder() { myAge++; } + bool expired() { return myAge > MAX_MISSILE_AGE; } + +private: + int myAge; +}; + +class KBit : public QCanvasSprite +{ +public: + KBit( QCanvasPixmapArray *s, QCanvas *c ) : QCanvasSprite( s, c ) + { death = 7; } + + virtual int rtti() const { return ID_BIT; } + + void setDeath( int d ) { death = d; } + void growOlder() { death--; } + bool expired() { return death <= 0; } + +private: + int death; +}; + +class KExhaust : public QCanvasSprite +{ +public: + KExhaust( QCanvasPixmapArray *s, QCanvas *c ) : QCanvasSprite( s, c ) + { death = 1; } + + virtual int rtti() const { return ID_EXHAUST; } + + void setDeath( int d ) { death = d; } + void growOlder() { death--; } + bool expired() { return death <= 0; } + +private: + int death; +}; + +class KPowerup : public QCanvasSprite +{ +public: + KPowerup( QCanvasPixmapArray *s, QCanvas *c, int t ) : QCanvasSprite( s, c ), + myAge( 0 ), type(t) { } + + virtual int rtti() const { return type; } + + void growOlder() { myAge++; } + bool expired() const { return myAge > MAX_POWERUP_AGE; } + +protected: + int myAge; + int type; +}; + +class KRock : public QCanvasSprite +{ +public: + KRock (QCanvasPixmapArray *s, QCanvas *c, int t, int sk, int st) : QCanvasSprite( s, c ) + { type = t; skip = cskip = sk; step = st; } + + void nextFrame() + { + if (cskip-- <= 0) { + setFrame( (frame()+step+frameCount())%frameCount() ); + cskip = QABS(skip); + } + } + + virtual int rtti() const { return type; } + +private: + int type; + int skip; + int cskip; + int step; +}; + +class KShield : public QCanvasSprite +{ +public: + KShield( QCanvasPixmapArray *s, QCanvas *c ) + : QCanvasSprite( s, c ) {} + + virtual int rtti() const { return ID_SHIELD; } +}; + +#endif diff --git a/examples/demo/qasteroids/sprites/.pbm b/examples/demo/qasteroids/sprites/.pbm new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/examples/demo/qasteroids/sprites/.pbm diff --git a/examples/demo/qasteroids/sprites/bits/bits.ini b/examples/demo/qasteroids/sprites/bits/bits.ini new file mode 100644 index 0000000..cb2976f --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits.ini @@ -0,0 +1,9 @@ +Cyclic_Animation=On +Width=12 +Height=12 +Final_frame=16 ;; NR_ROTS +Antialias=On +Output_Alpha=On +Output_to_File=On +Output_File_Type=n +Input_File_Name=bits.pov diff --git a/examples/demo/qasteroids/sprites/bits/bits.pov b/examples/demo/qasteroids/sprites/bits/bits.pov new file mode 100644 index 0000000..9be7ccb --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits.pov @@ -0,0 +1,31 @@ + +#version 3.0 +global_settings { assumed_gamma 2.0 } + +#include "colors.inc" +#include "textures.inc" +#include "metals.inc" + +camera { + location <15, -15, -100> + look_at <0, 0, 0> +} + +light_source { <50, 50, -50> colour White } +light_source { <0, 0, -50> colour White } + +prism { + linear_sweep + linear_spline + 0, + 0.2, + 5, + <2, 0>, <0, 2>, <-1, 1>, <0, -3>, <2, 0> + texture { T_Silver_2A } + + rotate <360*clock, 50, 30> + scale <20, 20, 20> +} + + + diff --git a/examples/demo/qasteroids/sprites/bits/bits0000.png b/examples/demo/qasteroids/sprites/bits/bits0000.png Binary files differnew file mode 100644 index 0000000..5ec9d02 --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0000.png diff --git a/examples/demo/qasteroids/sprites/bits/bits0001.png b/examples/demo/qasteroids/sprites/bits/bits0001.png Binary files differnew file mode 100644 index 0000000..07b4012 --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0001.png diff --git a/examples/demo/qasteroids/sprites/bits/bits0002.png b/examples/demo/qasteroids/sprites/bits/bits0002.png Binary files differnew file mode 100644 index 0000000..8333792 --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0002.png diff --git a/examples/demo/qasteroids/sprites/bits/bits0003.png b/examples/demo/qasteroids/sprites/bits/bits0003.png Binary files differnew file mode 100644 index 0000000..9f1fc02 --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0003.png diff --git a/examples/demo/qasteroids/sprites/bits/bits0004.png b/examples/demo/qasteroids/sprites/bits/bits0004.png Binary files differnew file mode 100644 index 0000000..eb1cc09 --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0004.png diff --git a/examples/demo/qasteroids/sprites/bits/bits0005.png b/examples/demo/qasteroids/sprites/bits/bits0005.png Binary files differnew file mode 100644 index 0000000..149be63 --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0005.png diff --git a/examples/demo/qasteroids/sprites/bits/bits0006.png b/examples/demo/qasteroids/sprites/bits/bits0006.png Binary files differnew file mode 100644 index 0000000..4ac75c8 --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0006.png diff --git a/examples/demo/qasteroids/sprites/bits/bits0007.png b/examples/demo/qasteroids/sprites/bits/bits0007.png Binary files differnew file mode 100644 index 0000000..907241d --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0007.png diff --git a/examples/demo/qasteroids/sprites/bits/bits0008.png b/examples/demo/qasteroids/sprites/bits/bits0008.png Binary files differnew file mode 100644 index 0000000..1533268 --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0008.png diff --git a/examples/demo/qasteroids/sprites/bits/bits0009.png b/examples/demo/qasteroids/sprites/bits/bits0009.png Binary files differnew file mode 100644 index 0000000..05402ba --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0009.png diff --git a/examples/demo/qasteroids/sprites/bits/bits0010.png b/examples/demo/qasteroids/sprites/bits/bits0010.png Binary files differnew file mode 100644 index 0000000..ca4f229 --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0010.png diff --git a/examples/demo/qasteroids/sprites/bits/bits0011.png b/examples/demo/qasteroids/sprites/bits/bits0011.png Binary files differnew file mode 100644 index 0000000..91913c0 --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0011.png diff --git a/examples/demo/qasteroids/sprites/bits/bits0012.png b/examples/demo/qasteroids/sprites/bits/bits0012.png Binary files differnew file mode 100644 index 0000000..e55d439 --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0012.png diff --git a/examples/demo/qasteroids/sprites/bits/bits0013.png b/examples/demo/qasteroids/sprites/bits/bits0013.png Binary files differnew file mode 100644 index 0000000..9c73436 --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0013.png diff --git a/examples/demo/qasteroids/sprites/bits/bits0014.png b/examples/demo/qasteroids/sprites/bits/bits0014.png Binary files differnew file mode 100644 index 0000000..f0463a2 --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0014.png diff --git a/examples/demo/qasteroids/sprites/bits/bits0015.png b/examples/demo/qasteroids/sprites/bits/bits0015.png Binary files differnew file mode 100644 index 0000000..bce35aa --- /dev/null +++ b/examples/demo/qasteroids/sprites/bits/bits0015.png diff --git a/examples/demo/qasteroids/sprites/exhaust/exhaust.png b/examples/demo/qasteroids/sprites/exhaust/exhaust.png Binary files differnew file mode 100644 index 0000000..a17ee71 --- /dev/null +++ b/examples/demo/qasteroids/sprites/exhaust/exhaust.png diff --git a/examples/demo/qasteroids/sprites/missile/missile.png b/examples/demo/qasteroids/sprites/missile/missile.png Binary files differnew file mode 100644 index 0000000..4283c67 --- /dev/null +++ b/examples/demo/qasteroids/sprites/missile/missile.png diff --git a/examples/demo/qasteroids/sprites/powerups/brake.png b/examples/demo/qasteroids/sprites/powerups/brake.png Binary files differnew file mode 100644 index 0000000..75cd649 --- /dev/null +++ b/examples/demo/qasteroids/sprites/powerups/brake.png diff --git a/examples/demo/qasteroids/sprites/powerups/energy.png b/examples/demo/qasteroids/sprites/powerups/energy.png Binary files differnew file mode 100644 index 0000000..2d97ac1 --- /dev/null +++ b/examples/demo/qasteroids/sprites/powerups/energy.png diff --git a/examples/demo/qasteroids/sprites/powerups/shield.png b/examples/demo/qasteroids/sprites/powerups/shield.png Binary files differnew file mode 100644 index 0000000..bd60555 --- /dev/null +++ b/examples/demo/qasteroids/sprites/powerups/shield.png diff --git a/examples/demo/qasteroids/sprites/powerups/shoot.png b/examples/demo/qasteroids/sprites/powerups/shoot.png Binary files differnew file mode 100644 index 0000000..4b2b3e3 --- /dev/null +++ b/examples/demo/qasteroids/sprites/powerups/shoot.png diff --git a/examples/demo/qasteroids/sprites/powerups/teleport.png b/examples/demo/qasteroids/sprites/powerups/teleport.png Binary files differnew file mode 100644 index 0000000..121ec9c --- /dev/null +++ b/examples/demo/qasteroids/sprites/powerups/teleport.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock1.ini b/examples/demo/qasteroids/sprites/rock1/rock1.ini new file mode 100644 index 0000000..e42fc76 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock1.ini @@ -0,0 +1,9 @@ +Cyclic_Animation=On +Width=48 +Height=48 +Final_frame=32 ;; NR_ROTS +Antialias=On +Output_Alpha=On +Output_to_File=On +Output_File_Type=n +Input_File_Name=rock1.pov diff --git a/examples/demo/qasteroids/sprites/rock1/rock1.pov b/examples/demo/qasteroids/sprites/rock1/rock1.pov new file mode 100644 index 0000000..58298c0 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock1.pov @@ -0,0 +1,26 @@ +#include "colors.inc" +#include "shapes.inc" +#include "textures.inc" +// #include "stones.inc" + +camera { + location <2,2,-6> + up <0, 1, 0> +// right <4/3, 0, 0> + look_at <0,0,0> +} + +object { light_source { <10, 5, -5> color red 1.1 green 1.1 blue 1.0 } } + +#declare Rock = +mesh { + #include "rock.inc" /* collection of triangle or smooth_triangle data */ +} + +object { + Rock + texture { pigment {White} } + scale 1.9 + rotate <60, 45, 360*clock> +} + diff --git a/examples/demo/qasteroids/sprites/rock1/rock10000.png b/examples/demo/qasteroids/sprites/rock1/rock10000.png Binary files differnew file mode 100644 index 0000000..2e3ff93 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10000.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10001.png b/examples/demo/qasteroids/sprites/rock1/rock10001.png Binary files differnew file mode 100644 index 0000000..ba70d24 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10001.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10002.png b/examples/demo/qasteroids/sprites/rock1/rock10002.png Binary files differnew file mode 100644 index 0000000..88d776e --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10002.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10003.png b/examples/demo/qasteroids/sprites/rock1/rock10003.png Binary files differnew file mode 100644 index 0000000..9db197d --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10003.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10004.png b/examples/demo/qasteroids/sprites/rock1/rock10004.png Binary files differnew file mode 100644 index 0000000..9b92d55 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10004.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10005.png b/examples/demo/qasteroids/sprites/rock1/rock10005.png Binary files differnew file mode 100644 index 0000000..9cdddf5 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10005.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10006.png b/examples/demo/qasteroids/sprites/rock1/rock10006.png Binary files differnew file mode 100644 index 0000000..0c421a0 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10006.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10007.png b/examples/demo/qasteroids/sprites/rock1/rock10007.png Binary files differnew file mode 100644 index 0000000..2339c83 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10007.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10008.png b/examples/demo/qasteroids/sprites/rock1/rock10008.png Binary files differnew file mode 100644 index 0000000..d1eb8aa --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10008.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10009.png b/examples/demo/qasteroids/sprites/rock1/rock10009.png Binary files differnew file mode 100644 index 0000000..47ada42 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10009.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10010.png b/examples/demo/qasteroids/sprites/rock1/rock10010.png Binary files differnew file mode 100644 index 0000000..1a2eba0 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10010.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10011.png b/examples/demo/qasteroids/sprites/rock1/rock10011.png Binary files differnew file mode 100644 index 0000000..ec213e1 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10011.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10012.png b/examples/demo/qasteroids/sprites/rock1/rock10012.png Binary files differnew file mode 100644 index 0000000..3bdb39b --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10012.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10013.png b/examples/demo/qasteroids/sprites/rock1/rock10013.png Binary files differnew file mode 100644 index 0000000..08de9a0 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10013.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10014.png b/examples/demo/qasteroids/sprites/rock1/rock10014.png Binary files differnew file mode 100644 index 0000000..3b6ce60 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10014.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10015.png b/examples/demo/qasteroids/sprites/rock1/rock10015.png Binary files differnew file mode 100644 index 0000000..01216dc --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10015.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10016.png b/examples/demo/qasteroids/sprites/rock1/rock10016.png Binary files differnew file mode 100644 index 0000000..efb612d --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10016.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10017.png b/examples/demo/qasteroids/sprites/rock1/rock10017.png Binary files differnew file mode 100644 index 0000000..97bbfce --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10017.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10018.png b/examples/demo/qasteroids/sprites/rock1/rock10018.png Binary files differnew file mode 100644 index 0000000..2986267 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10018.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10019.png b/examples/demo/qasteroids/sprites/rock1/rock10019.png Binary files differnew file mode 100644 index 0000000..80eab6d --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10019.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10020.png b/examples/demo/qasteroids/sprites/rock1/rock10020.png Binary files differnew file mode 100644 index 0000000..78023e0 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10020.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10021.png b/examples/demo/qasteroids/sprites/rock1/rock10021.png Binary files differnew file mode 100644 index 0000000..076a338 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10021.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10022.png b/examples/demo/qasteroids/sprites/rock1/rock10022.png Binary files differnew file mode 100644 index 0000000..4f8f5ed --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10022.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10023.png b/examples/demo/qasteroids/sprites/rock1/rock10023.png Binary files differnew file mode 100644 index 0000000..4e6ba04 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10023.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10024.png b/examples/demo/qasteroids/sprites/rock1/rock10024.png Binary files differnew file mode 100644 index 0000000..1a15fc3 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10024.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10025.png b/examples/demo/qasteroids/sprites/rock1/rock10025.png Binary files differnew file mode 100644 index 0000000..b627d53 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10025.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10026.png b/examples/demo/qasteroids/sprites/rock1/rock10026.png Binary files differnew file mode 100644 index 0000000..7df23b1 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10026.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10027.png b/examples/demo/qasteroids/sprites/rock1/rock10027.png Binary files differnew file mode 100644 index 0000000..d2cb5d3 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10027.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10028.png b/examples/demo/qasteroids/sprites/rock1/rock10028.png Binary files differnew file mode 100644 index 0000000..68611a6 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10028.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10029.png b/examples/demo/qasteroids/sprites/rock1/rock10029.png Binary files differnew file mode 100644 index 0000000..44d6a30 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10029.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10030.png b/examples/demo/qasteroids/sprites/rock1/rock10030.png Binary files differnew file mode 100644 index 0000000..9dca7db --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10030.png diff --git a/examples/demo/qasteroids/sprites/rock1/rock10031.png b/examples/demo/qasteroids/sprites/rock1/rock10031.png Binary files differnew file mode 100644 index 0000000..10beae6 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock1/rock10031.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock2.ini b/examples/demo/qasteroids/sprites/rock2/rock2.ini new file mode 100644 index 0000000..d50e6fa --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock2.ini @@ -0,0 +1,9 @@ +Cyclic_Animation=On +Width=32 +Height=32 +Final_frame=32 ;; NR_ROTS +Antialias=On +Output_Alpha=On +Output_to_File=On +Output_File_Type=n +Input_File_Name=rock2.pov diff --git a/examples/demo/qasteroids/sprites/rock2/rock2.pov b/examples/demo/qasteroids/sprites/rock2/rock2.pov new file mode 100644 index 0000000..2f37a20 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock2.pov @@ -0,0 +1,26 @@ +#include "colors.inc" +#include "shapes.inc" +#include "textures.inc" +// #include "stones.inc" + +camera { + location <2,2,-6> + up <0, 1, 0> +// right <4/3, 0, 0> + look_at <0,0,0> +} + +object { light_source { <10, 5, -5> color red 1.1 green 1.1 blue 1.0 } } + +#declare Rock = +mesh { + #include "rock.inc" /* collection of triangle or smooth_triangle data */ +} + +object { + Rock + texture { pigment {White} } + scale 1.9 + rotate <60, 30, 360*clock> +} + diff --git a/examples/demo/qasteroids/sprites/rock2/rock20000.png b/examples/demo/qasteroids/sprites/rock2/rock20000.png Binary files differnew file mode 100644 index 0000000..5cb52bb --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20000.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20001.png b/examples/demo/qasteroids/sprites/rock2/rock20001.png Binary files differnew file mode 100644 index 0000000..c4c85eb --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20001.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20002.png b/examples/demo/qasteroids/sprites/rock2/rock20002.png Binary files differnew file mode 100644 index 0000000..dea49d7 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20002.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20003.png b/examples/demo/qasteroids/sprites/rock2/rock20003.png Binary files differnew file mode 100644 index 0000000..39772b8 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20003.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20004.png b/examples/demo/qasteroids/sprites/rock2/rock20004.png Binary files differnew file mode 100644 index 0000000..fb02ee4 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20004.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20005.png b/examples/demo/qasteroids/sprites/rock2/rock20005.png Binary files differnew file mode 100644 index 0000000..a81c5ac --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20005.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20006.png b/examples/demo/qasteroids/sprites/rock2/rock20006.png Binary files differnew file mode 100644 index 0000000..cf5c2f4 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20006.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20007.png b/examples/demo/qasteroids/sprites/rock2/rock20007.png Binary files differnew file mode 100644 index 0000000..479c21d --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20007.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20008.png b/examples/demo/qasteroids/sprites/rock2/rock20008.png Binary files differnew file mode 100644 index 0000000..871abca --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20008.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20009.png b/examples/demo/qasteroids/sprites/rock2/rock20009.png Binary files differnew file mode 100644 index 0000000..d5d7860 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20009.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20010.png b/examples/demo/qasteroids/sprites/rock2/rock20010.png Binary files differnew file mode 100644 index 0000000..1da9953 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20010.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20011.png b/examples/demo/qasteroids/sprites/rock2/rock20011.png Binary files differnew file mode 100644 index 0000000..2988658 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20011.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20012.png b/examples/demo/qasteroids/sprites/rock2/rock20012.png Binary files differnew file mode 100644 index 0000000..d104ff9 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20012.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20013.png b/examples/demo/qasteroids/sprites/rock2/rock20013.png Binary files differnew file mode 100644 index 0000000..e12943d --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20013.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20014.png b/examples/demo/qasteroids/sprites/rock2/rock20014.png Binary files differnew file mode 100644 index 0000000..dc7529c --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20014.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20015.png b/examples/demo/qasteroids/sprites/rock2/rock20015.png Binary files differnew file mode 100644 index 0000000..3d9d318 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20015.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20016.png b/examples/demo/qasteroids/sprites/rock2/rock20016.png Binary files differnew file mode 100644 index 0000000..6314f03 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20016.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20017.png b/examples/demo/qasteroids/sprites/rock2/rock20017.png Binary files differnew file mode 100644 index 0000000..5a8aeef --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20017.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20018.png b/examples/demo/qasteroids/sprites/rock2/rock20018.png Binary files differnew file mode 100644 index 0000000..f0e5b08 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20018.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20019.png b/examples/demo/qasteroids/sprites/rock2/rock20019.png Binary files differnew file mode 100644 index 0000000..d731950 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20019.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20020.png b/examples/demo/qasteroids/sprites/rock2/rock20020.png Binary files differnew file mode 100644 index 0000000..8bc7e20 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20020.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20021.png b/examples/demo/qasteroids/sprites/rock2/rock20021.png Binary files differnew file mode 100644 index 0000000..b2854b2 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20021.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20022.png b/examples/demo/qasteroids/sprites/rock2/rock20022.png Binary files differnew file mode 100644 index 0000000..781d620 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20022.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20023.png b/examples/demo/qasteroids/sprites/rock2/rock20023.png Binary files differnew file mode 100644 index 0000000..1f64b02 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20023.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20024.png b/examples/demo/qasteroids/sprites/rock2/rock20024.png Binary files differnew file mode 100644 index 0000000..bd19e74 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20024.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20025.png b/examples/demo/qasteroids/sprites/rock2/rock20025.png Binary files differnew file mode 100644 index 0000000..180f5b6 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20025.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20026.png b/examples/demo/qasteroids/sprites/rock2/rock20026.png Binary files differnew file mode 100644 index 0000000..f2681d4 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20026.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20027.png b/examples/demo/qasteroids/sprites/rock2/rock20027.png Binary files differnew file mode 100644 index 0000000..5bc1add --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20027.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20028.png b/examples/demo/qasteroids/sprites/rock2/rock20028.png Binary files differnew file mode 100644 index 0000000..5621b4d --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20028.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20029.png b/examples/demo/qasteroids/sprites/rock2/rock20029.png Binary files differnew file mode 100644 index 0000000..aec4a34 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20029.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20030.png b/examples/demo/qasteroids/sprites/rock2/rock20030.png Binary files differnew file mode 100644 index 0000000..121b70e --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20030.png diff --git a/examples/demo/qasteroids/sprites/rock2/rock20031.png b/examples/demo/qasteroids/sprites/rock2/rock20031.png Binary files differnew file mode 100644 index 0000000..661b18e --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock2/rock20031.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock3.ini b/examples/demo/qasteroids/sprites/rock3/rock3.ini new file mode 100644 index 0000000..26a3cf9 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock3.ini @@ -0,0 +1,9 @@ +Cyclic_Animation=On +Width=20 +Height=20 +Final_frame=32 ;; NR_ROTS +Antialias=On +Output_Alpha=On +Output_to_File=On +Output_File_Type=n +Input_File_Name=rock3.pov diff --git a/examples/demo/qasteroids/sprites/rock3/rock3.pov b/examples/demo/qasteroids/sprites/rock3/rock3.pov new file mode 100644 index 0000000..2f37a20 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock3.pov @@ -0,0 +1,26 @@ +#include "colors.inc" +#include "shapes.inc" +#include "textures.inc" +// #include "stones.inc" + +camera { + location <2,2,-6> + up <0, 1, 0> +// right <4/3, 0, 0> + look_at <0,0,0> +} + +object { light_source { <10, 5, -5> color red 1.1 green 1.1 blue 1.0 } } + +#declare Rock = +mesh { + #include "rock.inc" /* collection of triangle or smooth_triangle data */ +} + +object { + Rock + texture { pigment {White} } + scale 1.9 + rotate <60, 30, 360*clock> +} + diff --git a/examples/demo/qasteroids/sprites/rock3/rock30000.png b/examples/demo/qasteroids/sprites/rock3/rock30000.png Binary files differnew file mode 100644 index 0000000..de1205a --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30000.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30001.png b/examples/demo/qasteroids/sprites/rock3/rock30001.png Binary files differnew file mode 100644 index 0000000..12ebc00 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30001.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30002.png b/examples/demo/qasteroids/sprites/rock3/rock30002.png Binary files differnew file mode 100644 index 0000000..265c381 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30002.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30003.png b/examples/demo/qasteroids/sprites/rock3/rock30003.png Binary files differnew file mode 100644 index 0000000..1ff7a06 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30003.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30004.png b/examples/demo/qasteroids/sprites/rock3/rock30004.png Binary files differnew file mode 100644 index 0000000..5b505bf --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30004.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30005.png b/examples/demo/qasteroids/sprites/rock3/rock30005.png Binary files differnew file mode 100644 index 0000000..204c969 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30005.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30006.png b/examples/demo/qasteroids/sprites/rock3/rock30006.png Binary files differnew file mode 100644 index 0000000..32140cf --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30006.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30007.png b/examples/demo/qasteroids/sprites/rock3/rock30007.png Binary files differnew file mode 100644 index 0000000..f01baa6 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30007.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30008.png b/examples/demo/qasteroids/sprites/rock3/rock30008.png Binary files differnew file mode 100644 index 0000000..eee458e --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30008.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30009.png b/examples/demo/qasteroids/sprites/rock3/rock30009.png Binary files differnew file mode 100644 index 0000000..14412d4 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30009.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30010.png b/examples/demo/qasteroids/sprites/rock3/rock30010.png Binary files differnew file mode 100644 index 0000000..bb61d54 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30010.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30011.png b/examples/demo/qasteroids/sprites/rock3/rock30011.png Binary files differnew file mode 100644 index 0000000..8486e5a --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30011.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30012.png b/examples/demo/qasteroids/sprites/rock3/rock30012.png Binary files differnew file mode 100644 index 0000000..d9ae419 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30012.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30013.png b/examples/demo/qasteroids/sprites/rock3/rock30013.png Binary files differnew file mode 100644 index 0000000..ce69400 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30013.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30014.png b/examples/demo/qasteroids/sprites/rock3/rock30014.png Binary files differnew file mode 100644 index 0000000..981e92c --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30014.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30015.png b/examples/demo/qasteroids/sprites/rock3/rock30015.png Binary files differnew file mode 100644 index 0000000..63f0a69 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30015.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30016.png b/examples/demo/qasteroids/sprites/rock3/rock30016.png Binary files differnew file mode 100644 index 0000000..72bc42f --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30016.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30017.png b/examples/demo/qasteroids/sprites/rock3/rock30017.png Binary files differnew file mode 100644 index 0000000..c89f358 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30017.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30018.png b/examples/demo/qasteroids/sprites/rock3/rock30018.png Binary files differnew file mode 100644 index 0000000..e1ba724 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30018.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30019.png b/examples/demo/qasteroids/sprites/rock3/rock30019.png Binary files differnew file mode 100644 index 0000000..5f004a7 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30019.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30020.png b/examples/demo/qasteroids/sprites/rock3/rock30020.png Binary files differnew file mode 100644 index 0000000..58009bf --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30020.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30021.png b/examples/demo/qasteroids/sprites/rock3/rock30021.png Binary files differnew file mode 100644 index 0000000..8d9549c --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30021.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30022.png b/examples/demo/qasteroids/sprites/rock3/rock30022.png Binary files differnew file mode 100644 index 0000000..1e8a1c2 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30022.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30023.png b/examples/demo/qasteroids/sprites/rock3/rock30023.png Binary files differnew file mode 100644 index 0000000..9b960d6 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30023.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30024.png b/examples/demo/qasteroids/sprites/rock3/rock30024.png Binary files differnew file mode 100644 index 0000000..6c15f2b --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30024.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30025.png b/examples/demo/qasteroids/sprites/rock3/rock30025.png Binary files differnew file mode 100644 index 0000000..12b05da --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30025.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30026.png b/examples/demo/qasteroids/sprites/rock3/rock30026.png Binary files differnew file mode 100644 index 0000000..16190e9 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30026.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30027.png b/examples/demo/qasteroids/sprites/rock3/rock30027.png Binary files differnew file mode 100644 index 0000000..a862501 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30027.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30028.png b/examples/demo/qasteroids/sprites/rock3/rock30028.png Binary files differnew file mode 100644 index 0000000..e3e0c18 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30028.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30029.png b/examples/demo/qasteroids/sprites/rock3/rock30029.png Binary files differnew file mode 100644 index 0000000..ec70b84 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30029.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30030.png b/examples/demo/qasteroids/sprites/rock3/rock30030.png Binary files differnew file mode 100644 index 0000000..0b060d0 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30030.png diff --git a/examples/demo/qasteroids/sprites/rock3/rock30031.png b/examples/demo/qasteroids/sprites/rock3/rock30031.png Binary files differnew file mode 100644 index 0000000..c1dc1b9 --- /dev/null +++ b/examples/demo/qasteroids/sprites/rock3/rock30031.png diff --git a/examples/demo/qasteroids/sprites/shield/shield0000.png b/examples/demo/qasteroids/sprites/shield/shield0000.png Binary files differnew file mode 100644 index 0000000..e3434e6 --- /dev/null +++ b/examples/demo/qasteroids/sprites/shield/shield0000.png diff --git a/examples/demo/qasteroids/sprites/shield/shield0001.png b/examples/demo/qasteroids/sprites/shield/shield0001.png Binary files differnew file mode 100644 index 0000000..038cf5d --- /dev/null +++ b/examples/demo/qasteroids/sprites/shield/shield0001.png diff --git a/examples/demo/qasteroids/sprites/shield/shield0002.png b/examples/demo/qasteroids/sprites/shield/shield0002.png Binary files differnew file mode 100644 index 0000000..1cf0da0 --- /dev/null +++ b/examples/demo/qasteroids/sprites/shield/shield0002.png diff --git a/examples/demo/qasteroids/sprites/shield/shield0003.png b/examples/demo/qasteroids/sprites/shield/shield0003.png Binary files differnew file mode 100644 index 0000000..40c7256 --- /dev/null +++ b/examples/demo/qasteroids/sprites/shield/shield0003.png diff --git a/examples/demo/qasteroids/sprites/shield/shield0004.png b/examples/demo/qasteroids/sprites/shield/shield0004.png Binary files differnew file mode 100644 index 0000000..4ee43ba --- /dev/null +++ b/examples/demo/qasteroids/sprites/shield/shield0004.png diff --git a/examples/demo/qasteroids/sprites/shield/shield0005.png b/examples/demo/qasteroids/sprites/shield/shield0005.png Binary files differnew file mode 100644 index 0000000..0122e14 --- /dev/null +++ b/examples/demo/qasteroids/sprites/shield/shield0005.png diff --git a/examples/demo/qasteroids/sprites/shield/shield0006.png b/examples/demo/qasteroids/sprites/shield/shield0006.png Binary files differnew file mode 100644 index 0000000..dc5bea3 --- /dev/null +++ b/examples/demo/qasteroids/sprites/shield/shield0006.png diff --git a/examples/demo/qasteroids/sprites/ship/ship.ini b/examples/demo/qasteroids/sprites/ship/ship.ini new file mode 100644 index 0000000..479cc20 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship.ini @@ -0,0 +1,9 @@ +Cyclic_Animation=On +Width=42 +Height=42 +Final_frame=32 ;; NR_ROTS +Antialias=On +Output_Alpha=On +Output_to_File=On +Output_File_Type=n +Input_File_Name=ship.pov diff --git a/examples/demo/qasteroids/sprites/ship/ship.pov b/examples/demo/qasteroids/sprites/ship/ship.pov new file mode 100644 index 0000000..8f185cd --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship.pov @@ -0,0 +1,128 @@ + +#version 3.0 +global_settings { assumed_gamma 2.0 } + +#include "colors.inc" +#include "textures.inc" +#include "metals.inc" + +camera { + orthographic + up <0, 130, 0> + right <130, 0, 0> + location <0, 0, -130> + look_at <0, 0, 0> +} + +light_source { <50, 25, -25> colour White } +light_source { <0, 0, -100> colour Gray80 } + +#declare ShipColor = color red 1.0 green 1.0 blue 0.9 + +#declare BaseTexture = +texture { + pigment { ShipColor } +} + +#declare Grubby = +texture { + pigment { + bozo + color_map { + [0.0 color rgbt <1, 1, 1, 1>] + [0.8 color rgbt <0.9, 0.9, 0.9, 0.5>] + [1.0 color rgbt <0.8, 0.8, 0.8, 0.5>] + } + turbulence 2.0 + scale 3 + } +} + +#declare ShipTexture = +texture { BaseTexture } +texture { Grubby } + +union { + cone { + <12, 0, 0>, 0.5 + <11, 0, 0>, 1.0 + texture { ShipTexture } + } + cone { + <11, 0, 0>, 1.0 + <8, 0, 0>, 2.0 + texture { ShipTexture } + } + cone { + <8, 0, 0>, 2.0 + <3.5, 0, 0>, 3.8 + texture { ShipTexture } + } + difference { + cone { + <8, 0, -0.01>, 2.0 + <3.5, 0, -0.01>, 3.8 + pigment { color Gray20 } + } + box { + <9, -4.0, -3.7>, + <2, 4.0, 10> + rotate <0, -18, 0> + } + box { + <6.5, -4.0, -8>, + <10, 4.0, 8> + } + box { + <2, -4.0, -8>, + <4.5, 4.0, 8> + } + } + cone { + <3.5, 0, 0>, 3.8 + <2, 0, 0>, 4.0 + texture { ShipTexture } + } + cylinder { + <2, 0, 0>, + <-9, 0, 0>, + 4.0 + texture { ShipTexture } + } + cone { + <-9, 0, 0>, 4.0 + <-10, 0, 0>, 3.5 + texture { ShipTexture } + } + prism { + linear_sweep + linear_spline + 0, + 0.5, + 4, + <7.5, 0>, <-7.5, 10>, <-7.5, -10>, <7.5, 0> + rotate <90, 0, 0> + texture { T_Silver_2A } + texture { ShipTexture } + } + prism { + linear_sweep + linear_spline + -0.5, + 0.5, + 4, + <4, 0>, <-7.5, 5>, <-7.5, -5>, <4, 0> + pigment { color White } + } + cone { + <-12, 0, 0>, 3.0 + <-10, 0, 0>, 2.0 + texture { T_Silver_2A } + pigment { color Gray60 } + } + + rotate <0, 0,-360*clock> + scale <5, 5, 5> +} + + diff --git a/examples/demo/qasteroids/sprites/ship/ship0000.png b/examples/demo/qasteroids/sprites/ship/ship0000.png Binary files differnew file mode 100644 index 0000000..1d73a6e --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0000.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0001.png b/examples/demo/qasteroids/sprites/ship/ship0001.png Binary files differnew file mode 100644 index 0000000..d3f4b3f --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0001.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0002.png b/examples/demo/qasteroids/sprites/ship/ship0002.png Binary files differnew file mode 100644 index 0000000..c5f40fa --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0002.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0003.png b/examples/demo/qasteroids/sprites/ship/ship0003.png Binary files differnew file mode 100644 index 0000000..a1c8c25 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0003.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0004.png b/examples/demo/qasteroids/sprites/ship/ship0004.png Binary files differnew file mode 100644 index 0000000..8d3b6d9 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0004.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0005.png b/examples/demo/qasteroids/sprites/ship/ship0005.png Binary files differnew file mode 100644 index 0000000..15843dd --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0005.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0006.png b/examples/demo/qasteroids/sprites/ship/ship0006.png Binary files differnew file mode 100644 index 0000000..380509a --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0006.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0007.png b/examples/demo/qasteroids/sprites/ship/ship0007.png Binary files differnew file mode 100644 index 0000000..633f562 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0007.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0008.png b/examples/demo/qasteroids/sprites/ship/ship0008.png Binary files differnew file mode 100644 index 0000000..e40ad04 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0008.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0009.png b/examples/demo/qasteroids/sprites/ship/ship0009.png Binary files differnew file mode 100644 index 0000000..19f3436 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0009.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0010.png b/examples/demo/qasteroids/sprites/ship/ship0010.png Binary files differnew file mode 100644 index 0000000..b1142f4 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0010.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0011.png b/examples/demo/qasteroids/sprites/ship/ship0011.png Binary files differnew file mode 100644 index 0000000..b8acd62 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0011.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0012.png b/examples/demo/qasteroids/sprites/ship/ship0012.png Binary files differnew file mode 100644 index 0000000..06ac9eb --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0012.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0013.png b/examples/demo/qasteroids/sprites/ship/ship0013.png Binary files differnew file mode 100644 index 0000000..71cf38c --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0013.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0014.png b/examples/demo/qasteroids/sprites/ship/ship0014.png Binary files differnew file mode 100644 index 0000000..988a77f --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0014.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0015.png b/examples/demo/qasteroids/sprites/ship/ship0015.png Binary files differnew file mode 100644 index 0000000..1ad2193 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0015.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0016.png b/examples/demo/qasteroids/sprites/ship/ship0016.png Binary files differnew file mode 100644 index 0000000..c4f7125 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0016.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0017.png b/examples/demo/qasteroids/sprites/ship/ship0017.png Binary files differnew file mode 100644 index 0000000..09e226e --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0017.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0018.png b/examples/demo/qasteroids/sprites/ship/ship0018.png Binary files differnew file mode 100644 index 0000000..56b6190 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0018.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0019.png b/examples/demo/qasteroids/sprites/ship/ship0019.png Binary files differnew file mode 100644 index 0000000..473340a --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0019.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0020.png b/examples/demo/qasteroids/sprites/ship/ship0020.png Binary files differnew file mode 100644 index 0000000..dcfaa98 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0020.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0021.png b/examples/demo/qasteroids/sprites/ship/ship0021.png Binary files differnew file mode 100644 index 0000000..f5718a2 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0021.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0022.png b/examples/demo/qasteroids/sprites/ship/ship0022.png Binary files differnew file mode 100644 index 0000000..d59ca32 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0022.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0023.png b/examples/demo/qasteroids/sprites/ship/ship0023.png Binary files differnew file mode 100644 index 0000000..8f24927 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0023.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0024.png b/examples/demo/qasteroids/sprites/ship/ship0024.png Binary files differnew file mode 100644 index 0000000..0cae497 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0024.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0025.png b/examples/demo/qasteroids/sprites/ship/ship0025.png Binary files differnew file mode 100644 index 0000000..bc7c5db --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0025.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0026.png b/examples/demo/qasteroids/sprites/ship/ship0026.png Binary files differnew file mode 100644 index 0000000..386a9c7 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0026.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0027.png b/examples/demo/qasteroids/sprites/ship/ship0027.png Binary files differnew file mode 100644 index 0000000..ad96779 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0027.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0028.png b/examples/demo/qasteroids/sprites/ship/ship0028.png Binary files differnew file mode 100644 index 0000000..117420f --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0028.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0029.png b/examples/demo/qasteroids/sprites/ship/ship0029.png Binary files differnew file mode 100644 index 0000000..0677ce1 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0029.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0030.png b/examples/demo/qasteroids/sprites/ship/ship0030.png Binary files differnew file mode 100644 index 0000000..576625c --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0030.png diff --git a/examples/demo/qasteroids/sprites/ship/ship0031.png b/examples/demo/qasteroids/sprites/ship/ship0031.png Binary files differnew file mode 100644 index 0000000..ba87690 --- /dev/null +++ b/examples/demo/qasteroids/sprites/ship/ship0031.png diff --git a/examples/demo/qasteroids/toplevel.cpp b/examples/demo/qasteroids/toplevel.cpp new file mode 100644 index 0000000..aafc841 --- /dev/null +++ b/examples/demo/qasteroids/toplevel.cpp @@ -0,0 +1,494 @@ +/* + * KAsteroids - Copyright (c) Martin R. Jones 1997 + * + * Part of the KDE project + */ +// --- toplevel.cpp --- +#include <qaccel.h> +#include <qlabel.h> +#include <qlayout.h> +#include <qlcdnumber.h> +#include <qpushbutton.h> + +#include <qapplication.h> + +#include "toplevel.h" +#include "ledmeter.h" + + +#define SB_SCORE 1 +#define SB_LEVEL 2 +#define SB_SHIPS 3 + +struct SLevel +{ + int nrocks; + double rockSpeed; +}; + +#define MAX_LEVELS 16 + +SLevel levels[MAX_LEVELS] = +{ + { 1, 0.4 }, + { 1, 0.6 }, + { 2, 0.5 }, + { 2, 0.7 }, + { 2, 0.8 }, + { 3, 0.6 }, + { 3, 0.7 }, + { 3, 0.8 }, + { 4, 0.6 }, + { 4, 0.7 }, + { 4, 0.8 }, + { 5, 0.7 }, + { 5, 0.8 }, + { 5, 0.9 }, + { 5, 1.0 } +}; + +const char *soundEvents[] = +{ + "ShipDestroyed", + "RockDestroyed", + 0 +}; + +const char *soundDefaults[] = +{ + "Explosion.wav", + "ploop.wav", + 0 +}; + + +KAstTopLevel::KAstTopLevel( QWidget *parent, const char *name ) + : QMainWindow( parent, name, 0 ) +{ + QWidget *border = new QWidget( this ); + border->setBackgroundColor( black ); + setCentralWidget( border ); + + QVBoxLayout *borderLayout = new QVBoxLayout( border ); + borderLayout->addStretch( 1 ); + + QWidget *mainWin = new QWidget( border ); + mainWin->setFixedSize(640, 480); + borderLayout->addWidget( mainWin, 0, AlignHCenter ); + + borderLayout->addStretch( 1 ); + + view = new KAsteroidsView( mainWin ); + view->setFocusPolicy( StrongFocus ); + connect( view, SIGNAL( shipKilled() ), SLOT( slotShipKilled() ) ); + connect( view, SIGNAL( rockHit(int) ), SLOT( slotRockHit(int) ) ); + connect( view, SIGNAL( rocksRemoved() ), SLOT( slotRocksRemoved() ) ); + connect( view, SIGNAL( updateVitals() ), SLOT( slotUpdateVitals() ) ); + + QVBoxLayout *vb = new QVBoxLayout( mainWin ); + QHBoxLayout *hb = new QHBoxLayout; + QHBoxLayout *hbd = new QHBoxLayout; + vb->addLayout( hb ); + + QFont labelFont( "helvetica", 24 ); + QColorGroup grp( darkGreen, black, QColor( 128, 128, 128 ), + QColor( 64, 64, 64 ), black, darkGreen, black ); + QPalette pal( grp, grp, grp ); + + mainWin->setPalette( pal ); + + hb->addSpacing( 10 ); + + QLabel *label; + label = new QLabel( tr("Score"), mainWin ); + label->setFont( labelFont ); + label->setPalette( pal ); + label->setFixedWidth( label->sizeHint().width() ); + hb->addWidget( label ); + + scoreLCD = new QLCDNumber( 6, mainWin ); + scoreLCD->setFrameStyle( QFrame::NoFrame ); + scoreLCD->setSegmentStyle( QLCDNumber::Flat ); + scoreLCD->setFixedWidth( 150 ); + scoreLCD->setPalette( pal ); + hb->addWidget( scoreLCD ); + hb->addStretch( 10 ); + + label = new QLabel( tr("Level"), mainWin ); + label->setFont( labelFont ); + label->setPalette( pal ); + label->setFixedWidth( label->sizeHint().width() ); + hb->addWidget( label ); + + levelLCD = new QLCDNumber( 2, mainWin ); + levelLCD->setFrameStyle( QFrame::NoFrame ); + levelLCD->setSegmentStyle( QLCDNumber::Flat ); + levelLCD->setFixedWidth( 70 ); + levelLCD->setPalette( pal ); + hb->addWidget( levelLCD ); + hb->addStretch( 10 ); + + label = new QLabel( tr("Ships"), mainWin ); + label->setFont( labelFont ); + label->setFixedWidth( label->sizeHint().width() ); + label->setPalette( pal ); + hb->addWidget( label ); + + shipsLCD = new QLCDNumber( 1, mainWin ); + shipsLCD->setFrameStyle( QFrame::NoFrame ); + shipsLCD->setSegmentStyle( QLCDNumber::Flat ); + shipsLCD->setFixedWidth( 40 ); + shipsLCD->setPalette( pal ); + hb->addWidget( shipsLCD ); + + hb->addStrut( 30 ); + + vb->addWidget( view, 10 ); + +// -- bottom layout: + vb->addLayout( hbd ); + + QFont smallFont( "helvetica", 14 ); + hbd->addSpacing( 10 ); + + QString sprites_prefix = "qasteroids/sprites/"; +/* + label = new QLabel( tr( "T" ), mainWin ); + label->setFont( smallFont ); + label->setFixedWidth( label->sizeHint().width() ); + label->setPalette( pal ); + hbd->addWidget( label ); + + teleportsLCD = new QLCDNumber( 1, mainWin ); + teleportsLCD->setFrameStyle( QFrame::NoFrame ); + teleportsLCD->setSegmentStyle( QLCDNumber::Flat ); + teleportsLCD->setPalette( pal ); + teleportsLCD->setFixedHeight( 20 ); + hbd->addWidget( teleportsLCD ); + + hbd->addSpacing( 10 ); +*/ + QPixmap pm( sprites_prefix + "powerups/brake.png" ); + label = new QLabel( mainWin ); + label->setPixmap( pm ); + label->setFixedWidth( label->sizeHint().width() ); + label->setPalette( pal ); + hbd->addWidget( label ); + + brakesLCD = new QLCDNumber( 1, mainWin ); + brakesLCD->setFrameStyle( QFrame::NoFrame ); + brakesLCD->setSegmentStyle( QLCDNumber::Flat ); + brakesLCD->setPalette( pal ); + brakesLCD->setFixedHeight( 20 ); + hbd->addWidget( brakesLCD ); + + hbd->addSpacing( 10 ); + + pm.load( sprites_prefix + "powerups/shield.png" ); + label = new QLabel( mainWin ); + label->setPixmap( pm ); + label->setFixedWidth( label->sizeHint().width() ); + label->setPalette( pal ); + hbd->addWidget( label ); + + shieldLCD = new QLCDNumber( 1, mainWin ); + shieldLCD->setFrameStyle( QFrame::NoFrame ); + shieldLCD->setSegmentStyle( QLCDNumber::Flat ); + shieldLCD->setPalette( pal ); + shieldLCD->setFixedHeight( 20 ); + hbd->addWidget( shieldLCD ); + + hbd->addSpacing( 10 ); + + pm.load( sprites_prefix + "powerups/shoot.png" ); + label = new QLabel( mainWin ); + label->setPixmap( pm ); + label->setFixedWidth( label->sizeHint().width() ); + label->setPalette( pal ); + hbd->addWidget( label ); + + shootLCD = new QLCDNumber( 1, mainWin ); + shootLCD->setFrameStyle( QFrame::NoFrame ); + shootLCD->setSegmentStyle( QLCDNumber::Flat ); + shootLCD->setPalette( pal ); + shootLCD->setFixedHeight( 20 ); + hbd->addWidget( shootLCD ); + + hbd->addStretch( 1 ); + + label = new QLabel( tr( "Fuel" ), mainWin ); + label->setFont( smallFont ); + label->setFixedWidth( label->sizeHint().width() + 10 ); + label->setPalette( pal ); + hbd->addWidget( label ); + + powerMeter = new KALedMeter( mainWin ); + powerMeter->setFrameStyle( QFrame::Box | QFrame::Plain ); + powerMeter->setRange( MAX_POWER_LEVEL ); + powerMeter->addColorRange( 10, darkRed ); + powerMeter->addColorRange( 20, QColor(160, 96, 0) ); + powerMeter->addColorRange( 70, darkGreen ); + powerMeter->setCount( 40 ); + powerMeter->setPalette( pal ); + powerMeter->setFixedSize( 200, 12 ); + hbd->addWidget( powerMeter ); + + shipsRemain = 3; + showHiscores = FALSE; + + actions.insert( Qt::Key_Up, Thrust ); + actions.insert( Qt::Key_Left, RotateLeft ); + actions.insert( Qt::Key_Right, RotateRight ); + actions.insert( Qt::Key_Space, Shoot ); + actions.insert( Qt::Key_Z, Teleport ); + actions.insert( Qt::Key_X, Brake ); + actions.insert( Qt::Key_S, Shield ); + actions.insert( Qt::Key_P, Pause ); + actions.insert( Qt::Key_L, Launch ); + actions.insert( Qt::Key_N, NewGame ); + + view->showText( tr( "Press N to start playing" ), yellow ); +} + +KAstTopLevel::~KAstTopLevel() +{ +} + +void KAstTopLevel::playSound( const char * ) +{ +} + +void KAstTopLevel::keyPressEvent( QKeyEvent *event ) +{ + if ( event->isAutoRepeat() || !actions.contains( event->key() ) ) + { + event->ignore(); + return; + } + + Action a = actions[ event->key() ]; + + switch ( a ) + { + case RotateLeft: + view->rotateLeft( TRUE ); + break; + + case RotateRight: + view->rotateRight( TRUE ); + break; + + case Thrust: + view->thrust( TRUE ); + break; + + case Shoot: + view->shoot( TRUE ); + break; + + case Shield: + view->setShield( TRUE ); + break; + + case Teleport: + view->teleport( TRUE ); + break; + + case Brake: + view->brake( TRUE ); + break; + + default: + event->ignore(); + return; + } + event->accept(); +} + +void KAstTopLevel::keyReleaseEvent( QKeyEvent *event ) +{ + if ( event->isAutoRepeat() || !actions.contains( event->key() ) ) + { + event->ignore(); + return; + } + + Action a = actions[ event->key() ]; + + switch ( a ) + { + case RotateLeft: + view->rotateLeft( FALSE ); + break; + + case RotateRight: + view->rotateRight( FALSE ); + break; + + case Thrust: + view->thrust( FALSE ); + break; + + case Shoot: + view->shoot( FALSE ); + break; + + case Brake: + view->brake( FALSE ); + break; + + case Shield: + view->setShield( FALSE ); + break; + + case Teleport: + view->teleport( FALSE ); + break; + + case Launch: + if ( waitShip ) + { + view->newShip(); + waitShip = FALSE; + view->hideText(); + } + else + { + event->ignore(); + return; + } + break; + + case NewGame: + slotNewGame(); + break; +/* + case Pause: + { + view->pause( TRUE ); + QMessageBox::information( this, + tr("KAsteroids is paused"), + tr("Paused") ); + view->pause( FALSE ); + } + break; +*/ + default: + event->ignore(); + return; + } + + event->accept(); +} + +void KAstTopLevel::showEvent( QShowEvent *e ) +{ + QMainWindow::showEvent( e ); + view->pause( FALSE ); + view->setFocus(); +} + +void KAstTopLevel::hideEvent( QHideEvent *e ) +{ + QMainWindow::hideEvent( e ); + view->pause( TRUE ); +} + +void KAstTopLevel::slotNewGame() +{ + score = 0; + shipsRemain = SB_SHIPS; + scoreLCD->display( 0 ); + level = 0; + levelLCD->display( level+1 ); + shipsLCD->display( shipsRemain-1 ); + view->newGame(); + view->setRockSpeed( levels[0].rockSpeed ); + view->addRocks( levels[0].nrocks ); +// view->showText( tr( "Press L to launch." ), yellow ); + view->newShip(); + waitShip = FALSE; + view->hideText(); + isPaused = FALSE; +} + +void KAstTopLevel::slotShipKilled() +{ + shipsRemain--; + shipsLCD->display( shipsRemain-1 ); + + playSound( "ShipDestroyed" ); + + if ( shipsRemain ) + { + waitShip = TRUE; + view->showText( tr( "Ship Destroyed. Press L to launch."), yellow ); + } + else + { + view->showText( tr("Game Over!"), red ); + view->endGame(); + doStats(); +// highscore->addEntry( score, level, showHiscores ); + } +} + +void KAstTopLevel::slotRockHit( int size ) +{ + switch ( size ) + { + case 0: + score += 10; + break; + + case 1: + score += 20; + break; + + default: + score += 40; + } + + playSound( "RockDestroyed" ); + + scoreLCD->display( score ); +} + +void KAstTopLevel::slotRocksRemoved() +{ + level++; + + if ( level >= MAX_LEVELS ) + level = MAX_LEVELS - 1; + + view->setRockSpeed( levels[level-1].rockSpeed ); + view->addRocks( levels[level-1].nrocks ); + + levelLCD->display( level+1 ); +} + +void KAstTopLevel::doStats() +{ + QString r( "0.00" ); + if ( view->shots() ) + r = QString::number( (double)view->hits() / view->shots() * 100.0, + 'g', 2 ); + +/* multi-line text broken in Qt 3 + QString s = tr( "Game Over\n\nShots fired:\t%1\n Hit:\t%2\n Missed:\t%3\nHit ratio:\t%4 %\n\nPress N for a new game" ) + .arg(view->shots()).arg(view->hits()) + .arg(view->shots() - view->hits()) + .arg(r); +*/ + + view->showText( "Game Over. Press N for a new game.", yellow, FALSE ); +} + +void KAstTopLevel::slotUpdateVitals() +{ + brakesLCD->display( view->brakeCount() ); + shieldLCD->display( view->shieldCount() ); + shootLCD->display( view->shootCount() ); +// teleportsLCD->display( view->teleportCount() ); + powerMeter->setValue( view->power() ); +} diff --git a/examples/demo/qasteroids/toplevel.h b/examples/demo/qasteroids/toplevel.h new file mode 100644 index 0000000..6f1b581 --- /dev/null +++ b/examples/demo/qasteroids/toplevel.h @@ -0,0 +1,79 @@ +/* + * KAsteroids - Copyright (c) Martin R. Jones 1997 + * + * Part of the KDE project + */ + +#ifndef __KAST_TOPLEVEL_H__ +#define __KAST_TOPLEVEL_H__ + +#include <qmainwindow.h> +#include <qdict.h> +#include <qmap.h> + +#include "view.h" + + +class KALedMeter; +class QLCDNumber; + +class KAstTopLevel : public QMainWindow +{ + Q_OBJECT +public: + KAstTopLevel( QWidget *parent=0, const char *name=0 ); + virtual ~KAstTopLevel(); + +private: + void playSound( const char *snd ); + void readSoundMapping(); + void doStats(); + +protected: + virtual void showEvent( QShowEvent * ); + virtual void hideEvent( QHideEvent * ); + virtual void keyPressEvent( QKeyEvent *event ); + virtual void keyReleaseEvent( QKeyEvent *event ); + +private slots: + void slotNewGame(); + + void slotShipKilled(); + void slotRockHit( int size ); + void slotRocksRemoved(); + + void slotUpdateVitals(); + +private: + KAsteroidsView *view; + QLCDNumber *scoreLCD; + QLCDNumber *levelLCD; + QLCDNumber *shipsLCD; + + QLCDNumber *teleportsLCD; +// QLCDNumber *bombsLCD; + QLCDNumber *brakesLCD; + QLCDNumber *shieldLCD; + QLCDNumber *shootLCD; + KALedMeter *powerMeter; + + bool sound; + QDict<QString> soundDict; + + // waiting for user to press Enter to launch a ship + bool waitShip; + bool isPaused; + + int shipsRemain; + int score; + int level; + bool showHiscores; + + enum Action { Launch, Thrust, RotateLeft, RotateRight, Shoot, Teleport, + Brake, Shield, Pause, NewGame }; + + QMap<int,Action> actions; +}; + +#endif + diff --git a/examples/demo/qasteroids/view.cpp b/examples/demo/qasteroids/view.cpp new file mode 100644 index 0000000..d6ccd5d --- /dev/null +++ b/examples/demo/qasteroids/view.cpp @@ -0,0 +1,908 @@ +/* + * KAsteroids - Copyright (c) Martin R. Jones 1997 + * + * Part of the KDE project + */ + +#include <stdlib.h> +#include <math.h> +#include <qapplication.h> +#include <qkeycode.h> +#include <qaccel.h> +#include <qmessagebox.h> + +#include "view.h" + +#define IMG_BACKGROUND "qasteroids/bg.png" + +#define REFRESH_DELAY 33 +#define SHIP_SPEED 0.3 +#define MISSILE_SPEED 10.0 +#define SHIP_STEPS 64 +#define ROTATE_RATE 2 +#define SHIELD_ON_COST 1 +#define SHIELD_HIT_COST 30 +#define BRAKE_ON_COST 4 + +#define MAX_ROCK_SPEED 2.5 +#define MAX_POWERUP_SPEED 1.5 +#define MAX_SHIP_SPEED 12 +#define MAX_BRAKES 5 +#define MAX_SHIELDS 5 +#define MAX_FIREPOWER 5 + +#define TEXT_SPEED 4 + +#define PI_X_2 6.283185307 +#ifndef M_PI +#define M_PI 3.141592654 +#endif + +static struct +{ + int id; + const char *path; + int frames; +} +kas_animations [] = +{ + { ID_ROCK_LARGE, "rock1/rock1%1.png", 32 }, + { ID_ROCK_MEDIUM, "rock2/rock2%1.png", 32 }, + { ID_ROCK_SMALL, "rock3/rock3%1.png", 32 }, + { ID_SHIP, "ship/ship%1.png", 32 }, + { ID_MISSILE, "missile/missile.png", 1 }, + { ID_BIT, "bits/bits%1.png", 16 }, + { ID_EXHAUST, "exhaust/exhaust.png", 1 }, + { ID_ENERGY_POWERUP, "powerups/energy.png", 1 }, +// { ID_TELEPORT_POWERUP, "powerups/teleport%1.png", 12 }, + { ID_BRAKE_POWERUP, "powerups/brake.png", 1 }, + { ID_SHIELD_POWERUP, "powerups/shield.png", 1 }, + { ID_SHOOT_POWERUP, "powerups/shoot.png", 1 }, + { ID_SHIELD, "shield/shield%1.png", 6 }, + { 0, 0, 0 } +}; + + + +KAsteroidsView::KAsteroidsView( QWidget *parent, const char *name ) + : QWidget( parent, name ), + field(640, 440), + view(&field,this) +{ + view.setVScrollBarMode( QScrollView::AlwaysOff ); + view.setHScrollBarMode( QScrollView::AlwaysOff ); + view.viewport()->setFocusProxy( this ); + rocks.setAutoDelete( TRUE ); + missiles.setAutoDelete( TRUE ); + bits.setAutoDelete( TRUE ); + powerups.setAutoDelete( TRUE ); + exhaust.setAutoDelete( TRUE ); + + field.setBackgroundColor( black ); + QPixmap pm( IMG_BACKGROUND ); + field.setBackgroundPixmap( pm ); + + textSprite = new QCanvasText( &field ); + QFont font( "helvetica", 18 ); + textSprite->setFont( font ); + + shield = 0; + shieldOn = FALSE; + refreshRate = REFRESH_DELAY; + + initialized = readSprites(); + + shieldTimer = new QTimer( this ); + connect( shieldTimer, SIGNAL(timeout()), this, SLOT(hideShield()) ); + mTimerId = -1; + + shipPower = MAX_POWER_LEVEL; + vitalsChanged = TRUE; + can_destroy_powerups = FALSE; + + mPaused = TRUE; + + if ( !initialized ) { + textSprite->setText( tr("Error: Cannot read sprite images") ); + textSprite->setColor( red ); + textSprite->move( (field.width()-textSprite->boundingRect().width()) / 2, + (field.height()-textSprite->boundingRect().height()) / 2 ); + textSprite->show(); + } +} + +// - - - + +KAsteroidsView::~KAsteroidsView() +{ +} + +// - - - + +void KAsteroidsView::reset() +{ + if ( !initialized ) + return; + rocks.clear(); + missiles.clear(); + bits.clear(); + powerups.clear(); + exhaust.clear(); + + shotsFired = 0; + shotsHit = 0; + + rockSpeed = 1.0; + powerupSpeed = 1.0; + mFrameNum = 0; + mPaused = FALSE; + + ship->hide(); + shield->hide(); +/* + if ( mTimerId >= 0 ) { + killTimer( mTimerId ); + mTimerId = -1; + } +*/ +} + +// - -- + +void KAsteroidsView::newGame() +{ + if ( !initialized ) + return; + if ( shieldOn ) + { + shield->hide(); + shieldOn = FALSE; + } + reset(); + if ( mTimerId < 0 ) + mTimerId = startTimer( REFRESH_DELAY ); + emit updateVitals(); +} + +// - - - + +void KAsteroidsView::endGame() +{ +} + +void KAsteroidsView::pause( bool p ) +{ + if ( !initialized ) + return; + if ( !mPaused && p ) { + if ( mTimerId >= 0 ) { + killTimer( mTimerId ); + mTimerId = -1; + } + } else if ( mPaused && !p ) + mTimerId = startTimer( REFRESH_DELAY ); + mPaused = p; +} + +// - - - + +void KAsteroidsView::newShip() +{ + if ( !initialized ) + return; + ship->move( width()/2, height()/2, 0 ); + shield->move( width()/2, height()/2, 0 ); + ship->setVelocity( 0.0, 0.0 ); + shipDx = 0; + shipDy = 0; + shipAngle = 0; + rotateL = FALSE; + rotateR = FALSE; + thrustShip = FALSE; + shootShip = FALSE; + brakeShip = FALSE; + teleportShip = FALSE; + shieldOn = TRUE; + shootDelay = 0; + shipPower = MAX_POWER_LEVEL; + rotateRate = ROTATE_RATE; + rotateSlow = 0; + + mBrakeCount = 0; + mTeleportCount = 0; + mShootCount = 0; + + ship->show(); + shield->show(); + mShieldCount = 1; // just in case the ship appears on a rock. + shieldTimer->start( 1000, TRUE ); +} + +void KAsteroidsView::setShield( bool s ) +{ + if ( !initialized ) + return; + if ( shieldTimer->isActive() && !s ) { + shieldTimer->stop(); + hideShield(); + } else { + shieldOn = s && mShieldCount; + } +} + +void KAsteroidsView::brake( bool b ) +{ + if ( !initialized ) + return; + if ( mBrakeCount ) + { + if ( brakeShip && !b ) + { + rotateL = FALSE; + rotateR = FALSE; + thrustShip = FALSE; + rotateRate = ROTATE_RATE; + } + + brakeShip = b; + } +} + +// - - - + +bool KAsteroidsView::readSprites() +{ + QString sprites_prefix = "qasteroids/sprites/"; + + int i = 0; + while ( kas_animations[i].id ) + { + QCanvasPixmapArray *anim = + new QCanvasPixmapArray( sprites_prefix + kas_animations[i].path, + kas_animations[i].frames ); + if ( !anim->isValid() ) + return FALSE; + animation.insert( kas_animations[i].id, anim ); + i++; + } + + ship = new QCanvasSprite( animation[ID_SHIP], &field ); + ship->hide(); + + shield = new KShield( animation[ID_SHIELD], &field ); + shield->hide(); + + return (ship->image(0) && shield->image(0)); +} + +// - - - + +void KAsteroidsView::addRocks( int num ) +{ + if ( !initialized ) + return; + for ( int i = 0; i < num; i++ ) + { + KRock *rock = new KRock( animation[ID_ROCK_LARGE], &field, + ID_ROCK_LARGE, randInt(2), randInt(2) ? -1 : 1 ); + double dx = (2.0 - randDouble()*4.0) * rockSpeed; + double dy = (2.0 - randDouble()*4.0) * rockSpeed; + rock->setVelocity( dx, dy ); + rock->setFrame( randInt( rock->frameCount() ) ); + if ( dx > 0 ) + { + if ( dy > 0 ) + rock->move( 5, 5, 0 ); + else + rock->move( 5, field.height() - 25, 0 ); + } + else + { + if ( dy > 0 ) + rock->move( field.width() - 25, 5, 0 ); + else + rock->move( field.width() - 25, field.height() - 25, 0 ); + } + rock->show( ); + rocks.append( rock ); + } +} + +// - - - + +void KAsteroidsView::showText( const QString &text, const QColor &color, bool scroll ) +{ + if ( !initialized ) + return; + textSprite->setText( text ); + textSprite->setColor( color ); + + if ( scroll ) { + textSprite->move( (field.width()-textSprite->boundingRect().width()) / 2, + -textSprite->boundingRect().height() ); + textDy = TEXT_SPEED; + } else { + textSprite->move( (field.width()-textSprite->boundingRect().width()) / 2, + (field.height()-textSprite->boundingRect().height()) / 2 ); + textDy = 0; + } + textSprite->show(); +} + +// - - - + +void KAsteroidsView::hideText() +{ + textDy = -TEXT_SPEED; +} + +// - - - + +void KAsteroidsView::resizeEvent(QResizeEvent* event) +{ + QWidget::resizeEvent(event); + field.resize(width()-4, height()-4); + view.resize(width(),height()); +} + +// - - - + +void KAsteroidsView::timerEvent( QTimerEvent * ) +{ + field.advance(); + + QCanvasSprite *rock; + + // move rocks forward + for ( rock = rocks.first(); rock; rock = rocks.next() ) { + ((KRock *)rock)->nextFrame(); + wrapSprite( rock ); + } + + wrapSprite( ship ); + + // check for missile collision with rocks. + processMissiles(); + + // these are generated when a ship explodes + for ( KBit *bit = bits.first(); bit; bit = bits.next() ) + { + if ( bit->expired() ) + { + bits.removeRef( bit ); + } + else + { + bit->growOlder(); + bit->setFrame( ( bit->frame()+1 ) % bit->frameCount() ); + } + } + + for ( KExhaust *e = exhaust.first(); e; e = exhaust.next() ) + exhaust.removeRef( e ); + + // move / rotate ship. + // check for collision with a rock. + processShip(); + + // move powerups and check for collision with player and missiles + processPowerups(); + + if ( textSprite->isVisible() ) + { + if ( textDy < 0 && + textSprite->boundingRect().y() <= -textSprite->boundingRect().height() ) { + textSprite->hide(); + } else { + textSprite->moveBy( 0, textDy ); + } + if ( textSprite->boundingRect().y() > (field.height()-textSprite->boundingRect().height())/2 ) + textDy = 0; + } + + if ( vitalsChanged && !(mFrameNum % 10) ) { + emit updateVitals(); + vitalsChanged = FALSE; + } + + mFrameNum++; +} + +void KAsteroidsView::wrapSprite( QCanvasItem *s ) +{ + int x = int(s->x() + s->boundingRect().width() / 2); + int y = int(s->y() + s->boundingRect().height() / 2); + + if ( x > field.width() ) + s->move( s->x() - field.width(), s->y() ); + else if ( x < 0 ) + s->move( field.width() + s->x(), s->y() ); + + if ( y > field.height() ) + s->move( s->x(), s->y() - field.height() ); + else if ( y < 0 ) + s->move( s->x(), field.height() + s->y() ); +} + +// - - - + +void KAsteroidsView::rockHit( QCanvasItem *hit ) +{ + KPowerup *nPup = 0; + int rnd = int(randDouble()*30.0) % 30; + switch( rnd ) + { + case 4: + case 5: + nPup = new KPowerup( animation[ID_ENERGY_POWERUP], &field, + ID_ENERGY_POWERUP ); + break; + case 10: +// nPup = new KPowerup( animation[ID_TELEPORT_POWERUP], &field, +// ID_TELEPORT_POWERUP ); + break; + case 15: + nPup = new KPowerup( animation[ID_BRAKE_POWERUP], &field, + ID_BRAKE_POWERUP ); + break; + case 20: + nPup = new KPowerup( animation[ID_SHIELD_POWERUP], &field, + ID_SHIELD_POWERUP ); + break; + case 24: + case 25: + nPup = new KPowerup( animation[ID_SHOOT_POWERUP], &field, + ID_SHOOT_POWERUP ); + break; + } + if ( nPup ) + { + double r = 0.5 - randDouble(); + nPup->move( hit->x(), hit->y(), 0 ); + nPup->setVelocity( hit->xVelocity() + r, hit->yVelocity() + r ); + nPup->show( ); + powerups.append( nPup ); + } + + if ( hit->rtti() == ID_ROCK_LARGE || hit->rtti() == ID_ROCK_MEDIUM ) + { + // break into smaller rocks + double addx[4] = { 1.0, 1.0, -1.0, -1.0 }; + double addy[4] = { -1.0, 1.0, -1.0, 1.0 }; + + double dx = hit->xVelocity(); + double dy = hit->yVelocity(); + + double maxRockSpeed = MAX_ROCK_SPEED * rockSpeed; + if ( dx > maxRockSpeed ) + dx = maxRockSpeed; + else if ( dx < -maxRockSpeed ) + dx = -maxRockSpeed; + if ( dy > maxRockSpeed ) + dy = maxRockSpeed; + else if ( dy < -maxRockSpeed ) + dy = -maxRockSpeed; + + QCanvasSprite *nrock; + + for ( int i = 0; i < 4; i++ ) + { + double r = rockSpeed/2 - randDouble()*rockSpeed; + if ( hit->rtti() == ID_ROCK_LARGE ) + { + nrock = new KRock( animation[ID_ROCK_MEDIUM], &field, + ID_ROCK_MEDIUM, randInt(2), randInt(2) ? -1 : 1 ); + emit rockHit( 0 ); + } + else + { + nrock = new KRock( animation[ID_ROCK_SMALL], &field, + ID_ROCK_SMALL, randInt(2), randInt(2) ? -1 : 1 ); + emit rockHit( 1 ); + } + + nrock->move( hit->x(), hit->y(), 0 ); + nrock->setVelocity( dx+addx[i]*rockSpeed+r, dy+addy[i]*rockSpeed+r ); + nrock->setFrame( randInt( nrock->frameCount() ) ); + nrock->show( ); + rocks.append( nrock ); + } + } + else if ( hit->rtti() == ID_ROCK_SMALL ) + emit rockHit( 2 ); + rocks.removeRef( (QCanvasSprite *)hit ); + if ( rocks.count() == 0 ) + emit rocksRemoved(); +} + +void KAsteroidsView::reducePower( int val ) +{ + shipPower -= val; + if ( shipPower <= 0 ) + { + shipPower = 0; + thrustShip = FALSE; + if ( shieldOn ) + { + shieldOn = FALSE; + shield->hide(); + } + } + vitalsChanged = TRUE; +} + +void KAsteroidsView::addExhaust( double x, double y, double dx, + double dy, int count ) +{ + for ( int i = 0; i < count; i++ ) + { + KExhaust *e = new KExhaust( animation[ID_EXHAUST], &field ); + e->move( x + 2 - randDouble()*4, y + 2 - randDouble()*4 ); + e->setVelocity( dx, dy ); + e->show( ); + exhaust.append( e ); + } +} + +void KAsteroidsView::processMissiles() +{ + KMissile *missile; + + // if a missile has hit a rock, remove missile and break rock into smaller + // rocks or remove completely. + QPtrListIterator<KMissile> it(missiles); + + for ( ; it.current(); ++it ) + { + missile = it.current(); + missile->growOlder(); + + if ( missile->expired() ) + { + missiles.removeRef( missile ); + continue; + } + + wrapSprite( missile ); + + QCanvasItemList hits = missile->collisions( TRUE ); + QCanvasItemList::Iterator hit; + for ( hit = hits.begin(); hit != hits.end(); ++hit ) + { + if ( (*hit)->rtti() >= ID_ROCK_LARGE && + (*hit)->rtti() <= ID_ROCK_SMALL ) + { + shotsHit++; + rockHit( *hit ); + missiles.removeRef( missile ); + break; + } + } + } +} + +// - - - + +void KAsteroidsView::processShip() +{ + if ( ship->isVisible() ) + { + if ( shieldOn ) + { + shield->show(); + reducePower( SHIELD_ON_COST ); + static int sf = 0; + sf++; + + if ( sf % 2 ) + shield->setFrame( (shield->frame()+1) % shield->frameCount() ); + shield->move( ship->x() - 9, ship->y() - 9 ); + + QCanvasItemList hits = shield->collisions( TRUE ); + QCanvasItemList::Iterator it; + for ( it = hits.begin(); it != hits.end(); ++it ) + { + if ( (*it)->rtti() >= ID_ROCK_LARGE && + (*it)->rtti() <= ID_ROCK_SMALL ) + { + int factor; + switch ( (*it)->rtti() ) + { + case ID_ROCK_LARGE: + factor = 3; + break; + + case ID_ROCK_MEDIUM: + factor = 2; + break; + + default: + factor = 1; + } + + if ( factor > mShieldCount ) + { + // shield not strong enough + shieldOn = FALSE; + break; + } + rockHit( *it ); + // the more shields we have the less costly + reducePower( factor * (SHIELD_HIT_COST - mShieldCount*2) ); + } + } + } + + if ( !shieldOn ) + { + shield->hide(); + QCanvasItemList hits = ship->collisions( TRUE ); + QCanvasItemList::Iterator it; + for ( it = hits.begin(); it != hits.end(); ++it ) + { + if ( (*it)->rtti() >= ID_ROCK_LARGE && + (*it)->rtti() <= ID_ROCK_SMALL ) + { + KBit *bit; + for ( int i = 0; i < 12; i++ ) + { + bit = new KBit( animation[ID_BIT], &field ); + bit->move( ship->x() + 5 - randDouble() * 10, + ship->y() + 5 - randDouble() * 10, + randInt(bit->frameCount()) ); + bit->setVelocity( 1-randDouble()*2, + 1-randDouble()*2 ); + bit->setDeath( 60 + randInt(60) ); + bit->show( ); + bits.append( bit ); + } + ship->hide(); + shield->hide(); + emit shipKilled(); + break; + } + } + } + + + if ( rotateSlow ) + rotateSlow--; + + if ( rotateL ) + { + shipAngle -= rotateSlow ? 1 : rotateRate; + if ( shipAngle < 0 ) + shipAngle += SHIP_STEPS; + } + + if ( rotateR ) + { + shipAngle += rotateSlow ? 1 : rotateRate; + if ( shipAngle >= SHIP_STEPS ) + shipAngle -= SHIP_STEPS; + } + + double angle = shipAngle * PI_X_2 / SHIP_STEPS; + double cosangle = cos( angle ); + double sinangle = sin( angle ); + + if ( brakeShip ) + { + thrustShip = FALSE; + rotateL = FALSE; + rotateR = FALSE; + rotateRate = ROTATE_RATE; + if ( fabs(shipDx) < 2.5 && fabs(shipDy) < 2.5 ) + { + shipDx = 0.0; + shipDy = 0.0; + ship->setVelocity( shipDx, shipDy ); + brakeShip = FALSE; + } + else + { + double motionAngle = atan2( -shipDy, -shipDx ); + if ( angle > M_PI ) + angle -= PI_X_2; + double angleDiff = angle - motionAngle; + if ( angleDiff > M_PI ) + angleDiff = PI_X_2 - angleDiff; + else if ( angleDiff < -M_PI ) + angleDiff = PI_X_2 + angleDiff; + double fdiff = fabs( angleDiff ); + if ( fdiff > 0.08 ) + { + if ( angleDiff > 0 ) + rotateL = TRUE; + else if ( angleDiff < 0 ) + rotateR = TRUE; + if ( fdiff > 0.6 ) + rotateRate = mBrakeCount + 1; + else if ( fdiff > 0.4 ) + rotateRate = 2; + else + rotateRate = 1; + + if ( rotateRate > 5 ) + rotateRate = 5; + } + else if ( fabs(shipDx) > 1 || fabs(shipDy) > 1 ) + { + thrustShip = TRUE; + // we'll make braking a bit faster + shipDx += cosangle/6 * (mBrakeCount - 1); + shipDy += sinangle/6 * (mBrakeCount - 1); + reducePower( BRAKE_ON_COST ); + addExhaust( ship->x() + 20 - cosangle*22, + ship->y() + 20 - sinangle*22, + shipDx-cosangle, shipDy-sinangle, + mBrakeCount+1 ); + } + } + } + + if ( thrustShip ) + { + // The ship has a terminal velocity, but trying to go faster + // still uses fuel (can go faster diagonally - don't care). + double thrustx = cosangle/4; + double thrusty = sinangle/4; + if ( fabs(shipDx + thrustx) < MAX_SHIP_SPEED ) + shipDx += thrustx; + if ( fabs(shipDy + thrusty) < MAX_SHIP_SPEED ) + shipDy += thrusty; + ship->setVelocity( shipDx, shipDy ); + reducePower( 1 ); + addExhaust( ship->x() + 20 - cosangle*20, + ship->y() + 20 - sinangle*20, + shipDx-cosangle, shipDy-sinangle, 3 ); + } + + ship->setFrame( shipAngle >> 1 ); + + if ( shootShip ) + { + if ( !shootDelay && (int)missiles.count() < mShootCount + 2 ) + { + KMissile *missile = new KMissile( animation[ID_MISSILE], &field ); + missile->move( 21+ship->x()+cosangle*21, + 21+ship->y()+sinangle*21, 0 ); + missile->setVelocity( shipDx + cosangle*MISSILE_SPEED, + shipDy + sinangle*MISSILE_SPEED ); + missile->show( ); + missiles.append( missile ); + shotsFired++; + reducePower( 1 ); + + shootDelay = 5; + } + + if ( shootDelay ) + shootDelay--; + } + + if ( teleportShip ) + { + int ra = rand() % 10; + if( ra == 0 ) + ra += rand() % 20; + int xra = ra * 60 + ( (rand() % 20) * (rand() % 20) ); + int yra = ra * 50 - ( (rand() % 20) * (rand() % 20) ); + ship->move( xra, yra ); + } + + vitalsChanged = TRUE; + } +} + +// - - - + +void KAsteroidsView::processPowerups() +{ + if ( !powerups.isEmpty() ) + { + // if player gets the powerup remove it from the screen, if option + // "Can destroy powerups" is enabled and a missile hits the powerup + // destroy it + + KPowerup *pup; + QPtrListIterator<KPowerup> it( powerups ); + + for( ; it.current(); ++it ) + { + pup = it.current(); + pup->growOlder(); + + if( pup->expired() ) + { + powerups.removeRef( pup ); + continue; + } + + wrapSprite( pup ); + + QCanvasItemList hits = pup->collisions( TRUE ); + QCanvasItemList::Iterator it; + for ( it = hits.begin(); it != hits.end(); ++it ) + { + if ( (*it) == ship ) + { + switch( pup->rtti() ) + { + case ID_ENERGY_POWERUP: + shipPower += 150; + if ( shipPower > MAX_POWER_LEVEL ) + shipPower = MAX_POWER_LEVEL; + break; + case ID_TELEPORT_POWERUP: + mTeleportCount++; + break; + case ID_BRAKE_POWERUP: + if ( mBrakeCount < MAX_BRAKES ) + mBrakeCount++; + break; + case ID_SHIELD_POWERUP: + if ( mShieldCount < MAX_SHIELDS ) + mShieldCount++; + break; + case ID_SHOOT_POWERUP: + if ( mShootCount < MAX_FIREPOWER ) + mShootCount++; + break; + } + + powerups.removeRef( pup ); + vitalsChanged = TRUE; + } + else if ( (*it) == shield ) + { + powerups.removeRef( pup ); + } + else if ( (*it)->rtti() == ID_MISSILE ) + { + if ( can_destroy_powerups ) + { + powerups.removeRef( pup ); + } + } + } + } + } // -- if( powerups.isEmpty() ) +} + +// - - - + +void KAsteroidsView::hideShield() +{ + shield->hide(); + mShieldCount = 0; + shieldOn = FALSE; +} + +double KAsteroidsView::randDouble() +{ + int v = rand(); + return (double)v / (double)RAND_MAX; +} + +int KAsteroidsView::randInt( int range ) +{ + return rand() % range; +} + +void KAsteroidsView::showEvent( QShowEvent *e ) +{ +#if defined( QT_LICENSE_PROFESSIONAL ) + static bool wasThere = FALSE; + + if ( !wasThere ) { + wasThere = TRUE; + QMessageBox::information( this, tr("QCanvas demo"), + tr("This game has been implemented using the QCanvas class.\n" + "The QCanvas class is not part of the Professional Edition. Please \n" + "contact Trolltech if you want to upgrade to the Enterprise Edition.") ); + } +#endif + + QWidget::showEvent( e ); +} diff --git a/examples/demo/qasteroids/view.h b/examples/demo/qasteroids/view.h new file mode 100644 index 0000000..f09d1c3 --- /dev/null +++ b/examples/demo/qasteroids/view.h @@ -0,0 +1,138 @@ +/* + * KAsteroids - Copyright (c) Martin R. Jones 1997 + * + * Part of the KDE project + */ + +#ifndef __AST_VIEW_H__ +#define __AST_VIEW_H__ + +#include <qwidget.h> +#include <qptrlist.h> +#include <qintdict.h> +#include <qtimer.h> +#include <qcanvas.h> +#include "sprites.h" + +#define MAX_POWER_LEVEL 1000 + +class KAsteroidsView : public QWidget +{ + Q_OBJECT +public: + KAsteroidsView( QWidget *parent = 0, const char *name = 0 ); + virtual ~KAsteroidsView(); + + int refreshRate; + + void reset(); + void setRockSpeed( double rs ) { rockSpeed = rs; } + void addRocks( int num ); + void newGame(); + void endGame(); + void newShip(); + + void rotateLeft( bool r ) { rotateL = r; rotateSlow = 5; } + void rotateRight( bool r ) { rotateR = r; rotateSlow = 5; } + void thrust( bool t ) { thrustShip = t && shipPower > 0; } + void shoot( bool s ) { shootShip = s; shootDelay = 0; } + void setShield( bool s ); + void teleport( bool te) { teleportShip = te && mTeleportCount; } + void brake( bool b ); + void pause( bool p); + + void showText( const QString &text, const QColor &color, bool scroll=TRUE ); + void hideText(); + + int shots() const { return shotsFired; } + int hits() const { return shotsHit; } + int power() const { return shipPower; } + + int teleportCount() const { return mTeleportCount; } + int brakeCount() const { return mBrakeCount; } + int shieldCount() const { return mShieldCount; } + int shootCount() const { return mShootCount; } + +signals: + void shipKilled(); + void rockHit( int size ); + void rocksRemoved(); + void updateVitals(); + +private slots: + void hideShield(); + +protected: + bool readSprites(); + void wrapSprite( QCanvasItem * ); + void rockHit( QCanvasItem * ); + void reducePower( int val ); + void addExhaust( double x, double y, double dx, double dy, int count ); + void processMissiles(); + void processShip(); + void processPowerups(); + void processShield(); + double randDouble(); + int randInt( int range ); + + virtual void resizeEvent( QResizeEvent *event ); + virtual void timerEvent( QTimerEvent * ); + + void showEvent( QShowEvent * ); + +private: + QCanvas field; + QCanvasView view; + QIntDict<QCanvasPixmapArray> animation; + QPtrList<QCanvasSprite> rocks; + QPtrList<KMissile> missiles; + QPtrList<KBit> bits; + QPtrList<KExhaust> exhaust; + QPtrList<KPowerup> powerups; + KShield *shield; + QCanvasSprite *ship; + QCanvasText *textSprite; + + bool rotateL; + bool rotateR; + bool thrustShip; + bool shootShip; + bool teleportShip; + bool brakeShip; + bool pauseShip; + bool shieldOn; + + bool vitalsChanged; + + int shipAngle; + int rotateSlow; + int rotateRate; + int shipPower; + + int shotsFired; + int shotsHit; + int shootDelay; + + int mBrakeCount; + int mShieldCount; + int mTeleportCount; + int mShootCount; + + double shipDx; + double shipDy; + + int textDy; + int mFrameNum; + bool mPaused; + int mTimerId; + + double rockSpeed; + double powerupSpeed; + + bool can_destroy_powerups; + + QTimer *shieldTimer; + bool initialized; +}; + +#endif diff --git a/examples/demo/qthumbwheel.cpp b/examples/demo/qthumbwheel.cpp new file mode 100644 index 0000000..e510daa --- /dev/null +++ b/examples/demo/qthumbwheel.cpp @@ -0,0 +1,301 @@ +/**************************************************************************** +** +** Definition of QThumbWheel class +** +** Created : 010205 +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of the widgets module of the Qt GUI Toolkit. +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** Alternatively you may (at your option) use any later version +** of the GNU General Public License if such license has been +** publicly approved by Trolltech ASA (or its successors, if any) +** and the KDE Free Qt Foundation. +** +** Please review the following information to ensure GNU General +** Public Licensing requirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/. +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at sales@trolltech.com. +** +** This file may be used under the terms of the Q Public License as +** defined by Trolltech ASA and appearing in the file LICENSE.QPL +** included in the packaging of this file. Licensees holding valid Qt +** Commercial licenses may use this file in accordance with the Qt +** Commercial License Agreement provided with the Software. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +#include "qthumbwheel.h" + +#ifndef QT_NO_THUMBWHEEL +#include <qpainter.h> +#include <qdrawutil.h> +#include <qpixmap.h> +#include <math.h> + +static const double m_pi = 3.14159265358979323846; +static const double rad_factor = 180.0 / m_pi; + +QThumbWheel::QThumbWheel( QWidget *parent, const char *name ) + : QFrame( parent, name ) +{ + orient = Vertical; + init(); +} + +/*! + Destructs the wheel. +*/ + +QThumbWheel::~QThumbWheel() +{ +} + +/*! + \internal + */ + +void QThumbWheel::init() +{ + track = TRUE; + mousePressed = FALSE; + pressedAt = -1; + rat = 1.0; + setFrameStyle( WinPanel | Sunken ); + setMargin( 2 ); + setFocusPolicy( WheelFocus ); +} + +void QThumbWheel::setOrientation( Orientation orientation ) +{ + orient = orientation; + update(); +} + +void QThumbWheel::setTracking( bool enable ) +{ + track = enable; +} + +void QThumbWheel::setTransmissionRatio( double r ) +{ + rat = r; +} + +/*! + Makes QRangeControl::setValue() available as a slot. +*/ + +void QThumbWheel::setValue( int value ) +{ + QRangeControl::setValue( value ); +} + +void QThumbWheel::valueChange() +{ + repaint( FALSE ); + emit valueChanged(value()); +} + +void QThumbWheel::rangeChange() +{ +} + +void QThumbWheel::stepChange() +{ +} + +/*! + \reimp +*/ + +void QThumbWheel::keyPressEvent( QKeyEvent *e ) +{ + switch ( e->key() ) { + case Key_Left: + if ( orient == Horizontal ) + subtractLine(); + break; + case Key_Right: + if ( orient == Horizontal ) + addLine(); + break; + case Key_Up: + if ( orient == Vertical ) + subtractLine(); + break; + case Key_Down: + if ( orient == Vertical ) + addLine(); + break; + case Key_PageUp: + subtractPage(); + break; + case Key_PageDown: + addPage(); + break; + case Key_Home: + setValue( minValue() ); + break; + case Key_End: + setValue( maxValue() ); + break; + default: + e->ignore(); + return; + }; +} + +/*! + \reimp +*/ + +void QThumbWheel::mousePressEvent( QMouseEvent *e ) +{ + if ( e->button() == LeftButton ) { + mousePressed = TRUE; + pressedAt = valueFromPosition( e->pos() ); + } +} + +/*! + \reimp +*/ + +void QThumbWheel::mouseReleaseEvent( QMouseEvent *e ) +{ + int movedTo = valueFromPosition( e->pos() ); + setValue( value() + movedTo - pressedAt ); + pressedAt = movedTo; +} + +/*! + \reimp +*/ + +void QThumbWheel::mouseMoveEvent( QMouseEvent *e ) +{ + if ( !mousePressed ) + return; + if ( track ) { + int movedTo = valueFromPosition( e->pos() ); + setValue( value() + movedTo - pressedAt ); + pressedAt = movedTo; + } +} + +/*! + \reimp +*/ + +void QThumbWheel::wheelEvent( QWheelEvent *e ) +{ + int step = ( e->state() & ControlButton ) ? lineStep() : pageStep(); + setValue( value() - e->delta()*step/120 ); + e->accept(); +} + +/*!\reimp +*/ + +void QThumbWheel::focusInEvent( QFocusEvent *e ) +{ + QWidget::focusInEvent( e ); +} + +/*!\reimp +*/ + +void QThumbWheel::focusOutEvent( QFocusEvent *e ) +{ + QWidget::focusOutEvent( e ); +} + +void QThumbWheel::drawContents( QPainter *p ) +{ + QRect cr = contentsRect(); + // double buffer + QPixmap pix( width(), height() ); + QPainter pt( &pix ); + QBrush brush = backgroundPixmap() ? + QBrush( backgroundColor(), *backgroundPixmap() ) : QBrush( backgroundColor() ); + pt.fillRect( cr, brush ); + + const int n = 17; + const double delta = m_pi / double(n); + // ### use positionFromValue() with rad*16 or similar + double alpha = 2*m_pi*double(value()-minValue())/ + double(maxValue()-minValue())*transmissionRatio(); + alpha = fmod(alpha, delta); + QPen pen0( colorGroup().midlight() ); + QPen pen1( colorGroup().dark() ); + + if ( orient == Horizontal ) { + double r = 0.5*cr.width(); + int y0 = cr.y()+1; + int y1 = cr.bottom()-1; + for ( int i = 0; i < n; i++ ) { + int x = cr.x() + int((1-cos(delta*double(i)+alpha))*r); + pt.setPen( pen0 ); + pt.drawLine( x, y0, x, y1 ); + pt.setPen( pen1 ); + pt.drawLine( x+1, y0, x+1, y1 ); + } + } else { + // vertical orientation + double r = 0.5*cr.height(); + int x0 = cr.x()+1; + int x1 = cr.right()-1; + for ( int i = 0; i < n; i++ ) { + int y = cr.y() + int((1-cos(delta*double(i)+alpha))*r); + pt.setPen( pen0 ); + pt.drawLine( x0, y, x1, y ); + pt.setPen( pen1 ); + pt.drawLine( x0, y+1, x1, y+1 ); + } + } + qDrawShadePanel( &pt, cr, colorGroup()); + + pt.end(); + p->drawPixmap( 0, 0, pix ); +} + +int QThumbWheel::valueFromPosition( const QPoint &p ) +{ + QRect wrec = contentsRect(); + int pos, min, max; + if ( orient == Horizontal ) { + pos = p.x(); + min = wrec.left(); + max = wrec.right(); + } else { + pos = p.y(); + min = wrec.top(); + max = wrec.bottom(); + } + double alpha; + if ( pos < min ) + alpha = 0; + else if ( pos > max ) + alpha = m_pi; + else + alpha = acos( 1.0 - 2.0*double(pos-min)/double(max-min) );// ### taylor + double deg = alpha*rad_factor/transmissionRatio(); + // ### use valueFromPosition() + return minValue() + int((maxValue()-minValue())*deg/360.0); +} + +#endif diff --git a/examples/demo/qthumbwheel.h b/examples/demo/qthumbwheel.h new file mode 100644 index 0000000..6945e78 --- /dev/null +++ b/examples/demo/qthumbwheel.h @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Definition of QThumbWheel class +** +** Created : 010205 +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of the widgets module of the Qt GUI Toolkit. +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** Alternatively you may (at your option) use any later version +** of the GNU General Public License if such license has been +** publicly approved by Trolltech ASA (or its successors, if any) +** and the KDE Free Qt Foundation. +** +** Please review the following information to ensure GNU General +** Public Licensing requirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/. +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at sales@trolltech.com. +** +** This file may be used under the terms of the Q Public License as +** defined by Trolltech ASA and appearing in the file LICENSE.QPL +** included in the packaging of this file. Licensees holding valid Qt +** Commercial licenses may use this file in accordance with the Qt +** Commercial License Agreement provided with the Software. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +#ifndef QTHUMBWHEEL_H +#define QTHUMBWHEEL_H + +#ifndef QT_H +#include "qframe.h" +#include "qrangecontrol.h" +#endif // QT_H + +#ifndef QT_NO_THUMBWHEEL + +class QThumbWheel : public QFrame, public QRangeControl +{ + Q_OBJECT + +public: + QThumbWheel( QWidget *parent=0, const char *name=0 ); + ~QThumbWheel(); + + virtual void setOrientation( Orientation ); + Orientation orientation() const; + virtual void setTracking( bool enable ); + bool tracking() const; + virtual void setTransmissionRatio( double r ); + double transmissionRatio() const; + +public slots: + virtual void setValue( int ); + +signals: + void valueChanged( int value ); + +protected: + void valueChange(); + void rangeChange(); + void stepChange(); + + void keyPressEvent( QKeyEvent * ); + void mousePressEvent( QMouseEvent * ); + void mouseReleaseEvent( QMouseEvent * ); + void mouseMoveEvent( QMouseEvent * ); + void wheelEvent( QWheelEvent * ); + void focusInEvent( QFocusEvent *e ); + void focusOutEvent( QFocusEvent *e ); + + void drawContents( QPainter * ); + +private: + void init(); + int valueFromPosition( const QPoint & ); + + + double rat; + int pressedAt; + Orientation orient; + uint track : 1; + uint mousePressed : 1; + + class QThumbWheelPrivate; + QThumbWheelPrivate *d; +}; + +inline QThumbWheel::Orientation QThumbWheel::orientation() const +{ + return orient; +} + +inline bool QThumbWheel::tracking() const +{ + return (bool)track; +} + +inline double QThumbWheel::transmissionRatio() const +{ + return rat; +} + +#endif // QT_NO_WHEEL + +#endif // QWHEEL_H diff --git a/examples/demo/sql/book.sql b/examples/demo/sql/book.sql new file mode 100644 index 0000000..417ef43 --- /dev/null +++ b/examples/demo/sql/book.sql @@ -0,0 +1,42 @@ +-- The following SQL generates the database +-- used by the 'book' example programs +-- Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +-- +-- This file is part of an example program for Qt. This example +-- program may be used, distributed and modified without limitation. + +DROP TABLE author; +DROP TABLE book; +DROP TABLE sequence; + +CREATE TABLE author +( id integer primary key, +forename varchar(40), +surname varchar(40) ); + +CREATE TABLE book +( id integer primary key, +title varchar(40), +price numeric(10,2), +authorid integer, +notes varchar(255) ); + +create index book_authorid_idx on book( authorid ); + +CREATE TABLE sequence +( tablename varchar(10), +sequence numeric); + +INSERT INTO author VALUES ( 0, 'Philip K', 'Dick' ); +INSERT INTO author VALUES ( 1, 'Robert', 'Heinlein' ); +INSERT INTO author VALUES ( 2, 'Sarah', 'Paretsky' ); + +INSERT INTO book VALUES ( 0, 'The Man Who Japed', 6.99, 0, 'A good book' ); +INSERT INTO book VALUES ( 1, 'The Man in the High Castle', 9.99, 0, 'Worth reading' ); +INSERT INTO book VALUES ( 2, 'The Number of the Beast', 8.99, 1, 'Get this!' ); +INSERT INTO book VALUES ( 3, 'Indemnity Only', 9.99, 2, 'Cool' ); +INSERT INTO book VALUES ( 4, 'Burn Marks', 9.99, 2, 'Need to make notes' ); +INSERT INTO book VALUES ( 5, 'Deadlock', 9.99, 2, 'Hmmm..' ); + +INSERT INTO sequence VALUES ( 'author', 2 ); +INSERT INTO sequence VALUES ( 'book', 5 ); diff --git a/examples/demo/sql/connect.ui b/examples/demo/sql/connect.ui new file mode 100644 index 0000000..8031fd0 --- /dev/null +++ b/examples/demo/sql/connect.ui @@ -0,0 +1,244 @@ +<!DOCTYPE UI><UI version="3.0" stdsetdef="1"> +<class>ConnectDialog</class> +<widget class="QDialog"> + <property name="name"> + <cstring>ConnectDialog</cstring> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>303</width> + <height>247</height> + </rect> + </property> + <property name="caption"> + <string>Connect...</string> + </property> + <vbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QGroupBox"> + <property name="name"> + <cstring>GroupBox3</cstring> + </property> + <property name="title"> + <string>Connection settings</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLineEdit" row="1" column="1"> + <property name="name"> + <cstring>editDatabase</cstring> + </property> + </widget> + <widget class="QLabel" row="1" column="0"> + <property name="name"> + <cstring>TextLabel3</cstring> + </property> + <property name="text"> + <string>Database Name:</string> + </property> + <property name="buddy" stdset="0"> + <cstring>comboDatabase</cstring> + </property> + </widget> + <widget class="QLineEdit" row="3" column="1"> + <property name="name"> + <cstring>editPassword</cstring> + </property> + <property name="echoMode"> + <enum>Password</enum> + </property> + </widget> + <widget class="QLabel" row="2" column="0"> + <property name="name"> + <cstring>TextLabel4</cstring> + </property> + <property name="text"> + <string>&Username:</string> + </property> + <property name="buddy" stdset="0"> + <cstring>editUsername</cstring> + </property> + </widget> + <widget class="QLabel" row="3" column="0"> + <property name="name"> + <cstring>TextLabel4_2</cstring> + </property> + <property name="text"> + <string>&Password:</string> + </property> + <property name="buddy" stdset="0"> + <cstring>editPassword</cstring> + </property> + </widget> + <widget class="QComboBox" row="0" column="1"> + <property name="name"> + <cstring>comboDriver</cstring> + </property> + </widget> + <widget class="QLineEdit" row="2" column="1"> + <property name="name"> + <cstring>editUsername</cstring> + </property> + </widget> + <widget class="QLineEdit" row="4" column="1"> + <property name="name"> + <cstring>editHostname</cstring> + </property> + </widget> + <widget class="QLabel" row="4" column="0"> + <property name="name"> + <cstring>TextLabel5</cstring> + </property> + <property name="text"> + <string>&Hostname:</string> + </property> + <property name="buddy" stdset="0"> + <cstring>editHostname</cstring> + </property> + </widget> + <widget class="QLabel" row="5" column="0"> + <property name="name"> + <cstring>TextLabel5_2</cstring> + </property> + <property name="text"> + <string>P&ort:</string> + </property> + <property name="buddy" stdset="0"> + <cstring>portSpinBox</cstring> + </property> + </widget> + <widget class="QSpinBox" row="5" column="1"> + <property name="name"> + <cstring>portSpinBox</cstring> + </property> + <property name="specialValueText"> + <string>Default</string> + </property> + <property name="maxValue"> + <number>65535</number> + </property> + <property name="minValue"> + <number>-1</number> + </property> + <property name="value"> + <number>-1</number> + </property> + </widget> + <widget class="QLabel" row="0" column="0"> + <property name="name"> + <cstring>TextLabel2</cstring> + </property> + <property name="text"> + <string>D&river</string> + </property> + <property name="buddy" stdset="0"> + <cstring>comboDriver</cstring> + </property> + </widget> + </grid> + </widget> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>Layout25</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <spacer> + <property name="name"> + <cstring>Spacer1</cstring> + </property> + <property name="orientation"> + <enum>Horizontal</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + <widget class="QPushButton"> + <property name="name"> + <cstring>PushButton1</cstring> + </property> + <property name="text"> + <string>&OK</string> + </property> + <property name="default"> + <bool>true</bool> + </property> + </widget> + <widget class="QPushButton"> + <property name="name"> + <cstring>PushButton2</cstring> + </property> + <property name="text"> + <string>&Cancel</string> + </property> + </widget> + </hbox> + </widget> + </vbox> +</widget> +<connections> + <connection> + <sender>PushButton1</sender> + <signal>clicked()</signal> + <receiver>ConnectDialog</receiver> + <slot>accept()</slot> + </connection> + <connection> + <sender>PushButton2</sender> + <signal>clicked()</signal> + <receiver>ConnectDialog</receiver> + <slot>reject()</slot> + </connection> +</connections> +<tabstops> + <tabstop>comboDriver</tabstop> + <tabstop>editDatabase</tabstop> + <tabstop>editUsername</tabstop> + <tabstop>editPassword</tabstop> + <tabstop>editHostname</tabstop> + <tabstop>portSpinBox</tabstop> + <tabstop>PushButton1</tabstop> + <tabstop>PushButton2</tabstop> +</tabstops> +<includes> + <include location="local" impldecl="in implementation">connect.ui.h</include> +</includes> +<slots> + <slot>init()</slot> + <slot>destroy()</slot> +</slots> +<layoutdefaults spacing="6" margin="11"/> +</UI> diff --git a/examples/demo/sql/connect.ui.h b/examples/demo/sql/connect.ui.h new file mode 100644 index 0000000..da1c78f --- /dev/null +++ b/examples/demo/sql/connect.ui.h @@ -0,0 +1,20 @@ +/**************************************************************************** +** ui.h extension file, included from the uic-generated form implementation. +** +** If you wish to add, delete or rename slots use Qt Designer which will +** update this file, preserving your code. Create an init() slot in place of +** a constructor, and a destroy() slot in place of a destructor. +*****************************************************************************/ + +#include <qsqldatabase.h> + +void ConnectDialog::init() +{ + comboDriver->clear(); + comboDriver->insertStringList( QSqlDatabase::drivers() ); +} + +void ConnectDialog::destroy() +{ + +} diff --git a/examples/demo/sql/sqlex.ui b/examples/demo/sql/sqlex.ui new file mode 100644 index 0000000..48a3605 --- /dev/null +++ b/examples/demo/sql/sqlex.ui @@ -0,0 +1,309 @@ +<!DOCTYPE UI><UI version="3.1" stdsetdef="1"> +<class>SqlEx</class> +<widget class="QWidget"> + <property name="name"> + <cstring>SqlEx</cstring> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>654</width> + <height>438</height> + </rect> + </property> + <property name="caption"> + <string>Form1</string> + </property> + <vbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QSplitter"> + <property name="name"> + <cstring>vsplit</cstring> + </property> + <property name="orientation"> + <enum>Vertical</enum> + </property> + <widget class="QSplitter"> + <property name="name"> + <cstring>hsplit</cstring> + </property> + <property name="orientation"> + <enum>Horizontal</enum> + </property> + <widget class="QListView"> + <column> + <property name="text"> + <string>Tables</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <column> + <property name="text"> + <string>Type</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <column> + <property name="text"> + <string>Required</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <property name="name"> + <cstring>lv</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="allColumnsShowFocus"> + <bool>true</bool> + </property> + <property name="rootIsDecorated"> + <bool>true</bool> + </property> + <property name="resizeMode"> + <enum>LastColumn</enum> + </property> + </widget> + <widget class="QDataTable"> + <property name="name"> + <cstring>dt</cstring> + </property> + <property name="frameworkCode" stdset="0"> + <bool>false</bool> + </property> + </widget> + </widget> + <widget class="QGroupBox"> + <property name="name"> + <cstring>gb</cstring> + </property> + <property name="title"> + <string>SQL Query</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLayoutWidget" row="0" column="0"> + <property name="name"> + <cstring>Layout22</cstring> + </property> + <vbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QTextEdit"> + <property name="name"> + <cstring>te</cstring> + </property> + </widget> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>Layout21</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <spacer> + <property name="name"> + <cstring>Spacer3</cstring> + </property> + <property name="orientation"> + <enum>Horizontal</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + <widget class="QPushButton"> + <property name="name"> + <cstring>submitBtn</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>80</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string>&Submit</string> + </property> + </widget> + <widget class="QPushButton"> + <property name="name"> + <cstring>clearBtn</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>80</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string>C&lear</string> + </property> + </widget> + </hbox> + </widget> + </vbox> + </widget> + </grid> + </widget> + </widget> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>Layout23</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLabel"> + <property name="name"> + <cstring>lbl</cstring> + </property> + <property name="text"> + <string>Press "Connect" to open a database</string> + </property> + </widget> + <widget class="QPushButton"> + <property name="name"> + <cstring>conBtn</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>0</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>80</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string>&Connect...</string> + </property> + </widget> + </hbox> + </widget> + </vbox> +</widget> +<connections> + <connection> + <sender>clearBtn</sender> + <signal>clicked()</signal> + <receiver>te</receiver> + <slot>clear()</slot> + </connection> + <connection> + <sender>conBtn</sender> + <signal>clicked()</signal> + <receiver>SqlEx</receiver> + <slot>dbConnect()</slot> + </connection> + <connection> + <sender>lv</sender> + <signal>returnPressed(QListViewItem*)</signal> + <receiver>SqlEx</receiver> + <slot>showTable(QListViewItem*)</slot> + </connection> + <connection> + <sender>lv</sender> + <signal>doubleClicked(QListViewItem*)</signal> + <receiver>SqlEx</receiver> + <slot>showTable(QListViewItem*)</slot> + </connection> + <connection> + <sender>submitBtn</sender> + <signal>clicked()</signal> + <receiver>SqlEx</receiver> + <slot>execQuery()</slot> + </connection> +</connections> +<includes> + <include location="local" impldecl="in implementation">sqlex.ui.h</include> +</includes> +<slots> + <slot>init()</slot> + <slot>dbConnect()</slot> + <slot>execQuery()</slot> + <slot>showTable( QListViewItem * item )</slot> +</slots> +<layoutdefaults spacing="6" margin="11"/> +</UI> diff --git a/examples/demo/sql/sqlex.ui.h b/examples/demo/sql/sqlex.ui.h new file mode 100644 index 0000000..bad4059 --- /dev/null +++ b/examples/demo/sql/sqlex.ui.h @@ -0,0 +1,126 @@ +/**************************************************************************** +** ui.h extension file, included from the uic-generated form implementation. +** +** If you wish to add, delete or rename slots use Qt Designer which will +** update this file, preserving your code. Create an init() slot in place of +** a constructor, and a destroy() slot in place of a destructor. +*****************************************************************************/ +#include <qsqldriver.h> +#include <qmessagebox.h> +#include <qsqldatabase.h> +#include <qlineedit.h> +#include <qcombobox.h> +#include <qspinbox.h> +#include <qsqlerror.h> +#include <qsqlcursor.h> +#include <qsqlselectcursor.h> +#include <qdatatable.h> +#include "connect.h" + +static void showError( const QSqlError& err, QWidget* parent = 0 ) +{ + QString errStr ( "The database reported an error\n" ); + if ( !err.databaseText().isEmpty() ) + errStr += err.databaseText(); + if ( !err.driverText().isEmpty() ) + errStr += err.driverText(); + QMessageBox::warning( parent, "Error", errStr ); +} + +ConnectDialog* conDiag = 0; + +void SqlEx::init() +{ + hsplit->setResizeMode( lv, QSplitter::KeepSize ); + vsplit->setResizeMode( gb, QSplitter::KeepSize ); + submitBtn->setEnabled( FALSE ); + conDiag = new ConnectDialog( this, "Connection Dialog", TRUE ); +} + +void SqlEx::dbConnect() +{ + if ( conDiag->exec() != QDialog::Accepted ) + return; + if ( dt->sqlCursor() ) { + dt->setSqlCursor( 0 ); + } + // close old connection (if any) + if ( QSqlDatabase::contains( "SqlEx" ) ) { + QSqlDatabase* oldDb = QSqlDatabase::database( "SqlEx" ); + oldDb->close(); + QSqlDatabase::removeDatabase( "SqlEx" ); + } + // open the new connection + QSqlDatabase* db = QSqlDatabase::addDatabase( conDiag->comboDriver->currentText(), "SqlEx" ); + if ( !db ) { + QMessageBox::warning( this, "Error", "Could not open database" ); + return; + } + db->setHostName( conDiag->editHostname->text() ); + db->setDatabaseName( conDiag->editDatabase->text() ); + db->setPort( conDiag->portSpinBox->value() ); + if ( !db->open( conDiag->editUsername->text(), conDiag->editPassword->text() ) ) { + showError( db->lastError(), this ); + return; + } + lbl->setText( "Double-Click on a table-name to view the contents" ); + lv->clear(); + + QStringList tables = db->tables(); + for ( QStringList::Iterator it = tables.begin(); it != tables.end(); ++it ) { + QListViewItem* lvi = new QListViewItem( lv, *it ); + QSqlRecordInfo ri = db->recordInfo ( *it ); + for ( QSqlRecordInfo::Iterator it = ri.begin(); it != ri.end(); ++it ) { + QString req; + if ( (*it).isRequired() > 0 ) { + req = "Yes"; + } else if ( (*it).isRequired() == 0 ) { + req = "No"; + } else { + req = "?"; + } + QListViewItem* fi = new QListViewItem( lvi, (*it).name(), + QVariant::typeToName( (*it).type() ), req ); + lvi->insertItem( fi ); + } + lv->insertItem( lvi ); + } + submitBtn->setEnabled( TRUE ); +} + +void SqlEx::execQuery() +{ + // use a custom cursor to populate the data table + QSqlSelectCursor* cursor = new QSqlSelectCursor( te->text(), QSqlDatabase::database( "SqlEx", TRUE ) ); + if ( cursor->isSelect() ) { + dt->setSqlCursor( cursor, TRUE, TRUE ); + dt->setSort( QStringList() ); + dt->refresh( QDataTable::RefreshAll ); + QString txt( "Query OK" ); + if ( cursor->size() >= 0 ) + txt += ", returned rows: " + QString::number( cursor->size() ); + lbl->setText( txt ); + } else { + // an error occured if the cursor is not active + if ( !cursor->isActive() ) { + showError( cursor->lastError(), this ); + } else { + lbl->setText( QString("Query OK, affected rows: %1").arg( cursor->numRowsAffected() ) ); + } + } +} + +void SqlEx::showTable( QListViewItem * item ) +{ + // get the table name + QListViewItem* i = item->parent(); + if ( !i ) { + i = item; + } + + // populate the data table + QSqlCursor* cursor = new QSqlCursor( i->text( 0 ), TRUE, QSqlDatabase::database( "SqlEx", TRUE ) ); + dt->setSqlCursor( cursor, TRUE, TRUE ); + dt->setSort( cursor->primaryIndex() ); + dt->refresh( QDataTable::RefreshAll ); + lbl->setText( "Displaying table " + i->text( 0 ) ); +} diff --git a/examples/demo/textdrawing/bidi.txt b/examples/demo/textdrawing/bidi.txt new file mode 100644 index 0000000..7674ab0 --- /dev/null +++ b/examples/demo/textdrawing/bidi.txt @@ -0,0 +1,6 @@ +This page contains text in many languages, advertising the Tenth International Unicode Conference. The page is encoded using Unicode UTF-8 and to view it you need a Unicode-capable browser. If you don't have access to such a browser, you may want to visit the individual Web pages, each containing the text in a single language. The text on these Web pages was provided by volunteer translators (see the Credits page). If you would like to offer a language we don't yet have, or have a comment about one of the existing pages, please mail us. + +×ירופה, ×ª×•×›× ×” וה××™× ×˜×¨× ×˜: Unicode ×™×•×¦× ×œ×©×•×§ העולמי הירשמו כעת ×œ×›× ×¡ Unicode ×”×‘×™× ×œ×ומי העשירי, שייערך בין הת××¨×™×›×™× 12Ö¾10 במרץ 1997, ×‘×ž×™×™× ×¥ ×©×‘×’×¨×ž× ×™×”. ×‘×›× ×¡ ישתתפו ×ž×•×ž×—×™× ×ž×›×œ ×¢× ×¤×™ התעשייה ×‘× ×•×©× ×”××™× ×˜×¨× ×˜ העולמי וה־Unicode, בהת×מה לשוק ×”×‘×™× ×œ×ומי והמקומי, ×‘×™×™×©×•× Unicode במערכות הפעלה וביישומי×, ×‘×’×•×¤× ×™×, בפריסת טקסט ובמחשוב ×¨×‘Ö¾×œ×©×•× ×™. some english inbetween ×›×שר ×”×¢×•×œ× ×¨×•×¦×” לדבר, ×”×•× ×ž×“×‘×¨ ב־Unicode + +أوروبا, برمجيات Ø§Ù„ØØ§Ø³ÙˆØ¨ + انترنيت : some english ØªØµØ¨Ø Ø¹Ø§Ù„Ù…ÙŠØ§ مع يونيكود more english تسجّل الآن Ù„ØØ¶ÙˆØ± المؤتمر الدولي العاشر ليونيكود, الذي سيعقد ÙÙŠ 10-12 آذار 1997 بمدينة ماينتس, ألمانيا. وسيجمع المؤتمر بين خبراء من ÙƒØ§ÙØ© قطاعات الصناعة على الشبكة العالمية انترنيت ويونيكود, ØÙŠØ« ستتم, على الصعيدين الدولي والمØÙ„ÙŠ على ØØ¯ سواء مناقشة سبل استخدام يونكود ÙÙŠ النظم القائمة ÙˆÙيما يخص التطبيقات Ø§Ù„ØØ§Ø³ÙˆØ¨ÙŠØ©, الخطوط, تصميم النصوص والØÙˆØ³Ø¨Ø© متعددة اللغات. english عندما يريد العالم أن يتكلّم, Ùهو ÙŠØªØØ¯Ù‘Ø« بلغة يونيكود. english... + diff --git a/examples/demo/textdrawing/editcopy.png b/examples/demo/textdrawing/editcopy.png Binary files differnew file mode 100644 index 0000000..2f931cb --- /dev/null +++ b/examples/demo/textdrawing/editcopy.png diff --git a/examples/demo/textdrawing/editcut.png b/examples/demo/textdrawing/editcut.png Binary files differnew file mode 100644 index 0000000..54c8e14 --- /dev/null +++ b/examples/demo/textdrawing/editcut.png diff --git a/examples/demo/textdrawing/editdelete.png b/examples/demo/textdrawing/editdelete.png Binary files differnew file mode 100644 index 0000000..9f0491d --- /dev/null +++ b/examples/demo/textdrawing/editdelete.png diff --git a/examples/demo/textdrawing/editlower.png b/examples/demo/textdrawing/editlower.png Binary files differnew file mode 100644 index 0000000..50605f2 --- /dev/null +++ b/examples/demo/textdrawing/editlower.png diff --git a/examples/demo/textdrawing/editpaste.png b/examples/demo/textdrawing/editpaste.png Binary files differnew file mode 100644 index 0000000..b1b7f85 --- /dev/null +++ b/examples/demo/textdrawing/editpaste.png diff --git a/examples/demo/textdrawing/editraise.png b/examples/demo/textdrawing/editraise.png Binary files differnew file mode 100644 index 0000000..f157251 --- /dev/null +++ b/examples/demo/textdrawing/editraise.png diff --git a/examples/demo/textdrawing/example.html b/examples/demo/textdrawing/example.html new file mode 100644 index 0000000..b538002 --- /dev/null +++ b/examples/demo/textdrawing/example.html @@ -0,0 +1,340 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head> +<title>Qt Toolkit - QLabel Class</title><style type="text/css"><!-- +h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; } +a:link { color: #004faf; text-decoration: none } +a:visited { color: #672967; text-decoration: none }body { background: white; color: black; } +--></style> +</head><body bgcolor="#ffffff"> + +<h1 align=center>QLabel Class Reference</h1><br clear="all"> +<p> +The QLabel widget provides a static information display +<a href="#details">More...</a> +<p> +<code>#include <<a href="qlabel-h.html">qlabel.h</a>></code> +<p> +Inherits <a href="qframe.html">QFrame</a>. +<p><a href="qlabel-members.html">List of all member functions.</a> +<h2>Public Members</h2> +<ul> +<li><div class="fn"><a href="#39107d"><b>QLabel</b></a> ( QWidget * parent, const char * name=0, WFlags f=0 ) </div> +<li><div class="fn"><a href="#2bafbb"><b>QLabel</b></a> ( const QString & text, QWidget * parent, const char * name=0, WFlags f=0 ) </div> +<li><div class="fn"><a href="#5514c7"><b>QLabel</b></a> ( QWidget * buddy, const QString &, QWidget * parent, const char * name=0, WFlags f=0 ) </div> +<li><div class="fn"><a href="#9958af"><b>~QLabel</b></a> () </div> +<li><div class="fn">QString <a href="#72cf09"><b>text</b></a> () const</div> +<li><div class="fn">QPixmap* <a href="#101ecb"><b>pixmap</b></a> () const</div> +<li><div class="fn">QMovie* <a href="#7dcdfe"><b>movie</b></a> () const</div> +<li><div class="fn">TextFormat <a href="#0b92ed"><b>textFormat</b></a> () const</div> +<li><div class="fn">void <a href="#5de3f9"><b>setTextFormat</b></a> ( TextFormat ) </div> +<li><div class="fn">int <a href="#2fcaa3"><b>alignment</b></a> () const</div> +<li><div class="fn">virtual void <a href="#1f406e"><b>setAlignment</b></a> ( int ) </div> +<li><div class="fn">int <a href="#e3c907"><b>indent</b></a> () const</div> +<li><div class="fn">void <a href="#ed9b8b"><b>setIndent</b></a> ( int ) </div> +<li><div class="fn">bool autoResize () const <em>(obsolete)</em></div> +<li><div class="fn">virtual void setAutoResize ( bool ) <em>(obsolete)</em></div> +<li><div class="fn">bool <a href="#7e1f73"><b>hasScaledContents</b></a> () const</div> +<li><div class="fn">void <a href="#e9e3cf"><b>setScaledContents</b></a> ( bool ) </div> +<li><div class="fn">virtual void <a href="#191701"><b>setBuddy</b></a> ( QWidget * ) </div> +<li><div class="fn">QWidget* <a href="#123954"><b>buddy</b></a> () const</div> +</ul> +<h2>Public Slots</h2> +<ul> +<li><div class="fn">virtual void <a href="#dffb43"><b>setText</b></a> ( const QString & ) </div> +<li><div class="fn">virtual void <a href="#f3f301"><b>setPixmap</b></a> ( const QPixmap & ) </div> +<li><div class="fn">virtual void <a href="#60de9f"><b>setMovie</b></a> ( const QMovie & ) </div> +<li><div class="fn">virtual void <a href="#301e3c"><b>setNum</b></a> ( int ) </div> +<li><div class="fn">virtual void <a href="#1a8f6a"><b>setNum</b></a> ( double ) </div> +<li><div class="fn">void <a href="#be73f3"><b>clear</b></a> () </div> +</ul> +<h2>Protected Members</h2> +<ul> +<li><div class="fn">virtual void <a href="#fac264"><b>drawContents</b></a> ( QPainter * ) </div> +<li><div class="fn">virtual void <a href="#479dd2"><b>drawContentsMask</b></a> ( QPainter * ) </div> +</ul> +<h2>Properties</h2> +<table border=1 cellpadding=3 cellspacing=0> +<tr><th>Type<th>Name<th>READ<th>WRITE<th>Options +<tr><td>QString<td>text<td>text<td>setText<td> +<tr><td>TextFormat<td>textFormat<td>textFormat<td>setTextFormat<td> +<tr><td>QPixmap<td>pixmap<td>pixmap<td>setPixmap<td> +<tr><td>bool<td>scaledContents<td>hasScaledContents<td>setScaledContents<td> +<tr><td>Alignment<td>alignment<td>alignment<td>setAlignment<td> +<tr><td>int<td>indent<td>indent<td>setIndent<td> +</table> +<p> +<hr><h2><a name="details"></a>Detailed Description</h2> +The QLabel widget provides a static information display +<p> +QLabel is used for displaying information in the form of text or +image to the user. No user interaction functionality is +provided. The visual appearance of the label can be configured in +various ways, and it can be used for specifying a focus accelerator +key for another widget. +<p>A QLabel can contain any of the following content types: +<ul> +<li> A plain text: set by passing a <a href="qstring.html">QString</a> to <a href="#dffb43">setText</a>(). +<li> A rich text: set by passing a QString that contains a rich text to setText(). +<li> A pixmap: set by passing a <a href="qpixmap.html">QPixmap</a> to <a href="#f3f301">setPixmap</a>(). +<li> A movie: set by passing a <a href="qmovie.html">QMovie</a> to <a href="#60de9f">setMovie</a>(). +<li> A number: set by passing an <em>int</em> or a <em>double</em> to <a href="#1a8f6a">setNum</a>(), which converts the number to plain text. +<li> Nothing: The same as an empty plain text. This is the default. Set by <a href="#be73f3">clear</a>(). +</ul> +<p>When the content is changed using any of these functions, any +previous content is cleared. +<p>The look of a QLabel can be tuned in several ways. All the settings +of <a href="qframe.html">QFrame</a> are available for specifying a widget frame. The +positioning of the content within the QLabel widget area can be +tuned with <a href="#1f406e">setAlignment</a>() and <a href="#ed9b8b">setIndent</a>(). For example, this code +sets up a sunken panel with a two-line text in the bottom right +corner (both lines being flush with the right side of the label): +<p><pre> <a href="qlabel.html">QLabel</a> *label = new <a href="qlabel.html">QLabel</a>; + label-><a href="qframe.html#c0d758">setFrameStyle</a>( QFrame::Panel | QFrame::Sunken ); + label-><a href="#dffb43">setText</a>( "first line\nsecond line" ); + label-><a href="#1f406e">setAlignment</a>( AlignBottom | AlignRight ); +</pre> +<p>A QLabel is often used as a label for another, interactive +widget. For this use, QLabel provides a handy mechanism for adding +an accelerator key (see <a href="qaccel.html">QAccel</a>) that will set the keyboard focus to +the other widget (called the QLabel's "buddy"). Example: +<p><pre> <a href="qlineedit.html">QLineEdit</a>* phoneEdit = new <a href="qlineedit.html">QLineEdit</a>( this, "phoneEdit" ); + <a href="qlabel.html">QLabel</a>* phoneLabel = new <a href="qlabel.html">QLabel</a>( phoneEdit, "&Phone:", this, "phoneLabel" ); +</pre> +<p>In this example, keyboard focus is transferred to the label's buddy +(the <a href="qlineedit.html">QLineEdit</a>) when the user presses <dfn>Alt-P.</dfn> You can also +use the <a href="#191701">setBuddy</a>() function to accomplish the same. +<p> +<p>See also <a href="qlineedit.html">QLineEdit</a>, <a href="qtextview.html">QTextView</a>, <a href="qpixmap.html">QPixmap</a>, <a href="qmovie.html">QMovie</a> and <a href="guibooks.html#fowler">GUI Design Handbook: Label</a> +<p>Examples: + <a href="cursor-cursor-cpp.html#QLabel">cursor/cursor.cpp</a> + <a href="layout-layout-cpp.html#QLabel">layout/layout.cpp</a> + <a href="popup-popup-cpp.html#QLabel">popup/popup.cpp</a> + <a href="menu-menu-cpp.html#QLabel">menu/menu.cpp</a> + <a href="progress-progress-cpp.html#QLabel">progress/progress.cpp</a> + <a href="qmag-qmag-cpp.html#QLabel">qmag/qmag.cpp</a> + <a href="movies-main-cpp.html#QLabel">movies/main.cpp</a> + <a href="customlayout-main-cpp.html#QLabel">customlayout/main.cpp</a> + +<hr><h2>Member Function Documentation</h2> +<h3 class="fn"><a name="5514c7"></a>QLabel::QLabel ( <a href="qwidget.html">QWidget</a> * buddy, const <a href="qstring.html">QString</a> & text, <a href="qwidget.html">QWidget</a> * parent, const char * name=0, WFlags f=0 )</h3> +<p>Constructs a label with a text and a buddy. +<p>The <em>text</em> is set with <a href="#dffb43">setText</a>(). The <em>buddy</em> is set with <a href="#191701">setBuddy</a>(). +<p>The <em>parent, name</em> and <em>f</em> arguments are passed to the <a href="qframe.html">QFrame</a> +constructor. +<p>See also <a href="#dffb43">setText</a>(), <a href="#191701">setBuddy</a>(), <a href="#1f406e">setAlignment</a>(), <a href="qframe.html#c0d758">setFrameStyle</a>() and <a href="#ed9b8b">setIndent</a>(). +<h3 class="fn"><a name="39107d"></a>QLabel::QLabel ( <a href="qwidget.html">QWidget</a> * parent, const char * name=0, WFlags f=0 )</h3> +<p>Constructs an empty label. +<p>The <em>parent, name</em> and <em>f</em> arguments are passed to the <a href="qframe.html">QFrame</a> +constructor. +<p>See also <a href="#1f406e">setAlignment</a>(), <a href="qframe.html#c0d758">setFrameStyle</a>() and <a href="#ed9b8b">setIndent</a>(). +<h3 class="fn"><a name="2bafbb"></a>QLabel::QLabel ( const <a href="qstring.html">QString</a> & text, <a href="qwidget.html">QWidget</a> * parent, const char * name=0, WFlags f=0 )</h3> +<p>Constructs a label with a text. The <em>text</em> is set with <a href="#dffb43">setText</a>(). +<p>The <em>parent, name</em> and <em>f</em> arguments are passed to the <a href="qframe.html">QFrame</a> +constructor. +<p>See also <a href="#dffb43">setText</a>(), <a href="#1f406e">setAlignment</a>(), <a href="qframe.html#c0d758">setFrameStyle</a>() and <a href="#ed9b8b">setIndent</a>(). +<h3 class="fn"><a name="9958af"></a>QLabel::~QLabel ()</h3> +<p>Destructs the label. +<h3 class="fn">int <a name="2fcaa3"></a>QLabel::alignment () const</h3> +<p>Returns the alignment setting. +<p>See also <a href="#1f406e">setAlignment</a>(). +<h3 class="fn">bool <a name="75b2a1"></a>QLabel::autoResize () const</h3> +<p><b>This function is obsolete.</b> It is provided to keep old source working, and will probably be removed in a future version of Qt. We strongly advise against using it in new code.<p> +<p>Returns TRUE if auto-resizing is enabled, or FALSE if auto-resizing +is disabled. +<p>Auto-resizing is disabled by default. +<p>See also <a href="#c0e104">setAutoResize</a>(). +<h3 class="fn"><a href="qwidget.html">QWidget</a> * <a name="123954"></a>QLabel::buddy () const</h3> +<p>Returns the buddy of this label, or 0 if no buddy is currently set. +<p>See also <a href="#191701">setBuddy</a>(). +<h3 class="fn">void <a name="be73f3"></a>QLabel::clear () <code>[slot]</code></h3> +<p>Clears any label contents. Equivalent with <a href="#dffb43">setText</a>( "" ). +<h3 class="fn">void <a name="fac264"></a>QLabel::drawContents ( <a href="qpainter.html">QPainter</a> * p ) <code>[virtual protected]</code></h3> +<p>Draws the label contents using the painter <em>p.</em> +<p>Reimplemented from <a href="qframe.html#99e687">QFrame.</a> +<h3 class="fn">void <a name="479dd2"></a>QLabel::drawContentsMask ( <a href="qpainter.html">QPainter</a> * p ) <code>[virtual protected]</code></h3> +<p>Draws the label contents mask using the painter <em>p.</em> +Used only in transparent mode. +<p>See also <a href="qwidget.html#c7a335">QWidget::setAutoMask</a>();. +<p>Reimplemented from <a href="qframe.html#4cbf11">QFrame.</a> +<h3 class="fn">void <a name="0435a2"></a>QLabel::fontChange ( const <a href="qfont.html">QFont</a> & ) <code>[virtual protected]</code></h3> +<p>Reimplemented for internal reasons; the API is not affected. +<p>Reimplemented from <a href="qwidget.html#570a8f">QWidget.</a> +<h3 class="fn">bool <a name="7e1f73"></a>QLabel::hasScaledContents () const</h3> +<p>Returns whether the label will scale its contents to fill all +available space. +<p>See also <a href="#e9e3cf">setScaledContents</a>(). +<h3 class="fn">int <a name="dae451"></a>QLabel::heightForWidth ( int w ) const <code>[virtual]</code></h3> +<p>Reimplemented for internal reasons; the API is not affected. +<p>Reimplemented from <a href="qwidget.html#2e8476">QWidget.</a> +<h3 class="fn">int <a name="e3c907"></a>QLabel::indent () const</h3> +<p>Returns the indent of the label. +<p>See also <a href="#ed9b8b">setIndent</a>(). +<h3 class="fn"><a href="qsize.html">QSize</a> <a name="53c8c7"></a>QLabel::minimumSizeHint () const <code>[virtual]</code></h3> +<p>Reimplemented for internal reasons; the API is not affected. +<p>Reimplemented from <a href="qwidget.html#3f0fc2">QWidget.</a> +<h3 class="fn"><a href="qmovie.html">QMovie</a>* <a name="7dcdfe"></a>QLabel::movie () const</h3> +<p>If the label contains a movie, returns a pointer to it. Otherwise, +returns 0. +<p>See also <a href="#60de9f">setMovie</a>(). +<h3 class="fn"><a href="qpixmap.html">QPixmap</a> * <a name="101ecb"></a>QLabel::pixmap () const</h3> +<p>If the label contains a pixmap, returns a pointer to it. Otherwise, +returns 0. +<p>See also <a href="#f3f301">setPixmap</a>(). +<h3 class="fn">void <a name="3cb6e7"></a>QLabel::resizeEvent ( <a href="qresizeevent.html">QResizeEvent</a> * e ) <code>[virtual protected]</code></h3> +<p>Reimplemented for internal reasons; the API is not affected. +<p>Reimplemented from <a href="qwidget.html#28c156">QWidget.</a> +<h3 class="fn">void <a name="1f406e"></a>QLabel::setAlignment ( int alignment ) <code>[virtual]</code></h3> +<p>Sets the alignment of the label contents. +<p>The <em>alignment</em> must be a bitwise OR of <a href="qt.html#AlignmentFlags">Qt::AlignmentFlags</a> +values. The <code>WordBreak, ExpandTabs, SingleLine</code> and <code>ShowPrefix</code> flags apply only if the label contains a plain text, and +are otherwise ignored. The <code>DontClip</code> flag is always ignored. +<p>If the label has a buddy, the <code>ShowPrefix</code> flag is forced to TRUE. +<p>The default alignment is <code>AlignLeft | AlignVCenter | +ExpandTabs</code> if the label doesn't have a buddy and +<code>AlignLeft | AlignVCenter | ExpandTabs | ShowPrefix </code> if +the label has a buddy. +<p>See also <a href="qt.html#AlignmentFlags">Qt::AlignmentFlags</a>, <a href="#2fcaa3">alignment</a>(), <a href="#191701">setBuddy</a>() and <a href="#dffb43">setText</a>(). +<p>Examples: + <a href="cursor-cursor-cpp.html#setAlignment">cursor/cursor.cpp</a> + <a href="layout-layout-cpp.html#setAlignment">layout/layout.cpp</a> + <a href="popup-popup-cpp.html#setAlignment">popup/popup.cpp</a> + <a href="qmag-qmag-cpp.html#setAlignment">qmag/qmag.cpp</a> + <a href="customlayout-main-cpp.html#setAlignment">customlayout/main.cpp</a> +<h3 class="fn">void <a name="1b6d73"></a>QLabel::setAutoMask ( bool b ) <code>[virtual]</code></h3> +<p>Reimplemented for internal reasons; the API is not affected. +<p>Reimplemented from <a href="qwidget.html#c7a335">QWidget.</a> +<h3 class="fn">void <a name="c0e104"></a>QLabel::setAutoResize ( bool enable ) <code>[virtual]</code></h3> +<p><b>This function is obsolete.</b> It is provided to keep old source working, and will probably be removed in a future version of Qt. We strongly advise against using it in new code.<p> +Enables auto-resizing if <em>enable</em> is TRUE, or disables it if <em>enable</em> is FALSE. +<p>When auto-resizing is enabled, the label will resize itself to fit +the contents whenever the contents change. The top left corner is +not moved. This is useful for QLabel widgets that are not managed by +a <a href="qlayout.html">QLayout</a> (e.g. top-level widgets). +<p>Auto-resizing is disabled by default. +<p>See also <a href="#75b2a1">autoResize</a>(), <a href="qwidget.html#ab3108">adjustSize</a>() and <a href="#614dd5">sizeHint</a>(). +<h3 class="fn">void <a name="191701"></a>QLabel::setBuddy ( <a href="qwidget.html">QWidget</a> * buddy ) <code>[virtual]</code></h3> +<p>Sets the buddy of this label to <em>buddy.</em> +<p>When the user presses the accelerator key indicated by this label, +the keyboard focus is transferred to the label's buddy widget. +<p>The buddy mechanism is only available for QLabels that contain a +plain text in which one letter is prefixed with '&'. It is this +letter that is set as the accelerator key. The letter is displayed +underlined, and the '&' is not displayed (i.e. the <code>ShowPrefix</code> +alignment flag is turned on; see <a href="#1f406e">setAlignment</a>()). +<p>In a dialog, you might create two data entry widgets and a label for +each, and set up the geometry layout so each label is just to the +left of its data entry widget (its "buddy"), somewhat like this: +<p><pre> <a href="qlineedit.html">QLineEdit</a> *nameEd = new <a href="qlineedit.html">QLineEdit</a>( this ); + <a href="qlabel.html">QLabel</a> *nameLb = new <a href="qlabel.html">QLabel</a>( "&Name:", this ); + nameLb-><a href="#191701">setBuddy</a>( nameEd ); + <a href="qlineedit.html">QLineEdit</a> *phoneEd = new <a href="qlineedit.html">QLineEdit</a>( this ); + <a href="qlabel.html">QLabel</a> *phoneLb = new <a href="qlabel.html">QLabel</a>( "&Phone:", this ); + phoneLb-><a href="#191701">setBuddy</a>( phoneEd ); + // ( layout setup not shown ) +</pre> +<p>With the code above, the focus jumps to the Name field when the user +presses Alt-N, and to the Phone field when the user presses Alt-P. +<p>To unset a previously set buddy, call this function with <em>buddy</em> +set to 0. +<p>See also <a href="#123954">buddy</a>(), <a href="#dffb43">setText</a>(), <a href="qaccel.html">QAccel</a> and <a href="#1f406e">setAlignment</a>(). +<p>Examples: + <a href="layout-layout-cpp.html#setBuddy">layout/layout.cpp</a> +<h3 class="fn">void <a name="ed9b8b"></a>QLabel::setIndent ( int indent )</h3> +<p>Sets the indent of the label to <em>indent</em> pixels. +<p>The indent applies to the left edge if <a href="#2fcaa3">alignment</a>() is <code>AlignLeft,</code> +to the right edge if alignment() is <code>AlignRight,</code> to the top edge +if alignment() is <code>AlignTop,</code> and to to the bottom edge if +alignment() is <code>AlignBottom.</code> +<p>If <em>indent</em> is negative, or if no indent has been set, the label +computes the effective indent as follows: If <a href="qframe.html#e0ccef">frameWidth</a>() is 0, the +effective indent becomes 0. If frameWidth() is greater than 0, the +effective indent becomes half the width of the "x" character of the +widget's current <a href="qwidget.html#3a7237">font</a>(). +<p>If <em>indent</em> is non-negative, the effective indent is <em>indent</em> +pixels. +<p>See also <a href="#e3c907">indent</a>(), <a href="#1f406e">setAlignment</a>(), <a href="qframe.html#e0ccef">frameWidth</a>() and <a href="qwidget.html#3a7237">font</a>(). +<p>Examples: + <a href="movies-main-cpp.html#setIndent">movies/main.cpp</a> +<h3 class="fn">void <a name="60de9f"></a>QLabel::setMovie ( const <a href="qmovie.html">QMovie</a> & movie ) <code>[virtual slot]</code></h3> +<p>Sets the label contents to <em>movie.</em> Any previous content is cleared. +<p>The buddy accelerator, if any, is disabled. +<p>The label resizes itself if auto-resizing is enabled. +<p>See also <a href="#7dcdfe">movie</a>() and <a href="#191701">setBuddy</a>(). +<h3 class="fn">void <a name="1a8f6a"></a>QLabel::setNum ( double num ) <code>[virtual slot]</code></h3> +<p>Sets the label contents to a plain text containing the printed value +of <em>num.</em> Does nothing if this is equal to the current contents of +the label. Any previous content is cleared. +<p>The buddy accelerator, if any, is disabled. +<p>The label resizes itself if auto-resizing is enabled. +<p>See also <a href="#dffb43">setText</a>(), <a href="qstring.html#01d80b">QString::setNum</a>() and <a href="#191701">setBuddy</a>(). +<h3 class="fn">void <a name="301e3c"></a>QLabel::setNum ( int num ) <code>[virtual slot]</code></h3> +<p>Sets the label contents to a plain text containing the printed value +of <em>num.</em> Does nothing if this is equal to the current contents of +the label. Any previous content is cleared. +<p>The buddy accelerator, if any, is disabled. +<p>The label resizes itself if auto-resizing is enabled. +<p>See also <a href="#dffb43">setText</a>(), <a href="qstring.html#01d80b">QString::setNum</a>() and <a href="#191701">setBuddy</a>(). +<h3 class="fn">void <a name="f3f301"></a>QLabel::setPixmap ( const <a href="qpixmap.html">QPixmap</a> & pixmap ) <code>[virtual slot]</code></h3> +<p>Sets the label contents to <em>pixmap.</em> Any previous content is cleared. +<p>The buddy accelerator, if any, is disabled. +<p>The label resizes itself if auto-resizing is enabled. +<p>See also <a href="#101ecb">pixmap</a>() and <a href="#191701">setBuddy</a>(). +<h3 class="fn">void <a name="e9e3cf"></a>QLabel::setScaledContents ( bool enable )</h3> +<p>When called with <em>enable</em> == TRUE, and the label shows a pixmap, +it will scale the pixmap to fill available space. +<p>See also <a href="#7e1f73">hasScaledContents</a>(). +<h3 class="fn">void <a name="dffb43"></a>QLabel::setText ( const <a href="qstring.html">QString</a> & text ) <code>[virtual slot]</code></h3> +<p>Sets the label contents to <em>text,</em> or does nothing if <em>text</em> is +equal to the current contents of the label. Any previous content is +cleared. +<p><em>text</em> will be interpreted either as a plain text or as a rich +text, depending on the text format setting; see <a href="#5de3f9">setTextFormat</a>(). The +default setting is <code>AutoText,</code> i.e. QLabel will try to auto-detect +the format of <em>text.</em> +<p>If <em>text</em> is interpreted as a plain text, and a buddy has been set, +the buddy accelerator key is updated from the new text. +<p>The label resizes itself if auto-resizing is enabled. +<p>Note that Qlabel is well suited to display small rich text documents +only. For large documents, use <a href="qtextview.html">QTextView</a> instead. It will flicker +less on resize and can also provide a scrollbar if necessary. +<p>See also <a href="#72cf09">text</a>(), <a href="#5de3f9">setTextFormat</a>(), <a href="#191701">setBuddy</a>() and <a href="#1f406e">setAlignment</a>(). +<p>Examples: + <a href="cursor-cursor-cpp.html#setText">cursor/cursor.cpp</a> + <a href="layout-layout-cpp.html#setText">layout/layout.cpp</a> + <a href="popup-popup-cpp.html#setText">popup/popup.cpp</a> + <a href="qmag-qmag-cpp.html#setText">qmag/qmag.cpp</a> + <a href="customlayout-main-cpp.html#setText">customlayout/main.cpp</a> +<h3 class="fn">void <a name="5de3f9"></a>QLabel::setTextFormat ( <a href="qt.html#TextFormat">Qt::TextFormat</a> format )</h3> +<p>Sets the text format to <em>format.</em> See the <a href="qt.html#TextFormat">Qt::TextFormat</a> enum for +an explanation of the possible options. +<p>The default format is <code>AutoText.</code> +<p>See also <a href="#0b92ed">textFormat</a>() and <a href="#dffb43">setText</a>(). +<h3 class="fn"><a href="qsize.html">QSize</a> <a name="614dd5"></a>QLabel::sizeHint () const <code>[virtual]</code></h3> +<p>Reimplemented for internal reasons; the API is not affected. +<p>Examples: + <a href="layout-layout-cpp.html#sizeHint">layout/layout.cpp</a> +<p>Reimplemented from <a href="qwidget.html#290bcd">QWidget.</a> +<h3 class="fn"><a href="qsizepolicy.html">QSizePolicy</a> <a name="26e1d9"></a>QLabel::sizePolicy () const <code>[virtual]</code></h3> +<p>Reimplemented for internal reasons; the API is not affected. +<p>Reimplemented from <a href="qwidget.html#2d5d13">QWidget.</a> +<h3 class="fn"><a href="qstring.html">QString</a> <a name="72cf09"></a>QLabel::text () const</h3> +<p>Returns the label text. If the content is a plain or a rich text, +this is the string that was passed to <a href="#dffb43">setText</a>(). Otherwise, it is an +empty/null string. +<p>See also <a href="#dffb43">setText</a>(), <a href="#1a8f6a">setNum</a>() and <a href="#be73f3">clear</a>(). +<h3 class="fn">Qt::TextFormat <a name="0b92ed"></a>QLabel::textFormat() const</h3> +<p>Returns the current text format. +<p>See also <a href="#5de3f9">setTextFormat</a>(). +<hr><p> +Search the documentation, FAQ, qt-interest archive and more (uses +<a href="http://www.trolltech.com">www.trolltech.com</a>):<br> +<form method=post action="http://www.trolltech.com/search.cgi"> +<input type=hidden name="version" value="3.0.0-snapshot"><nobr> +<input size="50" name="search"><input type=submit value="Search"> +</nobr></form><hr><p> +This file is part of the <a href="index.html">Qt toolkit</a>, +copyright © 1995-2006 +<a href="http://www.trolltech.com">Trolltech</a>, all rights reserved.<p><address><hr><div align="center"> +<table width="100%" cellspacing="0" border="0"><tr> +<td>Copyright © 2006 Trolltech<td><a href="http://www.trolltech.com/trademarks.html">Trademarks</a> +<td align="right"><div align="right">Qt version 3.0.0-snapshot</div> +</table></div></address></body></html> diff --git a/examples/demo/textdrawing/filenew.png b/examples/demo/textdrawing/filenew.png Binary files differnew file mode 100644 index 0000000..be963bf --- /dev/null +++ b/examples/demo/textdrawing/filenew.png diff --git a/examples/demo/textdrawing/fileopen.png b/examples/demo/textdrawing/fileopen.png Binary files differnew file mode 100644 index 0000000..6077b81 --- /dev/null +++ b/examples/demo/textdrawing/fileopen.png diff --git a/examples/demo/textdrawing/filesave.png b/examples/demo/textdrawing/filesave.png Binary files differnew file mode 100644 index 0000000..a1cb03d --- /dev/null +++ b/examples/demo/textdrawing/filesave.png diff --git a/examples/demo/textdrawing/help.png b/examples/demo/textdrawing/help.png Binary files differnew file mode 100644 index 0000000..2ab2c25 --- /dev/null +++ b/examples/demo/textdrawing/help.png diff --git a/examples/demo/textdrawing/helpwindow.cpp b/examples/demo/textdrawing/helpwindow.cpp new file mode 100644 index 0000000..9fa0e7b --- /dev/null +++ b/examples/demo/textdrawing/helpwindow.cpp @@ -0,0 +1,337 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#include "helpwindow.h" +#include <qstatusbar.h> +#include <qpixmap.h> +#include <qpopupmenu.h> +#include <qmenubar.h> +#include <qtoolbar.h> +#include <qtoolbutton.h> +#include <qiconset.h> +#include <qfile.h> +#include <qtextstream.h> +#include <qstylesheet.h> +#include <qmessagebox.h> +#include <qfiledialog.h> +#include <qapplication.h> +#include <qcombobox.h> +#include <qevent.h> +#include <qlineedit.h> +#include <qobjectlist.h> +#include <qfileinfo.h> +#include <qfile.h> +#include <qdatastream.h> +#include <qprinter.h> +#include <qsimplerichtext.h> +#include <qpainter.h> +#include <qpaintdevicemetrics.h> + +#include <ctype.h> + +HelpWindow::HelpWindow( const QString& home_, const QString& _path, + QWidget* parent, const char *name ) + : QMainWindow( parent, name, WDestructiveClose ), + pathCombo( 0 ), selectedURL() +{ + readHistory(); + readBookmarks(); + + browser = new QTextBrowser( this ); + browser->mimeSourceFactory()->setFilePath( _path ); + browser->setFrameStyle( QFrame::Panel | QFrame::Sunken ); + connect( browser, SIGNAL( textChanged() ), + this, SLOT( textChanged() ) ); + + setCentralWidget( browser ); + + if ( !home_.isEmpty() ) + browser->setSource( home_ ); + + connect( browser, SIGNAL( highlighted( const QString&) ), + statusBar(), SLOT( message( const QString&)) ); + + resize( 640,700 ); + + QPopupMenu* file = new QPopupMenu( this ); + file->insertItem( tr("&New Window"), this, SLOT( newWindow() ), ALT | Key_N ); + file->insertItem( tr("&Open File"), this, SLOT( openFile() ), ALT | Key_O ); + file->insertItem( tr("&Print"), this, SLOT( print() ), ALT | Key_P ); + + // The same three icons are used twice each. + QIconSet icon_back( QPixmap("textdrawing/previous.png") ); + QIconSet icon_forward( QPixmap("textdrawing/next.png") ); + QIconSet icon_home( QPixmap("textdrawing/home.png") ); + + QPopupMenu* go = new QPopupMenu( this ); + backwardId = go->insertItem( icon_back, + tr("&Backward"), browser, SLOT( backward() ), + ALT | Key_Left ); + forwardId = go->insertItem( icon_forward, + tr("&Forward"), browser, SLOT( forward() ), + ALT | Key_Right ); + go->insertItem( icon_home, tr("&Home"), browser, SLOT( home() ) ); + + hist = new QPopupMenu( this ); + QStringList::Iterator it = history.begin(); + for ( ; it != history.end(); ++it ) + mHistory[ hist->insertItem( *it ) ] = *it; + connect( hist, SIGNAL( activated( int ) ), + this, SLOT( histChosen( int ) ) ); + + bookm = new QPopupMenu( this ); + bookm->insertItem( tr( "Add Bookmark" ), this, SLOT( addBookmark() ) ); + bookm->insertSeparator(); + + QStringList::Iterator it2 = bookmarks.begin(); + for ( ; it2 != bookmarks.end(); ++it2 ) + mBookmarks[ bookm->insertItem( *it2 ) ] = *it2; + connect( bookm, SIGNAL( activated( int ) ), + this, SLOT( bookmChosen( int ) ) ); + + menuBar()->insertItem( tr("&File"), file ); + menuBar()->insertItem( tr("&Go"), go ); + menuBar()->insertItem( tr( "History" ), hist ); + menuBar()->insertItem( tr( "Bookmarks" ), bookm ); + + menuBar()->setItemEnabled( forwardId, FALSE); + menuBar()->setItemEnabled( backwardId, FALSE); + connect( browser, SIGNAL( backwardAvailable( bool ) ), + this, SLOT( setBackwardAvailable( bool ) ) ); + connect( browser, SIGNAL( forwardAvailable( bool ) ), + this, SLOT( setForwardAvailable( bool ) ) ); + + + QToolBar* toolbar = new QToolBar( this ); + addToolBar( toolbar, "Toolbar"); + QToolButton* button; + + button = new QToolButton( icon_back, tr("Backward"), "", browser, SLOT(backward()), toolbar ); + connect( browser, SIGNAL( backwardAvailable(bool) ), button, SLOT( setEnabled(bool) ) ); + button->setEnabled( FALSE ); + button = new QToolButton( icon_forward, tr("Forward"), "", browser, SLOT(forward()), toolbar ); + connect( browser, SIGNAL( forwardAvailable(bool) ), button, SLOT( setEnabled(bool) ) ); + button->setEnabled( FALSE ); + button = new QToolButton( icon_home, tr("Home"), "", browser, SLOT(home()), toolbar ); + + toolbar->addSeparator(); + + pathCombo = new QComboBox( TRUE, toolbar ); + connect( pathCombo, SIGNAL( activated( const QString & ) ), + this, SLOT( pathSelected( const QString & ) ) ); + toolbar->setStretchableWidget( pathCombo ); + setRightJustification( TRUE ); + setDockEnabled( DockLeft, FALSE ); + setDockEnabled( DockRight, FALSE ); + + pathCombo->insertItem( home_ ); + + browser->setFocus(); +} + + +void HelpWindow::setBackwardAvailable( bool b) +{ + menuBar()->setItemEnabled( backwardId, b); +} + +void HelpWindow::setForwardAvailable( bool b) +{ + menuBar()->setItemEnabled( forwardId, b); +} + + +void HelpWindow::textChanged() +{ + if ( browser->documentTitle().isNull() ) + setCaption( browser->context() ); + else + setCaption( browser->documentTitle() ) ; + + selectedURL = caption(); + if ( !selectedURL.isEmpty() && pathCombo ) { + bool exists = FALSE; + int i; + for ( i = 0; i < pathCombo->count(); ++i ) { + if ( pathCombo->text( i ) == selectedURL ) { + exists = TRUE; + break; + } + } + if ( !exists ) { + pathCombo->insertItem( selectedURL, 0 ); + pathCombo->setCurrentItem( 0 ); + mHistory[ hist->insertItem( selectedURL ) ] = selectedURL; + } else + pathCombo->setCurrentItem( i ); + selectedURL = QString::null; + } +} + +HelpWindow::~HelpWindow() +{ + history.clear(); + QMap<int, QString>::Iterator it = mHistory.begin(); + for ( ; it != mHistory.end(); ++it ) + history.append( *it ); + + QFile f( QDir::currentDirPath() + "/.history" ); + f.open( IO_WriteOnly ); + QDataStream s( &f ); + s << history; + f.close(); + + bookmarks.clear(); + QMap<int, QString>::Iterator it2 = mBookmarks.begin(); + for ( ; it2 != mBookmarks.end(); ++it2 ) + bookmarks.append( *it2 ); + + QFile f2( QDir::currentDirPath() + "/.bookmarks" ); + f2.open( IO_WriteOnly ); + QDataStream s2( &f2 ); + s2 << bookmarks; + f2.close(); +} + +void HelpWindow::about() +{ + QMessageBox::about( this, "HelpViewer Example", + "<p>This example implements a simple HTML help viewer " + "using Qt's rich text capabilities</p>" + "<p>It's just about 100 lines of C++ code, so don't expect too much :-)</p>" + ); +} + + +void HelpWindow::aboutQt() +{ + QMessageBox::aboutQt( this, "QBrowser" ); +} + +void HelpWindow::openFile() +{ +#ifndef QT_NO_FILEDIALOG + QString fn = QFileDialog::getOpenFileName( QString::null, QString::null, this ); + if ( !fn.isEmpty() ) + browser->setSource( fn ); +#endif +} + +void HelpWindow::newWindow() +{ + ( new HelpWindow(browser->source(), "qbrowser") )->show(); +} + +void HelpWindow::print() +{ +#ifndef QT_NO_PRINTER + QPrinter printer; + printer.setFullPage(TRUE); + if ( printer.setup() ) { + QPainter p( &printer ); + QPaintDeviceMetrics metrics(p.device()); + int dpix = metrics.logicalDpiX(); + int dpiy = metrics.logicalDpiY(); + const int margin = 72; // pt + QRect body(margin*dpix/72, margin*dpiy/72, + metrics.width()-margin*dpix/72*2, + metrics.height()-margin*dpiy/72*2 ); + QFont font("times", 10); + QStringList filePaths = browser->mimeSourceFactory()->filePath(); + QString file; + QStringList::Iterator it = filePaths.begin(); + for ( ; it != filePaths.end(); ++it ) { + file = QUrl( *it, QUrl( browser->source() ).path() ).path(); + if ( QFile::exists( file ) ) + break; + else + file = QString::null; + } + if ( file.isEmpty() ) + return; + QFile f( file ); + if ( !f.open( IO_ReadOnly ) ) + return; + QTextStream ts( &f ); + QSimpleRichText richText( ts.read(), font, browser->context(), browser->styleSheet(), + browser->mimeSourceFactory(), body.height() ); + richText.setWidth( &p, body.width() ); + QRect view( body ); + int page = 1; + do { + richText.draw( &p, body.left(), body.top(), view, colorGroup() ); + view.moveBy( 0, body.height() ); + p.translate( 0 , -body.height() ); + p.setFont( font ); + p.drawText( view.right() - p.fontMetrics().width( QString::number(page) ), + view.bottom() + p.fontMetrics().ascent() + 5, QString::number(page) ); + if ( view.top() >= richText.height() ) + break; + printer.newPage(); + page++; + } while (TRUE); + } +#endif +} + +void HelpWindow::pathSelected( const QString &_path ) +{ + browser->setSource( _path ); + QMap<int, QString>::Iterator it = mHistory.begin(); + bool exists = FALSE; + for ( ; it != mHistory.end(); ++it ) { + if ( *it == _path ) { + exists = TRUE; + break; + } + } + if ( !exists ) + mHistory[ hist->insertItem( _path ) ] = _path; +} + +void HelpWindow::readHistory() +{ + if ( QFile::exists( QDir::currentDirPath() + "/.history" ) ) { + QFile f( QDir::currentDirPath() + "/.history" ); + f.open( IO_ReadOnly ); + QDataStream s( &f ); + s >> history; + f.close(); + while ( history.count() > 20 ) + history.remove( history.begin() ); + } +} + +void HelpWindow::readBookmarks() +{ + if ( QFile::exists( QDir::currentDirPath() + "/.bookmarks" ) ) { + QFile f( QDir::currentDirPath() + "/.bookmarks" ); + f.open( IO_ReadOnly ); + QDataStream s( &f ); + s >> bookmarks; + f.close(); + } +} + +void HelpWindow::histChosen( int i ) +{ + if ( mHistory.contains( i ) ) + browser->setSource( mHistory[ i ] ); +} + +void HelpWindow::bookmChosen( int i ) +{ + if ( mBookmarks.contains( i ) ) + browser->setSource( mBookmarks[ i ] ); +} + +void HelpWindow::addBookmark() +{ + mBookmarks[ bookm->insertItem( caption() ) ] = caption(); +} diff --git a/examples/demo/textdrawing/helpwindow.h b/examples/demo/textdrawing/helpwindow.h new file mode 100644 index 0000000..3427ad9 --- /dev/null +++ b/examples/demo/textdrawing/helpwindow.h @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#ifndef HELPWINDOW_H +#define HELPWINDOW_H + +#include <qmainwindow.h> +#include <qtextbrowser.h> +#include <qstringlist.h> +#include <qmap.h> +#include <qdir.h> + +class QComboBox; +class QPopupMenu; + +class HelpWindow : public QMainWindow +{ + Q_OBJECT +public: + HelpWindow( const QString& home_, const QString& path, QWidget* parent = 0, const char *name=0 ); + ~HelpWindow(); + +private slots: + void setBackwardAvailable( bool ); + void setForwardAvailable( bool ); + + void textChanged(); + void about(); + void aboutQt(); + void openFile(); + void newWindow(); + void print(); + + void pathSelected( const QString & ); + void histChosen( int ); + void bookmChosen( int ); + void addBookmark(); + +private: + void readHistory(); + void readBookmarks(); + + QTextBrowser* browser; + QComboBox *pathCombo; + int backwardId, forwardId; + QString selectedURL; + QStringList history, bookmarks; + QMap<int, QString> mHistory, mBookmarks; + QPopupMenu *hist, *bookm; + +}; + + + + + +#endif + diff --git a/examples/demo/textdrawing/home.png b/examples/demo/textdrawing/home.png Binary files differnew file mode 100644 index 0000000..aa150a3 --- /dev/null +++ b/examples/demo/textdrawing/home.png diff --git a/examples/demo/textdrawing/next.png b/examples/demo/textdrawing/next.png Binary files differnew file mode 100644 index 0000000..4b29ff4 --- /dev/null +++ b/examples/demo/textdrawing/next.png diff --git a/examples/demo/textdrawing/previous.png b/examples/demo/textdrawing/previous.png Binary files differnew file mode 100644 index 0000000..4e3556c --- /dev/null +++ b/examples/demo/textdrawing/previous.png diff --git a/examples/demo/textdrawing/print.png b/examples/demo/textdrawing/print.png Binary files differnew file mode 100644 index 0000000..57e3e53 --- /dev/null +++ b/examples/demo/textdrawing/print.png diff --git a/examples/demo/textdrawing/redo.png b/examples/demo/textdrawing/redo.png Binary files differnew file mode 100644 index 0000000..bae07d3 --- /dev/null +++ b/examples/demo/textdrawing/redo.png diff --git a/examples/demo/textdrawing/textbold.png b/examples/demo/textdrawing/textbold.png Binary files differnew file mode 100644 index 0000000..7b5be47 --- /dev/null +++ b/examples/demo/textdrawing/textbold.png diff --git a/examples/demo/textdrawing/textcenter.png b/examples/demo/textdrawing/textcenter.png Binary files differnew file mode 100644 index 0000000..5c68b09 --- /dev/null +++ b/examples/demo/textdrawing/textcenter.png diff --git a/examples/demo/textdrawing/textedit.cpp b/examples/demo/textdrawing/textedit.cpp new file mode 100644 index 0000000..9aebf54 --- /dev/null +++ b/examples/demo/textdrawing/textedit.cpp @@ -0,0 +1,477 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#include "textedit.h" + +#include <qtextedit.h> +#include <qaction.h> +#include <qmenubar.h> +#include <qpopupmenu.h> +#include <qtoolbar.h> +#include <qtabwidget.h> +#include <qapplication.h> +#include <qfontdatabase.h> +#include <qcombobox.h> +#include <qlineedit.h> +#include <qfileinfo.h> +#include <qfile.h> +#include <qfiledialog.h> +#include <qprinter.h> +#include <qpaintdevicemetrics.h> +#include <qsimplerichtext.h> +#include <qcolordialog.h> +#include <qpainter.h> + +TextEdit::TextEdit( QWidget *parent, const char *name ) + : QMainWindow( parent, name, 0 ) +{ + setupFileActions(); + setupEditActions(); + setupTextActions(); + + tabWidget = new QTabWidget( this ); + connect( tabWidget, SIGNAL( currentChanged( QWidget * ) ), + this, SLOT( editorChanged( QWidget * ) ) ); + setCentralWidget( tabWidget ); +} + +void TextEdit::setupFileActions() +{ + QToolBar *tb = new QToolBar( this ); + QPopupMenu *menu = new QPopupMenu( this ); + menuBar()->insertItem( tr( "&File" ), menu ); + + QAction *a; + a = new QAction( tr( "New" ), QPixmap( "textdrawing/filenew.png" ), tr( "&New..." ), CTRL + Key_N, this, "fileNew" ); + connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) ); + a->addTo( tb ); + a->addTo( menu ); + a = new QAction( tr( "Open" ), QPixmap( "textdrawing/fileopen.png" ), tr( "&Open..." ), CTRL + Key_O, this, "fileOpen" ); + connect( a, SIGNAL( activated() ), this, SLOT( fileOpen() ) ); + a->addTo( tb ); + a->addTo( menu ); + menu->insertSeparator(); + a = new QAction( tr( "Save" ), QPixmap( "textdrawing/filesave.png" ), tr( "&Save..." ), CTRL + Key_S, this, "fileSave" ); + connect( a, SIGNAL( activated() ), this, SLOT( fileSave() ) ); + a->addTo( tb ); + a->addTo( menu ); + a = new QAction( tr( "Save As" ), QPixmap(), tr( "Save &As..." ), 0, this, "fileSaveAs" ); + connect( a, SIGNAL( activated() ), this, SLOT( fileSaveAs() ) ); + a->addTo( menu ); + menu->insertSeparator(); + a = new QAction( tr( "Print" ), QPixmap( "textdrawing/print.png" ), tr( "&Print..." ), CTRL + Key_P, this, "filePrint" ); + connect( a, SIGNAL( activated() ), this, SLOT( filePrint() ) ); + a->addTo( tb ); + a->addTo( menu ); + a = new QAction( tr( "Close" ), QPixmap(), tr( "&Close" ), 0, this, "fileClose" ); + connect( a, SIGNAL( activated() ), this, SLOT( fileClose() ) ); + a->addTo( menu ); +} + +void TextEdit::setupEditActions() +{ + QToolBar *tb = new QToolBar( this ); + QPopupMenu *menu = new QPopupMenu( this ); + menuBar()->insertItem( tr( "&Edit" ), menu ); + + QAction *a; + a = new QAction( tr( "Undo" ), QPixmap( "textdrawing/undo.png" ), tr( "&Undo" ), CTRL + Key_Z, this, "editUndo" ); + connect( a, SIGNAL( activated() ), this, SLOT( editUndo() ) ); + a->addTo( tb ); + a->addTo( menu ); + a = new QAction( tr( "Redo" ), QPixmap( "textdrawing/redo.png" ), tr( "&Redo" ), CTRL + Key_Y, this, "editRedo" ); + connect( a, SIGNAL( activated() ), this, SLOT( editRedo() ) ); + a->addTo( tb ); + a->addTo( menu ); + menu->insertSeparator(); + a = new QAction( tr( "Cut" ), QPixmap( "textdrawing/editcut.png" ), tr( "&Cut" ), CTRL + Key_X, this, "editCut" ); + connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) ); + a->addTo( tb ); + a->addTo( menu ); + a = new QAction( tr( "Copy" ), QPixmap( "textdrawing/editcopy.png" ), tr( "C&opy" ), CTRL + Key_C, this, "editCopy" ); + connect( a, SIGNAL( activated() ), this, SLOT( editCopy() ) ); + a->addTo( tb ); + a->addTo( menu ); + a = new QAction( tr( "Paste" ), QPixmap( "textdrawing/editpaste.png" ), tr( "&Paste" ), CTRL + Key_V, this, "editPaste" ); + connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) ); + a->addTo( tb ); + a->addTo( menu ); +} + +void TextEdit::setupTextActions() +{ + QToolBar *tb = new QToolBar( this ); + QPopupMenu *menu = new QPopupMenu( this ); + menuBar()->insertItem( tr( "For&mat" ), menu ); + + comboStyle = new QComboBox( FALSE, tb ); + comboStyle->insertItem( tr("Standard") ); + comboStyle->insertItem( tr("Bullet List (Disc)") ); + comboStyle->insertItem( tr("Bullet List (Circle)") ); + comboStyle->insertItem( tr("Bullet List (Square)") ); + comboStyle->insertItem( tr("Ordered List (Decimal)") ); + comboStyle->insertItem( tr("Ordered List (Alpha lower)") ); + comboStyle->insertItem( tr("Ordered List (Alpha upper)") ); + connect( comboStyle, SIGNAL( activated( int ) ), + this, SLOT( textStyle( int ) ) ); + + comboFont = new QComboBox( TRUE, tb ); + QFontDatabase db; + comboFont->insertStringList( db.families() ); + connect( comboFont, SIGNAL( activated( const QString & ) ), + this, SLOT( textFamily( const QString & ) ) ); + comboFont->lineEdit()->setText( QApplication::font().family() ); + + comboSize = new QComboBox( TRUE, tb ); + QValueList<int> sizes = db.standardSizes(); + QValueList<int>::Iterator it = sizes.begin(); + for ( ; it != sizes.end(); ++it ) + comboSize->insertItem( QString::number( *it ) ); + connect( comboSize, SIGNAL( activated( const QString & ) ), + this, SLOT( textSize( const QString & ) ) ); + comboSize->lineEdit()->setText( QString::number( QApplication::font().pointSize() ) ); + + actionTextBold = new QAction( tr( "Bold" ), QPixmap( "textdrawing/textbold.png" ), tr( "&Bold" ), CTRL + Key_B, this, "textBold" ); + connect( actionTextBold, SIGNAL( activated() ), this, SLOT( textBold() ) ); + actionTextBold->addTo( tb ); + actionTextBold->addTo( menu ); + actionTextBold->setToggleAction( TRUE ); + actionTextItalic = new QAction( tr( "Italic" ), QPixmap( "textdrawing/textitalic.png" ), tr( "&Italic" ), CTRL + Key_I, this, "textItalic" ); + connect( actionTextItalic, SIGNAL( activated() ), this, SLOT( textItalic() ) ); + actionTextItalic->addTo( tb ); + actionTextItalic->addTo( menu ); + actionTextItalic->setToggleAction( TRUE ); + actionTextUnderline = new QAction( tr( "Underline" ), QPixmap( "textdrawing/textunderline.png" ), tr( "&Underline" ), CTRL + Key_U, this, "textUnderline" ); + connect( actionTextUnderline, SIGNAL( activated() ), this, SLOT( textUnderline() ) ); + actionTextUnderline->addTo( tb ); + actionTextUnderline->addTo( menu ); + actionTextUnderline->setToggleAction( TRUE ); + menu->insertSeparator(); + + QActionGroup *grp = new QActionGroup( this ); + grp->setExclusive( TRUE ); + connect( grp, SIGNAL( selected( QAction* ) ), this, SLOT( textAlign( QAction* ) ) ); + + actionAlignLeft = new QAction( tr( "Left" ), QPixmap( "textdrawing/textleft.png" ), tr( "&Left" ), CTRL + Key_L, grp, "textLeft" ); + actionAlignLeft->addTo( tb ); + actionAlignLeft->addTo( menu ); + actionAlignLeft->setToggleAction( TRUE ); + actionAlignCenter = new QAction( tr( "Center" ), QPixmap( "textdrawing/textcenter.png" ), tr( "C&enter" ), CTRL + Key_M, grp, "textCenter" ); + actionAlignCenter->addTo( tb ); + actionAlignCenter->addTo( menu ); + actionAlignCenter->setToggleAction( TRUE ); + actionAlignRight = new QAction( tr( "Right" ), QPixmap( "textdrawing/textright.png" ), tr( "&Right" ), CTRL + Key_R, grp, "textRight" ); + actionAlignRight->addTo( tb ); + actionAlignRight->addTo( menu ); + actionAlignRight->setToggleAction( TRUE ); + actionAlignJustify = new QAction( tr( "Justify" ), QPixmap( "textdrawing/textjustify.png" ), tr( "&Justify" ), CTRL + Key_J, grp, "textjustify" ); + actionAlignJustify->addTo( tb ); + actionAlignJustify->addTo( menu ); + actionAlignJustify->setToggleAction( TRUE ); + + menu->insertSeparator(); + + QPixmap pix( 16, 16 ); + pix.fill( black ); + actionTextColor = new QAction( tr( "Color" ), pix, tr( "&Color..." ), 0, this, "textColor" ); + connect( actionTextColor, SIGNAL( activated() ), this, SLOT( textColor() ) ); + actionTextColor->addTo( tb ); + actionTextColor->addTo( menu ); +} + +void TextEdit::load( const QString &f ) +{ + if ( !QFile::exists( f ) ) + return; + QTextEdit *edit = new QTextEdit( tabWidget ); + doConnections( edit ); + tabWidget->addTab( edit, QFileInfo( f ).fileName() ); + + QFile fl( f ); + fl.open( IO_ReadOnly ); + QByteArray array = fl.readAll(); + array.resize( array.size() +1 ); + array[ (int)array.size() - 1 ] = '\0'; + QString text = ( f.find( "bidi.txt" ) != -1 ? QString::fromUtf8( array.data() ) : QString::fromLatin1( array.data() ) ); + edit->setText( text ); + + edit->viewport()->setFocus(); + edit->setTextFormat( Qt::RichText ); +} + +QTextEdit *TextEdit::currentEditor() const +{ + if ( tabWidget->currentPage() && + tabWidget->currentPage()->inherits( "QTextEdit" ) ) + return (QTextEdit*)tabWidget->currentPage(); + return 0; +} + +void TextEdit::doConnections( QTextEdit *e ) +{ + connect( e, SIGNAL( currentFontChanged( const QFont & ) ), + this, SLOT( fontChanged( const QFont & ) ) ); + connect( e, SIGNAL( currentColorChanged( const QColor & ) ), + this, SLOT( colorChanged( const QColor & ) ) ); + connect( e, SIGNAL( currentAlignmentChanged( int ) ), + this, SLOT( alignmentChanged( int ) ) ); +} + +void TextEdit::fileNew() +{ + QTextEdit *edit = new QTextEdit( tabWidget ); + doConnections( edit ); + tabWidget->addTab( edit, tr( "noname" ) ); + tabWidget->showPage( edit ); + edit->viewport()->setFocus(); +} + +void TextEdit::fileOpen() +{ + QString fn = QFileDialog::getOpenFileName( QString::null, tr( "HTML-Files (*.htm *.html);;All Files (*)" ), this ); + if ( !fn.isEmpty() ) + load( fn ); +} + +void TextEdit::fileSave() +{ + if ( !currentEditor() ) + return; + QString fn; + if ( filenames.find( currentEditor() ) == filenames.end() ) { + fileSaveAs(); + } else { + QFile file( *filenames.find( currentEditor() ) ); + if ( !file.open( IO_WriteOnly ) ) + return; + QTextStream ts( &file ); + ts << currentEditor()->text(); + } +} + +void TextEdit::fileSaveAs() +{ + if ( !currentEditor() ) + return; + QString fn = QFileDialog::getSaveFileName( QString::null, tr( "HTML-Files (*.htm *.html);;All Files (*)" ), this ); + if ( !fn.isEmpty() ) { + filenames.replace( currentEditor(), fn ); + fileSave(); + tabWidget->setTabLabel( currentEditor(), QFileInfo( fn ).fileName() ); + } +} + +void TextEdit::filePrint() +{ + if ( !currentEditor() ) + return; +#ifndef QT_NO_PRINTER + QPrinter printer; + printer.setFullPage(TRUE); + QPaintDeviceMetrics screen( this ); + printer.setResolution( screen.logicalDpiY() ); + if ( printer.setup( this ) ) { + QPainter p( &printer ); + QPaintDeviceMetrics metrics( p.device() ); + int dpix = metrics.logicalDpiX(); + int dpiy = metrics.logicalDpiY(); + const int margin = 72; // pt + QRect body( margin * dpix / 72, margin * dpiy / 72, + metrics.width() - margin * dpix / 72 * 2, + metrics.height() - margin * dpiy / 72 * 2 ); + QFont font( "times", 10 ); + QSimpleRichText richText( currentEditor()->text(), font, currentEditor()->context(), currentEditor()->styleSheet(), + currentEditor()->mimeSourceFactory(), body.height() ); + richText.setWidth( &p, body.width() ); + QRect view( body ); + int page = 1; + do { + richText.draw( &p, body.left(), body.top(), view, colorGroup() ); + view.moveBy( 0, body.height() ); + p.translate( 0 , -body.height() ); + p.setFont( font ); + p.drawText( view.right() - p.fontMetrics().width( QString::number( page ) ), + view.bottom() + p.fontMetrics().ascent() + 5, QString::number( page ) ); + if ( view.top() >= richText.height() ) + break; + printer.newPage(); + page++; + } while (TRUE); + } +#endif +} + +void TextEdit::fileClose() +{ + delete currentEditor(); + if ( currentEditor() ) + currentEditor()->viewport()->setFocus(); +} + +void TextEdit::fileExit() +{ + qApp->quit(); +} + +void TextEdit::editUndo() +{ + if ( !currentEditor() ) + return; + currentEditor()->undo(); +} + +void TextEdit::editRedo() +{ + if ( !currentEditor() ) + return; + currentEditor()->redo(); +} + +void TextEdit::editCut() +{ + if ( !currentEditor() ) + return; + currentEditor()->cut(); +} + +void TextEdit::editCopy() +{ + if ( !currentEditor() ) + return; + currentEditor()->copy(); +} + +void TextEdit::editPaste() +{ + if ( !currentEditor() ) + return; + currentEditor()->paste(); +} + +void TextEdit::textBold() +{ + if ( !currentEditor() ) + return; + currentEditor()->setBold( actionTextBold->isOn() ); +} + +void TextEdit::textUnderline() +{ + if ( !currentEditor() ) + return; + currentEditor()->setUnderline( actionTextUnderline->isOn() ); +} + +void TextEdit::textItalic() +{ + if ( !currentEditor() ) + return; + currentEditor()->setItalic( actionTextItalic->isOn() ); +} + +void TextEdit::textFamily( const QString &f ) +{ + if ( !currentEditor() ) + return; + currentEditor()->setFamily( f ); + currentEditor()->viewport()->setFocus(); +} + +void TextEdit::textSize( const QString &p ) +{ + if ( !currentEditor() ) + return; + currentEditor()->setPointSize( p.toInt() ); + currentEditor()->viewport()->setFocus(); +} + +void TextEdit::textStyle( int i ) +{ + if ( !currentEditor() ) + return; + if ( i == 0 ) + currentEditor()->setParagType( QStyleSheetItem::DisplayBlock, QStyleSheetItem::ListDisc ); + else if ( i == 1 ) + currentEditor()->setParagType( QStyleSheetItem::DisplayListItem, QStyleSheetItem::ListDisc ); + else if ( i == 2 ) + currentEditor()->setParagType( QStyleSheetItem::DisplayListItem, QStyleSheetItem::ListCircle ); + else if ( i == 3 ) + currentEditor()->setParagType( QStyleSheetItem::DisplayListItem, QStyleSheetItem::ListSquare ); + else if ( i == 4 ) + currentEditor()->setParagType( QStyleSheetItem::DisplayListItem, QStyleSheetItem::ListDecimal ); + else if ( i == 5 ) + currentEditor()->setParagType( QStyleSheetItem::DisplayListItem, QStyleSheetItem::ListLowerAlpha ); + else if ( i == 6 ) + currentEditor()->setParagType( QStyleSheetItem::DisplayListItem, QStyleSheetItem::ListUpperAlpha ); + currentEditor()->viewport()->setFocus(); +} + +void TextEdit::textColor() +{ + if ( !currentEditor() ) + return; + QColor col = QColorDialog::getColor( currentEditor()->color(), this ); + if ( !col.isValid() ) + return; + currentEditor()->setColor( col ); + QPixmap pix( 16, 16 ); + pix.fill( col ); + actionTextColor->setIconSet( pix ); +} + +void TextEdit::textAlign( QAction *a ) +{ + if ( !currentEditor() ) + return; + if ( a == actionAlignLeft ) + currentEditor()->setAlignment( AlignLeft ); + else if ( a == actionAlignCenter ) + currentEditor()->setAlignment( AlignHCenter ); + else if ( a == actionAlignRight ) + currentEditor()->setAlignment( AlignRight ); + else if ( a == actionAlignJustify ) + currentEditor()->setAlignment( AlignJustify ); +} + +void TextEdit::fontChanged( const QFont &f ) +{ + comboFont->lineEdit()->setText( f.family() ); + comboSize->lineEdit()->setText( QString::number( f.pointSize() ) ); + actionTextBold->setOn( f.bold() ); + actionTextItalic->setOn( f.italic() ); + actionTextUnderline->setOn( f.underline() ); +} + +void TextEdit::colorChanged( const QColor &c ) +{ + QPixmap pix( 16, 16 ); + pix.fill( c ); + actionTextColor->setIconSet( pix ); +} + +void TextEdit::alignmentChanged( int a ) +{ + if ( ( a == AlignAuto ) || ( a & AlignLeft )) + actionAlignLeft->setOn( TRUE ); + else if ( ( a & AlignHCenter ) ) + actionAlignCenter->setOn( TRUE ); + else if ( ( a & AlignRight ) ) + actionAlignRight->setOn( TRUE ); + else if ( ( a & AlignJustify ) ) + actionAlignJustify->setOn( TRUE ); +} + +void TextEdit::editorChanged( QWidget * ) +{ + if ( !currentEditor() ) + return; + fontChanged( currentEditor()->font() ); + colorChanged( currentEditor()->color() ); + alignmentChanged( currentEditor()->alignment() ); +} diff --git a/examples/demo/textdrawing/textedit.h b/examples/demo/textdrawing/textedit.h new file mode 100644 index 0000000..b1c3d95 --- /dev/null +++ b/examples/demo/textdrawing/textedit.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#ifndef TEXTEDIT_H +#define TEXTEDIT_H + +#include <qmainwindow.h> +#include <qmap.h> + +class QAction; +class QComboBox; +class QTabWidget; +class QTextEdit; + +class TextEdit : public QMainWindow +{ + Q_OBJECT + +public: + TextEdit( QWidget *parent = 0, const char *name = 0 ); + + QTextEdit *currentEditor() const; + void load( const QString &f ); + + +public slots: + void fileNew(); + void fileOpen(); + void fileSave(); + void fileSaveAs(); + void filePrint(); + void fileClose(); + void fileExit(); + + void editUndo(); + void editRedo(); + void editCut(); + void editCopy(); + void editPaste(); + + void textBold(); + void textUnderline(); + void textItalic(); + void textFamily( const QString &f ); + void textSize( const QString &p ); + void textStyle( int s ); + void textColor(); + void textAlign( QAction *a ); + + void fontChanged( const QFont &f ); + void colorChanged( const QColor &c ); + void alignmentChanged( int a ); + void editorChanged( QWidget * ); + + +private: + void setupFileActions(); + void setupEditActions(); + void setupTextActions(); + void doConnections( QTextEdit *e ); + + QAction *actionTextBold, + *actionTextUnderline, + *actionTextItalic, + *actionTextColor, + *actionAlignLeft, + *actionAlignCenter, + *actionAlignRight, + *actionAlignJustify; + QComboBox *comboStyle, + *comboFont, + *comboSize; + QTabWidget *tabWidget; + QMap<QTextEdit*, QString> filenames; + +}; + + +#endif diff --git a/examples/demo/textdrawing/textitalic.png b/examples/demo/textdrawing/textitalic.png Binary files differnew file mode 100644 index 0000000..68e2b44 --- /dev/null +++ b/examples/demo/textdrawing/textitalic.png diff --git a/examples/demo/textdrawing/textjustify.png b/examples/demo/textdrawing/textjustify.png Binary files differnew file mode 100644 index 0000000..1c6e5b9 --- /dev/null +++ b/examples/demo/textdrawing/textjustify.png diff --git a/examples/demo/textdrawing/textleft.png b/examples/demo/textdrawing/textleft.png Binary files differnew file mode 100644 index 0000000..30b0501 --- /dev/null +++ b/examples/demo/textdrawing/textleft.png diff --git a/examples/demo/textdrawing/textright.png b/examples/demo/textdrawing/textright.png Binary files differnew file mode 100644 index 0000000..73f1cad --- /dev/null +++ b/examples/demo/textdrawing/textright.png diff --git a/examples/demo/textdrawing/textunderline.png b/examples/demo/textdrawing/textunderline.png Binary files differnew file mode 100644 index 0000000..3477ccb --- /dev/null +++ b/examples/demo/textdrawing/textunderline.png diff --git a/examples/demo/textdrawing/undo.png b/examples/demo/textdrawing/undo.png Binary files differnew file mode 100644 index 0000000..d5b6c16 --- /dev/null +++ b/examples/demo/textdrawing/undo.png diff --git a/examples/demo/translations/demo_ar.qm b/examples/demo/translations/demo_ar.qm Binary files differnew file mode 100644 index 0000000..fa1da47 --- /dev/null +++ b/examples/demo/translations/demo_ar.qm diff --git a/examples/demo/translations/demo_ar.ts b/examples/demo/translations/demo_ar.ts new file mode 100644 index 0000000..abe42ad --- /dev/null +++ b/examples/demo/translations/demo_ar.ts @@ -0,0 +1,1492 @@ +<!DOCTYPE TS><TS> +<context> + <name>BookForm</name> + <message> + <source>Book</source> + <translation type="obsolete">كتاب</translation> + </message> + <message> + <source>Surname</source> + <translation type="obsolete">لقب</translation> + </message> + <message> + <source>surname</source> + <translation type="obsolete">لقب</translation> + </message> + <message> + <source>Forename</source> + <translation type="obsolete">إسم</translation> + </message> + <message> + <source>forename</source> + <translation type="obsolete">إسم</translation> + </message> + <message> + <source>surname ASC</source> + <translation type="obsolete">لقب</translation> + </message> + <message> + <source>forename ASC</source> + <translation type="obsolete">إسم</translation> + </message> + <message> + <source>(default)</source> + <translation type="obsolete">(Ø¥ÙØªØ±Ø§Ø¶ÙŠ)</translation> + </message> + <message> + <source>author</source> + <translation type="obsolete">مؤلّÙ</translation> + </message> + <message> + <source>Title</source> + <translation type="obsolete">عنوان</translation> + </message> + <message> + <source>title</source> + <translation type="obsolete">عنوان</translation> + </message> + <message> + <source>Price</source> + <translation type="obsolete">سعر</translation> + </message> + <message> + <source>price</source> + <translation type="obsolete">سعر</translation> + </message> + <message> + <source>Notes</source> + <translation type="obsolete">Ù…Ù„Ø§ØØ¸Ø§Øª</translation> + </message> + <message> + <source>notes</source> + <translation type="obsolete">Ù…Ù„Ø§ØØ¸Ø§Øª</translation> + </message> + <message> + <source>title ASC</source> + <translation type="obsolete">عنوان</translation> + </message> + <message> + <source>book</source> + <translation type="obsolete">كتاب</translation> + </message> + <message> + <source>&Connect...</source> + <translation type="obsolete">&وصل...</translation> + </message> + <message> + <source>&Edit Books</source> + <translation type="obsolete">ت&ØØ±ÙŠØ± الكتب</translation> + </message> +</context> +<context> + <name>ConnectDialog</name> + <message> + <source>Connect...</source> + <translation>وصل...</translation> + </message> + <message> + <source>Connection settings</source> + <translation>إعدادات الوصل</translation> + </message> + <message> + <source>Database Name:</source> + <translation>إسم قاعدة البيانات:</translation> + </message> + <message> + <source>&Username:</source> + <translation>إسم المست&عمل:</translation> + </message> + <message> + <source>&Password:</source> + <translation>&كلمة السّر:</translation> + </message> + <message> + <source>&Hostname:</source> + <translation>إسم الم&ضيÙ:</translation> + </message> + <message> + <source>P&ort:</source> + <translation>Ù…&Ù†ÙØ°:</translation> + </message> + <message> + <source>Default</source> + <translation>Ø¥ÙØªØ±Ø§Ø¶ÙŠ</translation> + </message> + <message> + <source>D&river</source> + <translation>&قائد</translation> + </message> + <message> + <source>&OK</source> + <translation>&مواÙقة</translation> + </message> + <message> + <source>&Cancel</source> + <translation>Ø¥&لغاء</translation> + </message> +</context> +<context> + <name>DnDDemo</name> + <message> + <source>copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Copy</source> + <translation type="unfinished">نسخ</translation> + </message> + <message> + <source>cut</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Cut</source> + <translation type="unfinished">قصّ</translation> + </message> + <message> + <source>paste</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Paste</source> + <translation type="unfinished">تلصيق</translation> + </message> + <message> + <source>raise</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Raise</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>lower</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Lower</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>new</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>New</source> + <translation type="unfinished">جديد</translation> + </message> + <message> + <source>load</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Load</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>save</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Save</source> + <translation type="unfinished">ØÙظ</translation> + </message> + <message> + <source>undo</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Undo</source> + <translation type="unfinished">تراجع</translation> + </message> + <message> + <source>redo</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Redo</source> + <translation type="unfinished">إعادة</translation> + </message> + <message> + <source>delete</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Delete</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>help</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Help</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>home</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished">منزل</translation> + </message> + <message> + <source>Actions</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>DnDDemoBase</name> + <message> + <source>Form1</source> + <translation>استمارة1</translation> + </message> +</context> +<context> + <name>EditBookForm</name> + <message> + <source>Edit Books</source> + <translation type="obsolete">ØªØØ±ÙŠØ± الكتب</translation> + </message> + <message> + <source>title ASC</source> + <translation type="obsolete">عنوان</translation> + </message> + <message> + <source>(default)</source> + <translation type="obsolete">(Ø¥ÙØªØ±Ø§Ø¶ÙŠ)</translation> + </message> + <message> + <source>book</source> + <translation type="obsolete">كتاب</translation> + </message> + <message> + <source>Price</source> + <translation type="obsolete">سعر</translation> + </message> + <message> + <source>Title</source> + <translation type="obsolete">عنوان</translation> + </message> + <message> + <source>title</source> + <translation type="obsolete">عنوان</translation> + </message> + <message> + <source>price</source> + <translation type="obsolete">سعر</translation> + </message> + <message> + <source>&Insert</source> + <translation type="obsolete">Ø¥&دراج</translation> + </message> + <message> + <source>&Update</source> + <translation type="obsolete">ØªØØ¯&يث</translation> + </message> + <message> + <source>&Delete</source> + <translation type="obsolete">&ØØ°Ù</translation> + </message> + <message> + <source>&Close</source> + <translation type="obsolete">Ø¥&غلاق</translation> + </message> + <message> + <source>|< &First</source> + <translation type="obsolete">|< ال&أوّل</translation> + </message> + <message> + <source><< &Prev</source> + <translation type="obsolete"><< ال&سّابق</translation> + </message> + <message> + <source>&Next >></source> + <translation type="obsolete">ال&تّالي >></translation> + </message> + <message> + <source>&Last >|</source> + <translation type="obsolete">الأ&خير >|</translation> + </message> + <message> + <source>Author</source> + <translation type="obsolete">مؤلّÙ</translation> + </message> + <message> + <source>author_view</source> + <translation type="obsolete">منظر المؤلّÙ</translation> + </message> + <message> + <source>name</source> + <translation type="obsolete">إسم</translation> + </message> +</context> +<context> + <name>FigureEditor</name> + <message> + <source>Drag the nodes around!</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>Frame</name> + <message> + <source>Qt Demo Collection</source> + <translation>مجموعة عرض Qt</translation> + </message> + <message> + <source>&Exit</source> + <translation>&خروج</translation> + </message> + <message> + <source>Ctrl+Q</source> + <translation>تØÙƒÙ‘Ù…+Q</translation> + </message> + <message> + <source>&File</source> + <translation>&ملÙÙ‘</translation> + </message> + <message> + <source>St&yle</source> + <translation>&طراز</translation> + </message> + <message> + <source>Demo Categories</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Widgets</source> + <translation type="unfinished">ويدجت</translation> + </message> + <message> + <source>Drag and Drop</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>SQL Explorer</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Graph Drawing</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Display</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>3D Demo</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Fractal landscape</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>OpenGL info</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Richtext Editor</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Help Browser</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Internationalization</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Asteroids</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>GLLandscape</name> + <message> + <source>Wireframe</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Flat shaded</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Smooth shaded</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Landscape</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>GLLandscapeViewer</name> + <message> + <source>Qt/OpenGL example</source> + <translation>مثال عن Qt/OpenGL</translation> + </message> + <message> + <source>X-rotation</source> + <translation>دوران سيني</translation> + </message> + <message> + <source>Y-rotation</source> + <translation>دوران صادي</translation> + </message> + <message> + <source>Z-rotation</source> + <translation>دوران عيني</translation> + </message> + <message> + <source>Rendering mode</source> + <translation>نمط الارجاع</translation> + </message> + <message> + <source>&Wireframe</source> + <translation>ع&لبة التّوصيلات</translation> + </message> + <message> + <source>Fl&at shaded</source> + <translation>تظليل Ù…&ستوي</translation> + </message> + <message> + <source>&Smooth shaded</source> + <translation>تظليل Ø£&ملس</translation> + </message> + <message> + <source>&Landscape</source> + <translation>Ù…&نظر</translation> + </message> + <message> + <source>&Fractalize</source> + <translation>&كسر</translation> + </message> + <message> + <source>&Reset grid</source> + <translation>Ø¥&عادة وضع الشّبكة</translation> + </message> + <message> + <source>&Animate</source> + <translation>ت&ØØ±ÙŠÙƒ</translation> + </message> + <message> + <source>Zoom</source> + <translation>تكبير</translation> + </message> + <message> + <source>Size</source> + <translation>ØØ¬Ù…</translation> + </message> +</context> +<context> + <name>GLWorkspace</name> + <message> + <source>&Scene</source> + <translation>Ù…&شهد</translation> + </message> + <message> + <source>&New</source> + <translation>&جديد</translation> + </message> + <message> + <source>New</source> + <translation>جديد</translation> + </message> + <message> + <source>Wirebox</source> + <translation>علبة التّوصيلات</translation> + </message> + <message> + <source>&Wirebox</source> + <translation>ع&لبة التّوصيلات</translation> + </message> + <message> + <source>Gear</source> + <translation>ترس</translation> + </message> + <message> + <source>&Gears</source> + <translation>ت&روس</translation> + </message> + <message> + <source>Texture</source> + <translation>ØØ¨ÙƒØ©</translation> + </message> + <message> + <source>&Texture</source> + <translation>&ØØ¨ÙƒØ©</translation> + </message> + <message> + <source>&Print</source> + <translation>&طبع</translation> + </message> + <message> + <source>Print</source> + <translation>طبع</translation> + </message> + <message> + <source>Window Size</source> + <translation>ØØ¬Ù… Ø§Ù„Ù†Ù‘Ø§ÙØ°Ø©</translation> + </message> + <message> + <source>&Window Size</source> + <translation>ØØ¬Ù… ال&Ù†Ù‘Ø§ÙØ°Ø©</translation> + </message> + <message> + <source>Low Resolution</source> + <translation>تمييز Ù…Ù†Ø®ÙØ¶</translation> + </message> + <message> + <source>&Low Resolution</source> + <translation>تمييز من&Ø®ÙØ¶</translation> + </message> + <message> + <source>Medium Resolution</source> + <translation>تمييز متوسّط</translation> + </message> + <message> + <source>&Medium Resolution</source> + <translation>تمييز مت&وسّط</translation> + </message> + <message> + <source>High Resolution</source> + <translation>تمييز عالي</translation> + </message> + <message> + <source>&High Resolution</source> + <translation>تمييز &عالي</translation> + </message> + <message> + <source>Setup</source> + <translation>إعداد</translation> + </message> + <message> + <source>&Setup...</source> + <translation>إع&داد...</translation> + </message> + <message> + <source>Close</source> + <translation>إغلاق</translation> + </message> + <message> + <source>&Close</source> + <translation>Ø¥&غلاق</translation> + </message> + <message> + <source>WireBox</source> + <translation type="obsolete">علبة التّوصيلات</translation> + </message> + <message> + <source>Nurbs</source> + <translation>نرب</translation> + </message> +</context> +<context> + <name>HelpWindow</name> + <message> + <source>&New Window</source> + <translation>Ù†Ø§ÙØ°Ø© &جديدة</translation> + </message> + <message> + <source>&Open File</source> + <translation>&ÙØªØ ملÙÙ‘</translation> + </message> + <message> + <source>&Print</source> + <translation>&طبع</translation> + </message> + <message> + <source>&Backward</source> + <translation>لل&وراء</translation> + </message> + <message> + <source>&Forward</source> + <translation>لل&أمام</translation> + </message> + <message> + <source>&Home</source> + <translation>Ù…&نزل</translation> + </message> + <message> + <source>Add Bookmark</source> + <translation>Ø¥Ø¶Ø§ÙØ© مؤشّر</translation> + </message> + <message> + <source>&File</source> + <translation>&ملÙÙ‘</translation> + </message> + <message> + <source>&Go</source> + <translation>Ø¥&ذهب</translation> + </message> + <message> + <source>History</source> + <translation>تاريخ</translation> + </message> + <message> + <source>Bookmarks</source> + <translation>مؤشّرات</translation> + </message> + <message> + <source>Backward</source> + <translation>للوراء</translation> + </message> + <message> + <source>Forward</source> + <translation>للأمام</translation> + </message> + <message> + <source>Home</source> + <translation>منزل</translation> + </message> +</context> +<context> + <name>I18nDemo</name> + <message> + <source>Close the current window.</source> + <translation>إغلاق Ø§Ù„Ù†Ù‘Ø§ÙØ°Ø© الجارية.</translation> + </message> + <message> + <source>Close</source> + <translation>إغلاق</translation> + </message> + <message> + <source>Close all opened windows.</source> + <translation>إغلاق جميع Ø§Ù„Ù†Ù‘ÙˆØ§ÙØ° Ø§Ù„Ù…ÙØªÙˆØØ©.</translation> + </message> + <message> + <source>Close All</source> + <translation>إغلاق الجميع</translation> + </message> + <message> + <source>Tile opened windows.</source> + <translation>تطويب Ø§Ù„Ù†Ù‘ÙˆØ§ÙØ° Ø§Ù„Ù…ÙØªÙˆØØ©.</translation> + </message> + <message> + <source>Tile</source> + <translation>تطويب</translation> + </message> + <message> + <source>Cascade opened windows.</source> + <translation>تشليل Ø§Ù„Ù†Ù‘ÙˆØ§ÙØ° Ø§Ù„Ù…ÙØªÙˆØØ©.</translation> + </message> + <message> + <source>Cascade</source> + <translation>تشليل</translation> + </message> + <message> + <source>--language--</source> + <translation>--اللّغة--</translation> + </message> + <message> + <source><h3>About Qt</h3><p>This program uses Qt version %1, a multiplatform C++ GUI toolkit from Trolltech. Qt provides single-source portability across Windows 95/98/NT/2000, Linux, Solaris, HP-UX and many other versions of Unix with X11.</p><p>See <tt>http://www.trolltech.com/qt/</tt> for more information.</p></source> + <translation type="obsolete"><h3>ØÙˆÙ„ Qt</h3><p>هذا البرنامج يستعمل Qt إصدار %1ØŒ طقم أدوات C++ لتطوير البرامج البيانية على جميع المنصّات من شركة ترولتك. Qt توÙّر إمكانية ØÙ…Ù„ Ù†ÙØ³ المصدر إلى ويندوز95\98\NT\2000 ØŒ لينكس، سولاريس، HP-UX Ùˆ العديد من الإصدارات الأخرى ليونيكس مع X11. أنظر <tt>http://www.trolltech.com/qt/</tt> للمزيد من المعلومات.</p></translation> + </message> + <message> + <source>&New</source> + <translation type="unfinished">&جديد</translation> + </message> + <message> + <source>&Window</source> + <translation type="unfinished"></translation> + </message> + <message> + <source><h3>About Qt</h3><p>This program uses Qt version %1, a multiplatform C++ GUI toolkit from Trolltech. Qt provides single-source portability across Windows 95/98/NT/2000, Mac OS X, Linux, Solaris, HP-UX and many other versions of Unix with X11.</p><p>See <tt>http://www.trolltech.com/qt/</tt> for more information.</p></source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>KAstTopLevel</name> + <message> + <source>Score</source> + <translation>ØØ§ØµÙ„</translation> + </message> + <message> + <source>Level</source> + <translation>مستوى</translation> + </message> + <message> + <source>Ships</source> + <translation>مركبات</translation> + </message> + <message> + <source>Fuel</source> + <translation>وقود</translation> + </message> + <message> + <source>Press N to start playing</source> + <translation>إضغط على N لبدأ اللّعب</translation> + </message> + <message> + <source>Ship Destroyed. Press L to launch.</source> + <translation>دمّرت المركبة، إضغط على L للإطلاق.</translation> + </message> + <message> + <source>Game Over!</source> + <translation>انتهت اللّعبة!</translation> + </message> +</context> +<context> + <name>KAsteroidsView</name> + <message> + <source>QCanvas demo</source> + <translation>عرض QCanvas</translation> + </message> + <message> + <source>This game has been implemented using the QCanvas class. +The QCanvas class is not part of the Professional Edition. Please +contact Trolltech if you want to upgrade to the Enterprise Edition.</source> + <translation>تمّ إنجاز هذه اللّعبة باستعمال ÙØµÙŠÙ„Ø© QCanvas. +ÙØµÙŠÙ„Ø© QCanvas ليست جزء من Ø§Ù„ØªÙ‘ØØ±ÙŠØ±Ø© Ø§Ù„Ø§ØØªØ±Ø§Ùية. ØªÙØ¶Ù‘Ù„ +بالإتّصال بترولتك إن أردت التّرÙيع إلى ØªØØ±ÙŠØ±Ø© الشّركات.</translation> + </message> + <message> + <source>Error: Cannot read sprite images</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>PrintPreview</name> + <message> + <source>Print Preview</source> + <translation>مراجعة الطّبع</translation> + </message> + <message> + <source>Preview</source> + <translation>مراجعة</translation> + </message> + <message> + <source>TextLabel1</source> + <translation>علامة النّص 1</translation> + </message> + <message> + <source>Modify</source> + <translation>تعديل</translation> + </message> + <message> + <source>&Invert Colors</source> + <translation>&عكس الألوان</translation> + </message> + <message> + <source>&Mirror</source> + <translation>Ù…&رآة</translation> + </message> + <message> + <source>&Flip</source> + <translation>&قلب</translation> + </message> + <message encoding="UTF-8"> + <source>Rotate 90° &left</source> + <translation>دوران ب 90° للي&سار</translation> + </message> + <message encoding="UTF-8"> + <source>Rotate 90° &right</source> + <translation>دوران ب 90° للي&مين</translation> + </message> + <message> + <source>&Help</source> + <translation>مساع&دة</translation> + </message> + <message> + <source>&Print</source> + <translation>&طبع</translation> + </message> + <message> + <source>&Discard</source> + <translation>&نبذ</translation> + </message> +</context> +<context> + <name>SqlEx</name> + <message> + <source>Form1</source> + <translation>استمارة1</translation> + </message> + <message> + <source>Tables</source> + <translation>جداول</translation> + </message> + <message> + <source>Type</source> + <translation>طراز</translation> + </message> + <message> + <source>Required</source> + <translation>مطلوب</translation> + </message> + <message> + <source>SQL Query</source> + <translation>استÙهام SQL</translation> + </message> + <message> + <source>&Submit</source> + <translation>&بعث</translation> + </message> + <message> + <source>C&lear</source> + <translation>&Ù…ØÙˆ</translation> + </message> + <message> + <source>Press "Connect" to open a database</source> + <translation>إضغط على "وصل" Ù„ÙØªØ قاعدة بيانات</translation> + </message> + <message> + <source>&Connect...</source> + <translation>&وصل...</translation> + </message> +</context> +<context> + <name>TextEdit</name> + <message> + <source>&File</source> + <translation>&ملÙÙ‘</translation> + </message> + <message> + <source>New</source> + <translation>جديد</translation> + </message> + <message> + <source>&New...</source> + <translation>&جديد...</translation> + </message> + <message> + <source>Open</source> + <translation>ÙØªØ</translation> + </message> + <message> + <source>&Open...</source> + <translation>&ÙØªØ...</translation> + </message> + <message> + <source>Save</source> + <translation>ØÙظ</translation> + </message> + <message> + <source>&Save...</source> + <translation>ØÙ&ظ...</translation> + </message> + <message> + <source>Save As</source> + <translation>ØÙظ ØªØØª</translation> + </message> + <message> + <source>Save &As...</source> + <translation>ØÙظ &ØªØØª...</translation> + </message> + <message> + <source>Print</source> + <translation>طبع</translation> + </message> + <message> + <source>&Print...</source> + <translation>طب&ع...</translation> + </message> + <message> + <source>Close</source> + <translation>إغلاق</translation> + </message> + <message> + <source>&Close</source> + <translation>Ø¥&غلاق</translation> + </message> + <message> + <source>&Edit</source> + <translation>ت&ØØ±ÙŠØ±</translation> + </message> + <message> + <source>Undo</source> + <translation>تراجع</translation> + </message> + <message> + <source>&Undo</source> + <translation>&تراجع</translation> + </message> + <message> + <source>Redo</source> + <translation>إعادة</translation> + </message> + <message> + <source>&Redo</source> + <translation>إعا&دة</translation> + </message> + <message> + <source>Cut</source> + <translation>قصّ</translation> + </message> + <message> + <source>&Cut</source> + <translation>&قصّ</translation> + </message> + <message> + <source>Copy</source> + <translation>نسخ</translation> + </message> + <message> + <source>C&opy</source> + <translation>&نسخ</translation> + </message> + <message> + <source>Paste</source> + <translation>تلصيق</translation> + </message> + <message> + <source>&Paste</source> + <translation>ت&لصيق</translation> + </message> + <message> + <source>For&mat</source> + <translation>&طراز</translation> + </message> + <message> + <source>Standard</source> + <translation>قياسي</translation> + </message> + <message> + <source>Bullet List (Disc)</source> + <translation>قائمة مطّية (قرص)</translation> + </message> + <message> + <source>Bullet List (Circle)</source> + <translation>قائمة مطّية (دائرة)</translation> + </message> + <message> + <source>Bullet List (Square)</source> + <translation>قائمة مطّية (مربّع)</translation> + </message> + <message> + <source>Ordered List (Decimal)</source> + <translation>قائمة مرتّبة (عشرية)</translation> + </message> + <message> + <source>Ordered List (Alpha lower)</source> + <translation>قائمة مرتّبة (Ø£Ù„Ù Ù„Ù„ØªØØª)</translation> + </message> + <message> + <source>Ordered List (Alpha upper)</source> + <translation>قائمة مرتّبة (أل٠للÙوق)</translation> + </message> + <message> + <source>Bold</source> + <translation>بيّن</translation> + </message> + <message> + <source>&Bold</source> + <translation>&بيّن</translation> + </message> + <message> + <source>Italic</source> + <translation>مائل</translation> + </message> + <message> + <source>&Italic</source> + <translation>ما&ئل</translation> + </message> + <message> + <source>Underline</source> + <translation>تسطير</translation> + </message> + <message> + <source>&Underline</source> + <translation>تسطي&ر</translation> + </message> + <message> + <source>Left</source> + <translation>يسار</translation> + </message> + <message> + <source>&Left</source> + <translation>ÙŠ&سار</translation> + </message> + <message> + <source>Center</source> + <translation>توسيط</translation> + </message> + <message> + <source>C&enter</source> + <translation>ت&وسيط</translation> + </message> + <message> + <source>Right</source> + <translation>يمين</translation> + </message> + <message> + <source>&Right</source> + <translation>&يمين</translation> + </message> + <message> + <source>Justify</source> + <translation>ضبط الهامش</translation> + </message> + <message> + <source>&Justify</source> + <translation>ضبط ال&هامش</translation> + </message> + <message> + <source>Color</source> + <translation>لون</translation> + </message> + <message> + <source>&Color...</source> + <translation>&لون...</translation> + </message> + <message> + <source>noname</source> + <translation>دون إسم</translation> + </message> + <message> + <source>HTML-Files (*.htm *.html);;All Files (*)</source> + <translation>ملÙّات (html htm);;جميع الملÙّات (*)</translation> + </message> +</context> +<context> + <name>WidgetsBase</name> + <message> + <source>Widgets</source> + <translation>ويدجت</translation> + </message> + <message> + <source>Applix</source> + <translation>أبليكس</translation> + </message> + <message> + <source>Binary</source> + <translation>ثنائي</translation> + </message> + <message> + <source>Core</source> + <translation>نواة</translation> + </message> + <message> + <source>Deb</source> + <translation>Deb</translation> + </message> + <message> + <source>Document</source> + <translation>وثيقة</translation> + </message> + <message> + <source>Pdf</source> + <translation>Pdf</translation> + </message> + <message> + <source>Readme</source> + <translation>إقرأني</translation> + </message> + <message> + <source>Shellscript</source> + <translation>سلسلة البرنامج الوسيطي</translation> + </message> + <message> + <source>Recycled</source> + <translation>مسترجع</translation> + </message> + <message> + <source>Video</source> + <translation>Ùيديو</translation> + </message> + <message> + <source><p><h1><b><font size="5" >Richtext </h1> +</p><p>Qt supports formatted rich text, such as the heading above, <i><font >emphasized</font></i>, <b><font >bold </font></b>and <u><font >underlined </font></u>text, as well as colored text. This is <font color="#ff0000" >red</font>, while this is <font color="#00bb00" >green</font>, and this is <font color="#0000ff" >blue</font>. </p> +<> </> +</source> + <translation type="obsolete"><p><h1><b><font size="5" >نصّ غنيّ</h1> +</p><p>Qt تدعم النّصوص الغنيّة المقاسة، كالعنوان Ø§Ù„Ø¢Ù†ÙØŒ النّصوص <i><font >المائلة</font></i>ØŒ <b><font >البيّنة </font></b>Ùˆ <u><font >المسطّرة</font></u>ØŒ كما تدعم النّصوص الملوّنة كذلك. هذا <font color="#ff0000" >Ø£ØÙ…ر</font>ØŒ بينما هذا <font color="#00bb00" >أخضر</font>ØŒ Ùˆ هذا <font color="#0000ff" >أزرق</font>. +</p> +<> </></translation> + </message> + <message> + <source>Iconview</source> + <translation>منظر بالإيقونات</translation> + </message> + <message> + <source>Item 1</source> + <translation>البند 1</translation> + </message> + <message> + <source>Item 2</source> + <translation>البند 2</translation> + </message> + <message> + <source>Item 3</source> + <translation>البند 3</translation> + </message> + <message> + <source>Item 4</source> + <translation>البند 4</translation> + </message> + <message> + <source>Item 5</source> + <translation>البند 5</translation> + </message> + <message> + <source>Item 6</source> + <translation>البند 6</translation> + </message> + <message> + <source>Item 7</source> + <translation>البند 7</translation> + </message> + <message> + <source>Item 8</source> + <translation>البند 8</translation> + </message> + <message> + <source>Item 9</source> + <translation>البند 9</translation> + </message> + <message> + <source>Item 10</source> + <translation>البند 10</translation> + </message> + <message> + <source>Item 11</source> + <translation>البند 11</translation> + </message> + <message> + <source>Item 12</source> + <translation>البند 12</translation> + </message> + <message> + <source>Item 13</source> + <translation>البند 13</translation> + </message> + <message> + <source>Item 14</source> + <translation>البند 14</translation> + </message> + <message> + <source>Item 15</source> + <translation>البند 15</translation> + </message> + <message> + <source>Item 16</source> + <translation>البند 16</translation> + </message> + <message> + <source>Item 17</source> + <translation>البند 17</translation> + </message> + <message> + <source>Table</source> + <translation>جدول</translation> + </message> + <message> + <source>Tables</source> + <translation>جداول</translation> + </message> + <message> + <source>are</source> + <translation>تكون</translation> + </message> + <message> + <source>easy</source> + <translation>سهل</translation> + </message> + <message> + <source>with</source> + <translation>مع</translation> + </message> + <message> + <source>Qt</source> + <translation>Qt</translation> + </message> + <message> + <source>6</source> + <translation type="obsolete">6</translation> + </message> + <message> + <source>7</source> + <translation type="obsolete">7</translation> + </message> + <message> + <source>8</source> + <translation type="obsolete">8</translation> + </message> + <message> + <source>9</source> + <translation type="obsolete">9</translation> + </message> + <message> + <source>10</source> + <translation type="obsolete">10</translation> + </message> + <message> + <source>11</source> + <translation type="obsolete">11</translation> + </message> + <message> + <source>12</source> + <translation type="obsolete">12</translation> + </message> + <message> + <source>4</source> + <translation type="obsolete">4</translation> + </message> + <message> + <source>5</source> + <translation type="obsolete">5</translation> + </message> + <message> + <source>13</source> + <translation type="obsolete">13</translation> + </message> + <message> + <source>Listview</source> + <translation>منظر بالقائمة</translation> + </message> + <message> + <source>Things</source> + <translation>أشياء</translation> + </message> + <message> + <source>Text</source> + <translation>نصّ</translation> + </message> + <message> + <source>Stuff</source> + <translation>ØØ§Ø¬Ø©</translation> + </message> + <message> + <source>Airbrush</source> + <translation>ÙØ±Ø´Ø§Ø© هوائية</translation> + </message> + <message> + <source>What stuff?</source> + <translation>أيّ ØØ§Ø¬Ø©ØŸ</translation> + </message> + <message> + <source>Eraser</source> + <translation>Ù…Ù…ØØ§Ø©</translation> + </message> + <message> + <source>Here?</source> + <translation>هنا؟</translation> + </message> + <message> + <source>Pixmap item</source> + <translation>بند لخريطة عناصر الصّورة</translation> + </message> + <message> + <source>Nothing</source> + <translation>لا شيء</translation> + </message> + <message> + <source>Nothing Again</source> + <translation>لا شيء مجدّدا</translation> + </message> + <message> + <source>Pixmap subitem 1</source> + <translation>بند ØªØØªÙŠ Ù„Ø®Ø±ÙŠØ·Ø© عناصر الصّورة 1</translation> + </message> + <message> + <source>Subitem</source> + <translation>بند ØªØØªÙŠ</translation> + </message> + <message> + <source>Pixmap subitem 2 </source> + <translation>بند ØªØØªÙŠ Ù„Ø®Ø±ÙŠØ·Ø© عناصر الصّورة 2</translation> + </message> + <message> + <source>Group box</source> + <translation>علبة المجموعة</translation> + </message> + <message> + <source>Pick a base color:</source> + <translation>اختر لونا قاعديّا:</translation> + </message> + <message> + <source>&Reset colors</source> + <translation>Ø¥&عادة وضع الألوان</translation> + </message> + <message> + <source>pale green</source> + <translation>أخضر Ø´Ø§ØØ¨</translation> + </message> + <message> + <source>deep sky blue</source> + <translation>أزرق سماوي عميق</translation> + </message> + <message> + <source>steel blue</source> + <translation>أزرق Ùولاذي</translation> + </message> + <message> + <source>powder blue</source> + <translation>أزرق مسØÙˆÙ‚ÙŠ</translation> + </message> + <message> + <source>sandy brown</source> + <translation>بنّي رملي</translation> + </message> + <message> + <source>dark orange</source> + <translation>برتقالي داكن</translation> + </message> + <message> + <source>indian red</source> + <translation>Ø£ØÙ…ر هندي</translation> + </message> + <message> + <source>hot pink</source> + <translation>وردي ØØ§Ø±Ù‘</translation> + </message> + <message> + <source>Enter a color name and hit return:</source> + <translation>أدخل إسم لون Ùˆ إظغط على عودة:</translation> + </message> + <message> + <source>Color test area</source> + <translation>منطقة تجربة اللّون</translation> + </message> + <message> + <source>Check boxes</source> + <translation>علب Ø§Ù„ÙØØµ</translation> + </message> + <message> + <source>Apples</source> + <translation>تÙّاØ</translation> + </message> + <message> + <source>Banana</source> + <translation>موزة</translation> + </message> + <message> + <source>Orange</source> + <translation>برتقالي</translation> + </message> + <message> + <source>Radio buttons</source> + <translation>أزرار إذاعية</translation> + </message> + <message> + <source>Sprite</source> + <translation>شبØ</translation> + </message> + <message> + <source>Farris</source> + <translation>ÙØ§Ø±ÙŠØ³</translation> + </message> + <message> + <source>Solo</source> + <translation>ÙˆØÙŠØ¯</translation> + </message> + <message> + <source>Date/Time editors</source> + <translation>Ø§Ù„Ù…ØØ±Ù‘رات تاريخ\زمن</translation> + </message> + <message> + <source>DateTime string goes here!</source> + <translation>السّلسلة تاريخ\زمن تأتي هنا!</translation> + </message> + <message> + <source><h1><b><font size="4" >Richtext </h1> +<p>Qt supports formatted rich text, such as the heading above, <i><font >emphasized</font></i>, <b><font >bold </font></b>and <u><font >underlined </font></u>text, as well as colored text. This is <font color="#ff0000" >red</font>, while this is <font color="#00bb00" >green</font>, and this is <font color="#0000ff" >blue</font>. </p> +<> </> +</source> + <translation type="obsolete"><p><h1><b><font size="4" >نصّ غنيّ</h1> +</p><p>Qt تدعم النّصوص الغنيّة المقاسة، كالعنوان Ø§Ù„Ø¢Ù†ÙØŒ النّصوص <i><font >المائلة</font></i>ØŒ <b><font >البيّنة </font></b>Ùˆ <u><font >المسطّرة</font></u>ØŒ كما تدعم النّصوص الملوّنة كذلك. هذا <font color="#ff0000" >Ø£ØÙ…ر</font>ØŒ بينما هذا <font color="#00bb00" >أخضر</font>ØŒ Ùˆ هذا <font color="#0000ff" >أزرق</font>. +</p> +<> </></translation> + </message> + <message> + <source>Check Boxes</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Apple</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Cherry</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Radio Buttons</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Whisky</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Wine</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Water</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Date/Time Editors</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Group Box</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Enter a color and hit return:</source> + <translation type="unfinished"></translation> + </message> + <message> + <source><html><head><meta name="qrichtext" content="1" /></head><body style="font-size:8pt;font-family:MS Shell Dlg"> +<p style="margin-top:16px"><span style="font-size:12pt;font-weight:600">Rich Text</span></p> +<p>Qt supports rich text. This is <span style="font-style:italic">italics</span>, this is <span style="font-weight:600">bold</span>, this is <span style="text-decoration:underline">underlined</span>, this is <span style="color:#ff0000">red</span>, this is <span style="color:#00ff00">green</span>, and this is <span style="color:#0000ff">blue</span>.</p> +</body></html> +</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Icon View</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>List View</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Comment</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Standard paint tool</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Inbox</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>143 messages</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>(5 new)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Local</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Draft #1</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Server</source> + <translation type="unfinished"></translation> + </message> + <message> + <source><html><head><meta name="qrichtext" content="1" /></head><body style="font-size:8pt;font-family:MS Shell Dlg"> +<p style="margin-top:18px"><span style="font-size:9pt;font-weight:600">Richtext </span></p> +<p>Qt supports formatted rich text, such as the heading above, <span style="font-style:italic">emphasized</span>, <span style="font-weight:600">bold </span>and <span style="text-decoration:underline">underlined </span>text, as well as colored text. This is <span style="color:#ff0000">red</span>, while this is <span style="color:#00bb00">green</span>, and this is <span style="color:#0000ff">blue</span>. </p> +</body></html> +</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/examples/demo/translations/demo_de.qm b/examples/demo/translations/demo_de.qm Binary files differnew file mode 100644 index 0000000..bc1d3d8 --- /dev/null +++ b/examples/demo/translations/demo_de.qm diff --git a/examples/demo/translations/demo_de.ts b/examples/demo/translations/demo_de.ts new file mode 100644 index 0000000..f4ecc2c --- /dev/null +++ b/examples/demo/translations/demo_de.ts @@ -0,0 +1,1183 @@ +<!DOCTYPE TS><TS> +<context encoding="UTF-8"> + <name>BookForm</name> + <message encoding="UTF-8"> + <source>Book</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Surname</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>surname</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Forename</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>forename</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>surname ASC</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>forename ASC</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>(default)</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>author</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Title</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>title</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Price</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>price</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Notes</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>notes</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>title ASC</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>book</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Connect...</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Edit Books</source> + <translation type="unfinished"></translation> + </message> +</context> +<context encoding="UTF-8"> + <name>ConnectDialog</name> + <message encoding="UTF-8"> + <source>Connect...</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Connection settings</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Database Name:</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Username:</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Password:</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Hostname:</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>P&ort:</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Default</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>D&river</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&OK</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Cancel</source> + <translation type="unfinished"></translation> + </message> +</context> +<context encoding="UTF-8"> + <name>DnDDemoBase</name> + <message encoding="UTF-8"> + <source>Form1</source> + <translation type="unfinished"></translation> + </message> +</context> +<context encoding="UTF-8"> + <name>EditBookForm</name> + <message encoding="UTF-8"> + <source>Edit Books</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>title ASC</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>(default)</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>book</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Price</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Title</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>title</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>price</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Insert</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Update</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Delete</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Close</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>|< &First</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source><< &Prev</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Next >></source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Last >|</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Author</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>author_view</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>name</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>Frame</name> + <message> + <source>Qt Demo Collection</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Exit</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Ctrl+Q</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&File</source> + <translation>&Datei</translation> + </message> + <message> + <source>St&yle</source> + <translation>St&yle</translation> + </message> +</context> +<context encoding="UTF-8"> + <name>GLLandscapeViewer</name> + <message encoding="UTF-8"> + <source>Qt/OpenGL example</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>X-rotation</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Y-rotation</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Z-rotation</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Rendering mode</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Wireframe</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Fl&at shaded</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Smooth shaded</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Landscape</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Fractalize</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Reset grid</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Animate</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Zoom</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Size</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>GLWorkspace</name> + <message> + <source>&Scene</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&New</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>New</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Wirebox</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Wirebox</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Gear</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Gears</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Texture</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Texture</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Print</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Print</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Window Size</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Window Size</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Low Resolution</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Low Resolution</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Medium Resolution</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Medium Resolution</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>High Resolution</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&High Resolution</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Setup</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Setup...</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Close</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Close</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>WireBox</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Nurbs</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>HelpWindow</name> + <message> + <source>&New Window</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Open File</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Print</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Backward</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Forward</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Home</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Add Bookmark</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&File</source> + <translation type="unfinished">&Datei</translation> + </message> + <message> + <source>&Go</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>History</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Bookmarks</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Backward</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Forward</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>I18nDemo</name> + <message> + <source>Close the current window.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Close</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Close all opened windows.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Close All</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Tile opened windows.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Tile</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Cascade opened windows.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Cascade</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>--language--</source> + <translation type="unfinished"></translation> + </message> + <message> + <source><h3>About Qt</h3><p>This program uses Qt version %1, a multiplatform C++ GUI toolkit from Trolltech. Qt provides single-source portability across Windows 95/98/NT/2000, Linux, Solaris, HP-UX and many other versions of Unix with X11.</p><p>See <tt>http://www.trolltech.com/qt/</tt> for more information.</p></source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>KAstTopLevel</name> + <message> + <source>Score</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Level</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Ships</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Fuel</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Press N to start playing</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Ship Destroyed. Press L to launch.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Game Over!</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>KAsteroidsView</name> + <message> + <source>QCanvas demo</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This game has been implemented using the QCanvas class. +The QCanvas class is not part of the Professional Edition. Please +contact Trolltech if you want to upgrade to the Enterprise Edition.</source> + <translation type="unfinished"></translation> + </message> +</context> +<context encoding="UTF-8"> + <name>PrintPreview</name> + <message encoding="UTF-8"> + <source>Print Preview</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Preview</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>TextLabel1</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Modify</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Invert Colors</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Mirror</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Flip</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Rotate 90° &left</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Rotate 90° &right</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Help</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Print</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Discard</source> + <translation type="unfinished"></translation> + </message> +</context> +<context encoding="UTF-8"> + <name>SqlEx</name> + <message encoding="UTF-8"> + <source>Form1</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Tables</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Type</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Required</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>SQL Query</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Submit</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>C&lear</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Press "Connect" to open a database</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Connect...</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TextEdit</name> + <message> + <source>&File</source> + <translation type="unfinished">&Datei</translation> + </message> + <message> + <source>New</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&New...</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Open</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Open...</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Save</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Save...</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Save As</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Save &As...</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Print</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Print...</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Close</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Close</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Edit</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Undo</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Undo</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Redo</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Redo</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Cut</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Cut</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>C&opy</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Paste</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>For&mat</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Standard</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Bullet List (Disc)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Bullet List (Circle)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Bullet List (Square)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Ordered List (Decimal)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Ordered List (Alpha lower)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Ordered List (Alpha upper)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Bold</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Bold</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Italic</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Italic</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Underline</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Underline</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Left</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Left</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Center</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>C&enter</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Right</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Right</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Justify</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Justify</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Color</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Color...</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>noname</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>HTML-Files (*.htm *.html);;All Files (*)</source> + <translation type="unfinished"></translation> + </message> +</context> +<context encoding="UTF-8"> + <name>WidgetsBase</name> + <message encoding="UTF-8"> + <source>Widgets</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Applix</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Binary</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Core</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Deb</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Document</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Pdf</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Readme</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Shellscript</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Recycled</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Video</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source><p><h1><b><font size="5" >Richtext </h1> +</p><p>Qt supports formatted rich text, such as the heading above, <i><font >emphasized</font></i>, <b><font >bold </font></b>and <u><font >underlined </font></u>text, as well as colored text. This is <font color="#ff0000" >red</font>, while this is <font color="#00bb00" >green</font>, and this is <font color="#0000ff" >blue</font>. </p> +<> </> +</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Iconview</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 1</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 2</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 3</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 4</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 5</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 6</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 7</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 8</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 9</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 10</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 11</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 12</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 13</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 14</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 15</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 16</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 17</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Table</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Tables</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>are</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>easy</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>with</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Qt</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>6</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>7</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>8</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>9</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>10</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>11</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>12</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>4</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>5</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>13</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Listview</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Things</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Text</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Stuff</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Airbrush</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>What stuff?</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Eraser</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Here?</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Pixmap item</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Nothing</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Nothing Again</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Pixmap subitem 1</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Subitem</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Pixmap subitem 2 </source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Group box</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Pick a base color:</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Reset colors</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>pale green</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>deep sky blue</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>steel blue</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>powder blue</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>sandy brown</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>dark orange</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>indian red</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>hot pink</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Enter a color name and hit return:</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Color test area</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Check boxes</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Apples</source> + <translation>Äpfel</translation> + </message> + <message encoding="UTF-8"> + <source>Banana</source> + <translation>Banane</translation> + </message> + <message encoding="UTF-8"> + <source>Orange</source> + <translation>Orange</translation> + </message> + <message encoding="UTF-8"> + <source>Radio buttons</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Sprite</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Farris</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Solo</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Date/Time editors</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>DateTime string goes here!</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source><h1><b><font size="4" >Richtext </h1> +<p>Qt supports formatted rich text, such as the heading above, <i><font >emphasized</font></i>, <b><font >bold </font></b>and <u><font >underlined </font></u>text, as well as colored text. This is <font color="#ff0000" >red</font>, while this is <font color="#00bb00" >green</font>, and this is <font color="#0000ff" >blue</font>. </p> +<> </> +</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/examples/demo/translations/demo_fr.qm b/examples/demo/translations/demo_fr.qm Binary files differnew file mode 100644 index 0000000..6bd22c4 --- /dev/null +++ b/examples/demo/translations/demo_fr.qm diff --git a/examples/demo/translations/demo_fr.ts b/examples/demo/translations/demo_fr.ts new file mode 100644 index 0000000..67d4534 --- /dev/null +++ b/examples/demo/translations/demo_fr.ts @@ -0,0 +1,1183 @@ +<!DOCTYPE TS><TS> +<context encoding="UTF-8"> + <name>BookForm</name> + <message encoding="UTF-8"> + <source>Book</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Surname</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>surname</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Forename</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>forename</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>surname ASC</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>forename ASC</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>(default)</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>author</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Title</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>title</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Price</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>price</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Notes</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>notes</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>title ASC</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>book</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Connect...</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Edit Books</source> + <translation type="unfinished"></translation> + </message> +</context> +<context encoding="UTF-8"> + <name>ConnectDialog</name> + <message encoding="UTF-8"> + <source>Connect...</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Connection settings</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Database Name:</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Username:</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Password:</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Hostname:</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>P&ort:</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Default</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>D&river</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&OK</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Cancel</source> + <translation type="unfinished"></translation> + </message> +</context> +<context encoding="UTF-8"> + <name>DnDDemoBase</name> + <message encoding="UTF-8"> + <source>Form1</source> + <translation type="unfinished"></translation> + </message> +</context> +<context encoding="UTF-8"> + <name>EditBookForm</name> + <message encoding="UTF-8"> + <source>Edit Books</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>title ASC</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>(default)</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>book</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Price</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Title</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>title</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>price</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Insert</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Update</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Delete</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Close</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>|< &First</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source><< &Prev</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Next >></source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Last >|</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Author</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>author_view</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>name</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>Frame</name> + <message> + <source>Qt Demo Collection</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Exit</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Ctrl+Q</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&File</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>St&yle</source> + <translation type="unfinished"></translation> + </message> +</context> +<context encoding="UTF-8"> + <name>GLLandscapeViewer</name> + <message encoding="UTF-8"> + <source>Qt/OpenGL example</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>X-rotation</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Y-rotation</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Z-rotation</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Rendering mode</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Wireframe</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Fl&at shaded</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Smooth shaded</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Landscape</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Fractalize</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Reset grid</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Animate</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Zoom</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Size</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>GLWorkspace</name> + <message> + <source>&Scene</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&New</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>New</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Wirebox</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Wirebox</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Gear</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Gears</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Texture</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Texture</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Print</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Print</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Window Size</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Window Size</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Low Resolution</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Low Resolution</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Medium Resolution</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Medium Resolution</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>High Resolution</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&High Resolution</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Setup</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Setup...</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Close</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Close</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>WireBox</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Nurbs</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>HelpWindow</name> + <message> + <source>&New Window</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Open File</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Print</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Backward</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Forward</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Home</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Add Bookmark</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&File</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Go</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>History</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Bookmarks</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Backward</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Forward</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Home</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>I18nDemo</name> + <message> + <source>Close the current window.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Close</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Close all opened windows.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Close All</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Tile opened windows.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Tile</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Cascade opened windows.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Cascade</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>--language--</source> + <translation type="unfinished"></translation> + </message> + <message> + <source><h3>About Qt</h3><p>This program uses Qt version %1, a multiplatform C++ GUI toolkit from Trolltech. Qt provides single-source portability across Windows 95/98/NT/2000, Linux, Solaris, HP-UX and many other versions of Unix with X11.</p><p>See <tt>http://www.trolltech.com/qt/</tt> for more information.</p></source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>KAstTopLevel</name> + <message> + <source>Score</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Level</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Ships</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Fuel</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Press N to start playing</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Ship Destroyed. Press L to launch.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Game Over!</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>KAsteroidsView</name> + <message> + <source>QCanvas demo</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This game has been implemented using the QCanvas class. +The QCanvas class is not part of the Professional Edition. Please +contact Trolltech if you want to upgrade to the Enterprise Edition.</source> + <translation type="unfinished"></translation> + </message> +</context> +<context encoding="UTF-8"> + <name>PrintPreview</name> + <message encoding="UTF-8"> + <source>Print Preview</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Preview</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>TextLabel1</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Modify</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Invert Colors</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Mirror</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Flip</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Rotate 90° &left</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Rotate 90° &right</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Help</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Print</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Discard</source> + <translation type="unfinished"></translation> + </message> +</context> +<context encoding="UTF-8"> + <name>SqlEx</name> + <message encoding="UTF-8"> + <source>Form1</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Tables</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Type</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Required</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>SQL Query</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Submit</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>C&lear</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Press "Connect" to open a database</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Connect...</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TextEdit</name> + <message> + <source>&File</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>New</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&New...</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Open</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Open...</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Save</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Save...</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Save As</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Save &As...</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Print</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Print...</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Close</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Close</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Edit</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Undo</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Undo</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Redo</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Redo</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Cut</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Cut</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>C&opy</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Paste</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Paste</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>For&mat</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Standard</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Bullet List (Disc)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Bullet List (Circle)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Bullet List (Square)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Ordered List (Decimal)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Ordered List (Alpha lower)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Ordered List (Alpha upper)</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Bold</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Bold</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Italic</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Italic</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Underline</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Underline</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Left</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Left</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Center</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>C&enter</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Right</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Right</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Justify</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Justify</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Color</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>&Color...</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>noname</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>HTML-Files (*.htm *.html);;All Files (*)</source> + <translation type="unfinished"></translation> + </message> +</context> +<context encoding="UTF-8"> + <name>WidgetsBase</name> + <message encoding="UTF-8"> + <source>Widgets</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Applix</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Binary</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Core</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Deb</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Document</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Pdf</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Readme</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Shellscript</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Recycled</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Video</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source><p><h1><b><font size="5" >Richtext </h1> +</p><p>Qt supports formatted rich text, such as the heading above, <i><font >emphasized</font></i>, <b><font >bold </font></b>and <u><font >underlined </font></u>text, as well as colored text. This is <font color="#ff0000" >red</font>, while this is <font color="#00bb00" >green</font>, and this is <font color="#0000ff" >blue</font>. </p> +<> </> +</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Iconview</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 1</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 2</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 3</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 4</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 5</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 6</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 7</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 8</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 9</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 10</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 11</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 12</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 13</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 14</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 15</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 16</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Item 17</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Table</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Tables</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>are</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>easy</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>with</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Qt</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>6</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>7</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>8</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>9</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>10</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>11</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>12</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>4</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>5</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>13</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Listview</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Things</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Text</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Stuff</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Airbrush</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>What stuff?</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Eraser</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Here?</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Pixmap item</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Nothing</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Nothing Again</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Pixmap subitem 1</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Subitem</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Pixmap subitem 2 </source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Group box</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Pick a base color:</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>&Reset colors</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>pale green</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>deep sky blue</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>steel blue</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>powder blue</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>sandy brown</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>dark orange</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>indian red</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>hot pink</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Enter a color name and hit return:</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Color test area</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Check boxes</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Apples</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Banana</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Orange</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Radio buttons</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Sprite</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Farris</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Solo</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>Date/Time editors</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source>DateTime string goes here!</source> + <translation type="unfinished"></translation> + </message> + <message encoding="UTF-8"> + <source><h1><b><font size="4" >Richtext </h1> +<p>Qt supports formatted rich text, such as the heading above, <i><font >emphasized</font></i>, <b><font >bold </font></b>and <u><font >underlined </font></u>text, as well as colored text. This is <font color="#ff0000" >red</font>, while this is <font color="#00bb00" >green</font>, and this is <font color="#0000ff" >blue</font>. </p> +<> </> +</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/examples/demo/translations/demo_he.qm b/examples/demo/translations/demo_he.qm Binary files differnew file mode 100644 index 0000000..34478f1 --- /dev/null +++ b/examples/demo/translations/demo_he.qm diff --git a/examples/demo/translations/demo_he.ts b/examples/demo/translations/demo_he.ts new file mode 100644 index 0000000..e61a4c4 --- /dev/null +++ b/examples/demo/translations/demo_he.ts @@ -0,0 +1,1189 @@ +<!DOCTYPE TS><TS> +<context encoding="UTF-8"> + <name>BookForm</name> + <message encoding="UTF-8"> + <source>Book</source> + <translation>ספר</translation> + </message> + <message encoding="UTF-8"> + <source>Surname</source> + <translation>×©× ×ž×©×¤×—×”</translation> + </message> + <message encoding="UTF-8"> + <source>surname</source> + <translation>×©× ×ž×©×¤×—×”</translation> + </message> + <message encoding="UTF-8"> + <source>Forename</source> + <translation>×©× ×¤×¨×˜×™</translation> + </message> + <message encoding="UTF-8"> + <source>forename</source> + <translation>×©× ×¤×¨×˜×™</translation> + </message> + <message encoding="UTF-8"> + <source>surname ASC</source> + <translation>×©× ×ž×©×¤×—×” ASC</translation> + </message> + <message encoding="UTF-8"> + <source>forename ASC</source> + <translation>×©× ×¤×¨×˜×™ ASC</translation> + </message> + <message encoding="UTF-8"> + <source>(default)</source> + <translation>(ברירת מחדל)</translation> + </message> + <message encoding="UTF-8"> + <source>author</source> + <translation>מחבר</translation> + </message> + <message encoding="UTF-8"> + <source>Title</source> + <translation>כותרת</translation> + </message> + <message encoding="UTF-8"> + <source>title</source> + <translation>כותרת</translation> + </message> + <message encoding="UTF-8"> + <source>Price</source> + <translation>מחיר</translation> + </message> + <message encoding="UTF-8"> + <source>price</source> + <translation>מחיר</translation> + </message> + <message encoding="UTF-8"> + <source>Notes</source> + <translation>הערות</translation> + </message> + <message encoding="UTF-8"> + <source>notes</source> + <translation>הערות</translation> + </message> + <message encoding="UTF-8"> + <source>title ASC</source> + <translation>כותרת ASC</translation> + </message> + <message encoding="UTF-8"> + <source>book</source> + <translation>ספר</translation> + </message> + <message encoding="UTF-8"> + <source>&Connect...</source> + <translation>&התחברות...</translation> + </message> + <message encoding="UTF-8"> + <source>&Edit Books</source> + <translation>&ערוך ספרי×</translation> + </message> +</context> +<context encoding="UTF-8"> + <name>ConnectDialog</name> + <message encoding="UTF-8"> + <source>Connect...</source> + <translation>התחברות...</translation> + </message> + <message encoding="UTF-8"> + <source>Connection settings</source> + <translation>הגדרות התחברות</translation> + </message> + <message encoding="UTF-8"> + <source>Database Name:</source> + <translation>×©× ×ž×¡×“ ×”× ×ª×•× ×™×:</translation> + </message> + <message encoding="UTF-8"> + <source>&Username:</source> + <translation>&×©× ×ž×©×ª×ž×©:</translation> + </message> + <message encoding="UTF-8"> + <source>&Password:</source> + <translation>&סיסמה:</translation> + </message> + <message encoding="UTF-8"> + <source>&Hostname:</source> + <translation>×©× &מ×רח:</translation> + </message> + <message encoding="UTF-8"> + <source>P&ort:</source> + <translation>&יצי××”:</translation> + </message> + <message encoding="UTF-8"> + <source>Default</source> + <translation>ברירת מחדל</translation> + </message> + <message encoding="UTF-8"> + <source>D&river</source> + <translation>מ&× ×”×œ התקן</translation> + </message> + <message encoding="UTF-8"> + <source>&OK</source> + <translation>&×ישור</translation> + </message> + <message encoding="UTF-8"> + <source>&Cancel</source> + <translation>&ביטול</translation> + </message> +</context> +<context encoding="UTF-8"> + <name>DnDDemoBase</name> + <message encoding="UTF-8"> + <source>Form1</source> + <translation>טופס1</translation> + </message> +</context> +<context encoding="UTF-8"> + <name>EditBookForm</name> + <message encoding="UTF-8"> + <source>Edit Books</source> + <translation>ערוך ספרי×</translation> + </message> + <message encoding="UTF-8"> + <source>title ASC</source> + <translation>כותרת ASC</translation> + </message> + <message encoding="UTF-8"> + <source>(default)</source> + <translation>(ברירת מחדל)</translation> + </message> + <message encoding="UTF-8"> + <source>book</source> + <translation>ספר</translation> + </message> + <message encoding="UTF-8"> + <source>Price</source> + <translation>מחיר</translation> + </message> + <message encoding="UTF-8"> + <source>Title</source> + <translation>כותרת</translation> + </message> + <message encoding="UTF-8"> + <source>title</source> + <translation>כותרת</translation> + </message> + <message encoding="UTF-8"> + <source>price</source> + <translation>מחיר</translation> + </message> + <message encoding="UTF-8"> + <source>&Insert</source> + <translation>×”&וסף</translation> + </message> + <message encoding="UTF-8"> + <source>&Update</source> + <translation>&עדכן</translation> + </message> + <message encoding="UTF-8"> + <source>&Delete</source> + <translation>&מחק</translation> + </message> + <message encoding="UTF-8"> + <source>&Close</source> + <translation>&סגור</translation> + </message> + <message encoding="UTF-8"> + <source>|< &First</source> + <translation>|< ×”&ר×שון</translation> + </message> + <message encoding="UTF-8"> + <source><< &Prev</source> + <translation><< הקו&ד×</translation> + </message> + <message encoding="UTF-8"> + <source>&Next >></source> + <translation>×”&×‘× >></translation> + </message> + <message encoding="UTF-8"> + <source>&Last >|</source> + <translation>×”×&חרון >|</translation> + </message> + <message encoding="UTF-8"> + <source>Author</source> + <translation>מחבר</translation> + </message> + <message encoding="UTF-8"> + <source>author_view</source> + <translation>תצוגת_מחבר</translation> + </message> + <message encoding="UTF-8"> + <source>name</source> + <translation>ש×</translation> + </message> +</context> +<context> + <name>Frame</name> + <message> + <source>Qt Demo Collection</source> + <translation>×וסף ההדגמות של Qt</translation> + </message> + <message> + <source>&Exit</source> + <translation>&יצי××”</translation> + </message> + <message> + <source>Ctrl+Q</source> + <translation>Ctrl+Q</translation> + </message> + <message> + <source>&File</source> + <translation>&קובץ</translation> + </message> + <message> + <source>St&yle</source> + <translation>&×¡×’× ×•×Ÿ</translation> + </message> +</context> +<context encoding="UTF-8"> + <name>GLLandscapeViewer</name> + <message encoding="UTF-8"> + <source>Qt/OpenGL example</source> + <translation>הדגמה של Qt/OpenGL</translation> + </message> + <message encoding="UTF-8"> + <source>X-rotation</source> + <translation>סיבוב על ציר X</translation> + </message> + <message encoding="UTF-8"> + <source>Y-rotation</source> + <translation>סיבוב על ציר Y</translation> + </message> + <message encoding="UTF-8"> + <source>Z-rotation</source> + <translation>סיבוב על ציר Z</translation> + </message> + <message encoding="UTF-8"> + <source>Rendering mode</source> + <translation>מצב הצגה</translation> + </message> + <message encoding="UTF-8"> + <source>&Wireframe</source> + <translation>&רשת</translation> + </message> + <message encoding="UTF-8"> + <source>Fl&at shaded</source> + <translation>&שטוח</translation> + </message> + <message encoding="UTF-8"> + <source>&Smooth shaded</source> + <translation>&חלק</translation> + </message> + <message encoding="UTF-8"> + <source>&Landscape</source> + <translation>&×¤× ×™ שטח</translation> + </message> + <message encoding="UTF-8"> + <source>&Fractalize</source> + <translation>&Fractalize</translation> + </message> + <message encoding="UTF-8"> + <source>&Reset grid</source> + <translation>&×פס רשת</translation> + </message> + <message encoding="UTF-8"> + <source>&Animate</source> + <translation>&×”× ×¤×©</translation> + </message> + <message encoding="UTF-8"> + <source>Zoom</source> + <translation>התקרבות</translation> + </message> + <message encoding="UTF-8"> + <source>Size</source> + <translation>גודל</translation> + </message> +</context> +<context> + <name>GLWorkspace</name> + <message> + <source>&Scene</source> + <translation>ס&×¦×™× ×”</translation> + </message> + <message> + <source>&New</source> + <translation>&חדש</translation> + </message> + <message> + <source>New</source> + <translation>חדש</translation> + </message> + <message> + <source>Wirebox</source> + <translation>תיבה</translation> + </message> + <message> + <source>&Wirebox</source> + <translation>&תיבה</translation> + </message> + <message> + <source>Gear</source> + <translation>גלגלי ×©×™× ×™×™×</translation> + </message> + <message> + <source>&Gears</source> + <translation>&גלגלי ×©×™× ×™×™×</translation> + </message> + <message> + <source>Texture</source> + <translation>טקסטורה</translation> + </message> + <message> + <source>&Texture</source> + <translation>&טקסטורה</translation> + </message> + <message> + <source>&Print</source> + <translation>×”&דפס</translation> + </message> + <message> + <source>Print</source> + <translation>הדפס</translation> + </message> + <message> + <source>Window Size</source> + <translation>גודל החלון</translation> + </message> + <message> + <source>&Window Size</source> + <translation>&גודל החלון</translation> + </message> + <message> + <source>Low Resolution</source> + <translation>רזולוציה × ×ž×•×›×”</translation> + </message> + <message> + <source>&Low Resolution</source> + <translation>רזולוציה &× ×ž×•×›×”</translation> + </message> + <message> + <source>Medium Resolution</source> + <translation>רזולוציה ×‘×™× ×•× ×™×ª</translation> + </message> + <message> + <source>&Medium Resolution</source> + <translation>רזולוציה &×‘×™× ×•× ×™×ª</translation> + </message> + <message> + <source>High Resolution</source> + <translation>רזולוציה גבוהה</translation> + </message> + <message> + <source>&High Resolution</source> + <translation>רזולוציה &גבוהה</translation> + </message> + <message> + <source>Setup</source> + <translation>הגדרות</translation> + </message> + <message> + <source>&Setup...</source> + <translation>&הגדרות...</translation> + </message> + <message> + <source>Close</source> + <translation>סגור</translation> + </message> + <message> + <source>&Close</source> + <translation>&סגור</translation> + </message> + <message> + <source>WireBox</source> + <translation>תיבה</translation> + </message> + <message> + <source>Nurbs</source> + <translation>עקומות</translation> + </message> +</context> +<context> + <name>HelpWindow</name> + <message> + <source>&New Window</source> + <translation>&חלון חדש</translation> + </message> + <message> + <source>&Open File</source> + <translation>&פתח קובץ</translation> + </message> + <message> + <source>&Print</source> + <translation>×”&דפס</translation> + </message> + <message> + <source>&Backward</source> + <translation>&×חורה</translation> + </message> + <message> + <source>&Forward</source> + <translation>×§&דימה</translation> + </message> + <message> + <source>&Home</source> + <translation>×”&ביתה</translation> + </message> + <message> + <source>Add Bookmark</source> + <translation>הוסף ×¡×™×ž× ×™×”</translation> + </message> + <message> + <source>&File</source> + <translation>&קובץ</translation> + </message> + <message> + <source>&Go</source> + <translation>&מעבר</translation> + </message> + <message> + <source>History</source> + <translation>היסטוריה</translation> + </message> + <message> + <source>Bookmarks</source> + <translation>×¡×™×ž× ×™×•×ª</translation> + </message> + <message> + <source>Backward</source> + <translation>×חורה</translation> + </message> + <message> + <source>Forward</source> + <translation>קדימה</translation> + </message> + <message> + <source>Home</source> + <translation>הביתה</translation> + </message> +</context> +<context> + <name>I18nDemo</name> + <message> + <source>Close the current window.</source> + <translation>סגירת החלון ×”× ×•×›×—×™.</translation> + </message> + <message> + <source>Close</source> + <translation>סגור</translation> + </message> + <message> + <source>Close all opened windows.</source> + <translation>סגירת כל ×”×—×œ×•× ×•×ª הפתוחי×.</translation> + </message> + <message> + <source>Close All</source> + <translation>סגור הכל</translation> + </message> + <message> + <source>Tile opened windows.</source> + <translation>פרישת ×”×—×œ×•× ×•×ª הפתוחי×.</translation> + </message> + <message> + <source>Tile</source> + <translation>פרוש</translation> + </message> + <message> + <source>Cascade opened windows.</source> + <translation>סידור כל ×”×—×œ×•× ×•×ª ×”×¤×ª×•×—×™× ×‘×¦×•×¨×” מדורגת.</translation> + </message> + <message> + <source>Cascade</source> + <translation>דרג</translation> + </message> + <message> + <source>--language--</source> + <translation>--שפה--</translation> + </message> + <message> + <source><h3>About Qt</h3><p>This program uses Qt version %1, a multiplatform C++ GUI toolkit from Trolltech. Qt provides single-source portability across Windows 95/98/NT/2000, Linux, Solaris, HP-UX and many other versions of Unix with X11.</p><p>See <tt>http://www.trolltech.com/qt/</tt> for more information.</p></source> + <translation><div dir=rtl><h3>×ודות Qt</h3></div><p dir=rtl>×ª×•×›× ×™×ª זו עושה שימוש ב-Qt מרובת פלטפורמות גירסה %1, ערכת כלי ממשק משתמש גרפי ל-++C מ-Qt .Trolltech מספקת × ×™×™×“×•×ª קוד מקור יחיד בין Windows 95/98/NT/2000, Linux, Solaris, HP-UX וגירס×ות רבות × ×•×¡×¤×•×ª של ×™×•× ×™×§×¡ ×¢× X11.</p><p dir=rtl>עיין ב-<tt>http://www.trolltech.com/qt/</tt> למידע × ×•×¡×£.</p></translation> + </message> +</context> +<context> + <name>KAstTopLevel</name> + <message> + <source>Score</source> + <translation>× ×™×§×•×“</translation> + </message> + <message> + <source>Level</source> + <translation>שלב</translation> + </message> + <message> + <source>Ships</source> + <translation>×¡×¤×™× ×•×ª</translation> + </message> + <message> + <source>Fuel</source> + <translation>דלק</translation> + </message> + <message> + <source>Press N to start playing</source> + <translation>הקש N כדי להתחיל לשחק</translation> + </message> + <message> + <source>Ship Destroyed. Press L to launch.</source> + <translation>×”×¡×¤×™× ×” הושמדה. הקש L לשיגור.</translation> + </message> + <message> + <source>Game Over!</source> + <translation>המשחק הסתיי×!</translation> + </message> +</context> +<context> + <name>KAsteroidsView</name> + <message> + <source>QCanvas demo</source> + <translation>הדגמה של QCanvas</translation> + </message> + <message> + <source>This game has been implemented using the QCanvas class. +The QCanvas class is not part of the Professional Edition. Please +contact Trolltech if you want to upgrade to the Enterprise Edition.</source> + <translation>משחק ×–×” ×™×•×©× ×‘×מצעות המחלקה QCanvas. +המחלקה QCanvas ××™× ×” חלק מהמהדורה המקצועית. ×× × +צור קשר ×¢× Trolltech ×× ×‘×¨×¦×•× ×š לשדרג למהדורה העסקית.</translation> + </message> +</context> +<context encoding="UTF-8"> + <name>PrintPreview</name> + <message encoding="UTF-8"> + <source>Print Preview</source> + <translation>תצוגה ×œ×¤× ×™ הדפסה</translation> + </message> + <message encoding="UTF-8"> + <source>Preview</source> + <translation>תצוגה מקדימה</translation> + </message> + <message encoding="UTF-8"> + <source>TextLabel1</source> + <translation>תווית טקסט 1</translation> + </message> + <message encoding="UTF-8"> + <source>Modify</source> + <translation>×©× ×”</translation> + </message> + <message encoding="UTF-8"> + <source>&Invert Colors</source> + <translation>&הפוך צבעי×</translation> + </message> + <message encoding="UTF-8"> + <source>&Mirror</source> + <translation>×”&פוך ×ופקית</translation> + </message> + <message encoding="UTF-8"> + <source>&Flip</source> + <translation>הפוך ×&× ×›×™×ª</translation> + </message> + <message encoding="UTF-8"> + <source>Rotate 90° &left</source> + <translation>סובב 90° &שמ×לה</translation> + </message> + <message encoding="UTF-8"> + <source>Rotate 90° &right</source> + <translation>סובב 90° &×™×ž×™× ×”</translation> + </message> + <message encoding="UTF-8"> + <source>&Help</source> + <translation>&עזרה</translation> + </message> + <message encoding="UTF-8"> + <source>&Print</source> + <translation>×”&דפס</translation> + </message> + <message encoding="UTF-8"> + <source>&Discard</source> + <translation>&ביטול</translation> + </message> +</context> +<context encoding="UTF-8"> + <name>SqlEx</name> + <message encoding="UTF-8"> + <source>Form1</source> + <translation>טופס1</translation> + </message> + <message encoding="UTF-8"> + <source>Tables</source> + <translation>טבל×ות</translation> + </message> + <message encoding="UTF-8"> + <source>Type</source> + <translation>סוג</translation> + </message> + <message encoding="UTF-8"> + <source>Required</source> + <translation>× ×“×¨×©</translation> + </message> + <message encoding="UTF-8"> + <source>SQL Query</source> + <translation>ש×ילתת SQL</translation> + </message> + <message encoding="UTF-8"> + <source>&Submit</source> + <translation>&שלח</translation> + </message> + <message encoding="UTF-8"> + <source>C&lear</source> + <translation>&× ×§×”</translation> + </message> + <message encoding="UTF-8"> + <source>Press "Connect" to open a database</source> + <translation>לחץ על "התחברות" כדי לפתוח מסד × ×ª×•× ×™×</translation> + </message> + <message encoding="UTF-8"> + <source>&Connect...</source> + <translation>&התחברות...</translation> + </message> +</context> +<context> + <name>TextEdit</name> + <message> + <source>&File</source> + <translation>&קובץ</translation> + </message> + <message> + <source>New</source> + <translation>חדש</translation> + </message> + <message> + <source>&New...</source> + <translation>&חדש...</translation> + </message> + <message> + <source>Open</source> + <translation>פתח</translation> + </message> + <message> + <source>&Open...</source> + <translation>&פתיחה...</translation> + </message> + <message> + <source>Save</source> + <translation>שמור</translation> + </message> + <message> + <source>&Save...</source> + <translation>&שמירה...</translation> + </message> + <message> + <source>Save As</source> + <translation>שמירה בש×</translation> + </message> + <message> + <source>Save &As...</source> + <translation>שמירה &בש×...</translation> + </message> + <message> + <source>Print</source> + <translation>הדפס</translation> + </message> + <message> + <source>&Print...</source> + <translation>×”&דפסה...</translation> + </message> + <message> + <source>Close</source> + <translation>סגור</translation> + </message> + <message> + <source>&Close</source> + <translation>&סגור</translation> + </message> + <message> + <source>&Edit</source> + <translation>&עריכה</translation> + </message> + <message> + <source>Undo</source> + <translation>בטל</translation> + </message> + <message> + <source>&Undo</source> + <translation>&בטל</translation> + </message> + <message> + <source>Redo</source> + <translation>בצע שוב</translation> + </message> + <message> + <source>&Redo</source> + <translation>בצע &שוב</translation> + </message> + <message> + <source>Cut</source> + <translation>גזור</translation> + </message> + <message> + <source>&Cut</source> + <translation>&גזור</translation> + </message> + <message> + <source>Copy</source> + <translation>העתק</translation> + </message> + <message> + <source>C&opy</source> + <translation>×”×¢&תק</translation> + </message> + <message> + <source>Paste</source> + <translation>הדבק</translation> + </message> + <message> + <source>&Paste</source> + <translation>×”&דבק</translation> + </message> + <message> + <source>For&mat</source> + <translation>×¢×™&צוב</translation> + </message> + <message> + <source>Standard</source> + <translation>×¡×˜× ×“×¨×˜×™</translation> + </message> + <message> + <source>Bullet List (Disc)</source> + <translation>רשימת ×ª×‘×œ×™×˜×™× ×ž×œ××™×</translation> + </message> + <message> + <source>Bullet List (Circle)</source> + <translation>רשימת ×ª×‘×œ×™×˜×™× ×¢×’×•×œ×™×</translation> + </message> + <message> + <source>Bullet List (Square)</source> + <translation>רשימת ×ª×‘×œ×™×˜×™× ×ž×¨×•×‘×¢×™×</translation> + </message> + <message> + <source>Ordered List (Decimal)</source> + <translation>רשימה מסודרת לפי מספרי×</translation> + </message> + <message> + <source>Ordered List (Alpha lower)</source> + <translation>רשימה מסודרת לפי ×ותיות ×§×˜× ×•×ª</translation> + </message> + <message> + <source>Ordered List (Alpha upper)</source> + <translation>רשימה מסודרת לפי ×ותיות רישיות</translation> + </message> + <message> + <source>Bold</source> + <translation>מודגש</translation> + </message> + <message> + <source>&Bold</source> + <translation>&מודגש</translation> + </message> + <message> + <source>Italic</source> + <translation>× ×˜×•×™</translation> + </message> + <message> + <source>&Italic</source> + <translation>&× ×˜×•×™</translation> + </message> + <message> + <source>Underline</source> + <translation>קו תחתי</translation> + </message> + <message> + <source>&Underline</source> + <translation>&קו תחתי</translation> + </message> + <message> + <source>Left</source> + <translation>שמ×לה</translation> + </message> + <message> + <source>&Left</source> + <translation>שמ×&לה</translation> + </message> + <message> + <source>Center</source> + <translation>מרכז</translation> + </message> + <message> + <source>C&enter</source> + <translation>מ&רכז</translation> + </message> + <message> + <source>Right</source> + <translation>×™×ž×™× ×”</translation> + </message> + <message> + <source>&Right</source> + <translation>&×™×ž×™× ×”</translation> + </message> + <message> + <source>Justify</source> + <translation>יישר</translation> + </message> + <message> + <source>&Justify</source> + <translation>×™×™&שר</translation> + </message> + <message> + <source>Color</source> + <translation>צבע</translation> + </message> + <message> + <source>&Color...</source> + <translation>&צבע...</translation> + </message> + <message> + <source>noname</source> + <translation>×œ×œ× ×©×</translation> + </message> + <message> + <source>HTML-Files (*.htm *.html);;All Files (*)</source> + <translation>קבצי htm *.html) HTML.*);;כל ×”×§×‘×¦×™× (*)</translation> + </message> +</context> +<context encoding="UTF-8"> + <name>WidgetsBase</name> + <message encoding="UTF-8"> + <source>Widgets</source> + <translation>פריטי×</translation> + </message> + <message encoding="UTF-8"> + <source>Applix</source> + <translation>Applix</translation> + </message> + <message encoding="UTF-8"> + <source>Binary</source> + <translation>קובץ ×‘×™× ×¨×™</translation> + </message> + <message encoding="UTF-8"> + <source>Core</source> + <translation>ליבה</translation> + </message> + <message encoding="UTF-8"> + <source>Deb</source> + <translation>Deb</translation> + </message> + <message encoding="UTF-8"> + <source>Document</source> + <translation>מסמך</translation> + </message> + <message encoding="UTF-8"> + <source>Pdf</source> + <translation>Pdf</translation> + </message> + <message encoding="UTF-8"> + <source>Readme</source> + <translation>Readme</translation> + </message> + <message encoding="UTF-8"> + <source>Shellscript</source> + <translation>תסריט מעטפת</translation> + </message> + <message encoding="UTF-8"> + <source>Recycled</source> + <translation>ממוחזר</translation> + </message> + <message encoding="UTF-8"> + <source>Video</source> + <translation>ויד×ו</translation> + </message> + <message encoding="UTF-8"> + <source><p><h1><b><font size="5" >Richtext </h1> +</p><p>Qt supports formatted rich text, such as the heading above, <i><font >emphasized</font></i>, <b><font >bold </font></b>and <u><font >underlined </font></u>text, as well as colored text. This is <font color="#ff0000" >red</font>, while this is <font color="#00bb00" >green</font>, and this is <font color="#0000ff" >blue</font>. </p> +<> </> +</source> + <translation><p><h1><b><font size="5" >טקסט עשיר </h1> +</p><p dir="rtl">Qt תומך בטקסט עשיר מעוצב, כמו בכותרת לעיל, טקסט <i><font >× ×˜×•×™</font></i>, <b><font >מודגש </font></b>ו<u><font >קו תחתי</font></u>, וכן טקסט ×¦×‘×¢×•× ×™. זהו <font color="#ff0000" >×דו×</font>, בעוד שזהו <font color="#00bb00" >ירוק</font>, וזהו <font color="#0000ff" >כחול</font>. </p> +<> </></translation> + </message> + <message encoding="UTF-8"> + <source>Iconview</source> + <translation>תצוגת סמלי×</translation> + </message> + <message encoding="UTF-8"> + <source>Item 1</source> + <translation>פריט 1</translation> + </message> + <message encoding="UTF-8"> + <source>Item 2</source> + <translation>פריט 2</translation> + </message> + <message encoding="UTF-8"> + <source>Item 3</source> + <translation>פריט 3</translation> + </message> + <message encoding="UTF-8"> + <source>Item 4</source> + <translation>פריט 4</translation> + </message> + <message encoding="UTF-8"> + <source>Item 5</source> + <translation>פריט 5</translation> + </message> + <message encoding="UTF-8"> + <source>Item 6</source> + <translation>פריט 6</translation> + </message> + <message encoding="UTF-8"> + <source>Item 7</source> + <translation>פריט 7</translation> + </message> + <message encoding="UTF-8"> + <source>Item 8</source> + <translation>פריט 8</translation> + </message> + <message encoding="UTF-8"> + <source>Item 9</source> + <translation>פריט 9</translation> + </message> + <message encoding="UTF-8"> + <source>Item 10</source> + <translation>פריט 10</translation> + </message> + <message encoding="UTF-8"> + <source>Item 11</source> + <translation>פריט 11</translation> + </message> + <message encoding="UTF-8"> + <source>Item 12</source> + <translation>פריט 12</translation> + </message> + <message encoding="UTF-8"> + <source>Item 13</source> + <translation>פריט 13</translation> + </message> + <message encoding="UTF-8"> + <source>Item 14</source> + <translation>פריט 14</translation> + </message> + <message encoding="UTF-8"> + <source>Item 15</source> + <translation>פריט 15</translation> + </message> + <message encoding="UTF-8"> + <source>Item 16</source> + <translation>פריט 16</translation> + </message> + <message encoding="UTF-8"> + <source>Item 17</source> + <translation>פריט 17</translation> + </message> + <message encoding="UTF-8"> + <source>Table</source> + <translation>טבלה</translation> + </message> + <message encoding="UTF-8"> + <source>Tables</source> + <translation>טבל×ות</translation> + </message> + <message encoding="UTF-8"> + <source>are</source> + <translation>הן</translation> + </message> + <message encoding="UTF-8"> + <source>easy</source> + <translation>עסק</translation> + </message> + <message encoding="UTF-8"> + <source>with</source> + <translation>פשוט</translation> + </message> + <message encoding="UTF-8"> + <source>Qt</source> + <translation>×¢×</translation> + </message> + <message encoding="UTF-8"> + <source>6</source> + <translation>Qt</translation> + </message> + <message encoding="UTF-8"> + <source>7</source> + <translation>7</translation> + </message> + <message encoding="UTF-8"> + <source>8</source> + <translation>8</translation> + </message> + <message encoding="UTF-8"> + <source>9</source> + <translation>9</translation> + </message> + <message encoding="UTF-8"> + <source>10</source> + <translation>10</translation> + </message> + <message encoding="UTF-8"> + <source>11</source> + <translation>11</translation> + </message> + <message encoding="UTF-8"> + <source>12</source> + <translation>12</translation> + </message> + <message encoding="UTF-8"> + <source>4</source> + <translation>4</translation> + </message> + <message encoding="UTF-8"> + <source>5</source> + <translation>5</translation> + </message> + <message encoding="UTF-8"> + <source>13</source> + <translation>13</translation> + </message> + <message encoding="UTF-8"> + <source>Listview</source> + <translation>תצוגת רשימה</translation> + </message> + <message encoding="UTF-8"> + <source>Things</source> + <translation>דברי×</translation> + </message> + <message encoding="UTF-8"> + <source>Text</source> + <translation>טקסט</translation> + </message> + <message encoding="UTF-8"> + <source>Stuff</source> + <translation>×¢× ×™×™× ×™×</translation> + </message> + <message encoding="UTF-8"> + <source>Airbrush</source> + <translation>מברשת ×וויר</translation> + </message> + <message encoding="UTF-8"> + <source>What stuff?</source> + <translation>××™×–×” ×¢× ×™×™× ×™×?</translation> + </message> + <message encoding="UTF-8"> + <source>Eraser</source> + <translation>מחק</translation> + </message> + <message encoding="UTF-8"> + <source>Here?</source> + <translation>×›×ן?</translation> + </message> + <message encoding="UTF-8"> + <source>Pixmap item</source> + <translation>פריט ×ª×ž×•× ×”</translation> + </message> + <message encoding="UTF-8"> + <source>Nothing</source> + <translation>כלו×</translation> + </message> + <message encoding="UTF-8"> + <source>Nothing Again</source> + <translation>שוב כלו×</translation> + </message> + <message encoding="UTF-8"> + <source>Pixmap subitem 1</source> + <translation>פריט ×ž×©× ×” של ×ª×ž×•× ×” 1</translation> + </message> + <message encoding="UTF-8"> + <source>Subitem</source> + <translation>פריט ×ž×©× ×”</translation> + </message> + <message encoding="UTF-8"> + <source>Pixmap subitem 2 </source> + <translation>פריט ×ž×©× ×” של ×ª×ž×•× ×” 2</translation> + </message> + <message encoding="UTF-8"> + <source>Group box</source> + <translation>תיבת קבוצה</translation> + </message> + <message encoding="UTF-8"> + <source>Pick a base color:</source> + <translation>בחר צבע בסיסי:</translation> + </message> + <message encoding="UTF-8"> + <source>&Reset colors</source> + <translation>&×פס צבעי×</translation> + </message> + <message encoding="UTF-8"> + <source>pale green</source> + <translation>ירוק בהיר</translation> + </message> + <message encoding="UTF-8"> + <source>deep sky blue</source> + <translation>כחול ×©×ž×™×™× ×›×”×”</translation> + </message> + <message encoding="UTF-8"> + <source>steel blue</source> + <translation>כחול פלדה</translation> + </message> + <message encoding="UTF-8"> + <source>powder blue</source> + <translation>כחול ×בקתי</translation> + </message> + <message encoding="UTF-8"> + <source>sandy brown</source> + <translation>×—×•× ×—×•×œ</translation> + </message> + <message encoding="UTF-8"> + <source>dark orange</source> + <translation>×›×ª×•× ×›×”×”</translation> + </message> + <message encoding="UTF-8"> + <source>indian red</source> + <translation>××“×•× ××™× ×“×™×× ×™</translation> + </message> + <message encoding="UTF-8"> + <source>hot pink</source> + <translation>ורוד ×—×</translation> + </message> + <message encoding="UTF-8"> + <source>Enter a color name and hit return:</source> + <translation>הקלד ×©× ×©×œ צבע והקש על Return:</translation> + </message> + <message encoding="UTF-8"> + <source>Color test area</source> + <translation>×יזור לבדיקת הצבע</translation> + </message> + <message encoding="UTF-8"> + <source>Check boxes</source> + <translation>תיבות סימון</translation> + </message> + <message encoding="UTF-8"> + <source>Apples</source> + <translation>תפוחי×</translation> + </message> + <message encoding="UTF-8"> + <source>Banana</source> + <translation>×‘× × ×”</translation> + </message> + <message encoding="UTF-8"> + <source>Orange</source> + <translation>תפוז</translation> + </message> + <message encoding="UTF-8"> + <source>Radio buttons</source> + <translation>כפתורי בחירה</translation> + </message> + <message encoding="UTF-8"> + <source>Sprite</source> + <translation>ספרייט</translation> + </message> + <message encoding="UTF-8"> + <source>Farris</source> + <translation>קולה</translation> + </message> + <message encoding="UTF-8"> + <source>Solo</source> + <translation>פ×× ×˜×”</translation> + </message> + <message encoding="UTF-8"> + <source>Date/Time editors</source> + <translation>עורכי ת×ריך\שעה</translation> + </message> + <message encoding="UTF-8"> + <source>DateTime string goes here!</source> + <translation>מקומה של מחרוזת הת×ריך והשעה</translation> + </message> + <message encoding="UTF-8"> + <source><h1><b><font size="4" >Richtext </h1> +<p>Qt supports formatted rich text, such as the heading above, <i><font >emphasized</font></i>, <b><font >bold </font></b>and <u><font >underlined </font></u>text, as well as colored text. This is <font color="#ff0000" >red</font>, while this is <font color="#00bb00" >green</font>, and this is <font color="#0000ff" >blue</font>. </p> +<> </> +</source> + <translation><div><h1><b><font size="4" >טקסט עשיר </h1></div> +<p>Qt תומך בטקסט עשיר מעוצב, כמו בכותרת לעיל, טקסט <i><font >× ×˜×•×™</font></i>, <b><font >מודגש </font></b>ו<u><font >קו תחתי </font></u>,וכן טקסט ×¦×‘×¢×•× ×™. זהו <font color="#ff0000" >×דו×</font>, בעוד שזהו <font color="#00bb00" >ירוק</font>, וזהו <font color="#0000ff" >כחול</font>. </p> +<> </></translation> + </message> +</context> +</TS> diff --git a/examples/demo/widgets/widgetsbase.ui b/examples/demo/widgets/widgetsbase.ui new file mode 100644 index 0000000..f84ed43 --- /dev/null +++ b/examples/demo/widgets/widgetsbase.ui @@ -0,0 +1,1269 @@ +<!DOCTYPE UI><UI version="3.1" stdsetdef="1"> +<class>WidgetsBase</class> +<widget class="QWidget"> + <property name="name"> + <cstring>WidgetsBase</cstring> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>626</width> + <height>575</height> + </rect> + </property> + <property name="caption"> + <string>Widgets</string> + </property> + <vbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>Layout3</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>Layout2</cstring> + </property> + <vbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>0</number> + </property> + <spacer> + <property name="name"> + <cstring>Spacer1</cstring> + </property> + <property name="orientation"> + <enum>Vertical</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>20</width> + <height>0</height> + </size> + </property> + </spacer> + <widget class="QLabel"> + <property name="name"> + <cstring>PixmapLabel1</cstring> + </property> + <property name="frameShape"> + <enum>Panel</enum> + </property> + <property name="margin"> + <number>1</number> + </property> + <property name="pixmap"> + <pixmap>image0</pixmap> + </property> + </widget> + <spacer> + <property name="name"> + <cstring>Spacer1_2</cstring> + </property> + <property name="orientation"> + <enum>Vertical</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>20</width> + <height>0</height> + </size> + </property> + </spacer> + </vbox> + </widget> + <widget class="QButtonGroup"> + <property name="name"> + <cstring>ButtonGroup1</cstring> + </property> + <property name="title"> + <string>Check Boxes</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QCheckBox" row="0" column="0"> + <property name="name"> + <cstring>CheckBox1</cstring> + </property> + <property name="text"> + <string>Apple</string> + </property> + </widget> + <widget class="QCheckBox" row="1" column="0"> + <property name="name"> + <cstring>CheckBox2</cstring> + </property> + <property name="text"> + <string>Banana</string> + </property> + </widget> + <widget class="QCheckBox" row="2" column="0"> + <property name="name"> + <cstring>CheckBox3</cstring> + </property> + <property name="text"> + <string>Cherry</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </grid> + </widget> + <widget class="QButtonGroup"> + <property name="name"> + <cstring>ButtonGroup2</cstring> + </property> + <property name="title"> + <string>Radio Buttons</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QRadioButton" row="1" column="0"> + <property name="name"> + <cstring>RadioButton3</cstring> + </property> + <property name="text"> + <string>Whisky</string> + </property> + </widget> + <widget class="QRadioButton" row="2" column="0"> + <property name="name"> + <cstring>RadioButton4</cstring> + </property> + <property name="text"> + <string>Wine</string> + </property> + </widget> + <widget class="QRadioButton" row="0" column="0"> + <property name="name"> + <cstring>RadioButton2</cstring> + </property> + <property name="text"> + <string>Water</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </grid> + </widget> + <widget class="QGroupBox"> + <property name="name"> + <cstring>GroupBox1</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>7</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title"> + <string>Date/Time Editors</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="AnalogClock" row="0" column="0" rowspan="3" colspan="1"> + <property name="name"> + <cstring>clock</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>0</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>75</width> + <height>75</height> + </size> + </property> + </widget> + <widget class="QDateEdit" row="1" column="1"> + <property name="name"> + <cstring>dateEdit</cstring> + </property> + <property name="date"> + <date> + <year>2000</year> + <month>1</month> + <day>1</day> + </date> + </property> + </widget> + <widget class="QTimeEdit" row="2" column="1"> + <property name="name"> + <cstring>timeEdit</cstring> + </property> + <property name="time"> + <time> + <hour>0</hour> + <minute>0</minute> + <second>0</second> + </time> + </property> + <property name="autoAdvance"> + <bool>true</bool> + </property> + <property name="maxValue"> + <time> + <hour>23</hour> + <minute>59</minute> + <second>59</second> + </time> + </property> + <property name="minValue"> + <time> + <hour>0</hour> + <minute>0</minute> + <second>0</second> + </time> + </property> + </widget> + <widget class="QLabel" row="0" column="1"> + <property name="name"> + <cstring>dateTimeLabel</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>2</hsizetype> + <vsizetype>5</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </grid> + </widget> + </hbox> + </widget> + <widget class="QGroupBox"> + <property name="name"> + <cstring>groupBox</cstring> + </property> + <property name="title"> + <string>Group Box</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLCDNumber" row="0" column="3" rowspan="3" colspan="1"> + <property name="name"> + <cstring>lcdDisplay</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>7</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="numDigits"> + <number>2</number> + </property> + <property name="segmentStyle"> + <enum>Filled</enum> + </property> + </widget> + <widget class="QSlider" row="2" column="2"> + <property name="name"> + <cstring>slider</cstring> + </property> + <property name="orientation"> + <enum>Horizontal</enum> + </property> + <property name="tickmarks"> + <enum>Left</enum> + </property> + <property name="tickInterval"> + <number>5</number> + </property> + </widget> + <widget class="QLabel" row="0" column="0"> + <property name="name"> + <cstring>TextLabel1_2</cstring> + </property> + <property name="text"> + <string>Pick a base color:</string> + </property> + </widget> + <widget class="QPushButton" row="2" column="0"> + <property name="name"> + <cstring>pushButton</cstring> + </property> + <property name="cursor"> + <cursor>0</cursor> + </property> + <property name="text"> + <string>&Reset colors</string> + </property> + </widget> + <widget class="QComboBox" row="1" column="0"> + <item> + <property name="text"> + <string>pale green</string> + </property> + <property name="pixmap"> + <pixmap>image1</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>deep sky blue</string> + </property> + <property name="pixmap"> + <pixmap>image2</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>steel blue</string> + </property> + <property name="pixmap"> + <pixmap>image3</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>powder blue</string> + </property> + <property name="pixmap"> + <pixmap>image4</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>sandy brown</string> + </property> + <property name="pixmap"> + <pixmap>image5</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>dark orange</string> + </property> + <property name="pixmap"> + <pixmap>image6</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>indian red</string> + </property> + <property name="pixmap"> + <pixmap>image7</pixmap> + </property> + </item> + <property name="name"> + <cstring>buttonColorBox</cstring> + </property> + </widget> + <widget class="QLineEdit" row="1" column="1"> + <property name="name"> + <cstring>lineEdit</cstring> + </property> + <property name="frameShape"> + <enum>LineEditPanel</enum> + </property> + <property name="frameShadow"> + <enum>Sunken</enum> + </property> + <property name="text"> + <string>hot pink</string> + </property> + </widget> + <widget class="QLabel" row="0" column="1"> + <property name="name"> + <cstring>TextLabel1_2_2</cstring> + </property> + <property name="text"> + <string>Enter a color and hit return:</string> + </property> + </widget> + <widget class="QSpinBox" row="1" column="2"> + <property name="name"> + <cstring>spinBox</cstring> + </property> + </widget> + <widget class="QProgressBar" row="0" column="2"> + <property name="name"> + <cstring>progressBar</cstring> + </property> + </widget> + <widget class="QLabel" row="2" column="1"> + <property name="name"> + <cstring>colorTest</cstring> + </property> + <property name="frameShape"> + <enum>Box</enum> + </property> + <property name="frameShadow"> + <enum>Sunken</enum> + </property> + <property name="text"> + <string>Color test area</string> + </property> + <property name="alignment"> + <set>AlignCenter</set> + </property> + </widget> + </grid> + </widget> + <widget class="QLayoutWidget"> + <property name="name"> + <cstring>Layout4</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <widget class="QListBox"> + <item> + <property name="text"> + <string>Applix</string> + </property> + <property name="pixmap"> + <pixmap>image8</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Binary</string> + </property> + <property name="pixmap"> + <pixmap>image9</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Core</string> + </property> + <property name="pixmap"> + <pixmap>image10</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Deb</string> + </property> + <property name="pixmap"> + <pixmap>image11</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Document</string> + </property> + <property name="pixmap"> + <pixmap>image12</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Pdf</string> + </property> + <property name="pixmap"> + <pixmap>image13</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Readme</string> + </property> + <property name="pixmap"> + <pixmap>image14</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Shellscript</string> + </property> + <property name="pixmap"> + <pixmap>image15</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Recycled</string> + </property> + <property name="pixmap"> + <pixmap>image16</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Video</string> + </property> + <property name="pixmap"> + <pixmap>image17</pixmap> + </property> + </item> + <property name="name"> + <cstring>ListBox3</cstring> + </property> + <property name="columnMode"> + <enum>Variable</enum> + </property> + <property name="rowMode"> + <enum>FitToHeight</enum> + </property> + </widget> + <widget class="QTextEdit"> + <property name="name"> + <cstring>TextEdit1</cstring> + </property> + <property name="textFormat"> + <enum>RichText</enum> + </property> + <property name="text"> + <string><html><head><meta name="qrichtext" content="1" /></head><body style="font-size:8pt;font-family:MS Shell Dlg"> +<p style="margin-top:16px"><span style="font-size:12pt;font-weight:600">Rich Text</span></p> +<p>Qt supports rich text. This is <span style="font-style:italic">italics</span>, this is <span style="font-weight:600">bold</span>, this is <span style="text-decoration:underline">underlined</span>, this is <span style="color:#ff0000">red</span>, this is <span style="color:#00ff00">green</span>, and this is <span style="color:#0000ff">blue</span>.</p> +</body></html> +</string> + </property> + </widget> + </hbox> + </widget> + <widget class="QTabWidget"> + <property name="name"> + <cstring>TabWidget2</cstring> + </property> + <widget class="QWidget"> + <property name="name"> + <cstring>tab</cstring> + </property> + <attribute name="title"> + <string>Icon View</string> + </attribute> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QIconView" row="0" column="0"> + <item> + <property name="text"> + <string>Item 1</string> + </property> + <property name="pixmap"> + <pixmap>image18</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 2</string> + </property> + <property name="pixmap"> + <pixmap>image19</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 3</string> + </property> + <property name="pixmap"> + <pixmap>image20</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 4</string> + </property> + <property name="pixmap"> + <pixmap>image21</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 5</string> + </property> + <property name="pixmap"> + <pixmap>image22</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 6</string> + </property> + <property name="pixmap"> + <pixmap>image23</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 7</string> + </property> + <property name="pixmap"> + <pixmap>image24</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 8</string> + </property> + <property name="pixmap"> + <pixmap>image25</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 9</string> + </property> + <property name="pixmap"> + <pixmap>image26</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 10</string> + </property> + <property name="pixmap"> + <pixmap>image27</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 11</string> + </property> + <property name="pixmap"> + <pixmap>image28</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 12</string> + </property> + <property name="pixmap"> + <pixmap>image29</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 13</string> + </property> + <property name="pixmap"> + <pixmap>image30</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 14</string> + </property> + <property name="pixmap"> + <pixmap>image31</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 15</string> + </property> + <property name="pixmap"> + <pixmap>image32</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 16</string> + </property> + <property name="pixmap"> + <pixmap>image33</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 17</string> + </property> + <property name="pixmap"> + <pixmap>image34</pixmap> + </property> + </item> + <property name="name"> + <cstring>IconView1</cstring> + </property> + <property name="arrangement"> + <enum>LeftToRight</enum> + </property> + <property name="resizeMode"> + <enum>Adjust</enum> + </property> + </widget> + </grid> + </widget> + <widget class="QWidget"> + <property name="name"> + <cstring>tab</cstring> + </property> + <attribute name="title"> + <string>List View</string> + </attribute> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QListView" row="0" column="0"> + <column> + <property name="text"> + <string>Things</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <column> + <property name="text"> + <string>Text</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <column> + <property name="text"> + <string>Comment</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <item> + <property name="text"> + <string>Airbrush</string> + </property> + <property name="text"> + <string></string> + </property> + <property name="text"> + <string>Standard paint tool</string> + </property> + <property name="pixmap"> + <pixmap>image35</pixmap> + </property> + <property name="pixmap"> + <pixmap>image36</pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + </item> + <item> + <property name="text"> + <string></string> + </property> + <property name="text"> + <string>Eraser</string> + </property> + <property name="text"> + <string>Standard paint tool</string> + </property> + <property name="pixmap"> + <pixmap>image37</pixmap> + </property> + <property name="pixmap"> + <pixmap>image36</pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Inbox</string> + </property> + <property name="text"> + <string>143 messages</string> + </property> + <property name="text"> + <string>(5 new)</string> + </property> + <property name="pixmap"> + <pixmap>image38</pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <item> + <property name="text"> + <string>Local</string> + </property> + <property name="text"> + <string></string> + </property> + <property name="text"> + <string></string> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <item> + <property name="text"> + <string>Draft #1</string> + </property> + <property name="text"> + <string></string> + </property> + <property name="text"> + <string></string> + </property> + <property name="pixmap"> + <pixmap>image39</pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + </item> + </item> + <item> + <property name="text"> + <string>Server</string> + </property> + <property name="text"> + <string></string> + </property> + <property name="text"> + <string></string> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + </item> + </item> + <property name="name"> + <cstring>ListView3</cstring> + </property> + <property name="allColumnsShowFocus"> + <bool>true</bool> + </property> + <property name="resizeMode"> + <enum>AllColumns</enum> + </property> + </widget> + </grid> + </widget> + <widget class="QWidget"> + <property name="name"> + <cstring>tab</cstring> + </property> + <attribute name="title"> + <string>Table</string> + </attribute> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QTable" row="0" column="0"> + <column> + <property name="text"> + <string>Tables</string> + </property> + </column> + <column> + <property name="text"> + <string>are</string> + </property> + </column> + <column> + <property name="text"> + <string>easy</string> + </property> + </column> + <column> + <property name="text"> + <string>with</string> + </property> + </column> + <column> + <property name="text"> + <string>Qt</string> + </property> + </column> + <row> + <property name="text"> + <string></string> + </property> + <property name="pixmap"> + <pixmap>image40</pixmap> + </property> + </row> + <row> + <property name="text"> + <string></string> + </property> + <property name="pixmap"> + <pixmap>image39</pixmap> + </property> + </row> + <row> + <property name="text"> + <string></string> + </property> + <property name="pixmap"> + <pixmap>image41</pixmap> + </property> + </row> + <property name="name"> + <cstring>Table1</cstring> + </property> + <property name="numRows"> + <number>13</number> + </property> + <property name="numCols"> + <number>12</number> + </property> + </widget> + </grid> + </widget> + </widget> + </vbox> +</widget> +<customwidgets> + <customwidget> + <class>AnalogClock</class> + <header location="local">../aclock/aclock.h</header> + <sizehint> + <width>75</width> + <height>75</height> + </sizehint> + <container>0</container> + <sizepolicy> + <hordata>0</hordata> + <verdata>3</verdata> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + <pixmap>image42</pixmap> + <slot access="public" specifier="">setTime(const QTime &)</slot> + <slot access="public" specifier="">setTime(const QTime &)</slot> + <slot access="public" specifier="">setTime(const QTime&)</slot> + </customwidget> +</customwidgets> +<images> + <image name="image0"> + <data format="XPM.GZ" length="30595">789cdd9c595323bb96a8dfcfafd871f476a2438d8d6d70dcb80f66c68027663afa4153667a66b00da6e3fef7bbb406d906ea14b54f45c7eede15b9cd47662a25ad594af3effff8e3ae73f1c73ffefd6f2f3333ebbb3f5c619efff8879f8fc7cbfff8cffffb5f7ffb7b696beb8f78d4b62b7f94fffe6f7ffbbb5afce1fe505bf81f722ff16e6463844b78de5c24c6f36ace5ce1fbbb89e9fe7761badfae98ee9f31efd2fdd626c6f3fe5298efef333bba3eb4894bdc7f7fc5ccfdb113e45d199f9926a6fe8d85b9fd3c31f5afc3cced994962ba5f09f3fd2631dddf66e6f1199b98ee6f08d3fd4e27a6f15784cbd47ec1cce3b7c3c4d4de9e30b5e7ab89f17c3613a6f60c3f4fe62fdc24a6f61e9945be2fcc3c9e70c92cfdb98f5c4af2cb34339fcf4e13e379ab84a9bfa1462cfdc92bc23c3f2f89e9fe4b611ecf8899fb9bcbf52c1f77c0ccfd57723ff7cfb488cbfc7c3b6096f1d3f9345e734e2cd72bc72cd75b66799e61e6fb0b9c8f726a3fbf4b4cf3571566fdd2ccdc5e5e4d4cfa72c42cf268106f4bff5e99f979999ce7f6fc3e723d5def99e5fa9dc4a41f1566d1ef4b66b14f6abf5ee1f61cca77bb94ae1f324b7f7b89a9fd7b62b95f85c478def1f515e93f9dafcbfd7e4e2cf767e3c478be6809b37f5b32f378dd2c31d9f385305daf9e99f9f96e3f31f55f58e6a39b98fa8ffa5f29c9f5454f98ede18a99ef572ba6f1dd09b37e305765be7462eaff1b7395e7e35998ee2fde99eb3c1ed4cf8aa9f2fcf8217395fd499399af5779621a5f5798ed6f425c2bf1f8d0bf54cba25fe68959e2c11171d5b33dd484cb75ecef1d71adc4cfdb16e6f19c24a6f35361f21785308f3fcc99f97939c6c7aa91fe29c5ccf2c8e979309eed12b6ef99b93d739698da3b15a6e7bbc0ccf3a5eac23cdfd25e9daecf67ccdcbfa223ccd7df2626fde809f3fd34df6687e7c7b8c4e44fbbc2747db6c7ccfd0f289f5a59ec2353c4b5fa36ca233f61e6e7872d616eef5c98ae37cfc4e9f94b61befe30315e1f8e98797eed6362badf09b37c5f99593f33b9becef3732dccf383e3af99646f19b1e87fd821de2951ffb36be62af52fbf15267db00fccfc3cbd2b4ccff3ef89a9bd3b61ba3fbb498ce7d59299e56d478969be9bc2d47e78484ced7b616ebf4dbccbf39f9f0b73be81f6b1b35de3f90b678969fe9e85f9fe1633f7a758104b7fcc03b1b41fb2c4d83fdf16a6fe996d6696673e4e4ce37915e6eb0f98793e0b254ce70bf44f3b56f43fbf2696f68a6766bedeee314bffdf12e3f54eaee7f92cf689eb3c9fd95298aeb7afc2ec2f50bebbdba2cf66c02cfa5267167b9e12ef56d91f1e0bb33e5c11a7e71d0bd3f37c8b59f4f39099e74bf585f97c2731c907f3a95d9bf4e55598e533606679f909b3f8ffb230db779198e4d915ae627d627ac4d29fc232f37cabc7c4243f1abf353c7e9398c7bf9598ae1f33f37c14e789c9dfa07d4238e7f361c42cf6bb9d98e6e74c98f5b1ce2cfe6f22ccfda909d3786dbabe6ab03f97c4a24fa125ccf1232396f1fa1233f7d76789491f9e852b349efbc4f83cdb66362cef3d613a9ff798033fcf09f37c49fb81da77e7c4b6ccfe6321ccfab24c4cf71f0bb37cc7cc35ceef1e12933d5c08b33ddf301bf6f73631e9ab13667f8ef978dd893f0c87c4c93f05669ecfacc7ccf20ab789717e02e983ab97e87cae13e3f9ec9e99e3952a84d95edf84e97e759e18eff787c2353c9fbd30b3bee5bbc4223fd3666679e40d6299df629418afd73561badece13933e72ff65fe434f98f32d69bf46f3a7af84b93f5e98da5727cc2c2fb39b98e2c79b30b5afd3f59ccf1d0bf3f32e85e9794eae0fd4be7e4d4cfef55d98db6f24a6fcfd4898ed5d25a6f6abc48ef55b4f1253fbfbc25c2fdc25a6f963f939d66f779f98f455eee7f95565669e1f85f99849fea69830737ccae7c4224f759618e5e98c30e95bb6cdccf20a7561badfdf27267d7c1266ff55656679b94298edc90bb3bedd08b33f3a4d4cf63415667b0acc2c4f5f24267f301066fb4ee779bea57f2ccfd04f4cfde90ab3ff1b0bf3f89b89b17fa64c9ce43f4f4cf21f0bb37ebd24a6f3c7c2acbf178969fedf84d99fbf26a678e98479fed2f3a87f5afac7faa5f3c4f47c25ccfd7389e9bc3c9fed39bc2626fd6f08b3ff61fd736ccfba9998da1b08f3f39e12933e6f09737c90feb1bcd57d62b28f8e30d73f3631e547e8df8c937c287b27369cff79cd2cf9d79d30f95b77c8ccfdf1c7c21c2f0e1293feec08733ca8108bbe170fc2acdfbbc26c7f9789291e979859ff0a9f98ec6f294cf7178fc4a26f619998e6a325ccf9fd7662ea5f10e6f83b4c4cf24eedb3becd12537f1ac2d41ff7c6ccfae59689497e7561ceaf6b89295e9484a93fba9d98f255791efb2797aee7f8ac98c55f1e09b3fe0d1393bfef0a537fd4696292ef9630e7c70789a93f37c2d41f7d9798ec51da137fd517e6f9b94b4cfd1d09b33f6f0a73fdb09b98e4c7e3f3ec7f544998e3e58330db03c6175b91fcdecd8945bfed9330e51be13a31e5038e59fc659d58e24dfece2cf2d863e6f92d66c4224fb710667f7b92989eb764e6fe6583c4a42fa7c2ac0f6789c99e47c26c6f9dc4d4fe0133cfbf1d0bb37fde4e4cfd75c29cef1789a93f323ec9bfae1253fcb821f6e2df771293bc2d33db4386fa67bde4f796e6cb4bfccc8f84693cf98330c94bbd33737fb39230dbefae305defa83f5efc81c999597feda930cbf73c313d9faff7922f607f5d55ea8d62482cfecd8d13d3f32f89933fda4d4cf1b124ccf7378559be07c2341ef3c22cfe63204cfaadaaccec2fb2a930c7b7e7c4249f9130e7cb1933c72b7b9398fc5d21ccf9b2494cf96e5998fd7320f6925f1c2626fbde16667fb69798ecbdce2cf5d34d62f2779930e7973bc23c7f3933c7f3fc2931f5f75a98aef734df5ee4616f996b3cff4de19d6d6cff8499fd817d11a6fbb39098f4450b73bcdb12a6f6f25a628bfa21d7f37c678bc4940f968539bf9924267fdf13e6f87e2dccfdbb10e6fc77264cfd51e97aea4f714c2cf254878949df3261ce471689c9de2ac21c2fabc26cff6789c9feb684391eb798251f5c24a6fc6c2accfaf49c98ce2f85d91f9e27267b48f7737cda1326fb323bcc921f961253fb5e989f1f1293beef0bf3fac77b62f2075698ed95e5e3a5fe2b12d3f364be593fd441629a6f9c3f5f15fdca2acce29f6e8559fffa8951deb92796786bcf84b95e1b24267f3415e6f5981361d6f727618ebf37c2f47c27edb1fc6c2d31f983be30e73793c4347ff23c969fb94e4cf1e74d98edbb9598ecfb5598fb5b4a4cfd95f18b3e6c25a6f32fc2349ea210de253e6466fd711789697c6d61d61f9b98e42de367fd312789299e778439df6c2526fb4fe739bfbb4d4cf9dd9130dbdb5662d297d41f1abfae0ab37ea5fbd95f6c33b3fe9adbc4341e234ce3edce12d3f99130d753c3c4a48fe7c29c4f5c24267bde13e67c3fddcff54dba9ec6935f1207f66fbe9b98fa7320ccf656494ce71f85d9bf9c2526fbb815e6fea5f678bdec8199f5dfcc13937fa5fe07d1cf7027ccf3df4f8cf3ef7366c987cb89495fd279f6bf9930d76fbbc2dcfe5362926f5798f43b0c98251f90feb0fc32698fe5e5cf13537f647c22af3c31d997f48fe5e747c26c8f9dc4942f3685a9ff3e9da7fe677562919fdd1766fb3a4e4cfd7b1266fb7a484cf97210e67ab79998f42db5cff6759498ecaf224ce3f1a78969fc17c21c9fa57f529f5e25267d9c09737ee01253bd6384d97fef09737e504e4cfab023ccebc167ccac4f19ce47a8a5785e12e6eb0db3a957f0fc31b3c8774f98c7db16667d9b0b93be6557c275877c2b6cb07ddb2496f92f6e8579fe5f1353be712fccfad417a6f9b63e31e5671d61ea4f7e9818cfab1a33c723ff26ccf3631293fce5f96cdfbe2c4cfd711561b6ef19b3c403793efb73ff28ccfa3e17e6fe4a7fa47ec1781982f8ff9c9e0ffa66707ef31d666edf5e0bf3f56d616abf3bd34a1badfeeca7b6dac1f1f1f36707ddbb76fcabfd40d928ed7ff311be71c4eb329dc3f19b9e4b71f75f9e937ced48bfc773f62732fd4d32899fbf452eb92e707ed70ffafdef96f74fe5f23be624c9c17c3ed6cfb3ac5676d3d7ee773cff37dacb473bf09f64f4a3ebddda3d7f057b59f34d3f920d1f9fecea2f672f5ffba8cff34d722a3ed8d75fcd5e06e2b3e073a847a839e3680bf8b3459bc023fe1e3ec7f1e9fc39fc8bd98bd7133d859e4559c8e70846f5a89fd826c6fa190e0bfca85fe2cf38eac0d7fe75ec65063df4d43be4a99ea31dc4112ef42bfe8e7a1dfdd61b1c2f7a89237ae751fd95ecc5a3b6444d1ba065d3efe69a62cc6b94156ad8b36ee83d1cc91b6be23e9cfb0bd90bcc7dae0f6014b1d78770704e86bdb7d8e368376ffa481fc3284e502e512653bceff477f9b2df229726f4a8893d8abd3e831e9feb0bddd26dddd15dddd397705ce96b7da36ff59dbe87df3fe82d944bbcaff4bb7cd96fb197035d861e29b0ea6d5d819e56754defe85d5d575a296594550e0eabbc0a2a53b92a545f0dd4503fa8910e6afcdf1a5f28764bfc5e8fed123316fa5d4d745b4dd5a37a52cfd0eb173553733ce66ab176c4dfcde0ecab7a534bf5ae1a6a4f1fab7dd0baf0e1191ffddb4ffddd77ec059ed08463a00e58f729871aab4375a48ed5899eaa53d55467ea5c5da816f4b68d7d9eab0e7f76550f8e051eab11c5e3525de95d75ad6ed4adbad30b75af1ef404da7e51fb6a0b46f80e722badd5456a3db7f813f682b15a95e39cc968d4368ca4a25f55153e6b6a47edaabaf2d05c472d8c523d63a0f73de8f5fab1c04ffc07e7bbc6e2a8e2788c71c69ba0df4c065edc83871fa1cf73a0b5cae4fa3b39c577ed85e5c2a3a13b4d8c0da6307d5d330333342392018e640cc7047ada49b2893fa34ccc348e84ff532223f3689eccb3793133b0b793380a98a9d8e39843bcafcbe35fb4976ccd5ee8689a39ccd7420dcdab79334bd417ec39ceb5c861fec581b231ef3c949e5166621a660f47f462f6cd01c8e7d01ca1b78e716a0ab23afe153ff6337b89b29003387ad15773624e4dd39c997318c104fad480ff4fb8b751d3d6e522f622238a5ac69a88c7050cac81f269e9ba699b8e3a8567c368d4911e99ee8f72ef3f175f926665e07d0b75628e55c3f4a081479c51ec0df6d0aef9ad55ef57f6b33ad75dd90efc1747f30ebf07eb3197e6ca5c9b1be8e1047a38c0bc20fb4e5efd1d7b89162f3231b7f0d98791dc81df8dbad5313659fb02e51065d24b76a3d6ecc3a07c7a660ffe35503e5df8c471456fc0a39f997bf360b64c09ec666e6e4df9ab9ae74fda8bf80fb19bbe6e9b6d887ed1922d5bc0047a3549b622beaaf7e1dfca96baf4892359b02c5776363715b09caaa981c597cdcea7b584fc53ffbe1f5fa2878c998a37bbe604645207a7223e094663158dc08ab6181cdd5c7c17c69b19fb396b2dd8fa6a7c5d6bd3753403e4a95bd659af4e6dc07c6d8eda66f4c466ffa2bdc47812b3c057b4936d6571240dd479b480289338069b838f52f25b35b385ed1b6d5acad90148f2d2688e9ef0cf0ed966ba186b66d1d6503b0dced04c793b32d7766cd76249f4d4e8adff7c3e36828c3efa94a85d773c9269940ac88434ab6bc51e504b6c01fecddba97db44ff6d9be186f67766e17f6d5bed9a5a9407c243975ed3bd9bd516c3f0adbe9e2681b760fe2d7315775b1fe194a8cf9e8dbbe6d2faf763fd685f6c01e82c5cf29b6a758bea0f9457b895aa4a10f47f6d89ed853db54437ba62fc083d7ecb9deb217ba6d5bb66d3bb66b7bb61fdbb29731e2707becdd8029860eed95bd86d104ce9e6245b7aa77f2cf72f999bdd81b6861694af6d6dec17c46992894c9bd6ac7a8021339018d419d52cff6c16ed9922ddb6d5bb1555bd3439889580dc72a3a1e2f76c7ccec2ec8ab0ef9db25f96ca763844a1e206a5d1b5a9b39e58cb3309a58c1c51aa86fba1fd7a27fc95e06f6c6397deb3cc493458aed31168a07865ed83ea480c1652e7785836a0b46317603b45acaa74bb8fed2447e36476ee8466eec2631dac6d6a0dd2efa36cb917601630129bba97b744f588fbe613efdb8e6bb36d6dfbe155f208b504df78c4fed905f8a76021683f6e25ee273ddcccdddc2bd46db726fdd191e4b98c3583de75d5aab19609c8ab95d5077eedd35dc9e69bb7d77809a8b728178c5f983b198355cba43bde58e5cac498fb1bafe621dee07f6b29983c2b8dd89aa4166b1445fd94e56b2601b69e3484e5dd39dd98a3b7717eec4b5f4dcb551b7a3c5ce53ee10ebfb58496718cf5fd581da721d184d176d674e76471934fac649f489aee72e4d612b209b67acb63fd656f9677bc18372d2a1bb8a3d00df55a8235b73d7ee0633c7559602b316ed26ca04b2dc6777ab1afa08e5b0de16d51d31cf7e74773092813e70f7b15ae8ce78f575ea1edc962bb9721c0de403ef1c9be6eca1c77106ddb6ab804cc0ea6186861bed675fd80be91dc7783cbbc027572142d6d4aeabc57c9e231965f0ecc7207e38b7e3208ae26ac42bdcf7d1c7345d5d4f303bdd866b46ead4c33441b9d35007deea4390d5b98fafe668ce4337b2d0c83ef8cce7bed0257504a3c9e311e3de462dfa955c1cb2d77355f17dbdf003d35775a84f6274ec611cec609d42b947db0fedccedba23b04abfa9c3c9de2af0f42b900bf8303ff2633f31977eaa6f740b6a15f4b0eace3ffa27ffcc9ad625ed95bc0eb4ecc0bf802df6f5d8cf68edad4beba492276edacb4aef025aeb04350cb20698ef1a46950ecf59876340d4ea999ffb857f05ffb2cf2b44039e89f5357ec83e54097edff06f7ee9df712de0d23a1f6bfd13bbefeee1be637debf7dc7e8cb31c67ba2bb9a8b9dff707906df641c324beacf2c47f2217b8e229f1c89cfa43947e5bea77ce8b418ffd913ff627fa88d7ba78958fdb5be5b607ee0434e9cd9ffaa63fc38812bdc88b2bbb913ff717bae4fb90679d806c5afe0867adc7768347948cd1beed3b906d4edddbfafe4d94cb0fec85c6bb8feb8fb1f60e90ddb520a249cdd8e67a651cdb078da8bb05f8171757fb7c176c6bc1ebc3e1c37afe026c63cf377c2f563c314bf130227fe5aff58debc04c945cd5dfa85390cd2d663752ddb06ca2c7f177fe1e46fe80f998655bd958aff92817f62f4fb42e6cbaa0df5bd1fb632639e7fa24962c71ae96bee4cb66178cbfcaf5e6583fa6b89c43ad439131ae9d55a027db5126d6fa0a8ca50a99c24c595f031fd65177a0655011fb1dbf6b305743d94f52cc899eade5ebe6143a1ead9f464335af93fc6c23be88bd389c570ff37506b6f0842d77576b29b4ea0079d7831b426cbf080a63bae13594676eab883528b7b9d437c1809dc048526d43b9fd8b5dba51881115641b5cf021f0fa81d4395da96b4216f2506cf8b04ff5cba7381af3e2128efd4257d533645d46d656242b8fd668b7423f0c56759ff816acd50ff469940b68840b435b0a238ceddd94e773d51535d595c3d81b906f490fc3244cc3235ae722c5ff09e600edf0e44f2033ca310a07add6e5b2662f6123c638cc04e3cfe721ae41ce5336df4d733a835cb8e4fa6089a5359f45edcc7529bc981db21fd70933bb448ba7b5b386546531f6e2885c988705e45930dfe1d554210b28620ebbb69e139f1c6b8017fde22e308f18ff582ea2e3bcb3e0c8a78537bd831e74259331ca680175dfb12d8765187cb10779a0cbbe0bf5208c240cdd6378c791cc627c92da8433c9183f66b61f1a61cfc5da350ffbba1b0e4c0b3d738fe319cdc202fcf821f84cca5457ef0d7cb49790743cfedc002d239d6cf96bd45e999f1e575c51c34eecb6b6ee0df577730ff2146af426ae063e40cfc8a3a74a9a7361c98d63e6d50a4721ee0dc458310e27e194d74556eb9d0b5aa5094d883153caefc4bed31a91c845de4fa1b98d3542bcb20f39561d5aeda4352f92cb145a3d0be7e08d69efd16cc413f202e085c3459885166957aa4b14e5c258ffa838e7a16ddff425e4000dd4fb43530b1dac93e62952c23fa7e358202f1bfa015bbfac117d8c2f2bb9e4682f8fa0eb25f8ec84eec65a3dc905f262bbb4cdd083fa44711cdedccf9f826c1f7cd33c07f2b013ce4657d51659f6dc9cdba51fdb8bf0aafb90e57888aa109dcdf307b9f4280a842bf76816b4739b8eec47f60287c3fa3aee75f57557a9d50a2bc6e371d4315b846bf7083e658ef5895de92cdadb48bf84a11f87561c49b8e1f50dcb5a463a837996390fb7be61a376d11a728c450ee6be853195ab3c5ae381ffcf4c25dcb922468c1863f879832fea97b0eec7607e32c8167bb45291d620592e46877b7be696ae0db9ebf443fc0dfa389cf86678885e0346d2654fb4b9de1ffd523f6c81164ec0ae32bd8f6b3d587386b7508ab128adf32c521c380aa7a18c7259f9b1afea4a27b1947df75cf783c7353d69533c72dbb44c535f401d9f736b0355814c9476ec14e40a0d7f86ebb3b1765bad144d6515305a8a3b08dba10236179fbd0f7aff44edc0c88ef48d69f173db29fb47efed6e431575a88f7dcd3fd52f228f97241bf2116ffada0e36f596bd64dc2f3901e91690e3c2b5fe86ea4fac5d96b694e2c984fd9559ad63c6750ad50bb5b013766d39aeb2625d1347f36a62bd091a6aaa3896e49195ec11b8505713acc85e203757ec3bbf920b8f95b3f6f8dec495a21d1fb254910b8cc5cec03b521d1ff57c027229412efcee4790ad8c683d22adf5f758265d5aeb8cba9fe94c65c69d050df2cfb0527bd2d3cc46bb3127995bd387791a09d89769c648b029970d7b913c4ce41277b7f7a3dedb17b697c5865c607e745cef9a8046c5d58827a8db8fe2ce9c09a19e79c8566660a77b947facfbaeb4d2da002f7b60975908fd2c73f759eeeecd5c0f402eef6a1f7cda35ca85ec545668638cd2ba0679759ce917cec5bfa85f24978a63e5554e17f516abb00debc7cf4bbbd05bd1d749dd9e6550699dfa465660566d31c64f4d23f65a64227b64c071257d6e46309a7e36004f53852a3aee50417e6eba6ecbb65147bb5cbb48be1c23f48ce5627f602fe27f5cb2178befaf1c43ed1236ec857e8e6b93aff6026a7bca1306a0ef2fe6102aad1ef5c1926dc8da7f6fed7e59d3efa25780e8920dd569d452b2393d56fba6948d421beba4779a45acc8e0ee6c0c3901d98b5ab3edcf727169acf8ee50283464e32ae3ea6bbae6cb40ef2056b7c11b3741c3c6309ffbd1776593e8496371432be4bc462c3e6ca1646f997cfb042bbb56d8caa66a0499655cf5807c019edbca1ee35a39e74bab7c61a6aeb227f2636b7b765fd52f2bb94ca06507f1b5a1efb367cc5853dd8d313856793ddbd2fbe08360e4e0cb1e21323e50a5c5ebf65dae3de6293aacd657da6ab53bd1b67db39d4df516faa59837f4dda3aac7f525be66657533d7855aa79ce2bed8f95775a54d7e6c1cf75ca0f57646ef1c50fd15338ff884b857ea4ddb1d51250d1ab2e54926efd90c7bdd263f463e19578b454e8bb4ee4595760733b2c76c0e9ab58018b530dd7017abfeb84e4dba99e2ff2c7bcddef4f1fabbb53fa8f7fd9abd908cdeed45b6a40a9de7b69b765d5ed4a33dc01a126276f69e3530efa2ff2cda82652d5fb0476b7005b6b67796aacbcb6c0f624a5c67793727aa0f125e4895ac6455666e1e33985da8511566976beb799bf1e5c3dad8535cbb847abf961d58e825ed8ac44a99d7c8c0e76687d911d49d01bdf245760c5e74e62f7d957c8f1d1aaa861579ac50c3f9ede2ac8cd31acb42d628d5a579ce9e400f4edcc2dd404d3361bdece02c2cb2d3e8c542dd8fc09eecaabf5fdacb7a0dbd8f6f885462ceea5fb326afbeaef61f177187c2f6ec33d4fb8d787d76e69bd64509c219cc88ad6559449d7a0c3bd9b96aa10cbaa8591ff6ff31ffbc044dbb70a32ce0ba12565f2c9778751be6ef2de4590b47b26e2bff5c2ef17d87107517e4f390b5396b5f1b4db47edbb7f5ace3dee3ca138ca8e54a5937b4314a627491fac4e8ac975d6657d9757c37036745a5fdccd51a68bc4f6737d96d761765a83a602f5390ce94eb9d0e68c27df6001e6998e4d2ff627d4cd62c452e52619575499d665b694781bc6b43f25c7591955c03d7ee833ec9ca6e6463ee41eb5b52339e832e6edbb23bcb2a90a5b53622aeecf5b3d6822655b35ab693bc9dec20d29eccb92f65bb6637abe3acc7fe524ef671bf325f5f97e7589343cd5ed6cfeed1df912d73f6816b2958e75dba89db8b76a562e57a622f20d3dfc6fc784176a21c9476b3587f066db7b33e8ea6cd75ea6a5702e41c3f2def21dbf833ef43e35e75fcb9edefec6e5c51027d59c9e5edd37af2fa5af2ea28e5caecf887dc64d7e8572caf3ce00e967977d107b7627e94c7b5fa899ee5ce9e3bc89171857b865ab8f48d1cda35b779c8b26c9067616ba34e95f5af45f40a9841533c99ae7240f61eda2ef33c2f62ed99ea588772f9d25ebedaa3859f2ff23e58e30c3c93c4e1e86f799fc42ceddc6de13e48ac5df68375a57c6007308e01e40637f9906d903ce8563ecac7b26f9476cf794429b758edea9286bd43b5b36fdbba426b4471fd0d66678235b0fdb43ef64ff62bd5be5b9867b834eee05f28d97da32c646146ae1b66fa3caea2aafb389a7cea9bf96368e48ffaca1b3dc89fb0668cf956cc27b6f267b02ac810f297d812eed92e3efc9bf39eb4f0ccf6f3996e416e3cc5f79df9bd9cafe2fe4ff62b9d3fcfe7797c42c35ca0475d60ce451a31b745fe6adbfe51bfd9f804c8cff2b77c99bfe78d7c2fc4b779a136c963a5a56034fbf9813dc80f4df4dfb3756d93deafad55cef9881eee323f32377ae1aa711d747defed17df87b1a1c88ff313dc4d325cef8b4fa31eccf253ffa46fc133c79d8b92d9d5a3bc09754603df15f798e90c20036dc2685e41ce8dfc0c24ddc23df44d8dda904efa9ce5e79063045dce2f300288bffd13fbfb59666afec0299cb7f15adc460f8def7e3ce62dbf97b7d5a99ec6bfc38175fb18ea923b77c5d96a29efc068e2ee858218b1953df96bcc8e1ab8def64936525dc7dfe4ddbc179cabe697b816baaa5dfec4fe7e80a7e757f9755ab5936c9ef3aa986bda3e58e7abbe3505eebf7bac39e3d3e28a4f337fca6f4026201f57c59ae739bc6521bfcdef7875f58b7fbcb63987faf3599f43ef69df60b0b1bff3a97ef9d9fe3ed8c03cbfcfb6759df7b47aeb7b23d10759dc5df647be973f041f4ee23b2c6ea9bd3aa11ddcbc83a3332897b80636ceb7f2525eceb7316e7d612f68937026afe4d5bc16dea42258b397fcd7edc5b5dd896b83cdece4bba642f198f71ee61c43b1d68c6f49e06a5cf0f750dbb4a1fe7bc11586b88f5fe19d43c8bd753fafc737b7605a6f39c67f69293c2aa8d60a655be1ad30b8c3b55ab3fcf49da76fbecf3fccb250f85161fd5c24c3362bfb985dd6f1e89d94db2e5ce1ad77672e2f027d0f469d16993d7043739af54dafc8fd5188fbec5391b2f49eeaaeb503e36451a846cc1f70ddcea6b892633568be6f2ffaa5e8c3e734af1703f31077fa29d2e11b12f2eef4fa9b6cf074e5ccd0ded9477b5c0c8b517ca73f1f15e362923f165388bc97724ff28b9f25b3f6aeb969411d7b6266e03526e04d64cd48a5ef397d3bbee87ed60a83e2515be78aa7e299722a18492365899447bf73f5d9466f0b110eeadfb81f0619a78da33bc7a882a3e0f769681d607dad65b12113924b9cb1cbecb0783145ca1757dfffcb7f25bee4f5285da8e540ba50c942beebf7b147edd57abd5aad047e5c73597dd2a81b285393eac6ceda39cb95fda65cba981d5c668fd99be96eecefafef7f7fef7d4bb0567c83aaed076651cc8a79b188199a6a438ed658edc3a743d1cac58a4162efabba58468c32c1f7b6d66cc57e964bacf070d7cf16af30ababf761d672c8efda4bf1668edd32cbe21e98072917cbeccdee99a15a7df340f67c453ef2f6472fd9d1c6bbb09c9d507df255b4fff4ce39e4a3a0b3c57bd1f8f1f72fbe135fc02b2f753f2c7147ef42976d66c7c59ebd720af29a6837638e9e1d95de4f969e43b53c847fb48ed145ddc7359ab4d736e5eb78b729afac6c67633d0046632e8bfd30d4ef6bfbd5bf1c5f8a037b63766d8c560b532e0e8ba3e218a2e1bd9d172754736ec845764cd6de88df9863f17bb25a24ab80f318e38b53fcd6c9073f06b1bf6f1bb65334e1b9abb5bcd57edcf7ed65f3e03dcdd02fce6cc91dba1eae06aebd21b5e16165d78165c6156f57ea15f67ff11dde59deb5cf79ad78e69d9bf4f62f3c0e32e5e2bcb888eb3eee6ead5f1bfbd7dffcbed88777b6e30a3678c5636ff266fe5c4c8b167e6784f28eeec64836d65c7055a9b136629219ea4f7e9ef7f479e8db96ede20ae8105767e6d18f9b7d73a53bf836dc24ed0f7dfabef377bf2fb6714c715d33661527a0bfeda2ed33ffe26afc1d18aaa195512e8667a9457964f1f7f0cf66a760376d7c9359bbfda2931fd983e062d50bd94ad7f7a2eec673344ebf95b7f1fdfea7f8cec5c7daf717e2cbea58af17f05b86f11d485bc9ebd9ae7b2c86febde899735cc99a7f90cb475fc5df1bb3dadfd92554bf2da8b4e21e29e4d0855137f6c4f7f01d895968db86dfd21d18c9deda3be35f7d9fecdbdfaf5c9f0b7edff8052aae7a8cbf59069eba6f20590bbb85f3efe1c936f0cdf0cfdf7ea37c6da65e4c256b1697c595dd2dae35bdb555ce2ff3a841435b31b3e2c68e407c51262db49325bf67e3711d66e33be9bf125f3ecd017e2b17df9d7cc66fa71db90b5f40ae74e1cfcd6971eb4fec8b3d0ccde22e5c990a44d5f8c2f439c8e0281bab2bd70d59b61fea45d3ccb25dc8bf8b984b43a57591e3fe63cc85b15a7b2b5e219eec47df051c6532c74a6cbad19f7c532e3fb597b5bf3142ef46f0bbe08fb88618d7c78efccc8e6dadb80fda0f204778d147a6e486aa11ee8a07770b3ddfcae77656f8ecc98dec2ed858295463050db1eb0d3e87dc53ac47f1e767b0c7b23b7647f8067c7c8760405e87be3ff627ede58bbf218215f0543f29dcd18e6fa7d13e7ffc397a4988a8f1cd36c8785c11caa1aa2676db75ecb69a84aaadc45d2a182daf40f01e977cfb1adff5c4378aa7f816f07bfc5407b8361adf697ee7d5fb4d5ff6fdf8f2e1efbffcd0c759ea19bfaf22ef798dd7be1bb9f9f761d6bf2fb9f97bf7412f36eefb513f7fc15e7efcf75df08d0ecaa9f133ceed7ced90d17dfa4c6bf69b7b299beb2cffec6f636cf02f7d1ff90bd96cac85c8dc85d44bd220facefefa7debf15adecb5ce51436bd6bf0d5df025ad795c4df8e2ff997f2f11fe2eeeadce6df4a08b81efff2e93e6977b506b95a5b59bdf3b9fe9e8ddbd0894f31e69bf958fe51361b72f9c1df48fa2a3e6fc8b0bf7ad7e3e3733ec6b6b51a7f9d37dafda65c8a2fe67f5d665ffd7d988ff7177a7d3fc189bc36f7503efaa60fb6f15926bf56efc7cfa6febc47b39a936ce3bbb1b287183fe9af46ac7d0358ceaf1f9ffc163d6f53ae6bcf4d7281eb8a6d5cefff157bd99cd32fbe23a3d59a2f8a73eef85b3b9bdf67fe4a869ffdd3badd7c96fd4a4e701d8c64432edfcd917f256ffba8f3df3dffa3e77d6943ebbeeffbf1e57fc4f19bfefed85fe2f37f955cfedffff9dbff07a3ba6ff8</data> + </image> + <image name="image1"> + <data format="XPM.GZ" length="424">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022130543251d2e253d856405bffcbc54105b19c856360003103709c4b54c4e4bb44c067113a1dc3408570f0de01653460270b1c4241844128383a1a30e8bdf8808975a6b2e00eaba6126</data> + </image> + <image name="image2"> + <data format="XPM.GZ" length="424">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022130543251d2e253d856405bffcbc54105b19c856360003103709c24d4a4d4b03711321dc642308570f0de01653460270b1c4241844128383a1a30e8bdf8808975a6b2e0083ae60d7</data> + </image> + <image name="image3"> + <data format="XPM.GZ" length="439">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022530543251d2e253d856405bffcbc54105b19c856360003103709c43531b4304c32017193c1dc44183711ca354d4a019b8306708b292301b85862120c22c492136170e8a8c3e23722c2a5d69a0b00768563b9</data> + </image> + <image name="image4"> + <data format="XPM.GZ" length="424">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022130543251d2e253d856405bffcbc54105b19c856360003103709c44d3249354a35037113e15cb0623d34805b4c1909c0c512936010490c0e868e3a2c7e23225c6aadb90090db60e2</data> + </image> + <image name="image5"> + <data format="XPM.GZ" length="424">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022130543251d2e253d856405bffcbc54105b19c856360003103709c44d334b343533027113c1dc3418570f0de01653460270b1c424184488c18512878e3a2c7e23225c6aadb9002a2160a0</data> + </image> + <image name="image6"> + <data format="XPM.GZ" length="409">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022630543251d2e253d856405bffcbc54105b19c856360003103711c44d4bb3488170f5d0006e31652400174b8483a12d86c56f44844bad351700a36a5d2f</data> + </image> + <image name="image7"> + <data format="XPM.GZ" length="439">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022530543251d2e253d856405bffcbc54105b19c856360003103709c44d4e314d314d04719341dc1453183711c63533029b8306708b292301b85862120c22c4921293132118bf3a98aa6402eae8611e16bf11112eb5d65c0046af6444</data> + </image> + <image name="image8"> + <data format="XPM.GZ" length="2093">789c6dd3594f1b311007f0773e45c4bca16ad8d3c9aaea03f751ae7043d507afed25014220249050f5bbd79e995d550b321be5c7fc333ee2acae74ae4f0e3b2bab4baf533d1d9a8e19e84967c5ce46a3c5afdf3ffe2c2dc7aae3ff8aa4932c7f5b5aee4f3ba673347e720178e40171149938229fb0c3204fc4191b34b91706d9890d1bd78293280cf2b538135f928bc42405b9084ee3c6e3da694c1eb1d3489c928b344b290f20ee49fda331f7db0acee22ccab8fe4cd6599669f293b827de0ece933ccae9b06048d679c14668ccf91db1650306ab44c58af337e25cf22f64ad0ac5be175bf120b89b2adb4dc90fec6e2c3e0eeea5fef8d90b72d9cb7b25f95d5c487dd898ea40fd8bac888b8cea966c8aa230e479b0ce0aabb9de63eb980d77c165562625d713b16203dd97d2eab8cbf359712eeb89c55ae63f103b99dfb09b7ef47d9abce9f728967eb0106bf1bc319f47b7b6cc77c12e139e0fdec54a5c8ab5e6f5bcd596f5ccc48eeb40f7c9589fe7fa5b63aebfb24d525af254acd8d8af6d72f2a1581bae3f8a9d98fad9dc38cbf92bb6556ca0df8f75a65eef886d13f97c29f683ea74ff9db2f57c4eec9c22cfd82ee13ceada5c07bacfce99fa3c1ed856ee0718b196fd2ab193fd668db97ecef6f3717db331af977e2f55582fd723b6abf797d796cfdf8aebf3a9c45af6f3b3b6ec775f5cefffae76c53e6557b27f3c23574d7e835d2592df132bf1b47145de156ba9af37e67a25aed8fd290f84f6e0ffb7321a4b798c97e5542be3b092718703ff4aa94f7d2a1ce23da51ef09152a32ffa3ce19832439fbac767cef8acf5098b2fbea27184137cf5efa638c3377caffbf8fadc3f618e057ee01abd5bc70ddcf4a966aed08bfa6ce136eef85ebbb887fbf8130ffe5f8fcf0cf0108ff0d8f73cc13e9ee2199ee3452b637d8f4bbcf21daef1c677b9c508e35626f17b7af64fea671c6386392aecb6323dbfda0210b7014043890a0cd8f67ac0a1810aee60801318c23d3cc063eb0c5f60044f508575c0189e7de20526ed73865798c20cdee01d2f600e0b98c0c7a7ef62f4d558fefb7de91f96a1f1b4</data> + </image> + <image name="image9"> + <data format="XPM.GZ" length="1160">789c55d14b6fe2301007f03b9f222237b46a378418a2d51e4aa12db450e8936ab507c78f82cba33c135aed77df8c67129284837f337f7b1c715e7326a381533baf6c777c37138e98f28d5393fbc5e2f8e7efefef4ad5634efa0b7cc7abfea854cf1ce10c574b05eb79ba767dcfffe9dbd612d8e08d4683035d60c08330b09c01196792594e814d9fc9a60f34c8a687dc005b512b6c592e724640090c45188602380646927b4ddbbd2506b8f78ac8c306f08ba870af40462cb2dd37a008b2a306443a6a42e4c8d79c367c9311077590511d07bd1019724de438f789a8b8ed3e5bca88231f90a21e49e02391213f884a584640a9e0052aa062522906fc44aa3a767946ec8e2c95a06bdc23651d2fd927729c7b4d5422005e22d3932df739eda02e50a783f0923d22c3f090c8317ccc88b74a88f409ef19b5e50552d327b42d7516de21751dc377c4743730ce88dd554e0d3c103976b7396d571335f22c7ddcec49d7798da7ff3117ae740b3505bbdea73a2d9e725acfb4361f5ace0b3963b45e98d9725ecc4db55e7dae37e59cd1dbdd7e5dca697d8893e3d7bc34f7105fb42f3be5f3e2249976af4ae7c5a66dccf54d21179bc4f4bab3fe6d217707a574f6a0904b86bd6ebf7f3f1a9f6a0f8f4fcf2f9dd7c9f8ed549b9f9eeabf5f95ff44891e85</data> + </image> + <image name="image10"> + <data format="XPM.GZ" length="2478">789c6dd5d96eeb361006e0fb3c8591b90b8a39962cc9128a5e64df176771724ed10b8aa4b3da4e6c673de8bb979af9a9a4a7b5c2001fe6e7909465fbdb4ae7eae4b0b3f26d69be308b5bdbb13766d65971cfe3f1fb9f7ffdf1736939293acd5f18e9f26f4bcb8345c7768ea613df807b01d49557637a6a5d8a09cee0477119cd43b844fd05b6f06be3a4db7a1a9dc87abca76e2ef1059ca9e9415cb69e344ebb894dd55e9d66308babe04a3c864b35a7b085df1bf792d4f612f15cddebaae91ace50afc455b0cedf854bd4cf5bebfaeb8db3a46733ed3752675d35f7c526cbe08dd646bc0f97a8bfb5d6fa266cd5641ae769de45fd2c3a97379f7fc039bcd35af31f62d3d60d5ca19ec04e4db2df228de632bad0f9cfea22818f5bebfc1bb12972d45fe14aebbc0e3be4e5fcfd5e11fbdf47f77be227753f5193dc9f7eddcfd1ef21ba5f8bbb7085f92fadb57edab8ec9579a9f51371ddfa08aee0b5d63a7fab719595aecac40375955756f63713dbd261be575795d6791b76c84b3f9355e84f8770ec3f519bdc88499e6f13e6237fa036589f2fa335cf53d8185d4fce57877eda9f64ffb53389de1f5a83713fe81e36d84f017bec7f5f5da7e87f0b176a76d1b5ce1fc3a67692bf6a6cf376fd3d38ae7f091b78d85af3cfd1388f53d729f6770117f0366c707f0ea3757f740e7b9c479e6feb629ee6adb55ec31ef34fd536c5f9cee042cd196c6c2e9ec1de6a5e3eaf2eb7f1fec9f7b3f3ce38fd7eb7b087e5f3e60be77d21aed53e55933cdfdedb789e5db54bb1df5538be1f0bd8ebfec8aa7dea74bfdf5bebfa577081f50f60e3b52edfb7a3a2fd3dda513b9c9feed43ed5f3730e1bf48b753f52afaa47292cfb1d8d627f1ea9eb14bf67a41e45dfc2e1a53f9e83055318e6d7aba90c16312339c3355b0c17e435a5eba2cf35dff02dae3bbe0fff25f5d98747fcc0639ef0941f25f5c43349cdf53c92780e99177ee5377ee70f5ee5b5905ae70dcd48974ddee2ed30d6798777798ff7f920e40ef9087d9abd1cf3090ff834ece28ccff982877cc957fc3da43efbfc089dbb612461ad34647a61ed8c732ebe64fae1ac65189b5c11f390880cd564c97d66c8d348aeeb90d823e21eddd02dddd1fd97cc43488dc398d0941ee929e46634a7053d7f66c26a437aa1d7b046d3e385dee89d3e6895d6be6642aff5709a61486cd0266dd136edd02eedfd3bc386f6e9800e43fd888e438f5d3aa1c17f32a77446e7611f17e468489734a0ab5f333cffbf6bf9efdf97fe019b6f35ae</data> + </image> + <image name="image11"> + <data format="XPM.GZ" length="2013">789c6dd45953db301007f0f77c8a4cf68de92cb1632bf174fac07d26249c814e1f6449ce45127201a1d3ef5e49bb364d0ae2981ffa5bbb920cbb3be56ebb59ded92d2d9672395065d597f3f28e5e8dc7eb9fbf7efc2e550251b69f8d7a39ac7c2b553acbb22ab7a613e380330ba805b56a2df07e738e641445d21b9c63192731f9d55948a105b9ef5caf095daf794fc9f5807de4dc481b4983bc2a9c7a0f9c1355b51fde9a9c2489f23e714ea362fed85b179e93c306f7bf20e7fdc2982c83baaf07c08eb99f902d93c8fb9a6db8fe13391592ac72a7941f39abb8e8e7b970c3d793e450717f8fe4e2bc9be45873bf2b72d16f9fcdfdc2922dd98bc2749ef5dcbc9f2e390d693f30670bdedf215bd27ec0df87d2b588fbdb2b9cf8f9295904c2bf4c78c68ee97d80177212703f37ec98ebcfc8a9a4f384095985a9f6f92bb650b1f73b5b2a9ae7f595610f9d751c5523eaf78e5cccfbfbd7a69ef07952de4829e97c3ec85a6afa7b48d9865d73364272bfb824a721dfff393b7f1f22b20eb97ec2369af663721be17d403621d793b979bee56decfdf8f5e099ac0c9f5f8facb91f40769e37b9f93c05dbb01fc8b63ef9b230f5d3600bea0752b6e4fed68529bfcf3664c89c3351d40fc8263f9f3837d7afb20519468569fd0e3bafdf66e7e7d9cb9d916fc96ef8f5fcff972c2b9ebf67e7cf5f90b390f38a2d787f93dc59e67dca96ec8c9d913b4b1a08db837ebf959198f297b2d294daca18cc78f4b06fbffbd4466680431ce1338e7162e7a7f8e253b3cf8c4d8c708e0b3bdccf25ae6cea15df3632239b7ac7b5adf2817b36b58f077888479f193cc613dbcfa9ad7686e7e89e78c70bbcb4a9cfccc8f73cc4a65d658d2d9bb9c23676f0fa8bcc0ddeda4ec776dd3bbcc707ecfe9769e1a3ad33b6ab3cd9f92a06186ef433b0990c6bb65ad326229b8851607d6b5f2e73810d4c780d61af03363227202105856dd02e010632e841ffdf8c3b4518c010463ee1aeb407cf30deca004c600a2f3083397661014b18c36a3b83b3af46e5cff7d25fb0bce65f</data> + </image> + <image name="image12"> + <data format="XPM.GZ" length="1310">789c5dd14b53e2401007f03b9f2205376a4bc96b92d4d61e001510414454d4dac364262320aff010d1daefbed3d39d00261ce6d7fd4fcf4c715eb686bd8e553e2fac377c33169618f1955596dbd96cfffaf7cf77a168334bff986bd9c55f85e29925acee629ec07aaad725d7762bae692d801ef73c8f039740df71432702b60db92b305c42fa916fc27320e34c32c3113070990c5ce00419d8c80f601887516838cb19039f8091174681e163460c778912799bd3843b8622b2b19be6345d498c22011c13257207e45e24b907ac0063c96d3cc603d1c7c9d7441e99f02531c1510219b3d87443a0f0b351cf441a15103992e534e1bb8cb85103193bb8914f64c82d91e3be2e31e1a6eb19ca98236da470620974880cf94e4c84e10a287d4d1f786398648c91f0021360c2649230e0069938d8e519b1fb62a847e1a98648e9e01506448ea7ea1169df2ba49e6cf895d36cd4022abd115ea1496418be27720c5f64c453d5897485b78cca706fa89483ec13751f58cb88dd754e05ac1239763f739aae222ae4997e4ad9a3d7798debff988b922c1dd512f8ea6da474f190534a8ed5e45dc9e9694ecd26f305d596e92a5d426dbdd97e9ce47672f7b9ffda4e8fe72955add52f2e7fe6e4eeaa7192d3a97ab3754db5767ad36957d36e7a9bf6ee8e72b57efdbed9ea0d1e8ee6f5eb8f4ffa1d3e1fe52035180c5f2a879aedb89edf6041253cd4a687a7f8ef77e13f3e1c3a3b</data> + </image> + <image name="image13"> + <data format="XPM.GZ" length="2702">789c6dd6d952eb381006e07b9e2245df51537de245725ca7e6821dc296b0c3d45cc8b64c026401c23a35ef7e64f52f9f01a60ca13ed469b55a8ae0c74ae77270d059f9b1f4b4308b71d92947e6b1b3523d4f26ef7ffdfde73f4bcb91ee345f49b7132fffb1b43c5c74cacee16c6a1bf0dc8112379844deef8d5393a6a9f1a6c6caa85c79d36b631dc7ddb8ebc7dfbc8daeb48c3f36ce12a5949f8c2ec55a696fbe85ab2cf19e8ab3484c3bde45eb41e35e9229f8d8bb70f349fe13710ff1bc0be73df16bebc2c7dbc679dad63711670af5bf8b433eeac37926efdf80ab3cf53e12e7919817dea50af55d8bdb7c5d58215f24ce23a997185679e9f355702ea687c66e7bbaa9df2f3a15e70aebdd0c467d87621319f13aac609fdf94aa2bfb4d4371dbaf2bb8427ed81823f5ad352e52d5957e722e0efb4d637116497f79206eeb8bc526f4ef3918f56dc3b610fbf35354712fce7d7c2a0ee793cfc43ac2fc23715ea17f883711fa7f00a37f34870dea89608bf74fc5458cfa08d6e847198c7ab7605354de4fb015b36a5cbae388fa358cf3c307629d4bff0c89dbfa2f60d46f1836584fde5ae2d782d1ff425cc4585f0fd6387f3bb0c17a505f6165bdb4292ee352f9f80d58c37ebde5effd49c4ed7d70292e62e4cfe070bece83d1af6b7119a39f37c1321f295823be0f9b523c83ad98fcfd55a9a494fb8feec4aac27df722d6393ebff76213d6bf272e63f82358d6c38fc1a8af86433d27b0ad64fc595cc56246be4a63dcdf6f95552a91f32ff5d80cf5b1d46f7be13eb880c37d75262e713ef9050ef56cc1e80faf8bdbf917ade5efc7043670015bd8dfb7d6455bedbd2db631c64d30c68f602d26ff79b2368b707e3271bbbe5571dbdf040efb732eaec2f9da87c3793a0d967a08f95c07249fd4676dd88fe3d652ff3018f51fc2dacaf81e6c61fff9aa755b7f2ccec37d3b13db18fdefc206f9c7b0adc50fe2e6f1f6ebab6b172ff38dc4758cf11bd8d4b5770dd7e2e1421ea6af8ffcfe4b8ce102dfa55325515f622cd77cc323f73ae65bf7eaa3bee5a9f98eef79e27e4e79e6a3e65f621ef8919f78c1cffcc2af2eea8ddfff1bc31fee31bcca6bbcce1bbcc95bbccd3bbcfb29a6cf7bbccf072ecb211f390d78c8c72eaa8de1133772ca677cce177ce96abf7231d7dce528c470cc09a7ac5873c63dceb94fcc03223254480c9554b9c7524d3734a231ddd21dddd384a634a379c8430ff4484fb4a06737e78c5ee895dee89d3e6895d67ed743ebb4419bb445dbee75c745ec529ff6689f0e3eadaba2433ae22b1ad0908ee9844ee98ccee9e2730fe992aee89aba14514c85cb724e09a5dffa7c4d8a3465d47331b961f7cf207d8b99ffdfb3fcefcfa55fcb6370f5</data> + </image> + <image name="image14"> + <data format="XPM.GZ" length="2782">789c6dd5d952ec361006e07b9e628abea3527dc69b6c572a17ecfb32ec90ca852c79180e3b33aca7f2ee91bb7f99840a06aa3ed46ab5dad2f06361707eb03b58f831379dd9d9b51bb8897d1e2cf897bbbb8f3ffffae3d7dc7c6206dd77560cd2f9dfe6e647b3811bec3ddcb71de82c8086c3244f6bf1ae3a1b1656bc03574626d3a9b81abaa4129fabfbf97beab42a34fe511df2a9977b6bfe6d3847fe2bd8191967e4cf5dd988b17ee1eb5ce2c76a93c05b9d9361e2b41eaed47985f93b30f2d17b7495891fd4455169fc36ece1ad685d8fcfd4fdfaafe2b0ff2c11bfa9fbfa4fd4a6ae9db8803d7cdc391d96b5d57c129fd669ecefbe3a1b66babf4fb529b0fe3d1ceb9b76ce9210aff5dca98b02fdfd50c7f5f81df656eaa115719d3bbc2f17adef8b5b755194d23f4ed5a6403f315e259a8f479df3c4c4fe3ec0b15e592fb7799eeb7a17b083973a176919fb97ab2bdfe87c12dba2d67ab9569789d6c3ab708df536d475dd78c93fe96c52e3f1bee4bc1a6bbcf68bbcba8efb5957dbc415e29f9dcb2cccd7f59ed465025fa8abd8ef1bd8c3729ecb26e627995f8578f46b536d5bac77206ec2b8e65feaadf1576a9be8fe3883e3fc52dda44ec78f6003cb79aef3c6788d97fdd7ae8efd3f5487f93a7e0f1bd8c0adce27a9d7e6753cef33759c4ff27eacb3898e531e8dfb50c01696fc4d6e5bf46f51ddb45a3fc1ce78fdbc93f3d0789be0fe1fc3f1bcbec016f7a9815bd433523706efdf45e3fc3daa5decd79bdaa7ade96ce53e84cb14d7cf60ac6f3d6c61d75be337a351dfadba49b53edbc006fddd87add667096e51ff9adaa7e8cf4734eab562df589cc7126e918fd52ec5fd79860d7c0d5b9c87388ef7c35a7fe80ffa75071b5d9f5fe0564d52af6f1dce2fb1ba9fdfc02df6f3a96e4d2b66f9ff1484fdb28d467ef97fd186fcd86faaf6a9ee978e608bfd0da351cf656f1ddf8063bd87bd75fc46ddc6fa93de5a1ff2755f122fe363d3af3753b7b8bfb41e8dfb3685711ec9c216fb2518fde5ebe8b18ecbe7d978dc8f0fd5e354c7791736e3b178028fd5a3993e4cdf1ffdfbb718cb0d7e5c90d7a8ffc4b43ce62b9ec873cd3fc36f89fa8ae11bbee53bbee7077e94a8277e96a8698ce119bff02bbff13b7ff0272f86d1a510b5cc2b318657798dd779238c6cf2166ff34ea86997f7789f0f3486477cc8477ccc277c1a22b6f88ccff9822f79c84988d2989433ceb96013f29421e2942baec3d6892c351a438e3cb5340ea35d4cc8445734a16bfa4937741bf3d01ddd4b1d13cee881cfe9919ee899a634a3975833bdd21bbdd3077dd2222dd132add02aadd13a6dd0e6d7de698bb66927acb14b7bb44f0734a2c3107144c75f3121ea844ee98ccee942222e694809a594fd3ba67b5f94534186ca307e149e942aaabfc758a6674be1f3baa1dbf0b9eda9b6edf7189efedf33fff7ef73ff00aa8c7a59</data> + </image> + <image name="image15"> + <data format="XPM.GZ" length="2366">789c6dd5c95223471006e03b4fa1206f8423a7777587c307f6556cb3c08cc387eaea12abd000629df0bb3b3bf3af0e07b60a019ff2afaaec52233ead8cce8f27a3954f4b8f0bb7b8f2237fe91e462bddd36cf6f6e75f7ffc5a5a4eab51ff9534a36cf9b7a5e593c5c88f0ee777a107050125fae8cddfe002aed4b5b8d67c07d766de803d7cd43b4d129fdafcd29c1666f2eaba1f5affda3b4b529f59fed0dc0ff53a5c98e946dd881bad17700dcf7be7699ee4a9e65bb830f39abac9eb5cf3f4027bf8b97791e6beb0f9ce5c2430c18599757ee1c44e9dc3353ce95d66852ff5f079d55c26700697b0ae5fbab2296d7edabbcacaaeb2fa177395c2ef7009efa95dd55436ff19eeccf4d07b9c57588fde065bfe327a9c6b7d6a1ea7a8df45a3feaa6e639d6ea3adce677009df0f6ed50f70036b3f753eee6acb1f98e576312fd46d5dd696df851bd49f066b9df47c9aa28efbed9b9bb429d47a3f37be691aaf7eeced0a973aad93f6ebbc0bceea9bbddba2cd5a9bff19aecca4fdb49d4b6d3f7a824beb8fae6187fd7fc001fb7b735c8f93c19dfa1576663ae9edcb61bf0d38ee770c3bf868b0e57f465b3fc4e636b37ee810aed0df0eec70bd07703c1face7335faa67706526fd7bf0d2bfe569cfec335ccf3e1caff71676de7c030758cfb32bbbacb3f5b7d4c1c7fe56e1006f9abbd8df15ec3afd3ce4160e66d2fb215432dffa9b99e37cba80637f6338583f1ca243a5de36870cfbb968ab939e6f907e713eebe60ef71b6dc3381f5ac0f17e98c301d7d79803ce874f07dbfec77085feb66079e87afa7939edafcfaef7ca1c32bb5eba8bc6f95fc215f6fb0e3bac7f0ec7f3b8889e9a6bf574a89f98a719ea53581ef6cfcc06d3c761af7fc8386ef1f4a2ce521f3281a718177c29df3565f70a5ff30ddff26c582788efe4d9a7e676ff8bef653c0ce39117fc24af3ef30b32aff2fb23bff13baff21aaff3066f4a6e8bb779877787cc9eecb0cf073c91cc211f49e68d8ff9844f256599cffc45d6dd939e6565fecadf247326f573fece3f9049a49a72c6b9ac5270c99566c65c73438ccc26af1291a3960bf2d451e084a67441977445d73143247b1474439e8f2848e6956e69467734a79f96a17b5949067e2692b8a7077a94c4829eb0ce849e65bc4857677c26bbbcd21bbdd32aadd13a6d58e65fefc5a97471419bb2c6166d4b6287763f66688ff6e9802674286ffa111dd32e9dfc679df9ff8de5bf7f5ffa07d6011b20</data> + </image> + <image name="image16"> + <data format="XPM.GZ" length="2814">789c6dd55953e3381007f0773e458a7ea3b67ae24bb66a6b1fb8ef23dcb0b50fb264738600098130b5df7d15f55f6686dac930533ffaaf6e5976c53f967a9747fbbda51f0be38999dcd99ebd35afbd25f7361ccefefee7af9f0b8b89eacdff66652f5dfc63617130e9d9dec1e8a99983ae3d28e96755d20f1ec016de17e7b65f05ef05575dfe128ef9cfce92bf12e7393c9c3bed170ef965b12ad0ff22586755aa838fc48513f3b6b82a643d6fc15ad6f3cbdc5992f5b324ac3f16e7fd54e63d89ab44f6c3a7700167b043bf9368cc9b066b1de76fc21ad7b331779ee416f39d5817d83feada61de4ab0c9f3dc84fc81b84c72595fcf5da4d1dc8735ea2be24a63bd15eb22937939ece037b189fba16053e842d64b7fa312e9c747e232913aa773abd418eca709364a2ba92fc34e4cebe22a41fd7eee3253aecc829fc56502ef06d7a52bebe0557155a0df211ceb85d834629a3fdc5465ddfa75b14d5578f8e936d8f7ab64de21ace1cfced2ef0d8efdc2f3a3739de83c38dc5f6dfd03608395b856a82762abd02f3c4f26d70ef907b1298ce4cfc47583fabbd82af8186ea43f85fec69a44eaa4a2a51f6dc205ea256c30efa2b3d46fe046ccadb84ee181d82af4afe6ae739f977e1fd1b5d4d7c4752a66e46b050fc5b11f4fc40ed76bc2f3593b93e0fe9ec3b87f34830dcec3c0383f3a15d70afbb7d1d8dfb8b30bf3c2f5dba29b57c098675ad8c04d67c9ef46633f8fe23ac5f53838decf03d8c87e4c0de3fce9355af6c7b04d6d113c8315bc031b18f31dee8709d76f5d1defb78663dd886d2af3680ae37c6835da8aefe038efa6b3ec770437c8cbf93997c2e1fbda15b1ce65b40bfde859ec527804c7f9e1fbdf357ebdccd7e298e77358617d031b17de7f5cc30dbc266e309fc3fbaf514d8aba896e54382f0ef6f3719eb9d8e179a733d8e0fcd268d92fedc0d83f3d889bb8ffebce32ff12f67f82c7e216fba1f0fe6a55d7ff43dcc4f3de8ec679bcc3f17c0836e8c77023e6bbe856eae1fbbc6dbbfa95b84da5ce7bb06adbe05bb8150f26f261fafe91df7fcb18aef163bd9ca47ecb34dcf20ddf86cf1ddffb7f43ea2bc30f7ef5230ff9894721f51cfe77fc1233fcca639ef01b4ff99d3f78e6ab9f3eb5cc2b31c3abbcc6ebbcc19bbcc5dbbcc3bbbee71eeff3011f4a868f78c0c73e31e5133ee5333ee70b3ff192aff8daa724d3e78453ce38e78215977e52e5d76b7ff1444632549325e77f1a6a43e2956ee896eee89e1ee8b1cb0ce98946f44c2f3ca3571ad384de684aeff441b3b867faa4655ae111adfa1e6bb44e1bb4495bb44d3bb4fb75edb447fb7440877444033aa6133af53d76e88ccebf323e7541977445d7d4a7242452ca28a7e2d78c3fa51552545245da27cefc27376ce85b868ca1a9a9fd1bc7d1a37f8bb486cccdf70cbffcdf67f1df3f17fe031c788805</data> + </image> + <image name="image17"> + <data format="XPM.GZ" length="2862">789c65d4c96ee4361006e0bb9fa2e1ba19418d76890872f0bedbdddedd410ed4e66eef4bb7edf620ef1eaaeaa7e24c207b069ff9932c2ed28f95c1d5f070b0f263e96d6667d36a504deceb60a59e3f3c2cfefceb8f9f4bcb6136e87e9260102dffb6b43c9a0daac1d1d363d381460e1406611206e2545cb874d1d9d69da3200ab4dd56621305da4ed79de3302ab49d17ea3888436997feb1890be443efc888af3a2761ef2d7512a879ec9dc8789cc309ac79eb6ca5ff3b5ce8fcb6e99c4609d6672d5c845a4f0657da9fe1d4d7affd6d5245da9fd469a0e6144e51ff9b77ac9e786bbd740b1bd4efc733a9cc6fdbce5994a65a9f2dbd31df056cb45ecb62d71fed315cc3893a0bb19e356fecd7096c32b91cbc09d799b64b3d799ca5e83f867dfe15aef358fca1ce433812975988fd36b0c17eddc035f6a7f0d6fda06d753f5e05637efa80ebbc94fd90f10a571fd66fe15ae7e707b5efcf721f8bd2b753a2ce43d4b7a72e42ecc7339c6a3d54f596f9e9cebb10f3103685d6bfd15bf3725e26c9fd7e9ca90b83f516706d1271a336a1dacafd3255817af91cf6f76f556d501f4f61632ab1dc2ff7baf8fb1bc146fb73a036befe03b8b65a8fd46bab02e767a76a83fbc6a7deb8efefbd753f5f6177c1a57d5d6d53abf5cd3b976e7edcbf176f8cf7a8b64da9fb21ef57591bd4c333b50db11f9bde78df57e114f7ed0bb6babf740a3770d95beb1ba9cb089ec099d6c335dc94b558c6af526b71dff77bebfc536fdd0fdaf5c6f9bfc10dfa6f7823ffa4f6f5d08eb79e170de10cf7f913b6d8ef636fad9fe4bc2bb71eeccfbdba8ab09e1d38c3fb907ba3ddc0b6527fc20d2ce755bbf9701e27de584fd05be75ff7c6fb7f0837dace77ea2ac27d7a52d7519d8aa5febaf1ed3487338c3783adee0fefc10d7ca3ee1ec91f756eb2be7d4d5d47f0be37dee76dd8efe7b137f218af89747c6ebd9b4cf2f27e374d13e17bf3e88df55df7d6fe727f5ad71fe77de98dfe0b6f3d0fba8033b45bd8627e821b35bf78b7da2edfd7b6eddbafd46d84768633351ff66ec597b0859fe1563d9ae9c3f4eba37fd76f3e975c71cd0db77c83df89cb4c35a5f78eeff89e1ff8919ff819cf0bbfba7f25a5ef1acf78ceef6eacefa90ffe94d442bf2ffcc5ab2eb1e6c65aef531b2eb5c95bc86cf38e4becf21eefbbff0f903ae4233ee6213223d772e2463be5333ee70b377e97bae42bbe7629cd8c39e090238e39e19433ceb960e3964e64a9d48cdb9931555453432dddd084a6744b77744f0ff4484f3e23a9677aa1577aa319cdddf34e1ff4490bfafa37e35239add21aadd3861b67d3fd6ed136edd0eef78c8cb547fb7440877444c734a4119dd0e92f1972a9333aa70bba74892b97bda6f1ff32ad8c15b8ba428a28a68452cafe9b716bc95daa706318cb96acb5a57ebbbe8db390676cdd77dab6f6c64eecd4de2efffdfbd23faf5c83f3</data> + </image> + <image name="image18"> + <data format="XPM.GZ" length="5374">789cb5975b53e34a0ec7dfe75350a3b7a92d9dd8b11dbb4eed0381e17e09b710d8da07b5ed90102081844bd8daef7ed492da5c86b3557b9b9ed4cc2fddfa4bad56abe1b71f2b83defeca8fdfbecd17b418972be5881e567e548fb7b7cbbffdfdaffff8f6bd1daff0dfa8e8acc4dffff2edfbd162a55c3998ded51ed031404bfe08af1a27ca70a79cb43231867be32423e19972daea38e1abc0795bf8c63855c696729616a5706e5c181f08e7ec30177b32ce95c9e6933c11ff34554ed354e2c348b953b94a78c373d46a9591eeef41d90f61324e946953b9d137fbacd2fde29e72a77089f0ae71a50cb70dabff33e53c323e354ecb54d62f958ba8503db5cffd10ffb97292c41a5f6c9c1b6bfc79567524bfb4aedca9ec3cb695833edd18a7c63f1bd6fccbfab81595aa8fa5b21fb2bea39c56ed48f854394b8d41996a523de522cee342e62f943b455b793f70a2f663e5bc325e2a179132d4ca145552bfb06a5c5bfe77945d6ce7f3e4b91db55b165faa1cfc414799f5b59e87c645a5e7532a37fe5e955d66e7590917ed5cf703997211eaf152996ab527892f617dabaf893291ae873de5322b459fe4be24e4e254e3ab8cb33a137db96f699c94e6ef5a39dc078a94833d9d1867ca28fb4f1b3dba532ec9eaf3dcb856c623cf59ecc8f623f16654c6763f32e3acd6f92dcf9d36df3fade75e60aba74be532b6fa5d33ce94311176653dd4f86e95ab58f383278187439997fde7de5eeb7f57b9223d4f927ac85d64f50c0fca79a4f1d3a1e722c90bf5ef4a63bb5f0e958b4819526597e5e28f0ae132b7fbe74099d7eb7c669c1a1f1917d62f73e5a007a7ca95d50fa6812d1f72fe944489ddaf44b9284cff2cb0e9af1957c67de53a36fd8bc0aa0f6de1b2d13f57ce43fc7de3e0af540efad455ae6ad27e73dcb0f607d30bfed0e66bb2f314ff2ea1d4f2313526cbf720b0f6331819d7b6fe39b0f53b9bafad3f90bc5fae6ae69db28b8db71b96785d98cfcc5fa15c87fb830d6bfdef1ad75aaf20ef499936ef49a11cf4e9ded8f471ab619d7f0eacf9c44763d279780a6cf3b1716df3725fca2acaad1faa7dc5fd5dced79172b37e1058f5a0ab5c5abc80816dfea2619d1f1b5bbcf0d8b0ce2781ad7fcb7eab342ab59fe25239d863bf61ad9f993119ef07b6febf6e6cf5462f816d5edebfaa0ef3b8086cf353e5caea05260d6bff991bdb7b000d5bffdc37b67e4af2bed459bbb4f7665339fcbc0107ca2eec6f4db9d15f04b67e6cf6411fd61bd6f87ac6a1fe40b9b6fe092eb0f5c757e561acf50b6781ed7e0e1a96fb0992bfba0ef1c2b572e3ef4539f8c3bbc0ea0fbbc699f14ec3da8f82bdbd3778635ceb7d03a9ef61d6b17e8487ca8d7ddb38d83f07b6f773686c7a386e58d78f94433e70621ceeb79cc7709824767ec7ca6965efed4360fbf9f948997fbcd3fe38372eac9f55c695f5979e7251d97d3b0c6cfdb456a6d4f27fa9ecc8ea25522e433db694ab90ef57e5667ff7c6b63fac03db7bb36a3cd4f33f5afc77e3ffa3818084ee3fd7c0122bac71c8e3df5079af81576c3f62fbf1bf5241a7e32b0dbcc6095bde88cae8cf34f016ef70ca63f6a61334380bba87118f7bfef8887e51c1075698f358f098e1a3ae68349ef0195f782c25d2252bbc7ed6c055ecb2fd9ac4b18e3ffdda370ddc60bf2fac62dfb24afdab0a677c938757d13866b8e55798c6367bf0513436ac32fa9859dec78e28ece21eeeb3fd3a7b5c060d3ce0f587ac30fca0b1fc9859d6e8b1c6111ee3099ee219f659e74dc3b187bb8f71c8ee6f58c3bee37df82876f11c07788197d8c208e30f1a77bca28bed4f1a635668f3f78effdfe6287aac91608a1976388e1c0be0e344173400786df7bd06902974c1fbe8c94e7228a1821a86d8822b18b1c6b8d1e8f12a1fcb12c8a2d8e06c78851d99e9c1b53f1398c00debdcf2e706ee60ca51ccde69f42c9631677895631889f5fb1836a5ba66ec7f06f7acf0e0e3f075661a9bec4763e94a5ed47ff75d0c3d98c302e71cc9233cc1330f1fc5f2bd865fc5eb5e2c1ef9185b0cb060fb092ce11556390f5dc9c512d654c35703ac9bca35fc840dd8842dfea6d7e461ae3b816dd8815dd8e37f7d0cefea432a6a9f57facf011c420f8ee0184e6022114875fb1870ca319cc219f4e19ce319701c8fef35e002e7e271032ea10511c4d086c4ab400a197420e71b3265ffa750101210115732956f1a12c95cf6bc49155cf26fe343bae2dc4d684463baa609aba438a31bb6bea53bfe774a33baff74f71defce677d8b1e684e0b7aa4277aa6175ad22bad5297d6a0837d5aa79fb0cd0a1bb4c91ae5470daf422f3865ef279cd113baa22dda668d1db6dfe5cf1eed93e376bdcebb98d2011dd22f7dcc723263ab2768730c3d3a8227e6255b1fb3c6099d7a0d5671fe17571e67bf6a888aafdd3ef5e99c06e4cf6f411774492d8a389e98dabe26f8db180694bcddad4f6f838381f4a7be7dbce205c7b0c36fb068f89a6085ecebbede64c559f5c8c7fbe55d7428a742ee29d796c38f3df28b778e730553f686d2ebbc5fe433e021d9283fbe2d5f6b041d07307524778263619cba2fecff5c23e87c1e5faffc9fbcfbfffcfddb1f4bcc6304</data> + </image> + <image name="image19"> + <data format="XPM.GZ" length="2127">789c95d44d73da3818c0f17b3e0513df323b2d7ec59e9d3dd88eeb80430a69094977f6204b328a3010c020a0b3df7d253d625b3a21d9351cf80d7fc9aff2c7abd6e3a0dfbafa78b16e50f38c5b98a155eb8a6c66b3fd9f7ffdf1fde2d2755af21b382dfbf2b78bcb0f2ddcba5bcca9facde56fabad37455f336ce376a8d851b443dbb335b1a26bbb6d57cff34533723d3752bc33c440a4e8d99ee7e9b8d4449248d1320c819f157dc76ffb8ee227c5c0f149a0790b0c7ce0574d24a9c74e0d23605bb1e376fc8eab38d62c3b51a754740c09f09b62e88676a8e307cd328c42fdef8b21013e29465e48224ff11918d9c047431fb8d1c49258f1de30022e0c09f05a117911417a2c03221b3830f481074d2ca9c7760d113030a44057b1f4102df5d83eb0748013c30038d7249244b13144c09d21052e15b15f52ec2b6640ec0053c300586812493df6c61001678614b856243ea6448fad80c4010e0d03e048934aeae759182260624881b52295290d14732075805bc300186bca94eab13d4304a48614b852ac645ae9b17b60e5003dc300686b5692952231ac801fded94e1a0ba94ff9568309a1d5843d5ba575aee17c3a25b49ecdd9e2c542679a2563b25ad17addb00d7ebdd98a9daee85e5493037ead913b8b935457b110cd353e6d9075acb675c6d8a77c2b6ebaa70d26cc2a8f554f14b7795257fdbb5f9a7c79c0f858b1cfdb3a1119c33f379cecb76931305539cdf25a0c8bfb2f278d3c97b82e32a8beeee4aee441df9fcec3a6641ff7f24cce8ff1aece733112938731ffb9c998ba2a7274d52c9b91c885a8d78f4fdfc69cff38779eca485ee19548442dd49ee25df7c0364f6d75bea6b1e54c63a233f9e989753a9f34937e77f1324696b9cedcd617586572db564d3613d53a6bfaddcd8373bc17dc4ed24c656a1b0feb2adfe6c32acd26ee60f1effde2855727c5326bdcc1f3e3741cf7621a27a359b19b777fdc539f679ea8864dc01e0ed7ec76dcdbef7bb9a86eb2e6f4bef35def663960bbf5925dab8393d5a82a7e79e639efc8b2c94749c1f499ca1d0e5f5d179ca77652a76ca0aa557e66edc86a5feb074e5667d7d7712e59bdb106392fe45cf2b8de5ca766ae77d6b23eae77d7bbacfec33b81ffeff7c6b9e6efdf2ffe0193880354</data> + </image> + <image name="image20"> + <data format="XPM.GZ" length="5054">789c9d975b5322491085dfe75718936f131bb974030dc4c63e78c70b2a828a6eec43d217c52b228ab2b1ff7dab2b4f96ca30bb1b634beb67569d3a95555dd9fefa6d6570d459f9f6eb97a7a94c47e94a7a2593956fd9f3dddddb1f7ffefed797afd578c57d478dc64afcf5972f5fbbd39574e5e0e13e2f81c90155fc57c972024e2b4d1fbf308e34de578e2b71cbc705dcac469e53705af571e929b732a9954c236589943902d725f5bc05ce95e94c79180fb5fd333819669eefc1b93281d3187c659cd67d7be324d538e69f0ae21570ae713e50ce62f02658326dff1a58f33955cee33cf1fc084ec07760c9b5fdb57211832fc149a1ed33b01485e721b85026d56b365bcdaa675d8f66c8e7213847fede9443fe26e01cf3bf51b6fc700ece75bec42547151b4fba8187befd39385396a9722b427cd57333aa45babf364aae45b54a4df7cf9a67a9d56ae2791ddc04ef969cc4f54c59f63c4b3dabfbcd2dfbca4904ee04d6f607e03ae2d78155bf5972a39ad431dea931da3f07f6711a805b60fffc348689f9b90bace31f1a273e4e37ca0df377648c785172b36a716a836dfc29d8c6ef1a27ca7ebce6b05187de1cdc024fc0f023c7c60ddd4f35e566a47af25072abd6347fb3c03ade35b80ede3386de11b805de0aecf7078d3da7a1ff061871ae8233c4778da1b71658f59e955b11d83f3f6e3b59fb2765b73f753f6f82cdef4360edbf6a8cf66f60f813ef47528b73076ccf8b8033c4e3c0da7fac2cf04371609dbfcfdfb066fde545d9da731158f5e660f3bb1358e36cdcd2f3610f2ccae2f7db3013d1f6543546fc129cb7fc79237ebdd2bae4186fdb58db937ffed2cce2f4aa3c8cc1eb8175bc477002bfc682f126e01cf5645f394df4bc235f8fb2baf5e71a18f3e163b0f9bf524e639c9f2d30f4f80c2cca42609cafe2fd67791a233faf81557f0b9c806f8dd5bf6460013f19eb792d2330ea9df8e72f4f42fb1b30f2411563f8df56ceac3e76c0899eff6471417ddc3446bd7b02e75aefe845398f95c5e73bcf33abd77570827ade34c6fa3402eb7c8660cbef6a60f593806dfe6bc6a85f7363d4abbe728efa4fa781b57f618cf93d04d67a7c0b4ec02fc6a8e75d30eab9f8f78f2209f3cbc0980f5d80e1577265f3c33db0d5dfc418f33906633da81558d7e3126ceb736b0cbf3b81753e27ca45acef1b043ff6fe417efd8ac2fc50648cf1cfc1b65f7ac688ef07d6f11a60f8e3b631fcf5950bbc3fd14e609dcf1b3881ff8131de97c66001cf02ebfbd3088cf7a7ee94a93bfdf9cb6b0a0f997e5ec76ba49c71cec5cfaac0c7255f398dd1ff51f9de317c5cf38dd7f80f95b23fdf2ed510bee37b68fc50c5f77fe0b1bb96fb78e449d058aae2fa3fb9c8d87f96fb98f2f3078d0515efe02528cc7ee0e395df3e697c5071fde7aedf7b64ccabbcc6ebfeb3f1c1c7266f2d6840c5296c73db91a9cc788777798ff77d663a652bf838e0433e5ad0e8fa391c738ffb9f7c9cf0a9d338e381fbbdc3e77c011f158e38fe4ea3ca35ae73c28d4f3e4eb8e9345ace9df3410c8d9488c4692e68d09052ca167d504e45e9832e3ffba02b1a2dd1b8a6d4f9e8b911677e4d663ea303ba29f341b7dec75df0714f420fdf698ce9113ec66165474e63f2231ff4f44961c62f34f13eca7c8c3f5c039a2ecd47e9e339f4f63b895e6846aff03178d7a0379a9b0f5a5df0b1e6f7a01fc98df5c64f34a575e4c3f5f47f2b3f63efc3e7831e16f2b1612dddbdefee9b34371fbe67f87cf0f1bce063cbb7edbbfbadbb37689bdaf4aaf970fd764a6dfc0cf9a0dd857cecb99eedb27779d13e759cc6017c9882aa1c061f47c107f1b9f3d1752bd5a063ead13127d4e76d3aa103cd07eda847a770ea94db211f7b960fff649dd3190ddc5af5b847e7d4a70baa50613e7cef5b8ab8ea721453d53d712defa3663ef07c9a4a9d126a50d369781f8e2f9d46cb65b24ab1b0cb448bcf847c3e6a968f704e781511194a4a4dc9d487e452b8d9bbf1e552ae4a0519c9c865abf431f9e8e35d45aeb9e3fe1fb8915bb92b7dc8bd3c7055c6f228137972794a5cbedace57998ff97b3ede5564ea549ee54566f25afa907b9acb9bcce5d1395b9535c99d46990ba7e2f6527bd1c7c28cd6e94436682a9b4e614b32d996b6ec8870e13c955fbb6e97169ff3b130a33d97dd82da4e615fae654f3a72e0fc95d7350df492433992ee328d0f5eeee4588e38929edb81238edc1e5af673a9065458bacee9b9f4fdb9fac34bcfe4a555ed822fe4a4bcff5bed447df9fbb72fff000126f975</data> + </image> + <image name="image21"> + <data format="XPM.GZ" length="6974">789c9596c97223390e86eff5148ec2ad6282ad4c2953993131072f927797f76d620e00336579b76cc9b6dc31ef3e14f123db2ecbdd3da562a93e91047f8020c8df7e2c9cee6e2ffcf8eddbd398c7977ec10ff971e14735b9bd9dfefb3ffffafddbf776ba10fea6657721fdfe8f6fdff7c60b7e61e7feae9e014d02502bfe99314be4a2d551f6db60df2a62ffeb8c9396f5d306b850968172d249e2784a2217d6cf3abe08fd6a7f0d5c28d3c18cd356584f794939317d37c63a5e1ec185aec727ca6927d57e9d5fa6d0e3b7c018ef378c313e9d713bb1f1f264acfdbe02dbfc1763cc3f007b8cdf6cb88cbcaedc6e294bcfb89d44f6914b9bcfd17e27e9b43ab19f63bc3adce9b4e37c77032e3a1ced1b7b65399c7196760a1dcf6f60aff6dc9572d6ca6272f81a9c2973cc8f2cd857bdfc6c0cbd6de5305ed7bb0797cadc0257e06cc6791af4ab3f57ca19fce7457095c7f5dd50394f94290567ca12f7230ffe62feb17296215e5370a5fec89a720ebd6e609c2bc35e5e82cfc095b2c47ce9b673f82727c6d0b30a36fdcbc6dd7664f477136589f9d1952efc73022ebb12f51fcdb86837fef5959b788dc119f24994bb09fcdd025bbcf6234b17fef339187afd52c3daaff3a530bd97e00cfe907111f5ca05b804f7c19532c7fd2c3b590be76b47d9ecc9b8619d3f01231eee40b94cca4eb45746f6d62fd7e04a99e2790bc705f5879ec0a82f4cc6a827bbca65027b2fe0ac507d6760f847f13cb1377b542b67a8575228db788e7aa4d39ce7dc98a33fee165c88fa972817967f77caa5f94bca9ca87defc099c64756c0acf665195cb38ff6614f52651945ae3a05f45c83bd54d1bf52394f34df9cceaf8a52fbfdb37209bdde1b637f1f94d9e27b0b66e83d520e7a22d32138d778b81530434f77c63e2becfcdc834b9f45be0457cabea7ccc82fbf0cae11bf4563e8992a4b8a7c8be7d78778a83e7e54b6f53d290be2ed5f957daa7add03987d648ef95cfda1ff42b92c2bd55f832b65ffa0ec73ec5717cc1a1f89f955d54d7ddb075755bcefdd8b723751e65be5d2e2e59543c18cfd9e956d3d8ef1acf3702023bbb1b2d5232995433dd3fd9f28fb5cc77b015b7c30df231ffda3b1fae39f94ab147c0fce552f45ffeaba5de8fb846ec0f65e6163ad376e4d39cba0b706977a5fd29572b7d4f3ebb6958b12f75f47b94c908f5330ee17c678ce747f1dd697bcd678de29d7a9f6fb5b70aef1a6188f41dee8bf36d6f7803b52cea0c775954d2fed36acf198822bf873ae5c26ea3ffd540ef91fcf276f2a8be97951f6a80f6e43b9c27e49ae1cf4c7fd900ccc3a5f3ae0e061b40f7d8354e341f1bc0d06e139a97a5b60ec273be52cd3facc87c6fa9ea16b30fc7585729e60fe9331c65b3fee4b3a31463ccec095c69b1e95bb19e2d736863d0fb6f8af1aab3db70b46fc69cf18efd51563dcc70363d48354393c8fd5ffb631de1fdbc638df5b60e8a58131f2f3d418f57868acfbe3fa60f3e7d518ef892b63dcafe760f3efb261f5af678cf3f6d318ef9b3363ac0f7d25fc7579c3fade1e19e33ede33d6f9548133e443698cfd367bf67e79341e0c226760ec1f5f802bbcb727c6782ff78de18fe9aba0efc678a0fe21df18e7cf6d36acf5651f8cf706211eccc8cf7b30ce2b1d35acfb81fd9714efaf96b1d65f3a36d6fb88614f72bddffc5bc35a8f2f8c711f2f1b235e88bf30f67fad613dcf99b1dae3c218fbfd64acf688c135ec8d1a567b4363dcdf5363d4a74439944b7d7f358cfbba6b8cf5049cc3fe8331dea76fc6b8af860d6bfd6363d4bb6763d4370263fffc9531f4540d6b7c6c7dbbcf4f8dd59eeb806be8b96c58f7f7d658ef474e8da1cf19431fea4f85face4bc6782fad1a63feb131f61fe7b9ca510f9d31f6db1b637f6c7e8ef7e2b531de23cbc6b82fea86d57fe473c5fa7ef60363bd4f65d158c7cbab31f49a7f35cedf8eb1c69b9e1b567be7c63a9f91efcdfdbd62ace79b7a0deb7ac89f3ad7f710dd19637cbf611dbf0e668cbf30d6f3ee9e8d51ef6d3df30ffed7d04fdbc6187f688cf188cf007a19fb39b0fc6d1b43ef4ec33ade98d1bfd9b09e2fe4eb6c465c6fd470ecdf1bcf3e8e1c3b71de55ae760377e186eed25db96b77e36ec3f75d68f71fbf75dedef89d0d710f6e34a73d7ef1fb7c1ba3b99fa72f7ebf72633771cf6ef4cec64bb4fff9f33af7d7876061eadedca25b7a6763f98bf556e6feaa1a7a6ec9f5dfd958fd3f74ac050deb6ec36dbabedbfa1b3a3ec7633b6ad8713fddaedbfb6063df1d8435573eb4c35f78d68ea2866377122c6c85cfe93b1b677f2b1ee7d0d0520d2e71e9071b7f1d8f76d4d07159d4d077b9ebbae29d8dea2fe351ce34902372bbc46e8b843c55547fb0f1a73a68e0a67441c36029c6812ee98aaea9a69b7736067f160fbaa521ddd13d3db89446ae1f343c062b4f34a6c9071d9ff7c55a8f424ed30bbdba34ee454ed3a0e18d1669e9c379f9420785bca1a0857ad4a7555a8b1a7cd0b01e2c6cfc72e606f3e2419b41c356f8dea61dfa196cecd25e8cc33aedd3c1a7733b9c6b614487f83ea2633aa1533aa3f3e0458b92cf679fd25f75c499eda0a313be33caa94b0595ec9898596832a77e0ce758d87123f6a1852b89077cc143bee42bbee61bbefdc2c61ffb72183ce8f11df5f93e5878e0113ff2138f79c2cffcc2af3ce5b7793678f1b386597ef1122ff30af7b8cfabbcc6ebbcc19bbcc5db5fd8403c78e6c1cfd07683963ddee7033ee4233ee6139a84d9a7a19df1f95c1bad391a124eb9cd1dce380ff3bb6176c1a53821e1af75bcd33012112f95d4e1df815cc8502ee54aaee5466edda1dccdb321f71f35c8838ce4519e66ebcb980b99c8b3bcc8ab4c6947de645196e6da38d0bd9065eac98af4684213e9cbaaacc9ba6cc8a66cc9b6ecc84fd9953dd997832f744043a88123390ceb1fc9b19cc8a99cc9b9b4dcab24b35c097d331de91c1bed593c24e4a464a1e5a175839e424aefa8ef89363dbb911734efabcf367c0d0dbda0a71f468573ec2f42966dd18e0f39ec2fd1ae663afcf53c1dfe26ea081afc6d6877a105effc831ff9c7f01d2aa21f43c324b467ff32676f5f82dad7b0e6d4bd7a7287fe2d78b0483dbf14dab25fe17d59f4bdd0fafe3a58589dab63cdbff8f5d836e4c06f86cf46a0d064490eb405da6afebfddd8f8ef3fbffd0fc8a6e071</data> + </image> + <image name="image22"> + <data format="XPM.GZ" length="4574">789c9d97595323371080dff9152efa8d4af57ac633634fa5f2600c2cb01ce63e5279d01cc636f8c0366048e5bfa7d5dd12c61c45c22cc767499f5a2da9edfdb156b96cef57d67eac4c6766d6cb2b79d74c2a6bc5c360f0fce75f7ffcbdb25a0b2bf42f88ea9570f5b795d5a35925af1c8c86a505a4fe15a8f2976573a31c29f7854d994596e196b9611fe699722e6c7ac25928fd4d47b80ccb84f9de725075fd61dd71c0f3e19d7010099b52b84c747c2edca12f1edfb01ca6611ea6dc5e58ae05615e0bd8d715ae5585cd403952e6f96a29318f8742b9218c1de55cd80c2d47412d8fc4df148eaac266ac1c697b9dd9101bf6e7ca0d619c2be7da7e61390ea33ce6cd42e5b8aa3c548e85e15a383705ef2754954be553e1221436bc7fb171e331f12cf19c2ba7caa572210c7bc2ce87c67212c64522be33e124103623e558188e857d7cbf1ccbfec2aeb0f343ddb1b69f2827da7ee558da91d79798244d24de48d8cfb729ecfd5b8e753cafaf5eab07f51af38b722c0c67c2ce67d0b1c6b721ece3d5f13e3ebe5ff58c7c19f3a972aabcab5c08c38eb0f7cd95d507cfca46fd7cbe1bb57ad190f847c28d401842e558b926ec7d6365e7cb9833ea2ff115caa9301c2817ca32df6b7c2d65f541d3b3e4ff5ed9e5efc9b39c2fae3f69d42852ae27f82c9c06ca27cab1304c84fd7c46d9f97b9ec5cfe72fcd697cce0ccaa9f258b910862361ef03cfb29e4098ea9df8793e13a58591784361d70e6dc71da96f9972a2ed43c7d28e9c1f931b63249e81b0f77595753c068e757c4dd9e87c1c7f16654956f0f844d9086355d8fb22c7321e7e2aeb7e62dbb1b6a7cc85f73d2a9779ccf31b617f9f51d8f9e0c6b1c67fa45c2a1f7a96f703ce5f1ee7a1f8615b3911c67bcfb2de3b65238cd7c23efe8eb29b8fdfeff2a270f52416f6f19e3bd6fe07ca3a1e1e3d73bc980a7774fff1ca33b71bdecf22a67a25ebd9574e8471a2ace711a7c2eefd16636517ffb1b09b0f0e3d4b3c5bca89f20373e9d68b3b8ed5bf2eece603edefd7b3a9ac3eb85436eae7f3634f93f6dff62ced1bcada1f787de5ab7f5fd9f56f29bbfea5b2fbbcc0f5a4f3ea6f28bb782e95b5ffd1ecff3c0868e4af8f1c9861bef0149f384aecf0ef9b65078fea527b46f3f4b08fb778675ffb349a019ab70eea3dc4118ef11e2738c519fd7cc0477cc2f9b2059fc9ffc27f35171d6c78a471ebd8c20ddca4678bbe7fe236eee0eea28522fc4511dce0dedb7ca8614ae3f7d5708087d8c6237a8ee955e32c784286535ae5199ee3c5abc31b2ea9778be3b8c26bac628021d630c2985eeb8a855631224342cf1ceb6f1c238ea1459606fd3cc614d01a00c090a78a3164ea78c13d9af10272ac43e11c58d01c3dce430b4a8e65133a70035d72f4c8d2a3580ea00fb7b2d3b486a18d018ad77c501473b8a3dc6dd0778bb3189363004330308231dcc3042398d2dc9a558aa129e763c1915114d6b0010f94cd6378a46c0614c113cce1195ea009403901587f7f46bc03c861f7e28af2d0818ecd264ca045860dd8842db200fc846db8fdc2d1a37361e7b759b0797031ecc02efc823dfaddc323d8ff2a0e38c0091ce2158fee421b8e348663388153729c516ecff1e9ab38e082e2bca435d8f360f7a2a9315cc13554c931267b0bcfbf88a3a09bf568b301760d938518ace19af231a1bd9dd25ce1670ece481fa7700836934f50234744793855c39c5618d309fff0fe2e38e690d0096d531c2d729c419d56609f393d0332b4a081d9570eb6ec424a67b4cde77b4cbbb963907eb76c0cd0a7b3f9491d59bafba7068ca1b3d4a6b340f7047a26a33cc494096bd8331f5a966b101458400a539af780eebcbd2353ec9bc2aed5d01b28d59e77968f6aa1b9c10b3ad5dba64b156cc8d5313337a667fae6966e6c7fd9b2900f5fa7b158acc96e37c97d47773521cb522c0b0e5fa73fca9b5a06d87c1fcbbbb5509db6b5e953cb1dddf9a558fcf978a61bc31160f333c3522cdea2677dbc58a7bf7e38960eedb5b7c867717a16ea3451f95f2cf279ff6d9d466386df88a549965b6b91ff63bdadd3df799cc58cf04ef3716e6330e3ef1a5e2d7061eeddbe2cd6e9ef5b6066ebdaea3fbfaffc0bcb04b0de</data> + </image> + <image name="image23"> + <data format="XPM.GZ" length="5502">789c8d97d952e34a1286effb2988cebb8e893cb62cc9529c980b838166315ed899988bd46230e00530ebc4bcfb4955fe250ccd99e9ae96cde7aacafc7329c9fee3c7dad9a0b7f6e38f6f0f4b594ef2b5fc4aeed77e148fd3e9ebbffefdcfff7cfbde0ad6f47fd088d682effff8f67db85ccbd70ee6b3b2025e2850c3fd73fc52735231790e8df9ce71e2990ec089eda75ecd36ff00ceb17f5071b3b267eb9760ccd3b17135dcfa99e3da3ea7359bbd39d8ef6f1bfbfdb40f0e9bb69ec00958c039fc5dd56cf39715070dcfb4675c0dc7093834e6cc711ac01fed7a0e52c73be004dc00e7e056c5ad6690b79a8e7f1ab71ae01370083e739cfa79cec13ede028c7869db73cbf9e3b2e250ed215f31380fcd7ed3386c18f3d8b1b4902f8a8cc33014c721383116175f148479e49a4f8e8ca38631af3b9610f593d0b3f9932de3a8017b9be0c8f6d346cde61ff6a214dc0517e0fb8ae3208a908f1b706af1c8d233d677c0456cfede8ce326f8d5b1c4516ceb1fc129f8195c188bebd7762b2eda2d377f6bdc6e1acb1b3802bb7ab4b3187a6408f67a26c6ed26faf1ba66575f7906c31ea535678e9fc02938001760771e92566d6fe0d9e2e1237084fe9fd46cebb73d239e47700a6ed6ecfcc90d18fea5f09c98fea9b1b6b3f10c1c81dd794db2a469fd4d637004ee7b4e2cbe393835e6045c809dbf344c52ec3f041769e8e6dbc669d3982ec011e65dfed33c29707e6e8dd326fa3bf70c7f31384a7367af04fb7e24cf36cf21b83016771ef5f8f97cb68cbd7d3900439f3c8153e82fc0382ff2e019fe22cf62f1c1be348d89c111e65d7d25177f5e72b03f2fa79ec5ec076001df804bdc5fb63c63dedd1fb3504aeb273ef09c99ffbe711618d3263836169b2fd49ecd67c659007b0d708cf373e7392b1c2fc062cc3d70692c4e5f1e79fb121867b1e9975bcfd0730dc67e3ef49c478e9f8cf57161f18d3c637e0f1c1b67eef99617827e97045cdafeccfc69bce89f0cecfd5f18e731fced7bce2dfe11588c791b5ca25f763ddb7ce6ea5944b5bf0b700c3ef46cf9ca266041fe7a35dbfa1d30fa21bbf28c7cbe1ae7a87f760946beb371cd56af1918f5cc0acfc8ef39d8c7f7e819fd0e3d455cb8f5e29e3745e9ed672518f66402467db3bc665b9f191701f27b0d8e514ff10c7fbb6029dcf73b1a824b6376df17cab840fee8085c96b19b3f352e03f4f7c0b3cd67ee7c971a0ff24d605f8f73b0cfffbe71817e942be332809e2518f37c52b3d5833d97b67e0b8c7ea373cf987f0597c6e2eecfe3b8d673665cf87a8f3c43df2918f6a50b463d64cf58f5dbfa75b0cfff5dcde6ffd2b3e54f080c7ddcf13cb6fc6f1a8f7dbd1f3c235fc79e51af37cfd83f04c7c6e29ef7e371ad7703ecf5bed46c7a4fc0e81f597886fe2918fd22c735dbfab1b1ea33ee80a187bb60d44b4acf98dfa879ecea2be031e2bdf76cf3c3e5af83898533ceb9e092c75fad781f5fdbe04bbed26bc2d77cc3b73ce5cbff6f83673ce705df7db8267ccf0fbce4477ee2677ef9343fe7d9aa0dfde49e5ff9cd5d6fdcd1f70eafeb671bdce54ddee26dfea91617bcc3bbbcc7fbdcd371c07d1e7cb031e4111fe2eae9eb915a38e6133ee5333ee70b6e70d35909b8c521471c739b134e3fd878e31eb1ce4744fa3a21e173ca28a7824a1ad3255dd184aee98617744b533766a4d17fb271c801a91fbaa305dd5719a5075aea1ebd56073dea78a2677d7da697cf3a38560da15a58f088e6eae956d7bdd21b75685dc7860e7befeae7aa46635a7cce076daa963eb78855cb962a22daa69f3a763076698f89f6555f8f0e54cb9c3fe950efba9b0f747795b516b7a9af360634fcf5d2884655663ee978550db1cba7e69c0e35e76dcdda3655f5f965d0310f758df6c9a7587a5a37cda846d3d32bd0cc1cd289fafccac69ebe0e2b2dbfd4a5a7165a74aa7938d4389e346f3f2b1d9a3dbd74c7bd7edaa5bebe9f39db4ecbbb0d3aa74dbad041da3b81c6d3a70b8da6f1373a9a9ab7c1bb96957c04ae7f83aa369a933e05d4321dd4818611748414515c558cafa85ddbe868655d4e5d2433dd176834c9d73ab48a23ed80535d95beeb10d6de9a6b7c6d579baa4baa8cec381ddd6ab5e544ffee547f0be910c9247fb741e79a812dd5d2af7a4b7312d14c8abfd3a1df054b19cba55cc964c5c64077579d15aacf394e95d751e563dffcebb5affd3e956bb9915b99ca6cc5c61107eab73a8db3eaec6a8502997fa5031ac6ba7f217772ffc146bfca92de17aa0eadf2325dc947df74d0a994aae14196f2284ff22c2ff2ba6a43cf49755fa93a7c2a6faae159cfec271daaa0e3342c74accb8674576de85d2ea815cc38a1b94676ab2715f9a02eef6b0696eeba954dd9926df9a93676566abbab91a4f2e6bae2495fab7bc7a37650ad4315ac6ad8d3fd5dd997de071ba7dadd7a62b52a95955b8da6ab770b5f97912ad8540d07d0d097810c6524872bf9186a55a7ae2766aeae7d5a97233a361dd070ac0a4e5441a5e154359cc9b95c7cb0d1aa6aabd9d43cb85c6c48436da80e9783a65e816a684143f51b2c96b6242b396dc9911fbabb7aadce558f06d030550595867445433be3771b5f3de7c83dd7e868258a7567a1ab5918a98276461967f26ee3eb519d812ccb72f7eb699c5dca6b76954d745c67379248a2bfb17ec3c6ef8cff6de377c7f7fffef9ed2f80c853d6</data> + </image> + <image name="image24"> + <data format="XPM.GZ" length="1947">789cc5d45b6fda301407f0773e4544ded0d4921b249af6405ba0a5e5da8b264d7b706c877b82038442b5ef3e1f1f9785d2292f936683949ffcf7c1b1432e2bc6f741d7a85c96d61bb29952834e486a54d876b9dcfff8f9edad54766c437ebcaa6195bf94ca1706357a49cce1da94d7665535e044d345f6157d491f986afac81b4d8a7c025ad52ab5d4dc29123a30d4749144d1870ebc05da558bda6af415091db8d674915da01338be1300ef811ef1028f001f8035bb66d56ce0005877ea5edd015e29869221f00ee83b75e6abd1a662e87bbe1a1d6906c8474d867c0106aecf0217b8410616926a7ac8992295a4c0966680bcd664c86720710346d4dc399258c885a687dc2b524935f7a049905b4d8e64c0d0253c547397c8d046b6356bc886229364c04c9320634d8eec00a91772ea013992da48a15943f61499a49a9b6812e44e93238740e651ced4dc08c96ce458b3865c297249f5785f14b4ff98318fedf38c494828378447d158f65cee98994ccd199d2f96314fa26835862e528cbd67d674335f6cb7592c44b293215909be279957ba3fc87745838bddeebd8eec3ccd65ccabeb837c9d641986c6ba523cc9676e9af32d447892afa316745cb319ce5a87761ceb1f5355ccd335cbd094dcdeed3b1d5da7737fbcf9fcfe440fe674d311aa8a0c74cff60742e35edb4cfb6a9b07ac75dcea93b348f96a37943de18dedfecf699c9e97897793c4cb51eec03e9e29ac6528da8f7f39535d298a92ac918f9c3f3fe970280e2791f3cc534ff07941a6cf45f65c90317b22a3451921962f4519b981a3e24cbb30b3e28d665126ea14d6b9f8f0e7fa3473defe59e6d7d7d26f4dc4ad2c</data> + </image> + <image name="image25"> + <data format="XPM.GZ" length="3709">789ca596db5222491086ef7d0ac2bc333672a09b6ee8d8d80bd119150795f130cc6cec451f4505e58cb0b1efbe59995935c880ab3ba61df291957ffd9555d5e187bd52e7a255dafbb0339ec493bbb49476e351692f9bf6fb8b3ffffae3ef9d5ddf2bd16fe497bcdddf7676db93525a3a7b7acc0d201040997f0c436c388cc328e4c170e73866ce0cd7925a54f3b9de779c30df2867ca9ee1ba6f19f62dd7a5fe5ab85e51be540e94af9813cb30742cfa15e5481816ca99e69f0c47d520f32bcc5f846d1ea696a32af35238aa687ddbb2e607ca81307e624ec38a1f71be2b6cf3008e531e7fa11c299f2b67c230331c571ddf5a8e456f2e1c57348f96258f67ca81729939b50c8563a99f28c73abee558f27de55c39359c542de367cb89d49f0a279e72a41c2a7f67ce2c43cf71c6fcac1cebf8a663cee3a172ae5c379c068e3f5a4e03e603e1d413865c39541e336796f1c4b1f8b9578e35df702cf3ed2be7ca35c35960191e2c6752bf14ce3ce58572a8cce72bcba34a55eedb48d8e58f1dcbfdfda61c6bbeea58f243e55cf9abe13c8c8240eef7a3b0cdc393e53ce4f147c2b9a7dc510e95a53e8f22d1c350d8e59f1d8b7ea21c6b7eee58fcf1792bc22853bd409846487e66b990faa970e129f3fba928e28ad6c7ca41c0fdc4443809e57d86a972acefb35c38f5f4fd73a71cebfba0ab9cebfd2f1ccb7de809679ef2ad72a8fc6059efdbbdb2bd7f13615a51c13c568e9547ca85707bf26bf1ba06c2cb58cdbc4563bd7e55e7a5de668d9f67deacb55d637dcc666faf696cabdfe6f0bf7afa7f7dbc759736696ccebf25ac0655c69860ca4ff63e15d1208514732cf096a2a04fc97b54e47f15f26015ba147744d9b633f6b3ba6a24a4708f0fd823855c57b4fd818d1a29cd6d14cc2a62f2d0c7c7579ecd1a09b9e89117a3f0b47d159bc3f9e8b18b140744431cb918e304a738c3393ed3f7435ce012f7b181071487f8911e703ecc7e985dfd4434a28a391e511c534d034f687c134ff133b6f00ccff102dbf8052ff10aaff166c547977bf1951586a4d0a1793ba4f2cda91ce0778a169655a5821efaa6372bfb627bf18c55aa9e63406be860488ac75863f7758cc84d0b102f008c06c42b1aa9ebc5982a86ac3183445764bc981e1c9a15418a67a4423e40cfb3f3617b31a739ab5437e72e762886c44bac41ce5d89c84701b7d0c56bb87ba1916a2f66704fe38d86e987f150350af000396934a1077d590badc4b7e7c4f9905e74a87b4b78a4da108fe04914284c570f756fca74240630b42e567c985e1c91db06552c48c5542f60a41ec6ac401d85097774fac385d3b0bd68d27cfb3032c1f3d7a80f63faae4e1ab22705cc6825d73f5c380dd38b2a8d69e221d5347817ccd3e03ea8075698f3aefaebef31aa37bd58d05a239ef180ea4eccc327ab69154c37e19676f552cec59a06d0ac3486469e428f2a4c5d139ef9f329f46937cc9938a768d33ad6de734ea341634cc70b3acb2d8e32df8e339efb82fa38008001dd929bd55eac681cc0021674f2a6b0a49928cc5f5852ff2b145730a4d9f7a90b3e64eb0a2b3ede159bdfebbf12bbfffcbef32f7804b985</data> + </image> + <image name="image26"> + <data format="XPM.GZ" length="6238">789c9597596f23cb0d85dfe75718c3b78ba0aed4da5a08f220dbb22deffba2200f644bf22e5b9b653bc87f0fbb7858e399892e90a929599f587dea90c5d6f2e71f6bd7c7076b7ffcf96d36e7f97db156dcf174ed8fc1e2f9f9e39ffffac7bfbf7daf656bfa3f6b54d7b2ef7ffbf63dbcae156b872fe3610972a14095f8af64ea38e7b5c89fcea3515c5f07d7b17edf19f149e4dce3d24b9cc7f5e7ce583f04e7888f9d11cfc005e2e28cf87dc9d58a5f2f357051357f77ce585f352e478c0f9d11af80eb16979bc8b9b2edffe48cf57d708ef899b3c5e919ecfb5f959c55aa85ad976be7ccfc7c3863fda5713962fcded9e23c00c34f68466e6775ac0f89db317e06ce8d69cf19d76f955cab7a3c1c828b5a35ae3f75467ebbc635f8a177b0fb7989dcf6ebc5d6b76b15e33006d78db970865e0fecfdb051725df56be6ef199c1bcb03b830a62367a9475e3aa37e2fc6f50ae23bced8ff0decf9c4f3af73bd5237bf67e0ba31b59d4d8fc5197adb60e4c30c869ff0587223533d8efc00ce8d6901f6fa9f1837dcef16b801bdd82f0dd56fc49b9f2e8c1b15e3700b6e203e77865e17dc865f020fa01fefafa6eed730bf2370db989fc103ec374c6cf9cc8c9b55ec3705bbffd8df4d6e569be66f046e80abceb87e130cbf21f653abd66c37cddf0d78604cc7ceb87e62dc723f15b0fb694596e6a015df1f8318b7aac6f40a763f7d709b8b588fe08c7a8ec1038bd38633fa3dde6fb9fab1faf101b8817cd8b9259109dc36a643f000fdbdee0c7f2fc639f2e5d89fb9fab37cf8128c7a9dcc9dedf3819f8cf3aaedc7f17e6bd773d423ac83dbb65ee2fb4dbbc8abe89789b3e9cb12dcc0fed5c4515f0ab0fb6b26b6f81378807a549c738b6f19b7ddefba33f2794b6cf52370a36df77307dc3696580fbd9de147dec1e80f0989cd4f6eecfa7c08f6f3db76b678d877b6fdc25562eba70f30fc845a628b7f8207f0ff9ed8faedc098ab32887c036e148de83fdeff5cd6cbeaf368cc55d3a33c71d40ba7607dcb89d7c7f727513f389f7563467ebceb0c7f3b6086fe7562f37beb6cfad4020f8d79692c19f68fef4f3260c6f9bf8187a8cfb533d6778c25c37e4d67e8f712dbf55be0a6b1c4f793a2c143e477652c19f6177013fbdd26b6fd1a60c6e7c70378682cf1fe2a06827a848e33eeef2bb0af1f1b1719f4eec14de370e28cf38efd38d0fd509fccb8688217ced06b248efdc3a760f7534f1ce3a1ed5c4496d8df8361817ce4c019e79b25b6fa5c3a43ff018c7cb99ed8fcdc190f32cb2f54c1eef7d6d9e27c92d8fc5e3a0f2c1ecf77d82cbc5f4689ad3e4367d47f6a3cf0fea924b6f5afce388fa3c4569f6730fa83379cb1fe3cb1e5d375463efb892d1ff8d78f1b8bcf135bfcd3789859be62fa43df4f3ec0380fd97446fc2cb1e9ed3863bf5a62cb6f1bece7d577463f72628b5f389b3f82de30837ff81bf2b019394b6cbf77e2e7dd48f383df4f67f859389b7ea883bd9eedc4e667e48cfe98258efb8529d8eb3b7786fe5b625bbf7436ff7c031e22feee8cfcf6125bbc613cca906ffcfe341a0dd11fb2e38c7c5a609c173d3ae37e39486cd79333eacf609c1ff97e7e7eaf892dff8533ea354d1cfdf2b9f108f5e7cdc416cf9d91ff4662cbffda7914e3827c467e3e93c4b6beef6c7a5424b6b8efdf84de0c8cf3e23d67f8e925b6ebd37abb3eec26b6ef9317e011e2ddc4317e320f1438888e42c740c7308cc26db80bf73a1ec26378d2f1ac631c5ec2ebaf236a5298846998857958e87cc358ea780f1f3a3f4327ac878db019ba616ba5c62c6c871d5dd1d3673e67cae5dc0d7b613f1ce8b3f2f9e10a0d09471adf0ec75f54665f544ec2695498a993b3bfd0e8459573a8ccc2053c74c365b88ad1f2f9f5ca5c6e54a31fd7554235a9ec46952cd4421d0ab3d008cd151aade8a31755f298d78f5ab49187a9ec5158a151c0877b398f0aa58f3d22e2a4300bef247fa1117d501177cfe31999c22029947349c3df5562cf8f4a1f7a7d3f65b41fcfe8846ef555f750ce2509ddd1fd0a8d1e14ec6455851e743e7ef130830fd5a0a7df7219ba0f2af4b1cca8a77d95c7f3d88c5d61b317dea28f677aa2f12f3e5e568e579ad0946634a705bdd192decb7ad0477cfcfc49a313c70badebdcf8f27743353655a34b5bb44d3bd4a35dda2b33518d7dfa749598cb880ee8908e92968f757571ac2eba74028d53d5f8a03375715e6a984af4714197e198aee89a6ea80fa5d24b4535aaaab19532395517c8248e4ef2714719d5a84e0d6a528b72ed8a3eb5a9c3415d549968aedfa4857a5cd01e0fd4c590c63f14a071afdf8e4754e35bbee37b7ee0477ee2671ef30b3c7d1de5b958269d9f6a7ac1af3ce1294fc39c673ce7055df39bea2c29e777fee04feee86347ffaec7feb8d38a767ee98f07de500d1b9baad5e5056ff136efa8a72d1dcb387b3a77a38ff15785a4f11afa3cd14eedf39efe5df23e1ff0211ff1b1baba55bae3139dfb7c1aebf9938269f099e6725eba2895745cf0255f6965ae79379419bea9b79b38fbbf2bc0c72357522e7ba1cb55ceb856feeee226b7a2bb4d9db9cef6ef0ad078528dd287ced095c01521619ed3838814fa9b666299ea3c90e12a0d19b982ee5c7a9a0a512decf0426ee5ceb3d47bf251eeffb7863c943e44ef737992e7783693f29386bbe15cc6eae405759ac8ab4c5669c854f45d58e65161024f0b59e829d7e54d96653ea5b2fa5895cb982b54c8bb7cc8a3d745e76698ca6754e9c83ab7cad75463958f0dd994ae6cea75e73f54e2b3bed6a4af55d992ed524576a4b7426357f6645f6b728c8921073a0ee5488ee5444ee54cce75af8b15b91ceaa7d7967e729c852605b9d47125d772237da9e86355472635fd95a7bf3356f9f8fdd5ff6f7cffcfdfbffd1765b20a0d</data> + </image> + <image name="image27"> + <data format="XPM.GZ" length="3277">789c8d955b53e25810c7dffd149479b3b67a7227a9ad7d60c60b33a38c78c5d9da87e424082828c845666abffbfebb4fb302826a3cc61fe7f4bfaf099ff62aadd393cadea79da77136ee9a8ae964a3ca5e31e9f7e77ffff3d7ef9dddc0afe0378e2bfeee1f3bbbcd71c5541a0f8392811c80e3ca8f705539b4ecd8fd842fd9cf948df21766cf758d67ed7f5af642e533e1046ccf17ca8972c9ecbb7c09fbcaa172229cfac64f8573e6c0f34de009ef5b0e5ce5483954fe269c82adfd0173e8856168f76f85337026dc514e9407ca46998be7447e682229263d588e5ce527e54879229c81adfd77e542f99e39f6a322b6e71f2dc79ef29d7016a7b13dff8bb91a54bd6a205c538e94a7c2393817ee2917cacfcc49502d127bbe6e19edb0fc43384fa2c49e9f2ba7cae7cc69987a6928dc508e94dbc2066c842f9553e543e542f982390bd322b3f6c67216297f1636607b7ea45c2a1f31e76156e6f6fccc721e2bbbc205b8100e944be5636613e5a589845b968daf7caa1c2b7f152ec0d67ea89c297bcaa5f20d731199b2b0f65dcb85af7ca21c2bf7854bb07d3eaf954be52be612bb652ccf2759e64bf66361ec96f67c5339534e99db71db6fdbf3a1b0fcd897c3472e72c8d9bcf3be066c33f99b93611d2ad6b5ded3804d496dfcbda50e75a94777744ffd5595ed1a3676280c603da0077a84fd23ee431aade6b54d03a79ee0bba431ee13ac47f8679529cdb0f74cf31795373438fa89c4c0f73b5cbfa8866c783d239acf0b954d1af48532da87ef311dc0f2908eb0a650a8c3ba8e08ea50f88afbb76d1a88a003fb07c4f19d8ee904cbc0e7881a5098d30f2c43a7d82fb6e7028d89d4624e4de43e85e23e9d6175d09f7359175875c4b53117e97f0effb7f0d584cf09aaeae8c5f3d1a04be465e3ea2223675d03e77a52ff0962b842ddc6a88b7651542e607f210a06f5b84696e5068d1a62e00e720c03565889f152ac39863eb5a43eafe2c0b93399c363d46182ff9db53ab1c211146e709fbeccd98b063efb2933f08c5ed4b80e6b0a2eac5da81fa30eb54d738a333c033d2c839307ebcf15f667aad0220f916cd668c8fcf570ea92fc5751b042200aa788a34fe1a659a708dde02b40efd715d83a402f5ae8e8357a1663f51653b6a451a0170d4c8fbba8f7ff0a2df13fc4d545ad5ced4d8daa6bb9eccb0c72ff67b8274b5361fddf88420cebfbc5d4ade6824fced1353b83475069b00aae53cd7f883af611438a33c5729e2b1a1e2c17fd77e17591bfa719f4a50e295675b386cee84c6258aeffc2ff9543b0e72bc41c6f799f426324d6ee4afe0bffb1c4c70a57fc66de92cb107e3df5df7af1af197431c139bacf4a77f6497b1d87e3c0628e9af611c195fa6f4af431bc07c4cf125799e768eb77037f6fc0ff35ac03f19f2296b9c41f22c3a56e6faba93e55297c1fa26ab1f8bf80cfb168ccb67dc7ad6a884a13b540ddc56e8867b890ff67d0fda086a8cc256bd630788738f219bf533facc116aa756967755b0dded2588aa77cdbf23d8df77daf68fcfbe7ce7f0d107249</data> + </image> + <image name="image28"> + <data format="XPM.GZ" length="1617">789c8592cd8eda301080ef3c45c4dc50b50b496883aa3e42ab1e2b553d0cc624c6eb21216177a1eabbd7bf210d31b538f863be8cc7e3795e243fbe7f4d16cfb3b6c34eb08455784a16bbb352979fbfbefc9ecdb334d1bfb44856f30fb3f953c2926f47e2660f7a0f4bbb0cbe194c37e97255187c3798add23cb5d1d663e1f0ec9139bc58dc84e8c1a38f563d6e0c760eb3a5433498afb2dce13660660b161e0b1755015d942c62c09347e67067709de6cbcc7efbe2d167963dda28b38801b9c7c2611330b7df5e0d7e4c73e6f0e870bd76b8b78801eb1ed160e971e3f0d5e0a72ce0d3c402bdc27eda01c02d223c7000d88eefcb6d055107c441b217869c471d50c4f89e315e46cf02c1253bd692498a3b8dce52d71c9be8bda0924ae7d1d5a8b8c38951cd45d39f34e134a890e3e1d6c1a97a4ed4944363e4d8d0f015ee1d201a45ef1c68094792cb387438e3750543a33bc0c84125fb3732c6b9d23784713dafe54de904e99723b8bbd74dd1fdc616793b7686d59a7eeb4c3cee80e448fae5f8a8e67f9c664b9c6a7ae0c09bd079de09c7fd193ad4888b22757de8208956f866c51c526d7b8dcf3cb8c314c4e7b9223f21fd5f13f36c7b3b5c13f32cc76374e79064583d76eca8fee7aca935fff379f617c93e5058</data> + </image> + <image name="image29"> + <data format="XPM.GZ" length="3613">789ccd955b53db4a0cc7dff91419f68d39a3c6d7d873e63c242df40a855ea19d3eacbd6bec5cc1242da1d3ef5ead249b1c92703aa50f874d20bf68f597b4d29a477b9dd3e3c3cedea39dabb99e5779272f75ddd9338bc964f9f9cb3fdf777603bf83afa4d7f177ffdad93d9977f2ced16c6a1d8042505dfa21fee4d84bb2d84b1c2bb7590569900429d9878e432fec861ed9cf897598849aec81e3c80ff38882a94be6a82bbc108e8481584769c4fe5ec386f37bd7b08d697f2e6c64ff3173ee33ab91e3d88fbd98f4612a1c097799f35898f28f35da59af104e853f0a1be1d0712f884d2fa0788ab9e731c3857024fc9e38eb7996eb39138e7a19f997c2a9f085b0618623c749907809c79b1067499ab03d66365af8c4711a26260d69bf664e3d61439ca7519a134f8553e1cab10e53a3693fe4ccda635633e148ecaf99ad2f7c459ca39df46026ac9915d9b350db8cf747cc992f7c201c0b9f121b64437c23ac85b5b015a6faf228b379443c67ce7d6635148ec59e121b64f25785b016b6c256b8766ca2dc1af61736bef0ab86a5df563816fb3362dbe6f786b9cd6fcc8cfbd9df6fb8288897c25aec89b015a6f9b7e8cdf70516ccd617be168e850f5b66ff0f0d176cef3117cdfee7c4b63dbf4be6d6bf2fac85c7c256f82973d1eca7797624f15eb6ccf596cc85cf7695b5ccf6817093ef13e2a2bd8f8f999348eec75be6669ee11b73dbbf17c24dbfbe32b7f5ed33174d3f2a612d9c0917cc27f387ad3fa901aa59bfabf17bbeab1a0f53f8731adb6af9d5335a3dd3357f0d19adfc7e9ddbdeae46c44f062c14700e2554a463b6ebfc7b3e24f7218c608cde254c608a4a19b2fb3bdbacb33e63b8ef826257924146f94ce0126aacee6a5de5ae062acc61815e53f1770a157c856f98d5355a96aeaaffa8e506fa12ff1cbd07f8eee3e7c7f004bfddc70afbeb2a6b1a0718ab2fb5b81c4afcfd149ec1737881dfbc8457707857654de308ab6695b128bc8663388137f016f37807efe1c3dd5cd6343ec22976d5a99c61fd19697c822ee69281073e9df4182df5adca9a4600214418a7c6ee34b311438f72f0e594f7b14709a48dca7a5f947bdd288dbb16d8515451197a7bad82d398a075899ddea2014395c38532cae2ae84545673e05562264b55b0caa61953e73055a5aad4904e66d2cedaedaaf0bc4658efcd660d5219c1195633c3484b3cbf1233b9ab52c2428dd51077a9cdcf53aca850133545158bf1ae316ab932fb6e0df03b0bb59a6dd3a05cf04cf0d69fd2ecbb5e8f319b6aa59a31aa5b9ca7ad1a7cf75065869dd658f9124fd16533907c2aba3fb5babc4f839f04a8720073acbbc61ef5f17c07b72aea0aa3ccefd76874705a0aca6441cf9492b2a9955623ece096be6cd44949c14d97c5139aa142a9169b67ec5e9d84fa31c2b989d464db9dfb059d0dcffaffdbffec0769fcf87be7270982f4fa</data> + </image> + <image name="image30"> + <data format="XPM.GZ" length="6366">789ced984973e3c81185effd2b189db70e470e011220100e1fb4ef1bb56bc2872c00242591d4be4ef8bf3b51f90ad39aa6a65bed091f1c664549fc9085572fb30a2552bf7c699dec6eb5befcf2e9ee5eeecf8b563192dbd697f2613279f9f59ffff8edd3e74ed6eaf45a71d46ec59ffff6e9f3de7dab686d5f4dab1af85881dafe55b3bb0277c1d79e33e5ccf3149c19f36ecd51bb5d44367e645cb79a6913dc35968ee7ac6efefe5570612cfd9ae376043d69376cf11563bd62f7371cdbf865cf79dc35a68d8673cf97e0cc985fc105e2173577a2b8e8449ed9b8d336e613cf7927ebd8fdb7e0027c537337eab6bb7ebcec83bb16775eaf2b81250a8cf17be0cc98a7e0a22bde8f1f9fc4dd0c7eaec045e21757ae8d93b68de70a9c589c1e3dab3efc16c61ab7f104ce8d25ae398d93d2d84d8cd308eceb954a1aa5367f064ec067e01c9cd7dceb047655c336df12b8048f8c7b1178c1b3eb25bd8ecf67059cf79ce76570692c0735679dc0fc68ec62d3e307700afd3bcf2ecb33afcf6bc622183f6fec629bdff97ae55d1d6ff30dc1a5319d19e749def58cb8201fba01231f4ec182fcbcffbcc8511fea05b6b8b8c079e1e387e012f11d6389a037d7b0f97b0527a84f02ae503f3f9f6e97b03e5bc6cdfcabc612d9fc3c0c2c96ef2e58ac9e14c6439fcac08817c62e463dfdf9219a8fc5c5f48aa0ef4a70622c3760c1fc8be00aeb7162aceb67f9ee832b5b1f3e6bd8e723be3eaef66f7e16c19558bc3276b131b5c121df4960d4e7c8588f1be303708a7cc4739987fd3b367629d63706073f93c0c8bf0cec8c8b864b7fff33b8427dd68d8b14f591c0960f6f81c5d8f9f3b348c2fe914330f68f1c83b19e726faceb69bc06c67c720e0ef93c07863fe815a8af0c02239f2770f03b0a5c249e3b60d483e1679082c760d487e16730005f04363d67f132e4eb8681915f178cf517362e309fdc0686bf49c396cf29b8029bdfb24c91ef088cfdc7997115f2cfc1582f5e0757c877ce7810839fc0d0e76b70d82ffef9289332acc73c18f3d3b57115f6ff7960dc5f8143bd7be0b01ea70ddbfc7be0e0b7dfb0c5178c0731eaf70c46fd9cdf1f65a5cf9bd5fbd1b88cf17c5c80f1bcc965c3e63f03877c93862dde0787fcf7029b5fba0b0c7f65e0d27fde22f35f35f5da098c7a5d81512f7a69d8e2c82fd48fa60d5b7dbae030ff867153afcd866d3ce60ff5e3c5c0a58dc7fc033176fe3ca9523dbfac7e2918e79324609c777204c67923a7c6cd7a6c376ce31fc0617de603e3f9990387f3edaa61ab0ffc34ebd30d8cfde40257a98f778c43fd45025bbd08fe2a3caf740b16f051c3363ffc87fa13356cf56d1b37f58f03a3de87e050ffa586edf3fa1d58c097e0017810d8f273966f15d6c78d03a3be27c64d7d37c078dee4c538d443a6e0705ee5e090ff5260f34f6be0709e8d0323bed5b0f98f8c433dc8356cf16d70a8c73218f5107fde0d74bdec7e7902c38f1018f3b35fef817fd5bc77ffd7b5ff861e13d35fa7a76ac28e8b9fd37c47af6ee5cff8fca31e573cf06a431e799fd5c734bfd1233ee70bedbf6b7ec8e75b3dbdf352b5c6e8a639f13ea77cf5537ad7aaf475ffdae70ddf7e444fd7f48eeff9811ff9497f5b7fe617ac8f789faffcfa01bd399ed7fea48af3bca04a8b3ac3122f6bff5db3e4155efdbe1e5fe95d73bca67d9d377893b7b46debb5257dbfa3ea0b6f7ceef2ee77f46e784fd5fabccf077ce895b6f5dd916a6fe8d5be46fb3ad3d73e8ff9f83d3d3ed1bb4ff98cdb1c71cc1df5167357db29279c728f33edb9f6be8e7853cfd97abac58884843be438a2fa555049150db45734d43ea273229d2daa470445ba98a5479734d671424e7526aa34a52b6dd774a34ad7da4abaa53bbad7f8d88f79d01153557b9c9d2fafeaa8277ad6bb6ee945db2bcdd13c2da8d2022deaf5312dd132add02aadf931f56c0bb44e1bb3f46893b6685bdb0eedaace1ef5b5edd3011deab523d53ad67e42a73ca433556d6b744f67eb53347b7d799762ea50575b42a9eaf42853dea69c8e85e949cb2ae2f4fb5ea9dfd006329491c6138a79e5bdfda2ab11c9b95cc8a5f6ba8d65a2196a93a9bebfa21355aa6424d77223b77247ab72f16deddeee3fd57c947b79904779529d27f5f62c2ff22a73322f0bb2284bb22c2bfa7355fba3accd7e46de9e0774a13eefd5d3ba2a6da8d2a66cc9b6ecc8aedcc99ef4b5efcb811ccad1acda7dabe73537d4e7b19ca8ceb61cc9a9f633551b4a5bd522cd37d62bc7d2f9513dffb4aca8cfae7e1f4f24959e64aa9349eed8911cd4ff46995dbbf7f5bce6aafa3c74ce15fa3bd26faffafdd59512bb811bbad1c7f5ea261d8adcb97a4cd5af3677e12eebf7efdff1fdbfe7badb6b9fe33a4b3751edc3d927d58fead5cd8dd4e7b0f6f967b5fb713daf39f53e87ee4fff2e7decf38bbbfef604fd4ff4bedffeaff73faef7afbf7ffa37f568f0ff</data> + </image> + <image name="image31"> + <data format="XPM.GZ" length="3549">789c95955d53db381486eff9151974c7eca8fe4cecd9d90b680b4d29064ada023b7b614b3604484220a1a59dfdef7b74ce6bc78424bb5b35110fb21ebd3a52c29b9dcef9c95167e7cdd6e32c9f0d4dc75ce70f9d1d3b1f8d9efffceb8f5f5bdb61d0a1ff49d809b67fdbda3e9d754c279b8c4b075a11288fff3956537004ae1cfb9e6bcc253812d681e3d00fbdd067f6c091b0ba11ce73f1699f39a5f194390427e02ed8807b8e233f3491f823e1c81356b970e20792cf8263611d33e75114e5cc0938015f808db01a0937f3bf3a8e83c8c45c3c7d2e1c7bc2ca081779c079d515b814d6a7cc799cc6b2de17b0155677c24589fa9d38ee06b1edca7a67c2dd18fc8d392716df009c823f832df8d2712fecf9bd90f988b9e8c5bd82f93dd882df394ec2244ef879a5844d80bc63619b633f7cbe4991a409cf57f7c2b6c4f3939a91ffbbe3344a6c1a318f84531ffc81d9d4f751df0ba7716a9853702aac34d862fca7e39cae8797303f830deeeb4cb8b9bf07c2a9cd65fd7de1dc07ff00c7e047661378b81f137082f31e830df8ae669c6f25dc7c5e8e85c92ff93f8273f0145c82f97e155133ff165c7f9e1e84f3b290bc4fc245007e0bee823f315b62cbf51c3a367189f55451339e9f335b531a79fe56b8aafdbb8e6d6c4a1b3397c236005f83bb60febcda9258be8f0ec139380797e03dc7253d5d769987c26520acd85f75aba092f13eb80bce982be28ab900e76003ae844f67ab9a565aad1e596eeb1c64c875f1df3c1b1c8536fcfa57cf6a07a77006ab4bee377ad63a0cb74a5fe96b32994d795639e8e921efe286e7deeabbcd79d63824c508bdd1633d214bb9ba3eaf1da885b47bf64cf503bd3fea1959e6e459cab3d2e1663d359eefbca7a9fe41efcffa2759765f7a961d34b247e30f54c9b7d46acf3bfd9edef7f5018d7da0b6cb79fae279e980e123199ef4a1fed4b2187d444dee8cf3143a13cb4b07eee6319f8121c794fb137d0a4ba13feb33760c1686b60319f6a9b993b494c555f20bcffeda588cfe46868273ec2def8538e331e739a60a5e63deb9bee0d99718ad775170f5e75ad50ee243faada77decf998e75f34092ef9f7322eed90e6ccdb39f83316f098af43ee8d8ed816f3cf83d678803371a7dc38b89a5993c33dd7e5993d6a6290f3a8c7337a5e912171f7b671f4695cfc5eb39ed7e41ef0fc7a5c6ae1ee48e3e054c58b1c2ffb41e3729c35b570b5c65ed8d96ff6297d86deb5b316f71b83a11469cb91b265b1ce224741f7417656739fcf7497cedc2cee183b52de5ff6aa2efde64e3a76e32e45abb5ce853c4af36965ad3c190c354b352987522ae7b50f1677acf6b4f2f8f4caa81619d6f7b9e714aa5046597e7ede76b43c079ca78f5ad475724637bf541539ae3807b795df41afebe3fa4c5df32e866a48ef46d13713b96e5639161ed4c7ad2f396865754bb3afe875877eb4cef12a4f9f32f0b7961aab09bd0cb7b1ba773b5aef58ae0fef44a9a99a724d37d663431e398764712eebffbe6ca88fe24c8a0c1397e3ff381acf5283e3efdfb7fe0120af7f9a</data> + </image> + <image name="image32"> + <data format="XPM.GZ" length="4574">789cddd6db52db481006e07b9ec295be4b6d752c5996a5dada0b20844338271cb7f662743006e313d880d9da77df56f73f0a4e2061b357bb210af531d3fff48c2c91776f1ba7fb3b8db7ef966ea76e7a9937f29ebb69bc2d6683c1fcf73f7efb73e94d2b6cc8df20ea34c237bf2cbd399836f2c6ee68585660125053ffa81d1cc1993a112795a9696e2566a7f38366d8c4f80446bdebd6b6f98577a0e3b402fbbc529d84898dbb0b38872fcd2d5f3f36473e3f839147981fb731deab1c36ebfa3bd8e75fd5b6f9d7e6a889f923d8afd7f746fdb0b6ad7f626e17989f9be3147958af13c0c7e604e36ea04ea304fd8c61dfdfc43bb4fa4d731cd87a7c08a770ec8df56ee002b6fe52df0f5fc2383fdef2c6f808f679fbe6b48dfe74bc15d4fdad9afd7adc31d7f507b0ef67684eb11e65b5ed7c77cdce615c3f5f2de907eb0570012f9b7d3daf9b5d80bc39ec60fdfc45553fe635735284a9d67f30d7f55bb03f9f356f5b9f5318f97ce46d7934306731f6a3cf43e43a7ebdb63909b09f433845fda9772b50bf37a701c63f7a63fc16c6f930e63b7f3e1b30fae36db8441e9ba55fdbff9e37f28e61bfdf7d6ff4dfae6df97abfdb61a788acbfaed9f7cf2db39ca77907461e1fd4b6f15d7316b6cc098c7e39f4c67e22d8d7efc1d82f3faa9def8f7be624889c3a82db663a37e7a19d379fc00ed6e72d0eebfac09c95e8b769f6f389e012f5e7b5adff07b5cbcab6e59d998b18e3d5cb9f3a2d57b6f59701a5e6bafec85c84387f07c7d8ef29ec607d7f76b20c79fcd93b36df9bf3d0faa147b3e499636fd4cf2a27ad7afe06ec2ccfb1b9aed7f74722eb755aea1d731ec209ec629bbf0e63be237381f3227d9ee5751a7732f5b577a2e6a9b98891a7fb4df3bc4c348ff5f97251ee30ff135ca691ce6f990b67667d5fbb3c0fe1391cc383dab9d6cfcc05e6d3198c7cd6f75526fd61febdb90c9d8debfb57b6eb7d0bc7f0436dad677dfe243eccdb6a7dbf166d6f0ae118e393da858eebf35194655cd8fc3e5c16f6ff0f3ddf32aeddf72e63f58ab91b625c7f5f95653d5e9abba199b6614950ebf977636f1ec3ae6bf5fafbb7db1577d5cb70d77c30fd775fffa50c2676fefa990ccea432e7824beef205f7d4d9eb3374ed4bbee2be245ccbd5d7a4010fab9e7e9ca1eb8d78cc13bee15b9ef28ceff85ebe3f884b9ef3e39714cbf87a9fbafe32aff0aa54ddf37b5ee30f72adcbb5215e95944dd9172d642cec517ad8d2848fb2f6b654eff02eeff1be5cbb7c203f9969cadcd7f83ef8d0f752f7f0893fcbba477ccc277cca67729d7393030eb9855e22aba9fb68735ce54a0f1d24249c121391a38c72deb28b0a2aa92b3933d96569bbf17dd005f5e852be5ff198fa744d034ef944ea8734a2f197cf074d2ad30dddd2946674f7551f13b97743eed33d3dc8fa737aa465993dfae6ac8856e4e7abf45e7ab9a9c6ea3ed6a4fa03add3867c0d346168eb3ff7b9d1944dda924f1d7de9833ed236ede8fabbb42709fb92907d5bbf907220f7ed691f87f4893e4b75957044c7550fdf7902aa7359a113e9e4691fa7d2c799d4cfe95cee45f3e51efcb948c6883617fa0828a4164592d2962baeeed17733aadd4caa137f725f62ea50223da44e02e9dcb17d5e5ece708e56163f1ff21fb59c2e9f5e72b70f5fea45120a57baee4206d97be1b9eb858c0b572e3e73ffec4b127aeed2f57e3e434ef38eeedcd5d7ef8f7fd443df5dbbfe6bde632f260cdcd00d169f80d767c8f9921bb971f57d71e475195a3fa9fe7dee19fc7186553e5ffd7367fabfcff8ebd7a5bf01ac66b48c</data> + </image> + <image name="image33"> + <data format="XPM.GZ" length="1812">789cad924d6fe2301086effc8a88b9a1554b480254ab3dd0967e51567b5c69b507c74e4a20e1237c53ed7f5fcf0c4e61a97d5a0b053ff293d79e71ae1bdecf1f43af715d5baec42a939e1c89d26ba87551ec7ffdfef65eab072d4fff42dff3eb5f6af52b4f7adf67d304e7a0e7d0a481f88a18f84133207378c490718018fa6133247c2114a10c05e21362d40a65d442bc2714d14d44abcf889da0ad3a01e22363c7673c207683aedf25dc238a50f82244ec21ca284ef8907d46d99611e29250c976eb06716190cf7c67502ac4f11185df455c196479522145ed105524139625a36a35091f0813251475f2f68809a3404cf5e0332715d2bb23839c1c1be4123283dce76985d4c9ad41eeb3aa905653839d18f1cd20373637c88d5d5728110b8331adce0c729fe70615e1a642aab73498a6f48d59061cff1d0e08f83f4eec7440afe25d034d3f7540240090bea5fa9908b0e48cb2f1242ff2c9381b5972b4344df3d97c96a753b09f1916c5bc9c174b70d405abf5a6dcac570e07b67aaf8dde6b6bdd0b926cb7c8d7f9629725d6da85ae7aabb6fa293eaf1d4a80fd017a71cfda43286feff6877b70dc9756faa838eed4a438eebd4ab9b27e631f2927e3dc818743ff423977b4f2f874a19c395a797e19bcfeab9c3a9432185e28278e2de5c4b1a67c38f694ca71a418c79572749c29ecb853d871a7b0e34ed1ce9fafb5bf980e8315</data> + </image> + <image name="image34"> + <data format="XPM.GZ" length="5630">789cad96594f633b12c7dffb53a0aeb7d6a86ece9a73349a07f69d242c09309a873a4b420849c8c27a35df7dcaaeb29b25ba4d5f0d6e68fd62fbef7f2d36fcf163edb27dbcf6e38f6f8b252d87e55a7943f3b51fd5c378fcf2effffcebcf6fdfa3788dff0579ba167effc7b7ef9de55ab976329dd4061018a061bf2c93722c0c4be1308e02cb57ca59945b0e859346b3304c5dcb99db8f7dcf999d3f55ce84e141d8ebed08478d58ce3bf44c960f94e3c4060337ca9930baf5a5f29167bb1f757fdc1026dd1f67a9f08b30c71359fd48380df2d8f29d709e9789e557cf956552ae8429331c341aa5c48b5d617ffe83b23b7f53d8e5138e85d3242f2dc7cab9f289703320e1b6701614e2178429103f5858ceccb0e70d85933c93785bc2cd5cf73f096789f2b36789f745380f84d1e6336c045a5f5c3a0e6c3f14a05c0ad3ad701a64d23f23e54418d685b380e4fc33e544e22d6cbec39c15a55faf859344f20989b0d3a347e54aea4977c24dcd2fa170a6f1d344b9d2fc9e3bd67c6c08e79a6fb2fd16055143ee0b6e082795f65347b81968fd326557dfd4b1c6db54ce8569acecfc9c0afbfce49e65be1026aaa45fb72d9b78ed7abc16a65ae669cf701c44a5debfb170eef4361d4bbcd81076fba1142ec2cabe2f706199f24afa834098fbd1ae2facbf248cca50ea371126ed27982a27b29e6cfed230d3fc90cd574aa9d61b9f9473e58572a51c0897ea8f2c3723370f73e16620f5a24439513e14ceb5ffa01226d2f86cbd9a05af97fe1d2ae7cabbca95f2967091ea7b315526655bcf2c72eb29742cf7153785f93a8bbf63e544e7757d49122f9e39ae53cba7cab530d9f72e2bdc7eb8f52c7e17cab93066ca95cecf8439bfb65e68ef5b1e677adff0593877ef292a6b3fd240d8e51323e1a2d6f7b52fecf4e15e3955ae3d4bbcbbc255aaf1ee7896799bffbcccddfdef29e7eab7e9d9ce63ae5ce97ad12f8b507f1f3484cb50dfdb3d61771ed9fc53ecf6e3a563e967bc1726bdcff8a0ecde83aeb0af67ac5c6b3f978e255e180857daef85cd37954e0fe79ec54f4f998469a65cebbc7d3f8ad8f348b808f53d182ba7caa970e9de179b9fa272f3547b967ebf5226dddff12cf96c29d7bafe55b8d4f78d48b80ab5dee7caae1f1265d27ad8df9765e2f4f0cab1d4134f844bad2f0e9453adf79e67f1b325ecf20d3d653d0f02e55afb6f5fb8a6bef87df1dcb77ad67f59b9f3e148d99d77a94c3affe859e65bcaeefec8793e1f64ff1eaa123f3f72acf7b72d5ce97da35859ef1b3d296b3c64ef5755fbf97dcf32bfadacf5c263cf327fadacfd0c97c2b5d6930acfb2ded6a74efdfe0d65771f2e1c6b3fcc849d1e4e94f57da07bcf529f75e17e28f5217b5f3858f79e4c3dcb79cfcaee7d1d7a16bd5b6597afcab1d65ffcd6ee3c7cf52cfd60fdf453b71fef1cabbfa5b0df5f29a73a6fdfcf7edff3c2b3d5c75259fb0f6be5be7067f97b03e1f367ab74109056adf5b35fd2c1024bacb0e6f5fdcf3bf8d3c117756e70c8e3d6abbdf16655465fd401ab23e3eead37ab32363a58ffa6ce102738556fe2e5deea80f8fce9ec173a13559aa9977b9cb38ef134c7c5671d394175965661aa0a3f558c9707fd7ec427feec9907fcd4e14f5ef015d7d5ef867a99aef022df8fd6cb266ee136d23b9d1ddcc53ddcb76a07788847decb31cf9eacf062545ad8c68e28f9b84ef18cd5f6789cb3da0576596bc3fa1b630f2f3f7859b0ca15abb4f927bcd3b9c60606ac1562843126985a6f47d8e41d19ffcc59c37b01b45eda9ffdf0174181d750420535f4318201ab5dc00d0ce196f399bfcb8b7869c38875e06ddd59e98e958cda18263065b57b98b1d221cc450916b0840758b0e6181e75981ea00f3a4ff00c2ff00aebb0c16393b5a6b005dbec680776596b097bb00f0770c81e5a9cfb011cc1e30a3fc770022d6843074ee1ccaa9dc30574a10797ac7505d7d0c00402aec121eb18ad16eb7cf063954288208604526842063937feb9f1c6e176f96f9702fad0e7bf5a2aaee5c80caae188eaf77e6ccd66d4a701ddd0906e690419ddd1d878a3897ae3bcd114eee99eebd8a319cd6c677df24373d659d092c7801eacdaa3f1c66a6fbd4de98975e6dc933d8e6ef4d18f7534312a7cbf6fe919a7acf6a26aefbcd12bf7bcf493e9515aa133639521adcb5d677f1b3c06b4f9d11b6db152132f39b2de2a3fbcf35914f876ceacca36ed988efbe06d976bb6c55dfdc0e3934e67497b46e1a70a1ed33e6becd0018c4cdf796f875c33f36a6cf1cd5ba57344c75c8336efdfa613de2f5e5ad4322a3c73426d126fdc7fa6b7d9d3a7fcd8d8fa48744a67bcabad2a07ecc6a80ce8dca860872ef88ecc8d8ebd252bfc785f5d56eb520fafe8d228bcf17245d7bc7b243796dd6faef6f3d91b9fd8712ae2851ab403b714705d421edd5fe9bcf5663cd015e72de2ff63fed93391b14a42a75fd37997b794fbc568f568dff881213529fb1d9d7779cb39fb7981460917c55fe4f92bdef84532359b17bfccf357bc1585d0dfd7793ffe6f3afffde7b7ff01db83b1d6</data> + </image> + <image name="image35"> + <data format="XPM.GZ" length="827">789c6dd1cd6a84301007f0bb4f119c9b14775d2d084b1f614b8f85d243cc8731eb76a1dd1e4ae9bb77c6980f57070ff9f3cb243aee0af6fa7262c52efbbaf1db209830fc9315f2fb72f9797b7ffacdf2c381e15335acca1fb2bc64823d5f3f14ad01d7b09f8ae299625dd5fb7ada2929b6b557eb625bb5354543910bceb9a038cc51b9d853ec1aaeba86624751487f9476517021290a8af2d1eb48516b1fb98bfe5ee522d5f439eb0228b70578079b82203685407a01ac25ccf780c2820504d1ba870524626001f73d11ee7a128862b027852066301674027e3a48f60cba8f1065c096c15a144915a40484de38c07984194c2f4737d1763a30998e761d7e7e5e7c47b83dcc0de68e149ca8758713395abb82494659c6ff16e5ef98fd03965bb80f</data> + </image> + <image name="image36"> + <data format="XPM.GZ" length="2269">789cadd4d76edb301406e07b3f8510de05c51f4bd644d18becd1ec9d14bda048da597696338bbe7b299e23c676560dc44a8c7ce6e11994e2a9c9e070732d989c6adcf665ff5405ea44de0493faaedb7dfaf5fbc79fc6441405f6276b05d1c4b7c6c4563f50c1fa65cf544069219aeee56c9c73cbdcf98c1db32fc8ad3871c920d92a91cefbe4bc90aab2d0e4222c63b7becb4e4aed3ccfd62a71f1ae7ed8f4f9cfd9395b78533d458e9b29ad37c96992972e1fd845e1ea8b92adc9d823d7fd629d6cfba5fe36d875bf07ec82fac5269bfbc71c591ae5e2459b5c469ad633b28a349d7fd7398f9b348f9064df2fcd97676141fd1d9365c8f572b6e1fc05d9e74fd9a9499db72b47febc84206709e5171db24ca87f44649572be7be722567cde6b645f3f21fbf8c5caad304952ba5f1d72a6791e4dce4349f763a5721c9686f7b7c8ba9e67d559faf962b236867c443611fbb072f212bfc0aefbfb59398dfc7a9f5d9fd7acb3f4fdb8fb99b74ac9f32eb3ebf967c84af2fec7caf6b8eafd616d5eef392bdfcf095bb22f2b4be5f7df92b5e4f9a62b97b19f7fcb597b3f91fd79dc54568989da54ffc1f965fdb9b24e8ce4f51d67e37dc736ec6befb6f35265937a9f92db11fbaa72dbbde8cbe8ffafaf8a8718335ea21c2b5e41c38c95bf8dceeb1a1fe43fc1a9ad71f65e3cce71e17fbb367f0f97b81aad3114dfc3b58da0eb06b7e8e3cefe3534c740fc3d1ef088273c631a3398c51ce6b1e0760cd418885fc41296b1829f58b5b16b58c706366d8d2d37877915bf8d1d9b77177bd8b791f3367e170738c4118ed1ac2b0cc45fd8f810115a88912045861c45152df0663fe7420889a690a2144a689b3b1bce3d1c2f0c4a7bd17b0925daa3b93fbebfa2339afbb3e76734f727cfcfabdc9fe41fef79966f7dfa75ff8fefc6fffddef807271766bc</data> + </image> + <image name="image37"> + <data format="XPM.GZ" length="751">789c6dd0dd0a823014c0f17b9f62e89d84a62218d123145d06d1859ee3ac0b0bca2e227af776f6a1db7488eccf0fc6d9d2989d8e7b16a7c16ba8871b30b8d64f16e3bbef3fe7cbee1b8479cec4b76159b80ac284013b3cee2ded1bb18fd67251d626ab82b2a3ac0aa3a0b2ca38a7e494501a8d5442ae142939871c4aca56252d3983b7a2ba11ff05890088e62240d24c2410f9a241902723f862817b9a0dce040ed8826d6b8125c8b926099320bd952405a3a07a46411a8c68106440cb08bc33a06409a420e21c8ce00cf4698a1c301310b9304e8de8c174531f92f0b70dfee366b514</data> + </image> + <image name="image38"> + <data format="XPM.GZ" length="2910">789c8dd6594fe3481000e0777e4544bda1554d7cdb1aed03e10a10eec030b3da8776b79d03128e041258ed7f9f72557504885d91c6e08faebeab87f9b6d1ba3e3d6a6d7c5b9bcdcd7c645b76681e5b1bee693279f9ebef3fff595b0fc3167d0541d40ad7ff585b3f9bb76cebf86e5a35c02e01dafc690cf7eab89d73fd8577c0f53855db40ea17e2a02d862776be6a1fa97375eaadfd056adfdf481cb443a9df53dba8603b7118c786bd54e7092f0e77c4519c48fda6382bca987dbdb263cb7af3bcb0e2ddc6417bd5dea8f354fca2b659c4de16c7b1baadb6b9f85c9cb4f392f7e7569d14329f637196e87cb6d47e7e736f9bb07fa89dfaa7384fd4969dd37c653f40ede79b8873a7ebed884de0a4fd893a719c1f30681cb6433d0fe8ab633d9f521c591def519c3963d9cfdebaff67623f5fb86417d41f9f2f6caa73f585da8a7126a6f1e43cf61b474168a3807d294e9d91f126623f3ef07aa322ca259f604fedf3eb409c05dafea1711c94a9ec07fe525755ca7e12db507dca3664893f6a9c84b49fb25eceaf344c9cec170cc569a0fba72e7c3edc884da5e7c1fb9b9a3491f503e74b1665899c2ff07e642559f28def13a54320f9080b75a2e6f3c94bb2c4a3ba50f37d2ae2dc49bec2545cf8fcbd15fbfd00be8f85a57a3e7f0075a13e533b35ef97890b3d2f78151bbfff95d8ef2ff07d30d624925f30561bf5b9bad2fceb895d584b7bbe6f656c2acd87137119aa7bea54cde75f3a329f07d46aa33e54576ace379b9446f3fb406c43f5913ad5fbfa2a76a9ce8fff7db18eeaa5bf6db5511b75a5f7376eec125be9fded8b5da8f976a74eb57e20aefc7ef0fd7595f3f99da98de69b53fbfcb3e2ca687bcecf8aae9b9e4fa5f6f9301357fe7e84ea547da83675cd1eab2b75c1ae9adfb073b551d76a8d07fe7b56a7b5ae0fef5696feaed8fc913f86ef0b021a7a4ab4e83ed67d1a6fb0c21a0738c4d197e201c77883b738c1e917fbbfc37b7cc0c72ff63fa3fee7f884cfb8f8bf785ce20bf55d5279c54dece0166ee30eeee21e763f8ddfa7160778883d3cc2638a3ec1533cc373bcf88ff82ef6a9c5255ee10fbcc69ff88ba2db1860f8593c461853e9f318579868df29669863e15bbc89ef02028081b219032cf79d82838a9efa633c0c60082318c30d6650e1126ea9efa079078705d43091163e9e7a1fc214ee68f44c5bdccb3ba919e3e16d3c453fc2b0993f8cb1cf7df66146adfa306f6648bf99d0184f6fe287549ea92c9afe286e092ff456c2825665e0151e640df2ff33d8840e972d6ab14dd1083bb0a4d11cf7b1cb757bd0c1aec4e31574b974a8ff98fa7ce607f81d294eeb7d3cbd5d3585e225f2f9ddcf0eafccd0c8beff825637a3f9eeebbcde972d38a0d51e426f154f2ba393edc33695970fcf11adf598ca98f6cecfc7500f07d4430d3daa7dff9cd0ee9cd2c99fc174157f4efbfc4a4ff3597e78a6b4570b2a2318493c65c305ed68f36c429f9ecb0f3ffbf436a0ef03daff7fbfaffd065501ab27</data> + </image> + <image name="image39"> + <data format="XPM.GZ" length="2061">789c75d4dd4fdb301000f077fe8a887b43d3914f27d6b40718fb1e8cb2c180690f8e9dd0022dd0a65098f6bfcfb93b5763ed3055f5c397f3f96cb2bd159d1eee475bdb1bb3ce74231bd9a199465b6e3e1e3ffef8f9ead7c666a222ffabe328dd7cb1b139e8221b1ddc4c9a1e587a4052f911931f7aa7716c63f62776128bf7c8dabb227fef9d25a94d79fe889dc559423eed9d9b3ccf0d39ed5da49995f901d9e495b862177141c522887541cf83eb5d664a8c27bdabac28324d3e24d7de9c2feeadf3522b8ed764ab9dcec9af7bfbf22ad9dfc7a5797f3371e847c22e13a94fb1755165545fb3744df359ef3aafd39ad6835bb2334949f3508be5793c131bae0f5a76ad0cd77bdcdb16a5937e2cd8cb7c97e250cf83d888ef97e6faf260596fceae53712756da92a7e2c69091f66b5de972eef79760c5fd31ec2ae17998b16bc3cf03b26d5a3bf29d58b1f1436f57a822e5f37dcf2e251f5eb26de30a32d5ef1a9dc8fae76c975a9a07102b8977623f68def66e9435725e13b693f3c3b15859ae6f286e1a4596e79b544cfd6a9a52cb7dfacaf6fde4fc376c2bfd84113bac07466ca43fc360de0fde2ecdf574c1b2bfcfec26e5fd21add7aad2493d3b6c5d48bfdeb1437df8466cf8fc719fbdacef82dda4bc3e8cc5d25fb8161be9ef9538f46b11dcb277c9ad7f1d717df7e2427c2dd6f2ff78152cef2faea7d589b8655b25f77d220ef7ff2e58f6fb2d58cebb1637127fc076e17e3e8ac3793cb1433ff0ad38dc9782dd2ad9ef48ec7ff8e53ce810fe330cd67fc55874cf3ffeaf0db678f157cc104734c2f725455ce1f5b33c3cc7df631f31e923f0e6591e2b9f11defa883b8a98e26c6d9e0ee77e957b8ec08735f52cf0119f7007777dc46bdc1b746bf6f506dfe23b7c8f1ff0237eeae756f27cc67d3cc02f788803dcc3a37f62b89eaff80d8ff104bfe3299eadc4f47b3ac718134cbd323ff235790a54586285da1f0280817a350f5870d0400b1730f41123b85ccd0357700d638998c00ddcfe1be3f3dfc11466d0c11ceee10116b058c973b46e50ccef971b7f008068e53b</data> + </image> + <image name="image40"> + <data format="XPM.GZ" length="920">789c65d24d6fa3301006e07b7e058a6f5195168c09a8ea21a54ddbc3aef6b8d26a0ff61892b84d68f3d9b0daff5ecf8c51a83220e4e7f5d84682eb51f4fbd78f68743dd8eef46e09112cf4261ad9fd6a75faf3f7eedf60186791bfe5248a875783e13882e867b3ae70ecfc58dc5021353229923c29902610980229e30424ed73cf9437cc39b190b9a4e60a99ea344f35b246aa442995209f9099ce6c46b30fc8899cc41389dc072ae6333297799c131f0315f39d683c0d721a58300f8196f9892cd2222e52e4315031b744f004e429d0321ba44e75aca9f92350313744f0a4e645a066be0656cc1dd2a4ba32b476cd3409731998312dd17a5a24046ae62ab062ce90a020e10ffa46b49001cd96c8da17cfb61d41215f3ad635fd27bec4f85c5da6cd6526405cf68135fdacaaaa7a0e8ba5e8f7b9d7b7d5ba69d6a6bfd6bd2f3e36db6627fafbb9fde178fc3cb9b67f86db4f5d7bb82f858fbb6cec1e1e5d39f3d7b9cf874fcfb3b66d67a29fb565d9bee0e39cf994fadcf85b76b19f5fec53d73fb78bf1fdfedf0ebe004832d18d</data> + </image> + <image name="image41"> + <data format="XPM.GZ" length="499">789c6590cb8a02311045f7fd15a16bd788da0e0e8af8098a4b415cd4237166a1828f8588ff6e95d571da9ed08b9c937b4975065558af16a11a14e70b5e7e39f00f9e4225d7fdfeb6d9ceef45597f07fda6a12e7b45d90f1c96c743b43de81e86af65488e93da511c79e4980c275f39bc73cc6136e4713e45c794786c180d53caa7fdce6a3b807f0e90a0e380855cbe1d44a68e83489265e3223309356d77da131611fa731642d4aa4b77897622a85595084d2e813611b5ad43be5c64d09f302b98bbe6741c93ef3bdc69145bf34568bf42e33edfea312b9e47677099</data> + </image> + <image name="image42"> + <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data> + </image> +</images> +<connections> + <connection> + <sender>slider</sender> + <signal>valueChanged(int)</signal> + <receiver>lcdDisplay</receiver> + <slot>display(int)</slot> + </connection> + <connection> + <sender>slider</sender> + <signal>valueChanged(int)</signal> + <receiver>progressBar</receiver> + <slot>setProgress(int)</slot> + </connection> + <connection> + <sender>dateEdit</sender> + <signal>valueChanged(const QDate&)</signal> + <receiver>WidgetsBase</receiver> + <slot>updateDateTimeString()</slot> + </connection> + <connection> + <sender>slider</sender> + <signal>valueChanged(int)</signal> + <receiver>spinBox</receiver> + <slot>setValue(int)</slot> + </connection> + <connection> + <sender>spinBox</sender> + <signal>valueChanged(int)</signal> + <receiver>slider</receiver> + <slot>setValue(int)</slot> + </connection> + <connection> + <sender>spinBox</sender> + <signal>valueChanged(int)</signal> + <receiver>progressBar</receiver> + <slot>setProgress(int)</slot> + </connection> + <connection> + <sender>spinBox</sender> + <signal>valueChanged(int)</signal> + <receiver>lcdDisplay</receiver> + <slot>display(int)</slot> + </connection> + <connection> + <sender>buttonColorBox</sender> + <signal>activated(const QString&)</signal> + <receiver>WidgetsBase</receiver> + <slot>setColor(const QString&)</slot> + </connection> + <connection> + <sender>lineEdit</sender> + <signal>textChanged(const QString&)</signal> + <receiver>WidgetsBase</receiver> + <slot>updateColorTest(const QString&)</slot> + </connection> + <connection> + <sender>lineEdit</sender> + <signal>returnPressed()</signal> + <receiver>WidgetsBase</receiver> + <slot>setColor()</slot> + </connection> + <connection> + <sender>timeEdit</sender> + <signal>valueChanged(const QTime&)</signal> + <receiver>WidgetsBase</receiver> + <slot>updateDateTimeString()</slot> + </connection> + <connection> + <sender>timeEdit</sender> + <signal>valueChanged(const QTime&)</signal> + <receiver>WidgetsBase</receiver> + <slot>updateClock()</slot> + </connection> + <connection> + <sender>pushButton</sender> + <signal>clicked()</signal> + <receiver>WidgetsBase</receiver> + <slot>resetColors()</slot> + </connection> +</connections> +<includes> + <include location="local" impldecl="in implementation">widgetsbase.ui.h</include> +</includes> +<slots> + <slot access="protected">init()</slot> + <slot access="protected">destroy()</slot> + <slot>resetColors()</slot> + <slot access="protected">setColor( const QString & color )</slot> + <slot>setColor()</slot> + <slot>updateClock()</slot> + <slot access="protected">updateColorTest( const QString & color )</slot> + <slot access="protected">updateDateTimeString()</slot> +</slots> +<layoutdefaults spacing="6" margin="11"/> +</UI> diff --git a/examples/demo/widgets/widgetsbase.ui.h b/examples/demo/widgets/widgetsbase.ui.h new file mode 100644 index 0000000..c4ed2f4 --- /dev/null +++ b/examples/demo/widgets/widgetsbase.ui.h @@ -0,0 +1,66 @@ +#include <qobjectlist.h> + +void WidgetsBase::init() +{ + timeEdit->setTime( QTime::currentTime() ); + dateEdit->setDate( QDate::currentDate() ); +} + +void WidgetsBase::destroy() +{ + +} + +void WidgetsBase::resetColors() +{ + groupBox->setPalette( palette(), FALSE ); + QObjectList *chldn = groupBox->queryList(); + if ( chldn ) { + for(QObject *obj=chldn->first(); obj; obj = chldn->next()) { + if(obj->isWidgetType()) { + QWidget *w = (QWidget *)obj; + if(!w->isTopLevel()) + w->setPalette(palette(), FALSE); + } + } + } +} + +void WidgetsBase::setColor( const QString & color ) +{ + groupBox->setPalette( QColor( color ), FALSE ); + QObjectList *chldn = groupBox->queryList(); + if ( chldn ) { + for(QObject *obj=chldn->first(); obj; obj = chldn->next()) { + if(obj->isWidgetType()) { + QWidget *w = (QWidget *)obj; + if(!w->isTopLevel()) + w->setPalette(QColor(color), FALSE); + } + } + } +} + +void WidgetsBase::setColor() +{ + setColor( lineEdit->text() ); +} + +void WidgetsBase::updateClock() +{ + clock->setTime( timeEdit->time() ); +} + +void WidgetsBase::updateColorTest( const QString & color ) +{ + colorTest->setPalette( QColor( color ), TRUE); +} + +void WidgetsBase::updateDateTimeString() +{ + QDateTime dt; + dt.setDate( dateEdit->date() ); + dt.setTime( timeEdit->time() ); + dateTimeLabel->setText( dt.toString() ); +} + diff --git a/examples/demo/widgets/widgetsbase_pro.ui b/examples/demo/widgets/widgetsbase_pro.ui new file mode 100644 index 0000000..4d74004 --- /dev/null +++ b/examples/demo/widgets/widgetsbase_pro.ui @@ -0,0 +1,1158 @@ +<!DOCTYPE UI><UI version="3.1" stdsetdef="1"> +<class>WidgetsBase</class> +<widget class="QWidget"> + <property name="name"> + <cstring>WidgetsBase</cstring> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>718</width> + <height>574</height> + </rect> + </property> + <property name="caption"> + <string>Widgets</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QListBox" row="2" column="0"> + <item> + <property name="text"> + <string>Applix</string> + </property> + <property name="pixmap"> + <pixmap>image0</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Binary</string> + </property> + <property name="pixmap"> + <pixmap>image1</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Core</string> + </property> + <property name="pixmap"> + <pixmap>image2</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Deb</string> + </property> + <property name="pixmap"> + <pixmap>image3</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Document</string> + </property> + <property name="pixmap"> + <pixmap>image4</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Pdf</string> + </property> + <property name="pixmap"> + <pixmap>image5</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Readme</string> + </property> + <property name="pixmap"> + <pixmap>image6</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Shellscript</string> + </property> + <property name="pixmap"> + <pixmap>image7</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Recycled</string> + </property> + <property name="pixmap"> + <pixmap>image8</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Video</string> + </property> + <property name="pixmap"> + <pixmap>image9</pixmap> + </property> + </item> + <property name="name"> + <cstring>ListBox3</cstring> + </property> + </widget> + <widget class="QTextEdit" row="2" column="1"> + <property name="name"> + <cstring>TextEdit1</cstring> + </property> + <property name="textFormat"> + <enum>RichText</enum> + </property> + <property name="text"> + <string><html><head><meta name="qrichtext" content="1" /></head><body style="font-size:8pt;font-family:MS Shell Dlg"> +<p style="margin-top:18px"><span style="font-size:9pt;font-weight:600">Richtext </span></p> +<p>Qt supports formatted rich text, such as the heading above, <span style="font-style:italic">emphasized</span>, <span style="font-weight:600">bold </span>and <span style="text-decoration:underline">underlined </span>text, as well as colored text. This is <span style="color:#ff0000">red</span>, while this is <span style="color:#00bb00">green</span>, and this is <span style="color:#0000ff">blue</span>. </p> +</body></html> +</string> + </property> + </widget> + <widget class="QTabWidget" row="3" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>TabWidget2</cstring> + </property> + <widget class="QWidget"> + <property name="name"> + <cstring>tab</cstring> + </property> + <attribute name="title"> + <string>Iconview</string> + </attribute> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QIconView" row="0" column="0"> + <item> + <property name="text"> + <string>Item 1</string> + </property> + <property name="pixmap"> + <pixmap>image10</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 2</string> + </property> + <property name="pixmap"> + <pixmap>image11</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 3</string> + </property> + <property name="pixmap"> + <pixmap>image12</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 4</string> + </property> + <property name="pixmap"> + <pixmap>image13</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 5</string> + </property> + <property name="pixmap"> + <pixmap>image14</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 6</string> + </property> + <property name="pixmap"> + <pixmap>image15</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 7</string> + </property> + <property name="pixmap"> + <pixmap>image16</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 8</string> + </property> + <property name="pixmap"> + <pixmap>image17</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 9</string> + </property> + <property name="pixmap"> + <pixmap>image18</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 10</string> + </property> + <property name="pixmap"> + <pixmap>image19</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 11</string> + </property> + <property name="pixmap"> + <pixmap>image20</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 12</string> + </property> + <property name="pixmap"> + <pixmap>image21</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 13</string> + </property> + <property name="pixmap"> + <pixmap>image22</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 14</string> + </property> + <property name="pixmap"> + <pixmap>image23</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 15</string> + </property> + <property name="pixmap"> + <pixmap>image24</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 16</string> + </property> + <property name="pixmap"> + <pixmap>image25</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Item 17</string> + </property> + <property name="pixmap"> + <pixmap>image26</pixmap> + </property> + </item> + <property name="name"> + <cstring>IconView1</cstring> + </property> + <property name="arrangement"> + <enum>LeftToRight</enum> + </property> + <property name="resizeMode"> + <enum>Adjust</enum> + </property> + </widget> + </grid> + </widget> + <widget class="QWidget"> + <property name="name"> + <cstring>tab</cstring> + </property> + <attribute name="title"> + <string>Listview</string> + </attribute> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QListView" row="0" column="0"> + <column> + <property name="text"> + <string>Things</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <column> + <property name="text"> + <string>Text</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <column> + <property name="text"> + <string>Stuff</string> + </property> + <property name="clickable"> + <bool>true</bool> + </property> + <property name="resizable"> + <bool>true</bool> + </property> + </column> + <item> + <property name="text"> + <string></string> + </property> + <property name="text"> + <string>Airbrush</string> + </property> + <property name="text"> + <string>What stuff?</string> + </property> + <property name="pixmap"> + <pixmap>image27</pixmap> + </property> + <property name="pixmap"> + <pixmap>image28</pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + </item> + <item> + <property name="text"> + <string></string> + </property> + <property name="text"> + <string>Eraser</string> + </property> + <property name="text"> + <string>Here?</string> + </property> + <property name="pixmap"> + <pixmap>image29</pixmap> + </property> + <property name="pixmap"> + <pixmap>image28</pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + </item> + <item> + <property name="text"> + <string>Pixmap item</string> + </property> + <property name="text"> + <string>Nothing</string> + </property> + <property name="text"> + <string>Nothing Again</string> + </property> + <property name="pixmap"> + <pixmap>image30</pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <item> + <property name="text"> + <string>Pixmap subitem 1</string> + </property> + <property name="text"> + <string></string> + </property> + <property name="text"> + <string></string> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <item> + <property name="text"> + <string>Subitem</string> + </property> + <property name="text"> + <string></string> + </property> + <property name="text"> + <string></string> + </property> + <property name="pixmap"> + <pixmap>image31</pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + </item> + </item> + <item> + <property name="text"> + <string>Pixmap subitem 2 </string> + </property> + <property name="text"> + <string></string> + </property> + <property name="text"> + <string></string> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + <property name="pixmap"> + <pixmap></pixmap> + </property> + </item> + </item> + <property name="name"> + <cstring>ListView3</cstring> + </property> + <property name="allColumnsShowFocus"> + <bool>true</bool> + </property> + <property name="resizeMode"> + <enum>AllColumns</enum> + </property> + </widget> + </grid> + </widget> + </widget> + <widget class="QGroupBox" row="1" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>groupBox</cstring> + </property> + <property name="title"> + <string>Group box</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLCDNumber" row="0" column="3" rowspan="3" colspan="1"> + <property name="name"> + <cstring>lcdDisplay</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>7</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="numDigits"> + <number>2</number> + </property> + <property name="segmentStyle"> + <enum>Filled</enum> + </property> + </widget> + <widget class="QSlider" row="2" column="2"> + <property name="name"> + <cstring>slider</cstring> + </property> + <property name="orientation"> + <enum>Horizontal</enum> + </property> + <property name="tickmarks"> + <enum>Left</enum> + </property> + <property name="tickInterval"> + <number>5</number> + </property> + </widget> + <widget class="QLabel" row="0" column="0"> + <property name="name"> + <cstring>TextLabel1_2</cstring> + </property> + <property name="text"> + <string>Pick a base color:</string> + </property> + </widget> + <widget class="QPushButton" row="2" column="0"> + <property name="name"> + <cstring>pushButton</cstring> + </property> + <property name="cursor"> + <cursor>0</cursor> + </property> + <property name="text"> + <string>&Reset colors</string> + </property> + </widget> + <widget class="QComboBox" row="1" column="0"> + <item> + <property name="text"> + <string>pale green</string> + </property> + <property name="pixmap"> + <pixmap>image32</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>deep sky blue</string> + </property> + <property name="pixmap"> + <pixmap>image33</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>steel blue</string> + </property> + <property name="pixmap"> + <pixmap>image34</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>powder blue</string> + </property> + <property name="pixmap"> + <pixmap>image35</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>sandy brown</string> + </property> + <property name="pixmap"> + <pixmap>image36</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>dark orange</string> + </property> + <property name="pixmap"> + <pixmap>image37</pixmap> + </property> + </item> + <item> + <property name="text"> + <string>indian red</string> + </property> + <property name="pixmap"> + <pixmap>image38</pixmap> + </property> + </item> + <property name="name"> + <cstring>buttonColorBox</cstring> + </property> + </widget> + <widget class="QLineEdit" row="1" column="1"> + <property name="name"> + <cstring>lineEdit</cstring> + </property> + <property name="frameShape"> + <enum>LineEditPanel</enum> + </property> + <property name="frameShadow"> + <enum>Sunken</enum> + </property> + <property name="text"> + <string>hot pink</string> + </property> + </widget> + <widget class="QLabel" row="0" column="1"> + <property name="name"> + <cstring>TextLabel1_2_2</cstring> + </property> + <property name="text"> + <string>Enter a color name and hit return:</string> + </property> + </widget> + <widget class="QSpinBox" row="1" column="2"> + <property name="name"> + <cstring>spinBox</cstring> + </property> + </widget> + <widget class="QProgressBar" row="0" column="2"> + <property name="name"> + <cstring>progressBar</cstring> + </property> + </widget> + <widget class="QLabel" row="2" column="1"> + <property name="name"> + <cstring>colorTest</cstring> + </property> + <property name="frameShape"> + <enum>Box</enum> + </property> + <property name="frameShadow"> + <enum>Sunken</enum> + </property> + <property name="text"> + <string>Color test area</string> + </property> + <property name="alignment"> + <set>AlignCenter</set> + </property> + </widget> + </grid> + </widget> + <widget class="QLayoutWidget" row="0" column="0" rowspan="1" colspan="2"> + <property name="name"> + <cstring>Layout9</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLabel"> + <property name="name"> + <cstring>PixmapLabel1</cstring> + </property> + <property name="frameShape"> + <enum>Panel</enum> + </property> + <property name="margin"> + <number>1</number> + </property> + <property name="pixmap"> + <pixmap>image39</pixmap> + </property> + <property name="scaledContents"> + <bool>true</bool> + </property> + </widget> + <widget class="QButtonGroup"> + <property name="name"> + <cstring>ButtonGroup1</cstring> + </property> + <property name="title"> + <string>Check boxes</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QCheckBox" row="0" column="0"> + <property name="name"> + <cstring>CheckBox1</cstring> + </property> + <property name="text"> + <string>Apples</string> + </property> + </widget> + <widget class="QCheckBox" row="1" column="0"> + <property name="name"> + <cstring>CheckBox2</cstring> + </property> + <property name="text"> + <string>Banana</string> + </property> + </widget> + <widget class="QCheckBox" row="2" column="0"> + <property name="name"> + <cstring>CheckBox3</cstring> + </property> + <property name="text"> + <string>Orange</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </grid> + </widget> + <widget class="QButtonGroup"> + <property name="name"> + <cstring>ButtonGroup2</cstring> + </property> + <property name="title"> + <string>Radio buttons</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QRadioButton" row="1" column="0"> + <property name="name"> + <cstring>RadioButton3</cstring> + </property> + <property name="text"> + <string>Sprite</string> + </property> + </widget> + <widget class="QRadioButton" row="2" column="0"> + <property name="name"> + <cstring>RadioButton4</cstring> + </property> + <property name="text"> + <string>Farris</string> + </property> + </widget> + <widget class="QRadioButton" row="0" column="0"> + <property name="name"> + <cstring>RadioButton2</cstring> + </property> + <property name="text"> + <string>Solo</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </grid> + </widget> + <widget class="QGroupBox"> + <property name="name"> + <cstring>GroupBox1</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>7</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title"> + <string>Date/Time editors</string> + </property> + <grid> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>11</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="AnalogClock" row="0" column="0" rowspan="3" colspan="1"> + <property name="name"> + <cstring>clock</cstring> + </property> + <property name="sizePolicy"> + <sizepolicy> + <hsizetype>0</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>100</width> + <height>100</height> + </size> + </property> + </widget> + <widget class="QDateEdit" row="1" column="1"> + <property name="name"> + <cstring>dateEdit</cstring> + </property> + <property name="date"> + <date> + <year>2000</year> + <month>1</month> + <day>1</day> + </date> + </property> + </widget> + <widget class="QTimeEdit" row="2" column="1"> + <property name="name"> + <cstring>timeEdit</cstring> + </property> + <property name="time"> + <time> + <hour>0</hour> + <minute>0</minute> + <second>0</second> + </time> + </property> + <property name="autoAdvance"> + <bool>true</bool> + </property> + <property name="maxValue"> + <time> + <hour>23</hour> + <minute>59</minute> + <second>59</second> + </time> + </property> + <property name="minValue"> + <time> + <hour>0</hour> + <minute>0</minute> + <second>0</second> + </time> + </property> + </widget> + <widget class="QLayoutWidget" row="0" column="1"> + <property name="name"> + <cstring>Layout5</cstring> + </property> + <hbox> + <property name="name"> + <cstring>unnamed</cstring> + </property> + <property name="margin"> + <number>0</number> + </property> + <property name="spacing"> + <number>6</number> + </property> + <widget class="QLabel"> + <property name="name"> + <cstring>dateTimeLabel</cstring> + </property> + <property name="text"> + <string>DateTime string goes here!</string> + </property> + </widget> + <spacer> + <property name="name"> + <cstring>Spacer2</cstring> + </property> + <property name="orientation"> + <enum>Horizontal</enum> + </property> + <property name="sizeType"> + <enum>Expanding</enum> + </property> + <property name="sizeHint"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </hbox> + </widget> + </grid> + </widget> + </hbox> + </widget> + </grid> +</widget> +<customwidgets> + <customwidget> + <class>AnalogClock</class> + <header location="local">../aclock/aclock.h</header> + <sizehint> + <width>75</width> + <height>75</height> + </sizehint> + <container>0</container> + <sizepolicy> + <hordata>0</hordata> + <verdata>3</verdata> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + <pixmap>image40</pixmap> + <slot access="public" specifier="">setTime(const QTime &)</slot> + <slot access="public" specifier="">setTime(const QTime &)</slot> + <slot access="public" specifier="">setTime(const QTime&)</slot> + </customwidget> +</customwidgets> +<images> + <image name="image0"> + <data format="XPM.GZ" length="2093">789c6dd3594f1b311007f0773e45c4bca16ad8d3c9aaea03f751ae7043d507afed25014220249050f5bbd79e995d550b321be5c7fc333ee2acae74ae4f0e3b2bab4baf533d1d9a8e19e84967c5ce46a3c5afdf3ffe2c2dc7aae3ff8aa4932c7f5b5aee4f3ba673347e720178e40171149938229fb0c3204fc4191b34b91706d9890d1bd78293280cf2b538135f928bc42405b9084ee3c6e3da694c1eb1d3489c928b344b290f20ee49fda331f7db0acee22ccab8fe4cd6599669f293b827de0ece933ccae9b06048d679c14668ccf91db1650306ab44c58af337e25cf22f64ad0ac5be175bf120b89b2adb4dc90fec6e2c3e0eeea5fef8d90b72d9cb7b25f95d5c487dd898ea40fd8bac888b8cea966c8aa230e479b0ce0aabb9de63eb980d77c165562625d713b16203dd97d2eab8cbf359712eeb89c55ae63f103b99dfb09b7ef47d9abce9f728967eb0106bf1bc319f47b7b6cc77c12e139e0fdec54a5c8ab5e6f5bcd596f5ccc48eeb40f7c9589fe7fa5b63aebfb24d525af254acd8d8af6d72f2a1581bae3f8a9d98fad9dc38cbf92bb6556ca0df8f75a65eef886d13f97c29f683ea74ff9db2f57c4eec9c22cfd82ee13ceada5c07bacfce99fa3c1ed856ee0718b196fd2ab193fd668db97ecef6f3717db331af977e2f55582fd723b6abf797d796cfdf8aebf3a9c45af6f3b3b6ec775f5cefffae76c53e6557b27f3c23574d7e835d2592df132bf1b47145de156ba9af37e67a25aed8fd290f84f6e0ffb7321a4b798c97e5542be3b092718703ff4aa94f7d2a1ce23da51ef09152a32ffa3ce19832439fbac767cef8acf5098b2fbea27184137cf5efa638c3377caffbf8fadc3f618e057ee01abd5bc70ddcf4a966aed08bfa6ce136eef85ebbb887fbf8130ffe5f8fcf0cf0108ff0d8f73cc13e9ee2199ee3452b637d8f4bbcf21daef1c677b9c508e35626f17b7af64fea671c6386392aecb6323dbfda0210b7014043890a0cd8f67ac0a1810aee60801318c23d3cc063eb0c5f60044f508575c0189e7de20526ed73865798c20cdee01d2f600e0b98c0c7a7ef62f4d558fefb7de91f96a1f1b4</data> + </image> + <image name="image1"> + <data format="XPM.GZ" length="1160">789c55d14b6fe2301007f03b9f222237b46a378418a2d51e4aa12db450e8936ab507c78f82cba33c135aed77df8c67129284837f337f7b1c715e7326a381533baf6c777c37138e98f28d5393fbc5e2f8e7efefef4ad5634efa0b7cc7abfea854cf1ce10c574b05eb79ba767dcfffe9dbd612d8e08d4683035d60c08330b09c01196792594e814d9fc9a60f34c8a687dc005b512b6c592e724640090c45188602380646927b4ddbbd2506b8f78ac8c306f08ba870af40462cb2dd37a008b2a306443a6a42e4c8d79c367c9311077590511d07bd1019724de438f789a8b8ed3e5bca88231f90a21e49e02391213f884a584640a9e0052aa062522906fc44aa3a767946ec8e2c95a06bdc23651d2fd927729c7b4d5422005e22d3932df739eda02e50a783f0923d22c3f090c8317ccc88b74a88f409ef19b5e50552d327b42d7516de21751dc377c4743730ce88dd554e0d3c103976b7396d571335f22c7ddcec49d7798da7ff3117ae740b3505bbdea73a2d9e725acfb4361f5ace0b3963b45e98d9725ecc4db55e7dae37e59cd1dbdd7e5dca697d8893e3d7bc34f7105fb42f3be5f3e2249976af4ae7c5a66dccf54d21179bc4f4bab3fe6d217707a574f6a0904b86bd6ebf7f3f1a9f6a0f8f4fcf2f9dd7c9f8ed549b9f9eeabf5f95ff44891e85</data> + </image> + <image name="image2"> + <data format="XPM.GZ" length="2478">789c6dd5d96eeb361006e0fb3c8591b90b8a39962cc9128a5e64df176771724ed10b8aa4b3da4e6c673de8bb979af9a9a4a7b5c2001fe6e7909465fbdb4ae7eae4b0b3f26d69be308b5bdbb13766d65971cfe3f1fb9f7ffdf1736939293acd5f18e9f26f4bcb8345c7768ea613df807b01d49557637a6a5d8a09cee0477119cd43b844fd05b6f06be3a4db7a1a9dc87abca76e2ef1059ca9e9415cb69e344ebb894dd55e9d66308babe04a3c864b35a7b085df1bf792d4f612f15cddebaae91ace50afc455b0cedf854bd4cf5bebfaeb8db3a46733ed3752675d35f7c526cbe08dd646bc0f97a8bfb5d6fa266cd5641ae769de45fd2c3a97379f7fc039bcd35af31f62d3d60d5ca19ec04e4db2df228de632bad0f9cfea22818f5bebfc1bb12972d45fe14aebbc0e3be4e5fcfd5e11fbdf47f77be227753f5193dc9f7eddcfd1ef21ba5f8bbb7085f92fadb57edab8ec9579a9f51371ddfa08aee0b5d63a7fab719595aecac40375955756f63713dbd261be575795d6791b76c84b3f9355e84f8770ec3f519bdc88499e6f13e6237fa036589f2fa335cf53d8185d4fce57877eda9f64ffb53389de1f5a83713fe81e36d84f017bec7f5f5da7e87f0b176a76d1b5ce1fc3a67692bf6a6cf376fd3d38ae7f091b78d85af3cfd1388f53d729f6770117f0366c707f0ea3757f740e7b9c479e6feb629ee6adb55ec31ef34fd536c5f9cee042cd196c6c2e9ec1de6a5e3eaf2eb7f1fec9f7b3f3ce38fd7eb7b087e5f3e60be77d21aed53e55933cdfdedb789e5db54bb1df5538be1f0bd8ebfec8aa7dea74bfdf5bebfa577081f50f60e3b52edfb7a3a2fd3dda513b9c9feed43ed5f3730e1bf48b753f52afaa47292cfb1d8d627f1ea9eb14bf67a41e45dfc2e1a53f9e83055318e6d7aba90c16312339c3355b0c17e435a5eba2cf35dff02dae3bbe0fff25f5d98747fcc0639ef0941f25f5c43349cdf53c92780e99177ee5377ee70f5ee5b5905ae70dcd48974ddee2ed30d6798777798ff7f920e40ef9087d9abd1cf3090ff834ece28ccff982877cc957fc3da43efbfc089dbb612461ad34647a61ed8c732ebe64fae1ac65189b5c11f390880cd564c97d66c8d348aeeb90d823e21eddd02dddd1fd97cc43488dc398d0941ee929e46634a7053d7f66c26a437aa1d7b046d3e385dee89d3e6895d6be6642aff5709a61486cd0266dd136edd02eedfd3bc386f6e9800e43fd888e438f5d3aa1c17f32a77446e7611f17e468489734a0ab5f333cffbf6bf9efdf97fe019b6f35ae</data> + </image> + <image name="image3"> + <data format="XPM.GZ" length="2013">789c6dd45953db301007f0f77c8a4cf68de92cb1632bf174fac07d26249c814e1f6449ce45127201a1d3ef5e49bb364d0ae2981ffa5bbb920cbb3be56ebb59ded92d2d9672395065d597f3f28e5e8dc7eb9fbf7efc2e550251b69f8d7a39ac7c2b553acbb22ab7a613e380330ba805b56a2df07e738e641445d21b9c63192731f9d55948a105b9ef5caf095daf794fc9f5807de4dc481b4983bc2a9c7a0f9c1355b51fde9a9c2489f23e714ea362fed85b179e93c306f7bf20e7fdc2982c83baaf07c08eb99f902d93c8fb9a6db8fe13391592ac72a7941f39abb8e8e7b970c3d793e450717f8fe4e2bc9be45873bf2b72d16f9fcdfdc2922dd98bc2749ef5dcbc9f2e390d693f30670bdedf215bd27ec0df87d2b588fbdb2b9cf8f9295904c2bf4c78c68ee97d80177212703f37ec98ebcfc8a9a4f384095985a9f6f92bb650b1f73b5b2a9ae7f595610f9d751c5523eaf78e5cccfbfbd7a69ef07952de4829e97c3ec85a6afa7b48d9865d73364272bfb824a721dfff393b7f1f22b20eb97ec2369af663721be17d403621d793b979bee56decfdf8f5e099ac0c9f5f8facb91f40769e37b9f93c05dbb01fc8b63ef9b230f5d3600bea0752b6e4fed68529bfcf3664c89c3351d40fc8263f9f3837d7afb20519468569fd0e3bafdf66e7e7d9cb9d916fc96ef8f5fcff972c2b9ebf67e7cf5f90b390f38a2d787f93dc59e67dca96ec8c9d913b4b1a08db837ebf959198f297b2d294daca18cc78f4b06fbffbd4466680431ce1338e7162e7a7f8e253b3cf8c4d8c708e0b3bdccf25ae6cea15df3632239b7ac7b5adf2817b36b58f077888479f193cc613dbcfa9ad7686e7e89e78c70bbcb4a9cfccc8f73cc4a65d658d2d9bb9c23676f0fa8bcc0ddeda4ec776dd3bbcc707ecfe9769e1a3ad33b6ab3cd9f92a06186ef433b0990c6bb65ad326229b8851607d6b5f2e73810d4c780d61af03363227202105856dd02e010632e841ffdf8c3b4518c010463ee1aeb407cf30deca004c600a2f3083397661014b18c36a3b83b3af46e5cff7d25fb0bce65f</data> + </image> + <image name="image4"> + <data format="XPM.GZ" length="1310">789c5dd14b53e2401007f03b9f2205376a4bc96b92d4d61e001510414454d4dac364262320aff010d1daefbed3d39d00261ce6d7fd4fcf4c715eb686bd8e553e2fac377c33169618f1955596dbd96cfffaf7cf77a168334bff986bd9c55f85e29925acee629ec07aaad725d7762bae692d801ef73c8f039740df71432702b60db92b305c42fa916fc27320e34c32c3113070990c5ce00419d8c80f601887516838cb19039f8091174681e163460c778912799bd3843b8622b2b19be6345d498c22011c13257207e45e24b907ac0063c96d3cc603d1c7c9d7441e99f02531c1510219b3d87443a0f0b351cf441a15103992e534e1bb8cb85103193bb8914f64c82d91e3be2e31e1a6eb19ca98236da470620974880cf94e4c84e10a287d4d1f786398648c91f0021360c2649230e0069938d8e519b1fb62a847e1a98648e9e01506448ea7ea1169df2ba49e6cf895d36cd4022abd115ea1496418be27720c5f64c453d5897485b78cca706fa89483ec13751f58cb88dd754e05ac1239763f739aae222ae4997e4ad9a3d7798debff988b922c1dd512f8ea6da474f190534a8ed5e45dc9e9694ecd26f305d596e92a5d426dbdd97e9ce47672f7b9ffda4e8fe72955add52f2e7fe6e4eeaa7192d3a97ab3754db5767ad36957d36e7a9bf6ee8e72b57efdbed9ea0d1e8ee6f5eb8f4ffa1d3e1fe52035180c5f2a879aedb89edf6041253cd4a687a7f8ef77e13f3e1c3a3b</data> + </image> + <image name="image5"> + <data format="XPM.GZ" length="2702">789c6dd6d952eb381006e07b9e2245df51537de245725ca7e6821dc296b0c3d45cc8b64c026401c23a35ef7e64f52f9f01a60ca13ed469b55a8ae0c74ae77270d059f9b1f4b4308b71d92947e6b1b3523d4f26ef7ffdfde73f4bcb91ee345f49b7132fffb1b43c5c74cacee16c6a1bf0dc8112379844deef8d5393a6a9f1a6c6caa85c79d36b631dc7ddb8ebc7dfbc8daeb48c3f36ce12a5949f8c2ec55a696fbe85ab2cf19e8ab3484c3bde45eb41e35e9229f8d8bb70f349fe13710ff1bc0be73df16bebc2c7dbc679dad63711670af5bf8b433eeac37926efdf80ab3cf53e12e7919817dea50af55d8bdb7c5d58215f24ce23a997185679e9f355702ea687c66e7bbaa9df2f3a15e70aebdd0c467d87621319f13aac609fdf94aa2bfb4d4371dbaf2bb8427ed81823f5ad352e52d5957e722e0efb4d637116497f79206eeb8bc526f4ef3918f56dc3b610fbf35354712fce7d7c2a0ee793cfc43ac2fc23715ea17f883711fa7f00a37f34870dea89608bf74fc5458cfa08d6e847198c7ab7605354de4fb015b36a5cbae388fa358cf3c307629d4bff0c89dbfa2f60d46f1836584fde5ae2d782d1ff425cc4585f0fd6387f3bb0c17a505f6165bdb4292ee352f9f80d58c37ebde5effd49c4ed7d70292e62e4cfe070bece83d1af6b7119a39f37c1321f295823be0f9b523c83ad98fcfd55a9a494fb8feec4aac27df722d6393ebff76213d6bf272e63f82358d6c38fc1a8af86433d27b0ad64fc595cc56246be4a63dcdf6f95552a91f32ff5d80cf5b1d46f7be13eb880c37d75262e713ef9050ef56cc1e80faf8bdbf917ade5efc7043670015bd8dfb7d6455bedbd2db631c64d30c68f602d26ff79b2368b707e3271bbbe5571dbdf040efb732eaec2f9da87c3793a0d967a08f95c07249fd4676dd88fe3d652ff3018f51fc2dacaf81e6c61fff9aa755b7f2ccec37d3b13db18fdefc206f9c7b0adc50fe2e6f1f6ebab6b172ff38dc4758cf11bd8d4b5770dd7e2e1421ea6af8ffcfe4b8ce102dfa55325515f622cd77cc323f73ae65bf7eaa3bee5a9f98eef79e27e4e79e6a3e65f621ef8919f78c1cffcc2af2eea8ddfff1bc31fee31bcca6bbcce1bbcc95bbccd3bbcfb29a6cf7bbccf072ecb211f390d78c8c72eaa8de1133772ca677cce177ce96abf7231d7dce528c470cc09a7ac5873c63dceb94fcc03223254480c9554b9c7524d3734a231ddd21dddd384a634a379c8430ff4484fb4a06737e78c5ee895dee89d3e6895d67ed743ebb4419bb445dbee75c745ec529ff6689f0e3eadaba2433ae22b1ad0908ee9844ee98ccee9e2730fe992aee89aba14514c85cb724e09a5dffa7c4d8a3465d47331b961f7cf207d8b99ffdfb3fcefcfa55fcb6370f5</data> + </image> + <image name="image6"> + <data format="XPM.GZ" length="2782">789c6dd5d952ec361006e07b9e628abea3527dc69b6c572a17ecfb32ec90ca852c79180e3b33aca7f2ee91bb7f99840a06aa3ed46ab5dad2f06361707eb03b58f831379dd9d9b51bb8897d1e2cf897bbbb8f3ffffae3d7dc7c6206dd77560cd2f9dfe6e647b3811bec3ddcb71de82c8086c3244f6bf1ae3a1b1656bc03574626d3a9b81abaa4129fabfbf97beab42a34fe511df2a9977b6bfe6d3847fe2bd8191967e4cf5dd988b17ee1eb5ce2c76a93c05b9d9361e2b41eaed47985f93b30f2d17b7495891fd4455169fc36ece1ad685d8fcfd4fdfaafe2b0ff2c11bfa9fbfa4fd4a6ae9db8803d7cdc391d96b5d57c129fd669ecefbe3a1b66babf4fb529b0fe3d1ceb9b76ce9210aff5dca98b02fdfd50c7f5f81df656eaa115719d3bbc2f17adef8b5b755194d23f4ed5a6403f315e259a8f479df3c4c4fe3ec0b15e592fb7799eeb7a17b083973a176919fb97ab2bdfe87c12dba2d67ab9569789d6c3ab708df536d475dd78c93fe96c52e3f1bee4bc1a6bbcf68bbcba8efb5957dbc415e29f9dcb2cccd7f59ed465025fa8abd8ef1bd8c3729ecb26e627995f8578f46b536d5bac77206ec2b8e65feaadf1576a9be8fe3883e3fc52dda44ec78f6003cb79aef3c6788d97fdd7ae8efd3f5487f93a7e0f1bd8c0adce27a9d7e6753cef33759c4ff27eacb3898e531e8dfb50c01696fc4d6e5bf46f51ddb45a3fc1ce78fdbc93f3d0789be0fe1fc3f1bcbec016f7a9815bd433523706efdf45e3fc3daa5decd79bdaa7ade96ce53e84cb14d7cf60ac6f3d6c61d75be337a351dfadba49b53edbc006fddd87add667096e51ff9adaa7e8cf4734eab562df589cc7126e918fd52ec5fd79860d7c0d5b9c87388ef7c35a7fe80ffa75071b5d9f5fe0564d52af6f1dce2fb1ba9fdfc02df6f3a96e4d2b66f9ff1484fdb28d467ef97fd186fcd86faaf6a9ee978e608bfd0da351cf656f1ddf8063bd87bd75fc46ddc6fa93de5a1ff2755f122fe363d3af3753b7b8bfb41e8dfb3685711ec9c216fb2518fde5ebe8b18ecbe7d978dc8f0fd5e354c7791736e3b178028fd5a3993e4cdf1ffdfbb718cb0d7e5c90d7a8ffc4b43ce62b9ec873cd3fc36f89fa8ae11bbee53bbee7077e94a8277e96a8698ce119bff02bbff13b7ff0272f86d1a510b5cc2b318657798dd779238c6cf2166ff34ea86997f7789f0f3486477cc8477ccc277c1a22b6f88ccff9822f79c84988d2989433ceb96013f29421e2942baec3d6892c351a438e3cb5340ea35d4cc8445734a16bfa4937741bf3d01ddd4b1d13cee881cfe9919ee899a634a3975833bdd21bbdd3077dd2222dd132add02aadd13a6dd0e6d7de698bb66927acb14b7bb44f0734a2c3107144c75f3121ea844ee98ccee942222e694809a594fd3ba67b5f94534186ca307e149e942aaabfc758a6674be1f3baa1dbf0b9eda9b6edf7189efedf33fff7ef73ff00aa8c7a59</data> + </image> + <image name="image7"> + <data format="XPM.GZ" length="2366">789c6dd5c95223471006e03b4fa1206f8423a7777587c307f6556cb3c08cc387eaea12abd000629df0bb3b3bf3af0e07b60a019ff2afaaec52233ead8cce8f27a3954f4b8f0bb7b8f2237fe91e462bddd36cf6f6e75f7ffc5a5a4eab51ff9534a36cf9b7a5e593c5c88f0ee777a107050125fae8cddfe002aed4b5b8d67c07d766de803d7cd43b4d129fdafcd29c1666f2eaba1f5affda3b4b529f59fed0dc0ff53a5c98e946dd881bad17700dcf7be7699ee4a9e65bb830f39abac9eb5cf3f4027bf8b97791e6beb0f9ce5c2430c18599757ee1c44e9dc3353ce95d66852ff5f079d55c26700697b0ae5fbab2296d7edabbcacaaeb2fa177395c2ef7009efa95dd55436ff19eeccf4d07b9c57588fde065bfe327a9c6b7d6a1ea7a8df45a3feaa6e639d6ea3adce677009df0f6ed50f70036b3f753eee6acb1f98e576312fd46d5dd696df851bd49f066b9df47c9aa28efbed9b9bb429d47a3f37be691aaf7eeced0a973aad93f6ebbc0bceea9bbddba2cd5a9bff19aecca4fdb49d4b6d3f7a824beb8fae6187fd7fc001fb7b735c8f93c19dfa1576663ae9edcb61bf0d38ee770c3bf868b0e57f465b3fc4e636b37ee810aed0df0eec70bd07703c1face7335faa67706526fd7bf0d2bfe569cfec335ccf3e1caff71676de7c030758cfb32bbbacb3f5b7d4c1c7fe56e1006f9abbd8df15ec3afd3ce4160e66d2fb215432dffa9b99e37cba80637f6338583f1ca243a5de36870cfbb968ab939e6f907e713eebe60ef71b6dc3381f5ac0f17e98c301d7d79803ce874f07dbfec77085feb66079e87afa7939edafcfaef7ca1c32bb5eba8bc6f95fc215f6fb0e3bac7f0ec7f3b8889e9a6bf574a89f98a719ea53581ef6cfcc06d3c761af7fc8386ef1f4a2ce521f3281a718177c29df3565f70a5ff30ddff26c582788efe4d9a7e676ff8bef653c0ce39117fc24af3ef30b32aff2fb23bff13baff21aaff3066f4a6e8bb779877787cc9eecb0cf073c91cc211f49e68d8ff9844f256599cffc45d6dd939e6565fecadf247326f573fece3f9049a49a72c6b9ac5270c99566c65c73438ccc26af1291a3960bf2d451e084a67441977445d73143247b1474439e8f2848e6956e69467734a79f96a17b5949067e2692b8a7077a94c4829eb0ce849e65bc4857677c26bbbcd21bbdd32aadd13a6d58e65fefc5a97471419bb2c6166d4b6287763f66688ff6e9802674286ffa111dd32e9dfc679df9ff8de5bf7f5ffa07d6011b20</data> + </image> + <image name="image8"> + <data format="XPM.GZ" length="2814">789c6dd55953e3381007f0773e458a7ea3b67ae24bb66a6b1fb8ef23dcb0b50fb264738600098130b5df7d15f55f6686dac930533ffaaf6e5976c53f967a9747fbbda51f0be38999dcd99ebd35afbd25f7361ccefefee7af9f0b8b89eacdff66652f5dfc63617130e9d9dec1e8a99983ae3d28e96755d20f1ec016de17e7b65f05ef05575dfe128ef9cfce92bf12e7393c9c3bed170ef965b12ad0ff22586755aa838fc48513f3b6b82a643d6fc15ad6f3cbdc5992f5b324ac3f16e7fd54e63d89ab44f6c3a7700167b043bf9368cc9b066b1de76fc21ad7b331779ee416f39d5817d83feada61de4ab0c9f3dc84fc81b84c72595fcf5da4d1dc8735ea2be24a63bd15eb22937939ece037b189fba16053e842d64b7fa312e9c747e232913aa773abd418eca709364a2ba92fc34e4cebe22a41fd7eee3253aecc829fc56502ef06d7a52bebe0557155a0df211ceb85d834629a3fdc5465ddfa75b14d5578f8e936d8f7ab64de21ace1cfced2ef0d8efdc2f3a3739de83c38dc5f6dfd03608395b856a82762abd02f3c4f26d70ef907b1298ce4cfc47583fabbd82af8186ea43f85fec69a44eaa4a2a51f6dc205ea256c30efa2b3d46fe046ccadb84ee181d82af4afe6ae739f977e1fd1b5d4d7c4752a66e46b050fc5b11f4fc40ed76bc2f3593b93e0fe9ec3b87f34830dcec3c0383f3a15d70afbb7d1d8dfb8b30bf3c2f5dba29b57c098675ad8c04d67c9ef46633f8fe23ac5f53838decf03d8c87e4c0de3fce9355af6c7b04d6d113c8315bc031b18f31dee8709d76f5d1defb78663dd886d2af3680ae37c6835da8aefe038efa6b3ec770437c8cbf93997c2e1fbda15b1ce65b40bfde859ec527804c7f9e1fbdf357ebdccd7e298e77358617d031b17de7f5cc30dbc266e309fc3fbaf514d8aba896e54382f0ef6f3719eb9d8e179a733d8e0fcd268d92fedc0d83f3d889bb8ffebce32ff12f67f82c7e216fba1f0fe6a55d7ff43dcc4f3de8ec679bcc3f17c0836e8c77023e6bbe856eae1fbbc6dbbfa95b84da5ce7bb06adbe05bb8150f26f261fafe91df7fcb18aef163bd9ca47ecb34dcf20ddf86cf1ddffb7f43ea2bc30f7ef5230ff9894721f51cfe77fc1233fcca639ef01b4ff99d3f78e6ab9f3eb5cc2b31c3abbcc6ebbcc19bbcc5dbbcc3bbbee71eeff3011f4a868f78c0c73e31e5133ee5333ee70b3ff192aff8daa724d3e78453ce38e78215977e52e5d76b7ff1444632549325e77f1a6a43e2956ee896eee89e1ee8b1cb0ce98946f44c2f3ca3571ad384de684aeff441b3b867faa4655ae111adfa1e6bb44e1bb4495bb44d3bb4fb75edb447fb7440877444033aa6133af53d76e88ccebf323e7541977445d7d4a7242452ca28a7e2d78c3fa51552545245da27cefc27376ce85b868ca1a9a9fd1bc7d1a37f8bb486cccdf70cbffcdf67f1df3f17fe031c788805</data> + </image> + <image name="image9"> + <data format="XPM.GZ" length="2862">789c65d4c96ee4361006e0bb9fa2e1ba19418d76890872f0bedbdddedd410ed4e66eef4bb7edf620ef1eaaeaa7e24c207b069ff9932c2ed28f95c1d5f070b0f263e96d6667d36a504deceb60a59e3f3c2cfefceb8f9f4bcb6136e87e9260102dffb6b43c9a0daac1d1d363d381460e1406611206e2545cb874d1d9d69da3200ab4dd56621305da4ed79de3302ab49d17ea3888436997feb1890be443efc888af3a2761ef2d7512a879ec9dc8789cc309ac79eb6ca5ff3b5ce8fcb6e99c4609d6672d5c845a4f0657da9fe1d4d7affd6d5245da9fd469a0e6144e51ff9b77ac9e786bbd740b1bd4efc733a9cc6fdbce5994a65a9f2dbd31df056cb45ecb62d71fed315cc3893a0bb19e356fecd7096c32b91cbc09d799b64b3d799ca5e83f867dfe15aef358fca1ce433812975988fd36b0c17eddc035f6a7f0d6fda06d753f5e05637efa80ebbc94fd90f10a571fd66fe15ae7e707b5efcf721f8bd2b753a2ce43d4b7a72e42ecc7339c6a3d54f596f9e9cebb10f3103685d6bfd15bf3725e26c9fd7e9ca90b83f516706d1271a336a1dacafd3255817af91cf6f76f556d501f4f61632ab1dc2ff7baf8fb1bc146fb73a036befe03b8b65a8fd46bab02e767a76a83fbc6a7deb8efefbd753f5f6177c1a57d5d6d53abf5cd3b976e7edcbf176f8cf7a8b64da9fb21ef57591bd4c333b50db11f9bde78df57e114f7ed0bb6babf740a3770d95beb1ba9cb089ec099d6c335dc94b558c6af526b71dff77bebfc536fdd0fdaf5c6f9bfc10dfa6f7823ffa4f6f5d08eb79e170de10cf7f913b6d8ef636fad9fe4bc2bb71eeccfbdba8ab09e1d38c3fb907ba3ddc0b6527fc20d2ce755bbf9701e27de584fd05be75ff7c6fb7f0837dace77ea2ac27d7a52d7519d8aa5febaf1ed3487338c3783adee0fefc10d7ca3ee1ec91f756eb2be7d4d5d47f0be37dee76dd8efe7b137f218af89747c6ebd9b4cf2f27e374d13e17bf3e88df55df7d6fe727f5ad71fe77de98dfe0b6f3d0fba8033b45bd8627e821b35bf78b7da2edfd7b6eddbafd46d84768633351ff66ec597b0859fe1563d9ae9c3f4eba37fd76f3e975c71cd0db77c83df89cb4c35a5f78eeff89e1ff8919ff819cf0bbfba7f25a5ef1acf78ceef6eacefa90ffe94d442bf2ffcc5ab2eb1e6c65aef531b2eb5c95bc86cf38e4becf21eefbbff0f903ae4233ee6213223d772e2463be5333ee70b377e97bae42bbe7629cd8c39e090238e39e19433ceb960e3964e64a9d48cdb9931555453432dddd084a6744b77744f0ff4484f3e23a9677aa1577aa319cdddf34e1ff4490bfafa37e35239add21aadd3861b67d3fd6ed136edd0eef78c8cb547fb7440877444c734a4119dd0e92f1972a9333aa70bba74892b97bda6f1ff32ad8c15b8ba428a28a68452cafe9b716bc95daa706318cb96acb5a57ebbbe8db390676cdd77dab6f6c64eecd4de2efffdfbd23faf5c83f3</data> + </image> + <image name="image10"> + <data format="XPM.GZ" length="5374">789cb5975b53e34a0ec7dfe75350a3b7a92d9dd8b11dbb4eed0381e17e09b710d8da07b5ed90102081844bd8daef7ed492da5c86b3557b9b9ed4cc2fddfa4bad56abe1b71f2b83defeca8fdfbecd17b418972be5881e567e548fb7b7cbbffdfdaffff8f6bd1daff0dfa8e8acc4dffff2edfbd162a55c3998ded51ed031404bfe08af1a27ca70a79cb43231867be32423e19972daea38e1abc0795bf8c63855c696729616a5706e5c181f08e7ec30177b32ce95c9e6933c11ff34554ed354e2c348b953b94a78c373d46a9591eeef41d90f61324e946953b9d137fbacd2fde29e72a77089f0ae71a50cb70dabff33e53c323e354ecb54d62f958ba8503db5cffd10ffb97292c41a5f6c9c1b6bfc79567524bfb4aedca9ec3cb695833edd18a7c63f1bd6fccbfab81595aa8fa5b21fb2bea39c56ed48f854394b8d41996a523de522cee342e62f943b455b793f70a2f663e5bc325e2a179132d4ca145552bfb06a5c5bfe77945d6ce7f3e4b91db55b165faa1cfc414799f5b59e87c645a5e7532a37fe5e955d66e7590917ed5cf703997211eaf152996ab527892f617dabaf893291ae873de5322b459fe4be24e4e254e3ab8cb33a137db96f699c94e6ef5a39dc078a94833d9d1867ca28fb4f1b3dba532ec9eaf3dcb856c623cf59ecc8f623f16654c6763f32e3acd6f92dcf9d36df3fade75e60aba74be532b6fa5d33ce94311176653dd4f86e95ab58f383278187439997fde7de5eeb7f57b9223d4f927ac85d64f50c0fca79a4f1d3a1e722c90bf5ef4a63bb5f0e958b4819526597e5e28f0ae132b7fbe74099d7eb7c669c1a1f1917d62f73e5a007a7ca95d50fa6812d1f72fe944489ddaf44b9284cff2cb0e9af1957c67de53a36fd8bc0aa0f6de1b2d13f57ce43fc7de3e0af540efad455ae6ad27e73dcb0f607d30bfed0e66bb2f314ff2ea1d4f2313526cbf720b0f6331819d7b6fe39b0f53b9bafad3f90bc5fae6ae69db28b8db71b96785d98cfcc5fa15c87fb830d6bfdef1ad75aaf20ef499936ef49a11cf4e9ded8f471ab619d7f0eacf9c44763d279780a6cf3b1716df3725fca2acaad1faa7dc5fd5dced79172b37e1058f5a0ab5c5abc80816dfea2619d1f1b5bbcf0d8b0ce2781ad7fcb7eab342ab59fe25239d863bf61ad9f993119ef07b6febf6e6cf5462f816d5edebfaa0ef3b8086cf353e5caea05260d6bff991bdb7b000d5bffdc37b67e4af2bed459bbb4f7665339fcbc0107ca2eec6f4db9d15f04b67e6cf6411fd61bd6f87ac6a1fe40b9b6fe092eb0f5c757e561acf50b6781ed7e0e1a96fb0992bfba0ef1c2b572e3ef4539f8c3bbc0ea0fbbc699f14ec3da8f82bdbd3778635ceb7d03a9ef61d6b17e8487ca8d7ddb38d83f07b6f773686c7a386e58d78f94433e70621ceeb79cc7709824767ec7ca6965efed4360fbf9f948997fbcd3fe38372eac9f55c695f5979e7251d97d3b0c6cfdb456a6d4f27fa9ecc8ea25522e433db694ab90ef57e5667ff7c6b63fac03db7bb36a3cd4f33f5afc77e3ffa3818084ee3fd7c0122bac71c8e3df5079af81576c3f62fbf1bf5241a7e32b0dbcc6095bde88cae8cf34f016ef70ca63f6a61334380bba87118f7bfef8887e51c1075698f358f098e1a3ae68349ef0195f782c25d2252bbc7ed6c055ecb2fd9ac4b18e3ffdda370ddc60bf2fac62dfb24afdab0a677c938757d13866b8e55798c6367bf0513436ac32fa9859dec78e28ece21eeeb3fd3a7b5c060d3ce0f587ac30fca0b1fc9859d6e8b1c6111ee3099ee219f659e74dc3b187bb8f71c8ee6f58c3bee37df82876f11c07788197d8c208e30f1a77bca28bed4f1a635668f3f78effdfe6287aac91608a1976388e1c0be0e344173400786df7bd06902974c1fbe8c94e7228a1821a86d8822b18b1c6b8d1e8f12a1fcb12c8a2d8e06c78851d99e9c1b53f1398c00debdcf2e706ee60ca51ccde69f42c9631677895631889f5fb1836a5ba66ec7f06f7acf0e0e3f075661a9bec4763e94a5ed47ff75d0c3d98c302e71cc9233cc1330f1fc5f2bd865fc5eb5e2c1ef9185b0cb060fb092ce11556390f5dc9c512d654c35703ac9bca35fc840dd8842dfea6d7e461ae3b816dd8815dd8e37f7d0cefea432a6a9f57facf011c420f8ee0184e6022114875fb1870ca319cc219f4e19ce319701c8fef35e002e7e271032ea10511c4d086c4ab400a197420e71b3265ffa750101210115732956f1a12c95cf6bc49155cf26fe343bae2dc4d684463baa609aba438a31bb6bea53bfe774a33baff74f71defce677d8b1e684e0b7aa4277aa6175ad22bad5297d6a0837d5aa79fb0cd0a1bb4c91ae5470daf422f3865ef279cd113baa22dda668d1db6dfe5cf1eed93e376bdcebb98d2011dd22f7dcc723263ab2768730c3d3a8227e6255b1fb3c6099d7a0d5671fe17571e67bf6a888aafdd3ef5e99c06e4cf6f411774492d8a389e98dabe26f8db180694bcddad4f6f838381f4a7be7dbce205c7b0c36fb068f89a6085ecebbede64c559f5c8c7fbe55d7428a742ee29d796c38f3df28b778e730553f686d2ebbc5fe433e021d9283fbe2d5f6b041d07307524778263619cba2fecff5c23e87c1e5faffc9fbcfbfffcfddb1f4bcc6304</data> + </image> + <image name="image11"> + <data format="XPM.GZ" length="2127">789c95d44d73da3818c0f17b3e0513df323b2d7ec59e9d3dd88eeb80430a69094977f6204b328a3010c020a0b3df7d253d625b3a21d9351cf80d7fc9aff2c7abd6e3a0dfbafa78b16e50f38c5b98a155eb8a6c66b3fd9f7ffdf1fde2d2755af21b382dfbf2b78bcb0f2ddcba5bcca9facde56fabad37455f336ce376a8d851b443dbb335b1a26bbb6d57cff34533723d3752bc33c440a4e8d99ee7e9b8d4449248d1320c819f157dc76ffb8ee227c5c0f149a0790b0c7ce0574d24a9c74e0d23605bb1e376fc8eab38d62c3b51a754740c09f09b62e88676a8e307cd328c42fdef8b21013e29465e48224ff11918d9c047431fb8d1c49258f1de30022e0c09f05a117911417a2c03221b3830f481074d2ca9c7760d113030a44057b1f4102df5d83eb0748013c30038d7249244b13144c09d21052e15b15f52ec2b6640ec0053c300586812493df6c61001678614b856243ea6448fad80c4010e0d03e048934aeae759182260624881b52295290d14732075805bc300186bca94eab13d4304a48614b852ac645ae9b17b60e5003dc300686b5692952231ac801fded94e1a0ba94ff9568309a1d5843d5ba575aee17c3a25b49ecdd9e2c542679a2563b25ad17addb00d7ebdd98a9daee85e5493037ead913b8b935457b110cd353e6d9075acb675c6d8a77c2b6ebaa70d26cc2a8f554f14b7795257fdbb5f9a7c79c0f858b1cfdb3a1119c33f379cecb76931305539cdf25a0c8bfb2f278d3c97b82e32a8beeee4aee441df9fcec3a6641ff7f24cce8ff1aece733112938731ffb9c998ba2a7274d52c9b91c885a8d78f4fdfc69cff38779eca485ee19548442dd49ee25df7c0364f6d75bea6b1e54c63a233f9e989753a9f34937e77f1324696b9cedcd617586572db564d3613d53a6bfaddcd8373bc17dc4ed24c656a1b0feb2adfe6c32acd26ee60f1effde2855727c5326bdcc1f3e3741cf7621a27a359b19b777fdc539f679ea8864dc01e0ed7ec76dcdbef7bb9a86eb2e6f4bef35def663960bbf5925dab8393d5a82a7e79e639efc8b2c94749c1f499ca1d0e5f5d179ca77652a76ca0aa557e66edc86a5feb074e5667d7d7712e59bdb106392fe45cf2b8de5ca766ae77d6b23eae77d7bbacfec33b81ffeff7c6b9e6efdf2ffe0193880354</data> + </image> + <image name="image12"> + <data format="XPM.GZ" length="5054">789c9d975b5322491085dfe75718936f131bb974030dc4c63e78c70b2a828a6eec43d217c52b228ab2b1ff7dab2b4f96ca30bb1b634beb67569d3a95555dd9fefa6d6570d459f9f6eb97a7a94c47e94a7a2593956fd9f3dddddb1f7ffefed797afd578c57d478dc64afcf5972f5fbbd39574e5e0e13e2f81c90155fc57c972024e2b4d1fbf308e34de578e2b71cbc705dcac469e53705af571e929b732a9954c236589943902d725f5bc05ce95e94c79180fb5fd333819669eefc1b93281d3187c659cd67d7be324d538e69f0ae21570ae713e50ce62f02658326dff1a58f33955cee33cf1fc084ec07760c9b5fdb57211832fc149a1ed33b01485e721b85026d56b365bcdaa675d8f66c8e7213847fede9443fe26e01cf3bf51b6fc700ece75bec42547151b4fba8187befd39385396a9722b427cd57333aa45babf364aae45b54a4df7cf9a67a9d56ae2791ddc04ef969cc4f54c59f63c4b3dabfbcd2dfbca4904ee04d6f607e03ae2d78155bf5972a39ad431dea931da3f07f6711a805b60fffc348689f9b90bace31f1a273e4e37ca0df377648c785172b36a716a836dfc29d8c6ef1a27ca7ebce6b05187de1cdc024fc0f023c7c60ddd4f35e566a47af25072abd6347fb3c03ade35b80ede3386de11b805de0aecf7078d3da7a1ff061871ae8233c4778da1b71658f59e955b11d83f3f6e3b59fb2765b73f753f6f82cdef4360edbf6a8cf66f60f813ef47528b73076ccf8b8033c4e3c0da7fac2cf04371609dbfcfdfb066fde545d9da731158f5e660f3bb1358e36cdcd2f3610f2ccae2f7db3013d1f6543546fc129cb7fc79237ebdd2bae4186fdb58db937ffed2cce2f4aa3c8cc1eb8175bc477002bfc682f126e01cf5645f394df4bc235f8fb2baf5e71a18f3e163b0f9bf524e639c9f2d30f4f80c2cca42609cafe2fd67791a233faf81557f0b9c806f8dd5bf6460013f19eb792d2330ea9df8e72f4f42fb1b30f2411563f8df56ceac3e76c0899eff6471417ddc3446bd7b02e75aefe845398f95c5e73bcf33abd77570827ade34c6fa3402eb7c8660cbef6a60f593806dfe6bc6a85f7363d4abbe728efa4fa781b57f618cf93d04d67a7c0b4ec02fc6a8e75d30eab9f8f78f2209f3cbc0980f5d80e1577265f3c33db0d5dfc418f33906633da81558d7e3126ceb736b0cbf3b81753e27ca45acef1b043ff6fe417efd8ac2fc50648cf1cfc1b65f7ac688ef07d6f11a60f8e3b631fcf5950bbc3fd14e609dcf1b3881ff8131de97c66001cf02ebfbd3088cf7a7ee94a93bfdf9cb6b0a0f997e5ec76ba49c71cec5cfaac0c7255f398dd1ff51f9de317c5cf38dd7f80f95b23fdf2ed510bee37b68fc50c5f77fe0b1bb96fb78e449d058aae2fa3fb9c8d87f96fb98f2f3078d0515efe02528cc7ee0e395df3e697c5071fde7aedf7b64ccabbcc6ebfeb3f1c1c7266f2d6840c5296c73db91a9cc788777798ff77d663a652bf838e0433e5ad0e8fa391c738ffb9f7c9cf0a9d338e381fbbdc3e77c011f158e38fe4ea3ca35ae73c28d4f3e4eb8e9345ace9df3410c8d9488c4692e68d09052ca167d504e45e9832e3ffba02b1a2dd1b8a6d4f9e8b911677e4d663ea303ba29f341b7dec75df0714f420fdf698ce9113ec66165474e63f2231ff4f44961c62f34f13eca7c8c3f5c039a2ecd47e9e339f4f63b895e6846aff03178d7a0379a9b0f5a5df0b1e6f7a01fc98df5c64f34a575e4c3f5f47f2b3f63efc3e7831e16f2b1612dddbdefee9b34371fbe67f87cf0f1bce063cbb7edbbfbadbb37689bdaf4aaf970fd764a6dfc0cf9a0dd857cecb99eedb27779d13e759cc6017c9882aa1c061f47c107f1b9f3d1752bd5a063ead13127d4e76d3aa103cd07eda847a770ea94db211f7b960fff649dd3190ddc5af5b847e7d4a70baa50613e7cef5b8ab8ea721453d53d712defa3663ef07c9a4a9d126a50d369781f8e2f9d46cb65b24ab1b0cb448bcf847c3e6a968f704e781511194a4a4dc9d487e452b8d9bbf1e552ae4a0519c9c865abf431f9e8e35d45aeb9e3fe1fb8915bb92b7dc8bd3c7055c6f228137972794a5cbedace57998ff97b3ede5564ea549ee54566f25afa907b9acb9bcce5d1395b9535c99d46990ba7e2f6527bd1c7c28cd6e94436682a9b4e614b32d996b6ec8870e13c955fbb6e97169ff3b130a33d97dd82da4e615fae654f3a72e0fc95d7350df492433992ee328d0f5eeee4588e38929edb81238edc1e5af673a9065458bacee9b9f4fdb9fac34bcfe4a555ed822fe4a4bcff5bed447df9fbb72fff000126f975</data> + </image> + <image name="image13"> + <data format="XPM.GZ" length="7166">789c9597c97223390e86eff5148ec6ad6282ad9494a9cc98988357c9bbe5dd9e9803c04c59de2d4b5ea48e79f7a1881f597659d5dd532a96eb1309f0270882f4efdf97ce0f7697befffe6d3ce1c9b55ff2437e5efa5ebedcdf4ffffd9f7ffdf1edb7567369feb7512c357ffbc7b7dffa9325bfb4f7f850cd81a601a811ffcc990791f3465bd95f807d238ffdab734e1ad64f7be05c596e95937612c7531a39b77ede570efdeaff189c2bd3f99c9b8d309f725739317d4fc63a5edec1b9cec78972b3ddd4fe5ee4a2093dfe1c8cf1fed458c77b9a732bb1f1323546ff23d8ec7bc698ef12ec31feace622f28972aba12c3bc6ad24f2307261f6bc32e776d26eb4633fef46e676bb15eddd1d386f73f4ff06f6ca12e39136dbb98ee775b0577fee46396da43139fc133855e659e4e05ff5f2b2b1eaf5ac1cc6eb7c2fe042995370897e37e7ac19f4eb7a1e9453ac9f37c06516e77743e52c51a60c9c2acb75e4b05ed83794d314f15a0397ba1ed957cea0d70d8c33e5125c80e12f2b95a53fe74e2bc3faa46d0c3d7b60d3bf6edc6945de54ee24ca7218593a589f1370d191a83fe653deaad7b7ad5cc76b0a4e914f57ca9d04eb3d025bbce279cea583f5731b0cbd7eaf66edef2be7a6f7019c623d649c47bd72072ec0bbe05299637fd14e1b385f27cae64f6635abfd3218f170185f24453bfa8b7a0b6fe743c858e773f7e0bcf0b1df2b9b3f790297ca14f586e365f5eccd58fd9131ea1397c65a8fdcad31477dee41b9532acb99729160fe55709aebfa3330e247317fd8db7c74a59ca21eba47e5e03faecf5d2be789b2c778f3c7b1de48d007ce9473cbef897261f1a99439d1f1fe1a9c6afc651bcc58df26b8d2f9c35514599ae098df526689e6abbb52ce4b2923eb7c659128fb2e18fafc8331f2e555992d9ecf6086bea672983f325d8033d1fdd900b3ce270773f6695d1f8ec1a54f234f953b893293728ef3cb23b0ed87572e0a1deffbca8cfcf6fbe00af1dd3186fe75656922df633efb32e4a39ebf5765ab077ea81cea899edf3765d3e76f9405fbe537957d13f17f02b38f4c315fcbb495ebfd4f8f607b0f54c67a9edd96729ae23ebb01177a1fb97de54e89fbe45cb98e5f014ef5bcf2a1725160bf5899b9d4782e2bfb0cf90e3d9e753cc5f74159d57a1f8df57e75babe2a2d908f89720efd7ca0cc8cfdbb55b6f928e64f9585e790d6b363e5dcf2a309b6fa766facf19547b0d5b767e522adb2d82fca5c613c2b4ba6fd1ef3fb4ce3e5efc0b6bfeb609c47bf6aacf1f16bca65133c0367aa9fe2fd50556dec3f5f2887fd8df1225d4fd529500f5bca79a97addb27281fbd74f95aba6f6fb777056c6f728471e645982f74da16cfee9a466cdc7357089f9b794f304f9770a467df72bca45a2e7878e95c3f9d3fd19280bf65b568c35df240557ca847e8ffae676944b8b77a91cd6a7f9e3c1acebf502ae743f19eb1b342b8d878e1fa429dec70f605bbf53ce12ec0f83f11ea0c458e3412d70a9f94f2fca9d14f7496a8cfdadc016ff6d63f5e70ec1883f9d1ae33dbe698cf7c68d31de3b6de5f0fc57fbd79ad53e37463dde03432f0d8d35bf5c0f6c7a07356bbcc818f15935567bba03973ade5d2a17d0e7f29a55dfadb1c64bce8d513fad1ffbc1ce18efa70e18f1a426b8447cdf8c717e0e8df13e7c3546fe8e8c35bfdc8532e33cb8dd9a55cf1918ef0f6a18e3fd7204ae10cf9d9a359ecfc6b0bfac59df2fc85f69c27e52b3daf78df15ecc8db59e39e4ab6438df669fe97de8b76bd6f3f66c8cfbbe673c18442ec18cf9c7c6f87db530c6fc2fc6b0177085fdba31467dd932c6f9c77e7b7b7f3cd5acf75bc718f5a63446bdd900633d7e5cb3fa3f32867dcb58eb89437c3deb7efb1763f5c7c39a554fdd8ffbe0d518f759afe698df7c6dac7a1df2d757f8fd323386fe49cdfa1eef1a63bd6bc6d00f2e9b88f7a631f4768db1fe8eb1da13ea6189fce02b63d4eb7363bc370f8c519f778d71df0e6a8efdb265acf9e156c08cf7eac818f5a066f54f66cfa8f76363f8437e9795faa36b63bcff4c2fee735aae59efdf7763dce73363c4a7b6d7f918f5dbee67191b0f743fea7e1d2f382f5586fe59cd7a5e909f15a3bf5bb3ae0ff5b7825e3a34d6f848c358c7fb7be581e919d5acfa8fc1d81fea1863fcb8661d0f7d03e8a3fd9a553fead1dc22da4f6a8efdfdc9fce3c8b113e75de92a3770576ee8aedd8dbb7577ee3efc7c08edf1f34fb5eb4f3ef810f7e4460bdaf32fbe5fec63ec260b3e2f0bbf1d072dafeecdbdbb8f3ea6c1f7a2d1b385df3e050fcb6ec5adbab50f3ed67fa16363e1b7aaa1ebd65cef838fcdff43c756d0b0ed76dcaeebb9bdbfa1e36b3cf6a38603d77787eee8938f637712e6dcf8d44e7fe2793b8b1acedd45f0b0173e971f7c34fe563c126868aa06d772ed4f3efe3a1e69d490b94ed4d073b92bc87df051fe553c88e61a8849dc2179b747255534a0ab4f3efe54070ddd325dd30ddd6a1ce88eeee981aee8f1838fc19fc5839e82f5889e69ecda3471bda0e1855ee98dde69fa49c7d77d41a3192d073f2bb4eada712f725a0b1ad66983ba9fcecb2f74502fb4cdf0bf53daa26dda891aaaa0613778d8fbe9cc0d16c583f6e980fae1e7211dd171f07142a7310ebb7446e75fceedf0ab0eda0fed22f899ffbca40625d4a4901161156d4abf9e7dca7ed6112d3b211679f052b06362e6f08b0d87cb8607345d503f7ed231f730ff86af421bf235dff02ddff13d3ff0233ff1e8173e7eeccb6958c1013ff39883377ee1577ee3779ef28c97798557798dd717f9e08d1f3a4c43a87913ee728f37798bb7798777798ff7f980fb7cf80b1f88071f85761cda09cdf894cff89c2ff8921b9cd0345837436b717ba18f54757cd2907187732ec409d15498fb22e2a5944a16c65475fcd0e026722543b9969bf0efaddcc9bd3cc8a33cc9489e652c93453ee4c58d3f6a905779937799cee79759987f59566455d6649d8e6443bad25be8e344f74236654bb66587e6f6bbb227fb72207d39942339961339953339970bb95caca3d6d0082d09f337a5256d4925938ee45278e7463c74a3b90e4f5f7d789ec7c34b683eb432b4ca0ffc951ffa6bdaf237d2f0b76eeceffc7d6c0ffe71818fa7a02268087746ac3b7e142c9e698bfbaeeb83423f896de45fe63afceb421d6f51c75c43b8fffc34b459b058f62b7e3558afd1be5f878e8dd0ba7e414c7925a8dd0c736eb959503ef6db61053b7ed7ef85b6ef0ff82cc4a01fda61d0d0f5470b751cfb9e3f89ed542efd59f89c060a4d7a72a92dd079fdff8bdac77ffff9ed7f861313dc</data> + </image> + <image name="image14"> + <data format="XPM.GZ" length="4574">789c9d97595323371080dff9152efa8d4af57ac633634fa5f2600c2cb01ce63e5279d01cc636f8c0366048e5bfa7d5dd12c61c45c22cc767499f5a2da9edfdb156b96cef57d67eac4c6766d6cb2b79d74c2a6bc5c360f0fce75f7ffcbdb25a0b2bf42f88ea9570f5b795d5a35925af1c8c86a505a4fe15a8f2976573a31c29f7854d994596e196b9611fe699722e6c7ac25928fd4d47b80ccb84f9de725075fd61dd71c0f3e19d7010099b52b84c747c2edca12f1edfb01ca6611ea6dc5e58ae05615e0bd8d715ae5585cd403952e6f96a29318f8742b9218c1de55cd80c2d47412d8fc4df148eaac266ac1c697b9dd9101bf6e7ca0d619c2be7da7e61390ea33ce6cd42e5b8aa3c548e85e15a383705ef2754954be553e1221436bc7fb171e331f12cf19c2ba7caa572210c7bc2ce87c67212c64522be33e124103623e558188e857d7cbf1ccbfec2aeb0f343ddb1b69f2827da7ee558da91d79798244d24de48d8cfb729ecfd5b8e753cafaf5eab07f51af38b722c0c67c2ce67d0b1c6b721ece3d5f13e3ebe5ff58c7c19f3a972aabcab5c08c38eb0f7cd95d507cfca46fd7cbe1bb57ad190f847c28d401842e558b926ec7d6365e7cb9833ea2ff115caa9301c2817ca32df6b7c2d65f541d3b3e4ff5ed9e5efc9b39c2fae3f69d42852ae27f82c9c06ca27cab1304c84fd7c46d9f97b9ec5cfe72fcd697cce0ccaa9f258b910862361ef03cfb29e4098ea9df8793e13a58591784361d70e6dc71da96f9972a2ed43c7d28e9c1f931b63249e81b0f77595753c068e757c4dd9e87c1c7f16654956f0f844d9086355d8fb22c7321e7e2aeb7e62dbb1b6a7cc85f73d2a9779ccf31b617f9f51d8f9e0c6b1c67fa45c2a1f7a96f703ce5f1ee7a1f8615b3911c67bcfb2de3b65238cd7c23efe8eb29b8fdfeff2a270f52416f6f19e3bd6fe07ca3a1e1e3d73bc980a7774fff1ca33b71bdecf22a67a25ebd9574e8471a2ace711a7c2eefd16636517ffb1b09b0f0e3d4b3c5bca89f20373e9d68b3b8ed5bf2eece603edefd7b3a9ac3eb85436eae7f3634f93f6dff62ced1bcada1f787de5ab7f5fd9f56f29bbfea5b2fbbcc0f5a4f3ea6f28bb782e95b5ffd1ecff3c0868e4af8f1c9861bef0149f384aecf0ef9b65078fea527b46f3f4b08fb778675ffb349a019ab70eea3dc4118ef11e2738c519fd7cc0477cc2f9b2059fc9ffc27f35171d6c78a471ebd8c20ddca4678bbe7fe236eee0eea28522fc4511dce0dedb7ca8614ae3f7d5708087d8c6237a8ee955e32c784286535ae5199ee3c5abc31b2ea9778be3b8c26bac628021d630c2985eeb8a855631224342cf1ceb6f1c238ea1459606fd3cc614d01a00c090a78a3164ea78c13d9af10272ac43e11c58d01c3dce430b4a8e65133a70035d72f4c8d2a3580ea00fb7b2d3b486a18d018ad77c501473b8a3dc6dd0778bb3189363004330308231dcc3042398d2dc9a558aa129e763c1915114d6b0010f94cd6378a46c0614c113cce1195ea009403901587f7f46bc03c861f7e28af2d0818ecd264ca045860dd8842db200fc846db8fdc2d1a37361e7b759b0797031ecc02efc823dfaddc323d8ff2a0e38c0091ce2158fee421b8e348663388153729c516ecff1e9ab38e082e2bca435d8f360f7a2a9315cc13554c931267b0bcfbf88a3a09bf568b301760d938518ace19af231a1bd9dd25ce1670ece481fa7700836934f50234744793855c39c5618d309fff0fe2e38e690d0096d531c2d729c419d56609f393d0332b4a081d9570eb6ec424a67b4cde77b4cbbb963907eb76c0cd0a7b3f9491d59bafba7068ca1b3d4a6b340f7047a26a33cc494096bd8331f5a966b101458400a539af780eebcbd2353ec9bc2aed5d01b28d59e77968f6aa1b9c10b3ad5dba64b156cc8d5313337a667fae6966e6c7fd9b2900f5fa7b158acc96e37c97d47773521cb522c0b0e5fa73fca9b5a06d87c1fcbbbb5509db6b5e953cb1dddf9a558fcf978a61bc31160f333c3522cdea2677dbc58a7bf7e38960eedb5b7c867717a16ea3451f95f2cf279ff6d9d466386df88a549965b6b91ff63bdadd3df799cc58cf04ef3716e6330e3ef1a5e2d7061eeddbe2cd6e9ef5b6066ebdaea3fbfaffc0bcb04b0de</data> + </image> + <image name="image15"> + <data format="XPM.GZ" length="5502">789c8d97d952e34a1286effb2988cebb8e893cb62cc9529c980b838166315ed899988bd46230e00530ebc4bcfb4955fe250ccd99e9ae96cde7aacafc7329c9fee3c7dad9a0b7f6e38f6f0f4b594ef2b5fc4aeed77e148fd3e9ebbffefdcfff7cfbde0ad6f47fd088d682effff8f67db85ccbd70ee6b3b2025e2850c3fd73fc52735231790e8df9ce71e2990ec089eda75ecd36ff00ceb17f5071b3b267eb9760ccd3b17135dcfa99e3da3ea7359bbd39d8ef6f1bfbfdb40f0e9bb69ec00958c039fc5dd56cf39715070dcfb4675c0dc7093834e6cc711ac01fed7a0e52c73be004dc00e7e056c5ad6690b79a8e7f1ab71ae01370083e739cfa79cec13ede028c7869db73cbf9e3b2e250ed215f31380fcd7ed3386c18f3d8b1b4902f8a8cc33014c721383116175f148479e49a4f8e8ca38631af3b9610f593d0b3f9932de3a8017b9be0c8f6d346cde61ff6a214dc0517e0fb8ae3208a908f1b706af1c8d233d677c0456cfede8ce326f8d5b1c4516ceb1fc129f8195c188bebd7762b2eda2d377f6bdc6e1acb1b3802bb7ab4b3187a6408f67a26c6ed26faf1ba66575f7906c31ea535678e9fc02938001760771e92566d6fe0d9e2e1237084fe9fd46cebb73d239e47700a6ed6ecfcc90d18fea5f09c98fea9b1b6b3f10c1c81dd794db2a469fd4d637004ee7b4e2cbe393835e6045c809dbf344c52ec3f041769e8e6dbc669d3982ec011e65dfed33c29707e6e8dd326fa3bf70c7f31384a7367af04fb7e24cf36cf21b83016771ef5f8f97cb68cbd7d3900439f3c8153e82fc0382ff2e019fe22cf62f1c1be348d89c111e65d7d25177f5e72b03f2fa79ec5ec076001df804bdc5fb63c63dedd1fb3504aeb273ef09c99ffbe711618d3263836169b2fd49ecd67c659007b0d708cf373e7392b1c2fc062cc3d70692c4e5f1e79fb121867b1e9975bcfd0730dc67e3ef49c478e9f8cf57161f18d3c637e0f1c1b67eef99617827e97045cdafeccfc69bce89f0cecfd5f18e731fced7bce2dfe11588c791b5ca25f763ddb7ce6ea5944b5bf0b700c3ef46cf9ca266041fe7a35dbfa1d30fa21bbf28c7cbe1ae7a87f760946beb371cd56af1918f5cc0acfc8ef39d8c7f7e819fd0e3d455cb8f5e29e3745e9ed672518f66402467db3bc665b9f191701f27b0d8e514ff10c7fbb6029dcf73b1a824b6376df17cab840fee8085c96b19b3f352e03f4f7c0b3cd67ee7c971a0ff24d605f8f73b0cfffbe71817e942be332809e2518f37c52b3d5833d97b67e0b8c7ea373cf987f0597c6e2eecfe3b8d673665cf87a8f3c43df2918f6a50b463d64cf58f5dbfa75b0cfff5dcde6ffd2b3e54f080c7ddcf13cb6fc6f1a8f7dbd1f3c235fc79e51af37cfd83f04c7c6e29ef7e371ad7703ecf5bed46c7a4fc0e81f597886fe2918fd22c735dbfab1b1ea33ee80a187bb60d44b4acf98dfa879ecea2be031e2bdf76cf3c3e5af83898533ceb9e092c75fad781f5fdbe04bbed26bc2d77cc3b73ce5cbff6f83673ce705df7db8267ccf0fbce4477ee2677ef9343fe7d9aa0dfde49e5ff9cd5d6fdcd1f70eafeb671bdce54ddee26dfea91617bcc3bbbcc7fbdcd371c07d1e7cb031e4111fe2eae9eb915a38e6133ee5333ee70b6e70d35909b8c521471c739b134e3fd878e31eb1ce4744fa3a21e173ca28a7824a1ad3255dd184aee98617744b533766a4d17fb271c801a91fbaa305dd5719a5075aea1ebd56073dea78a2677d7da697cf3a38560da15a58f088e6eae956d7bdd21b75685dc7860e7befeae7aa46635a7cce076daa963eb78855cb962a22daa69f3a763076698f89f6555f8f0e54cb9c3fe950efba9b0f747795b516b7a9af360634fcf5d2884655663ee978550db1cba7e69c0e35e76dcdda3655f5f965d0310f758df6c9a7587a5a37cda846d3d32bd0cc1cd289fafccac69ebe0e2b2dbfd4a5a7165a74aa7938d4389e346f3f2b1d9a3dbd74c7bd7edaa5bebe9f39db4ecbbb0d3aa74dbad041da3b81c6d3a70b8da6f1373a9a9ab7c1bb96957c04ae7f83aa369a933e05d4321dd4818611748414515c558cafa85ddbe868655d4e5d2433dd176834c9d73ab48a23ed80535d95beeb10d6de9a6b7c6d579baa4baa8cec381ddd6ab5e544ffee547f0be910c9247fb741e79a812dd5d2af7a4b7312d14c8abfd3a1df054b19cba55cc964c5c64077579d15aacf394e95d751e563dffcebb5affd3e956bb9915b99ca6cc5c61107eab73a8db3eaec6a8502997fa5031ac6ba7f217772ffc146bfca92de17aa0eadf2325dc947df74d0a994aae14196f2284ff22c2ff2ba6a43cf49755fa93a7c2a6faae159cfec271daaa0e3342c74accb8674576de85d2ea815cc38a1b94676ab2715f9a02eef6b0696eeba954dd9926df9a93676566abbab91a4f2e6bae2495fab7bc7a37650ad4315ac6ad8d3fd5dd997de071ba7dadd7a62b52a95955b8da6ab770b5f97912ad8540d07d0d097810c6524872bf9186a55a7ae2766aeae7d5a97233a361dd070ac0a4e5441a5e154359cc9b95c7cb0d1aa6aabd9d43cb85c6c48436da80e9783a65e816a684143f51b2c96b6242b396dc9911fbabb7aadce558f06d030550595867445433be3771b5f3de7c83dd7e868258a7567a1ab5918a98276461967f26ee3eb519d812ccb72f7eb699c5dca6b76954d745c67379248a2bfb17ec3c6ef8cff6de377c7f7fffef9ed2f80c853d6</data> + </image> + <image name="image16"> + <data format="XPM.GZ" length="1947">789cc5d45b6fda301407f0773e4544ded0d4921b249af6405ba0a5e5da8b264d7b706c877b82038442b5ef3e1f1f9785d2292f936683949ffcf7c1b1432e2bc6f741d7a85c96d61bb29952834e486a54d876b9dcfff8f9edad54766c437ebcaa6195bf94ca1706357a49cce1da94d7665535e044d345f6157d491f986afac81b4d8a7c025ad52ab5d4dc29123a30d4749144d1870ebc05da558bda6af415091db8d674915da01338be1300ef811ef1028f001f8035bb66d56ce0005877ea5edd015e29869221f00ee83b75e6abd1a662e87bbe1a1d6906c8474d867c0106aecf0217b8410616926a7ac8992295a4c0966680bcd664c86720710346d4dc399258c885a687dc2b524935f7a049905b4d8e64c0d0253c547397c8d046b6356bc886229364c04c9320634d8eec00a91772ea013992da48a15943f61499a49a9b6812e44e93238740e651ced4dc08c96ce458b3865c297249f5785f14b4ff98318fedf38c494828378447d158f65cee98994ccd199d2f96314fa26835862e528cbd67d674335f6cb7592c44b293215909be279957ba3fc87745838bddeebd8eec3ccd65ccabeb837c9d641986c6ba523cc9676e9af32d447892afa316745cb319ce5a87761ceb1f5355ccd335cbd094dcdeed3b1d5da7737fbcf9fcfe440fe674d311aa8a0c74cff60742e35edb4cfb6a9b07ac75dcea93b348f96a37943de18dedfecf699c9e97897793c4cb51eec03e9e29ac6528da8f7f39535d298a92ac918f9c3f3fe970280e2791f3cc534ff07941a6cf45f65c90317b22a3451921962f4519b981a3e24cbb30b3e28d665126ea14d6b9f8f0e7fa3473defe59e6d7d7d26f4dc4ad2c</data> + </image> + <image name="image17"> + <data format="XPM.GZ" length="3709">789ca596db5222491086ef7d0ac2bc333672a09b6ee8d8d80bd119150795f130cc6cec451f4505e58cb0b1efbe59995935c880ab3ba61df291957ffd9555d5e187bd52e7a255dafbb0339ec493bbb49476e351692f9bf6fb8b3ffffae3ef9d5ddf2bd16fe497bcdddf7676db93525a3a7b7acc0d201040997f0c436c388cc328e4c170e73866ce0cd7925a54f3b9de779c30df2867ca9ee1ba6f19f62dd7a5fe5ab85e51be540e94af9813cb30742cfa15e5481816ca99e69f0c47d520f32bcc5f846d1ea696a32af35238aa687ddbb2e607ca81307e624ec38a1f71be2b6cf3008e531e7fa11c299f2b67c230331c571ddf5a8e456f2e1c57348f96258f67ca81729939b50c8563a99f28c73abee558f27de55c39359c542de367cb89d49f0a279e72a41c2a7f67ce2c43cf71c6fcac1cebf8a663cee3a172ae5c379c068e3f5a4e03e603e1d413865c39541e336796f1c4b1f8b9578e35df702cf3ed2be7ca35c35960191e2c6752bf14ce3ce58572a8cce72bcba34a55eedb48d8e58f1dcbfdfda61c6bbeea58f243e55cf9abe13c8c8240eef7a3b0cdc393e53ce4f147c2b9a7dc510e95a53e8f22d1c350d8e59f1d8b7ea21c6b7eee58fcf1792bc22853bd409846487e66b990faa970e129f3fba928e28ad6c7ca41c0fdc4443809e57d86a972acefb35c38f5f4fd73a71cebfba0ab9cebfd2f1ccb7de809679ef2ad72a8fc6059efdbbdb2bd7f13615a51c13c568e9547ca85707bf26bf1ba06c2cb58cdbc4563bd7e55e7a5de668d9f67deacb55d637dcc666faf696cabdfe6f0bf7afa7f7dbc759736696ccebf25ac0655c69860ca4ff63e15d1208514732cf096a2a04fc97b54e47f15f26015ba147744d9b633f6b3ba6a24a4708f0fd823855c57b4fd818d1a29cd6d14cc2a62f2d0c7c7579ecd1a09b9e89117a3f0b47d159bc3f9e8b18b140744431cb918e304a738c3393ed3f7435ce012f7b181071487f8911e703ecc7e985dfd4434a28a391e511c534d034f687c134ff133b6f00ccff102dbf8052ff10aaff166c547977bf1951586a4d0a1793ba4f2cda91ce0778a169655a5821efaa6372bfb627bf18c55aa9e63406be860488ac75863f7758cc84d0b102f008c06c42b1aa9ebc5982a86ac3183445764bc981e1c9a15418a67a4423e40cfb3f3617b31a739ab5437e72e762886c44bac41ce5d89c84701b7d0c56bb87ba1916a2f66704fe38d86e987f150350af000396934a1077d590badc4b7e7c4f9905e74a87b4b78a4da108fe04914284c570f756fca74240630b42e567c985e1c91db06552c48c5542f60a41ec6ac401d85097774fac385d3b0bd68d27cfb3032c1f3d7a80f63faae4e1ab22705cc6825d73f5c380dd38b2a8d69e221d5347817ccd3e03ea8075698f3aefaebef31aa37bd58d05a239ef180ea4eccc327ab69154c37e19676f552cec59a06d0ac3486469e428f2a4c5d139ef9f329f46937cc9938a768d33ad6de734ea341634cc70b3acb2d8e32df8e339efb82fa38008001dd929bd55eac681cc0021674f2a6b0a49928cc5f5852ff2b145730a4d9f7a90b3e64eb0a2b3ede159bdfebbf12bbfffcbef32f7804b985</data> + </image> + <image name="image18"> + <data format="XPM.GZ" length="6238">789c9597596f23cb0d85dfe75718c3b78ba0aed4da5a08f220dbb22deffba2200f644bf22e5b9b653bc87f0fbb7858e399892e90a929599f587dea90c5d6f2e71f6bd7c7076b7ffcf96d36e7f97db156dcf174ed8fc1e2f9f9e39ffffac7bfbf7daf656bfa3f6b54d7b2ef7ffbf63dbcae156b872fe3610972a14095f8af64ea38e7b5c89fcea3515c5f07d7b17edf19f149e4dce3d24b9cc7f5e7ce583f04e7888f9d11cfc005e2e28cf87dc9d58a5f2f357051357f77ce585f352e478c0f9d11af80eb16979bc8b9b2edffe48cf57d708ef899b3c5e919ecfb5f959c55aa85ad976be7ccfc7c3863fda5713962fcded9e23c00c34f68466e6775ac0f89db317e06ce8d69cf19d76f955cab7a3c1c828b5a35ae3f75467ebbc635f8a177b0fb7989dcf6ebc5d6b76b15e33006d78db970865e0fecfdb051725df56be6ef199c1bcb03b830a62367a9475e3aa37e2fc6f50ae23bced8ff0decf9c4f3af73bd5237bf67e0ba31b59d4d8fc5197adb60e4c30c869ff0587223533d8efc00ce8d6901f6fa9f1837dcef16b801bdd82f0dd56fc49b9f2e8c1b15e3700b6e203e77865e17dc865f020fa01fefafa6eed730bf2370db989fc103ec374c6cf9cc8c9b55ec3705bbffd8df4d6e569be66f046e80abceb87e130cbf21f653abd66c37cddf0d78604cc7ceb87e62dc723f15b0fb694596e6a015df1f8318b7aac6f40a763f7d709b8b588fe08c7a8ec1038bd38633fa3dde6fb9fab1faf101b8817cd8b9259109dc36a643f000fdbdee0c7f2fc639f2e5d89fb9fab37cf8128c7a9dcc9dedf3819f8cf3aaedc7f17e6bd773d423ac83dbb65ee2fb4dbbc8abe89789b3e9cb12dcc0fed5c4515f0ab0fb6b26b6f81378807a549c738b6f19b7ddefba33f2794b6cf52370a36df77307dc3696580fbd9de147dec1e80f0989cd4f6eecfa7c08f6f3db76b678d877b6fdc25562eba70f30fc845a628b7f8207f0ff9ed8faedc098ab32887c036e148de83fdeff5cd6cbeaf368cc55d3a33c71d40ba7607dcb89d7c7f727513f389f7563467ebceb0c7f3b6086fe7562f37beb6cfad4020f8d79692c19f68fef4f3260c6f9bf8187a8cfb533d6778c25c37e4d67e8f712dbf55be0a6b1c4f793a2c143e477652c19f6177013fbdd26b6fd1a60c6e7c70378682cf1fe2a06827a848e33eeef2bb0af1f1b1719f4eec14de370e28cf38efd38d0fd509fccb8688217ced06b248efdc3a760f7534f1ce3a1ed5c4496d8df8361817ce4c019e79b25b6fa5c3a43ff018c7cb99ed8fcdc190f32cb2f54c1eef7d6d9e27c92d8fc5e3a0f2c1ecf77d82cbc5f4689ad3e4367d47f6a3cf0fea924b6f5afce388fa3c4569f6730fa83379cb1fe3cb1e5d375463efb892d1ff8d78f1b8bcf135bfcd3789859be62fa43df4f3ec0380fd97446fc2cb1e9ed3863bf5a62cb6f1bece7d577463f72628b5f389b3f82de30837ff81bf2b019394b6cbf77e2e7dd48f383df4f67f859389b7ea883bd9eedc4e667e48cfe98258efb8529d8eb3b7786fe5b625bbf7436ff7c031e22feee8cfcf6125bbc613cca906ffcfe341a0dd11fb2e38c7c5a609c173d3ae37e39486cd79333eacf609c1ff97e7e7eaf892dff8533ea354d1cfdf2b9f108f5e7cdc416cf9d91ff4662cbffda7914e3827c467e3e93c4b6beef6c7a5424b6b8efdf84de0c8cf3e23d67f8e925b6ebd37abb3eec26b6ef9317e011e2ddc4317e320f1438888e42c740c7308cc26db80bf73a1ec26378d2f1ac631c5ec2ebaf236a5298846998857958e87cc358ea780f1f3a3f4327ac878db019ba616ba5c62c6c871d5dd1d3673e67cae5dc0d7b613f1ce8b3f2f9e10a0d09471adf0ec75f54665f544ec2695498a993b3bfd0e8459573a8ccc2053c74c365b88ad1f2f9f5ca5c6e54a31fd7554235a9ec46952cd4421d0ab3d008cd151aade8a31755f298d78f5ab49187a9ec5158a151c0877b398f0aa58f3d22e2a4300bef247fa1117d501177cfe31999c22029947349c3df5562cf8f4a1f7a7d3f65b41fcfe8846ef555f750ce2509ddd1fd0a8d1e14ec6455851e743e7ef130830fd5a0a7df7219ba0f2af4b1cca8a77d95c7f3d88c5d61b317dea28f677aa2f12f3e5e568e579ad0946634a705bdd192decb7ad0477cfcfc49a313c70badebdcf8f27743353655a34b5bb44d3bd4a35dda2b33518d7dfa749598cb880ee8908e92968f757571ac2eba74028d53d5f8a03375715e6a984af4714197e198aee89a6ea80fa5d24b4535aaaab19532395517c8248e4ef2714719d5a84e0d6a528b72ed8a3eb5a9c3415d549968aedfa4857a5cd01e0fd4c590c63f14a071afdf8e4754e35bbee37b7ee0477ee2671ef30b3c7d1de5b958269d9f6a7ac1af3ce1294fc39c673ce7055df39bea2c29e777fee04feee86347ffaec7feb8d38a767ee98f07de500d1b9baad5e5056ff136efa8a72d1dcb387b3a77a38ff15785a4f11afa3cd14eedf39efe5df23e1ff0211ff1b1baba55bae3139dfb7c1aebf9938269f099e6725eba2895745cf0255f6965ae79379419bea9b79b38fbbf2bc0c72357522e7ba1cb55ceb856feeee226b7a2bb4d9db9cef6ef0ad078528dd287ced095c01521619ed3838814fa9b666299ea3c90e12a0d19b982ee5c7a9a0a512decf0426ee5ceb3d47bf251eeffb7863c943e44ef737992e7783693f29386bbe15cc6eae405759ac8ab4c5669c854f45d58e65161024f0b59e829d7e54d96653ea5b2fa5895cb982b54c8bb7cc8a3d745e76698ca6754e9c83ab7cad75463958f0dd994ae6cea75e73f54e2b3bed6a4af55d992ed524576a4b7426357f6645f6b728c8921073a0ee5488ee5444ee54cce75af8b15b91ceaa7d7967e729c852605b9d47125d772237da9e86355472635fd95a7bf3356f9f8fdd5ff6f7cffcfdfbffd1765b20a0d</data> + </image> + <image name="image19"> + <data format="XPM.GZ" length="3277">789c8d955b53e25810c7dffd149479b3b67a7227a9ad7d60c60b33a38c78c5d9da87e424082828c845666abffbfebb4fb302826a3cc61fe7f4bfaf099ff62aadd393cadea79da77136ee9a8ae964a3ca5e31e9f7e77ffff3d7ef9dddc0afe0378e2bfeee1f3bbbcd71c5541a0f8392811c80e3ca8f705539b4ecd8fd842fd9cf948df21766cf758d67ed7f5af642e533e1046ccf17ca8972c9ecbb7c09fbcaa172229cfac64f8573e6c0f34de009ef5b0e5ce5483954fe269c82adfd0173e8856168f76f85337026dc514e9407ca46998be7447e682229263d588e5ce527e54879229c81adfd77e542f99e39f6a322b6e71f2dc79ef29d7016a7b13dff8bb91a54bd6a205c538e94a7c2393817ee2917cacfcc49502d127bbe6e19edb0fc43384fa2c49e9f2ba7cae7cc69987a6928dc508e94dbc2066c842f9553e543e542f982390bd322b3f6c67216297f1636607b7ea45c2a1f31e76156e6f6fccc721e2bbbc205b8100e944be5636613e5a589845b968daf7caa1c2b7f152ec0d67ea89c297bcaa5f20d731199b2b0f65dcb85af7ca21c2bf7854bb07d3eaf954be52be612bb652ccf2759e64bf66361ec96f67c5339534e99db71db6fdbf3a1b0fcd897c3472e72c8d9bcf3be066c33f99b93611d2ad6b5ded3804d496dfcbda50e75a94777744ffd5595ed1a3676280c603da0077a84fd23ee431aade6b54d03a79ee0bba431ee13ac47f8679529cdb0f74cf31795373438fa89c4c0f73b5cbfa8866c783d239acf0b954d1af48532da87ef311dc0f2908eb0a650a8c3ba8e08ea50f88afbb76d1a88a003fb07c4f19d8ee904cbc0e7881a5098d30f2c43a7d82fb6e7028d89d4624e4de43e85e23e9d6175d09f7359175875c4b53117e97f0effb7f0d584cf09aaeae8c5f3d1a04be465e3ea2223675d03e77a52ff0962b842ddc6a88b7651542e607f210a06f5b84696e5068d1a62e00e720c03565889f152ac39863eb5a43eafe2c0b93399c363d46182ff9db53ab1c211146e709fbeccd98b063efb2933f08c5ed4b80e6b0a2eac5da81fa30eb54d738a333c033d2c839307ebcf15f667aad0220f916cd668c8fcf570ea92fc5751b042200aa788a34fe1a659a708dde02b40efd715d83a402f5ae8e8357a1663f51653b6a451a0170d4c8fbba8f7ff0a2df13fc4d545ad5ced4d8daa6bb9eccb0c72ff67b8274b5361fddf88420cebfbc5d4ade6824fced1353b83475069b00aae53cd7f883af611438a33c5729e2b1a1e2c17fd77e17591bfa719f4a50e295675b386cee84c6258aeffc2ff9543b0e72bc41c6f799f426324d6ee4afe0bffb1c4c70a57fc66de92cb107e3df5df7af1af197431c139bacf4a77f6497b1d87e3c0628e9af611c195fa6f4af431bc07c4cf125799e768eb77037f6fc0ff35ac03f19f2296b9c41f22c3a56e6faba93e55297c1fa26ab1f8bf80cfb168ccb67dc7ad6a884a13b540ddc56e8867b890ff67d0fda086a8cc256bd630788738f219bf533facc116aa756967755b0dded2588aa77cdbf23d8df77daf68fcfbe7ce7f0d107249</data> + </image> + <image name="image20"> + <data format="XPM.GZ" length="1617">789c8592cd8eda301080ef3c45c4dc50b50b496883aa3e42ab1e2b553d0cc624c6eb21216177a1eabbd7bf210d31b538f863be8cc7e3795e243fbe7f4d16cfb3b6c34eb08455784a16bbb352979fbfbefc9ecdb334d1bfb44856f30fb3f953c2926f47e2660f7a0f4bbb0cbe194c37e97255187c3798add23cb5d1d663e1f0ec9139bc58dc84e8c1a38f563d6e0c760eb3a5433498afb2dce13660660b161e0b1755015d942c62c09347e67067709de6cbcc7efbe2d167963dda28b38801b9c7c2611330b7df5e0d7e4c73e6f0e870bd76b8b78801eb1ed160e971e3f0d5e0a72ce0d3c402bdc27eda01c02d223c7000d88eefcb6d055107c441b217869c471d50c4f89e315e46cf02c1253bd692498a3b8dce52d71c9be8bda0924ae7d1d5a8b8c38951cd45d39f34e134a890e3e1d6c1a97a4ed4944363e4d8d0f015ee1d201a45ef1c68094792cb387438e3750543a33bc0c84125fb3732c6b9d23784713dafe54de904e99723b8bbd74dd1fdc616793b7686d59a7eeb4c3cee80e448fae5f8a8e67f9c664b9c6a7ae0c09bd079de09c7fd193ad4888b22757de8208956f866c51c526d7b8dcf3cb8c314c4e7b9223f21fd5f13f36c7b3b5c13f32cc76374e79064583d76eca8fee7aca935fff379f617c93e5058</data> + </image> + <image name="image21"> + <data format="XPM.GZ" length="3613">789ccd955b53db4a0cc7dff91419f68d39a3c6d7d873e63c242df40a855ea19d3eacbd6bec5cc1242da1d3ef5ead249b1c92703aa50f874d20bf68f597b4d29a477b9dd3e3c3cedea39dabb99e5779272f75ddd9338bc964f9f9cb3fdf777603bf83afa4d7f177ffdad93d9977f2ced16c6a1d8042505dfa21fee4d84bb2d84b1c2bb7590569900429d9878e432fec861ed9cf897598849aec81e3c80ff38882a94be6a82bbc108e8481584769c4fe5ec386f37bd7b08d697f2e6c64ff3173ee33ab91e3d88fbd98f4612a1c097799f35898f28f35da59af104e853f0a1be1d0712f884d2fa0788ab9e731c3857024fc9e38eb7996eb39138e7a19f997c2a9f085b0618623c749907809c79b1067499ab03d66365af8c4711a26260d69bf664e3d61439ca7519a134f8553e1cab10e53a3693fe4ccda635633e148ecaf99ad2f7c459ca39df46026ac9915d9b350db8cf747cc992f7c201c0b9f121b64437c23ac85b5b015a6faf228b379443c67ce7d6635148ec59e121b64f25785b016b6c256b8766ca2dc1af61736bef0ab86a5df563816fb3362dbe6f786b9cd6fcc8cfbd9df6fb8288897c25aec89b015a6f9b7e8cdf70516ccd617be168e850f5b66ff0f0d176cef3117cdfee7c4b63dbf4be6d6bf2fac85c7c256f82973d1eca7797624f15eb6ccf596cc85cf7695b5ccf6817093ef13e2a2bd8f8f999348eec75be6669ee11b73dbbf17c24dbfbe32b7f5ed33174d3f2a612d9c0917cc27f387ad3fa901aa59bfabf17bbeab1a0f53f8731adb6af9d5335a3dd3357f0d19adfc7e9ddbdeae46c44f062c14700e2554a463b6ebfc7b3e24f7218c608cde254c608a4a19b2fb3bdbacb33e63b8ef826257924146f94ce0126aacee6a5de5ae062acc61815e53f1770a157c856f98d5355a96aeaaffa8e506fa12ff1cbd07f8eee3e7c7f004bfddc70afbeb2a6b1a0718ab2fb5b81c4afcfd149ec1737881dfbc8457707857654de308ab6695b128bc8663388137f016f37807efe1c3dd5cd6343ec22976d5a99c61fd19697c822ee69281073e9df4182df5adca9a4600214418a7c6ee34b311438f72f0e594f7b14709a48dca7a5f947bdd288dbb16d8515451197a7bad82d398a075899ddea2014395c38532cae2ae84545673e05562264b55b0caa61953e73055a5aad4904e66d2cedaedaaf0bc4658efcd660d5219c1195633c3484b3cbf1233b9ab52c2428dd51077a9cdcf53aca850133545158bf1ae316ab932fb6e0df03b0bb59a6dd3a05cf04cf0d69fd2ecbb5e8f319b6aa59a31aa5b9ca7ad1a7cf75065869dd658f9124fd16533907c2aba3fb5babc4f839f04a8720073acbbc61ef5f17c07b72aea0aa3ccefd76874705a0aca6441cf9492b2a9955623ece096be6cd44949c14d97c5139aa142a9169b67ec5e9d84fa31c2b989d464db9dfb059d0dcffaffdbffec0769fcf87be7270982f4fa</data> + </image> + <image name="image22"> + <data format="XPM.GZ" length="6366">789ced984973e3c81185effd2b189db70e470e011220100e1fb4ef1bb56bc2872c00242591d4be4ef8bf3b51f90ad39aa6a65bed091f1c664549fc9085572fb30a2552bf7c699dec6eb5befcf2e9ee5eeecf8b563192dbd697f2613279f9f59ffff8edd3e74ed6eaf45a71d46ec59ffff6e9f3de7dab686d5f4dab1af85881dafe55b3bb0277c1d79e33e5ccf3149c19f36ecd51bb5d44367e645cb79a6913dc35968ee7ac6efefe5570612cfd9ae376043d69376cf11563bd62f7371cdbf865cf79dc35a68d8673cf97e0cc985fc105e2173577a2b8e8449ed9b8d336e613cf7927ebd8fdb7e0027c537337eab6bb7ebcec83bb16775eaf2b81250a8cf17be0cc98a7e0a22bde8f1f9fc4dd0c7eaec045e21757ae8d93b68de70a9c589c1e3dab3efc16c61ab7f104ce8d25ae398d93d2d84d8cd308eceb954a1aa5367f064ec067e01c9cd7dceb047655c336df12b8048f8c7b1178c1b3eb25bd8ecf67059cf79ce76570692c0735679dc0fc68ec62d3e307700afd3bcf2ecb33afcf6bc622183f6fec629bdff97ae55d1d6ff30dc1a5319d19e749def58cb8201fba01231f4ec182fcbcffbcc8511fea05b6b8b8c079e1e387e012f11d6389a037d7b0f97b0527a84f02ae503f3f9f6e97b03e5bc6cdfcabc612d9fc3c0c2c96ef2e58ac9e14c6439fcac08817c62e463dfdf9219a8fc5c5f48aa0ef4a70622c3760c1fc8be00aeb7162aceb67f9ee832b5b1f3e6bd8e723be3eaef66f7e16c19558bc3276b131b5c121df4960d4e7c8588f1be303708a7cc4739987fd3b367629d63706073f93c0c8bf0cec8c8b864b7fff33b8427dd68d8b14f591c0960f6f81c5d8f9f3b348c2fe914330f68f1c83b19e726faceb69bc06c67c720e0ef93c07863fe815a8af0c02239f2770f03b0a5c249e3b60d483e1679082c760d487e16730005f04363d67f132e4eb8681915f178cf517362e309fdc0686bf49c396cf29b8029bdfb24c91ef088cfdc7997115f2cfc1582f5e0757c877ce7810839fc0d0e76b70d82ffef9289332acc73c18f3d3b57115f6ff7960dc5f8143bd7be0b01ea70ddbfc7be0e0b7dfb0c5178c0731eaf70c46fd9cdf1f65a5cf9bd5fbd1b88cf17c5c80f1bcc965c3e63f03877c93862dde0787fcf7029b5fba0b0c7f65e0d27fde22f35f35f5da098c7a5d81512f7a69d8e2c82fd48fa60d5b7dbae030ff867153afcd866d3ce60ff5e3c5c0a58dc7fc033176fe3ca9523dbfac7e2918e79324609c777204c67923a7c6cd7a6c376ce31fc0617de603e3f9990387f3edaa61ab0ffc34ebd30d8cfde40257a98f778c43fd45025bbd08fe2a3caf740b16f051c3363ffc87fa13356cf56d1b37f58f03a3de87e050ffa586edf3fa1d58c097e0017810d8f273966f15d6c78d03a3be27c64d7d37c078dee4c538d443a6e0705ee5e090ff5260f34f6be0709e8d0323bed5b0f98f8c433dc8356cf16d70a8c73218f5107fde0d74bdec7e7902c38f1018f3b35fef817fd5bc77ffd7b5ff861e13d35fa7a76ac28e8b9fd37c47af6ee5cff8fca31e573cf06a431e799fd5c734bfd1233ee70bedbf6b7ec8e75b3dbdf352b5c6e8a639f13ea77cf5537ad7aaf475ffdae70ddf7e444fd7f48eeff9811ff9497f5b7fe617ac8f789faffcfa01bd399ed7fea48af3bca04a8b3ac3122f6bff5db3e4155efdbe1e5fe95d73bca67d9d377893b7b46debb5257dbfa3ea0b6f7ceef2ee77f46e784fd5fabccf077ce895b6f5dd916a6fe8d5be46fb3ad3d73e8ff9f83d3d3ed1bb4ff98cdb1c71cc1df5167357db29279c728f33edb9f6be8e7853cfd97abac58884843be438a2fa555049150db45734d43ea273229d2daa470445ba98a5479734d671424e7526aa34a52b6dd774a34ad7da4abaa53bbad7f8d88f79d01153557b9c9d2fafeaa8277ad6bb6ee945db2bcdd13c2da8d2022deaf5312dd132add02aadf931f56c0bb44e1bb3f46893b6685bdb0eedaace1ef5b5edd3011deab523d53ad67e42a73ca433556d6b744f67eb53347b7d799762ea50575b42a9eaf42853dea69c8e85e949cb2ae2f4fb5ea9dfd006329491c6138a79e5bdfda2ab11c9b95cc8a5f6ba8d65a2196a93a9bebfa21355aa6424d77223b77247ab72f16deddeee3fd57c947b79904779529d27f5f62c2ff22a73322f0bb2284bb22c2bfa7355fba3accd7e46de9e0774a13eefd5d3ba2a6da8d2a66cc9b6ecc8aedcc99ef4b5efcb811ccad1acda7dabe73537d4e7b19ca8ceb61cc9a9f633551b4a5bd522cd37d62bc7d2f9513dffb4aca8cfae7e1f4f24959e64aa9349eed8911cd4ff46995dbbf7f5bce6aafa3c74ce15fa3bd26faffafdd59512bb811bbad1c7f5ea261d8adcb97a4cd5af3677e12eebf7efdff1fdbfe7badb6b9fe33a4b3751edc3d927d58fead5cd8dd4e7b0f6f967b5fb713daf39f53e87ee4fff2e7decf38bbbfef604fd4ff4bedffeaff73faef7afbf7ffa37f568f0ff</data> + </image> + <image name="image23"> + <data format="XPM.GZ" length="3549">789c95955d53db381486eff9151974c7eca8fe4cecd9d90b680b4d29064ada023b7b614b3604484220a1a59dfdef7b74ce6bc78424bb5b35110fb21ebd3a52c29b9dcef9c95167e7cdd6e32c9f0d4dc75ce70f9d1d3b1f8d9efffceb8f5f5bdb61d0a1ff49d809b67fdbda3e9d754c279b8c4b075a11288fff3956537004ae1cfb9e6bcc253812d681e3d00fbdd067f6c091b0ba11ce73f1699f39a5f194390427e02ed8807b8e233f3491f823e1c81356b970e20792cf8263611d33e75114e5cc0938015f808db01a0937f3bf3a8e83c8c45c3c7d2e1c7bc2ca081779c079d515b814d6a7cc799cc6b2de17b0155677c24589fa9d38ee06b1edca7a67c2dd18fc8d392716df009c823f832df8d2712fecf9bd90f988b9e8c5bd82f93dd882df394ec2244ef879a5844d80bc63619b633f7cbe4991a409cf57f7c2b6c4f3939a91ffbbe3344a6c1a318f84531ffc81d9d4f751df0ba7716a9853702aac34d862fca7e39cae8797303f830deeeb4cb8b9bf07c2a9cd65fd7de1dc07ff00c7e047661378b81f137082f31e830df8ae669c6f25dc7c5e8e85c92ff93f8273f0145c82f97e155133ff165c7f9e1e84f3b290bc4fc245007e0bee823f315b62cbf51c3a367189f55451339e9f335b531a79fe56b8aafdbb8e6d6c4a1b3397c236005f83bb60febcda9258be8f0ec139380797e03dc7253d5d769987c26520acd85f75aba092f13eb80bce982be28ab900e76003ae844f67ab9a565aad1e596eeb1c64c875f1df3c1b1c8536fcfa57cf6a07a77006ab4bee377ad63a0cb74a5fe96b32994d795639e8e921efe286e7deeabbcd79d63824c508bdd1633d214bb9ba3eaf1da885b47bf64cf503bd3fea1959e6e459cab3d2e1663d359eefbca7a9fe41efcffa2759765f7a961d34b247e30f54c9b7d46acf3bfd9edef7f5018d7da0b6cb79fae279e980e123199ef4a1fed4b2187d444dee8cf3143a13cb4b07eee6319f8121c794fb137d0a4ba13feb33760c1686b60319f6a9b993b494c555f20bcffeda588cfe46868273ec2def8538e331e739a60a5e63deb9bee0d99718ad775170f5e75ad50ee243faada77decf998e75f34092ef9f7322eed90e6ccdb39f83316f098af43ee8d8ed816f3cf83d678803371a7dc38b89a5993c33dd7e5993d6a6290f3a8c7337a5e912171f7b671f4695cfc5eb39ed7e41ef0fc7a5c6ae1ee48e3e054c58b1c2ffb41e3729c35b570b5c65ed8d96ff6297d86deb5b316f71b83a11469cb91b265b1ce224741f7417656739fcf7497cedc2cee183b52de5ff6aa2efde64e3a76e32e45abb5ce853c4af36965ad3c190c354b352987522ae7b50f1677acf6b4f2f8f4caa81619d6f7b9e714aa5046597e7ede76b43c079ca78f5ad475724637bf541539ae3807b795df41afebe3fa4c5df32e866a48ef46d13713b96e5639161ed4c7ad2f396865754bb3afe875877eb4cef12a4f9f32f0b7961aab09bd0cb7b1ba773b5aef58ae0fef44a9a99a724d37d663431e398764712eebffbe6ca88fe24c8a0c1397e3ff381acf5283e3efdfb7fe0120af7f9a</data> + </image> + <image name="image24"> + <data format="XPM.GZ" length="4574">789cddd6db52db481006e07b9ec295be4b6d752c5996a5dada0b20844338271cb7f662743006e313d880d9da77df56f73f0a4e2061b357bb210af531d3fff48c2c91776f1ba7fb3b8db7ef966ea76e7a9937f29ebb69bc2d6683c1fcf73f7efb73e94d2b6cc8df20ea34c237bf2cbd399836f2c6ee68585660125053ffa81d1cc1993a112795a9696e2566a7f38366d8c4f80446bdebd6b6f98577a0e3b402fbbc529d84898dbb0b38872fcd2d5f3f36473e3f839147981fb731deab1c36ebfa3bd8e75fd5b6f9d7e6a889f923d8afd7f746fdb0b6ad7f626e17989f9be3147958af13c0c7e604e36ea04ea304fd8c61dfdfc43bb4fa4d731cd87a7c08a770ec8df56ee002b6fe52df0f5fc2383fdef2c6f808f679fbe6b48dfe74bc15d4fdad9afd7adc31d7f507b0ef67684eb11e65b5ed7c77cdce615c3f5f2de907eb0570012f9b7d3daf9b5d80bc39ec60fdfc45553fe635735284a9d67f30d7f55bb03f9f356f5b9f5318f97ce46d7934306731f6a3cf43e43a7ebdb63909b09f433845fda9772b50bf37a701c63f7a63fc16c6f930e63b7f3e1b30fae36db8441e9ba55fdbff9e37f28e61bfdf7d6ff4dfae6df97abfdb61a788acbfaed9f7cf2db39ca77907461e1fd4b6f15d7316b6cc098c7e39f4c67e22d8d7efc1d82f3faa9def8f7be624889c3a82db663a37e7a19d379fc00ed6e72d0eebfac09c95e8b769f6f389e012f5e7b5adff07b5cbcab6e59d998b18e3d5cb9f3a2d57b6f59701a5e6bafec85c84387f07c7d8ef29ec607d7f76b20c79fcd93b36df9bf3d0faa147b3e499636fd4cf2a27ad7afe06ec2ccfb1b9aed7f74722eb755aea1d731ec209ec629bbf0e63be237381f3227d9ee5751a7732f5b577a2e6a9b98891a7fb4df3bc4c348ff5f97251ee30ff135ca691ce6f990b67667d5fbb3c0fe1391cc383dab9d6cfcc05e6d3198c7cd6f75526fd61febdb90c9d8debfb57b6eb7d0bc7f0436dad677dfe243eccdb6a7dbf166d6f0ae118e393da858eebf35194655cd8fc3e5c16f6ff0f3ddf32aeddf72e63f58ab91b625c7f5f95653d5e9abba199b6614950ebf977636f1ec3ae6bf5fafbb7db1577d5cb70d77c30fd775fffa50c2676fefa990ccea432e7824beef205f7d4d9eb3374ed4bbee2be245ccbd5d7a4010fab9e7e9ca1eb8d78cc13bee15b9ef28ceff85ebe3f884b9ef3e39714cbf87a9fbafe32aff0aa54ddf37b5ee30f72adcbb5215e95944dd9172d642cec517ad8d2848fb2f6b654eff02eeff1be5cbb7c203f9969cadcd7f83ef8d0f752f7f0893fcbba477ccc277cca67729d7393030eb9855e22aba9fb68735ce54a0f1d24249c121391a38c72deb28b0a2aa92b3933d96569bbf17dd005f5e852be5ff198fa744d034ef944ea8734a2f197cf074d2ad30dddd2946674f7551f13b97743eed33d3dc8fa737aa465993dfae6ac8856e4e7abf45e7ab9a9c6ea3ed6a4fa03add3867c0d346168eb3ff7b9d1944dda924f1d7de9833ed236ede8fabbb42709fb92907d5bbf907220f7ed691f87f4893e4b75957044c7550fdf7902aa7359a113e9e4691fa7d2c799d4cfe95cee45f3e51efcb948c6883617fa0828a4164592d2962baeeed17733aadd4caa137f725f62ea50223da44e02e9dcb17d5e5ece708e56163f1ff21fb59c2e9f5e72b70f5fea45120a57baee4206d97be1b9eb858c0b572e3e73ffec4b127aeed2f57e3e434ef38eeedcd5d7ef8f7fd443df5dbbfe6bde632f260cdcd00d169f80d767c8f9921bb971f57d71e475195a3fa9fe7dee19fc7186553e5ffd7367fabfcff8ebd7a5bf01ac66b48c</data> + </image> + <image name="image25"> + <data format="XPM.GZ" length="1812">789cad924d6fe2301086effc8a88b9a1554b480254ab3dd0967e51567b5c69b507c74e4a20e1237c53ed7f5fcf0c4e61a97d5a0b053ff293d79e71ae1bdecf1f43af715d5baec42a939e1c89d26ba87551ec7ffdfef65eab072d4fff42dff3eb5f6af52b4f7adf67d304e7a0e7d0a481f88a18f84133207378c490718018fa6133247c2114a10c05e21362d40a65d442bc2714d14d44abcf889da0ad3a01e22363c7673c207683aedf25dc238a50f82244ec21ca284ef8907d46d99611e29250c976eb06716190cf7c67502ac4f11185df455c196479522145ed105524139625a36a35091f0813251475f2f68809a3404cf5e0332715d2bb23839c1c1be4123283dce76985d4c9ad41eeb3aa905653839d18f1cd20373637c88d5d5728110b8331adce0c729fe70615e1a642aab73498a6f48d59061cff1d0e08f83f4eec7440afe25d034d3f7540240090bea5fa9908b0e48cb2f1242ff2c9381b5972b4344df3d97c96a753b09f1916c5bc9c174b70d405abf5a6dcac570e07b67aaf8dde6b6bdd0b926cb7c8d7f9629725d6da85ae7aabb6fa293eaf1d4a80fd017a71cfda43286feff6877b70dc9756faa838eed4a438eebd4ab9b27e631f2927e3dc818743ff423977b4f2f874a19c395a797e19bcfeab9c3a9432185e28278e2de5c4b1a67c38f694ca71a418c79572749c29ecb853d871a7b0e34ed1ce9fafb5bf980e8315</data> + </image> + <image name="image26"> + <data format="XPM.GZ" length="5630">789cad96594f633b12c7dffb53a0aeb7d6a86ece9a73349a07f69d242c09309a873a4b420849c8c27a35df7dcaaeb29b25ba4d5f0d6e68fd62fbef7f2d36fcf163edb27dbcf6e38f6f8b252d87e55a7943f3b51fd5c378fcf2effffcebcf6fdfa3788dff0579ba167effc7b7ef9de55ab976329dd4061018a061bf2c93722c0c4be1308e02cb57ca59945b0e859346b3304c5dcb99db8f7dcf999d3f55ce84e141d8ebed08478d58ce3bf44c960f94e3c4060337ca9930baf5a5f29167bb1f757fdc1026dd1f67a9f08b30c71359fd48380df2d8f29d709e9789e557cf956552ae8429331c341aa5c48b5d617ffe83b23b7f53d8e5138e85d3242f2dc7cab9f289703320e1b6701614e2178429103f5858ceccb0e70d85933c93785bc2cd5cf73f096789f2b36789f745380f84d1e6336c045a5f5c3a0e6c3f14a05c0ad3ad701a64d23f23e54418d685b380e4fc33e544e22d6cbec39c15a55faf859344f20989b0d3a347e54aea4977c24dcd2fa170a6f1d344b9d2fc9e3bd67c6c08e79a6fb2fd16055143ee0b6e082795f65347b81968fd326557dfd4b1c6db54ce8569acecfc9c0afbfce49e65be1026aaa45fb72d9b78ed7abc16a65ae669cf701c44a5debfb170eef4361d4bbcd81076fba1142ec2cabe2f706199f24afa834098fbd1ae2facbf248cca50ea371126ed27982a27b29e6cfed230d3fc90cd574aa9d61b9f9473e58572a51c0897ea8f2c3723370f73e16620f5a24439513e14ceb5ffa01226d2f86cbd9a05af97fe1d2ae7cabbca95f2967091ea7b315526655bcf2c72eb29742cf7153785f93a8bbf63e544e7757d49122f9e39ae53cba7cab530d9f72e2bdc7eb8f52c7e17cab93066ca95cecf8439bfb65e68ef5b1e677adff0593877ef292a6b3fd240d8e51323e1a2d6f7b52fecf4e15e3955ae3d4bbcbbc255aaf1ee7896799bffbcccddfdef29e7eab7e9d9ce63ae5ce97ad12f8b507f1f3484cb50dfdb3d61771ed9fc53ecf6e3a563e967bc1726bdcff8a0ecde83aeb0af67ac5c6b3f978e255e180857daef85cd37954e0fe79ec54f4f998469a65cebbc7d3f8ad8f348b808f53d182ba7caa970e9de179b9fa272f3547b967ebf5226dddff12cf96c29d7bafe55b8d4f78d48b80ab5dee7caae1f1265d27ad8df9765e2f4f0cab1d4134f844bad2f0e9453adf79e67f1b325ecf20d3d653d0f02e55afb6f5fb8a6bef87df1dcb77ad67f59b9f3e148d99d77a94c3affe859e65bcaeefec8793e1f64ff1eaa123f3f72acf7b72d5ce97da35859ef1b3d296b3c64ef5755fbf97dcf32bfadacf5c263cf327fadacfd0c97c2b5d6930acfb2ded6a74efdfe0d65771f2e1c6b3fcc849d1e4e94f57da07bcf529f75e17e28f5217b5f3858f79e4c3dcb79cfcaee7d1d7a16bd5b6597afcab1d65ffcd6ee3c7cf52cfd60fdf453b71fef1cabbfa5b0df5f29a73a6fdfcf7edff3c2b3d5c75259fb0f6be5be7067f97b03e1f367ab74109056adf5b35fd2c1024bacb0e6f5fdcf3bf8d3c117756e70c8e3d6abbdf16655465fd401ab23e3eead37ab32363a58ffa6ce102738556fe2e5deea80f8fce9ec173a13559aa9977b9cb38ef134c7c5671d394175965661aa0a3f558c9707fd7ec427feec9907fcd4e14f5ef015d7d5ef867a99aef022df8fd6cb266ee136d23b9d1ddcc53ddcb76a07788847decb31cf9eacf062545ad8c68e28f9b84ef18cd5f6789cb3da0576596bc3fa1b630f2f3f7859b0ca15abb4f927bcd3b9c60606ac1562843126985a6f47d8e41d19ffcc59c37b01b45eda9ffdf0174181d750420535f4318201ab5dc00d0ce196f399bfcb8b7869c38875e06ddd59e98e958cda18263065b57b98b1d221cc450916b0840758b0e6181e75981ea00f3a4ff00c2ff00aebb0c16393b5a6b005dbec680776596b097bb00f0770c81e5a9cfb011cc1e30a3fc770022d6843074ee1ccaa9dc30574a10797ac7505d7d0c00402aec121eb18ad16eb7cf063954288208604526842063937feb9f1c6e176f96f9702fad0e7bf5a2aaee5c80caae188eaf77e6ccd66d4a701ddd0906e690419ddd1d878a3897ae3bcd114eee99eebd8a319cd6c677df24373d659d092c7801eacdaa3f1c66a6fbd4de98975e6dc933d8e6ef4d18f7534312a7cbf6fe919a7acf6a26aefbcd12bf7bcf493e9515aa133639521adcb5d677f1b3c06b4f9d11b6db152132f39b2de2a3fbcf35914f876ceacca36ed988efbe06d976bb6c55dfdc0e3934e67497b46e1a70a1ed33e6becd0018c4cdf796f875c33f36a6cf1cd5ba57344c75c8336efdfa613de2f5e5ad4322a3c73426d126fdc7fa6b7d9d3a7fcd8d8fa48744a67bcabad2a07ecc6a80ce8dca860872ef88ecc8d8ebd252bfc785f5d56eb520fafe8d228bcf17245d7bc7b243796dd6faef6f3d91b9fd8712ae2851ab403b714705d421edd5fe9bcf5663cd015e72de2ff63fed93391b14a42a75fd37997b794fbc568f568dff881213529fb1d9d7779cb39fb7981460917c55fe4f92bdef84532359b17bfccf357bc1585d0dfd7793ffe6f3afffde7b7ff01db83b1d6</data> + </image> + <image name="image27"> + <data format="XPM.GZ" length="827">789c6dd1cd6a84301007f0bb4f119c9b14775d2d084b1f614b8f85d243cc8731eb76a1dd1e4ae9bb77c6980f57070ff9f3cb243aee0af6fa7262c52efbbaf1db209830fc9315f2fb72f9797b7ffacdf2c381e15335acca1fb2bc64823d5f3f14ad01d7b09f8ae299625dd5fb7ada2929b6b557eb625bb5354543910bceb9a038cc51b9d853ec1aaeba86624751487f9476517021290a8af2d1eb48516b1fb98bfe5ee522d5f439eb0228b70578079b82203685407a01ac25ccf780c2820504d1ba870524626001f73d11ee7a128862b027852066301674027e3a48f60cba8f1065c096c15a144915a40484de38c07984194c2f4737d1763a30998e761d7e7e5e7c47b83dcc0de68e149ca8758713395abb82494659c6ff16e5ef98fd03965bb80f</data> + </image> + <image name="image28"> + <data format="XPM.GZ" length="2269">789cadd4d76edb301406e07b3f8510de05c51f4bd644d18becd1ec9d14bda048da597696338bbe7b299e23c676560dc44a8c7ce6e11994e2a9c9e070732d989c6adcf665ff5405ea44de0493faaedb7dfaf5fbc79fc6441405f6276b05d1c4b7c6c4563f50c1fa65cf544069219aeee56c9c73cbdcf98c1db32fc8ad3871c920d92a91cefbe4bc90aab2d0e4222c63b7becb4e4aed3ccfd62a71f1ae7ed8f4f9cfd9395b78533d458e9b29ad37c96992972e1fd845e1ea8b92adc9d823d7fd629d6cfba5fe36d875bf07ec82fac5269bfbc71c591ae5e2459b5c469ad633b28a349d7fd7398f9b348f9064df2fcd97676141fd1d9365c8f572b6e1fc05d9e74fd9a9499db72b47febc84206709e5171db24ca87f44649572be7be722567cde6b645f3f21fbf8c5caad304952ba5f1d72a6791e4dce4349f763a5721c9686f7b7c8ba9e67d559faf962b236867c443611fbb072f212bfc0aefbfb59398dfc7a9f5d9fd7acb3f4fdb8fb99b74ac9f32eb3ebf967c84af2fec7caf6b8eafd616d5eef392bdfcf095bb22f2b4be5f7df92b5e4f9a62b97b19f7fcb597b3f91fd79dc54568989da54ffc1f965fdb9b24e8ce4f51d67e37dc736ec6befb6f35265937a9f92db11fbaa72dbbde8cbe8ffafaf8a8718335ea21c2b5e41c38c95bf8dceeb1a1fe43fc1a9ad71f65e3cce71e17fbb367f0f97b81aad3114dfc3b58da0eb06b7e8e3cefe3534c740fc3d1ef088273c631a3398c51ce6b1e0760cd418885fc41296b1829f58b5b16b58c706366d8d2d37877915bf8d1d9b77177bd8b791f3367e170738c4118ed1ac2b0cc45fd8f810115a88912045861c45152df0663fe7420889a690a2144a689b3b1bce3d1c2f0c4a7bd17b0925daa3b93fbebfa2339afbb3e76734f727cfcfabdc9fe41fef79966f7dfa75ff8fefc6fffddef807271766bc</data> + </image> + <image name="image29"> + <data format="XPM.GZ" length="751">789c6dd0dd0a823014c0f17b9f62e89d84a62218d123145d06d1859ee3ac0b0bca2e227af776f6a1db7488eccf0fc6d9d2989d8e7b16a7c16ba8871b30b8d64f16e3bbef3fe7cbee1b8479cec4b76159b80ac284013b3cee2ded1bb18fd67251d626ab82b2a3ac0aa3a0b2ca38a7e494501a8d5442ae142939871c4aca56252d3983b7a2ba11ff05890088e62240d24c2410f9a241902723f862817b9a0dce040ed8826d6b8125c8b926099320bd952405a3a07a46411a8c68106440cb08bc33a06409a420e21c8ce00cf4698a1c301310b9304e8de8c174531f92f0b70dfee366b514</data> + </image> + <image name="image30"> + <data format="XPM.GZ" length="2910">789c8dd6594fe3481000e0777e4544bda1554d7cdb1aed03e10a10eec030b3da8776b79d03128e041258ed7f9f72557504885d91c6e08faebeab87f9b6d1ba3e3d6a6d7c5b9bcdcd7c645b76681e5b1bee693279f9ebef3fff595b0fc3167d0541d40ad7ff585b3f9bb76cebf86e5a35c02e01dafc690cf7eab89d73fd8577c0f53855db40ea17e2a02d862776be6a1fa97375eaadfd056adfdf481cb443a9df53dba8603b7118c786bd54e7092f0e77c4519c48fda6382bca987dbdb263cb7af3bcb0e2ddc6417bd5dea8f354fca2b659c4de16c7b1baadb6b9f85c9cb4f392f7e7569d14329f637196e87cb6d47e7e736f9bb07fa89dfaa7384fd4969dd37c653f40ede79b8873a7ebed884de0a4fd893a719c1f30681cb6433d0fe8ab633d9f521c591def519c3963d9cfdebaff67623f5fb86417d41f9f2f6caa73f585da8a7126a6f1e43cf61b474168a3807d294e9d91f126623f3ef07aa322ca259f604fedf3eb409c05dafea1711c94a9ec07fe525755ca7e12db507dca3664893f6a9c84b49fb25eceaf344c9cec170cc569a0fba72e7c3edc884da5e7c1fb9b9a3491f503e74b1665899c2ff07e642559f28def13a54320f9080b75a2e6f3c94bb2c4a3ba50f37d2ae2dc49bec2545cf8fcbd15fbfd00be8f85a57a3e7f0075a13e533b35ef97890b3d2f78151bbfff95d8ef2ff07d30d624925f30561bf5b9bad2fceb895d584b7bbe6f656c2acd87137119aa7bea54cde75f3a329f07d46aa33e54576ace379b9446f3fb406c43f5913ad5fbfa2a76a9ce8fff7db18eeaa5bf6db5511b75a5f7376eec125be9fded8b5da8f976a74eb57e20aefc7ef0fd7595f3f99da98de69b53fbfcb3e2ca687bcecf8aae9b9e4fa5f6f9301357fe7e84ea547da83675cd1eab2b75c1ae9adfb073b551d76a8d07fe7b56a7b5ae0fef5696feaed8fc913f86ef0b021a7a4ab4e83ed67d1a6fb0c21a0738c4d197e201c77883b738c1e917fbbfc37b7cc0c72ff63fa3fee7f884cfb8f8bf785ce20bf55d5279c54dece0166ee30eeee21e763f8ddfa7160778883d3cc2638a3ec1533cc373bcf88ff82ef6a9c5255ee10fbcc69ff88ba2db1860f8593c461853e9f318579868df29669863e15bbc89ef02028081b219032cf79d82838a9efa633c0c60082318c30d6650e1126ea9efa079078705d43091163e9e7a1fc214ee68f44c5bdccb3ba919e3e16d3c453fc2b0993f8cb1cf7df66146adfa306f6648bf99d0184f6fe287549ea92c9afe286e092ff456c2825665e0151e640df2ff33d8840e972d6ab14dd1083bb0a4d11cf7b1cb757bd0c1aec4e31574b974a8ff98fa7ce607f81d294eeb7d3cbd5d3585e225f2f9ddcf0eafccd0c8beff825637a3f9eeebbcde972d38a0d51e426f154f2ba393edc33695970fcf11adf598ca98f6cecfc7500f07d4430d3daa7dff9cd0ee9cd2c99fc174157f4efbfc4a4ff3597e78a6b4570b2a2318493c65c305ed68f36c429f9ecb0f3ffbf436a0ef03daff7fbfaffd065501ab27</data> + </image> + <image name="image31"> + <data format="XPM.GZ" length="2061">789c75d4dd4fdb301000f077fe8a887b43d3914f27d6b40718fb1e8cb2c180690f8e9dd0022dd0a65098f6bfcfb93b5763ed3055f5c397f3f96cb2bd159d1eee475bdb1bb3ce74231bd9a199465b6e3e1e3ffef8f9ead7c666a222ffabe328dd7cb1b139e8221b1ddc4c9a1e587a4052f911931f7aa7716c63f62776128bf7c8dabb227fef9d25a94d79fe889dc559423eed9d9b3ccf0d39ed5da49995f901d9e495b862177141c522887541cf83eb5d664a8c27bdabac28324d3e24d7de9c2feeadf3522b8ed764ab9dcec9af7bfbf22ad9dfc7a5797f3371e847c22e13a94fb1755165545fb3744df359ef3aafd39ad6835bb2334949f3508be5793c131bae0f5a76ad0cd77bdcdb16a5937e2cd8cb7c97e250cf83d888ef97e6faf260596fceae53712756da92a7e2c69091f66b5de972eef79760c5fd31ec2ae17998b16bc3cf03b26d5a3bf29d58b1f1436f57a822e5f37dcf2e251f5eb26de30a32d5ef1a9dc8fae76c975a9a07102b8977623f68def66e9435725e13b693f3c3b15859ae6f286e1a4596e79b544cfd6a9a52cb7dfacaf6fde4fc376c2bfd84113bac07466ca43fc360de0fde2ecdf574c1b2bfcfec26e5fd21add7aad2493d3b6c5d48bfdeb1437df8466cf8fc719fbdacef82dda4bc3e8cc5d25fb8161be9ef9538f46b11dcb277c9ad7f1d717df7e2427c2dd6f2ff78152cef2faea7d589b8655b25f77d220ef7ff2e58f6fb2d58cebb1637127fc076e17e3e8ac3793cb1433ff0ad38dc9782dd2ad9ef48ec7ff8e53ce810fe330cd67fc55874cf3ffeaf0db678f157cc104734c2f725455ce1f5b33c3cc7df631f31e923f0e6591e2b9f11defa883b8a98e26c6d9e0ee77e957b8ec08735f52cf0119f7007777dc46bdc1b746bf6f506dfe23b7c8f1ff0237eeae756f27cc67d3cc02f788803dcc3a37f62b89eaff80d8ff104bfe3299eadc4f47b3ac718134cbd323ff235790a54586285da1f0280817a350f5870d0400b1730f41123b85ccd0357700d638998c00ddcfe1be3f3dfc11466d0c11ceee10116b058c973b46e50ccef971b7f008068e53b</data> + </image> + <image name="image32"> + <data format="XPM.GZ" length="424">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022130543251d2e253d856405bffcbc54105b19c856360003103709c4b54c4e4bb44c067113a1dc3408570f0de01653460270b1c4241844128383a1a30e8bdf8808975a6b2e00eaba6126</data> + </image> + <image name="image33"> + <data format="XPM.GZ" length="424">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022130543251d2e253d856405bffcbc54105b19c856360003103709c24d4a4d4b03711321dc642308570f0de01653460270b1c4241844128383a1a30e8bdf8808975a6b2e0083ae60d7</data> + </image> + <image name="image34"> + <data format="XPM.GZ" length="439">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022530543251d2e253d856405bffcbc54105b19c856360003103709c43531b4304c32017193c1dc44183711ca354d4a019b8306708b292301b85862120c22c492136170e8a8c3e23722c2a5d69a0b00768563b9</data> + </image> + <image name="image35"> + <data format="XPM.GZ" length="424">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022130543251d2e253d856405bffcbc54105b19c856360003103709c44d3249354a35037113e15cb0623d34805b4c1909c0c512936010490c0e868e3a2c7e23225c6aadb90090db60e2</data> + </image> + <image name="image36"> + <data format="XPM.GZ" length="424">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022130543251d2e253d856405bffcbc54105b19c856360003103709c44d334b343533027113c1dc3418570f0de01653460270b1c424184488c18512878e3a2c7e23225c6aadb9002a2160a0</data> + </image> + <image name="image37"> + <data format="XPM.GZ" length="409">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022630543251d2e253d856405bffcbc54105b19c856360003103711c44d4bb3488170f5d0006e31652400174b8483a12d86c56f44844bad351700a36a5d2f</data> + </image> + <image name="image38"> + <data format="XPM.GZ" length="439">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022530543251d2e253d856405bffcbc54105b19c856360003103709c44d4e314d314d04719341dc1453183711c63533029b8306708b292301b85862120c22c4921293132118bf3a98aa6402eae8611e16bf11112eb5d65c0046af6444</data> + </image> + <image name="image39"> + <data format="XPM.GZ" length="29843">789cdd5c59532bc9727ebfbf62e2d6db0d4759486c0a871f9000b16a6107871f6aebd68ad006420eff7767e5526a01678633f78463ec39d1233ebabb2ab372cf2af1affff8eda17df9db3ffef56fb3b999f7dc6fae6ba6bffdc32f46a3f7fff8cf7fffafbffd7dab54fa2d5e3bfb7bbf95fffe2f7ffbbb5afce67e5325fc0f7127e1fd888d12bc85f7cd59c2785fcd196ff3fbed84e9fd37c1f4be5d244cefcf18efd3fba69a30def78782f9fdc0d8d1f381e7df62fafd1163a6c7f610ef0b7f669830d1d717cce3bb8489be16631ecf0c12a6f7b5605e9ffd84e9fd2663e1cf244cef2f05f3fcdb0913ff6dc165baef1933ff364f98c67b174ce3f94ec2783f5405d3788ab1ac5f384898c61b3116f94e19333f81e9df127a6e22de4af20b2dc67c3f1b264ce3ef09267ac33961a1275f0aa6fb6e9830be6f9b82891fd363ccf46665c1fcfe8c31d3afae18337d86e72ff3fc36632cfc5f224efc9a53c2f2bcb28ce579c358e6538cf9fd1ce55d4ee3e7d38491bfec4430ebd72e631e2f7f4f98f445de1779bc12ae087d82657d02631ecf8f1157d3f38eb13c7f9630c9afc458f4bbcd58ecb34b789bc773d71157b6d2f35dc642ef65c234fe1d61795ff984f1be3b622cf4a3fd5512bde69931df7765c63cbecf09cbf8a19c30decff704f3fabf32e6f1dd2861b2f70bc1f4bc9a3096f9a709137f2bc6b25eaf0993fc7722dede127e94662cebc5f765bcae12ccf6f4ce989f57d70913ffa782d9fff0fd1d5e0f5d4d98f87b63bcc3f4ee09a6f7f37bc6559607bd6fd27ad1fb6647ec799ff10ed9733662ccefab2c6192f7a1607e3f27bcbbc5f3a37fde29277e036199cf1e30f6bcbea782cb555cbf8cf0ee16cfd716cce35712a6fb5dc1e47ff20e635e8f6019f37c16e3cd8e81f9e9fe24619287174ce3e734be91f9f237c1952d1c6f9f31cf674e12a6e7bd608e1f55c6bc9e4ade97f5dc124ccf6715c64c5f2eef7b8e2f270913fd75c1fc7e89f01eaf9fb109d37a5c08e6e733c6423fca6777bd9e6dc6d50aca2b778c79fe702c98c71b0ba6e70de334ff5c303fdf4d189f0f43c63cbf1d244cef6bc12cff5bc6acbf614730afcfb1607ade117f69fd4dce98f9d1fb8485de702198f8c9968c7788de7c2298f4c31bc62cefac2f98f9b94d98e6db134cf4f961c234df81601a3f7b4f18ef2ba187f5c3761326fa5f04d3f8e128615aef1bc13cfe94f0bee87f2698e943fbdeab883cb25dc12ccf3bc6c28f62ccf4b99660a6e72161e2772e98f5e79e709aff2961bcef5782897e23f7859e8784697c23989f3f60cceb9d1f0aa6fb01f563cfcafafb6dc64cbf6f254cf4bc0ae6f177080bfda12298c7bb4a18dfb7e9fe36deef1ac6bcde612698f57f9c30d12fe331bdf68d31d36b1609e3f36e20989ecf69fd6c95e59f39c1f4bc9d0a66fa51defb15e1370c080bbfd94230f1176a82893fffc898e5114e1326795d0aa6e733799fed47e58299be9960b68f73c13cdf246183f3ed3366fa6d8b70e2b72698f97d67ccf4da15639e5f7505f3fdf384e93edae37e924fde66ccf23034bf95f7f323c64c9f1a274cf1d312364cafe908667a2f1226fde0f10dd39fef244cf2c17854dd16fecd2d635e3f37672cfa3f13ccf2eb278cefeb5dc12c3f4fd8707c725a30ebe33d63f6fffe52308def2a09937c468269fc709830cad79e3136f4bc7f164cf7f321e3c0f39704f37a087d81f97f276ccb1c6f9c60d6f7fd84e9fd9160961fcf6777395f3b4f98e2d55230e73f2f8c0dcf779530d9675b303d9fa13d549de89b7b662cfa3d14ccfabf12bc83fd89fc98b0e88bbf612cf65765cceb197a8c03fb970bc1f47c4eebe784ffbc9930e9c78e607adebe248cf475991f599ff02698d7e74130cdafaf0573fc7082697cd560cceb69b613a678772798c6d7270953feb910ccf35d09e6f57e651c389f7f4b98e2fd4a308f7f9030d52775c19caf3c244ce3f37c8ef54f3f274ce3d705733d749f30ad9f62ccfae72e1226fed37d7e7f8bb1e81bda9749f668278c45de33c1a44fea9db0c83fdb16ccf2384b98ec755730bdef6e18eff2fbc70993fe3505b37f3f4b18c7f34e308d674b8c59bece08667ff62098f5f35630fb9771c234fe9e601a3fbb62ccf2773b0993fec8f32c7f5f4a98e423f4b3fcfd56c2444f5b30dba716ccfc2f1246facc23e1a42f8b84495f4682591f6709d3fd8660d6f7cb8469fd83608e37bd84e9feb560a66f2761a44f337fa28f3a4f98e65782993e9730dd5f0ae6fcca274cf6f22298f547d683ed5f9f254ce3f505f37c938429df7812ccfe9ef5cfb1bcd543c2644f321ecbdb3d254cfe1ef305e3245ee5b4bec91fba2c61bcef8e19333f6a2f615aef86607e7f2998f4d3bc3066fd563dc11c0f647ed1e7d784f1beda66ccfc8584797db712a6f87c2f98fd432361b29f8160b64f4b58f4d5761226ff732398ebd32c61ba3f11ccf5f763c294ff9c08e6f5eb274cfad213ccf66e12267a4782995eb92ffa7b9430e94b5930eb532d61d28f84397ea6e739ff7a104cf4ea66c224bf95609677bacffef38e31ebbb6f244cf409bda2ef8384291ec978acefea2461f2474f82391ebc274cf4dd0a26faf47dc2a46f82255e9e264cfe725730dbcf79c244bfd0cbfe310f82395fbc4d98eeb37e7ad6275512ccf1fd5230d773682f36c5177bc598edc33412467eb20163f6dff65930ebd36dc264ef75c1345eb79b30dd5f09dec5fb9edf17fdcf54c2648f2782397eec264cf2ea08e6f8762398f3bb17c1acdfe384c9fed3f3444f5e66ccfaaf0e13267aee0473bf659630f5739e04733d3b17ccf9db96608e1fe93efbc303c6e2cf5f13267f2ef48b7e4f13a6fbef8239be5d244cf5a7d0c7fa1dd698e83b16ccf6374998e80b82d99fce12a6f85c612cfa5f4a98e8f38299fe9030e96f4d30d35f4e98fcef9e60ee47a4f7997ea157fcf373c2a47f39612ff9433761a22f13ccf9623d61f21fd782393f58635adf1663f67796f4c58bfe67645f5efcaf3b13ccf76f05933e661dc632deb160ae3f2e1226fff42c98f3cfba60b6479f30cdef18b33ed9ad84c97f58c1ec2f4709537c96f9589fcc55c2b41ee97df637a70993becc0573bd769d30c94bd6c7ec122e31967c749530d15b13ccfa651326f9f604737c3a4a98e2a5ac17eb973e4e98fc4b4b30fbffbb8469bd0f05133f7a3b61926f9a9fe4db652cfa686e12267a8d60e2a7334f98ee0f0573fe769f30e94b4330c7b39384291e5404b33f9f264cebcdf2f652dfd712a6f90f05b3bd5412a6fb2f82d99ecf13267dbd13ccfa722d98e6578f8c593fcd3461f2c7a80f6e47f427d413a678fc2898d6db6d3366f9da878449fe4a30eb6b59308fb72b98e5a713a67c8a9f17f9e4e782593e09b3ff784b98e6f782d9ff5613267bb914ccf5e869c234ff8160f61f178c253e2d05b3fe1f264cf3f705b3fe3f264cfe55e8e3f8a52b0993bc7605b33daf31dd3f662cf56a2361d297b9608ef7f709137d428fe463c22ffb97ec2861eab738c11caf9e194b3f0cfdab037bdcb3789ff427d9436e13267b7814ccfc2d12a6fbfb82399fb84998ecff4df07e05f12a619cdf8d194b7e769430f1130473be96254cfe4709a6f9c32261a2cf08dec3f9d50e63f6dfbe2f98f39366c254df3e08e67cbc2398f339a147fc6b4d30d71bb29e6c3f994e98d6678f7090f5c7fcc783fe54b771be13c6122f0e188bff6d0be6fb3dc1347e67ae95365afdd94f6db583ebe3e71f5df46ee1fa67e9405928ed7ff115be71c5e7329dc3f58be6a538f74faf495eb8d2eff19efd0399fe2299c4cf5f22975c77717d8b17fdfe57cbfb0fe5f22bd624c9c17cbe8af759566bbbe969f72be6ff85f6f2d10efc2719fde8795778e7af602f05dff423d9f0f5c9aefe72f6f2b58ffabcde24a7ee07fbfaabd94b5f7c167c0ef4103567146d017fb6681378c5dfc3e728cece9f83bf98bd78fdacc7405994857c0e81ab173d619b18e9295c16f08b9ec59f91ebc0cffe75ec650e147aa20ef1582fd00e2287affa0d7f475447bfb5846ba6df91a31573f557b2178fda1235ad8f964dbf5b688a316f5156a861537da06bc8c99235b10ef7fe42f6026b9feb43e022527d0417e76448bd458aa3dd2cf5b16e0017272897289331be77faab7cd92f91cb195074861445aacf81e20b7d099437754bb775475fc175ad6ff4adbed3f7fa017effa89f502ef1bdd2aff265bfc45e0ef51650a4c0aacbba02946eeb1dbdabf7f4beae2aad9432cac26594535e0595a95c75554ff5f5a302eb57c3ffd5f842b15be27731b64bcc78d52b35d24df5acc6ea454d80eaa99aa9395e73b5285cf17733b8fbaaded452bdab953ad00d156d287c98e3a37ffb437ff71d7b8119cee0eaab3aeb3ee5502375a88ed4b16ae8b13a51a7ea4c9dab0b7509d43691e6b96af1675b75e05ae0b5e6285e57ea5aefa91b75abeed4bd7e550fea513fc3d83355534fc0e10ae4562ad445aa985bfc097bc158adb6e29a0937aa0c9c54f49bda86cf1db5abf6d43ec8a20ad42fe2e04601f51da0ba782df013ffc1fdb631c855e447196b9cf17aa98ec08b7bf0f043f4790eb4568137fc4e4ef15d7b61b93037f4a689b1c10493e91d939baee9910c90933e5c03a0b49564137f46999861e484ff69919119996733362f6602f67612b980958a14c71c625594c73f692f59c15ee83a3353adcc4cf5cddc2ccc2bea0b528e6b2d72987f71a16ccc1bf1023f6933304bf38e1c4dcdca1c807c6aa68ede3ac6a9b15e9ac39ff1637f642f511672018e5ef4cd1c9963d33027e6143818004d4bf8ff80a98d9a56948bd88b7014b58c3511af33e06c89f239d7fbe6c25caa13981bb8019d1b9ae68f72ef3f175f926665e07dbbaa610ed5cab474d58c7045911aa4d014fcd69afab5fdacefb5d7b603ff22376ff07bb01ed3361d7365ae81c267a0b08f7941f69dbcfa3bf6122d5e64626ee0b3079cdc82ad47dd6a1993ac7d81728832e924bbd105fb50289f8e79877f4b944f1b3e91afe80d98fb99b933f7a0bd0f60370b73631ebfaa79fea4bd88ff10bbe9e9a67982e8172dd9b0050c80aa41b215f1559d0fffd6b6d4a64fe464c1b25cdbd9dc94c072b64c192c7ecb543ef512f24ff47d3fbe440f193395d8103c0299ec98dde493801bb3c736b0cfdaa290bbb9f82e8c3733f673c654c1d6d7fcb54d353d472b409efad26aabd4893598af2d50db8c7eb6f6c7b2f996bdc47812b3c037b4932765909325ea3c5a409449e4c13af0515a7eab66713f4f55cdb9b23603495e41049acb3f9bb3cdb431d6cca2ada1762a5ca19972b66bae54cd9a82dd56e8fa27f2b12164f4d1a744edba654e86512a6a617bacf7fb6c0fa825d6837f73b66f07766847f6d9383bb62f7662a776664183802b9253db2ec8ee31d6c471348ed3466e5fed1bc4af065775b1fe19488cf9e8dbbe6d2f6f7619eb42fb6e5760f1738aed29962f687dd15e227d55a0e1c0d66cdd1eda23d5b7c7fa123c78d936f4933dd14d7b6acfecb9bdb097203318cb3663c4e1f1d8bb01a618dab52ddb066e02674fb1a25bd73bf967b9fc91bdd80e8cf06e1eec95bd86f58c32d128931bd58c51055672001a833aa526f6d6ded97bfb601fed932dd92d3d809588d570aca2e33553076662cb20af0ae46f57e4b3ed768c50c90344ad6bc26833bb6377a152686005176ba09e697eec45ff94bdf46dc7eee93bbb0ff16491627b8c85e281810a1bccaead3a302e072aa567c0c5c839b45acaa74bd87f39433c35f5b8f7e23297c7681b478371dbe8db0c47da05f00252765dd7737dac4797984fbf147cd746ffed5bf1e518ae5337c0595be497a29d80c5a0bdb8f8e9ddc83d9b2d3746db2a77e6f182f92d56cf79877a357d8c5331b70b901797dd8b9b980b37759805915cc0d371fe005cc5ace1cacdf593f16e01356903abeb2ffa703fb097cd1c14f876af6a07328b57f495cd64250bb6912672f2e6966e629fdcbb5bb95777a017ae86ba1d2d7691728758dfc74a3ac378fea6eaeac9d5819b43b49d39d91d65d0e81b07d127ba23776c827d02d94cb1dafe585be59fed052fca4907ae112900dfd5554776cb9db853cc1cd7590aac5ab49b2813c872c7ee4cada02aae6de8b2d41d31cf7e71e7c0495f1fba8b582d74e6dc7d1dbb4bdd724dd78adc403ef0c6b169ce1eba1f57d0b55d076402560f2b34d8183ffbc25e48ef38c6e3dd579cf90a226459edb9eb98cf7324a30c5efc58d55877e36ecd117623dee0bd8f3ee6ccdde967cc4ecbf0cc509db87bf7e01ef581aabb277d04b2ba7025b785d1a7bd91b771bee0caaee2b6dd8e2ea923e0268f578c7b1bb5e857727188bd5ea88adbd5af6ecf646adff4303a76300eb6b04e210fdc74fb760c9c78b04abfa9c3c9de200b710d900bf83057f5206ed3f646df821c4fc8c3aa7b0f6aea3d6b5a9bb457f23ad0b2990f608b607b3ea3de5b87faa492276edacb5aef025aeb336a18640db0de3b18555abc662d8e0151ab673ef75ddf03ff52e70e519f57a2d8e387ec4395e0f707beef077e88bd802babfd086afd13bb7417f05e43dff967378d7196e34c7b2d1735f763ff02d9660f344ce2cb3a4ffc1db9c013938487e6d84f50fa4da9df392f063df6533ff37358df55aa9e7cd2df756e7be85e4193966ad72ffc2b4694e845a6aee5827ff34b5d72bb90679d806cdefd1457adc3768317ea42d5affc01649b63552eeedf44b9fcc05e88df3af61f33904d80ecee14229ad48c4dae57fa717cd0887db305fec5c56e9faf816dbd727f387ce8e7bf826d1cf891afc78a276629fe10d6fac81feb5b57879528b92bdf5027209b13cc6ea4ba61d9448fe34ffd19707e8ef998655bd9e8d77c940bfb9709f5854d13f4fb227a7fcc24e75c9f28b31f7931affed237cdb636c005d59b23fd92e2720eb50e45c6d83bab0025ad281353f56de0a50399c24c197f053eac0eb1e63056c4fedaee9a76e406653f4831277ab64b7f033a728bd64fdc50cdeb243fdb882f622f0ed7d5c37a9d832dbce0c8ed752f85bb0e557beb3cc4f6956f604c37dc4399f258dd5883f298effad6df819d0027a9b6a1dc7e6ae72e40563142d9defb07ffc8fd03a973da52d7f82758d9d2860ffb54bf7c8aa3312f2e21ef977a5b4d20eb52d25b91ac3c5aa3bdf35bbebcaefbc4b760ad7ea84fa35c40239cafd87bbfed487724cfe7aa2b6aaa6bf91df708f22de981dff57b7e1fad7391e2ff007380a6affa3964463946e1a055512e057b091b31c66126187fbe801b2e6af83a8fe5359d412e7cef2c5862a9e0b3689c852e05652a643fae1e8c9da3c553ef6c99aa32c31cd9000c419e05eb1d3cf8dec39855723f4dfa376dac019ec1abaf308f18fd582ea2e3bcb3e0c8a785a077d183ae65d247192da0eeabd98790f9f2177b90877acbd7a01e044e7cc5f5428e9ccc627c92da8433c9183f66304d37f440cfe26a3eea76e89b73f4cc1df661b40a0bf0e331b7a04c757d6ee0a3bd84a4e3f1e703d032d2c9637f8cda2bebd3e18a2b6a58dd3e42195b46fddddc833c851afd0cbb8191b2017af45449732e2cb971ccbccec3308cf405c68a51780e63ee8bac738b057569428c3163caefc4be538f48e422e753686d638d109fec418eb50fa3b652cf8be4328451277a1bbc31ed3d9a8d78425e00bc7098061366a45da92ed1940b23477b71cdc3dccef415acf701ea3d546d618175d23c45ca98ff6f475e202ff36e8fad5f7a441fe3cb5a2e39dacb0be87a093e5be175a3574f7281bcd8ceed517883fa44711cdedccf1f836c1ffdc28cc3123dec80b3d175b545963d37a776eeb53d095ef720cbf11055213a9bf107b974280a8477d73333dab94d57f6237b81cb617d1df7ba7abaadf4bac38af1b81f75ccfab0723df0290bac4fec5a67d1de867ae62b5e8759e4241c707fc3b09691ce609e654e43cd8fa07a56dc438eb1c84162f68e3195ab3ceaf1c0ff67a614eacec48811630ccfd7ffa27e09453f06eb9341b6d8a14e45ea41b25c54351c421d5f7335c85dc71fe26fd08df0ec17e1287a0de0a4cd9e68b3df1ffd5208c7c1f85db0ab4cd79578916908a1116351eaf32c521c9886713841b9acfdd85775a59358cabe7ba17bfe017b7a32a678e4a639370d7d09757ccea3f555053251dab15310d146fe15fbb3b1765b778a86a9ebba1773df706a5ec0e6e2dc75d0fb098da3a3afba35e73c6f3365ffe8bddd5938431dea21adf9a7fa45e4314bb2211fb1d43736dbd45bf69271bfe408a4db851c179e85c88ff527d62eeff63ec59301fb2bb5ee63c63e85ea84f370112eed43ecb2625d13b97953714cd050b385bc248fac648fc086a61a614536533193e9fea0de77c22b67edf1dcc4b5a21d1fb254910bf062c7e01da98e8f7afe0c7229412ebc7255c856b6a91f917afd1d96499b7b9da0fba115daa1e326fe16e49f61a536d1e37015edc61c85eb823ecc1327605fa61123c1a65c36ec45f230914bdcddae47bdb7cf6c2f8b0db9c0fae81db0d867d0a8d88d9840dd7e1477e68c0fcd70e3e28ee4ccbc53fe51f45da9d3ba845a7166e7e1d66f853b7711eedd8599c258b01aaa063eed06e542762a1ddab83abb7ac7513c99712efe45fd22b954e495bb9c2eea2d56611bd68f9f5776a29fa2af93ba3ddc4156bfeb47e101b36a83317e6896916a9189ec91018e9df4b9e901378fe1093ccd1554d171870af273886d2d7b863a4ab9db3ce5cb31428f592ef607f622fec7257bb1787ea501b58bdfb017fa39f626a7f6046a7bca13faa0ef3353834aab4e34a007eda4de7fa7f0bef4f4dbe81520ba84923a895a4a36a747aa661ec256a03ae98d56112b32783b942127207b5105dbfe2c179778c5b343bea4df5d50dcebc1b5155f067a07b1ba09def80c346c04eb598fbe2b5430ab374653879c7bc4e2c3164af696c9b70fb0b2bb04bfbcad62bf38763d205f80798fc34eec9573beb4ce1766ea3aec921f2becd97d55bface5f20c233b88af07fa21ec61c69aea6ea403f22b5fb7a7ba0e3e0838075ff60291f1882a2deedbb7b9f698a7e8b0eeaf34d57a77a26983790adbfa09fd52cc1b7aaea7f6637f899f595bddcc1dbac0f1a5586f7d5557dae4c74671cf05466f867dca8cb0fe8a99479c21ee953a73613c55d2a0214f5ea14cde02d65ab8e24441fc8cdd6291d322f5bda8d26e614636c8b479c814d8feab69867aacfa639f9a7433c5ff596632ab1bc5b3b53fa8f77dc15e48462b7b9239aad0796ddb69d765aac6f61d6b4888d999cf02e65db49767d0160c6bf9823dda922bb0c2de59aa2eafb20c624aecb3accc91ea82841752252be9cacccd28cb41b3dfd15e36fa799bf1e5436f6c127b9750ef97ddd2427649bb22b152e61e19f8dcac9bf5a0ee0ce8952f33a839d4cc1f7a8ea636c75c1877bda3c70ae7b8be6d5c957eeab12ca447a9ae200fddd5cd6c00b5d829d4343dd6cb16aec2221b462f1662ffa1947aa3d487f96c2fc51aba8e27442a3167f5bd6cc4ddd7f5fee322ee50d84b3b827aff203e9f41fe65759420dca18cb8cab2883a350a17d9585da20cdaa8591ff6ff31ffbc024d7b017bb8c5be12565f2c97f87413d6efcd55b3097252b495df974b3cef10a2ee827c1eb32967ed056ea2f543615bc966ba1c3b4fc0d1b16b66a0f9182531ba487da2aad9227bcddeb2653c9b81aba2d37ee6ba071ae36b357bcf56d94194a16a81bd0c413a43ae775aa009b5ac0e1e6990e4d2fba23f263d4b918b54585b1a7c7f76987614c8bb2e25cf5517eaccbd60ef3ee893ecc80598c4727f4b6ac653d0c563fbe0265903b2b4cb8d882b7bfdacb5a04927d9697696bc9dec20d29ecca9bfcccecd767681ab1ee9a59cece37e655eeccb73acc9a166dfd253d7f3a764cb9c7d602f05ebbc2b97bb49b42bc8c5c6fac49e40a67f8af9f182ec44d9ec3298587ffa5bfb181e919b26d7a9eb5d099033aed43e7902e0a0637bdc8b1bb20c9bfed496634709f4652d97e5a77e72b197bcbe4a59d354fcb96f664bf42b863b0fb88365dedc3056ea313fca5a3a9e2f9a676ddb704d3bc70ef70cb570ee4759472b73935d85bbf064cbe178a34e95fed7227a05cca0299e0cd73920af4ad5ceb3ebec26d69ea98e75aaf6237bf96a8f167ebecca235cec033491c8efe96f749ccab7dd12ddc0789b54bddee81dddcd90cf8c82037b8cdeed906c9833ed9fbec41f68dd2ee397394728bf5ae2e69d81b543b537ba62bd4238afd37589d47ac81eda7fed8ef9d85a981e71fab2af65ecf94ecbe5116b2303d77188cbe885d54f510b9c99efc222b856e56d2d7ee11a2e929d68c31df8af9c453b6052a021942568e23e19eede2c3bf39ef490b9ed9905520d39d81264fb8b7bfee897e92cbefec573aff966d673bb1a76cced0a32e30e7228d985b9fedda336ff5d25a98e1508fb2bd6c3fabc24415c8dec7b136c9313e0337757567df21f458b0aa5951db84fa42af72ce57f48c6d3b31d7fad55dc53e6871efed27cfc3585fca6dee7037894ee8ac7d1a5130cbbd771ab27edcb928996d3dcc03d4190778569c329d3e64a067c0cd9baab9173f37e3185bb9a3f7512eeb9c7cc1e367906304bd95e71801c4dffe89fdfd7067cafec5eee0baf50b711b3d349efd18e55dff9cf7d4891ebb2b6bb06e1f415d72ee1a9cad96f2c84ddcbd5010239ec2ae3fc6ec6889fdb64fb291ea3afe261fe4437fefaef211f642d7b5cb9fd8dff70d33cb9ff371eada4936cf7955cc356d00eb9cea3b1370ffdd63cd1967ebe36ec669fe023201f9b82bac7962afe5369fe453eeae7ef18f7b9b73a83f634fd3f1be417f637fe753fdf247fbfb60030b7b941deb7dded3ea14f746d09fe2991d3ff5f57ce61fc2339e61a969af1ab4839bf7913b8372893db0513ecf17f96bfe8671eb0b7b419b843bf9327fcf5721484550b097fce7edc5d5dcabab81cd1c645553a278cc7b0f738ea1586be229899929f9477f06b54dec97ccb0c310f7f12bbc7308b9b7eee5b578722bafe7138ef15f5a0a7305d1353fb4a720c70c77b8d63dcb4fdf79fae679fe41b883985bcd8f7c2e92619b957dcc36eb78f44edab5f3e3bc61959b38959fd0f760d489f3f6dd79731c1e4d2b3ff553c8bbe6d433e31e2dff5f649eec06e2647ea656317fc0be9d4d7125c76ad07cdf5ef42c3f87cf715ecb2fcc7ddce9a748872724e4ec74f1241bccaeace9da6b3bb0b5fc326fc633fdf63e6fe5edac947720f25ec93bc92f7e964ce1acb939873ab66e26e0359e5d434bcf48a5ef397d3bbee85e36f1e5ec465bbb67ebf915e554f1346eca12298f7ee3eab389de7616b7882096ce20dfb46617ae538c2ac8059fa7a13e40b1d7b2d89009c599b862575937bf06cf22f9e2fafb7ff9cfc497bc16a50bb51c48172a59c877fd18296aaefbf56add09fcd873597f12d74b94a94a7563ab70cf7065bf2997366607576127b3a6b9b1bf5fdcfffede794bb0563c4155737be09de7f98d6bc50c4d3521475baef7e1d3a5a973b1c620b1b7755d2c1ca34cf0dc56c156cc67b9c40a0f77fd4c7e0babba3e0f53c821bf6b2ff99d39d4b57017f7c0dc8eb6d95366ed9be9aaf5370f64cf57e423a73f3ac98e36cec2727642f5c957d1fed39973c8474167f3fbfce1c7dfbff84e7c01edaae91ef8c4b8a3b7d25bd6aa5afe685b7607f29a68377d8e9e2d95ce270be5907a410244f509f61f0cf568d25edb909fe3dda67cb9b69d8d7e007063daf993afe85561bffaa7e38b0eb663b6ed12f0ab79cc4bf9565e8668f8605ff28adbdc8b5ff7e4a587b2d10f4eab3e4f56beee02ce638ccfb7f15b271ffc988b7ee4d59e43d6df28f4f2d6fb71dfb797cd8bf734fd963db5f76eee8eb01b583821b5e16165d78165c6156f3bf5fcc9ffc533bcb37c6047f92abfe29d9b74fa173c3c64caf94ebe1bfb3eeebc40d7c6fef537bf2ff6e1cc3676b07bbae11ef3906de59d7c0fbf334279477b83938d9e0b769596058e4966a43f593ed417b84278a2d4e6d89d99473f6e56a603155f034f9f660579fcf479cb4fb219635f7309167402fadbccf75dc50777cddf81a11a1a1eb4db763b9e5b4e5e9afa65f19fc98660374dcc7caa6e9a57edc4befbfb58f586d0d5be1e7537de233efd45dec3f3fd9378e6e263edfb13f1657d15eb05fc96613c03699ff25a76ee7af9a51f769539c54ed6fc835c3efa2afede98d9f5a7760ed5ef31545a718f1472e890a95b5bf7753c23310b73fbea2f740b38a915ce8c7ff57db26f7fbfb2b8167cde780615572dc6df70079eba678255e1323ff6435fb5af7832fcf3b7df285f9ba9a92965a32ea439b6dc7558c7bf42a535821a3ed303fb64265d6fbb4aa14cded14edef99c8dc73eccc677d27f26be7c5a03fc562e9e9d9ce2b7d38edccaed40ae74e9dfcc7137f8b97db6abf0d2cdc23be4cd53cc614e4106d35056d7eed03f657968ea8a9964e7be04b9918b155c9e67cd985bc55c38566b99cd6f219e3c45df0538ca648195d878839e7c532e7f682f85bf31426723f82cf80bf610637fecc8670a72836eee6fdd1ee40833d09a07e7d52ad455cf9d8566b79b6ddb71de08bb2ed8b26e66369cc50adad5604da67ac094623d8a3f4ff5329bb885f178023e9e21e893d7a1ef8ffd497bf9e26f8860053cd693a8bf9d793c9d46fbfcf1e7e82521a2e6b0d690f138134ec2991ad94757b78f6a14ceec53dca5026eb903e16a69dc919cf5c413c5633c05bc8a9faa8ebdd178a679c5ddfb4d5ff6fdf8f2e1efbffcd0c759a28ccfabc839af51e1bb919b7f1fa6f87dc9cddfbb0f7ab1f1de8fe8fc097bf9f1df77c1131d9453e3675cdb45e112ee3e7da69efde65eca669fe5f7fe36c606fea9ef237f219b8d5e88ac5d48549206d177f68bef15e3b59ccb5ce714369d35f8ea6f01157525e16fc797fc4bf9f80f71777d6ff36f2504ecc7cf3ebd27e3ae7b90ebdecafacc67f19c8ddbd0894f31e69bf958fe51361b72f9c1df48fa2a3e6fc8b0b73eebf1719e8fb1ad50e317f1c6b8df944bf78bf52fcaecabbf0ff3f1fdae2eee273891d7e61eca47dff4c1363ecbe4e7eafdf879a63fefd1acd724dbf86eacec21c64ffaab11856f00cbfde2f5c96fd17c9b722dcc9be402cf757bd8efff197bd95cd32fbe23a355c117c53577fcad9dcdef337f25c3cffea968379f65bf96133c079c6cc8e5bb39f2cfe46d1f75febbf77f34df973654f47ddf8f2fff27ae5ff4f7c7fe129fffafe4f2dffff6b7ff0140588b33</data> + </image> + <image name="image40"> + <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data> + </image> +</images> +<connections> + <connection> + <sender>slider</sender> + <signal>valueChanged(int)</signal> + <receiver>lcdDisplay</receiver> + <slot>display(int)</slot> + </connection> + <connection> + <sender>slider</sender> + <signal>valueChanged(int)</signal> + <receiver>progressBar</receiver> + <slot>setProgress(int)</slot> + </connection> + <connection> + <sender>dateEdit</sender> + <signal>valueChanged(const QDate&)</signal> + <receiver>WidgetsBase</receiver> + <slot>updateDateTimeString()</slot> + </connection> + <connection> + <sender>slider</sender> + <signal>valueChanged(int)</signal> + <receiver>spinBox</receiver> + <slot>setValue(int)</slot> + </connection> + <connection> + <sender>spinBox</sender> + <signal>valueChanged(int)</signal> + <receiver>slider</receiver> + <slot>setValue(int)</slot> + </connection> + <connection> + <sender>spinBox</sender> + <signal>valueChanged(int)</signal> + <receiver>progressBar</receiver> + <slot>setProgress(int)</slot> + </connection> + <connection> + <sender>spinBox</sender> + <signal>valueChanged(int)</signal> + <receiver>lcdDisplay</receiver> + <slot>display(int)</slot> + </connection> + <connection> + <sender>buttonColorBox</sender> + <signal>activated(const QString&)</signal> + <receiver>WidgetsBase</receiver> + <slot>setColor(const QString&)</slot> + </connection> + <connection> + <sender>lineEdit</sender> + <signal>textChanged(const QString&)</signal> + <receiver>WidgetsBase</receiver> + <slot>updateColorTest(const QString&)</slot> + </connection> + <connection> + <sender>lineEdit</sender> + <signal>returnPressed()</signal> + <receiver>WidgetsBase</receiver> + <slot>setColor()</slot> + </connection> + <connection> + <sender>timeEdit</sender> + <signal>valueChanged(const QTime&)</signal> + <receiver>WidgetsBase</receiver> + <slot>updateDateTimeString()</slot> + </connection> + <connection> + <sender>timeEdit</sender> + <signal>valueChanged(const QTime&)</signal> + <receiver>WidgetsBase</receiver> + <slot>updateClock()</slot> + </connection> + <connection> + <sender>pushButton</sender> + <signal>clicked()</signal> + <receiver>WidgetsBase</receiver> + <slot>resetColors()</slot> + </connection> +</connections> +<includes> + <include location="local" impldecl="in implementation">widgetsbase_pro.ui.h</include> +</includes> +<slots> + <slot access="protected">init()</slot> + <slot access="protected">destroy()</slot> + <slot>resetColors()</slot> + <slot access="protected">setColor( const QString & color )</slot> + <slot>setColor()</slot> + <slot>updateClock()</slot> + <slot access="protected">updateColorTest( const QString & color )</slot> + <slot access="protected">updateDateTimeString()</slot> +</slots> +<layoutdefaults spacing="6" margin="11"/> +</UI> diff --git a/examples/demo/widgets/widgetsbase_pro.ui.h b/examples/demo/widgets/widgetsbase_pro.ui.h new file mode 100644 index 0000000..ec3d1ce --- /dev/null +++ b/examples/demo/widgets/widgetsbase_pro.ui.h @@ -0,0 +1,64 @@ +#include <qobjectlist.h> + +void WidgetsBase::init() +{ + timeEdit->setTime( QTime::currentTime() ); + dateEdit->setDate( QDate::currentDate() ); +} + +void WidgetsBase::destroy() +{ + +} + +void WidgetsBase::resetColors() +{ + groupBox->setPalette( palette(), FALSE ); + if(QObjectList *chldn = groupBox->queryList()) { + for(QObject *obj=chldn->first(); obj; obj = chldn->next()) { + if(obj->isWidgetType()) { + QWidget *w = (QWidget *)obj; + if(!w->isTopLevel()) + w->setPalette(palette(), FALSE); + } + } + } +} + +void WidgetsBase::setColor( const QString & color ) +{ + groupBox->setPalette( QColor( color ), FALSE ); + if(QObjectList *chldn = groupBox->queryList()) { + for(QObject *obj=chldn->first(); obj; obj = chldn->next()) { + if(obj->isWidgetType()) { + QWidget *w = (QWidget *)obj; + if(!w->isTopLevel()) + w->setPalette(QColor(color), FALSE); + } + } + } +} + +void WidgetsBase::setColor() +{ + setColor( lineEdit->text() ); +} + +void WidgetsBase::updateClock() +{ + clock->setTime( timeEdit->time() ); +} + +void WidgetsBase::updateColorTest( const QString & color ) +{ + colorTest->setPalette( QColor( color ) ); +} + +void WidgetsBase::updateDateTimeString() +{ + QDateTime dt; + dt.setDate( dateEdit->date() ); + dt.setTime( timeEdit->time() ); + dateTimeLabel->setText( dt.toString() ); +} + |