summaryrefslogtreecommitdiff
path: root/noncore/multimedia/showimg/showimg.cpp
Side-by-side diff
Diffstat (limited to 'noncore/multimedia/showimg/showimg.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/showimg/showimg.cpp1242
1 files changed, 0 insertions, 1242 deletions
diff --git a/noncore/multimedia/showimg/showimg.cpp b/noncore/multimedia/showimg/showimg.cpp
deleted file mode 100644
index 24377ed..0000000
--- a/noncore/multimedia/showimg/showimg.cpp
+++ b/dev/null
@@ -1,1242 +0,0 @@
-/**********************************************************************
-** Copyright (C) 2000 Trolltech AS. All rights reserved.
-**
-** This file is part of Qtopia Environment.
-**
-** This file may be distributed and/or modified under the terms of the
-** GNU General Public License version 2 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-** See http://www.trolltech.com/gpl/ for GPL licensing information.
-**
-** Contact info@trolltech.com if any conditions of this licensing are
-** not clear to you.
-**
-**********************************************************************/
-
-//
-// Full-screen and rotation options contributed by Robert Wittams <robert@wittams.com>
-//
-
-#include "showimg.h"
-#include "ImageFileSelector.h"
-#include "settingsdialog.h"
-
-/* OPIE */
-#include <opie2/odebug.h>
-#include <opie2/ofiledialog.h>
-#include <qpe/qpeapplication.h>
-#include <qpe/config.h>
-#include <qpe/resource.h>
-using namespace Opie::Core;
-using namespace Opie::Ui;
-
-/* QT */
-#include <qtoolbar.h>
-#include <qaction.h>
-#include <qfiledialog.h>
-#include <qmenubar.h>
-#include <qspinbox.h>
-
-/* STD */
-#include <math.h>
-
-ControlsDialog::ControlsDialog(const QString &caption,QImage image,int *brightness,QWidget *parent)
- : QDialog(parent,0,true)
-{
- setCaption(caption);
-
- if ( parent ) {
- setPalette(parent->palette());
- }
-
- b=brightness;
- img=image;
-
- setMinimumSize(140,80);
-
- QGridLayout *gl= new QGridLayout(this,2,2,4,4);
-
- pixmap =new ImageWidget(this);;
- QPixmap pm;
- pm.convertFromImage(img);
- pixmap->setPixmap(pm);
- pixmap->setMinimumSize(pm.width(),pm.height());
- gl->addMultiCellWidget(pixmap,0,0,0,2,AlignCenter);
- QLabel *l=new QLabel(tr("Brightness")+":",this);
- gl->addWidget(l,1,0,AlignLeft);
- spb=new QSpinBox(-100,100,2,this);
- gl->addWidget(spb,1,1,AlignRight);
-
- spb->setValue(0);
-
- connect(spb,SIGNAL(valueChanged(int)),this, SLOT(bValueChanged(int)));
-
-}
-
-void ControlsDialog::bValueChanged(int value)
-{
- QImage nImage=img;
- nImage.detach();
- ImageViewer::intensity(nImage, (float)value/100);
- QPixmap pm;
- pm.convertFromImage(nImage);
- pixmap->setPixmap(pm);
- pixmap->repaint(false);
-
-
-}
-
-void ControlsDialog::accept()
-{
- *b=spb->value();
- done(1);
-}
-
-//===========================================================================
-
-InfoDialog::InfoDialog(const QString &caption, const QStringList text,QWidget *parent)
- : QDialog(parent,0,true)
-{
- setCaption(caption);
-
- if ( parent )
- {
- setPalette(parent->palette());
- }
-
-
-
- QString labels[]={ tr("File Name"),tr("Format"),tr("File Size"),tr("Size"),tr("Colors"),tr("Alpha") };
-
- setMinimumSize(180,80);
- int num=ImageViewer::LAST+1;
- if ( text[ImageViewer::ALPHA].isEmpty() )
- num--;
- QGridLayout *gl= new QGridLayout(this,num,2,4,2);
- QLabel *l;
- int count=0;
- for ( int i=0;i<num;i++ )
- {
- if ( i==1 )
- {
- QFrame *frm=new QFrame(this);
- frm->setFrameStyle(QFrame::HLine|QFrame::Sunken);
- gl->addMultiCellWidget(frm,i,i,0,1);
- }
- else
- {
- l=new QLabel( tr( labels[count] )+":",this);
- gl->addWidget(l,i,0,AlignLeft);
- l=new QLabel(text[count],this);
- gl->addWidget(l,i,1,AlignRight);
- count++;
- }
-
- }
-
-}
-
-void InfoDialog::displayInfo(const QString &caption, const QStringList text, QWidget *parent)
-{
- InfoDialog *dlg=new InfoDialog(caption,text,parent);
- dlg->exec();
- delete dlg;
-}
-
-//===========================================================================
-
-
-ImagePane::ImagePane( QWidget *parent ) : QWidget( parent )
-{
- vb = new QVBoxLayout( this );
-
- image = new QScrollView(this,0,WResizeNoErase|WNorthWestGravity);
- pic=new ImageWidget(image);
- image->addChild(pic);
-
- connect(pic, SIGNAL( clicked() ), this, SLOT( imageClicked() ));
-
- vb->addWidget( image );
-
-}
-
-void ImagePane::setPixmap( const QPixmap &pm )
-{
- pic->setPixmap( pm );
- pic->resize(pm.width(),pm.height());
- image->updateScrollBars ();
- pic->repaint(false);
-}
-
-void ImagePane::imageClicked()
-{
- emit clicked();
-}
-//===========================================================================
-/*
- Draws the portion of the scaled pixmap that needs to be updated
-*/
-
-void ImageWidget::paintEvent( QPaintEvent *e )
-{
- QPainter painter(this);
-
- painter.setClipRect(e->rect());
- painter.fillRect(0,0,width(),height(),QColor(0,0,0));
-
- if ( pixmap.size() != QSize( 0, 0 ) )
- { // is an image loaded?
- painter.drawPixmap((width() - pixmap.width()) / 2, (height() - pixmap.height()) / 2, pixmap);
- }
-}
-
-void ImageWidget::mouseReleaseEvent(QMouseEvent *)
-{
- emit clicked();
-}
-
-//===========================================================================
-
-ImageViewer::ImageViewer( QWidget *parent, const char *name, int /*wFlags*/ )
-: QMainWindow( parent, name, WResizeNoErase ), filename( 0 ), bFromDocView( FALSE )
-{
- setCaption( tr("Image Viewer") );
- setIcon( Resource::loadPixmap( "ImageViewer" ) );
-
-
- Config cfg("Image Viewer");
- cfg.setGroup("Image Viewer");
-
- showThumbView=cfg.readBoolEntry("ShowThumbnails",false);
- isSized=cfg.readBoolEntry("SizeToScreen",true);
-
- isFullScreen = FALSE;
-
- setToolBarsMovable( FALSE );
-
- toolBar = new QToolBar( this );
- toolBar->setHorizontalStretchable( TRUE );
-
- menuBar = new QMenuBar( toolBar );
-
- current=menuBar;
-
-
-
- fileMenuFile = new QPopupMenu(this);
- //menuBarmenubarFile->insertItem( tr("File"), fileMenu );
- fileMenuFile->insertItem(tr("Open"),
- this, SLOT(openFile()), 0);
-
- viewMenuFile = new QPopupMenu( this );
- //menubarFile->insertItem( tr("View"), viewMenu );
- viewMenuFile->insertItem( tr("Thumbnail View"),
- this, SLOT(switchThumbView()), 0, SHOW_THUMBNAILS );
-
- viewMenuFile->setItemChecked ( SHOW_THUMBNAILS, showThumbView );
-
-
-
-
- optionsMenuFile = new QPopupMenu( this);
- //menubarFile->insertItem( tr("Options"),optionsMenu );
- slideAction = new QAction( tr( "Slide show" ), Resource::loadIconSet( "slideshow" ),
- QString::null, 0, this, 0 );
- slideAction->setToggleAction( TRUE );
- connect( slideAction, SIGNAL( toggled(bool) ), this, SLOT( slideShow(bool) ) );
- slideAction->addTo( optionsMenuFile);
-// slideAction->addTo( toolBar );
-
-
-// optionsMenuFile->insertItem( tr("Slideshow") );
- optionsMenuFile->insertSeparator();
- optionsMenuFile->insertItem( tr("Preferences.."), this, SLOT(settings()), 0);
-// optionsMenuFile->insertItem( tr("Help"), this, SLOT(help()), 0);
-
- QStrList fmt = QImage::outputFormats();
-
-
- fileMenuView = new QPopupMenu( this );
- //menubarView->insertItem( tr("File"),fileMenu );
- fileMenuView->insertItem( tr("Image Info ..."),this, SLOT(displayInfoDialog()),0 );
- fileMenuView->insertSeparator();
-
- viewMenuView = new QPopupMenu(this );
- viewMenuView->setCheckable ( true );
-
- //menubarView->insertItem( tr("View"),viewMenu );
- viewMenuView->insertItem(tr("Horizontal flip"), this, SLOT(hFlip()), 0);
- viewMenuView->insertItem(tr("Vertical flip"), this, SLOT(vFlip()), 0);
-
- stack = new QWidgetStack( this );
- stack->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
- setCentralWidget( stack );
-
-
- imagePanel = new ImagePane( stack );
- connect(imagePanel, SIGNAL(clicked()), this, SLOT(normalView()));
-
-
- ImageFileSelector::CURRENT_VIEW cv;
- if(showThumbView)
- cv=ImageFileSelector::THUMBNAIL;
- else
- cv=ImageFileSelector::DETAILED;
-
- odebug << "cv = " << cv << "" << oendl;
-
- fileSelector = new ImageFileSelector( cv,stack, "fs");
-
- //switchThumbView();
-
-
- //fileSelector = new ImageFileSelector("image/*", stack, "fs");
- //fileSelector->setNewVisible(FALSE);
- //fileSelector->setCloseVisible(FALSE);
- connect( fileSelector, SIGNAL( closeMe() ), this, SLOT( closeFileSelector() ) );
- connect( fileSelector, SIGNAL( fileSelected(const DocLnk&) ),
- this, SLOT( openFile(const DocLnk&) ) );
-
- imageList = fileSelector->fileList();
- slideAction->setEnabled( imageList.count() != 0);
-
- iconToolBar = new QToolBar(this);
-
- QAction *a;
-
- a = new QAction( tr( "Open ..." ), Resource::loadPixmap( "fileopen" ), QString::null, 0, this, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( open() ) );
- a->addTo( fileMenuView);
- a->addTo( iconToolBar );
-
-
- a = new QAction( tr( "Rotate 90"), Resource::loadPixmap( "rotate90" ), QString::null, 0, this, 0);
- connect( a, SIGNAL( activated() ), this, SLOT( rot90() ) );
- a->addTo( iconToolBar );
- a->addTo( viewMenuView );
-
- a = new QAction( tr( "Rotate 180" ), Resource::loadPixmap( "repeat" ), QString::null, 0, this, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( rot180() ) );
- a->addTo( iconToolBar );
- a->addTo( viewMenuView );
-
-
- a = new QAction( tr( "Rotate 270"), Resource::loadPixmap( "rotate270" ), QString::null, 0, this, 0);
- connect( a, SIGNAL( activated() ), this, SLOT( rot270() ) );
- //a->addTo( iconToolBar );
- a->addTo( viewMenuView );
-
-
-
- viewMenuView->insertSeparator();
- viewMenuView->insertItem(tr("Brightness ..."), this, SLOT(displayControlsDialog()), 0);
- viewMenuView->insertItem(tr("Black And White"), this, SLOT(blackAndWhite()), 0,BLACKANDWHITE);
- viewMenuView->insertSeparator();
-
-
- sss = new QAction( tr( "Scale to Screen"), Resource::loadPixmap( "scale" ), QString::null, 0, this, 0,true);
- connect( sss, SIGNAL( activated() ), this, SLOT( switchSizeToScreen() ) );
- sss->addTo( iconToolBar );
- sss->addTo( viewMenuView );
-
- sss->setOn(isSized);
- viewMenuView->insertSeparator();
-
-
- a = new QAction( tr( "Fullscreen" ), Resource::loadPixmap( "fullscreen" ),
- QString::null, 0, this, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( fullScreen() ) );
- a->addTo( iconToolBar );
- a->addTo( viewMenuView);
-
- a = new QAction( tr( "Stop Slideshow" ), Resource::loadPixmap( "quit_icon" ),
- QString::null, 0, this, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( stopSlideShow() ) );
- a->addTo( iconToolBar );
- a->addTo( viewMenuView);
-
-
- Config config( "ImageViewer" );
- config.setGroup( "SlideShow" );
- slideDelay = config.readNumEntry( "Delay", 2);
- slideRepeat = config.readBoolEntry( "Repeat", FALSE );
- slideReverse = config.readBoolEntry("Reverse", FALSE);
-
- config.setGroup("Default");
- rotateOnLoad = config.readBoolEntry("Rotate", FALSE);
- fastLoad = config.readBoolEntry("FastLoad", TRUE);
- slideTimer = new QTimer( this );
- connect( slideTimer, SIGNAL(timeout()), this, SLOT(slideUpdate()) );
-
- switchToFileSelector();
-
- setMouseTracking( TRUE );
-
-
-}
-
-ImageViewer::~ImageViewer()
-{
- Config cfg("Image Viewer");
- cfg.setGroup("Image Viewer");
-
- cfg.writeEntry("ShowThumbnails",(int)showThumbView);
- cfg.writeEntry("SizeToScreen",(int)isSized);
-
- cfg.setGroup( "SlideShow" );
- cfg.writeEntry( "Delay", slideDelay);
- cfg.writeEntry( "Repeat", slideRepeat );
- cfg.writeEntry("Reverse", slideReverse);
-
- cfg.setGroup("Default");
- cfg.writeEntry("Rotate", rotateOnLoad);
- cfg.writeEntry("FastLoad", fastLoad);
-
- delete imagePanel; // in case it is fullscreen
-}
-
-void ImageViewer::help() {
-
-}
-
-
-void ImageViewer::settings()
-{
- SettingsDialog dlg( this, 0, TRUE );
- dlg.setDelay( slideDelay );
- dlg.setRepeat( slideRepeat );
- dlg.setReverse( slideReverse );
- dlg.setRotate(rotateOnLoad);
- dlg.setFastLoad(fastLoad);
-
- if ( QPEApplication::execDialog(&dlg) == QDialog::Accepted ) {
- odebug << "<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>" << oendl;
- slideDelay = dlg.delay();
- slideRepeat = dlg.repeat();
- slideReverse = dlg.reverse();
- rotateOnLoad = dlg.rotate();
- fastLoad = dlg.fastLoad();
-
- Config config( "ImageViewer" );
- config.setGroup( "SlideShow" );
- config.writeEntry( "Delay", slideDelay );
- config.writeEntry( "Repeat", slideRepeat );
- config.writeEntry("Reverse", slideReverse);
-
- config.setGroup("Default");
- config.writeEntry("Rotate", rotateOnLoad);
- config.writeEntry("FastLoad", fastLoad);
- }
-}
-
-void ImageViewer::switchSizeToScreen()
-{
- isSized=!isSized;
- sss->setOn(isSized);
- updateImage();
-}
-
-void ImageViewer::updateImage()
-{
- if ( isSized ) {
- imagePanel->setPixmap(pmScaled);
- } else {
- imagePanel->setPixmap(pm);
- }
-}
-
-void ImageViewer::switchThumbView()
-{
-
- showThumbView=!showThumbView;
- viewMenuFile->setItemChecked ( SHOW_THUMBNAILS, showThumbView );
- fileSelector->switchView();
-
-}
-
-void ImageViewer::switchToFileSelector()
-{
- stack->raiseWidget(fileSelector);
- menuBar->clear();
- menuBar->insertItem( tr("File"), fileMenuFile );
- menuBar->insertItem( tr("View"), viewMenuFile );
- menuBar->insertItem( tr("Options"), optionsMenuFile );
- iconToolBar->hide();
- imagePanel->disable();
- slideShow(false);
-
-}
-
-void ImageViewer::switchToImageView()
-{
- stack->raiseWidget(imagePanel);
-
- menuBar->clear();
- menuBar->insertItem( tr("File"), fileMenuView );
- menuBar->insertItem( tr("View"), viewMenuView );
- viewMenuView->setItemEnabled(BLACKANDWHITE,true);
- iconToolBar->show();
-
- imagePanel->setPosition(0,0);
-
-}
-
-
-void ImageViewer::setDocument(const QString& fileref)
-{
- delayLoad = fileref;
- switchToImageView();
- QTimer::singleShot( 0, this, SLOT(doDelayedLoad()) );
-}
-
-void ImageViewer::doDelayedLoad()
-{
- show(delayLoad);
-}
-
-void ImageViewer::show()
-{
- normalView();
- QMainWindow::show();
-}
-
-void ImageViewer::show(const QString& fileref)
-{
-// odebug << "Show "+fileref << oendl;
- bFromDocView = TRUE;
- closeFileSelector();
- DocLnk link(fileref);
- if ( link.isValid() ) {
- openFile(link);
- } else {
- filename = fileref;
- updateCaption( fileref );
- loadImage( fileref );
- }
-}
-
-void ImageViewer::openFile() {
- MimeTypes types;
- QStringList image;
- image << "image/*";
- types.insert("Images", image);
-
- QString str = OFileDialog::getOpenFileName( 1,QPEApplication::documentDir(),"", types, 0 );
- DocLnk link(str);
-// if ( link.isValid() )
- openFile(link);
-
-}
-
-void ImageViewer::openFile( const DocLnk &link )
-{
- closeFileSelector();
-// DocLnk link(file);
- odebug << "open "+link.name() << oendl;
- updateCaption( link.name() );
- loadImage( link.file() );
- if (slideTimer->isActive()) {
- slideTimer->start(slideDelay * 1000, FALSE);
- }
-
-}
-
-void ImageViewer::open()
-{
- switchToFileSelector();
-}
-
-void ImageViewer::closeFileSelector()
-{
- switchToImageView();
-}
-
-void ImageViewer::updateCaption( QString name )
-{
- int sep = name.findRev( '/' );
- if ( sep >= 0 )
- name = name.mid( sep+1 );
- setCaption( name + tr(" - Image Viewer") );
-}
-
-/*
- This function loads an image from a file.
-*/
-
-void ImageViewer::loadImage( const char *fileName )
-{
- filename = fileName;
- if ( filename ) {
- QApplication::setOverrideCursor( waitCursor ); // this might take time
- //imagePanel->statusLabel()->setText( tr("Loading image...") );
- qApp->processEvents();
- bool ok = image.load(filename, 0);
- if ( ok ) {
- ok = reconvertImage();
- updateImageInfo(filename);
- }
- if ( !ok ) {
- pm.resize(0,0); // couldn't load image
- update();
- }
- QApplication::restoreOverrideCursor(); // restore original cursor
- }
-
-// fastLoad ? ", Fast" : "",
-// fastLoad ? QMAX(imagewidth/maxsize, imageheight/maxsize) : 1);
-
-
-// matrix.reset();
- rotated90 = FALSE;
-
- if (rotateOnLoad) {
- rotated90 = TRUE;
- rot90();
-// matrix.rotate( -90.0 );
- }
-
- switchToImageView();
- updateImage();
-
-}
-
-bool ImageViewer::loadSelected()
-{
- bool ok = false;
- if ( stack->visibleWidget() == fileSelector )
- {
- const DocLnk *link = fileSelector->selected();
- if ( link )
- {
- if ( link->file() != filename )
- {
- updateCaption( link->name() );
- filename = link->file();
- qApp->processEvents();
- ok = image.load(filename, 0);
- if ( ok )
- {
- updateImageInfo(filename);
- ok = reconvertImage();
- }
- if ( !ok )
- pm.resize(0,0);
- }
- }
- }
- if ( !image.isNull() )
- {
- ok = true;
- closeFileSelector();
- }
-
- return ok;
-}
-
-bool ImageViewer::reconvertImage()
-{
- bool success = FALSE;
-
- if ( image.isNull() ) return FALSE;
-
- QApplication::setOverrideCursor( waitCursor ); // this might take time
- if ( pm.convertFromImage(image /*, conversion_flags */ ) )
- {
- pmScaled = QPixmap();
- scale();
- success = TRUE; // load successful
- }
- else
- {
- pm.resize(0,0); // couldn't load image
- }
- QApplication::restoreOverrideCursor(); // restore original cursor
-
- return success; // TRUE if loaded OK
-}
-
-
-int ImageViewer::calcHeight()
-{
- if ( !isFullScreen )
- return imagePanel->paneHeight();
- else
- return qApp->desktop()->height();
-}
-/*
- This functions scales the pixmap in the member variable "pm" to fit the
- widget size and puts the resulting pixmap in the member variable "pmScaled".
-*/
-void ImageViewer::scale()
-{
- int h = calcHeight();
- if ( image.isNull() ) return;
-
- QApplication::setOverrideCursor( waitCursor ); // this might take time
- if ( imagePanel->paneWidth() == pm.width() && h == pm.height() )
- { // no need to scale if widget
- pmScaled = pm; // size equals pixmap size
- }
- else
- {
- double hs = (double)h / (double)image.height();
- double ws = (double)imagePanel->paneWidth() / (double)image.width();
- double scaleFactor = (hs > ws) ? ws : hs;
- int smoothW = (int)(scaleFactor * image.width());
- int smoothH = (int)(scaleFactor * image.height());
-
- pmScaled.convertFromImage( image.smoothScale( smoothW, smoothH ) /*, conversion_flags */ );
- }
- QApplication::restoreOverrideCursor(); // restore original cursor
-}
-
-/*
- The resize event handler, if a valid pixmap was loaded it will call
- scale() to fit the pixmap to the new widget size.
-*/
-
-void ImageViewer::resizeEvent( QResizeEvent * )
-{
-
- if ( pm.size() == QSize( 0, 0 ) ) // we couldn't load the image
- return;
-
- int h = calcHeight();
-
- if ( imagePanel->paneWidth() != pmScaled.width() || h != pmScaled.height() )
- { // if new size,
- scale(); // scale pmScaled to window
- }
- if ( image.hasAlphaBuffer() )
- erase();
-}
-
-
-void ImageViewer::hFlip()
-{
-// matrix.scale( -1.0, 1.0 );
-
- setImage(image.mirror(TRUE,FALSE));
-}
-
-void ImageViewer::vFlip()
-{
-// matrix.scale( 1.0, -1.0 );
- setImage(image.mirror(FALSE,TRUE));
-}
-
-void ImageViewer::rot180()
-{
-// matrix.rotate( 180.0 );
- setImage(image.mirror(TRUE,TRUE));
-}
-
-void ImageViewer::rot90()
-{
- QImage oldimage;
- oldimage = image.convertDepth(32);
-// matrix.rotate( -90.0 );
- setImage(rotate(oldimage,Rotate90));
-
-}
-void ImageViewer::rot270()
-{
-
- QImage oldimage;
- oldimage = image.convertDepth(32);
-// matrix.rotate(90.0);
- setImage(rotate(oldimage,Rotate270));
-
-}
-
-void ImageViewer::blackAndWhite()
-{
-
- viewMenuView->setItemEnabled(BLACKANDWHITE,false);
- setImage(toGray(image,false));
-}
-
-void ImageViewer::displayControlsDialog()
-{
- int w=80;
- int h=w;
- QImage small;
-
- if ( image.width()<w ||image.height()<h )
- small=image.smoothScale(w,h);
- else
- small=image.copy(0,0,w,h);
-
- int newB=0;
- ControlsDialog *dlg=new ControlsDialog("Image Viewer",small,&newB,this);
- dlg->exec();
- if ( newB ) {
- intensity(image,(float)newB/100);
- setImage(image);
- }
-
-}
-
-
-void ImageViewer::displayInfoDialog()
-{
-
- QStringList ls;
-
- for ( int i=0;i<LAST;i++ )
- ls.append(imageInfo[i]);
-
- InfoDialog::displayInfo("Image Viewer",ls,this);
-}
-void ImageViewer::normalView()
-{
- if ( !imagePanel->parentWidget() )
- {
-
- isFullScreen = FALSE;
- stack->addWidget( imagePanel, 1 );
- switchToImageView();
- if ( isSized )
- scale();
-
- updateImage();
-
- }
-}
-
-void ImageViewer::stopSlideShow() {
- if (slideTimer->isActive())
- slideTimer->stop();
-}
-
-void ImageViewer::fullScreen()
-{
- // Full-screen option
- // contributed by Robert Wittams <robert@wittams.com>
- if ( imagePanel->parentWidget() && loadSelected() )
- {
- isFullScreen = TRUE;
- imagePanel->reparent(0,QPoint(0,0));
- imagePanel->resize(qApp->desktop()->width(), qApp->desktop()->height());
-
- if ( isSized )
- scale();
- updateImage();
- imagePanel->showFullScreen();
- }
-}
-
-void ImageViewer::setImage(const QImage& newimage)
-{
- image = newimage;
- reconvertImage();
- updateImage();
-}
-
-void ImageViewer::updateImageInfo(QString &filePath)
-{
-
- for ( int i=0;i<LAST;i++ )
- {
- imageInfo[i]="";
- }
-
- imageInfo[FORMAT]=QImage::imageFormat (filePath );
- QFileInfo fi(filePath);
- imageInfo[PATH]=fi.fileName();
- imageInfo[FILE_SIZE]=QString::number(fi.size())+" (bytes)";
- QString message("%1x%2");
- imageInfo[SIZE]=QString("%1x%2");
- imageInfo[SIZE]=imageInfo[SIZE].arg(image.width()).arg(image.height());
- if ( image.numColors() > 0 )
- {
- imageInfo[COLORS]=tr("%1 colors").arg(image.numColors());
- }
- else if ( image.depth() >= 16 )
- {
- imageInfo[COLORS]=tr(" True color");
- }
- if ( image.hasAlphaBuffer() )
- {
- if ( image.depth() == 8 )
- {
- int i;
- bool alpha[256];
- int nalpha=0;
-
- for ( i=0; i<256; i++ )
- alpha[i] = FALSE;
-
- for ( i=0; i<image.numColors(); i++ )
- {
- int alevel = image.color(i) >> 24;
- if ( !alpha[alevel] )
- {
- alpha[alevel] = TRUE;
- nalpha++;
- }
- }
- imageInfo[ALPHA]=tr("%1 alpha levels").arg(nalpha);
- }
- else
- {
- imageInfo[ALPHA]=tr("8-bit alpha channel");
- }
- }
-
-}
-
-void ImageViewer::closeEvent( QCloseEvent *e )
-{
- if ( stack->visibleWidget() == imagePanel && !bFromDocView )
- {
- e->ignore();
- open();
- }
- else
- {
- bFromDocView = FALSE;
- e->accept();
- }
-}
-
-// Intensity,toGray and rotate code courtesy of KDE project.
-
-
-QImage& ImageViewer::intensity(QImage &image, float percent)
-{
-
- int segColors = image.depth() > 8 ? 256 : image.numColors();
- unsigned char *segTbl = new unsigned char[segColors];
- int pixels = image.depth() > 8 ? image.width()*image.height() :
- image.numColors();
- unsigned int *data = image.depth() > 8 ? (unsigned int *)image.bits() :
- (unsigned int *)image.colorTable();
-
- bool brighten = (percent >= 0);
- if ( percent < 0 )
- percent = -percent;
-
- if ( brighten )
- { // keep overflow check out of loops
- for ( int i=0; i < segColors; ++i )
- {
- int tmp = (int)(i*percent);
- if ( tmp > 255 )
- tmp = 255;
- segTbl[i] = tmp;
- }
- }
- else
- {
- for ( int i=0; i < segColors; ++i )
- {
- int tmp = (int)(i*percent);
- if ( tmp < 0 )
- tmp = 0;
- segTbl[i] = tmp;
- }
- }
-
- if ( brighten )
- { // same here
- for ( int i=0; i < pixels; ++i )
- {
- int r = qRed(data[i]);
- int g = qGreen(data[i]);
- int b = qBlue(data[i]);
- int a = qAlpha(data[i]);
- r = r + segTbl[r] > 255 ? 255 : r + segTbl[r];
- g = g + segTbl[g] > 255 ? 255 : g + segTbl[g];
- b = b + segTbl[b] > 255 ? 255 : b + segTbl[b];
- data[i] = qRgba(r, g, b,a);
- }
- }
- else
- {
- for ( int i=0; i < pixels; ++i )
- {
- int r = qRed(data[i]);
- int g = qGreen(data[i]);
- int b = qBlue(data[i]);
- int a = qAlpha(data[i]);
- r = r - segTbl[r] < 0 ? 0 : r - segTbl[r];
- g = g - segTbl[g] < 0 ? 0 : g - segTbl[g];
- b = b - segTbl[b] < 0 ? 0 : b - segTbl[b];
- data[i] = qRgba(r, g, b, a);
- }
- }
- delete [] segTbl;
-
- return image;
-}
-
-QImage& ImageViewer::toGray(QImage &img, bool fast)
-{
- if ( img.width() == 0 || img.height() == 0 )
- return img;
-
- if ( fast )
- {
- if ( img.depth() == 32 )
- {
- register uchar * r(img.bits());
- register uchar * g(img.bits() + 1);
- register uchar * b(img.bits() + 2);
-
- uchar * end(img.bits() + img.numBytes());
-
- while ( r != end )
- {
-
- *r = *g = *b = (((*r + *g) >> 1) + *b) >> 1; // (r + b + g) / 3
-
- r += 4;
- g += 4;
- b += 4;
- }
- }
- else
- {
- for ( int i = 0; i < img.numColors(); i++ )
- {
- register uint r = qRed(img.color(i));
- register uint g = qGreen(img.color(i));
- register uint b = qBlue(img.color(i));
-
- register uint gray = (((r + g) >> 1) + b) >> 1;
- img.setColor(i, qRgba(gray, gray, gray, qAlpha(img.color(i))));
- }
- }
- }
- else
- {
- int pixels = img.depth() > 8 ? img.width()*img.height() :
- img.numColors();
- unsigned int *data = img.depth() > 8 ? (unsigned int *)img.bits() :
- (unsigned int *)img.colorTable();
- int val, i;
- for ( i=0; i < pixels; ++i )
- {
- val = qGray(data[i]);
- data[i] = qRgba(val, val, val, qAlpha(data[i]));
- }
- }
- return img;
-}
-
-
-QImage ImageViewer::rotate(QImage &img, RotateDirection r)
-{
- QImage dest;
- int x, y;
- if ( img.depth() > 8 )
- {
- unsigned int *srcData, *destData;
- switch ( r )
- {
- case Rotate90:
- dest.create(img.height(), img.width(), img.depth());
- for ( y=0; y < img.height(); ++y )
- {
- srcData = (unsigned int *)img.scanLine(y);
- for ( x=0; x < img.width(); ++x )
- {
- destData = (unsigned int *)dest.scanLine(x);
- destData[img.height()-y-1] = srcData[x];
- }
- }
- break;
- case Rotate180:
- dest.create(img.width(), img.height(), img.depth());
- for ( y=0; y < img.height(); ++y )
- {
- srcData = (unsigned int *)img.scanLine(y);
- destData = (unsigned int *)dest.scanLine(img.height()-y-1);
- for ( x=0; x < img.width(); ++x )
- destData[img.width()-x-1] = srcData[x];
- }
- break;
- case Rotate270:
- dest.create(img.height(), img.width(), img.depth());
- for ( y=0; y < img.height(); ++y )
- {
- srcData = (unsigned int *)img.scanLine(y);
- for ( x=0; x < img.width(); ++x )
- {
- destData = (unsigned int *)dest.scanLine(img.width()-x-1);
- destData[y] = srcData[x];
- }
- }
- break;
- default:
- dest = img;
- break;
- }
- }
- else
- {
- unsigned char *srcData, *destData;
- unsigned int *srcTable, *destTable;
- switch ( r )
- {
- case Rotate90:
- dest.create(img.height(), img.width(), img.depth());
- dest.setNumColors(img.numColors());
- srcTable = (unsigned int *)img.colorTable();
- destTable = (unsigned int *)dest.colorTable();
- for ( x=0; x < img.numColors(); ++x )
- destTable[x] = srcTable[x];
- for ( y=0; y < img.height(); ++y )
- {
- srcData = (unsigned char *)img.scanLine(y);
- for ( x=0; x < img.width(); ++x )
- {
- destData = (unsigned char *)dest.scanLine(x);
- destData[img.height()-y-1] = srcData[x];
- }
- }
- break;
- case Rotate180:
- dest.create(img.width(), img.height(), img.depth());
- dest.setNumColors(img.numColors());
- srcTable = (unsigned int *)img.colorTable();
- destTable = (unsigned int *)dest.colorTable();
- for ( x=0; x < img.numColors(); ++x )
- destTable[x] = srcTable[x];
- for ( y=0; y < img.height(); ++y )
- {
- srcData = (unsigned char *)img.scanLine(y);
- destData = (unsigned char *)dest.scanLine(img.height()-y-1);
- for ( x=0; x < img.width(); ++x )
- destData[img.width()-x-1] = srcData[x];
- }
- break;
- case Rotate270:
- dest.create(img.height(), img.width(), img.depth());
- dest.setNumColors(img.numColors());
- srcTable = (unsigned int *)img.colorTable();
- destTable = (unsigned int *)dest.colorTable();
- for ( x=0; x < img.numColors(); ++x )
- destTable[x] = srcTable[x];
- for ( y=0; y < img.height(); ++y )
- {
- srcData = (unsigned char *)img.scanLine(y);
- for ( x=0; x < img.width(); ++x )
- {
- destData = (unsigned char *)dest.scanLine(img.width()-x-1);
- destData[y] = srcData[x];
- }
- }
- break;
- default:
- dest = img;
- break;
- }
-
- }
- return (dest);
-}
-
-void ImageViewer::slideShow( bool on )
-{
- if (on) {
- if (!imageList.isEmpty()) {
- slideTimer->start(slideDelay * 1000, FALSE);
- filename = ""; // force restart
- slideReverse ? prevImage() : nextImage();
- }
- } else {
- slideTimer->stop();
- slideAction->setOn( false);
- }
-}
-
-void ImageViewer::slideUpdate()
-{
- bool final_image = slideReverse ? prevImage() : nextImage();
-
- if (final_image && !slideRepeat) {
- slideTimer->stop();
- slideAction->setOn(FALSE);
- }
-}
-
-//
-// Display the image after the current one in the image list.
-// Return TRUE if the next call to nextImage() will wrap around to the
-// first image in the list (ie. we're now viewing the last image in the list).
-//
-bool ImageViewer::nextImage(void)
-{
- int idx = 0;
-
- if (imageList.count() > 0) {
- idx = imageIndex();
- if (idx != -1) {
- if (idx == int(imageList.count() - 1)) {
- idx = 0;
- } else {
- idx++;
- }
- } else {
- idx = 0;
- }
- openFile(imageList[idx]);
- }
-
- return idx == int(imageList.count() - 1) ? TRUE : FALSE;
-}
-
-//
-// Display the image preceeding the current one in the image list.
-// Return TRUE if the next call to prevImage() will wrap around to the last
-// image in the list (ie. we're now viewing the first image in the list).
-//
-bool ImageViewer::prevImage(void)
-{
- int idx = -1;
-
- if (imageList.count() > 0) {
- idx = imageIndex();
- if (idx != -1) {
- if (idx == 0) {
- idx = imageList.count() - 1;
- } else {
- idx--;
- }
- } else {
- idx = imageList.count() - 1;
- }
- openFile(imageList[idx]);
- }
-
- return idx == 0 ? TRUE : FALSE;
-}
-
-//
-// Return the index into the imageList of the currently viewed
-// image (ie. ImageViewer::filename in ImageViewer::imageList).
-//
-int ImageViewer::imageIndex(void)
-{
- QValueListConstIterator<DocLnk> i;
- int index;
-
- if (imageList.count() == 0) {
- return -1;
- }
-
- for (index = 0, i = imageList.begin(); i != imageList.end(); ++i, index++) {
- if ((*i).file() == filename) {
- return index;
- }
- }
-
- return -1;
-}