summaryrefslogtreecommitdiff
path: root/noncore/unsupported/filebrowser
authorllornkcor <llornkcor>2002-05-14 22:02:16 (UTC)
committer llornkcor <llornkcor>2002-05-14 22:02:16 (UTC)
commite325f9cfb783010caa8618608a4d57884c0107c5 (patch) (unidiff)
tree92e5ad3d4df7e4da10c6a2f18a89bfa0887cd733 /noncore/unsupported/filebrowser
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 (limited to 'noncore/unsupported/filebrowser') (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
@@ -18,6 +18,7 @@
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21
21#include "inlineedit.h" 22#include "inlineedit.h"
22#include "filebrowser.h" 23#include "filebrowser.h"
23#include "filePermissions.h" 24#include "filePermissions.h"
@@ -43,10 +44,12 @@
43#include <qmultilineedit.h> 44#include <qmultilineedit.h>
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//
52// FileItem 55// FileItem
@@ -83,10 +86,13 @@ FileItem::FileItem( QListView * parent, const QFileInfo & fi )
83 pm = Resource::loadPixmap( "locked" ); 86 pm = Resource::loadPixmap( "locked" );
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
92 QPixmap lnk = Resource::loadPixmap( "filebrowser/symlink" ); 98 QPixmap lnk = Resource::loadPixmap( "filebrowser/symlink" );
@@ -172,18 +178,70 @@ bool FileItem::rename( const QString & name )
172 return TRUE; 178 return TRUE;
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
177// 234//
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 ),
183 le( NULL ), 240 le( NULL ),
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{
189 addColumn( "Name" ); 247 addColumn( "Name" );
@@ -253,25 +311,45 @@ void FileView::generateDir( const QString & dir )
253 311
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
277void FileView::rename() 355void FileView::rename()
@@ -463,6 +541,25 @@ void FileView::cut()
463 541
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();
468 } 565 }
@@ -713,6 +810,11 @@ void FileView::setShowSymlinks(bool symlinks)
713 showSymlinks=symlinks; 810 showSymlinks=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{
718 menuKeepsOpen=keepOpen; 820 menuKeepsOpen=keepOpen;
@@ -736,17 +838,20 @@ void FileBrowser::init(const QString & dir)
736{ 838{
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");
741 cfg.setGroup("View"); 845 cfg.setGroup("View");
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");
746 bool menuKeepsOpen=(cfg.readEntry("KeepOpen", "FALSE") == "TRUE"); 851 bool menuKeepsOpen=(cfg.readEntry("KeepOpen", "FALSE") == "TRUE");
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);
752 857
@@ -776,8 +881,10 @@ void FileBrowser::init(const QString & dir)
776 viewMenu = new QPopupMenu( this); 881 viewMenu = new QPopupMenu( this);
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 );
783 890
@@ -930,7 +1037,6 @@ void FileView::chPerm() {
930 FileItem * i; 1037 FileItem * i;
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;
936 1042
@@ -982,3 +1088,42 @@ void FileBrowser::updateShowSymlinks()
982 1088
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
@@ -45,6 +45,7 @@ public:
45private: 45private:
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
50 51
@@ -54,19 +55,22 @@ class FileView : public QListView
54 55
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 );
62 QString cd(){ return currentDir; } 64 QString cd(){ return currentDir; }
63 QStringList history() const { return dirHistory; } 65 QStringList history() const { return dirHistory; }
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();
72 void parentDir(); 76 void parentDir();
@@ -96,7 +100,6 @@ protected slots:
96 void addToDocuments(); 100 void addToDocuments();
97 void run(); 101 void run();
98 void endRenaming(); 102 void endRenaming();
99
100private: 103private:
101 QString currentDir; 104 QString currentDir;
102 QStringList dirHistory, flist; 105 QStringList dirHistory, flist;
@@ -104,9 +107,10 @@ private:
104 InlineEdit * le; 107 InlineEdit * le;
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 );
112 116
@@ -146,10 +150,13 @@ private slots:
146 void sortSize(); 150 void sortSize();
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
155#endif 162#endif