author | alwin <alwin> | 2004-10-30 02:18:52 (UTC) |
---|---|---|
committer | alwin <alwin> | 2004-10-30 02:18:52 (UTC) |
commit | 3fcdb4e6f576f5e3eec072efe87a44bf58fdbf25 (patch) (side-by-side diff) | |
tree | 087361e8ec23fcae50ab146d6d2e2d366a54fe74 /noncore | |
parent | dca4423e3b0966fe26ba4183e5b6ad4666c61e86 (diff) | |
download | opie-3fcdb4e6f576f5e3eec072efe87a44bf58fdbf25.zip opie-3fcdb4e6f576f5e3eec072efe87a44bf58fdbf25.tar.gz opie-3fcdb4e6f576f5e3eec072efe87a44bf58fdbf25.tar.bz2 |
slide show implemented
on next/previous images: if end/begin of list is reached it starts
again on begin/end (it was required for slideshow so what ;)
zecke: so we have a feature for OPIE 1.1.7 ;)
-rw-r--r-- | noncore/graphics/opie-eye/gui/iconview.cpp | 94 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/gui/iconview.h | 6 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/gui/imageview.cpp | 28 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/gui/imageview.h | 6 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/gui/mainwindow.cpp | 1 |
5 files changed, 131 insertions, 4 deletions
diff --git a/noncore/graphics/opie-eye/gui/iconview.cpp b/noncore/graphics/opie-eye/gui/iconview.cpp index 7196aba..0499af9 100644 --- a/noncore/graphics/opie-eye/gui/iconview.cpp +++ b/noncore/graphics/opie-eye/gui/iconview.cpp @@ -221,48 +221,52 @@ void PIconView::initKeys() { lst.append( Opie::Core::OKeyPair::upArrowKey() ); lst.append( Opie::Core::OKeyPair::downArrowKey() ); lst.append( Opie::Core::OKeyPair::leftArrowKey() ); lst.append( Opie::Core::OKeyPair::rightArrowKey() ); lst.append( Opie::Core::OKeyPair::returnKey() ); m_viewManager = new Opie::Core::OKeyConfigManager(m_cfg, "View-KeyBoard-Config", lst, false,this, "keyconfig name" ); m_viewManager->addKeyConfig( OKeyConfigItem(tr("Beam Current Item") , "beam", Resource::loadPixmap("beam"), BeamItem, Opie::Core::OKeyPair(Qt::Key_B, Qt::ShiftButton), this, SLOT(slotBeam())) ); m_viewManager->addKeyConfig( OKeyConfigItem(tr("Delete Current Item"), "delete", Resource::loadPixmap("trash"), DeleteItem, Opie::Core::OKeyPair(Qt::Key_D, Qt::ShiftButton), this, SLOT(slotTrash())) ); m_viewManager->addKeyConfig( OKeyConfigItem(tr("View Current Item"), "view", Resource::loadPixmap("1to1"), ViewItem, Opie::Core::OKeyPair(Qt::Key_V, Qt::ShiftButton), this, SLOT(slotShowImage()))); m_viewManager->addKeyConfig( OKeyConfigItem(tr("Show Image Info") , "info", Resource::loadPixmap("DocumentTypeWord"), InfoItem, Opie::Core::OKeyPair(Qt::Key_I, Qt::ShiftButton ), this, SLOT(slotImageInfo()) ) ); + m_viewManager->addKeyConfig( OKeyConfigItem(tr("Start slideshow"), "slideshow", + Resource::loadPixmap("1to1"), SlideItem, + Opie::Core::OKeyPair(Qt::Key_S, Qt::ShiftButton), + this, SLOT(slotStartSlide()))); m_viewManager->load(); m_viewManager->handleWidget( m_view ); } /* * change one dir up */ void PIconView::slotDirUp() { slotChangeDir( currentView()->dirLister()->dirUp( m_path ) ); } /* * change the dir */ void PIconView::slotChangeDir(const QString& path) { if ( !currentView() ) return; PDirLister *lister = currentView()->dirLister(); if (!lister ) return; @@ -543,82 +547,168 @@ void PIconView::slotBeam() { Ir* ir = new Ir( this ); connect( ir, SIGNAL(done(Ir*)), this, SLOT(slotBeamDone(Ir*))); ir->send(pa, tr( "Image" ) ); } /* * BEAM done clean up */ void PIconView::slotBeamDone( Ir* ir) { delete ir; } void PIconView::slotStart() { m_view->viewport()->setUpdatesEnabled( false ); } void PIconView::slotEnd() { if ( m_updatet ) m_view->arrangeItemsInGrid( ); m_view->viewport()->setUpdatesEnabled( true ); m_updatet = false; } +void PIconView::slotShowLast() +{ + QIconViewItem* last_it = m_view->lastItem(); + if (!last_it) return; + m_view->setCurrentItem(last_it); + IconViewItem* it = static_cast<IconViewItem*>( last_it ); + bool isDir = it->isDir(); + QString name = it->path(); + if (!isDir && !name.isEmpty()) { + slotShowImage(name); + return; + } + bool first_loop = true; + while(isDir==true) { + if (!first_loop) { + m_view->setCurrentItem(m_view->currentItem()->prevItem()); + } else { + first_loop = false; + } + name = prevFileName(isDir); + } + + if (name.isEmpty()) return; + /* if we got a name we have a prev item */ + m_view->setCurrentItem(m_view->currentItem()->prevItem()); + slotShowImage(name); +} + +bool PIconView::slotShowFirst() +{ + /* stop when reached - otherwise we may get an endless loop */ + QIconViewItem* first_it = m_view->firstItem(); + if (!first_it) return false; + m_view->setCurrentItem(first_it); + IconViewItem* it = static_cast<IconViewItem*>( first_it ); + bool isDir = it->isDir(); + QString name = it->path(); + if (!isDir && !name.isEmpty()) { + slotShowImage(name); + return false; + } + bool first_loop = true; + while(isDir==true) { + /* if name is empty isDir is false, too. */ + if (!first_loop) { + m_view->setCurrentItem(m_view->currentItem()->nextItem()); + } else { + first_loop = false; + } + name = nextFileName(isDir); + } + if (name.isEmpty()) return false; + /* if we got a name we have a next item */ + m_view->setCurrentItem(m_view->currentItem()->nextItem()); + slotShowImage(name); + return true; +} + void PIconView::slotShowNext() { bool isDir = false; QString name = nextFileName(isDir); - if (name.isEmpty()) return; + while (isDir==true) { + m_view->setCurrentItem(m_view->currentItem()->nextItem()); + name = nextFileName(isDir); + } + if (name.isEmpty()) { + slotShowFirst(); + return; + } if (isDir) return; /* if we got a name we have a next item */ m_view->setCurrentItem(m_view->currentItem()->nextItem()); slotShowImage(name); } void PIconView::slotShowPrev() { bool isDir = false; QString name = prevFileName(isDir); - if (name.isEmpty()) return; + while (isDir==true) { + /* if name is empty isDir is false, too. */ + m_view->setCurrentItem(m_view->currentItem()->prevItem()); + name = prevFileName(isDir); + } + if (name.isEmpty()) { + slotShowLast(); + return; + } if (isDir) return; /* if we got a name we have a prev item */ m_view->setCurrentItem(m_view->currentItem()->prevItem()); slotShowImage(name); } void PIconView::slotShowImage() { bool isDir = false; QString name = currentFileName(isDir); if (isDir) return; slotShowImage( name ); } void PIconView::slotShowImage( const QString& name) { PDirLister *lister = currentView()->dirLister(); QString r_name = lister->nameToFname(name); emit sig_display( r_name ); } + +void PIconView::slotStartSlide() { + bool isDir = false; + QString name = currentFileName(isDir); + if (isDir) { + if (!slotShowFirst()) + return; + } else { + slotShowImage( name ); + } + emit sig_startslide(2); +} + void PIconView::slotImageInfo() { bool isDir = false; QString name = currentFileName(isDir); if (isDir) return; slotImageInfo( name ); } void PIconView::slotImageInfo( const QString& name) { PDirLister *lister = currentView()->dirLister(); QString r_name = lister->nameToFname(name); emit sig_showInfo(r_name ); } void PIconView::slotChangeMode( int mode ) { if ( mode >= 1 && mode <= 3 ) m_mode = mode; m_cfg->writeEntry("ListViewMode", m_mode); /* performance! */ m_view->clear(); calculateGrid(); slotReloadDir(); diff --git a/noncore/graphics/opie-eye/gui/iconview.h b/noncore/graphics/opie-eye/gui/iconview.h index a424c5c..bccbb0e 100644 --- a/noncore/graphics/opie-eye/gui/iconview.h +++ b/noncore/graphics/opie-eye/gui/iconview.h @@ -6,89 +6,93 @@ #ifndef PHUNK_ICON_VIEW_H #define PHUNK_ICON_VIEW_H #include <qvbox.h> class QIconView; class QIconViewItem; class QComboBox; class PIconViewItem; class PDirLister; class Ir; namespace Opie { namespace Core{ class OConfig; class OKeyConfigManager; } } class PIconView : public QVBox { Q_OBJECT friend class PIconViewItem; enum ActionIds { - BeamItem, DeleteItem, ViewItem, InfoItem + BeamItem, DeleteItem, ViewItem, InfoItem,SlideItem }; public: PIconView( QWidget* wid, Opie::Core::OConfig *cfg ); ~PIconView(); void resetView(); Opie::Core::OKeyConfigManager* manager(); signals: void sig_showInfo( const QString& ); void sig_display( const QString& ); + void sig_startslide(int timeout); public slots: virtual void slotShowNext(); virtual void slotShowPrev(); + virtual void slotShowLast(); + virtual bool slotShowFirst(); protected: void resizeEvent( QResizeEvent* ); private: void initKeys(); QString currentFileName(bool &isDir)const; QString nextFileName(bool &isDir)const; QString prevFileName(bool &isDir)const; void loadViews(); void calculateGrid(); private slots: void slotDirUp(); void slotChangeDir(const QString&); void slotTrash(); void slotViewChanged( int ); void slotReloadDir(); void slotRename(); void slotBeam(); void slotBeamDone( Ir* ); void slotShowImage(); void slotShowImage( const QString& ); void slotImageInfo(); void slotImageInfo( const QString& ); + void slotStartSlide(); void slotStart(); void slotEnd(); /* for performance reasons make it inline in the future */ void addFolders( const QStringList& ); void addFiles( const QStringList& ); void slotClicked(QIconViewItem* ); void slotRetrun(QIconViewItem* ); /**/ void slotThumbInfo(const QString&, const QString&); void slotThumbNail(const QString&, const QPixmap&); void slotChangeMode( int ); private: Opie::Core::OKeyConfigManager *m_viewManager; Opie::Core::OConfig *m_cfg; QComboBox* m_views; QIconView* m_view; QString m_path; bool m_updatet : 1; int m_mode; }; diff --git a/noncore/graphics/opie-eye/gui/imageview.cpp b/noncore/graphics/opie-eye/gui/imageview.cpp index 5522131..b699aa1 100644 --- a/noncore/graphics/opie-eye/gui/imageview.cpp +++ b/noncore/graphics/opie-eye/gui/imageview.cpp @@ -1,62 +1,88 @@ #include "imageview.h" #include <opie2/odebug.h> #include <opie2/oconfig.h> #include <opie2/okeyconfigwidget.h> #include <qpe/resource.h> #include <qpe/qpeapplication.h> #include <qpopupmenu.h> +#include <qtimer.h> using namespace Opie::Core; ImageView::ImageView(Opie::Core::OConfig *cfg, QWidget* parent, const char* name, WFlags fl ) : Opie::MM::OImageScrollView(parent,name,fl) { m_viewManager = 0; focus_in_count = 0; m_cfg = cfg; m_isFullScreen = false; m_ignore_next_in = false; + m_slideTimer = 0; QPEApplication::setStylusOperation(viewport(),QPEApplication::RightOnHold); initKeys(); + m_slideValue = 5; } ImageView::~ImageView() { odebug << "Delete Imageview" << oendl; delete m_viewManager; } Opie::Core::OKeyConfigManager* ImageView::manager() { if (!m_viewManager) { initKeys(); } return m_viewManager; } +void ImageView::startSlide(int value) +{ + if (!m_slideTimer) { + m_slideTimer = new QTimer(this); + } + m_slideValue=value; + connect(m_slideTimer,SIGNAL(timeout()),SLOT(nextSlide())); + m_slideTimer->start(m_slideValue*1000,true); +} + +void ImageView::nextSlide() +{ + if (!m_slideTimer) { + return; + } + if (isHidden()) { + delete m_slideTimer; + m_slideTimer = 0; + return; + } + emit dispNext(); + m_slideTimer->start(m_slideValue*1000,true); +} void ImageView::initKeys() { odebug << "init imageview keys" << oendl; if (!m_cfg) { m_cfg = new Opie::Core::OConfig("phunkview"); m_cfg->setGroup("image_view_keys" ); } Opie::Core::OKeyPair::List lst; lst.append( Opie::Core::OKeyPair::upArrowKey() ); lst.append( Opie::Core::OKeyPair::downArrowKey() ); lst.append( Opie::Core::OKeyPair::leftArrowKey() ); lst.append( Opie::Core::OKeyPair::rightArrowKey() ); lst.append( Opie::Core::OKeyPair(Qt::Key_Escape,0)); m_viewManager = new Opie::Core::OKeyConfigManager(m_cfg, "image_view_keys", lst, false,this, "image_view_keys" ); /** * Handle KeyEvents when they're pressed. This avoids problems * with 'double next' on Return. * The Return press would switch to this view and the return * release would emit the dispNext Signal. */ m_viewManager->setEventMask( Opie::Core::OKeyConfigManager::MaskPressed ); @@ -118,49 +144,49 @@ void ImageView::contentsMousePressEvent ( QMouseEvent * e) if (!m) return; m->insertItem(tr("Toggle fullscreen"),this, SIGNAL(toggleFullScreen())); if (fullScreen()) { m->insertSeparator(); m->insertItem(tr("Previous image"),this,SIGNAL(dispPrev())); m->insertItem(tr("Next image"),this,SIGNAL(dispNext())); m->insertSeparator(); m->insertItem(tr("Toggle autoscale"),this, SIGNAL(toggleAutoscale())); m->insertItem(tr("Toggle autorotate"),this, SIGNAL(toggleAutorotate())); m->insertItem(tr("Toggle thumbnail"),this, SIGNAL(toggleZoomer())); } m->setFocus(); m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) ); delete m; } void ImageView::setFullScreen(bool how) { m_isFullScreen = how; if (how) { m_ignore_next_in = true; setFixedSize(qApp->desktop()->size()); showFullScreen(); } else { - setMinimumSize(10,10); + setMinimumSize(10,10); } } void ImageView::focusInEvent(QFocusEvent *) { // Always do it here, no matter the size. odebug << "Focus in (view)" << oendl; //if (fullScreen()) parentWidget()->showNormal(); if (m_ignore_next_in){m_ignore_next_in=false;return;} if (fullScreen()) enableFullscreen(); } void ImageView::hide() { if (fullScreen()) { m_ignore_next_in = true; showNormal(); } QWidget::hide(); } void ImageView::enableFullscreen() { if (!fullScreen()) return; if (m_ignore_next_in) {m_ignore_next_in = false;return;} diff --git a/noncore/graphics/opie-eye/gui/imageview.h b/noncore/graphics/opie-eye/gui/imageview.h index 18697e0..f0e6541 100644 --- a/noncore/graphics/opie-eye/gui/imageview.h +++ b/noncore/graphics/opie-eye/gui/imageview.h @@ -1,65 +1,71 @@ #ifndef _IMAGE_VIEW_H #define _IMAGE_VIEW_H #include <opie2/oimagescrollview.h> #include <qwidget.h> +class QTimer; + namespace Opie { namespace Core { class OConfig; class OKeyConfigManager; } } class ImageView:public Opie::MM::OImageScrollView { Q_OBJECT enum ActionIds { ViewInfo, FullScreen, ShowNext, ShowPrevious, Zoomer, Autorotate, Autoscale }; public: ImageView(Opie::Core::OConfig *cfg, QWidget* parent, const char* name = 0, WFlags fl = 0 ); virtual ~ImageView(); Opie::Core::OKeyConfigManager* manager(); void setFullScreen(bool how); bool fullScreen(){return m_isFullScreen;} virtual void enableFullscreen(); signals: void dispImageInfo(const QString&); void dispNext(); void dispPrev(); void toggleFullScreen(); void hideMe(); void toggleZoomer(); void toggleAutoscale(); void toggleAutorotate(); protected: Opie::Core::OConfig * m_cfg; Opie::Core::OKeyConfigManager*m_viewManager; void initKeys(); bool m_isFullScreen:1; bool m_ignore_next_in:1; int focus_in_count; + QTimer*m_slideTimer; + int m_slideValue; virtual void focusInEvent ( QFocusEvent * ); public slots: virtual void hide(); + virtual void startSlide(int); + virtual void nextSlide(); protected slots: virtual void slotShowImageInfo(); virtual void keyReleaseEvent(QKeyEvent * e); virtual void contentsMousePressEvent ( QMouseEvent * e); }; #endif diff --git a/noncore/graphics/opie-eye/gui/mainwindow.cpp b/noncore/graphics/opie-eye/gui/mainwindow.cpp index 438fbf2..3c946b6 100644 --- a/noncore/graphics/opie-eye/gui/mainwindow.cpp +++ b/noncore/graphics/opie-eye/gui/mainwindow.cpp @@ -290,48 +290,49 @@ void PMainWindow::initT( const char* name, T** ptr, int id) { } void PMainWindow::initInfo() { initT<imageinfo>( "Image Info", &m_info, ImageInfo ); connect(m_info,SIGNAL(dispImage(const QString&)),this,SLOT(slotDisplay(const QString&))); } void PMainWindow::initDisp() { initT<ImageView>( "Image ScrollView", &m_disp, ImageDisplay ); if (m_disp) { if (m_stack->mode() != Opie::Ui::OWidgetStack::SmallScreen) { m_disp->setMinimumSize(QApplication::desktop()->size()/2); } m_disp->setAutoScale(autoScale); m_disp->setAutoRotate(autoRotate); m_disp->setShowZoomer(zoomerOn); m_disp->setBackgroundColor(white); connect(m_disp,SIGNAL(dispImageInfo(const QString&)),this,SLOT(slotShowInfo(const QString&))); connect(m_disp,SIGNAL(dispNext()),m_view,SLOT(slotShowNext())); connect(m_disp,SIGNAL(dispPrev()),m_view,SLOT(slotShowPrev())); connect(m_disp,SIGNAL(toggleFullScreen()),this,SLOT(slotToggleFullScreen())); connect(m_disp,SIGNAL(hideMe()),this,SLOT(raiseIconView())); connect(m_disp,SIGNAL(toggleZoomer()),this,SLOT(slotToggleZoomer())); connect(m_disp,SIGNAL(toggleAutoscale()),this,SLOT(slotToggleAutoscale())); connect(m_disp,SIGNAL(toggleAutorotate()),this,SLOT(slotToggleAutorotate())); + connect(m_view,SIGNAL(sig_startslide(int)),m_disp,SLOT(startSlide(int))); } } void PMainWindow::slotToggleFullScreen() { odebug << "Toggle full " << oendl; if (!m_disp) return; bool current = !m_disp->fullScreen(); odebug << "Current = " << current << oendl; if (current) { odebug << "full" << oendl; m_disp->setBackgroundColor(black); m_disp->reparent(0, WStyle_Customize | WStyle_NoBorder, QPoint(0,0)); m_disp->setVScrollBarMode(QScrollView::AlwaysOff); m_disp->setHScrollBarMode(QScrollView::AlwaysOff); m_disp->resize(qApp->desktop()->width(), qApp->desktop()->height()); //m_disp->showFullScreen(); //qwsDisplay()->requestFocus( m_disp->winId(), TRUE); } else { setUpdatesEnabled(false); odebug << "window" << oendl; m_disp->reparent(0,QPoint(0,0)); m_disp->showNormal(); m_disp->setBackgroundColor(white); |