author | zecke <zecke> | 2002-04-01 01:48:02 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-04-01 01:48:02 (UTC) |
commit | 9a68bd2411e65eb6c51aead50a5b0b670174458d (patch) (side-by-side diff) | |
tree | 05ab085d430edc2e821ea890da600774abc30f01 | |
parent | 84850cd8811fc29aa39ecd2452884bf48ea27e92 (diff) | |
download | opie-9a68bd2411e65eb6c51aead50a5b0b670174458d.zip opie-9a68bd2411e65eb6c51aead50a5b0b670174458d.tar.gz opie-9a68bd2411e65eb6c51aead50a5b0b670174458d.tar.bz2 |
Almost done ||
-rw-r--r-- | libopie/ofileselector.cc | 23 | ||||
-rw-r--r-- | libopie/ofileselector.h | 4 |
2 files changed, 25 insertions, 2 deletions
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc index 14f035e..fbe69ed 100644 --- a/libopie/ofileselector.cc +++ b/libopie/ofileselector.cc @@ -558,502 +558,523 @@ void OFileSelector::initializeChooser() else{ // check updateMimes(); m_mimeCheck->insertStringList( m_mimetypes ); } connect( m_viewCheck, SIGNAL(activated(const QString &) ), this, SLOT(slotViewCheck(const QString & ) ) ); connect( m_mimeCheck, SIGNAL(activated(const QString &) ), this, SLOT(slotMimeCheck(const QString & ) ) ); } void OFileSelector::slotMimeCheck(const QString &view ){ if(m_selector == NORMAL ){ delete m_select; m_select = new FileSelector(view == "All" ? QString::null : view , m_stack, "fileselector", FALSE, FALSE ); m_stack->addWidget( m_select, NORMAL ); m_stack->raiseWidget( NORMAL ); }else{ reparse(); } } void OFileSelector::slotViewCheck(const QString &view ){ qWarning("changed: show %s", view.latin1() ); // if the current view is the one QString currMime = m_mimeCheck->currentText(); if( view == QString::fromLatin1("Documents") ){ // get the mimetype now // check if we're the current widget and return if( m_View != 0) { // delete 0 shouldn't crash but it did :( delete m_View; delete m_boxToolbar; delete m_homeButton; delete m_docButton; delete m_location; delete m_up; delete m_pseudo; delete m_pseudoLayout; } m_View = 0; m_boxToolbar = 0; m_homeButton = 0; m_docButton = 0; m_location = 0; m_up = 0; m_pseudo = 0; m_pseudoLayout = 0; delete m_select; m_select = new FileSelector( currMime == "All" ? QString::null : currMime, m_stack,"fileselector", FALSE, FALSE ); m_stack->addWidget( m_select, NORMAL ); m_mimeCheck->clear(); m_selector = NORMAL; updateMimes(); m_mimeCheck->insertStringList( m_mimetypes ); m_stack->raiseWidget( NORMAL ); connect(m_select, SIGNAL(fileSelected( const DocLnk &) ), this, SLOT(slotFileBridgeSelected(const DocLnk &) ) ); }else if(view == QString::fromLatin1("Files") ){ // remove from the stack delete m_select; m_select = 0; delete m_View; m_View = 0; delete m_boxToolbar; delete m_homeButton; delete m_docButton; delete m_location; delete m_up; delete m_pseudo; delete m_pseudoLayout; m_boxToolbar = 0; m_homeButton = 0; m_docButton = 0; m_location = 0; m_up = 0; m_pseudo = 0; m_pseudoLayout = 0; m_selector = EXTENDED; // create the ListView or IconView initializeListView(); reparse(); }else if(view == QString::fromLatin1("All Files") ) { // remove from the stack delete m_select; m_select = 0; delete m_View; m_View = 0; delete m_boxToolbar; delete m_homeButton; delete m_docButton; delete m_location; delete m_up; delete m_pseudo; delete m_pseudoLayout; m_boxToolbar = 0; m_homeButton = 0; m_docButton = 0; m_location = 0; m_up = 0; m_pseudo = 0; m_pseudoLayout = 0; m_selector = EXTENDED_ALL; initializeListView(); reparse(); }; }; void OFileSelector::updateMimes() // lets check which mode is active // check the current dir for items then { m_mimetypes.clear(); m_mimetypes.append("All" ); if( m_selector == NORMAL ){ DocLnkSet set; Global::findDocuments(&set, QString::null ); QListIterator<DocLnk> dit( set.children() ); for ( ; dit.current(); ++dit ) { if( !m_mimetypes.contains((*dit)->type() ) ) m_mimetypes.append( (*dit)->type() ); } }else{ // should be allreday updatet ; } }; void OFileSelector::initializeListView() { // just to make sure but clean it up better FIXME delete m_View; m_View = 0; delete m_boxToolbar; delete m_homeButton; delete m_docButton; delete m_location; delete m_up; delete m_pseudo; delete m_pseudoLayout; m_boxToolbar = 0; m_homeButton = 0; m_docButton = 0; m_location = 0; m_up = 0; m_pseudo = 0; m_pseudoLayout = 0; // time for the toolbar m_pseudo = new QWidget(m_stack, "Pseudo Widget"); m_pseudoLayout = new QVBoxLayout(m_pseudo ); if(m_shTool ){ m_boxToolbar = new QHBoxLayout( ); m_boxToolbar->setAutoAdd( true ); m_location = new QComboBox(m_pseudo ); m_up = new QPushButton(Resource::loadIconSet("up"),"", m_pseudo,"cdUpButton"); m_up->setMinimumSize( QSize( 20, 20 ) ); m_up->setMaximumSize( QSize( 20, 20 ) ); connect(m_up ,SIGNAL(clicked()),this,SLOT(cdUP() ) ); m_up->setFlat(TRUE); m_homeButton = new QPushButton(Resource::loadIconSet("home") , "", m_pseudo); m_homeButton->setMinimumSize( QSize( 20, 20 ) ); m_homeButton->setMaximumSize( QSize( 20, 20 ) ); connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotHome() ) ); m_homeButton->setFlat(TRUE); m_docButton = new QPushButton(Resource::loadIconSet("DocsIcon"),"", m_pseudo,"docsButton"); m_docButton->setMinimumSize( QSize( 20, 20 ) ); m_docButton->setMaximumSize( QSize( 20, 20 ) ); connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotDoc() ) ); m_docButton->setFlat(TRUE); m_boxToolbar->addWidget(m_location ); m_boxToolbar->addWidget(m_up ); m_boxToolbar->addWidget(m_homeButton ); m_boxToolbar->addWidget(m_docButton ); m_pseudoLayout->addLayout(m_boxToolbar ); // lets fill the combobox StorageInfo storage; const QList<FileSystem> &fs = storage.fileSystems(); QListIterator<FileSystem> it ( fs ); for( ; it.current(); ++it ){ const QString disk = (*it)->name(); const QString path = (*it)->path(); m_location->insertItem(path+ "<-"+disk ); } + int count = m_location->count(); + m_location->insertItem(m_currentDir ); + m_location->setCurrentItem( count ); }; m_View = new QListView(m_pseudo, "Extended view" ); m_stack->addWidget( m_pseudo, EXTENDED ); m_stack->raiseWidget( EXTENDED ); m_pseudoLayout->addWidget(m_View ); QPEApplication::setStylusOperation( m_View->viewport(),QPEApplication::RightOnHold); // set up the stuff // Pixmap Name Date Size mime //(m_View->header() )->hide(); //m_View->setRootIsDecorated(false); m_View->addColumn(" "); m_View->addColumn(tr("Name") ); m_View->addColumn(tr("Size") ); m_View->addColumn(tr("Date"), 60 ); m_View->addColumn(tr("Mime Type") ); QHeader *header = m_View->header(); header->hide(); m_View->setSorting(1 ); // connect now connect(m_View, SIGNAL(selectionChanged() ), this, SLOT(slotSelectionChanged() ) ); connect(m_View, SIGNAL(currentChanged(QListViewItem *) ), this, SLOT(slotCurrentChanged(QListViewItem * ) ) ); connect(m_View, SIGNAL(mouseButtonClicked(int, QListViewItem*, const QPoint &, int) ), this, SLOT(slotClicked( int, QListViewItem *, const QPoint &, int) ) ); connect(m_View, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )), this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) ); }; /* If a item is locked depends on the mode if we're in OPEN !isReadable is locked if we're in SAVE !isWriteable is locked */ void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink ){ qWarning("Add Files" ); if( !m_files ){ qWarning("not mfiles" ); return; } MimeType type( info->filePath() ); QString name; QString dir; bool locked= false; if(mime == "All" ){ ; }else if( type.id() != mime ) { return; } QPixmap pix = type.pixmap(); if(pix.isNull() ) pix = Resource::loadPixmap( "UnknownDocument-14" ); dir = info->dirPath( true ); if( symlink ) { // check if the readLink is readable // do it right later name = info->fileName() + " -> " + info->dirPath() + "/" + info->readLink(); }else{ // keep track of the icons name = info->fileName(); if( m_mode == OPEN ){ if( !info->isReadable() ){ locked = true; pix = Resource::loadPixmap("locked" ); } }else if( m_mode == SAVE ){ if( !info->isWritable() ){ locked = true; pix = Resource::loadPixmap("locked" ); } } } new OFileSelectorItem( m_View, pix, name, info->lastModified().toString(), QString::number( info->size() ), dir, locked ); } void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink ) { if(!m_dir ) return; //if( showDirs ) { bool locked=false; QString name; QPixmap pix; if( ( m_mode == OPEN && !info->isReadable() ) || ( m_mode == SAVE && !info->isWritable() ) ){ locked = true; if( symlink ){ pix = (*m_pixmaps)["symlinkedlocked"]; }else{ pix = Resource::loadPixmap("lockedfolder" ); } }else{ if( symlink ){ pix = (*m_pixmaps)["dirsymlink" ]; }else{ pix = Resource::loadPixmap("folder" ); } } if( symlink){ name = info->fileName()+ "->"+ info->dirPath(true) +"/" +info->readLink(); }else{ //if(info->isReadable() ) name = info->fileName(); } new OFileSelectorItem(m_View, pix, name, info->lastModified().toString(), QString::number(info->size() ),info->dirPath(true), locked, true ); } } void OFileSelector::setShowDirs(bool dir ) { m_dir = dir; reparse(); } void OFileSelector::slotFileSelected(const QString &string ) { if(m_shLne ) m_edit->setText( string ); emit fileSelected( string ); // do AppLnk stuff } void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk ) { slotFileSelected(lnk.name() ); emit fileSelected( lnk ); } void OFileSelector::slotSelectionChanged() // get the current items // fixme { qWarning("selection changed" ); } void OFileSelector::slotCurrentChanged(QListViewItem *item ) { qWarning("current changed" ); if( item == 0 ) return; if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ OFileSelectorItem *sel = (OFileSelectorItem*)item; if(!sel->isDir() ){ qWarning("is not dir" ); if(m_shLne ){ m_edit->setText(sel->text(1) ); qWarning("setTexy" ); } } }else { qWarning("mode not extended" ); } } // either select or change dir void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint &point, int ) { if( item == 0 ) return; if( button != Qt::LeftButton ) return; qWarning("clicked" ); if(m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ qWarning("inside" ); OFileSelectorItem *sel = (OFileSelectorItem*)item; if(!sel->isLocked() ){ // not locked either changedir or open QStringList str = QStringList::split("->", sel->text(1) ); if(sel->isDir() ){ cd( sel->directory() + "/" + str[0] ); }else{ qWarning("file" ); if(m_shLne ) m_edit->setText(str[0] ); emit fileSelected(str[0] ); // emit DocLnk need to do it } }else{ qWarning( "locked" ); } }; } void OFileSelector::slotRightButton(int button, QListViewItem *item, const QPoint &, int ) { if (item == 0 ) return; if( button != Qt::RightButton ) return; qWarning("right button" ); slotContextMenu(item); } void OFileSelector::slotContextMenu(QListViewItem *item) { qWarning("context menu" ); if( item ==0 || !m_showPopup ) return; if( m_custom !=0){ m_custom->exec(); }else{ QPopupMenu menu; QAction up; up.setText("cd up"); up.addTo( &menu ); connect(&up, SIGNAL(activated() ), this, SLOT(cdUP() ) ); QAction act; OFileSelectorItem *sel = (OFileSelectorItem*)item; if(sel->isDir() ){ act.setText( tr("Change Directory") ); act.addTo(&menu ); connect(&act, SIGNAL(activated() ), this, SLOT(slotChangedDir() ) ); }else{ act.setText( tr("Open file" ) ); act.addTo( &menu ); connect(&act, SIGNAL(activated() ), this, SLOT(slotOpen() ) ); } QAction rescan; rescan.setText( tr("Rescan") ); rescan.addTo( &menu ); connect(&rescan, SIGNAL(activated() ), this, SLOT(slotRescan() ) ); QAction rename; rename.setText( tr("Rename") ); rename.addTo( &menu ); connect(&rename, SIGNAL(activated() ), this, SLOT(slotRename() ) ); menu.insertSeparator(); QAction delItem; delItem.setText( tr("Delete") ); delItem.addTo(&menu ); connect(&delItem, SIGNAL(activated() ), this, SLOT(slotDelete() ) ); menu.exec(QCursor::pos() ); } } bool OFileSelector::cd(const QString &str ) { qWarning(" dir %s", str.latin1() ); QDir dir( str); if(dir.exists() ){ m_currentDir = str; reparse(); + if(m_shTool ){ + int count = m_location->count(); + m_location->insertItem(str ); + m_location->setCurrentItem( count ); + } return true; } return false; } void OFileSelector::slotChangedDir() { OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); if(sel->isDir() ){ QStringList str = QStringList::split("->", sel->text(1) ); cd( sel->directory() + "/" + str[0] ); } } void OFileSelector::slotOpen() { OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); if(!sel->isDir() ){ QStringList str = QStringList::split("->", sel->text(1) ); slotFileSelected( str[0] ); } } void OFileSelector::slotRescan() { reparse(); } void OFileSelector::slotRename() { // rename inline } void OFileSelector::slotDelete() { qWarning("delete slot" ); OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); QStringList list = QStringList::split("->", sel->text(1) ); if( sel->isDir() ){ QString str = QString::fromLatin1("rm -rf ") + list[0]; ::system(str.utf8().data() ); }else{ QFile::remove( list[0] ); } m_View->takeItem( sel ); delete sel; } void OFileSelector::cdUP() { QDir dir( m_currentDir ); dir.cdUp(); if(dir.exists() ){ m_currentDir = dir.absPath(); reparse(); + int count = m_location->count(); + m_location->insertItem(m_currentDir ); + m_location->setCurrentItem( count ); } } +void OFileSelector::slotHome() +{ + cd(QDir::homeDirPath() ); +} +void OFileSelector::slotDoc() +{ + cd(QDir::homeDirPath() + "/Documents" ); +} +void OFileSelector::slotNavigate() +{ - +} diff --git a/libopie/ofileselector.h b/libopie/ofileselector.h index b91c0ea..bf3cb48 100644 --- a/libopie/ofileselector.h +++ b/libopie/ofileselector.h @@ -78,198 +78,200 @@ class OFileSelectorItem : public QListViewItem { dir = isDir; mLocked = isLocked; } bool isLocked() const{ return mLocked; } QString directory()const{ return m_dir; } bool isDir()const{ return dir; } QString path()const{ return text(1 ); } QString key(int id, bool )const { QString ke; if( id == 0 || id == 1 ){ // name if( dir ){ ke.append("0" ); ke.append( text(1) ); }else{ ke.append("1" ); ke.append( text(1) ); } }else if( id == 2 ){ // size return text(2); }else if( id == 3 ){ // date return text(3); } return ke; }; private: bool mLocked:1; bool dir:1; QString m_dir; }; class OFileSelector : public QWidget { Q_OBJECT public: enum Mode {OPEN=1, SAVE, FILESELECTOR }; enum Selector{NORMAL=1, EXTENDED = 2, EXTENDED_ALL =4 }; enum View { DIRS = 1, FILES = 2, TREE = 4, ICON = 8 }; OFileSelector(QWidget *wid, int mode, int selector, const QString &dirName, const QString &fileName = QString::null, const QStringList mimetypes = QStringList() ); bool isToolbarVisible() const { return m_shTool; }; bool isPermissionBarVisible() const { return m_shPerm; }; bool isLineEditVisible()const { return m_shLne; }; bool isChooserVisible( )const { return m_shChooser; }; bool isYesCancelVisible()const { return m_shYesNo; }; void setYesCancelVisible( bool show ); void setToolbarVisible( bool show ); void setPermissionBarVisible( bool show ); void setLineEditVisible(bool show) ; void setChooserVisible( bool chooser ); QCheckBox* permissionCheckbox(); bool setPermission() const; void setPermissionChecked( bool check ); void setMode( int ); bool showDirs()const { return m_dir; } void setShowDirs(bool ); const QListView* listView() { return m_View; }; bool isCaseSensetive()const { return m_case; } void setCaseSensetive(bool caSe ); bool showFiles()const { return m_files; }; void setShowFiles(bool ); bool cd(const QString &path ); int mode()const { return m_mode; }; int selector()const { return m_selector; }; void setSelector( int ); bool showPopup()const { return m_showPopup; }; void setShowPopup( bool pop ) { m_showPopup = pop; }; void setPopupMenu( QPopupMenu * ); void updateLay(); void reparse(); // re reads the dir QString selectedName( )const; QStringList selectedNames()const; QString selectedPath() const; QStringList selectedPaths() const; QString directory()const; int fileCount(); /* the user needs to delete it */ DocLnk selectedDocument()const; /* the user needs to delete it */ QValueList<DocLnk> selectedDocuments()const; signals: void fileSelected( const DocLnk & ); void fileSelected( const QString & ); void closeMe(); void ok(); void cancel(); protected slots: void slotOk(); void slotCancel(); void slotViewCheck(const QString & ); void slotMimeCheck(const QString & ); protected: void init(); void updateMimes(); protected: private: int m_mode, m_selector; QComboBox *m_location, *m_mimeCheck, *m_viewCheck; QPushButton *m_homeButton, *m_docButton, *m_hideButton, *m_ok, *m_cancel; QPushButton *m_reread, *m_up; QListView *m_View; QCheckBox *m_checkPerm; QWidget *m_pseudo; QVBoxLayout *m_pseudoLayout; QString m_currentDir; QString m_name; QStringList m_mimetypes; FileSelector *m_select; QWidgetStack *m_stack; QVBoxLayout *m_lay; QGridLayout *m_Oselector; QHBoxLayout *m_boxToolbar; QHBoxLayout *m_boxOk; QHBoxLayout *m_boxName; QHBoxLayout *m_boxView; QPopupMenu *m_custom; QLineEdit *m_edit; QLabel *m_fnLabel; bool m_shTool:1; bool m_shPerm:1; bool m_shLne:1; bool m_shChooser:1; bool m_shYesNo:1; bool m_boCheckPerm:1; bool m_autoMime:1; bool m_case:1; bool m_dir:1; bool m_files:1; bool m_showPopup:1; // implementation todo virtual void addFile(const QString &mime, QFileInfo *info, bool symlink = FALSE ); virtual void addDir( const QString &mime, QFileInfo *info , bool symlink = FALSE ); virtual void addSymlink(const QString &, QFileInfo *, bool = FALSE ){}; void delItems(); void initializeName(); void initializeYes(); void initializeChooser(); void initializeListView(); void initPics(); bool compliesMime(const QString &path, const QString &mime); class OFileSelectorPrivate; OFileSelectorPrivate *d; static QMap<QString,QPixmap> *m_pixmaps; private slots: void slotFileSelected(const QString & ); // not really meant to be a slot void slotFileBridgeSelected( const DocLnk & ); virtual void slotSelectionChanged(); virtual void slotCurrentChanged(QListViewItem* ); virtual void slotClicked( int, QListViewItem *item, const QPoint &, int); virtual void slotRightButton(int, QListViewItem *, const QPoint &, int ); virtual void slotContextMenu( QListViewItem *item); // listview crap see above // PopupMenu crap virtual void slotChangedDir(); virtual void slotOpen(); virtual void slotRescan(); virtual void slotRename(); virtual void slotDelete(); virtual void cdUP(); - + virtual void slotHome(); + virtual void slotDoc(); + virtual void slotNavigate( ); }; #endif |