summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2002-05-14 22:02:16 (UTC)
committer llornkcor <llornkcor>2002-05-14 22:02:16 (UTC)
commite325f9cfb783010caa8618608a4d57884c0107c5 (patch) (unidiff)
tree92e5ad3d4df7e4da10c6a2f18a89bfa0887cd733
parent654f18b7201655379a515d12e30e06de4ae2e564 (diff)
downloadopie-e325f9cfb783010caa8618608a4d57884c0107c5.zip
opie-e325f9cfb783010caa8618608a4d57884c0107c5.tar.gz
opie-e325f9cfb783010caa8618608a4d57884c0107c5.tar.bz2
thumbnail for images for 'hash', also added secret config [View] ThumbSize = 72 for specifying thumbnail size, and added cleanup for tmp dir
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/unsupported/filebrowser/filebrowser.cpp171
-rw-r--r--noncore/unsupported/filebrowser/filebrowser.h33
2 files changed, 178 insertions, 26 deletions
diff --git a/noncore/unsupported/filebrowser/filebrowser.cpp b/noncore/unsupported/filebrowser/filebrowser.cpp
index 8c01655..10e50f0 100644
--- a/noncore/unsupported/filebrowser/filebrowser.cpp
+++ b/noncore/unsupported/filebrowser/filebrowser.cpp
@@ -19,4 +19,5 @@
19**********************************************************************/ 19**********************************************************************/
20 20
21
21#include "inlineedit.h" 22#include "inlineedit.h"
22#include "filebrowser.h" 23#include "filebrowser.h"
@@ -44,8 +45,10 @@
44#include <qfont.h> 45#include <qfont.h>
45#include <qpainter.h> 46#include <qpainter.h>
47#include <qprogressbar.h>
46 48
47#include <unistd.h> 49#include <unistd.h>
48#include <stdlib.h> 50#include <stdlib.h>
49#include <sys/stat.h> 51#include <sys/stat.h>
52#include <qpe/qpeapplication.h>
50 53
51// 54//
@@ -84,8 +87,11 @@ FileItem::FileItem( QListView * parent, const QFileInfo & fi )
84 else if( isLib() ) 87 else if( isLib() )
85 pm = Resource::loadPixmap( "library" ); 88 pm = Resource::loadPixmap( "library" );
86 else 89 else if( ((FileView* )parent)->getShowThumbnails() && mt.id().contains(QRegExp("^image/", FALSE, FALSE)) )
90 pm = drawThumbnail(fi);
91 else
87 pm = mt.pixmap(); 92 pm = mt.pixmap();
88 if ( pm.isNull() ) 93 if ( pm.isNull() )
89 pm = Resource::loadPixmap("UnknownDocument-14"); 94 pm = Resource::loadPixmap("UnknownDocument-14");
95
90 if( fi.isSymLink() ){ 96 if( fi.isSymLink() ){
91 // overlay link image 97 // overlay link image
@@ -173,4 +179,55 @@ bool FileItem::rename( const QString & name )
173} 179}
174 180
181QPixmap FileItem::drawThumbnail(const QFileInfo &file) {
182
183 /*
184 * this thing is sloooooow, and it also doesn't load
185 * dynamicly (like a web browser). if anyone knows how to
186 * do that, please do!
187 */
188 QString cacheDir = "/tmp/filebrowserThumbnailCache";
189 QFileInfo cachedFile (cacheDir + file.filePath());
190
191 if (cachedFile.exists() && cachedFile.lastModified() == file.lastModified()) {
192
193 QPixmap cachedImage (cachedFile.filePath());
194 return cachedImage;
195 }
196 else {
197
198 QImage image (file.filePath());
199
200 // if inside of cache dir, don't render thumbnails! recursive error!
201 if (image.isNull() || file.filePath().contains(QRegExp("^" + cacheDir))) {
202 DocLnk doc (file.filePath());
203 return doc.pixmap();
204 }
205 Config cfg("Filebrowser");
206 cfg.setGroup("View");
207 int size;
208 size =cfg.readNumEntry("ThumbSize", 72);
209 QPixmap thumb (size, size);
210
211 double scale = (double)image.height() / (double)image.width();
212 int newHeight = int(size * scale);
213 thumb.convertFromImage (image.smoothScale(size, newHeight));
214
215 if (!cachedFile.dir().exists()) {
216 QString cmd = "/bin/mkdir -p \"" + cachedFile.dirPath() +"\"";
217 system( (const char *) cmd );
218 }
219
220 if (thumb.save(cachedFile.filePath(), QPixmap::imageFormat(file.filePath()), 70)) {
221 // make thumbnail modify time the same as the image
222 QString cmd = "/bin/touch -r \"" + file.filePath() +"\" " +
223 "\"" + cachedFile.filePath() + "\"";
224 system( (const char *) cmd );
225
226 }
227
228 return thumb;
229 }
230}
231
175// 232//
176// FileView 233// FileView
@@ -178,5 +235,5 @@ bool FileItem::rename( const QString & name )
178FileView::FileView( const QString & dir, QWidget * parent, 235FileView::FileView( const QString & dir, QWidget * parent,
179 const char * name, 236 const char * name,
180 bool hidden, bool symlinks ) 237 bool hidden, bool symlinks, bool thumbnails )
181 : QListView( parent, name ), 238 : QListView( parent, name ),
182 menuTimer( this ), 239 menuTimer( this ),
@@ -184,5 +241,6 @@ FileView::FileView( const QString & dir, QWidget * parent,
184 itemToRename( NULL ), 241 itemToRename( NULL ),
185 showHidden( hidden ), 242 showHidden( hidden ),
186 showSymlinks( symlinks), 243 showSymlinks( symlinks ),
244 showThumbnails( thumbnails ),
187 menuKeepsOpen( FALSE ) 245 menuKeepsOpen( FALSE )
188{ 246{
@@ -254,23 +312,43 @@ void FileView::generateDir( const QString & dir )
254 d.setSorting( QDir::Name | QDir::DirsFirst | QDir::IgnoreCase | QDir::Reversed ); 312 d.setSorting( QDir::Name | QDir::DirsFirst | QDir::IgnoreCase | QDir::Reversed );
255 313
256
257 const QFileInfoList * list = d.entryInfoList(); 314 const QFileInfoList * list = d.entryInfoList();
258 QFileInfoListIterator it( *list ); 315 QFileInfoListIterator it( *list );
259 QFileInfo *fi; 316 QFileInfo *fi;
260 317
318 QProgressBar *thumbProgress = 0;
319 if (showThumbnails) {
320
321 thumbProgress = new QProgressBar(it.count(), this);
322 thumbProgress->show();
323 }
324
261 clear(); 325 clear();
262 while( (fi = it.current()) ){ 326
263 if( (fi->fileName() == ".") || (fi->fileName() == "..") ){ 327 int fileCount = 1; // used in the thumbnail progress meter
328 while( (fi = it.current()) ){
329 if( (fi->fileName() == ".") || (fi->fileName() == "..") ){
330 ++it;
331 continue;
332 }
333 if(!showSymlinks && fi->isSymLink()){
264 ++it; 334 ++it;
265 continue; 335 continue;
266 } 336 }
267 if(!showSymlinks && fi->isSymLink()){ 337 // thumbnail progress
338 if (showThumbnails) {
339
340 thumbProgress->setProgress(fileCount);
341 }
342 (void) new FileItem( (QListView *) this, *fi );
343
268 ++it; 344 ++it;
269 continue; 345 ++fileCount;
346 }
347
348 if (showThumbnails) {
349 thumbProgress->close();
270 } 350 }
271 (void) new FileItem( (QListView *) this, *fi );
272 ++it;
273 }
274 emit dirChanged(); 351 emit dirChanged();
352
275} 353}
276 354
@@ -464,4 +542,23 @@ void FileView::cut()
464 flist.clear(); 542 flist.clear();
465 while( item ){ 543 while( item ){
544 if( ite
545 // ##### a better inmplementation might be to rename the CUT file
546 // ##### to ".QPE-FILEBROWSER-MOVING" rather than copying it.
547 QString cmd, dest, basename, cd = "/tmp/qpemoving";
548 QStringList newflist;
549 newflist.clear();
550
551 cmd = "rm -rf " + cd;
552 system ( (const char *) cmd );
553 cmd = "mkdir " + cd;
554 system( (const char *) cmd );
555
556// get the names of the files to cut
557 FileItem * item;
558
559 if((item = (FileItem *) firstChild()) == 0) return;
560
561 flist.clear();
562 while( item ){
466 if( item->isSelected() /*&& !item->isDir()*/ ){ 563 if( item->isSelected() /*&& !item->isDir()*/ ){
467 flist += item->getFilePath(); 564 flist += item->getFilePath();
@@ -714,4 +811,9 @@ void FileView::setShowSymlinks(bool symlinks)
714} 811}
715 812
813void FileView::setShowThumbnails(bool thumbnails)
814{
815 showThumbnails=thumbnails;
816}
817
716void FileView::setMenuKeepsOpen(bool keepOpen) 818void FileView::setMenuKeepsOpen(bool keepOpen)
717{ 819{
@@ -737,4 +839,6 @@ void FileBrowser::init(const QString & dir)
737 setCaption( tr("File Manager") ); 839 setCaption( tr("File Manager") );
738 setIcon( Resource::loadPixmap( "filebrowser_icon" ) ); 840 setIcon( Resource::loadPixmap( "filebrowser_icon" ) );
841 connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) );
842
739 843
740 Config cfg("Filebrowser"); 844 Config cfg("Filebrowser");
@@ -742,4 +846,5 @@ void FileBrowser::init(const QString & dir)
742 bool showHidden=(cfg.readEntry("Hidden","FALSE") == "TRUE"); 846 bool showHidden=(cfg.readEntry("Hidden","FALSE") == "TRUE");
743 bool showSymlinks=(cfg.readEntry("Symlinks","FALSE") == "TRUE"); 847 bool showSymlinks=(cfg.readEntry("Symlinks","FALSE") == "TRUE");
848 bool showThumbnails=(cfg.readEntry("Thumbnails","FALSE") == "TRUE");
744 849
745 cfg.setGroup("Menu"); 850 cfg.setGroup("Menu");
@@ -747,5 +852,5 @@ void FileBrowser::init(const QString & dir)
747 852
748 853
749 fileView = new FileView( dir, this, 0, showHidden, showSymlinks ); 854 fileView = new FileView( dir, this, 0, showHidden, showSymlinks, showThumbnails );
750 fileView->setAllColumnsShowFocus( TRUE ); 855 fileView->setAllColumnsShowFocus( TRUE );
751 fileView->setMenuKeepsOpen(menuKeepsOpen); 856 fileView->setMenuKeepsOpen(menuKeepsOpen);
@@ -777,6 +882,8 @@ void FileBrowser::init(const QString & dir)
777 viewMenu->insertItem( tr( "Hidden"), this, SLOT( updateShowHidden() ) ); 882 viewMenu->insertItem( tr( "Hidden"), this, SLOT( updateShowHidden() ) );
778 viewMenu->insertItem( tr( "Symlinks"), this, SLOT( updateShowSymlinks() ) ); 883 viewMenu->insertItem( tr( "Symlinks"), this, SLOT( updateShowSymlinks() ) );
884 viewMenu->insertItem( tr( "Thumbnails"), this, SLOT( updateShowThumbnails() ) );
779 viewMenu->setItemChecked( viewMenu->idAt( 0 ), showHidden ); 885 viewMenu->setItemChecked( viewMenu->idAt( 0 ), showHidden );
780 viewMenu->setItemChecked( viewMenu->idAt( 1 ), showSymlinks ); 886 viewMenu->setItemChecked( viewMenu->idAt( 1 ), showSymlinks );
887 viewMenu->setItemChecked( viewMenu->idAt( 2 ), showThumbnails );
781 888
782 menuBar->insertItem( tr("View"), viewMenu ); 889 menuBar->insertItem( tr("View"), viewMenu );
@@ -931,5 +1038,4 @@ void FileView::chPerm() {
931 QStringList fl; 1038 QStringList fl;
932 QString cmd; 1039 QString cmd;
933 int err;
934 1040
935 if((i = (FileItem *) firstChild()) == 0) return; 1041 if((i = (FileItem *) firstChild()) == 0) return;
@@ -983,2 +1089,41 @@ void FileBrowser::updateShowSymlinks()
983 fileView->updateDir(); 1089 fileView->updateDir();
984} 1090}
1091
1092void FileBrowser::updateShowThumbnails()
1093{
1094 bool valShowThumbnails=viewMenu->isItemChecked( viewMenu->idAt( 2 ) );
1095 valShowThumbnails=!valShowThumbnails;
1096 viewMenu->setItemChecked( viewMenu->idAt( 2 ), valShowThumbnails );
1097 fileView->setShowThumbnails(valShowThumbnails);
1098
1099 Config cfg("Filebrowser");
1100 cfg.setGroup("View");
1101 cfg.writeEntry("Thumbnails",valShowThumbnails?"TRUE":"FALSE");
1102
1103 fileView->updateDir();
1104}
1105
1106void FileBrowser::cleanUp() {
1107 QString cmdr = "rm -rf /tmp/filebrowserThumbnailCache";
1108// qDebug("exit");
1109 system(cmdr.latin1());
1110}
1111
1112{
1113 bool valShowThumbnails=viewMenu->isItemChecked( viewMenu->idAt( 2 ) );
1114 valShowThumbnails=!valShowThumbnails;
1115 viewMenu->setItemChecked( viewMenu->idAt( 2 ), valShowThumbnails );
1116 fileView->setShowThumbnails(valShowThumbnails);
1117
1118 Config cfg("Filebrowser");
1119 cfg.setGroup("View");
1120 cfg.writeEntry("Thumbnails",valShowThumbnails?"TRUE":"FALSE");
1121
1122 fileView->updateDir();
1123}
1124
1125void FileBrowser::cleanUp() {
1126 QString cmdr = "rm -rf /tmp/filebrowserThumbnailCache";
1127// qDebug("exit");
1128 system(cmdr.latin1());
1129}
diff --git a/noncore/unsupported/filebrowser/filebrowser.h b/noncore/unsupported/filebrowser/filebrowser.h
index 983e58e..549d463 100644
--- a/noncore/unsupported/filebrowser/filebrowser.h
+++ b/noncore/unsupported/filebrowser/filebrowser.h
@@ -46,4 +46,5 @@ private:
46 QString sizeString( unsigned int size ); 46 QString sizeString( unsigned int size );
47 QFileInfo fileInfo; 47 QFileInfo fileInfo;
48 QPixmap FileItem::drawThumbnail(const QFileInfo &file);
48}; 49};
49 50
@@ -55,7 +56,8 @@ class FileView : public QListView
55public: 56public:
56 FileView( const QString & dir, QWidget * parent = 0, 57 FileView( const QString & dir, QWidget * parent = 0,
57 const char * name = 0, 58 const char * name = 0,
58 bool hidden = FALSE, 59 bool hidden = FALSE,
59 bool symlinks = FALSE ); 60 bool symlinks = FALSE,
61 bool thumbnails = FALSE );
60 62
61 void setDir( const QString & dir ); 63 void setDir( const QString & dir );
@@ -64,8 +66,10 @@ public:
64 bool showingHidden; 66 bool showingHidden;
65 67
66 void setShowHidden(bool hidden); 68 void setShowHidden(bool hidden);
67 void setShowSymlinks(bool symlinks); 69 void setShowSymlinks(bool symlinks);
68 void setMenuKeepsOpen(bool keepOpen); 70 void setShowThumbnails(bool thumbnails);
69 71 bool getShowThumbnails () const { return showThumbnails; }
72 void setMenuKeepsOpen(bool keepOpen);
73
70public slots: 74public slots:
71 void updateDir(); 75 void updateDir();
@@ -97,5 +101,4 @@ protected slots:
97 void run(); 101 void run();
98 void endRenaming(); 102 void endRenaming();
99
100private: 103private:
101 QString currentDir; 104 QString currentDir;
@@ -105,7 +108,8 @@ private:
105 FileItem * itemToRename; 108 FileItem * itemToRename;
106 bool selected; 109 bool selected;
107 bool showHidden; 110 bool showHidden;
108 bool showSymlinks; 111 bool showSymlinks;
109 bool menuKeepsOpen; 112 bool showThumbnails;
113 bool menuKeepsOpen;
110 114
111 bool copyFile( const QString & dest, const QString & src ); 115 bool copyFile( const QString & dest, const QString & src );
@@ -147,8 +151,11 @@ private slots:
147 void sortType(); 151 void sortType();
148 void updateSorting(); 152 void updateSorting();
149 void updateShowHidden(); 153 void updateShowHidden();
150 void updateShowSymlinks(); 154 void updateShowSymlinks();
155 void updateShowThumbnails();
151 void updateDirMenu(); 156 void updateDirMenu();
152 void dirSelected( int id ); 157 void dirSelected( int id );
158 void cleanUp();
159
153}; 160};
154 161