summaryrefslogtreecommitdiff
path: root/libopie/ofileselector.cc
Side-by-side diff
Diffstat (limited to 'libopie/ofileselector.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/ofileselector.cc160
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
@@ -90,70 +90,76 @@ namespace {
return ke;
};
private:
bool mLocked:1;
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();
}
}
void OFileSelector::setCloseVisible( bool visible )
{
@@ -332,48 +338,48 @@ QString OFileSelector::selectedName() const
}
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:
@@ -416,66 +422,98 @@ 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
- 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();
}
}
void OFileSelector::slotLocationActivated(const QString &file)
{
@@ -503,25 +541,33 @@ void OFileSelector::slotInsertLocationPath(const QString &currentPath, int count
void OFileSelector::locationComboChanged()
{
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 ){
- 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 );
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
@@ -536,32 +582,32 @@ void OFileSelector::init()
initializePerm();
if( m_shChooser ) // the Chooser for the view and Mimetypes
initializeChooser();
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;
else
m_autoMime = false;
m_shClose = false;
m_shNew = false;
@@ -619,25 +665,25 @@ void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink)
QString dir;
QString name;
bool locked;
if( pix.isNull() )
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 );
}
void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink )
{
if(!m_dir)
return;
@@ -648,118 +694,133 @@ void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink )
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 { // 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 ){
m_boxOk = new QHBox( this );
m_ok = new QPushButton( tr("&Save"),m_boxOk , "save" );
m_cancel = new QPushButton( tr("C&ancel"), m_boxOk, "cancel" );
//m_boxOk->addWidget( m_ok );
//m_boxOk->addWidget( m_cancel );
m_boxOk->setMargin( 5 );
m_boxOk->setSpacing( 10 );
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");
m_up->setFixedSize( QSize( 20, 20 ) );
connect(m_up ,SIGNAL(clicked()),this,SLOT(cdUP() ) );
m_up->setFlat(TRUE);
@@ -822,31 +883,31 @@ void OFileSelector::initializeListView()
m_View->addColumn(tr("Mime Type"), -1 );
QHeader *header = m_View->header();
header->hide();
m_View->setSorting( 1 );
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 );
m_lay->addWidget( m_checkPerm );
}
}
@@ -867,25 +928,30 @@ void OFileSelector::initPics()
m_pixmaps->insert("symlinkedlocked", pm2 );
}
// if a mime complies with the m_mimeCheck->currentItem
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 )
{
slotFileSelected( lnk.name() );
// emit fileSelected( lnk );
}
void OFileSelector::slotSelectionChanged()
@@ -1041,50 +1107,50 @@ void OFileSelector::reparse()
dir.setSorting( QDir::Size );
const QFileInfoList *list = dir.entryInfoList();
QFileInfoListIterator it( *list );
QFileInfo *fi;
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;
dir.setFilter( filter );
// now go through all files
const QFileInfoList *list = dir.entryInfoList();
@@ -1116,19 +1182,19 @@ void OFileSelector::reparse()
}else if( i == 4){
addSymlink( currentMimeType, fi );
}
} // off for loop
}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
}