-rw-r--r-- | libopie/ofileselector.cc | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc index 824acf2..3c3a6c4 100644 --- a/libopie/ofileselector.cc +++ b/libopie/ofileselector.cc @@ -237,410 +237,435 @@ void OFileSelector::setLineEditVisible( bool show ) if( m_shLne && m_boxName != 0 ){ // check if we showed before this is the way to go m_boxName->hide(); } } m_shLne = show; } void OFileSelector::setChooserVisible( bool show ) { m_shChooser = show; initializeChooser(); if( m_shChooser ){ m_boxView->hide(); }else{ m_boxView->show(); } } QCheckBox* OFileSelector::permissionCheckbox() { if( m_selector == NORMAL ) return 0l; else return m_checkPerm; } bool OFileSelector::setPermission()const { return m_checkPerm == 0 ? false : m_checkPerm->isChecked(); } void OFileSelector::setPermissionChecked( bool check ) { if( m_checkPerm ) m_checkPerm->setChecked( check ); } void OFileSelector::setMode(int mode) // FIXME do direct raising { m_mode = mode; if( m_selector == NORMAL ) return; } void OFileSelector::setShowDirs(bool ) { m_dir = true; reparse(); } void OFileSelector::setCaseSensetive(bool caSe ) { m_case = caSe; reparse(); } void OFileSelector::setShowFiles(bool show ) { m_files = show; reparse(); } /// bool OFileSelector::cd(const QString &path ) { m_currentDir = path; reparse(); return true; } void OFileSelector::setSelector(int mode ) { QString text; switch( mode ){ case NORMAL: text = tr("Documents"); break; case EXTENDED: text = tr("Files"); break; case EXTENDED_ALL: text = tr("All Files"); break; } slotViewCheck( text ); } void OFileSelector::setPopupMenu(QPopupMenu *popup ) { m_custom = popup; m_showPopup = true; } //void OFileSelector::updateL QString OFileSelector::selectedName() const { QString name; if( m_selector == NORMAL ){ const DocLnk *lnk = m_select->selected(); name = lnk->file(); delete lnk; }else if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ - QListViewItem *item = m_View->currentItem(); - if( item != 0 ) - name = m_currentDir + "/" + item->text( 1 ); + if ( m_shLne ) { + name = m_currentDir + "/" +m_edit->text(); + }else{ + QListViewItem *item = m_View->currentItem(); + if( item != 0 ) + name = m_currentDir + "/" + item->text( 1 ); + } }else { // installed view ; } return name; } QStringList OFileSelector::selectedNames()const { QStringList list; if( m_selector == NORMAL ){ list << selectedName(); }else if ( m_selector == EXTENDED || m_selector == EXTENDED_ALL ) { list << selectedName(); // FIXME implement multiple Selections } return list; } /** If mode is set to the Dir selection this will return the selected path. * * */ QString OFileSelector::selectedPath()const { QString path; if( m_selector == NORMAL ){ path = QPEApplication::documentDir(); }else if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){ ; } return path; } QStringList OFileSelector::selectedPaths() const { QStringList list; list << selectedPath(); return list; } QString OFileSelector::directory()const { if( m_selector == NORMAL ) return QPEApplication::documentDir(); return QDir(m_currentDir).absPath(); } int OFileSelector::fileCount() { int count; switch( m_selector ){ case NORMAL: count = m_select->fileCount(); break; //case CUSTOM: case EXTENDED: case EXTENDED_ALL: default: count = m_View->childCount(); break; } return count; } DocLnk OFileSelector::selectedDocument() const { DocLnk lnk; switch( m_selector ){ case NORMAL:{ const DocLnk *lnk2 = m_select->selected(); lnk = DocLnk(*lnk2 ); // copy delete lnk2; break; } case EXTENDED: case EXTENDED_ALL: default: lnk = DocLnk( selectedName() ); // new DocLnk break; } return lnk; } QValueList<DocLnk> OFileSelector::selectedDocuments() const { QValueList<DocLnk> docs; docs.append( selectedDocument() ); return docs; } // slots internal void OFileSelector::slotOk() { emit ok(); } void OFileSelector::slotCancel() { emit cancel(); } void OFileSelector::slotViewCheck(const QString &sel) { if( sel == tr("Documents" ) ){ if( m_select == 0 ){ // autMime? fix cause now we use All and not the current // yes currentMime fixes that for us QString mime = currentMimeType(); m_select = new FileSelector(mime, m_stack, "fileselector", m_shNew, m_shClose); connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); connect(m_select, SIGNAL(closeMe() ), this, SIGNAL(closeMe() ) ); //connect to close me and other signals as well m_stack->addWidget( m_select, NORMAL ); } m_stack->raiseWidget( NORMAL ); m_selector = NORMAL; }else if( sel == tr("Files") ){ m_selector = EXTENDED; initializeListView(); reparse(); m_stack->raiseWidget( EXTENDED ); }else if( sel == tr("All Files") ){ m_selector = EXTENDED_ALL; initializeListView(); reparse(); m_stack->raiseWidget( EXTENDED ); // same widget other QFileFilter } } // not yet finished..... QString OFileSelector::currentMimeType() const{ QString mime; QString currentText; if (m_shChooser ) currentText = m_mimeCheck->currentText(); if (tr("All") == currentText ) return QString::null; else if (currentText.isEmpty() ) { ; }else { QMap<QString, QStringList>::ConstIterator it; it = m_mimetypes.find( currentText ); if ( it == m_mimetypes.end() ) { mime = it.data().join(";"); }else{ mime = currentText; } } return mime; } void OFileSelector::slotMimeCheck(const QString &mime) { if( m_selector == NORMAL ){ //if( m_autoMime ){ QString newMimeType; if (mime != tr("All") ) { QMap<QString, QStringList>::Iterator it; it = m_mimetypes.find(mime); if ( it != m_mimetypes.end() ) { newMimeType = it.data().join(";"); }else{ newMimeType = mime; } } delete m_select; m_select = new FileSelector( newMimeType, m_stack, "fileselector", m_shNew, m_shClose); connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); connect(m_select, SIGNAL(closeMe() ), this, SIGNAL(closeMe() ) ); //connect to close me and other signals as well m_stack->addWidget( m_select, NORMAL ); m_stack->raiseWidget( NORMAL ); updateMimes(); updateMimeCheck(); m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) ); //} }else{ // others qWarning("Mime %s", mime.latin1() ); if(m_shChooser ){ qWarning("Current Text %s", m_mimeCheck->currentText().latin1() ); //m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) ); } reparse(); } } +/* + * Ok if a non dir gets inserted into this combobox + * we need to change it + * QFileInfo and dirPath will give us the right Dir + */ void OFileSelector::slotLocationActivated(const QString &file) { - cd(file.left(file.find("<-",0,TRUE))); - reparse(); + qWarning("slotLocationActivated"); + QString name = file.left( file.find("<-", 0, TRUE ) ); + QFileInfo info( name ); + if ( info.isFile() ) + cd(info.dirPath( TRUE ) ); //absolute + else + cd(name ); + reparse(); } void OFileSelector::slotInsertLocationPath(const QString ¤tPath, int count) { QStringList pathList; bool underDog = FALSE; for(int i=0;i<count;i++) { pathList << m_location->text(i); if( m_location->text(i) == currentPath) underDog = TRUE; } if( !underDog) { m_location->clear(); if( currentPath.left(2)=="//") pathList.append( currentPath.right(currentPath.length()-1) ); else pathList.append( currentPath ); m_location->insertStringList( pathList,-1); } } +/* + * Do not crash anymore + * don't try to change dir to a file + */ void OFileSelector::locationComboChanged() { - cd( m_location->lineEdit()->text()); - reparse(); + QFileInfo info( m_location->lineEdit()->text() ); + qWarning("info %s %s", info.dirPath(true).latin1(), m_location->lineEdit()->text().latin1() ); + if (info.isFile() ) + cd(info.dirPath(TRUE) ); //absolute path + else + cd( m_location->lineEdit()->text() ); + + reparse(); } void OFileSelector::init() { m_lay = new QVBoxLayout( this ); m_lay->setSpacing(0 ); m_stack = new QWidgetStack( this ); if( m_selector == NORMAL ){ QString mime; if (!m_autoMime) { if (!m_mimetypes.isEmpty() ) { QMap<QString, QStringList>::Iterator it; it = m_mimetypes.begin(); // cause we're in the init mime = it.data().join(";"); } } m_select = new FileSelector(mime, m_stack, "fileselector", m_shNew, m_shClose); connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); connect(m_select, SIGNAL(closeMe() ), this, SIGNAL( closeMe() ) ); //connect to close me and other signals as well m_stack->addWidget( m_select, NORMAL ); m_stack->raiseWidget( NORMAL ); }else{ // we're in init so it will be EXTENDED or EXTENDED_ALL // and initializeListview will take care of those // toolbar get's generade in initializeListView initializeListView( ); // will raise the widget as well m_stack->raiseWidget( EXTENDED ); } m_lay->addWidget( m_stack, 100 ); // add to the layout 10 = stretch if( m_shLne ) // the LineEdit with the current FileName initializeName(); if( m_shPerm ) // the Permission QCheckBox initializePerm(); if( m_shChooser ) // the Chooser for the view and Mimetypes initializeChooser(); if( m_shYesNo ) // the Yes No button row initializeYes( ); if (m_selector != NORMAL ) reparse(); } void OFileSelector::updateMimes() { if( m_autoMime ){ m_mimetypes.clear(); m_mimetypes.insert( tr("All"), QString::null ); 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.insert( (*dit)->type(), (*dit)->type() ); } }// else done in reparse } } void OFileSelector::initVars() { if( m_mimetypes.isEmpty() ) m_autoMime = true; else m_autoMime = false; m_shClose = false; m_shNew = false; m_shTool = true; m_shPerm = false; m_shLne = true; m_shChooser = true; m_shYesNo = true; m_case = false; m_dir = true; m_files = true; m_showPopup = false; if(m_pixmaps == 0 ) // init the pixmaps initPics(); // pointers m_location = 0; m_mimeCheck = 0; m_viewCheck = 0; m_homeButton = 0; m_docButton = 0; m_hideButton = 0; m_ok = 0; m_cancel = 0; |