1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
/****************************************************************************
**
** 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 "canvas.h"
#include "scribble.h"
#include <qapplication.h>
#include <qevent.h>
#include <qpainter.h>
#include <qtoolbar.h>
#include <qtoolbutton.h>
#include <qspinbox.h>
#include <qtooltip.h>
#include <qrect.h>
#include <qpoint.h>
#include <qcolordialog.h>
#include <qfiledialog.h>
#include <qcursor.h>
#include <qimage.h>
#include <qstrlist.h>
#include <qpopupmenu.h>
#include <qintdict.h>
Scribble::Scribble( QWidget *parent, const char *name )
: QMainWindow( parent, name )
{
canvas = new Canvas( this );
setCentralWidget( canvas );
QToolBar *tools = new QToolBar( this );
bSave = new QToolButton( QPixmap(), "Save", "Save as PNG image", this, SLOT( slotSave() ), tools );
bSave->setText( "Save as..." );
tools->addSeparator();
bPColor = new QToolButton( QPixmap(), "Choose Pen Color", "Choose Pen Color", this, SLOT( slotColor() ), tools );
bPColor->setText( "Choose Pen Color..." );
tools->addSeparator();
bPWidth = new QSpinBox( 1, 20, 1, tools );
QToolTip::add( bPWidth, "Choose Pen Width" );
connect( bPWidth, SIGNAL( valueChanged( int ) ), this, SLOT( slotWidth( int ) ) );
bPWidth->setValue( 3 );
tools->addSeparator();
bClear = new QToolButton( QPixmap(), "Clear Screen", "Clear Screen", this, SLOT( slotClear() ), tools );
bClear->setText( "Clear Screen" );
}
/*
Scribble::Scribble( QWidget *parent, const char *name )
: QMainWindow( parent, name )
{
canvas = new Canvas( this );
setCentralWidget( canvas );
QToolBar *tools = new QToolBar( this );
bSave = new QPushButton( "Save as...", tools );
tools->addSeparator();
bPColor = new QPushButton( "Choose Pen Color...", tools );
// bPColor->setText( "Choose Pen Color..." );
tools->addSeparator();
bPWidth = new QSpinBox( 1, 20, 1, tools );
QToolTip::add( bPWidth, "Choose Pen Width" );
connect( bPWidth, SIGNAL( valueChanged( int ) ), this, SLOT( slotWidth( int ) ) );
bPWidth->setValue( 3 );
tools->addSeparator();
bClear = new QPushButton( "Clear Screen", tools );
QObject::connect( bSave, SIGNAL( clicked() ), this, SLOT( slotSave() ) );
QObject::connect( bPColor, SIGNAL( clicked() ), this, SLOT( slotColor() ) );
QObject::connect( bClear, SIGNAL( clicked() ), this, SLOT( slotClear() ) );
}
*/
void Scribble::slotSave()
{
QPopupMenu *menu = new QPopupMenu( 0 );
QIntDict<QString> formats;
formats.setAutoDelete( TRUE );
for ( unsigned int i = 0; i < QImageIO::outputFormats().count(); i++ ) {
QString str = QString( QImageIO::outputFormats().at( i ) );
formats.insert( menu->insertItem( QString( "%1..." ).arg( str ) ), new QString( str ) );
}
menu->setMouseTracking( TRUE );
int id = menu->exec( bSave->mapToGlobal( QPoint( 0, bSave->height() + 1 ) ) );
if ( id != -1 ) {
QString format = *formats[ id ];
QString filename = QFileDialog::getSaveFileName( QString::null, QString( "*.%1" ).arg( format.lower() ), this );
if ( !filename.isEmpty() )
canvas->save( filename, format );
}
delete menu;
}
void Scribble::slotColor()
{
QColor c = QColorDialog::getColor( canvas->penColor(), this );
canvas->setPenColor( c );
}
void Scribble::slotWidth( int w )
{
canvas->setPenWidth( w );
}
void Scribble::slotClear()
{
canvas->clearScreen();
}
|