-rw-r--r-- | libopie/TODO | 4 | ||||
-rw-r--r-- | libopie/ofileselector.cc | 187 | ||||
-rw-r--r-- | libopie/ofileselector.h | 9 |
3 files changed, 183 insertions, 17 deletions
diff --git a/libopie/TODO b/libopie/TODO index c1bf6d1..a4e1ada 100644 --- a/libopie/TODO +++ b/libopie/TODO | |||
@@ -6,12 +6,14 @@ | |||
6 | - Attendees | 6 | - Attendees |
7 | 7 | ||
8 | - OFileSelector | 8 | - OFileSelector |
9 | - DocLnk when not in Document Mode | 9 | - DocLnk when not in Document Mode ( and vice versa ) |
10 | - MultipleDocuments | ||
10 | - TreeView have a own OFileSelectorItem for this | 11 | - TreeView have a own OFileSelectorItem for this |
11 | - IconView add a QIconView to the widgetstack | 12 | - IconView add a QIconView to the widgetstack |
12 | - Move OFileSelectorItem to it's own files | 13 | - Move OFileSelectorItem to it's own files |
13 | - add functions to access the member variables | 14 | - add functions to access the member variables |
14 | - debug | 15 | - debug |
16 | - new Dirs created inside the listview | ||
15 | 17 | ||
16 | - Clickable labels? | 18 | - Clickable labels? |
17 | Harlekin you wanted them in the libs? \ No newline at end of file | 19 | Harlekin you wanted them in the libs? \ No newline at end of file |
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc index b583125..14f035e 100644 --- a/libopie/ofileselector.cc +++ b/libopie/ofileselector.cc | |||
@@ -49,6 +49,7 @@ | |||
49 | #include <qpe/global.h> | 49 | #include <qpe/global.h> |
50 | #include <qpe/mimetype.h> | 50 | #include <qpe/mimetype.h> |
51 | #include <qpe/resource.h> | 51 | #include <qpe/resource.h> |
52 | #include <qpe/storage.h> | ||
52 | 53 | ||
53 | #include <unistd.h> | 54 | #include <unistd.h> |
54 | #include <stdlib.h> | 55 | #include <stdlib.h> |
@@ -116,9 +117,13 @@ OFileSelector::OFileSelector(QWidget *wid, int mode, int selector, const QString | |||
116 | m_mimeCheck = 0; | 117 | m_mimeCheck = 0; |
117 | m_viewCheck = 0; | 118 | m_viewCheck = 0; |
118 | 119 | ||
120 | m_pseudo = 0; | ||
121 | m_pseudoLayout = 0; | ||
122 | |||
119 | m_dir = true; | 123 | m_dir = true; |
120 | m_files = true; | 124 | m_files = true; |
121 | m_custom = 0; | 125 | m_custom = 0; |
126 | m_showPopup = true; | ||
122 | 127 | ||
123 | if(m_pixmaps == 0 ) // init the pixmaps | 128 | if(m_pixmaps == 0 ) // init the pixmaps |
124 | initPics(); | 129 | initPics(); |
@@ -229,11 +234,19 @@ void OFileSelector::setToolbarVisible( bool show ) | |||
229 | { | 234 | { |
230 | if ( m_shTool == show ) | 235 | if ( m_shTool == show ) |
231 | return; | 236 | return; |
232 | /* if( show ){ | 237 | if(!m_shTool ){ |
233 | 238 | delete m_boxToolbar; | |
234 | }else { | 239 | delete m_homeButton; |
235 | 240 | delete m_docButton; | |
236 | }*/ | 241 | delete m_location; |
242 | delete m_up; | ||
243 | m_boxToolbar = 0; | ||
244 | m_homeButton = 0; | ||
245 | m_docButton = 0; | ||
246 | m_location = 0; | ||
247 | m_up = 0; | ||
248 | }; | ||
249 | updateLay();// overkill fix it | ||
237 | } | 250 | } |
238 | 251 | ||
239 | void OFileSelector::setPermissionBarVisible( bool show ) | 252 | void OFileSelector::setPermissionBarVisible( bool show ) |
@@ -418,7 +431,25 @@ void OFileSelector::reparse() | |||
418 | }; | 431 | }; |
419 | QDir dir( m_currentDir ); | 432 | QDir dir( m_currentDir ); |
420 | //dir.setFilter(-1 ); | 433 | //dir.setFilter(-1 ); |
421 | dir.setSorting(QDir::Name | QDir::DirsFirst | QDir::Reversed | QDir::IgnoreCase ); | 434 | int sort = QDir::Name | QDir::DirsFirst | QDir::Reversed; |
435 | if( m_case ) | ||
436 | sort = QDir::IgnoreCase; | ||
437 | dir.setSorting( sort ); | ||
438 | |||
439 | int filter; | ||
440 | /* if( m_dir && !m_files) | ||
441 | filter |= QDir::Dirs; | ||
442 | else if( !m_dir && m_files ) | ||
443 | filter |= QDir::Files; | ||
444 | else | ||
445 | filter |= QDir::All; | ||
446 | */ | ||
447 | if( m_selector == EXTENDED_ALL ) | ||
448 | filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All; | ||
449 | else | ||
450 | filter = QDir::Files | QDir::Dirs | QDir::All; | ||
451 | dir.setFilter( filter ); | ||
452 | |||
422 | const QFileInfoList *list = dir.entryInfoList(); | 453 | const QFileInfoList *list = dir.entryInfoList(); |
423 | QFileInfoListIterator it( *list ); | 454 | QFileInfoListIterator it( *list ); |
424 | QFileInfo *fi; | 455 | QFileInfo *fi; |
@@ -554,9 +585,25 @@ void OFileSelector::slotViewCheck(const QString &view ){ | |||
554 | if( view == QString::fromLatin1("Documents") ){ | 585 | if( view == QString::fromLatin1("Documents") ){ |
555 | // get the mimetype now | 586 | // get the mimetype now |
556 | // check if we're the current widget and return | 587 | // check if we're the current widget and return |
557 | if( m_View != 0) // delete 0 shouldn't crash but it did :( | 588 | if( m_View != 0) { // delete 0 shouldn't crash but it did :( |
558 | delete m_View; | 589 | delete m_View; |
590 | delete m_boxToolbar; | ||
591 | delete m_homeButton; | ||
592 | delete m_docButton; | ||
593 | delete m_location; | ||
594 | delete m_up; | ||
595 | delete m_pseudo; | ||
596 | delete m_pseudoLayout; | ||
597 | } | ||
559 | m_View = 0; | 598 | m_View = 0; |
599 | m_boxToolbar = 0; | ||
600 | m_homeButton = 0; | ||
601 | m_docButton = 0; | ||
602 | m_location = 0; | ||
603 | m_up = 0; | ||
604 | m_pseudo = 0; | ||
605 | m_pseudoLayout = 0; | ||
606 | |||
560 | delete m_select; | 607 | delete m_select; |
561 | m_select = new FileSelector( currMime == "All" ? QString::null : currMime, | 608 | m_select = new FileSelector( currMime == "All" ? QString::null : currMime, |
562 | m_stack,"fileselector", FALSE, FALSE ); | 609 | m_stack,"fileselector", FALSE, FALSE ); |
@@ -574,6 +621,22 @@ void OFileSelector::slotViewCheck(const QString &view ){ | |||
574 | m_select = 0; | 621 | m_select = 0; |
575 | delete m_View; | 622 | delete m_View; |
576 | m_View = 0; | 623 | m_View = 0; |
624 | |||
625 | delete m_boxToolbar; | ||
626 | delete m_homeButton; | ||
627 | delete m_docButton; | ||
628 | delete m_location; | ||
629 | delete m_up; | ||
630 | delete m_pseudo; | ||
631 | delete m_pseudoLayout; | ||
632 | m_boxToolbar = 0; | ||
633 | m_homeButton = 0; | ||
634 | m_docButton = 0; | ||
635 | m_location = 0; | ||
636 | m_up = 0; | ||
637 | m_pseudo = 0; | ||
638 | m_pseudoLayout = 0; | ||
639 | |||
577 | m_selector = EXTENDED; | 640 | m_selector = EXTENDED; |
578 | // create the ListView or IconView | 641 | // create the ListView or IconView |
579 | initializeListView(); | 642 | initializeListView(); |
@@ -585,6 +648,21 @@ void OFileSelector::slotViewCheck(const QString &view ){ | |||
585 | m_select = 0; | 648 | m_select = 0; |
586 | delete m_View; | 649 | delete m_View; |
587 | m_View = 0; | 650 | m_View = 0; |
651 | delete m_boxToolbar; | ||
652 | delete m_homeButton; | ||
653 | delete m_docButton; | ||
654 | delete m_location; | ||
655 | delete m_up; | ||
656 | delete m_pseudo; | ||
657 | delete m_pseudoLayout; | ||
658 | m_boxToolbar = 0; | ||
659 | m_homeButton = 0; | ||
660 | m_docButton = 0; | ||
661 | m_location = 0; | ||
662 | m_up = 0; | ||
663 | m_pseudo = 0; | ||
664 | m_pseudoLayout = 0; | ||
665 | |||
588 | m_selector = EXTENDED_ALL; | 666 | m_selector = EXTENDED_ALL; |
589 | initializeListView(); | 667 | initializeListView(); |
590 | reparse(); | 668 | reparse(); |
@@ -611,10 +689,69 @@ void OFileSelector::updateMimes() // lets check which mode is active | |||
611 | } | 689 | } |
612 | }; | 690 | }; |
613 | void OFileSelector::initializeListView() | 691 | void OFileSelector::initializeListView() |
614 | { | 692 | { |
615 | m_View = new QListView(m_stack, "Extended view" ); | 693 | // just to make sure but clean it up better FIXME |
616 | m_stack->addWidget( m_View, EXTENDED ); | 694 | delete m_View; |
695 | m_View = 0; | ||
696 | delete m_boxToolbar; | ||
697 | delete m_homeButton; | ||
698 | delete m_docButton; | ||
699 | delete m_location; | ||
700 | delete m_up; | ||
701 | delete m_pseudo; | ||
702 | delete m_pseudoLayout; | ||
703 | m_boxToolbar = 0; | ||
704 | m_homeButton = 0; | ||
705 | m_docButton = 0; | ||
706 | m_location = 0; | ||
707 | m_up = 0; | ||
708 | m_pseudo = 0; | ||
709 | m_pseudoLayout = 0; | ||
710 | // time for the toolbar | ||
711 | m_pseudo = new QWidget(m_stack, "Pseudo Widget"); | ||
712 | m_pseudoLayout = new QVBoxLayout(m_pseudo ); | ||
713 | if(m_shTool ){ | ||
714 | m_boxToolbar = new QHBoxLayout( ); | ||
715 | m_boxToolbar->setAutoAdd( true ); | ||
716 | m_location = new QComboBox(m_pseudo ); | ||
717 | |||
718 | m_up = new QPushButton(Resource::loadIconSet("up"),"", m_pseudo,"cdUpButton"); | ||
719 | m_up->setMinimumSize( QSize( 20, 20 ) ); | ||
720 | m_up->setMaximumSize( QSize( 20, 20 ) ); | ||
721 | connect(m_up ,SIGNAL(clicked()),this,SLOT(cdUP() ) ); | ||
722 | m_up->setFlat(TRUE); | ||
723 | |||
724 | m_homeButton = new QPushButton(Resource::loadIconSet("home") , "", m_pseudo); | ||
725 | m_homeButton->setMinimumSize( QSize( 20, 20 ) ); | ||
726 | m_homeButton->setMaximumSize( QSize( 20, 20 ) ); | ||
727 | connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotHome() ) ); | ||
728 | m_homeButton->setFlat(TRUE); | ||
729 | |||
730 | m_docButton = new QPushButton(Resource::loadIconSet("DocsIcon"),"", m_pseudo,"docsButton"); | ||
731 | m_docButton->setMinimumSize( QSize( 20, 20 ) ); | ||
732 | m_docButton->setMaximumSize( QSize( 20, 20 ) ); | ||
733 | connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotDoc() ) ); | ||
734 | m_docButton->setFlat(TRUE); | ||
735 | |||
736 | m_boxToolbar->addWidget(m_location ); | ||
737 | m_boxToolbar->addWidget(m_up ); | ||
738 | m_boxToolbar->addWidget(m_homeButton ); | ||
739 | m_boxToolbar->addWidget(m_docButton ); | ||
740 | m_pseudoLayout->addLayout(m_boxToolbar ); | ||
741 | // lets fill the combobox | ||
742 | StorageInfo storage; | ||
743 | const QList<FileSystem> &fs = storage.fileSystems(); | ||
744 | QListIterator<FileSystem> it ( fs ); | ||
745 | for( ; it.current(); ++it ){ | ||
746 | const QString disk = (*it)->name(); | ||
747 | const QString path = (*it)->path(); | ||
748 | m_location->insertItem(path+ "<-"+disk ); | ||
749 | } | ||
750 | }; | ||
751 | m_View = new QListView(m_pseudo, "Extended view" ); | ||
752 | m_stack->addWidget( m_pseudo, EXTENDED ); | ||
617 | m_stack->raiseWidget( EXTENDED ); | 753 | m_stack->raiseWidget( EXTENDED ); |
754 | m_pseudoLayout->addWidget(m_View ); | ||
618 | QPEApplication::setStylusOperation( m_View->viewport(),QPEApplication::RightOnHold); | 755 | QPEApplication::setStylusOperation( m_View->viewport(),QPEApplication::RightOnHold); |
619 | // set up the stuff | 756 | // set up the stuff |
620 | // Pixmap Name Date Size mime | 757 | // Pixmap Name Date Size mime |
@@ -635,6 +772,8 @@ void OFileSelector::initializeListView() | |||
635 | this, SLOT(slotClicked( int, QListViewItem *, const QPoint &, int) ) ); | 772 | this, SLOT(slotClicked( int, QListViewItem *, const QPoint &, int) ) ); |
636 | connect(m_View, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )), | 773 | connect(m_View, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )), |
637 | this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) ); | 774 | this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) ); |
775 | |||
776 | |||
638 | }; | 777 | }; |
639 | /* If a item is locked depends on the mode | 778 | /* If a item is locked depends on the mode |
640 | if we're in OPEN !isReadable is locked | 779 | if we're in OPEN !isReadable is locked |
@@ -797,6 +936,9 @@ void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint & | |||
797 | } | 936 | } |
798 | void OFileSelector::slotRightButton(int button, QListViewItem *item, const QPoint &, int ) | 937 | void OFileSelector::slotRightButton(int button, QListViewItem *item, const QPoint &, int ) |
799 | { | 938 | { |
939 | if (item == 0 ) | ||
940 | return; | ||
941 | |||
800 | if( button != Qt::RightButton ) | 942 | if( button != Qt::RightButton ) |
801 | return; | 943 | return; |
802 | qWarning("right button" ); | 944 | qWarning("right button" ); |
@@ -805,10 +947,19 @@ void OFileSelector::slotRightButton(int button, QListViewItem *item, const QPoin | |||
805 | void OFileSelector::slotContextMenu(QListViewItem *item) | 947 | void OFileSelector::slotContextMenu(QListViewItem *item) |
806 | { | 948 | { |
807 | qWarning("context menu" ); | 949 | qWarning("context menu" ); |
950 | if( item ==0 || !m_showPopup ) | ||
951 | return; | ||
952 | |||
808 | if( m_custom !=0){ | 953 | if( m_custom !=0){ |
809 | m_custom->exec(); | 954 | m_custom->exec(); |
810 | }else{ | 955 | }else{ |
811 | QPopupMenu menu; | 956 | QPopupMenu menu; |
957 | QAction up; | ||
958 | up.setText("cd up"); | ||
959 | up.addTo( &menu ); | ||
960 | connect(&up, SIGNAL(activated() ), | ||
961 | this, SLOT(cdUP() ) ); | ||
962 | |||
812 | QAction act; | 963 | QAction act; |
813 | OFileSelectorItem *sel = (OFileSelectorItem*)item; | 964 | OFileSelectorItem *sel = (OFileSelectorItem*)item; |
814 | if(sel->isDir() ){ | 965 | if(sel->isDir() ){ |
@@ -825,20 +976,20 @@ void OFileSelector::slotContextMenu(QListViewItem *item) | |||
825 | QAction rescan; | 976 | QAction rescan; |
826 | rescan.setText( tr("Rescan") ); | 977 | rescan.setText( tr("Rescan") ); |
827 | rescan.addTo( &menu ); | 978 | rescan.addTo( &menu ); |
828 | connect(&act, SIGNAL(activated() ), | 979 | connect(&rescan, SIGNAL(activated() ), |
829 | this, SLOT(slotRescan() ) ); | 980 | this, SLOT(slotRescan() ) ); |
830 | 981 | ||
831 | QAction rename; | 982 | QAction rename; |
832 | rename.setText( tr("Rename") ); | 983 | rename.setText( tr("Rename") ); |
833 | rename.addTo( &menu ); | 984 | rename.addTo( &menu ); |
834 | connect(&act, SIGNAL(activated() ), | 985 | connect(&rename, SIGNAL(activated() ), |
835 | this, SLOT(slotRename() ) ); | 986 | this, SLOT(slotRename() ) ); |
836 | 987 | ||
837 | menu.insertSeparator(); | 988 | menu.insertSeparator(); |
838 | QAction delItem; | 989 | QAction delItem; |
839 | delItem.setText( tr("Delete") ); | 990 | delItem.setText( tr("Delete") ); |
840 | delItem.addTo(&menu ); | 991 | delItem.addTo(&menu ); |
841 | connect(&act, SIGNAL(activated() ), | 992 | connect(&delItem, SIGNAL(activated() ), |
842 | this, SLOT(slotDelete() ) ); | 993 | this, SLOT(slotDelete() ) ); |
843 | 994 | ||
844 | menu.exec(QCursor::pos() ); | 995 | menu.exec(QCursor::pos() ); |
@@ -895,6 +1046,14 @@ void OFileSelector::slotDelete() | |||
895 | delete sel; | 1046 | delete sel; |
896 | } | 1047 | } |
897 | 1048 | ||
898 | 1049 | void OFileSelector::cdUP() | |
1050 | { | ||
1051 | QDir dir( m_currentDir ); | ||
1052 | dir.cdUp(); | ||
1053 | if(dir.exists() ){ | ||
1054 | m_currentDir = dir.absPath(); | ||
1055 | reparse(); | ||
1056 | } | ||
1057 | } | ||
899 | 1058 | ||
900 | 1059 | ||
diff --git a/libopie/ofileselector.h b/libopie/ofileselector.h index 458e552..b91c0ea 100644 --- a/libopie/ofileselector.h +++ b/libopie/ofileselector.h | |||
@@ -155,7 +155,8 @@ class OFileSelector : public QWidget { | |||
155 | int selector()const { return m_selector; }; | 155 | int selector()const { return m_selector; }; |
156 | void setSelector( int ); | 156 | void setSelector( int ); |
157 | 157 | ||
158 | 158 | bool showPopup()const { return m_showPopup; }; | |
159 | void setShowPopup( bool pop ) { m_showPopup = pop; }; | ||
159 | void setPopupMenu( QPopupMenu * ); | 160 | void setPopupMenu( QPopupMenu * ); |
160 | 161 | ||
161 | void updateLay(); | 162 | void updateLay(); |
@@ -195,12 +196,14 @@ class OFileSelector : public QWidget { | |||
195 | protected: | 196 | protected: |
196 | 197 | ||
197 | private: | 198 | private: |
198 | int m_mode, m_selector; | 199 | int m_mode, m_selector; |
199 | QComboBox *m_location, *m_mimeCheck, *m_viewCheck; | 200 | QComboBox *m_location, *m_mimeCheck, *m_viewCheck; |
200 | QPushButton *m_homeButton, *m_docButton, *m_hideButton, *m_ok, *m_cancel; | 201 | QPushButton *m_homeButton, *m_docButton, *m_hideButton, *m_ok, *m_cancel; |
201 | QPushButton *m_reread, *m_up; | 202 | QPushButton *m_reread, *m_up; |
202 | QListView *m_View; | 203 | QListView *m_View; |
203 | QCheckBox *m_checkPerm; | 204 | QCheckBox *m_checkPerm; |
205 | QWidget *m_pseudo; | ||
206 | QVBoxLayout *m_pseudoLayout; | ||
204 | 207 | ||
205 | QString m_currentDir; | 208 | QString m_currentDir; |
206 | QString m_name; | 209 | QString m_name; |
@@ -230,6 +233,7 @@ int m_mode, m_selector; | |||
230 | bool m_case:1; | 233 | bool m_case:1; |
231 | bool m_dir:1; | 234 | bool m_dir:1; |
232 | bool m_files:1; | 235 | bool m_files:1; |
236 | bool m_showPopup:1; | ||
233 | 237 | ||
234 | // implementation todo | 238 | // implementation todo |
235 | virtual void addFile(const QString &mime, QFileInfo *info, bool symlink = FALSE ); | 239 | virtual void addFile(const QString &mime, QFileInfo *info, bool symlink = FALSE ); |
@@ -262,6 +266,7 @@ private slots: | |||
262 | virtual void slotRescan(); | 266 | virtual void slotRescan(); |
263 | virtual void slotRename(); | 267 | virtual void slotRename(); |
264 | virtual void slotDelete(); | 268 | virtual void slotDelete(); |
269 | virtual void cdUP(); | ||
265 | 270 | ||
266 | }; | 271 | }; |
267 | 272 | ||