author | alwin <alwin> | 2004-04-13 21:44:12 (UTC) |
---|---|---|
committer | alwin <alwin> | 2004-04-13 21:44:12 (UTC) |
commit | e61f3d63c310e4e560bc38f41c1390f246b5f670 (patch) (side-by-side diff) | |
tree | 2403a3b3ba1a47e6122d259b6b761f45c37f504d | |
parent | 482750c5b2494b7b2b94c13bf4743349b67d188a (diff) | |
download | opie-e61f3d63c310e4e560bc38f41c1390f246b5f670.zip opie-e61f3d63c310e4e560bc38f41c1390f246b5f670.tar.gz opie-e61f3d63c310e4e560bc38f41c1390f246b5f670.tar.bz2 |
zoomer widget better integrated, size of it depends on the size of the displayed image,
may switched off by user and so on.
-rw-r--r-- | noncore/graphics/opie-eye/gui/imagescrollview.cpp | 44 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/gui/imagescrollview.h | 4 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/gui/mainwindow.cpp | 15 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/gui/mainwindow.h | 2 |
4 files changed, 56 insertions, 9 deletions
diff --git a/noncore/graphics/opie-eye/gui/imagescrollview.cpp b/noncore/graphics/opie-eye/gui/imagescrollview.cpp index 5b12258..2f16d82 100644 --- a/noncore/graphics/opie-eye/gui/imagescrollview.cpp +++ b/noncore/graphics/opie-eye/gui/imagescrollview.cpp @@ -6,29 +6,29 @@ using namespace Opie::Core; #include <qimage.h> #include <qlayout.h> ImageScrollView::ImageScrollView( QWidget* parent, const char* name, WFlags f ) :QScrollView(parent,name,f|Qt::WRepaintNoErase ),_image_data(),_original_data(),scale_to_fit(true), - rotate_to_fit(true),first_resize_done(false),m_lastName("") + rotate_to_fit(true),show_zoomer(true),first_resize_done(false),m_lastName("") { init(); } ImageScrollView::ImageScrollView (const QImage&img, QWidget * parent, const char * name, WFlags f,bool always_scale,bool rfit) :QScrollView(parent,name,f|Qt::WRepaintNoErase),_image_data(),_original_data(img),scale_to_fit(always_scale), - rotate_to_fit(rfit),first_resize_done(false),m_lastName("") + rotate_to_fit(rfit),show_zoomer(true),first_resize_done(false),m_lastName("") { _original_data.convertDepth(QPixmap::defaultDepth()); _original_data.setAlphaBuffer(false); init(); } ImageScrollView::ImageScrollView (const QString&img, QWidget * parent, const char * name, WFlags f,bool always_scale,bool rfit) :QScrollView(parent,name,f|Qt::WRepaintNoErase),_image_data(),_original_data(),scale_to_fit(always_scale), - rotate_to_fit(rfit),first_resize_done(false),m_lastName("") + rotate_to_fit(rfit),show_zoomer(true),first_resize_done(false),m_lastName("") { init(); setImage(img); } void ImageScrollView::setImage(const QImage&img) @@ -77,14 +77,14 @@ void ImageScrollView::init() viewport()->setBackgroundColor(white); setFocusPolicy(QWidget::StrongFocus); if (first_resize_done) { last_rot = Rotate0; generateImage(); - odebug << "reinit display " << oendl; } else if (_original_data.size().isValid()) { + if (image_fit_into(_original_data.size()) || !show_zoomer) _zoomer->hide(); resizeContents(_original_data.width(),_original_data.height()); } } void ImageScrollView::setAutoRotate(bool how) { @@ -263,20 +263,27 @@ void ImageScrollView::generateImage() rotate_into_data(r); } last_rot = r; resizeContents(_image_data.width(),_image_data.height()); } _pdata.convertFromImage(_image_data); + /* * update the zoomer */ + check_zoomer(); emit imageSizeChanged( _image_data.size() ); rescaleImage( 128, 128 ); + /* + * move scrollbar + */ + _zoomer->setGeometry( viewport()->width()-_image_data.width()/2, viewport()->height()-_image_data.height()/2, + _image_data.width()/2, _image_data.height()/2 ); + _zoomer->setImage( _image_data ); - /* * invalidate */ _image_data=QImage(); } @@ -285,16 +292,12 @@ void ImageScrollView::resizeEvent(QResizeEvent * e) odebug << "ImageScrollView resizeEvent" << oendl; QScrollView::resizeEvent(e); generateImage(); first_resize_done = true; emit viewportSizeChanged( viewport()->size() ); - /* - * move scrollbar - */ - _zoomer->setGeometry( viewport()->width()-100, viewport()->height()-50, 100, 50 ); } void ImageScrollView::keyPressEvent(QKeyEvent * e) { if (!e) return; int dx = horizontalScrollBar()->lineStep(); @@ -395,6 +398,29 @@ void ImageScrollView::setDestructiveClose() { WFlags fl = getWFlags(); /* clear it just in case */ fl &= ~WDestructiveClose; fl |= WDestructiveClose; setWFlags( fl ); } + +bool ImageScrollView::image_fit_into(const QSize&s ) +{ + if (s.width()>width()||s.height()>height()) { + return false; + } + return true; +} + +void ImageScrollView::setShowZoomer(bool how) +{ + show_zoomer = how; + check_zoomer(); +} + +void ImageScrollView::check_zoomer() +{ + if ( (!show_zoomer||image_fit_into(_pdata.size()) ) && _zoomer->isVisible()) { + _zoomer->hide(); + } else if ( show_zoomer && !image_fit_into(_pdata.size()) && _zoomer->isHidden()){ + _zoomer->show(); + } +} diff --git a/noncore/graphics/opie-eye/gui/imagescrollview.h b/noncore/graphics/opie-eye/gui/imagescrollview.h index 1b25103..e209dfb 100644 --- a/noncore/graphics/opie-eye/gui/imagescrollview.h +++ b/noncore/graphics/opie-eye/gui/imagescrollview.h @@ -25,12 +25,13 @@ public: virtual void setImage(const QImage&); virtual void setImage( const QString& path ); virtual void setDestructiveClose(); virtual void setAutoRotate(bool); virtual void setAutoScale(bool); + virtual void setShowZoomer(bool); enum Rotation { Rotate0, Rotate90, Rotate180, Rotate270 @@ -51,19 +52,22 @@ protected: QPixmap _pdata; int _mouseStartPosX,_mouseStartPosY; bool scale_to_fit; bool rotate_to_fit; + bool show_zoomer; bool first_resize_done; Rotation last_rot; QString m_lastName; virtual void rescaleImage(int w, int h); virtual void rotate_into_data(Rotation r); virtual void generateImage(); + bool image_fit_into(const QSize&s); + void check_zoomer(); protected slots: virtual void viewportMouseMoveEvent(QMouseEvent* e); virtual void contentsMousePressEvent ( QMouseEvent * e); virtual void resizeEvent(QResizeEvent * e); virtual void keyPressEvent(QKeyEvent * e); diff --git a/noncore/graphics/opie-eye/gui/mainwindow.cpp b/noncore/graphics/opie-eye/gui/mainwindow.cpp index 3650493..ef23f79 100644 --- a/noncore/graphics/opie-eye/gui/mainwindow.cpp +++ b/noncore/graphics/opie-eye/gui/mainwindow.cpp @@ -103,18 +103,32 @@ PMainWindow::PMainWindow(QWidget* wid, const char* name, WFlags style) btn->setIconSet( Resource::loadIconSet( "1to1" ) ); btn->setToggleButton(true); btn->setOn(false); connect(btn,SIGNAL(toggled(bool)),this,SLOT(slotScaleToggled(bool))); autoScale = true; + btn = new QToolButton(bar); + btn->setIconSet( Resource::loadIconSet( "mag" ) ); + btn->setToggleButton(true); + btn->setOn(true); + connect(btn,SIGNAL(toggled(bool)),this,SLOT(slotZoomerToggled(bool))); + zoomerOn = true; } PMainWindow::~PMainWindow() { odebug << "Shutting down" << oendl; } +void PMainWindow::slotZoomerToggled(bool how) +{ + zoomerOn = how; + if (m_disp) { + m_disp->setShowZoomer(zoomerOn); + } +} + void PMainWindow::slotRotateToggled(bool how) { autoRotate = how; if (m_disp) { m_disp->setAutoRotate(how); } @@ -228,12 +242,13 @@ void PMainWindow::initInfo() { } void PMainWindow::initDisp() { initT<ImageView>( "Image ScrollView", &m_disp, ImageDisplay ); if (m_disp) { m_disp->setAutoScale(autoScale); m_disp->setAutoRotate(autoRotate); + m_disp->setShowZoomer(zoomerOn); connect(m_disp,SIGNAL(dispImageInfo(const QString&)),this,SLOT(slotShowInfo(const QString&))); } } /** * With big Screen the plan could be to 'detach' the image diff --git a/noncore/graphics/opie-eye/gui/mainwindow.h b/noncore/graphics/opie-eye/gui/mainwindow.h index 59dba30..e9b16d0 100644 --- a/noncore/graphics/opie-eye/gui/mainwindow.h +++ b/noncore/graphics/opie-eye/gui/mainwindow.h @@ -38,12 +38,13 @@ signals: public slots: void slotShowInfo( const QString& inf ); void slotDisplay( const QString& inf ); void slotReturn(); void slotRotateToggled(bool); void slotScaleToggled(bool); + void slotZoomerToggled(bool); void setDocument( const QString& ); protected: void raiseIconView(); void closeEvent( QCloseEvent* ); @@ -57,12 +58,13 @@ private: Opie::Ui::OWidgetStack *m_stack; PIconView* m_view; imageinfo *m_info; ImageView *m_disp; bool autoRotate; bool autoScale; + bool zoomerOn; QToolButton*rotateButton; private slots: void slotConfig(); }; |