00001 #include "ImageFileSelector.h"
00002
00003
00004 #include <opie2/odebug.h>
00005 #include <qpe/qpeapplication.h>
00006 using namespace Opie::Core;
00007
00008
00009 #include <qlabel.h>
00010 #include <qfileinfo.h>
00011
00012
00013 #include <stdlib.h>
00014
00015 ThumbWidget::ThumbWidget(QPixmap p,QString text,const DocLnk& f,QWidget *parent,int w)
00016 : QWidget( parent ),fl(f)
00017 {
00018 setBackgroundMode(NoBackground);
00019 if ( w!=-1 )
00020 setMinimumSize(w,p.height()+24);
00021 else
00022 setMinimumSize(p.width(),p.height()+24);
00023 description=new QLabel(text,this);
00024 description->setBackgroundColor(colorGroup().base());
00025 description->setAlignment(AlignCenter);
00026 description->setGeometry(0,height()-24,width(),24);
00027 pixmap=p;
00028 }
00029
00030 void ThumbWidget::resizeEvent(QResizeEvent *)
00031 {
00032 description->setGeometry(0,height()-24,width(),24);
00033 }
00034
00035 void ThumbWidget::paintEvent( QPaintEvent *e )
00036 {
00037 QPainter painter(this);
00038
00039 painter.setClipRect(e->rect());
00040 painter.fillRect(0,0,width(),height(),QColor(255,255,255));
00041 painter.drawPixmap((width() - pixmap.width()) / 2,0, pixmap);
00042
00043 }
00044
00045 void ThumbWidget::mouseReleaseEvent(QMouseEvent* )
00046 {
00047 emit clicked(fl);
00048 }
00049
00050
00051
00052 ImageFileSelectorItem::ImageFileSelectorItem( QListView *parent, const DocLnk &f)
00053 : QListViewItem( parent ), fl( f )
00054 {
00055 setText( 0, f.name() );
00056 QFileInfo fi(f.file());
00057 setText( 1, (fi.extension()).upper() );
00058 setPixmap( 0, f.pixmap() );
00059
00060
00061 }
00062
00063
00064 ImageFileSelectorItem::~ImageFileSelectorItem()
00065 {
00066
00067 }
00068
00069
00070 ImageFileSelector::ImageFileSelector( CURRENT_VIEW scv,QWidget *parent,const char * )
00071 : QWidgetStack(parent)
00072 {
00073
00074 detailed=new QListView(this);
00075
00076 detailed->addColumn (tr("Title"));
00077 detailed->addColumn (tr("Type"));
00078 detailed->setAllColumnsShowFocus( true );
00079
00080 tList.setAutoDelete(true);
00081
00082 thumb =new QScrollView(this);
00083 thumb->setVScrollBarMode (QScrollView::Auto );
00084 thumb->viewport()->setBackgroundColor(colorGroup().base());
00085
00086 background=new QWidget(0);
00087 background->setBackgroundColor(colorGroup().base());
00088 thumb->addChild(background);
00089 gl = new QGridLayout(background,1,2,4,4);
00090
00091
00092
00093 connect( detailed, SIGNAL( mouseButtonClicked(int,QListViewItem*,const QPoint&,int) ),
00094 this, SLOT( fileClicked(int,QListViewItem*,const QPoint&,int) ) );
00095 connect( detailed, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ),
00096 this, SLOT( filePressed(int,QListViewItem*,const QPoint&,int) ) );
00097 connect( detailed, SIGNAL( returnPressed(QListViewItem*) ),
00098 this, SLOT( fileClicked(QListViewItem*) ) );
00099
00100 cView=UNKNOWN;
00101 setView(scv);
00102 reread();
00103
00104 }
00105 ImageFileSelector::~ImageFileSelector()
00106 {
00107
00108 }
00109
00110
00111 void ImageFileSelector::switchView()
00112 {
00113 CURRENT_VIEW v=cView;
00114
00115 if ( v==DETAILED )
00116 v=THUMBNAIL;
00117 else
00118 v=DETAILED;
00119 setView(v);
00120 }
00121
00122 void ImageFileSelector::setView(CURRENT_VIEW v)
00123 {
00124
00125 if ( v==cView )
00126 return;
00127 cView=v;
00128
00129 if ( cView!=DETAILED )
00130 {
00131 raiseWidget(thumb);
00132 updateSizes();
00133 }
00134 else
00135 {
00136 raiseWidget(detailed);
00137 updateSizes();
00138 }
00139
00140
00141 }
00142
00143 void ImageFileSelector::resizeEvent(QResizeEvent *)
00144 {
00145 updateSizes();
00146 }
00147
00148 void ImageFileSelector::updateSizes()
00149 {
00150 int ww=(detailed->width()-detailed->frameWidth()*2);
00151 double w=(double)ww*0.70;
00152 detailed->setColumnWidth(0,(int)w);
00153 detailed->setColumnWidth(1,ww-(int)w);
00154 background->setMinimumWidth(thumb->visibleWidth());
00155 thumb->updateScrollBars();
00156 }
00157
00158 void ImageFileSelector::reread(bool)
00159 {
00160
00161 ImageFileSelectorItem *item = (ImageFileSelectorItem *)detailed->selectedItem();
00162 QString oldFile;
00163 if ( item )
00164 oldFile = item->file().file();
00165 detailed->clear();
00166 tList.clear();
00167 DocLnkSet files;
00168 Global::findDocuments(&files, "image/*");
00169 count = files.children().count();
00170 QListIterator<DocLnk> dit( files.children() );
00171
00172
00173
00174 ThumbWidget *l=0;
00175 int width=80;
00176 gl->expand(dit.count()/2,2);
00177 int i,j;
00178 i=j=0;
00179 detailed->setUpdatesEnabled(false);
00180 thumb->setUpdatesEnabled(false);
00181
00182 for ( ; dit.current(); ++dit ) {
00183 item = new ImageFileSelectorItem( detailed, **dit );
00184 if ( item->file().file() == oldFile )
00185 detailed->setCurrentItem( item );
00186 }
00187
00188 QListViewItemIterator it( detailed );
00189 ImageFileSelectorItem *ii;
00190
00191 for ( ; it.current(); ++it ) {
00192 ii=(ImageFileSelectorItem *)it.current();
00193 QImage img( ii->file().file() );
00194 if( !img.isNull()) {
00195 img=img.smoothScale(64,64);
00196 QPixmap pix;
00197 pix.convertFromImage(img);
00198 l=new ThumbWidget(pix,ii->file().name(),ii->file(),background,width);
00199 l->setBackgroundColor(colorGroup().base());
00200 gl->addWidget(l,j,i);
00201 i++;
00202 if ( i==2 ) {
00203 i=0;
00204 j++;
00205 }
00206 tList.append(l);
00207 connect(l,SIGNAL(clicked(const DocLnk&)),this,SLOT(thumbClicked(const DocLnk&)));
00208 }
00209 }
00210
00211 if ( !detailed->selectedItem() )
00212 detailed->setCurrentItem( detailed->firstChild() );
00213
00214 detailed->setUpdatesEnabled(true);
00215 thumb->setUpdatesEnabled(true);
00216 detailed->update();
00217 thumb->update();
00218 }
00219
00220 int ImageFileSelector::fileCount()
00221 {
00222 return count;
00223 }
00224 const DocLnk * ImageFileSelector::selected()
00225 {
00226 odebug << "image selected" << oendl;
00227 ImageFileSelectorItem *item = (ImageFileSelectorItem *) detailed->selectedItem();
00228 if ( item )
00229 return new DocLnk( item->file() );
00230 return 0;
00231 }
00232
00233
00234
00235 void ImageFileSelector::fileClicked( int button, QListViewItem *i, const QPoint &, int )
00236 {
00237 if ( !i )
00238 return;
00239 if ( button == Qt::LeftButton )
00240 {
00241 fileClicked( i );
00242 }
00243 }
00244
00245 void ImageFileSelector::filePressed( int, QListViewItem *, const QPoint &, int )
00246 {
00247
00248 }
00249 void ImageFileSelector::fileClicked( QListViewItem *i)
00250 {
00251 if ( !i )
00252 return;
00253 emit fileSelected( ( (ImageFileSelectorItem*)i )->file() );
00254 emit closeMe();
00255 }
00256
00257 void ImageFileSelector::thumbClicked(const DocLnk &f)
00258 {
00259 emit fileSelected( f );
00260 emit closeMe();
00261 }
00262