From 92640e4094075342138796065040441210348c76 Mon Sep 17 00:00:00 2001 From: warmi Date: Thu, 15 Aug 2002 03:16:42 +0000 Subject: FileSelector with the optional thumbnail preview for images. Work in progress... --- diff --git a/noncore/multimedia/showimg/ImageFileSelector.cpp b/noncore/multimedia/showimg/ImageFileSelector.cpp new file mode 100644 index 0000000..347300f --- a/dev/null +++ b/noncore/multimedia/showimg/ImageFileSelector.cpp @@ -0,0 +1,277 @@ + + +#include "qpe/global.h" +#include "qpe/applnk.h" +#include "qpe/lnkproperties.h" +#include "qpe/applnk.h" +#include "qpe/qpeapplication.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ImageFileSelector.h" + + + + + +ThumbWidget::ThumbWidget(QPixmap p,QString text,const DocLnk& f,QWidget *parent,int w) : QWidget( parent ),fl(f) +{ + setBackgroundMode(NoBackground); + if ( w!=-1 ) + setMinimumSize(w,p.height()+24); + else + setMinimumSize(p.width(),p.height()+24); + description=new QLabel(text,this); + description->setBackgroundColor(colorGroup().base()); + description->setAlignment(AlignCenter); + description->setGeometry(0,height()-24,width(),24); + pixmap=p; +} + +void ThumbWidget::resizeEvent(QResizeEvent *e) +{ + description->setGeometry(0,height()-24,width(),24); +} + +void ThumbWidget::paintEvent( QPaintEvent *e ) +{ + QPainter painter(this); + + painter.setClipRect(e->rect()); + painter.fillRect(0,0,width(),height(),QColor(255,255,255)); + painter.drawPixmap((width() - pixmap.width()) / 2,0, pixmap); + +} + +void ThumbWidget::mouseReleaseEvent(QMouseEvent* event) +{ + emit clicked(fl); +} + + + + +ImageFileSelectorItem::ImageFileSelectorItem( QListView *parent, const DocLnk &f): QListViewItem( parent ), fl( f ) +{ + setText( 0, f.name() ); + QFileInfo fi(f.file()); + setText( 1, (fi.extension()).upper() ); + setPixmap( 0, f.pixmap() ); + + +} + + +ImageFileSelectorItem::~ImageFileSelectorItem() +{ + +} + + +ImageFileSelector::ImageFileSelector( CURRENT_VIEW scv,QWidget *parent,const char *name ):QWidgetStack(parent) +{ + + detailed=new QListView(this); + + detailed->addColumn (tr("Title")); + detailed->addColumn (tr("Type")); + detailed->setAllColumnsShowFocus( true ); + + tList.setAutoDelete(true); + + thumb =new QScrollView(this); + thumb->setVScrollBarMode (QScrollView::Auto ); + thumb->viewport()->setBackgroundColor(colorGroup().base()); + + background=new QWidget(0); + background->setBackgroundColor(colorGroup().base()); + thumb->addChild(background); + gl = new QGridLayout(background,1,2,4,4); + + + + connect( detailed, SIGNAL( mouseButtonClicked( int, QListViewItem *, const QPoint &, int ) ), + this, SLOT( fileClicked( int, QListViewItem *, const QPoint &, int ) ) ); + connect( detailed, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint &, int ) ), + this, SLOT( filePressed( int, QListViewItem *, const QPoint &, int ) ) ); + connect( detailed, SIGNAL( returnPressed( QListViewItem * ) ), + this, SLOT( fileClicked( QListViewItem * ) ) ); + + cView=UNKNOWN; + setView(scv); + reread(); + +} +ImageFileSelector::~ImageFileSelector() +{ + +} + + +void ImageFileSelector::switchView() +{ + CURRENT_VIEW v=cView; + + if ( v==DETAILED ) + v=THUMBNAIL; + else + v=DETAILED; + setView(v); +} + +void ImageFileSelector::setView(CURRENT_VIEW v) +{ + + if ( v==cView ) + return; + cView=v; + + if ( cView!=DETAILED ) + { + raiseWidget(thumb); + updateSizes(); + } + else + { + raiseWidget(detailed); + updateSizes(); + } + + +} + +void ImageFileSelector::resizeEvent(QResizeEvent *) +{ + updateSizes(); +} + +void ImageFileSelector::updateSizes() +{ + int ww=(detailed->width()-detailed->frameWidth()*2); + double w=(double)ww*0.70; + detailed->setColumnWidth(0,(int)w); + detailed->setColumnWidth(1,ww-(int)w); + background->setMinimumWidth(thumb->visibleWidth()); + thumb->updateScrollBars(); +} + +void ImageFileSelector::reread(bool purgeCache) +{ + ImageFileSelectorItem *item = (ImageFileSelectorItem *)detailed->selectedItem(); + QString oldFile; + if ( item ) + oldFile = item->file().file(); + detailed->clear(); + tList.clear(); + DocLnkSet files; + Global::findDocuments(&files, "image/*"); + count = files.children().count(); + QListIterator dit( files.children() ); + int y=0; + int x=4; + int totalHeight=4; + ThumbWidget *l=0; + int width=80; + gl->expand(dit.count()/2,2); + + int i,j; + + i=j=0; + + detailed->setUpdatesEnabled(false); + thumb->setUpdatesEnabled(false); + for ( ; dit.current(); ++dit ) + { + item = new ImageFileSelectorItem( detailed, **dit ); + if ( item->file().file() == oldFile ) + detailed->setCurrentItem( item ); + } + + QListViewItemIterator it( detailed ); + ImageFileSelectorItem *ii; + // iterate through all items of the listview + for ( ; it.current(); ++it ) + { + ii=(ImageFileSelectorItem *)it.current(); + QImage img(ii->file().file()); + img=img.smoothScale(64,64); + QPixmap pix; + pix.convertFromImage(img); + l=new ThumbWidget(pix,ii->file().name(),ii->file(),background,width); + l->setBackgroundColor(colorGroup().base()); + gl->addWidget(l,j,i); + i++; + if ( i==2 ) + { + i=0; + j++; + } + tList.append(l); + connect(l,SIGNAL(clicked(const DocLnk &)),this,SLOT(thumbClicked(const DocLnk &))); + + } + + + + if ( !detailed->selectedItem() ) + detailed->setCurrentItem( detailed->firstChild() ); + + detailed->setUpdatesEnabled(true); + thumb->setUpdatesEnabled(true); + detailed->update(); + thumb->update(); + +} + +int ImageFileSelector::fileCount() +{ + return count; +} +const DocLnk * ImageFileSelector::selected() +{ + ImageFileSelectorItem *item = (ImageFileSelectorItem *) detailed->selectedItem(); + if ( item ) + return new DocLnk( item->file() ); + return 0; +} + + + +void ImageFileSelector::fileClicked( int button, QListViewItem *i, const QPoint &, int ) +{ + if ( !i ) + return; + if ( button == Qt::LeftButton ) + { + fileClicked( i ); + } +} + // pressed to get 'right down' +void ImageFileSelector::filePressed( int, QListViewItem *, const QPoint &, int ) +{ + +} +void ImageFileSelector::fileClicked( QListViewItem *i) +{ + if ( !i ) + return; + emit fileSelected( ( (ImageFileSelectorItem*)i )->file() ); + emit closeMe(); +} + +void ImageFileSelector::thumbClicked(const DocLnk &f) +{ + emit fileSelected( f ); + emit closeMe(); +} + diff --git a/noncore/multimedia/showimg/ImageFileSelector.h b/noncore/multimedia/showimg/ImageFileSelector.h new file mode 100644 index 0000000..2c346c4 --- a/dev/null +++ b/noncore/multimedia/showimg/ImageFileSelector.h @@ -0,0 +1,135 @@ +#ifndef IMAGEFILE_SELECTOR_H +#define IMAGEFILE_SELECTOR_H + + +#include +#include +#include +#include + +#include "qpe/filemanager.h" +#include "qpe/applnk.h" + +class QScrollView; +class QLabel; + +class ThumbWidget : public QWidget +{ + Q_OBJECT + public: + ThumbWidget(QPixmap p,QString text,const DocLnk& f,QWidget *parent=0,int width=-1); + ~ThumbWidget() + { + + } + + DocLnk file() const + { + return fl; + } + + + signals: + void clicked(const DocLnk &); + +protected: + void paintEvent( QPaintEvent * ); + void resizeEvent(QResizeEvent *); + + void mouseReleaseEvent(QMouseEvent* event); + +private: + QPixmap pixmap; + QLabel *description; + DocLnk fl; +}; + + +class ImageFileSelector : public QWidgetStack +{ + Q_OBJECT + + public: + + enum CURRENT_VIEW + { + THUMBNAIL, + DETAILED, + UNKNOWN + }; + + + ImageFileSelector(CURRENT_VIEW scv=DETAILED, QWidget *parent=0, const char *name=0 ); + ~ImageFileSelector(); + + void reread(bool purgeCache=false); + int fileCount(); + const DocLnk *selected(); + + void setView(CURRENT_VIEW v); + + CURRENT_VIEW view() + { + return cView; + } + + +public slots: + + void switchView(); + +signals: + void fileSelected( const DocLnk & ); + void closeMe(); + +protected: + + void resizeEvent(QResizeEvent *); + + +private slots: + void fileClicked( int, QListViewItem *, const QPoint &, int ); + // pressed to get 'right down' + void filePressed( int, QListViewItem *, const QPoint &, int ); + void fileClicked( QListViewItem *); + void thumbClicked(const DocLnk &); + +private: + + void updateSizes(); + + + CURRENT_VIEW cView; + int count; + + QListView *detailed; + QScrollView *thumb; + QList tList; + QWidget *background; + QGridLayout *gl; + +}; + + +class ImageFileSelectorItem : public QListViewItem +{ +public: + ImageFileSelectorItem( QListView *parent, const DocLnk& f ); + ~ImageFileSelectorItem(); + + DocLnk file() const + { + return fl; + } + + +private: + DocLnk fl; +}; + + + + +#endif // IMAGEFILE_SELECTOR_H + + -- cgit v0.9.0.2