Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

ImageFileSelector.cpp

Go to the documentation of this file.
00001 #include "ImageFileSelector.h"
00002 
00003 /* OPIE */
00004 #include <opie2/odebug.h>
00005 #include <qpe/qpeapplication.h>
00006 using namespace Opie::Core;
00007 
00008 /* QT */
00009 #include <qlabel.h>   
00010 #include <qfileinfo.h>
00011 
00012 /* STD */
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 //    odebug << "reread" << oendl; 
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 //    int y=0;
00172 //    int x=4;
00173 //    int totalHeight=4;
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       // iterate through all items of the listview
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     // pressed to get 'right down'
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 

Generated on Sat Nov 5 16:18:17 2005 for OPIE by  doxygen 1.4.2