summaryrefslogtreecommitdiff
path: root/noncore/graphics
Side-by-side diff
Diffstat (limited to 'noncore/graphics') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/opie-eye/gui/iconview.cpp61
-rw-r--r--noncore/graphics/opie-eye/gui/iconview.h4
-rw-r--r--noncore/graphics/opie-eye/gui/imageinfoui.cpp29
-rw-r--r--noncore/graphics/opie-eye/gui/imageinfoui.h20
-rw-r--r--noncore/graphics/opie-eye/gui/imagescrollview.cpp20
-rw-r--r--noncore/graphics/opie-eye/gui/imagescrollview.h6
-rw-r--r--noncore/graphics/opie-eye/gui/mainwindow.cpp109
-rw-r--r--noncore/graphics/opie-eye/gui/mainwindow.h24
8 files changed, 237 insertions, 36 deletions
diff --git a/noncore/graphics/opie-eye/gui/iconview.cpp b/noncore/graphics/opie-eye/gui/iconview.cpp
index de2cdf0..4ced52d 100644
--- a/noncore/graphics/opie-eye/gui/iconview.cpp
+++ b/noncore/graphics/opie-eye/gui/iconview.cpp
@@ -35,9 +35,12 @@
using Opie::Ui::OKeyConfigItem;
+/*
+ * The Icons, Request Cache and IconViewItem for the IconView
+ */
namespace {
- QPixmap* _dirPix = 0;
- QPixmap* _unkPix = 0;
+ static QPixmap* _dirPix = 0;
+ static QPixmap* _unkPix = 0;
class IconViewItem : public QIconViewItem {
public:
IconViewItem( QIconView*, const QString& path, const QString& name, bool isDir = false);
@@ -59,8 +62,8 @@ namespace {
* If we request an Image or String
* we add it to the map
*/
- QMap<QString, IconViewItem*> g_stringInf;
- QMap<QString, IconViewItem*> g_stringPix;
+ static QMap<QString, IconViewItem*> g_stringInf;
+ static QMap<QString, IconViewItem*> g_stringPix;
IconViewItem::IconViewItem( QIconView* view,const QString& path,
const QString& name, bool isDir )
@@ -101,6 +104,10 @@ namespace {
}
+/*
+ * Set up the GUI.. initialize the slave set up gui
+ * and also load a dir
+ */
PIconView::PIconView( QWidget* wid, Opie::Core::OConfig* cfg )
: QVBox( wid ), m_cfg( cfg ), m_updatet( false )
{
@@ -136,6 +143,9 @@ PIconView::PIconView( QWidget* wid, Opie::Core::OConfig* cfg )
slotViewChanged( m_views->currentItem() );
}
+/*
+ * Unref the slave and save the keyboard manager
+ */
PIconView::~PIconView() {
{
QCopEnvelope( "QPE/Application/opie-eye_slave", "refDown()" );
@@ -148,6 +158,11 @@ Opie::Ui::OKeyConfigManager* PIconView::manager() {
return m_viewManager;
}
+
+/*
+ * init the KeyBoard Shortcuts
+ * called from the c'tor
+ */
void PIconView::initKeys() {
Opie::Ui::OKeyPair::List lst;
lst.append( Opie::Ui::OKeyPair::upArrowKey() );
@@ -178,6 +193,10 @@ void PIconView::initKeys() {
m_viewManager->handleWidget( m_view );
}
+
+/*
+ * change one dir up
+ */
void PIconView::slotDirUp() {
QDir dir( m_path );
dir.cdUp();
@@ -185,6 +204,9 @@ void PIconView::slotDirUp() {
}
+/*
+ * change the dir
+ */
void PIconView::slotChangeDir(const QString& path) {
if ( !currentView() )
return;
@@ -284,9 +306,9 @@ void PIconView::slotReloadDir() {
void PIconView::addFolders( const QStringList& lst) {
QStringList::ConstIterator it;
- for(it=lst.begin(); it != lst.end(); ++it ) {
+ for(it=lst.begin(); it != lst.end(); ++it )
(void)new IconViewItem( m_view, m_path+"/"+(*it), (*it), true );
- }
+
}
@@ -305,7 +327,7 @@ void PIconView::slotClicked(QIconViewItem* _it) {
if( it->isDir() )
slotChangeDir( it->path() );
else // view image
- ;
+ slotShowImage();
}
void PIconView::slotThumbInfo( const QString& _path, const QString& str ) {
@@ -360,37 +382,36 @@ void PIconView::slotBeamDone( Ir* ir) {
void PIconView::slotStart() {
m_view->viewport()->setUpdatesEnabled( false );
- qWarning( "Sig Start" );
}
void PIconView::slotEnd() {
- qWarning( "SLot End" );
if ( m_updatet )
m_view->arrangeItemsInGrid( );
m_view->viewport()->setUpdatesEnabled( true );
m_updatet = false;
}
-void PIconView::slotShowImage() {
- qDebug("image show");
+void PIconView::slotShowImage()
+{
+ qWarning( "SLotShowImage" );
bool isDir = false;
QString name = currentFileName(isDir);
if (isDir) return;
- ImageDlg dlg(name);
- QPEApplication::execDialog(&dlg);
-}
-void PIconView::slotShowImage( const QString& ) {
+ slotShowImage( name );
+}
+void PIconView::slotShowImage( const QString& name) {
+ emit sig_display( name );
}
void PIconView::slotImageInfo() {
- qDebug("image info");
+ qWarning( "SlotImageInfo" );
bool isDir = false;
QString name = currentFileName(isDir);
if (isDir) return;
- infoDlg dlg(name);
- QPEApplication::execDialog(&dlg);
+
+ slotImageInfo( name );
}
-void PIconView::slotImageInfo( const QString& ) {
-
+void PIconView::slotImageInfo( const QString& name) {
+ emit sig_showInfo( name );
}
diff --git a/noncore/graphics/opie-eye/gui/iconview.h b/noncore/graphics/opie-eye/gui/iconview.h
index 7ddb023..a4ca0bc 100644
--- a/noncore/graphics/opie-eye/gui/iconview.h
+++ b/noncore/graphics/opie-eye/gui/iconview.h
@@ -37,6 +37,10 @@ public:
void resetView();
Opie::Ui::OKeyConfigManager* manager();
+signals:
+ void sig_showInfo( const QString& );
+ void sig_display( const QString& );
+
private:
void initKeys();
QString currentFileName(bool &isDir)const;
diff --git a/noncore/graphics/opie-eye/gui/imageinfoui.cpp b/noncore/graphics/opie-eye/gui/imageinfoui.cpp
index 3463ba6..74a9ea4 100644
--- a/noncore/graphics/opie-eye/gui/imageinfoui.cpp
+++ b/noncore/graphics/opie-eye/gui/imageinfoui.cpp
@@ -19,11 +19,22 @@
#include <qpe/qcopenvelope_qws.h>
#include <qpe/resource.h>
-#define THUMBSIZE 128
+static const int THUMBSIZE = 128;
+
+
+imageinfo::imageinfo(QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+{
+ init(name);
+}
imageinfo::imageinfo(const QString&_path, QWidget* parent, const char* name, WFlags fl )
: QWidget( parent, name, fl ),currentFile(_path)
{
+ init(name);
+ slotChangeName(_path);
+}
+void imageinfo::init(const char* name) {
{
QCopEnvelope( "QPE/Application/opie-eye_slave", "refUp()" );
}
@@ -62,7 +73,6 @@ imageinfo::imageinfo(const QString&_path, QWidget* parent, const char* name, WF
this, SLOT(slot_fullInfo(const QString&, const QString&)) );
connect(master, SIGNAL( sig_thumbNail(const QString&, const QPixmap&)),
this, SLOT(slotThumbNail(const QString&, const QPixmap&)));
- slotChangeName(_path);
}
void imageinfo::slotChangeName(const QString&_path)
@@ -111,6 +121,19 @@ void imageinfo::slotThumbNail(const QString&_path, const QPixmap&_pix)
}
}
+void imageinfo::setPath( const QString& str ) {
+ slotChangeName( str );
+}
+
+void imageinfo::setDestructiveClose() {
+ WFlags fl = getWFlags();
+ /* clear it just in case */
+ fl &= ~WDestructiveClose;
+ fl |= WDestructiveClose;
+ setWFlags( fl );
+}
+
+
/* for testing */
infoDlg::infoDlg(const QString&fname,QWidget * parent, const char * name)
:QDialog(parent,name,true,WStyle_ContextHelp)
@@ -125,3 +148,5 @@ infoDlg::infoDlg(const QString&fname,QWidget * parent, const char * name)
infoDlg::~infoDlg()
{
}
+
+
diff --git a/noncore/graphics/opie-eye/gui/imageinfoui.h b/noncore/graphics/opie-eye/gui/imageinfoui.h
index 34ec937..300c92a 100644
--- a/noncore/graphics/opie-eye/gui/imageinfoui.h
+++ b/noncore/graphics/opie-eye/gui/imageinfoui.h
@@ -5,21 +5,31 @@
#include <qwidget.h>
#include <qdialog.h>
-class QVBoxLayout;
-class QHBoxLayout;
-class QGridLayout;
+class QVBoxLayout;
+class QHBoxLayout;
+class QGridLayout;
class QFrame;
class QLabel;
class QTextView;
class imageinfo : public QWidget
-{
+{
Q_OBJECT
public:
+ imageinfo( QWidget* parent = 0, const char* name = 0, WFlags fl =0);
imageinfo(const QString&_path, QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
~imageinfo();
+ void setDestructiveClose();
+
+public slots:
+ void setPath( const QString& path );
+
+private:
+ void init(const char* name);
+
+protected:
QLabel* PixmapLabel1;
QLabel* fnameLabel;
QFrame* Line1;
@@ -32,7 +42,7 @@ protected:
protected slots:
virtual void slot_fullInfo(const QString&, const QString&);
virtual void slotThumbNail(const QString&, const QPixmap&);
-
+
virtual void slotChangeName(const QString&);
};
diff --git a/noncore/graphics/opie-eye/gui/imagescrollview.cpp b/noncore/graphics/opie-eye/gui/imagescrollview.cpp
index 0d35354..7d83e29 100644
--- a/noncore/graphics/opie-eye/gui/imagescrollview.cpp
+++ b/noncore/graphics/opie-eye/gui/imagescrollview.cpp
@@ -7,6 +7,13 @@ 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)
+{
+ 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)
@@ -29,6 +36,10 @@ void ImageScrollView::setImage(const QImage&img)
init();
}
+void ImageScrollView::setImage( const QString& path ) {
+
+}
+
/* should be called every time the QImage changed it content */
void ImageScrollView::init()
{
@@ -259,6 +270,15 @@ void ImageScrollView::contentsMousePressEvent ( QMouseEvent * e)
_mouseStartPosY = e->y();
}
+void ImageScrollView::setDestructiveClose() {
+ WFlags fl = getWFlags();
+ /* clear it just in case */
+ fl &= ~WDestructiveClose;
+ fl |= WDestructiveClose;
+ setWFlags( fl );
+}
+
+
/* for testing */
ImageDlg::ImageDlg(const QString&fname,QWidget * parent, const char * name)
:QDialog(parent,name,true,WStyle_ContextHelp)
diff --git a/noncore/graphics/opie-eye/gui/imagescrollview.h b/noncore/graphics/opie-eye/gui/imagescrollview.h
index e25f955..864a015 100644
--- a/noncore/graphics/opie-eye/gui/imagescrollview.h
+++ b/noncore/graphics/opie-eye/gui/imagescrollview.h
@@ -12,11 +12,14 @@ class ImageScrollView:public QScrollView
{
Q_OBJECT
public:
+ ImageScrollView( QWidget* parent, const char* name = 0, WFlags fl = 0 );
ImageScrollView (const QImage&, QWidget * parent=0, const char * name=0, WFlags f=0,bool always_scale=false,bool rfit=false );
ImageScrollView (const QString&, QWidget * parent=0, const char * name=0, WFlags f=0,bool always_scale=false,bool rfit=false );
virtual ~ImageScrollView();
void setImage(const QImage&);
+ void setImage( const QString& path );
+ void setDestructiveClose();
enum Rotation {
Rotate0,
@@ -25,6 +28,9 @@ public:
Rotate270
};
+signals:
+ void sig_return();
+
protected:
virtual void drawContents ( QPainter * p, int clipx, int clipy, int clipw, int cliph );
void init();
diff --git a/noncore/graphics/opie-eye/gui/mainwindow.cpp b/noncore/graphics/opie-eye/gui/mainwindow.cpp
index 83ff4f1..7f384bd 100644
--- a/noncore/graphics/opie-eye/gui/mainwindow.cpp
+++ b/noncore/graphics/opie-eye/gui/mainwindow.cpp
@@ -6,10 +6,14 @@
#include "iconview.h"
#include "filesystem.h"
+#include "imageinfoui.h"
+#include "imagescrollview.h"
#include <iface/ifaceinfo.h>
#include <iface/dirview.h>
+#include <opie2/odebug.h>
+#include <opie2/owidgetstack.h>
#include <opie2/oapplicationfactory.h>
#include <opie2/otabwidget.h>
#include <opie2/okeyconfigwidget.h>
@@ -24,7 +28,7 @@
#include <qlayout.h>
#include <qdialog.h>
#include <qmap.h>
-
+#include <qtimer.h>
@@ -32,7 +36,7 @@
OPIE_EXPORT_APP( Opie::Core::OApplicationFactory<PMainWindow> )
PMainWindow::PMainWindow(QWidget* wid, const char* name, WFlags style)
- : QMainWindow( wid, name, style )
+ : QMainWindow( wid, name, style ), m_info( 0 ), m_disp( 0 )
{
setCaption( QObject::tr("Opie Eye Caramba" ) );
m_cfg = new Opie::Core::OConfig("phunkview");
@@ -47,8 +51,16 @@ PMainWindow::PMainWindow(QWidget* wid, const char* name, WFlags style)
bar->setHorizontalStretchable( true );
setToolBarsMovable( false );
- m_view = new PIconView( this, m_cfg );
- setCentralWidget( m_view );
+ m_stack = new Opie::Ui::OWidgetStack( this );
+ setCentralWidget( m_stack );
+
+ m_view = new PIconView( m_stack, m_cfg );
+ m_stack->addWidget( m_view, IconView );
+ m_stack->raiseWidget( IconView );
+ connect(m_view, SIGNAL(sig_display(const QString&)),
+ this, SLOT(slotDisplay(const QString&)));
+ connect(m_view, SIGNAL(sig_showInfo(const QString&)),
+ this, SLOT(slotShowInfo(const QString&)) );
QToolButton *btn = new QToolButton( bar );
btn->setIconSet( Resource::loadIconSet( "up" ) );
@@ -84,15 +96,16 @@ PMainWindow::PMainWindow(QWidget* wid, const char* name, WFlags style)
}
PMainWindow::~PMainWindow() {
+ odebug << "Shutting down" << oendl;
}
void PMainWindow::slotConfig() {
-/*
- * have a tab with the possible views
- * a tab for globals image cache size.. scaled loading
- * and one tab for the KeyConfigs
- */
+ /*
+ * have a tab with the possible views
+ * a tab for globals image cache size.. scaled loading
+ * and one tab for the KeyConfigs
+ */
QDialog dlg(this, 0, true);
dlg.setCaption( tr("Phunk View - Config" ) );
@@ -124,6 +137,11 @@ void PMainWindow::slotConfig() {
bool act = ( QPEApplication::execDialog( &dlg ) == QDialog::Accepted );
+/*
+ * clean up
+ *apply changes
+ */
+
QMap<PDirView*, QWidget*>::Iterator it;
for ( it = lst.begin(); it != lst.end(); ++it ) {
if ( act )
@@ -131,8 +149,81 @@ void PMainWindow::slotConfig() {
delete it.key();
}
+
if ( act ) {
m_view->resetView();
keyWid->save();
}
}
+
+/*
+ * create a new image info component
+ * and detach the current one
+ * we will make the other delete on exit
+ */
+template<class T>
+void PMainWindow::initT( const char* name, T** ptr, int id) {
+ if ( *ptr ) {
+ (*ptr)->disconnect(this, SLOT(slotReturn()));
+ (*ptr)->setDestructiveClose();
+ m_stack->removeWidget( *ptr );
+ }
+ *ptr = new T( m_stack, name );
+ m_stack->addWidget( *ptr, id );
+
+ connect(*ptr, SIGNAL(sig_return()),
+ this,SLOT(slotReturn()));
+
+}
+void PMainWindow::initInfo() {
+ initT<imageinfo>( "Image Info", &m_info, ImageInfo );
+}
+void PMainWindow::initDisp() {
+ initT<ImageScrollView>( "Image ScrollView", &m_disp, ImageDisplay );
+}
+
+/**
+ * With big Screen the plan could be to 'detach' the image
+ * window if visible and to create a ne wone
+ * init* already supports it but I make no use of it for
+ * now. We set filename and raise
+ *
+ * ### FIXME and talk to alwin
+ */
+void PMainWindow::slotShowInfo( const QString& inf ) {
+ if ( !m_info )
+ initInfo();
+ m_info->setPath( inf );
+ m_stack->raiseWidget( ImageInfo );
+}
+
+void PMainWindow::slotDisplay( const QString& inf ) {
+ if ( !m_disp )
+ initDisp();
+ m_disp->setImage( inf );
+ m_stack->raiseWidget( ImageDisplay );
+}
+
+void PMainWindow::slotReturn() {
+ raiseIconView();
+}
+
+
+void PMainWindow::closeEvent( QCloseEvent* ev ) {
+ /*
+ * return from view
+ * or properly quit
+ */
+ if ( m_stack->visibleWidget() == m_info ||
+ m_stack->visibleWidget() == m_disp ) {
+ raiseIconView();
+ ev->ignore();
+ return;
+ }
+ ev->accept();
+ QTimer::singleShot(0, qApp, SLOT(closeAllWindows()));
+}
+
+void PMainWindow::raiseIconView() {
+ m_stack->raiseWidget( IconView );
+}
diff --git a/noncore/graphics/opie-eye/gui/mainwindow.h b/noncore/graphics/opie-eye/gui/mainwindow.h
index 317a51e..35116ae 100644
--- a/noncore/graphics/opie-eye/gui/mainwindow.h
+++ b/noncore/graphics/opie-eye/gui/mainwindow.h
@@ -15,20 +15,44 @@
namespace Opie {
namespace Ui{
class OKeyConfigManager;
+ class OWidgetStack;
}
}
class PIconView;
+class imageinfo;
+class ImageScrollView;
class PMainWindow : public QMainWindow {
Q_OBJECT
+ enum Views { IconView, ImageInfo, ImageDisplay };
public:
static QString appName() { return QString::fromLatin1("opie-eye" ); }
PMainWindow(QWidget*, const char*, WFlags );
~PMainWindow();
+signals:
+ void configChanged();
+
+public slots:
+ void slotShowInfo( const QString& inf );
+ void slotDisplay( const QString& inf );
+ void slotReturn();
+
+protected:
+ void raiseIconView();
+ void closeEvent( QCloseEvent* );
+
+private:
+ template<class T> void initT( const char* name, T**, int );
+ void initInfo();
+ void initDisp();
+
private:
Opie::Core::OConfig *m_cfg;
+ Opie::Ui::OWidgetStack *m_stack;
PIconView* m_view;
+ imageinfo *m_info;
+ ImageScrollView *m_disp;
private slots: