summaryrefslogtreecommitdiff
authorzecke <zecke>2002-10-05 22:20:57 (UTC)
committer zecke <zecke>2002-10-05 22:20:57 (UTC)
commit99425255c4afcd75ee6b2f903487cb958d3acdee (patch) (side-by-side diff)
tree8cce0b096ce9a000291044def444f30934c79888
parent94180a2019a945e6a492405dc6a30420c760529f (diff)
downloadopie-99425255c4afcd75ee6b2f903487cb958d3acdee.zip
opie-99425255c4afcd75ee6b2f903487cb958d3acdee.tar.gz
opie-99425255c4afcd75ee6b2f903487cb958d3acdee.tar.bz2
So now switching is about to be implemented the next commit will have a completed OListe/OFileView switch
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/ofileselector/odefaultfactories.cpp15
-rw-r--r--libopie/ofileselector/odefaultfactories.h14
-rw-r--r--libopie/ofileselector/ofileselector.cpp34
-rw-r--r--libopie/ofileselector/ofileselector.h4
4 files changed, 50 insertions, 17 deletions
diff --git a/libopie/ofileselector/odefaultfactories.cpp b/libopie/ofileselector/odefaultfactories.cpp
new file mode 100644
index 0000000..c41fbca
--- a/dev/null
+++ b/libopie/ofileselector/odefaultfactories.cpp
@@ -0,0 +1,15 @@
+#include "ofilelistview.h"
+#include "olocallister.h"
+
+#include "odefaultfactories.h"
+
+extern "C" {
+
+ OFileView* newFileListView( OFileSelector* sel, QWidget* par ) {
+ return new OFileListView(par, sel );
+ }
+ OLister* newLocalLister( OFileSelector* sel) {
+ return new OLocalLister( sel );
+ }
+
+};
diff --git a/libopie/ofileselector/odefaultfactories.h b/libopie/ofileselector/odefaultfactories.h
new file mode 100644
index 0000000..eb698d3
--- a/dev/null
+++ b/libopie/ofileselector/odefaultfactories.h
@@ -0,0 +1,14 @@
+#ifndef OPIE_DEFAULT_FACTORIES_H
+#define OPIE_DEFAULT_FACTORIES_H
+
+#include "ofilefactory.h"
+
+extern "C" {
+
+ OFileView* newFileListView( OFileSelector*, QWidget* parent );
+ OLister* newLocalLister(OFileSelector* );
+
+};
+
+
+#endif
diff --git a/libopie/ofileselector/ofileselector.cpp b/libopie/ofileselector/ofileselector.cpp
index 458d432..91a510f 100644
--- a/libopie/ofileselector/ofileselector.cpp
+++ b/libopie/ofileselector/ofileselector.cpp
@@ -1,132 +1,133 @@
#include <qcheckbox.h>
#include <qcombobox.h>
#include <qheader.h>
#include <qlabel.h>
#include <qabstractlayout.h>
#include <qlayout.h>
#include <qlineedit.h>
#include <qlistview.h>
#include <qmessagebox.h>
#include <qpainter.h>
#include <qpushbutton.h>
#include <qwidgetstack.h>
#include <qpopupmenu.h>
#include <qdir.h>
#include <qfile.h>
#include <qfileinfo.h>
#include <qtimer.h>
#include <qpe/qpeapplication.h>
#include <qpe/applnk.h>
#include <qpe/global.h>
#include <qpe/mimetype.h>
#include <qpe/resource.h>
#include <qpe/storage.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include "ofileview.h"
#include "ofileselectormain.h"
#include "ofileselector.h"
#include "olocallister.h"
#include "olister.h"
+#include "odefaultfactories.h"
QMap<QString,QPixmap> *OFileSelector::m_pixmaps = 0;
namespace {
/* let's find the index for a specified string */
int indexByString( const QComboBox *box, const QString &str ){
int index= 0;
for(int i= 0; i < box->count(); i++ ){
/* found */
if( str == box->text(i ) ){
index= i;
break;
}
}
return index;
}
}
OFileSelector::OFileSelector( QWidget *wid, int mode, int selector,
const QString &dirName,
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();
}
OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent,
const char *name, bool newVisible,
bool closeVisible )
: QWidget( parent, name )
{
/* update the mimefilter */
if (!mimeFilter.isEmpty() ) {
QStringList list = QStringList::split(";", mimeFilter );
m_mimetypes.insert(mimeFilter, list );
}
initVars();
m_currentDir = QPEApplication::documentDir();
m_mode = Fileselector;
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_new )
m_new->show();
}
void OFileSelector::setCloseVisible( bool visible )
{
m_shClose = visible;
if( m_close )
m_close->show();
}
void OFileSelector::reread()
{
if( m_selector == Normal )
initializeOldSelector();
else
reparse();
}
const DocLnk *OFileSelector::selected()
{
DocLnk *lnk = new DocLnk(selectedDocument() );
return lnk;
}
void OFileSelector::setYesCancelVisible( bool show )
{
initializeYes(); // FIXME if YesCancel is not shown we will initialize it to hide it :(
@@ -204,552 +205,540 @@ 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 dir)
{
m_dir = dir;
if ( m_selector != Fileselector )
reparse();
}
void OFileSelector::setCaseSensetive(bool caSe )
{
m_case = caSe;
if ( m_selector != Fileselector )
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 ExtendedAll:
text = tr("All Files");
break;
}
slotViewCheck( text );
}
void OFileSelector::setPopupFactory(OPopupMenuFactory */*popup*/ )
{
/* m_custom = popup;
m_showPopup = true;
*/
}
//void OFileSelector::updateL
QString OFileSelector::selectedName() const
{
QString name;
if( m_selector == Normal ){
DocLnk lnk = m_select->selectedDocument();
name = lnk.file();
}else {
if ( m_shLne ) {
name = m_currentDir + "/" +m_edit->text();
}else{
name = m_currentDir + "/" + currentView()->selectedName();
}
}
return name;
}
QStringList OFileSelector::selectedNames()const
{
QStringList list;
if( m_selector == Normal ){
list << selectedName();
}else {
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 == ExtendedAll ){
- ;
- }*/
+ } /* normal case to do */
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 Extended:
case ExtendedAll:
default:
count = currentView()->fileCount();
break;
}
return count;
}
DocLnk OFileSelector::selectedDocument() const
{
DocLnk lnk;
switch( m_selector ){
case Normal:{
lnk = m_select->selectedDocument();
break;
}
case Extended:
case ExtendedAll:
default:
lnk = DocLnk( selectedName() );
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();
}
/* switch the views */
void OFileSelector::slotViewCheck(const QString &sel)
{
if( sel == tr("Documents" ) ){
initializeOldSelector();
m_selector = Normal;
- }else if( sel == tr("Files") ){
- m_selector = Extended;
-
- // FIXME call the factory
- //reparse();
- }else if( sel == tr("All Files") ){
- m_selector = ExtendedAll;
-/* see above
- reparse(); */
+ }else {
+;
}
}
QString OFileSelector::currentMimeType() const{
QString mime;
QString currentText;
if (m_shChooser && m_mimeCheck )
currentText = m_mimeCheck->currentText();
qWarning("CurrentText" + 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 ){
initializeOldSelector();
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)
{
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 &currentPath, 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()
{
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()
{
+ initFactory();
m_lay = new QVBoxLayout( this );
m_lay->setSpacing(0 );
/* take care of the main view... */
initToolbar();
/* initialize the file lister */
initLister();
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(";");
}
}
initializeOldSelector();
}else{
initializeView();
}
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;
m_mainView = 0l;
m_fileView = 0l;
m_lister = 0l;
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;
m_reread = 0;
m_up = 0;
m_View = 0;
m_checkPerm = 0;
m_pseudo = 0;
m_pseudoLayout = 0;
m_select = 0;
m_lay = 0;
m_Oselector = 0;
m_boxToolbar = 0;
m_boxOk = 0;
m_boxName = 0;
m_boxView = 0;
m_edit = 0;
m_fnLabel = 0;
m_new = 0;
m_close = 0;
}
void OFileSelector::initializeName()
{
/** Name Layout Line
* 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?
//
}
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") );
- /* update to custom views */
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 & ) ) );
}
}
/* generate the buttons for the toolbar */
void OFileSelector::initToolbar() {
m_mainView = new OFileSelectorMain( this );
/* now generate the tool bar */
qWarning( "toolbar" );
m_pseudo = new QWidget( m_mainView, "Pseudo Widget" );
m_pseudoLayout = new QVBoxLayout( m_pseudo );
m_boxToolbar = new QHBox( m_pseudo );
m_boxToolbar->setSpacing( 0 );
// tool bar members now
m_location = new QComboBox( m_boxToolbar );
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"), QString::null,
m_boxToolbar, "cdUpButton" );
m_up->setFixedSize( QSize(20, 20 ) );
connect( m_up, SIGNAL( clicked() ), this, SLOT(cdUP() ) );
m_up->setFlat( TRUE );
// Home Button
m_homeButton = new QPushButton(Resource::loadIconSet("home"),
QString::null, m_boxToolbar );
m_homeButton->setFixedSize( QSize(20, 20 ) );
connect(m_homeButton, SIGNAL(clicked() ), this, SLOT(slotHome() ) );
m_homeButton->setFlat( TRUE );
// Documents Button
m_docButton = new QPushButton( Resource::loadIconSet("DocsIcon"),
QString::null, m_boxToolbar,
"docsButton" );
m_docButton->setFixedSize( QSize(20, 20 ) );
m_docButton->setFlat( true );
connect( m_docButton, SIGNAL(clicked() ),
this, SLOT(slotDoc() ) );
// close button
m_close = new QPushButton( Resource::loadIconSet( "close"), "",
m_boxToolbar );
connect( m_close, SIGNAL(clicked() ), this, SIGNAL(closeMe() ) );
m_close->setFixedSize( 20, 20 );
m_boxToolbar->setFixedHeight( 20 );
m_pseudoLayout->addWidget(m_boxToolbar );
/* init the locations */
initLocations();
if( !m_shTool ){
m_location->hide( );
m_up->hide( );
m_homeButton->hide( );
m_docButton->hide( );
}
if(!m_shClose )
m_close->hide();
m_mainView->setToolbar( m_pseudo );
m_lay->addWidget( m_mainView, 100 );
}
/* initialize the OLocalLister */
void OFileSelector::initLister() {
m_lister = new OLocalLister(this);
}
/* put default locations into the bar */
void OFileSelector::initLocations () {
// let;s fill the Location 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 );
@@ -858,167 +847,178 @@ void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk )
void OFileSelector::slotDelete()
{
/*
OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem();
QStringList list = QStringList::split("->", sel->text(1) );
if( sel->isDir() ){
QString str = QString::fromLatin1("rm -rf ") + sel->directory() +"/" + list[0]; //better safe than sorry
switch ( QMessageBox::warning(this,tr("Delete"),tr("Do you really want to delete\n")+list[0],
tr("Yes"),tr("No"),0,1,1) ) {
case 0:
::system(str.utf8().data() );
break;
}
} 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();
slotInsertLocationPath( m_currentDir, count);
m_location->setCurrentItem( indexByString( m_location, m_currentDir));
//this wont work in all instances
// FIXME
}
}
void OFileSelector::slotHome()
{
cd(QDir::homeDirPath() );
}
void OFileSelector::slotDoc()
{
cd(QPEApplication::documentDir() );
}
void OFileSelector::slotNavigate( )
{
}
// fill the View with life
void OFileSelector::reparse()
{
if( m_selector == Normal )
return;
currentView()->clear();
if( m_shChooser)
qWarning("reparse %s", m_mimeCheck->currentText().latin1() );
QString currentMimeType;
// let's update the mimetype
if( m_autoMime ){
m_mimetypes.clear();
// ok we can change mimetype so we need to be able to give a selection
if( m_shChooser ) {
currentMimeType = m_mimeCheck->currentText();
m_mimeCheck->clear();
// let's find possible mimetypes
m_mimetypes = currentLister()->mimeTypes( m_currentDir );
// add them to the chooser
updateMimeCheck();
m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) );
currentMimeType = m_mimeCheck->currentText();
}
}else { // no autoMime
// let the mimetype be set from out side the m_mimeCheck FEATURE
if( m_shChooser )
currentMimeType = m_mimeCheck->currentText();
}
// now we got our mimetypes we can add the files
currentLister()->reparse( m_currentDir );
/* we're done with adding let's sort */
currentView()->sort();
if( m_shTool ){
m_location->insertItem( m_currentDir );
}
// reenable painting and updates
}
+/*
+ * the factory
+ */
+void OFileSelector::initFactory() {
+ m_fileFactory = new OFileFactory();
+ m_fileFactory->addLister(tr("Files"), newLocalLister );
+ m_fileFactory->addView(tr("List View"), newFileListView );
+ /* the factory is just a dummy */
+ m_fileFactory->addView(tr("Documents"), newFileListView );
+}
+
OFileView* OFileSelector::currentView() {
return m_fileView;
}
OFileView* OFileSelector::currentView() const{
return m_fileView;
}
int OFileSelector::filter() {
int filter;
if ( m_selector == ExtendedAll )
filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All;
else
filter = QDir::Files | QDir::Dirs | QDir::All ;
return filter;
}
int OFileSelector::sorting() {
int sort;
if (m_case )
sort = ( QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed );
else
sort = ( QDir::Name | QDir::DirsFirst | QDir::Reversed );
return sort;
}
void OFileSelector::internFileSelected( const QString& s) {
emit fileSelected( s );
}
void OFileSelector::internFileSelected( const DocLnk& d ) {
emit fileSelected( d );
}
void OFileSelector::internContextMenu() {
emit contextMenu();
}
void OFileSelector::internChangedDir( const QString& s) {
emit dirSelected( s );
cd(s );
}
void OFileSelector::internChangedDir( const QDir& s) {
emit dirSelected( s );
}
QPixmap OFileSelector::pixmap( const QString& s ) {
return (*m_pixmaps)[s];
}
OLister* OFileSelector::currentLister()const {
return m_lister;
}
void OFileSelector::initializeOldSelector() {
qWarning("initializeOldSelector");
delete m_select;
// we need to initialize but keep the selected mimetype
/* we default not to show close and new buttons */
QString mime = currentMimeType();
qWarning("MimeType " + mime );
m_select = new FileSelector( mime ,
m_mainView, "fileselector",
FALSE, FALSE);
m_select->setCategorySelectVisible( FALSE );
- m_select->setTypeComboVisible( FALSE );
+ m_select->setTypeComboVisible( FALSE );
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_mainView->setWidget( m_select );
}
diff --git a/libopie/ofileselector/ofileselector.h b/libopie/ofileselector/ofileselector.h
index bf9a26b..3e834fb 100644
--- a/libopie/ofileselector/ofileselector.h
+++ b/libopie/ofileselector/ofileselector.h
@@ -1,168 +1,169 @@
/*
This is based on code and ideas of
L. J. Potter ljp@llornkcor.com
Thanks a lot
               =. This file is part of the OPIE Project
             .=l. Copyright (c) 2002 Holger Freyther <zecke@handhelds.org>
           .>+-=
 _;:,     .>    :=|. This library is free software; you can
.> <`_,   >  .   <= redistribute it and/or modify it under
:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
.="- .-=="i,     .._ License as published by the Free Software
 - .   .-<_>     .<> Foundation; either version 2 of the License,
     ._= =}       : or (at your option) any later version.
    .%`+i>       _;_.
    .i_,=:_.      -<s. This library is distributed in the hope that
     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
    : ..    .:,     . . . without even the implied warranty of
    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
..}^=.=       =       ; Library General Public License for more
++=   -.     .`     .: details.
 :     =  ...= . :.=-
 -.   .:....=;==+<; You should have received a copy of the GNU
  -_. . .   )=.  = Library General Public License along with
    --        :-=` this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#ifndef opiefileselector_h
#define opiefileselector_h
#include <qpe/fileselector.h>
#include <qdir.h>
#include <qwidget.h>
#include <qstring.h>
#include <qpixmap.h>
#include <qstringlist.h>
#include <qmap.h>
#include <qvaluelist.h>
#include <qpe/applnk.h>
#include <qlistview.h>
/** This is OPIEs FileDialog Widget. You can use it
* as a dropin replacement of the fileselector and
* or use any of the new features.
* This is also a complete FileSave and FileLoad widget
* If you look for a Dialog check OFileDialog
*
*/
class DocLnk;
class QCheckBox;
class QComboBox;
class QPushButton;
class QGridLayout;
class QLineEdit;
class QLabel;
class QWidgetStack;
class QHBoxLayout;
class QVBoxLayout;
class QPopupMenu;
class QFileInfo;
class QHBox;
class OFileView;
class OLister;
class OFileSelectorMain;
+class OFileFactory;
//
/* the mimetypes one name and a list of mimetypes */
typedef QMap< QString, QStringList> MimeTypes;
/**
* FIXME later
*/
struct OPopupMenuFactory {
OPopupMenuFactory() {}
};
/**
* Opie the default OFileSelector
* It features multiple views.
*/
class OFileSelector : public QWidget {
Q_OBJECT
/* friends are evil but I don't want to make the
* methods public
*/
friend class OLister;
friend class OFileView;
public:
/**
* The mode of the file selector
* Either open, save, fileselector or dir browsing mode
*
*/
enum Mode {Open = 1, Save = 2, Fileselector = 4, Dir = 8 };
/**
* Selector. Either Normal for the one shipped with
* libqpe or Extended. for the Extended
* ExtendedAll also shows 'hidden' files
*/
enum Selector{Normal=0, Extended = 1, ExtendedAll = 2};
/**
* This is reserved for futrue views
*/
enum View { Dirs = 1, Files = 2, Tree = 4, Icon = 8 };
/**
* A c'tor which should be used for advanced mode
* @param wid the parent
* @param mode the Mode of the Selector
* @param selector the current View of the Selector
* @param dirName in which dir to start
* @param fileName a proposed filename
* @param mimetypes A list of mimetypes \
* QString is for a identifier name like "Text files"
* the coresponding QStringList is used for the mimetypes
* if empty it'll fill the list of mimetypes depending
* on the content of the current directory
*/
OFileSelector(QWidget *wid, int mode, int selector,
const QString &dirName,
const QString &fileName = QString::null,
const MimeTypes &mimetypes = MimeTypes() );
/**
* This is a QPE compatible c'tor
*/
OFileSelector(const QString &mimeFilter, QWidget *parent,
const char *name, bool newVisible = TRUE,
bool closeVisible = FALSE );
~OFileSelector();
// currently only for the FileSelector Mode
/* compability mode but only work
* with FileSelector
*/
void setNewVisible( bool /*b*/ );
void setCloseVisible(bool /*b*/ );
// end file selector mode
// deprecated
void reread();
// make sure not to leak please
const DocLnk *selected();
// end deprecated
/**
* @return if the toolbar is visible
*/
bool isToolbarVisible() const { return m_shTool; };
/**
* @return if the permissionBas is visible
@@ -247,238 +248,241 @@ class OFileSelector : public QWidget {
/**
* set if to be case sensetive
*/
void setCaseSensetive(bool caSe );
/**
* @return if to show files
*/
bool showFiles()const { return m_files; };
/**
* set if files should be shown
*/
void setShowFiles(bool );
/**
* change dir to path
*/
bool cd(const QString &path );
/**
* return the mode of the fileselector
*/
int mode()const { return m_mode; };
/**
* return the selector
*/
int selector()const { return m_selector; };
/**
* set the Selector
*/
void setSelector( int );
/**
* wether or not to show popups
*/
bool showPopup()const { return m_showPopup; };
/**
* set show popups
*/
void setShowPopup( bool pop ) { m_showPopup = pop; }
/**
* set the popup factory
*/
void setPopupFactory( OPopupMenuFactory * );
/**
* reparse the current directory and updates
* the views + mimetypes
*/
void reparse(); // re reads the dir
/**
* return the selected name
*/
QString selectedName( )const;
/**
* for multiple selections return multiple
* filenames
*/
QStringList selectedNames()const;
/**
* return the complete to the file
*/
QString selectedPath() const;
/**
* return the completed paths
*/
QStringList selectedPaths() const;
/**
* the current directory
*/
QString directory()const;
/**
* fileCount
*/
int fileCount();
DocLnk selectedDocument()const;
QValueList<DocLnk> selectedDocuments()const;
OFileView* currentView();
OFileView* currentView()const;
OLister* currentLister()const;
+ OFileFactory* factory();
int filter();
int sorting();
QPixmap pixmap( const QString& );
/* our tool bar */
QWidget* toolBar();
signals:
void fileSelected( const DocLnk & );
void fileSelected( const QString & );
void dirSelected(const QString &dir );
void dirSelected( const QDir& );
void closeMe();
void ok();
void cancel();
void contextMenu();
private slots:
void slotOk();
void slotCancel();
void slotViewCheck(const QString & );
void slotMimeCheck(const QString & );
void slotLocationActivated(const QString & );
void slotInsertLocationPath(const QString &, int);
void locationComboChanged();
private:
void init();
void updateMimes();
private:
+ OFileFactory* m_fileFactory;
OFileSelectorMain* m_mainView;
OLister* m_lister;
OFileView* m_fileView;
FileSelector* m_select;
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,
*m_new,
*m_close;
QListView *m_View;
QCheckBox *m_checkPerm;
QWidget *m_pseudo;
QVBoxLayout *m_pseudoLayout;
QString m_currentDir;
QString m_name;
QMap<QString, QStringList> m_mimetypes;
QVBoxLayout *m_lay;
QGridLayout *m_Oselector;
QHBox *m_boxToolbar;
QHBox *m_boxOk;
QHBox *m_boxName;
QHBox *m_boxView;
QLineEdit *m_edit;
QLabel *m_fnLabel;
bool m_shClose : 1;
bool m_shNew : 1;
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;
bool m_showHidden : 1;
void initVars();
void delItems();
void initializeName();
void initializeYes();
void initializeChooser();
void initializePerm();
void initPics();
bool compliesMime(const QString &path,
const QString &mime);
bool compliesMime(const QString& mime );
/**
* Updates the QComboBox with the current mimetypes
*/
void updateMimeCheck();
void initializeOldSelector();
void initLister();
void initToolbar();
void initLocations();
void initializeView() {}; // FIXME
+ void initFactory();
/**
* Returns the current mimetype
*/
QString currentMimeType()const;
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 & );
// listview above
// popup below
virtual void slotDelete();
virtual void cdUP();
virtual void slotHome();
virtual void slotDoc();
virtual void slotNavigate( );
/* for OLister */
private:
/* for OFileView */
private:
void internFileSelected( const QString& );
void internFileSelected( const DocLnk& );
void internContextMenu();
void internChangedDir( const QString& );
void internChangedDir( const QDir& ) ;
};
#endif