-rw-r--r-- | libopie/ofileselector.cc | 160 |
1 files changed, 113 insertions, 47 deletions
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc index 7a67ab2..6c59f89 100644 --- a/libopie/ofileselector.cc +++ b/libopie/ofileselector.cc @@ -94,62 +94,68 @@ namespace { bool dir:1; QString m_dir; }; }; OFileSelector::OFileSelector( QWidget *wid, int mode, int selector, const QString &dirName, - const QString &fileName, - const QStringList &mimeTypes ) + const QString &fileName, + const QMap<QString,QStringList>& mimeTypes) : QWidget( wid, "OFileSelector") { m_mimetypes = mimeTypes; + if (mode == SAVE ) + m_name = fileName; initVars(); m_mode = mode; m_selector = selector; m_currentDir = dirName; init(); -QTimer::singleShot(6*1000, this, SLOT( slotTest() ) ); + //QTimer::singleShot(6*1000, this, SLOT( slotTest() ) ); } OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent, const char *name, bool newVisible, bool closeVisible ) : QWidget( parent, name ) { - m_mimetypes = QStringList::split(";", mimeFilter ); + if (!mimeFilter.isEmpty() ) { + QStringList list = QStringList::split(";", mimeFilter ); + m_mimetypes.insert(mimeFilter, list ); + } initVars(); - m_currentDir = QPEApplication::documentDir(); + m_currentDir = QPEApplication::documentDir(); m_mode = OPEN; m_selector = NORMAL; m_shClose = closeVisible; m_shNew = newVisible; m_shLne = false; m_shPerm = false; m_shYesNo = false; init(); - + } OFileSelector::~OFileSelector() { + } void OFileSelector::setNewVisible( bool visible ) { m_shNew = visible; if( m_selector == NORMAL ){ delete m_select; // we need to initialize but keep the selected mimetype - QString mime = m_mimeCheck == 0 ? QString::null : m_mimeCheck->currentText() ; - m_select = new FileSelector( m_autoMime ? mime : m_mimetypes.join(";") , + 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 to close me and other signals as well m_stack->addWidget( m_select, NORMAL ); }else{ m_new->show(); @@ -336,17 +342,17 @@ QStringList OFileSelector::selectedNames()const 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 ){ @@ -359,17 +365,17 @@ 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: @@ -420,58 +426,90 @@ 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 - m_select = new FileSelector(m_autoMime ? QString::null : m_mimetypes.join(";"), + // yes currentMime fixes that for us + QString mime = currentMimeType(); + m_select = new FileSelector(mime, m_stack, "fileselector", FALSE, FALSE); connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); //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 + 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 ){ + //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( mime == tr("All") ? QString::null : mime, - m_stack, "fileselector", - FALSE, FALSE); + m_select = new FileSelector( newMimeType, + m_stack, "fileselector", + FALSE, FALSE); connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); //connect to close me and other signals as well m_stack->addWidget( m_select, NORMAL ); m_stack->raiseWidget( NORMAL ); updateMimes(); - m_mimeCheck->clear(); - m_mimeCheck->insertStringList(m_mimetypes ); + 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(); } @@ -507,17 +545,25 @@ void OFileSelector::locationComboChanged() } void OFileSelector::init() { m_lay = new QVBoxLayout( this ); m_lay->setSpacing(0 ); m_stack = new QWidgetStack( this ); if( m_selector == NORMAL ){ - m_select = new FileSelector(m_autoMime ? QString::null : m_mimetypes.join(";"), + 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", FALSE, FALSE); connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); //connect to close me and other signals as well m_stack->addWidget( m_select, NORMAL ); @@ -540,24 +586,24 @@ void OFileSelector::init() if( m_shYesNo ) // the Yes No button row initializeYes( ); } void OFileSelector::updateMimes() { if( m_autoMime ){ m_mimetypes.clear(); - m_mimetypes.append( tr("All") ); + 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.append( (*dit)->type() ); + m_mimetypes.insert( (*dit)->type(), (*dit)->type() ); } }// else done in reparse } } void OFileSelector::initVars() { if( m_mimetypes.isEmpty() ) m_autoMime = true; @@ -623,17 +669,17 @@ void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink) pix = Resource::loadPixmap( "UnknownDocument-14"); dir = info->dirPath( true ); if( symlink ) name = info->fileName() + " -> " +info->dirPath() + "/" + info->readLink(); else { name = info->fileName(); if( ( m_mode == OPEN && !info->isReadable() )|| ( m_mode == SAVE && !info->isWritable() ) ){ - + locked = true; pix = Resource::loadPixmap("locked"); } } new OFileSelectorItem( m_View, pix, name, info->lastModified().toString(), QString::number( info->size() ), dir, locked ); } @@ -652,48 +698,49 @@ void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink ) else pix = Resource::loadPixmap("lockedfolder"); }else { // readable pix = symlink ? (*m_pixmaps)["dirsymlink"] : Resource::loadPixmap("folder") ; } name = symlink ? info->fileName() + "->" + info->dirPath(true) + "/" +info->readLink() : info->fileName() ; new OFileSelectorItem( m_View, pix, name, info->lastModified().toString(), - QString::number( info->size() ), + QString::number( info->size() ), info->dirPath( true ), locked, true ); }// else CUSTOM View } void OFileSelector::delItems() { } void OFileSelector::initializeName() { /** Name Layout Line - * This is the Layout line arranged in - * horizontal way each components + * This is the Layout line arranged in + * horizontal way each components * are next to each other * but we will only do this if * we didn't initialize a while ago. */ if( m_boxName == 0 ){ m_boxName = new QHBox( this ); // remove this this? or use a QHBox m_fnLabel = new QLabel( m_boxName ); m_fnLabel->setText( tr("Name:") ); m_edit = new QLineEdit( m_boxName ); + m_edit->setText( m_name ); //m_boxName->addWidget( m_fnLabel ); m_boxName->setMargin( 5 ); m_boxName->setSpacing( 8 ); //m_boxName->setStretchFactor(m_edit, 100 ); // 100 is stretch factor m_lay->addWidget( m_boxName, 0 ); // add it to the topLevel layout }// else we already initialized - // maybe show the components? + // maybe show the components? // } void OFileSelector::initializeYes() { /** The Save Cancel bar * */ if( m_boxOk == 0 ){ @@ -708,54 +755,68 @@ void OFileSelector::initializeYes() m_lay->addWidget( m_boxOk, 0 ); connect( m_ok, SIGNAL( clicked() ), this, SLOT(slotOk() ) ); connect( m_cancel, SIGNAL( clicked() ), this, SLOT( slotCancel() ) ); } } +/* + * OK m_mimeCheck is a QComboBox we now want to fill + * out that combobox + * if automime we need to update the mimetypes + */ +void OFileSelector::updateMimeCheck() { + m_mimeCheck->clear(); + if (m_autoMime ) { + //m_mimeCheck->insertItem( tr("All") ); + updateMimes(); + } + + QMap<QString, QStringList>::Iterator it; + for (it = m_mimetypes.begin(); it != m_mimetypes.end(); ++it ) { + m_mimeCheck->insertItem( it.key() ); + } +} + void OFileSelector::initializeChooser() { if( m_boxView == 0 ){ m_boxView = new QHBox( this ); m_viewCheck = new QComboBox( m_boxView, "view check"); m_mimeCheck = new QComboBox( m_boxView, "mime check"); m_boxView->setSpacing( 8 ); m_lay->addWidget(m_boxView, 0 ); m_viewCheck->insertItem( tr("Documents") ); m_viewCheck->insertItem( tr("Files") ); m_viewCheck->insertItem( tr("All Files") ); - if(!m_autoMime ) - m_mimeCheck->insertItem(m_mimetypes.join(",") ); - else{ - updateMimes(); - m_mimeCheck->insertStringList( m_mimetypes ); - } + updateMimeCheck(); + 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::initializeListView() { if( m_pseudo == 0 ){ m_pseudo = new QWidget( m_stack, "Pseudo Widget"); m_pseudoLayout = new QVBoxLayout( m_pseudo ); // toolbar m_boxToolbar = new QHBox( m_pseudo ); m_boxToolbar->setSpacing(0 ); // next to each other please - // toolbar members + // toolbar members { // location QComboBox m_location = new QComboBox( m_boxToolbar ); - m_location->setEditable( TRUE ); + m_location->setEditable( TRUE ); m_location->setDuplicatesEnabled( FALSE ); connect( m_location, SIGNAL(activated(const QString &) ), this, SLOT( slotLocationActivated(const QString &) ) ); connect( m_location->lineEdit(), SIGNAL(returnPressed() ), this, SLOT(locationComboChanged() ) ); // UP Button m_up = new QPushButton(Resource::loadIconSet("up"),"", m_boxToolbar,"cdUpButton"); @@ -826,23 +887,23 @@ void OFileSelector::initializeListView() m_View->setAllColumnsShowFocus( TRUE ); 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) ), + 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 )), + connect(m_View, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )), this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) ); - m_pseudoLayout->addWidget( m_View, 288 ); + m_pseudoLayout->addWidget( m_View, 288 ); m_stack->addWidget( m_pseudo, EXTENDED ); } } void OFileSelector::initializePerm() { if( m_checkPerm == 0 ){ m_checkPerm = new QCheckBox(tr("Ser Permission"), this, "perm"); m_checkPerm->setChecked( false ); @@ -871,17 +932,22 @@ bool OFileSelector::compliesMime( const QString &path, const QString &mime ) { if( mime == "All" ) return true; MimeType type( path ); if( type.id() == mime ) return true; return false; } +/* check if the mimetype in mime + * complies with the one which is current + */ +bool OFileSelector::compliesMime( const QString& mime ) { +} void OFileSelector::slotFileSelected( const QString &string ) { if( m_shLne ) m_edit->setText( string ); emit fileSelected( string ); } void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk ) { @@ -1045,42 +1111,42 @@ void OFileSelector::reparse() while( (fi=it.current() ) ) { if( fi->extension() == QString::fromLatin1("desktop") ){ ++it; continue; } MimeType type( fi->absFilePath() ); if( !m_mimetypes.contains( type.id() ) ){ //qWarning("Type %s", type.id().latin1() ); - m_mimetypes.append( type.id() ); + m_mimetypes.insert( type.id(), type.id() ); } ++it; } // add them to the chooser - m_mimeCheck->insertItem( tr("All") ); - m_mimeCheck->insertStringList( m_mimetypes ); + updateMimeCheck(); m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) ); currentMimeType = m_mimeCheck->currentText(); } }else { // no autoMime - currentMimeType = m_mimetypes.join(";"); + // let the mimetype be set from out side the m_mimeCheck FEATURE + if( m_shChooser ){ - m_mimeCheck->clear(); - m_mimeCheck->insertItem(m_mimetypes.join(",") ); + currentMimeType = m_mimeCheck->currentText(); + updateMimeCheck(); } } // now we got our mimetypes we can add the files QDir dir( m_currentDir ); int sort; if ( m_case ) sort = (QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed); - else + else sort = (QDir::Name | QDir::DirsFirst | QDir::Reversed); dir.setSorting( sort ); int filter; if( m_selector == EXTENDED_ALL /*|| m_selector ==CUSTOM_ALL */ ){ filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All; }else filter = QDir::Files | QDir::Dirs | QDir::All; @@ -1120,15 +1186,15 @@ void OFileSelector::reparse() }else if( fi->isDir() ){ addDir( currentMimeType, fi ); }else if( fi->isFile() ){ addFile( currentMimeType, fi ); } //qWarning( "%s", fi->fileName().latin1() ); ++it; } // of while loop - m_View->sort(); + m_View->sort(); if( m_shTool ){ m_location->insertItem( m_currentDir ); } // reenable painting and updates } |