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.cpp279
1 files changed, 242 insertions, 37 deletions
diff --git a/noncore/multimedia/showimg/showimg.cpp b/noncore/multimedia/showimg/showimg.cpp
index d7d53ec..0fbffe7 100644
--- a/noncore/multimedia/showimg/showimg.cpp
+++ b/noncore/multimedia/showimg/showimg.cpp
@@ -25,5 +25,10 @@
#include "showimg.h"
#include "ImageFileSelector.h"
+#include "settingsdialog.h"
+
+#include <opie/ofiledialog.h>
+
+#include <qpe/qpeapplication.h>
#include <qpe/config.h>
#include <qpe/resource.h>
@@ -50,10 +55,10 @@
-ControlsDialog::ControlsDialog(const QString &caption,QImage image,int *brightness,QWidget *parent):QDialog(parent,0,true)
+ControlsDialog::ControlsDialog(const QString &caption,QImage image,int *brightness,QWidget *parent)
+ : QDialog(parent,0,true)
{
setCaption(caption);
- if ( parent )
- {
+ if ( parent ) {
setPalette(parent->palette());
}
@@ -102,7 +107,8 @@ void ControlsDialog::accept()
}
+//===========================================================================
-
-InfoDialog::InfoDialog(const QString &caption, const QStringList text,QWidget *parent):QDialog(parent,0,true)
+InfoDialog::InfoDialog(const QString &caption, const QStringList text,QWidget *parent)
+ : QDialog(parent,0,true)
{
setCaption(caption);
@@ -150,4 +156,6 @@ void InfoDialog::displayInfo(const QString &caption, const QStringList text, QWi
}
+//===========================================================================
+
ImagePane::ImagePane( QWidget *parent ) : QWidget( parent )
@@ -230,9 +238,11 @@ ImageViewer::ImageViewer( QWidget *parent, const char *name, int wFlags )
fileMenuFile = new QPopupMenu(this);
//menuBarmenubarFile->insertItem( tr("File"), fileMenu );
- fileMenuFile->insertItem(tr("Open"), this, SLOT(openFile()), 0);
+ 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->insertItem( tr("Thumbnail View"),
+ this, SLOT(switchThumbView()), 0, SHOW_THUMBNAILS );
viewMenuFile->setItemChecked ( SHOW_THUMBNAILS, showThumbView );
@@ -243,11 +253,16 @@ ImageViewer::ImageViewer( QWidget *parent, const char *name, int wFlags )
optionsMenuFile = new QPopupMenu( this);
//menubarFile->insertItem( tr("Options"),optionsMenu );
- optionsMenuFile->insertItem( tr("Slideshow") );
- optionsMenuFile->insertSeparator();
- optionsMenuFile->insertItem( tr("Preferences.."));
- optionsMenuFile->insertItem( tr("Help"));
-
+ 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();
@@ -292,5 +307,9 @@ ImageViewer::ImageViewer( QWidget *parent, const char *name, int wFlags )
//fileSelector->setCloseVisible(FALSE);
connect( fileSelector, SIGNAL( closeMe() ), this, SLOT( closeFileSelector() ) );
- connect( fileSelector, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( openFile( const DocLnk & ) ) );
+ connect( fileSelector, SIGNAL( fileSelected( const DocLnk &) ),
+ this, SLOT( openFile( const DocLnk & ) ) );
+
+ imageList = fileSelector->fileList();
+ slideAction->setEnabled( imageList.count() != 0);
iconToolBar = new QPEToolBar(this);
@@ -337,9 +356,29 @@ ImageViewer::ImageViewer( QWidget *parent, const char *name, int wFlags )
- a = new QAction( tr( "Fullscreen" ), Resource::loadPixmap( "fullscreen" ), QString::null, 0, this, 0 );
+ 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();
@@ -357,7 +396,50 @@ ImageViewer::~ImageViewer()
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 ) {
+ qDebug("<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>");
+ 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()
{
@@ -369,10 +451,7 @@ void ImageViewer::switchSizeToScreen()
void ImageViewer::updateImage()
{
- if ( isSized )
- {
+ if ( isSized ) {
imagePanel->setPixmap(pmScaled);
- }
- else
- {
+ } else {
imagePanel->setPixmap(pm);
}
@@ -397,4 +476,5 @@ void ImageViewer::switchToFileSelector()
iconToolBar->hide();
imagePanel->disable();
+ slideShow(false);
}
@@ -435,13 +515,11 @@ void ImageViewer::show()
void ImageViewer::show(const QString& fileref)
{
+// qDebug("Show "+fileref);
bFromDocView = TRUE;
closeFileSelector();
DocLnk link(fileref);
- if ( link.isValid() )
- {
+ if ( link.isValid() ) {
openFile(link);
- }
- else
- {
+ } else {
filename = fileref;
updateCaption( fileref );
@@ -450,10 +528,28 @@ void ImageViewer::show(const QString& fileref)
}
-void ImageViewer::openFile( const DocLnk &file )
+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);
+// DocLnk link(file);
+ qDebug("open "+link.name());
updateCaption( link.name() );
loadImage( link.file() );
+ if (slideTimer->isActive()) {
+ slideTimer->start(slideDelay * 1000, FALSE);
+ }
+
}
@@ -483,17 +579,14 @@ void ImageViewer::loadImage( const char *fileName )
{
filename = fileName;
- if ( 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 )
- {
+ if ( ok ) {
ok = reconvertImage();
updateImageInfo(filename);
}
- if ( !ok )
- {
+ if ( !ok ) {
pm.resize(0,0); // couldn't load image
update();
@@ -501,4 +594,18 @@ void ImageViewer::loadImage( const char *fileName )
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();
@@ -620,4 +727,6 @@ void ImageViewer::resizeEvent( QResizeEvent * )
void ImageViewer::hFlip()
{
+// matrix.scale( -1.0, 1.0 );
+
setImage(image.mirror(TRUE,FALSE));
}
@@ -625,4 +734,5 @@ void ImageViewer::hFlip()
void ImageViewer::vFlip()
{
+// matrix.scale( 1.0, -1.0 );
setImage(image.mirror(FALSE,TRUE));
}
@@ -630,5 +740,5 @@ void ImageViewer::vFlip()
void ImageViewer::rot180()
{
-
+// matrix.rotate( 180.0 );
setImage(image.mirror(TRUE,TRUE));
}
@@ -638,4 +748,5 @@ void ImageViewer::rot90()
QImage oldimage;
oldimage = image.convertDepth(32);
+// matrix.rotate( -90.0 );
setImage(rotate(oldimage,Rotate90));
@@ -646,4 +757,5 @@ void ImageViewer::rot270()
QImage oldimage;
oldimage = image.convertDepth(32);
+// matrix.rotate(90.0);
setImage(rotate(oldimage,Rotate270));
@@ -655,6 +767,4 @@ void ImageViewer::blackAndWhite()
viewMenuView->setItemEnabled(BLACKANDWHITE,false);
setImage(toGray(image,false));
-
-
}
@@ -673,6 +783,5 @@ void ImageViewer::displayControlsDialog()
ControlsDialog *dlg=new ControlsDialog("Image Viewer",small,&newB,this);
dlg->exec();
- if ( newB )
- {
+ if ( newB ) {
intensity(image,(float)newB/100);
setImage(image);
@@ -708,4 +817,9 @@ void ImageViewer::normalView()
}
+void ImageViewer::stopSlideShow() {
+ if (slideTimer->isActive())
+ slideTimer->stop();
+}
+
void ImageViewer::fullScreen()
{
@@ -1035,10 +1149,101 @@ QImage ImageViewer::rotate(QImage &img, RotateDirection r)
}
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;
+}