Pixmap controller implemented

QGraphicsPixmapItem added


git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/trunk@6 cac9541e-1b8d-4bfa-827e-589bba606050
This commit is contained in:
ruglory
2009-01-23 22:23:15 +00:00
parent 972ddea68b
commit 8d299ef0ba
4 changed files with 116 additions and 7 deletions
+24 -3
View File
@@ -63,7 +63,9 @@ bool QDialogPixmap::exec( QGraphicsItem *graphicsItem )
m_item = new QGraphicsPixmapItem;
m_item->setPos( item->pos() );
m_item->setOffset( item->offset() );
m_item->setPixmap( item->pixmap() );
m_item->setData( 0, item->data( 0 ) );
scene.addItem( m_item );
@@ -79,19 +81,38 @@ bool QDialogPixmap::exec( QGraphicsItem *graphicsItem )
if( QDialog::exec() == Rejected ) return false;
item->setPos( m_item->pos() );
item->setOffset( m_item->offset() );
item->setPixmap( m_item->pixmap() );
item->setData( 0, m_item->data( 0 ) );
return true;
}
void QDialogPixmap::onLoadImage()
{
QString filter( tr("Images ( ") );
QList<QByteArray> list = QImageReader::supportedImageFormats();
QString msg;
foreach( QByteArray arr, list ) {
msg += arr.data();
filter += QString( "*." ) + arr.data() + " ";
}
QMessageBox::warning( this, "Formats", msg );
filter += tr( ")\nAll Files (*)" );
QString fileName = QFileDialog::getOpenFileName( this, "Load image:", QString(), filter );
if( fileName.isNull() )
return;
QPixmap pixmap( fileName );
if( pixmap.isNull() ) {
QMessageBox::warning( this,
"Warning",
tr( "Cannot create image from file: " ) + fileName );
return;
}
m_item->setPixmap( pixmap );
m_item->setData( 0, fileName );
m_item->setOffset( -QPointF( pixmap.size().height(), pixmap.size().width() ) / 2.0 );
m_ui->lineEdit->setText( fileName );
m_ui->buttonBox->setStandardButtons( m_ui->buttonBox->standardButtons() | QDialogButtonBox::Ok );
}
void QDialogPixmap::posChanged()
+6 -2
View File
@@ -98,7 +98,11 @@
</widget>
</item>
<item row="0" column="1" >
<widget class="QLineEdit" name="lineEdit" />
<widget class="QLineEdit" name="lineEdit" >
<property name="readOnly" >
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QPushButton" name="btnImage" >
@@ -139,7 +143,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons" >
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
<set>QDialogButtonBox::Cancel</set>
</property>
</widget>
</item>
+66 -1
View File
@@ -16,10 +16,11 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
$Id:$ */
$Id$ */
#include "qshapecontrollers.h"
#include "qdialogtext.h"
#include "qdialogpixmap.h"
#include <QXmlStreamWriter>
#include <QXmlStreamReader>
@@ -89,3 +90,67 @@ void QShapeControllerText::readData( const QString &element,
return;
}
}
RegisterController< QShapeControllerPixmap > regControllerPixmap;
QString QShapeControllerPixmap::name() const
{
return "image";
}
QString QShapeControllerPixmap::menuName() const
{
return QObject::tr( "Image", "QShapeControllerPixmap name" );
}
QGraphicsItem *QShapeControllerPixmap::create() const
{
return new QGraphicsPixmapItem;
}
QItemDialog *QShapeControllerPixmap::createDialog( QWidget *parent ) const
{
return new QDialogPixmap( parent );
}
void QShapeControllerPixmap::writeData( QXmlStreamWriter &writer, const QGraphicsItem *item ) const
{
const QGraphicsPixmapItem *pixmapItem
= static_cast< const QGraphicsPixmapItem * >( item );
writer.writeEmptyElement( "pos" );
writer.writeAttribute(
QXmlStreamAttribute( "x", QString::number( pixmapItem->pos().x() ) ) );
writer.writeAttribute(
QXmlStreamAttribute( "y", QString::number( pixmapItem->pos().y() ) ) );
writer.writeTextElement( "image", pixmapItem->data( 0 ).toString() );
}
void QShapeControllerPixmap::readData( const QString &element,
const QXmlStreamAttributes &attrs,
const QString &data,
QGraphicsItem *item ) const
{
QGraphicsPixmapItem *pixmapItem = static_cast< QGraphicsPixmapItem * >( item );
if( element == "pos" ) {
pixmapItem->setPos( attrs.value( "x" ).toString().toDouble(),
attrs.value( "y" ).toString().toDouble() );
return;
}
if( element == "image" ) {
pixmapItem->setData( 0, data );
QPixmap pixmap( data );
if( pixmap.isNull() ) {
throw QString( "QShapeControllerPixmap: image loading from \"" ) +
data + "\" failed";
}
pixmapItem->setPixmap( pixmap );
pixmapItem->setOffset( -QPointF( pixmap.size().height(), pixmap.size().width() ) / 2.0 );
return;
}
}
+20 -1
View File
@@ -16,7 +16,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
$Id:$ */
$Id$ */
#ifndef QSHAPECONTROLLERS_H
#define QSHAPECONTROLLERS_H
@@ -24,6 +24,7 @@
#include "qshapefactory.h"
#include <QGraphicsSimpleTextItem>
#include <QGraphicsPixmapItem>
class QShapeControllerText : public QShapeController {
public:
@@ -43,4 +44,22 @@ protected:
QGraphicsItem *item ) const;
};
class QShapeControllerPixmap : public QShapeController {
public:
enum { Type = QGraphicsPixmapItem::Type };
virtual QString name() const;
virtual QString menuName() const;
virtual QGraphicsItem *create() const;
protected:
virtual QItemDialog *createDialog( QWidget *parent ) const;
virtual void writeData( QXmlStreamWriter &writer, const QGraphicsItem *item ) const;
virtual void readData( const QString &element,
const QXmlStreamAttributes &attrs,
const QString &data,
QGraphicsItem *item ) const;
};
#endif // QSHAPECONTROLLERS_H