summaryrefslogtreecommitdiffstats
path: root/tools/designer/designer/pixmapchooser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/designer/designer/pixmapchooser.cpp')
-rw-r--r--tools/designer/designer/pixmapchooser.cpp206
1 files changed, 206 insertions, 0 deletions
diff --git a/tools/designer/designer/pixmapchooser.cpp b/tools/designer/designer/pixmapchooser.cpp
new file mode 100644
index 0000000..8c8b0a7
--- /dev/null
+++ b/tools/designer/designer/pixmapchooser.cpp
@@ -0,0 +1,206 @@
+/**********************************************************************
+** Copyright (C) 2000-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 [email protected].
+**
+** 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 <qvariant.h> // HP-UX compiler needs this here
+
+#include "pixmapchooser.h"
+#include "formwindow.h"
+#if defined(DESIGNER) && !defined(RESOURCE)
+#include "pixmapfunction.h"
+#endif
+#include "metadatabase.h"
+#include "mainwindow.h"
+#include "pixmapcollectioneditor.h"
+#include "pixmapcollection.h"
+#include "project.h"
+
+#include <qapplication.h>
+#include <qimage.h>
+#include <qpainter.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qiconview.h>
+
+#if defined(DESIGNER)
+static ImageIconProvider *imageIconProvider = 0;
+#endif
+
+PixmapView::PixmapView( QWidget *parent )
+ : QScrollView( parent )
+{
+ viewport()->setBackgroundMode( PaletteBase );
+}
+
+void PixmapView::setPixmap( const QPixmap &pix )
+{
+ pixmap = pix;
+ resizeContents( pixmap.size().width(), pixmap.size().height() );
+ viewport()->repaint( FALSE );
+}
+
+void PixmapView::drawContents( QPainter *p, int cx, int cy, int cw, int ch )
+{
+ p->fillRect( cx, cy, cw, ch, colorGroup().brush( QColorGroup::Base ) );
+ p->drawPixmap( 0, 0, pixmap );
+}
+
+void PixmapView::previewUrl( const QUrl &u )
+{
+ if ( u.isLocalFile() ) {
+ QString path = u.path();
+ QPixmap pix( path );
+ if ( !pix.isNull() )
+ setPixmap( pix );
+ } else {
+ qWarning( "Previewing remote files not supported." );
+ }
+}
+
+static void buildImageFormatList( QString &filter, QString &all )
+{
+ all = qApp->translate( "qChoosePixmap", "All Pixmaps (" );
+ for ( uint i = 0; i < QImageIO::outputFormats().count(); i++ ) {
+ QString outputFormat = QImageIO::outputFormats().at( i );
+ QString outputExtension;
+ if ( outputFormat != "JPEG" )
+ outputExtension = outputFormat.lower();
+ else
+ outputExtension = "jpg;*.jpeg";
+ filter += qApp->translate( "qChoosePixmap", "%1-Pixmaps (%2)\n" ).
+ arg( outputFormat ).arg( "*." + outputExtension);
+ all += "*." + outputExtension + ";";
+ }
+ filter.prepend( all + qApp->translate( "qChoosePixmap", ")\n" ) );
+ filter += qApp->translate( "qChoosePixmap", "All Files (*)" );
+
+}
+QStringList qChoosePixmaps( QWidget *parent )
+{
+ if ( !imageIconProvider && !QFileDialog::iconProvider() )
+ QFileDialog::setIconProvider( ( imageIconProvider = new ImageIconProvider ) );
+
+ QString filter;
+ QString all;
+ buildImageFormatList( filter, all );
+
+ QFileDialog fd( QString::null, filter, parent, 0, TRUE );
+ fd.setMode( QFileDialog::ExistingFiles );
+ fd.setContentsPreviewEnabled( TRUE );
+ PixmapView *pw = new PixmapView( &fd );
+ fd.setContentsPreview( pw, pw );
+ fd.setViewMode( QFileDialog::List );
+ fd.setPreviewMode( QFileDialog::Contents );
+ fd.setCaption( qApp->translate( "qChoosePixmap", "Choose Images..." ) );
+ if ( fd.exec() == QDialog::Accepted )
+ return fd.selectedFiles();
+ return QStringList();
+}
+
+QPixmap qChoosePixmap( QWidget *parent, FormWindow *fw, const QPixmap &old, QString *fn )
+{
+#if defined(DESIGNER)
+ if ( !fw || fw->savePixmapInline() ) {
+ if ( !imageIconProvider && !QFileDialog::iconProvider() )
+ QFileDialog::setIconProvider( ( imageIconProvider = new ImageIconProvider ) );
+
+ QString filter;
+ QString all;
+ buildImageFormatList( filter, all );
+
+ QFileDialog fd( QString::null, filter, parent, 0, TRUE );
+ fd.setContentsPreviewEnabled( TRUE );
+ PixmapView *pw = new PixmapView( &fd );
+ fd.setContentsPreview( pw, pw );
+ fd.setViewMode( QFileDialog::List );
+ fd.setPreviewMode( QFileDialog::Contents );
+ fd.setCaption( qApp->translate( "qChoosePixmap", "Choose a Pixmap..." ) );
+ if ( fd.exec() == QDialog::Accepted ) {
+ QPixmap pix( fd.selectedFile() );
+ if ( fn )
+ *fn = fd.selectedFile();
+ MetaDataBase::setPixmapArgument( fw, pix.serialNumber(), fd.selectedFile() );
+ return pix;
+ }
+ } else if ( fw && fw->savePixmapInProject() ) {
+ PixmapCollectionEditor dia( parent, 0, TRUE );
+ dia.setProject( fw->project() );
+ dia.setChooserMode( TRUE );
+ dia.setCurrentItem( MetaDataBase::pixmapKey( fw, old.serialNumber() ) );
+ if ( dia.exec() == QDialog::Accepted ) {
+ QPixmap pix( fw->project()->pixmapCollection()->pixmap( dia.viewPixmaps->currentItem()->text() ) );
+ MetaDataBase::setPixmapKey( fw, pix.serialNumber(), dia.viewPixmaps->currentItem()->text() );
+ return pix;
+ }
+ } else {
+ PixmapFunction dia( parent, 0, TRUE );
+ QObject::connect( dia.helpButton, SIGNAL( clicked() ), MainWindow::self, SLOT( showDialogHelp() ) );
+ dia.labelFunction->setText( fw->pixmapLoaderFunction() + "(" );
+ dia.editArguments->setText( MetaDataBase::pixmapArgument( fw, old.serialNumber() ) );
+ dia.editArguments->setFocus();
+ if ( dia.exec() == QDialog::Accepted ) {
+ QPixmap pix;
+ // we have to force the pixmap to get a new and unique serial number. Unfortunately detatch() doesn't do that
+ pix.convertFromImage( QPixmap::fromMimeSource( "designer_image.png" ).convertToImage() );
+
+ MetaDataBase::setPixmapArgument( fw, pix.serialNumber(), dia.editArguments->text() );
+ return pix;
+ }
+ }
+#else
+ Q_UNUSED( parent );
+ Q_UNUSED( fw );
+ Q_UNUSED( old );
+#endif
+ return QPixmap();
+}
+
+ImageIconProvider::ImageIconProvider( QWidget *parent, const char *name )
+ : QFileIconProvider( parent, name ), imagepm( QPixmap::fromMimeSource( "designer_image.png" ) )
+{
+ fmts = QImage::inputFormats();
+}
+
+ImageIconProvider::~ImageIconProvider()
+{
+}
+
+const QPixmap * ImageIconProvider::pixmap( const QFileInfo &fi )
+{
+ QString ext = fi.extension().upper();
+ if ( fmts.contains( ext ) ) {
+ return &imagepm;
+ } else {
+ return QFileIconProvider::pixmap( fi );
+ }
+}