summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/ofileselector/ofilelistview.cpp85
-rw-r--r--libopie/ofileselector/ofilelistview.h7
-rw-r--r--libopie/ofileselector/ofileselector.cpp283
-rw-r--r--libopie/ofileselector/ofileselector.h39
-rw-r--r--libopie/ofileselector/ofileview.cpp7
-rw-r--r--libopie/ofileselector/ofileview.h2
6 files changed, 153 insertions, 270 deletions
diff --git a/libopie/ofileselector/ofilelistview.cpp b/libopie/ofileselector/ofilelistview.cpp
index 7108a5b..bb15764 100644
--- a/libopie/ofileselector/ofilelistview.cpp
+++ b/libopie/ofileselector/ofilelistview.cpp
@@ -1,45 +1,70 @@
+#include <qheader.h>
+
#include <qpe/mimetype.h>
#include <qpe/resource.h>
+#include <qpe/qpeapplication.h>
#include "ofileselector.h"
#include "ofileselectoritem.h"
#include "ofilelistview.h"
OFileListView::OFileListView( QWidget* parent, OFileSelector* sel)
: QListView( parent ), OFileView( sel )
{
-
+ QPEApplication::setStylusOperation( viewport(),
+ QPEApplication::RightOnHold);
+ addColumn(" " );
+ addColumn(tr("Name"), 135 );
+ addColumn(tr("Size"), -1 );
+ addColumn(tr("Date"), 60 );
+ addColumn(tr("Mime Type"), -1 );
+ QHeader *head = header();
+ head->hide();
+ setSorting( 1 );
+ setAllColumnsShowFocus( TRUE );
+
+ connect(this, SIGNAL(selectionChanged() ),
+ this, SLOT(slotSelectionChanged() ) );
+
+ connect(this, SIGNAL(currentChanged(QListViewItem *) ),
+ this, SLOT(slotCurrentChanged(QListViewItem * ) ) );
+
+ connect(this, SIGNAL(mouseButtonClicked(int, QListViewItem*, const QPoint &, int) ),
+ this, SLOT(slotClicked( int, QListViewItem *, const QPoint &, int) ) );
+
+ connect(this, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )),
+ this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) );
}
OFileListView::~OFileListView() {
}
void OFileListView::clear() {
QListView::clear();
}
void OFileListView::addFile( const QString&,
QFileInfo* info,
bool isSymlink ) {
MimeType type( info->absFilePath() );
QPixmap pix = type.pixmap();
QString dir;
QString name;
bool locked = false;
if( pix.isNull() )
pix = Resource::loadPixmap( "UnknownDocument-14");
dir = info->dirPath( true );
if( isSymlink )
name = info->fileName() + " -> " +info->dirPath() + "/" + info->readLink();
else {
name = info->fileName();
if( ( selector()->mode() == OFileSelector::Open && !info->isReadable() ) ||
( selector()->mode() == OFileSelector::Save && !info->isWritable() ) ){
locked = true; pix = Resource::loadPixmap("locked");
}
}
new OFileSelectorItem( this, pix, name,
@@ -94,32 +119,90 @@ void OFileListView::addSymlink( const QString& /*mime*/, const QString& /*path*
const QString& /*file*/, bool /*isSym*/ ) {
}
void OFileListView::cd( const QString& ) {
}
QWidget* OFileListView::widget() {
return this;
}
QString OFileListView::selectedName()const{
QListViewItem *item = currentItem();
if (!item )
return QString::null;
return item->text( 1 );
}
QStringList OFileListView::selectedNames()const {
QStringList list;
list << selectedName();
return list;
}
QString OFileListView::selectedPath()const {
return QString::null;
}
QStringList OFileListView::selectedPaths()const {
QStringList list;
list << selectedPath();
return list;
}
int OFileListView::fileCount() {
return childCount();
}
+void OFileListView::sort() {
+ QListView::sort();
+}
+void OFileListView::slotSelectionChanged() {
+
+}
+void OFileListView::slotCurrentChanged( QListViewItem* item) {
+ if (!item )
+ return;
+
+ OFileSelectorItem* sel = (OFileSelectorItem*) item;
+
+ qWarning("current changed");
+ if(!sel->isDir() ){
+ updateLine( sel->text(1) );
+
+ if (selector()->mode() == OFileSelector::Fileselector ) {
+ QStringList str = QStringList::split("->", sel->text(1) );
+ QString path =sel->directory() + "/" + str[0].stripWhiteSpace();
+ DocLnk lnk( path );
+ fileSelected(lnk );
+ fileSelected( path );
+ }
+ }
+}
+void OFileListView::slotClicked( int button, QListViewItem* item,
+ const QPoint&, int ) {
+ if ( !item )
+ return;
+
+ if( button != Qt::LeftButton )
+ return;
+
+ OFileSelectorItem *sel = (OFileSelectorItem*)item;
+
+ if(!sel->isLocked() ){
+ QStringList str = QStringList::split("->", sel->text(1) );
+ if( sel->isDir() ){
+ changedDir( sel->directory() + "/" + str[0].stripWhiteSpace() );
+ }else{
+ updateLine( str[0].stripWhiteSpace() );
+ QString path = sel->directory();
+ path += "/";
+ path += str[0].stripWhiteSpace();
+
+ DocLnk lnk( path );
+ fileSelected( path );
+ fileSelected( lnk );
+ }
+ }
+}
+void OFileListView::slotRightButton( int button, QListViewItem* item,
+ const QPoint&, int ) {
+ if (!item || (button != Qt::RightButton ))
+ return;
+
+ /* raise contextmenu */
+}
diff --git a/libopie/ofileselector/ofilelistview.h b/libopie/ofileselector/ofilelistview.h
index c7e9223..a83d70d 100644
--- a/libopie/ofileselector/ofilelistview.h
+++ b/libopie/ofileselector/ofilelistview.h
@@ -3,43 +3,48 @@
#include <qlistview.h>
#include "ofileview.h"
class OFileListView : public QListView, public OFileView {
Q_OBJECT
public:
OFileListView( QWidget* parent, OFileSelector* );
~OFileListView();
void clear();
void addFile( const QString& mine,
QFileInfo* info,
bool isSymlink = FALSE );
void addFile( const QString& mime,
const QString& dir,
const QString& file,
bool = false );
void addDir( const QString& mime,
QFileInfo* info, bool = FALSE );
void addDir( const QString& mime, const QString& dir,
const QString& file, bool = FALSE );
void addSymlink( const QString& mime,
QFileInfo* info, bool = FALSE );
void addSymlink( const QString& mine, const QString& path,
const QString& file, bool isSymlink = FALSE );
void cd( const QString& path );
QWidget* widget();
+ void sort();
QString selectedName()const ;
QStringList selectedNames()const;
QString selectedPath()const;
QStringList selectedPaths()const;
int fileCount();
-
+private slots:
+ void slotSelectionChanged();
+ void slotCurrentChanged(QListViewItem* );
+ void slotClicked( int, QListViewItem*, const QPoint&, int );
+ void slotRightButton(int, QListViewItem*, const QPoint&, int );
};
#endif
diff --git a/libopie/ofileselector/ofileselector.cpp b/libopie/ofileselector/ofileselector.cpp
index 16ee3ee..98b61f7 100644
--- a/libopie/ofileselector/ofileselector.cpp
+++ b/libopie/ofileselector/ofileselector.cpp
@@ -2,104 +2,107 @@
#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 "ofileselector.h"
-
+#include "olister.h"
QMap<QString,QPixmap> *OFileSelector::m_pixmaps = 0;
namespace {
- int indexByString( const QComboBox *box, const QString &str ){
- int index= 0;
- for(int i= 0; i < box->count(); i++ ){
- if( str == box->text(i ) ){
- index= i;
- break;
- }
+ /* 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;
}
- 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();
- //QTimer::singleShot(6*1000, this, SLOT( slotTest() ) );
}
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_selector == Normal ){
delete m_select;
// we need to initialize but keep the selected mimetype
QString mime = currentMimeType();
m_select = new FileSelector( mime ,
@@ -125,64 +128,65 @@ void OFileSelector::setCloseVisible( bool visible )
m_close->show();
}
}
void OFileSelector::reread()
{
if( m_selector == Normal ){
setNewVisible( m_shNew ); // make it a initializeSelector
}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 :(
m_shYesNo = show;
if( m_shYesNo )
m_boxOk->show();
else
m_boxOk->hide();
}
void OFileSelector::setToolbarVisible( bool show )
{
m_shTool = show;
initializeListView(); // FIXME see above waste of memory
+
if(!m_shTool ){
m_location->hide();
m_up->hide();
m_homeButton->hide();
m_docButton->hide();
}else{
m_location->show();
m_up->show();
m_homeButton->show();
m_docButton->show();
}
}
void OFileSelector::setPermissionBarVisible( bool show )
{
m_shPerm = show;
initializePerm();
if( m_shPerm )
m_checkPerm->show();
else
m_checkPerm->hide();
}
void OFileSelector::setLineEditVisible( bool show )
{
if( show ){
initializeName();
m_boxName->show();
}else{
if( m_shLne && m_boxName != 0 ){ // check if we showed before this is the way to go
m_boxName->hide();
}
}
m_shLne = show;
@@ -603,84 +607,64 @@ void OFileSelector::initVars()
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_stack = 0;
m_lay = 0;
m_Oselector = 0;
m_boxToolbar = 0;
m_boxOk = 0;
m_boxName = 0;
m_boxView = 0;
m_custom = 0;
m_edit = 0;
m_fnLabel = 0;
m_new = 0;
m_close = 0;
}
-void OFileSelector::addFile(const QString &, QFileInfo *info, bool )
-{
- if(!m_files)
- return;
- // if( !compliesMime(info->absFilePath(), mime ) )
- // return;
- MimeType type( info->absFilePath() );
- if (!compliesMime( type.id() ) )
- return;
-
-}
-void OFileSelector::addDir(const QString &, QFileInfo *, bool )
-{
- if(!m_dir)
- return;
-}
-void OFileSelector::delItems()
-{
-
-}
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 );
@@ -700,64 +684,65 @@ void OFileSelector::initializeYes()
}
}
/*
* 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 & ) ) );
}
}
void OFileSelector::initializeListView()
{
qWarning("initializeListView");
if( m_pseudo == 0 ){
qWarning("init");
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
{
// location QComboBox
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"),"",
m_boxToolbar,"cdUpButton");
@@ -785,478 +770,282 @@ void OFileSelector::initializeListView()
m_close->setFixedSize( 20, 20 );
m_boxToolbar->setFixedHeight( 20 );
m_pseudoLayout->addWidget(m_boxToolbar );
// 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 );
// due to the New and Close button we can not simply hide m_boxToolBar to not show it
if( !m_shTool ){
m_location->hide( );
m_up->hide( );
m_homeButton->hide( );
m_docButton->hide( );
}
if(!m_shClose )
m_close->hide();
//if(!m_shNew)
//m_close->hide();
} // off toolbar
// the Main ListView
// make a QWidgetStack first so Views can share the Toolbar
- m_View = new QListView( m_pseudo, "Extended view");
- QPEApplication::setStylusOperation( m_View->viewport(),
- QPEApplication::RightOnHold);
- m_View->addColumn(" " );
- m_View->addColumn(tr("Name"), 135 );
- m_View->addColumn(tr("Size"), -1 );
- m_View->addColumn(tr("Date"), 60 );
- 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) ),
- 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 ) ) );
-
- 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("Set Permission"), this, "perm");
m_checkPerm->setChecked( false );
m_lay->addWidget( m_checkPerm );
-
}
}
void OFileSelector::initPics()
{
m_pixmaps = new QMap<QString,QPixmap>;
QPixmap pm = Resource::loadPixmap( "folder" );
QPixmap lnk = Resource::loadPixmap( "opie/symlink" );
+
QPainter painter( &pm );
painter.drawPixmap( pm.width()-lnk.width(), pm.height()-lnk.height(), lnk );
pm.setMask( pm.createHeuristicMask( FALSE ) );
m_pixmaps->insert("dirsymlink", pm );
QPixmap pm2 = Resource::loadPixmap( "lockedfolder" );
QPainter pen(&pm2 );
pen.drawPixmap(pm2.width()-lnk.width(), pm2.height()-lnk.height(), lnk );
pm2.setMask( pm2.createHeuristicMask( FALSE ) );
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
*/
/*
* We've the mimetype of the file
* We need to get the stringlist of the current mimetype
*
* mime = image/jpeg
* QStringList = 'image/*'
* or QStringList = image/jpeg;image/png;application/x-ogg
* or QStringList = application/x-ogg;image/*;
* with all these mime filters it should get acceptes
* to do so we need to look if mime is contained inside
* the stringlist
* if it's contained return true
* if not ( I'm no RegExp expert at all ) we'll look if a '/*'
* is contained in the mimefilter and then we will
* look if both are equal until the '/'
*/
bool OFileSelector::compliesMime( const QString& mime ) {
qWarning("mimetype is %s", mime.latin1() );
QString currentText;
if (m_shChooser )
currentText = m_mimeCheck->currentText();
qWarning("current text is %s", currentText.latin1() );
QMap<QString, QStringList>::Iterator it;
QStringList list;
if ( currentText == tr("All") ) return true;
else if ( currentText.isEmpty() && !m_mimetypes.isEmpty() ) {
it = m_mimetypes.begin();
list = it.data();
}else if ( currentText.isEmpty() ) return true;
else{
it = m_mimetypes.find(currentText );
if ( it == m_mimetypes.end() ) qWarning("not there"), list << currentText;
else qWarning("found"), list = it.data();
}
- // dump it now
- //for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) {
- // qWarning( "%s", (*it).latin1() );
- //}
if ( list.contains(mime) ) return true;
qWarning("list doesn't contain it ");
QStringList::Iterator it2;
int pos;
for ( it2 = list.begin(); it2 != list.end(); ++it2 ) {
pos = (*it2).findRev("/*");
if ( pos >= 0 ) {
if ( mime.contains( (*it2).left(pos) ) ) return true;
}
}
return false;
}
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()
-{
-
-}
-void OFileSelector::slotCurrentChanged(QListViewItem* /*item*/ )
-{
- /*
- if( item == 0 )
- return;
- if( m_selector == Extended || m_selector == ExtendedAll ) {
- OFileSelectorItem *sel = (OFileSelectorItem*) item; // start to use the C++ casts ;)
- qWarning("current changed");
- if(!sel->isDir() ){
- if( m_shLne )
- m_edit->setText( sel->text(1) );
-
- if (m_mode == Fileselector ) {
- QStringList str = QStringList::split("->", sel->text(1) );
- QString path =sel->directory() + "/" + str[0].stripWhiteSpace();
- emit fileSelected(path );
- DocLnk lnk( path );
- emit fileSelected(lnk );
- }
- }
- } */
-}
-void OFileSelector::slotClicked( int /*button*/, QListViewItem */*item*/, const QPoint &, int)
-
-{
- /*
- if ( item == 0 )
- return;
-
- if( button != Qt::LeftButton )
- return;
-
- switch( m_selector ){
- default:
- break;
- case Extended: // fall through
- case ExtendedAll:{
- OFileSelectorItem *sel = (OFileSelectorItem*)item;
- if(!sel->isLocked() ){
- QStringList str = QStringList::split("->", sel->text(1) );
- if( sel->isDir() ){
- cd( sel->directory() + "/" + str[0].stripWhiteSpace() );
- // if MODE Dir m_shLne set the Text
- }else{
- if( m_shLne )
- m_edit->setText( str[0].stripWhiteSpace() );
- qWarning("selected here in slot clicked");
- emit fileSelected( sel->directory() + "/" + str[0].stripWhiteSpace() );
- DocLnk lnk( sel->directory() + "/" + str[0].stripWhiteSpace() );
- qWarning("file selected");
- emit fileSelected( lnk );
- }
- }
- break;
- }
- } */
-}
-void OFileSelector::slotRightButton(int button, QListViewItem *item, const QPoint &, int )
-{
- if( item == 0 )
- return;
- if( button != Qt::RightButton )
- return;
- slotContextMenu( item );
-}
-void OFileSelector::slotContextMenu( QListViewItem */*item*/)
-{
-
-}
-void OFileSelector::slotChangedDir()
-{
- /*
- OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem();
- if(sel->isDir() ){
- QStringList str = QStringList::split("->", sel->text(1) );
- cd( sel->directory() + "/" + str[0].stripWhiteSpace() );
- }
- */
-}
-void OFileSelector::slotOpen()
-{
- /*
- OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem();
- if(!sel->isDir() ){
- QStringList str = QStringList::split("->", sel->text(1) );
- slotFileSelected( sel->directory() +"/" +str[0].stripWhiteSpace() );
- qWarning("slot open");
- // DocLnk lnk( sel->directory() + "/" + str[0].stripWhiteSpace() );
- //emit fileSelected( lnk );
- }
- */
-}
-void OFileSelector::slotRescan()
-{
-}
-void OFileSelector::slotRename()
-{
- reparse();
-}
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;
- if( m_selector == Extended || m_selector == ExtendedAll )
- m_View->clear();
- else // custom view
- ; // currentView()->clear();
+
+ 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
- QDir dir( m_currentDir );
- dir.setFilter( QDir::Files | QDir::Readable );
- 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.insert( type.id(), type.id() );
- }
-
- ++it;
- }
+ 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 ){
+ if( m_shChooser )
currentMimeType = m_mimeCheck->currentText();
-// updateMimeCheck();
- }
+
}
// now we got our mimetypes we can add the files
- QDir dir( m_currentDir );
+ currentLister()->reparse( m_currentDir );
+ /* we're done with adding let's sort */
+ currentView()->sort();
+
- int sort;
- if ( m_case )
- sort = (QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed);
- else
- sort = (QDir::Name | QDir::DirsFirst | QDir::Reversed);
- dir.setSorting( sort );
-
- int filter;
- if( m_selector == ExtendedAll /*|| 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();
- QFileInfoListIterator it( *list );
- QFileInfo *fi;
- while( (fi=it.current() ) ){
- //qWarning("True and only" );
- if( fi->fileName() == QString::fromLatin1("..") || fi->fileName() == QString::fromLatin1(".") ){
- //qWarning(".. or ." );
- ++it;
- continue;
- }
- if( fi->isSymLink() ){
- QString file = fi->dirPath( true ) + "/" + fi->readLink();
- for( int i = 0; i<=4; i++) { // 5 tries to prevent dos
- QFileInfo info( file );
- if( !info.exists() ){
- addSymlink( currentMimeType, fi, TRUE );
- break;
- }else if( info.isDir() ){
- addDir( currentMimeType, fi, TRUE );
- break;
- }else if( info.isFile() ){
- addFile( currentMimeType, fi, TRUE );
- break;
- }else if( info.isSymLink() ){
- file = info.dirPath(true ) + "/" + info.readLink() ;
- break;
- }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();
if( m_shTool ){
m_location->insertItem( m_currentDir );
}
// reenable painting and updates
}
OFileView* OFileSelector::currentView() {
return 0l;
}
OFileView* OFileSelector::currentView() const{
return 0l;
}
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 0l;
+}
diff --git a/libopie/ofileselector/ofileselector.h b/libopie/ofileselector/ofileselector.h
index 12af732..a7b363f 100644
--- a/libopie/ofileselector/ofileselector.h
+++ b/libopie/ofileselector/ofileselector.h
@@ -39,64 +39,65 @@
#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;
//
/* 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
*
*/
@@ -308,169 +309,167 @@ class OFileSelector : public QWidget {
/**
* 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;
int filter();
int sorting();
QPixmap pixmap( const QString& );
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:
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;
+ 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;
-// QStringList m_mimetypes;
+ QString m_currentDir;
+ QString m_name;
QMap<QString, QStringList> m_mimetypes;
QWidgetStack *m_stack;
QVBoxLayout *m_lay;
QGridLayout *m_Oselector;
QHBox *m_boxToolbar;
- QHBox *m_boxOk; // (no layout anymore) wait
- QHBox *m_boxName; // (no Layout anymore) wait
+ QHBox *m_boxOk;
+ QHBox *m_boxName;
QHBox *m_boxView;
QPopupMenu *m_custom;
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;
void initVars();
- 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 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();
/**
* 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 & );
- 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 above
// popup below
- 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( );
/* 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
diff --git a/libopie/ofileselector/ofileview.cpp b/libopie/ofileselector/ofileview.cpp
index 9bb40c9..38f722c 100644
--- a/libopie/ofileselector/ofileview.cpp
+++ b/libopie/ofileselector/ofileview.cpp
@@ -1,31 +1,36 @@
+#include <qlineedit.h>
+
#include <qpe/applnk.h>
#include "ofileselector.h"
-
#include "ofileview.h"
OFileView::OFileView( OFileSelector* sel)
: m_sel( sel )
{
}
OFileView::~OFileView() {
}
void OFileView::fileSelected( const QString& s ) {
m_sel->internFileSelected( s );
}
void OFileView::fileSelected( const DocLnk& s) {
m_sel->internFileSelected( s );
}
void OFileView::contextMenu() {
m_sel->internContextMenu();
}
void OFileView::changedDir( const QString& s) {
m_sel->internChangedDir( s );
}
void OFileView::changedDir( const QDir& d ) {
m_sel->internChangedDir( d );
}
OFileSelector* OFileView::selector() const {
return m_sel;
}
+void OFileView::updateLine( const QString& str ) {
+ if (m_sel->m_shLne )
+ m_sel->m_edit->setText( str );
+}
diff --git a/libopie/ofileselector/ofileview.h b/libopie/ofileselector/ofileview.h
index 1b397f5..a4b1748 100644
--- a/libopie/ofileselector/ofileview.h
+++ b/libopie/ofileselector/ofileview.h
@@ -52,58 +52,60 @@ public:
OFileView();
virtual ~OFileView();
virtual void clear() = 0;
virtual void addFile(const QString &mine,
QFileInfo *info,
bool isSymlink = FALSE ) = 0;
virtual void addFile(const QString& mine, const QString& dir,
const QString& file, bool = FALSE ) = 0;
virtual void addDir (const QString &mine,
QFileInfo *info,
bool isSymlink = FALSE ) = 0;
virtual void addDir (const QString& mine, const QString& dir,
const QString& file, bool = FALSE) = 0;
virtual void addSymlink(const QString &mime,
QFileInfo *info,
bool isSymlink = FALSE ) = 0;
virtual void addSymlink(const QString& mine,
const QString& path,
const QString& file,
bool isSymlink = FALSE ) = 0;
virtual void cd(const QString &path ) = 0;
virtual QWidget* widget() = 0;
virtual QString selectedName()const = 0;
virtual QStringList selectedNames()const = 0;
virtual QString selectedPath()const = 0;
virtual QStringList selectedPaths()const = 0;
virtual int fileCount() = 0;
+ virtual void sort() =0;
/*signals:*/
protected:
void fileSelected(const QString &);
void fileSelected(const DocLnk & );
void contextMenu();
void changedDir(const QString &);
void changedDir(const QDir & );
+ void updateLine( const QString& );
OFileSelector* selector()const;
private:
OFileSelector* m_sel;
};
class OFileViewFactory {
public:
OFileViewFactory() {} ;
virtual ~OFileViewFactory() = 0;
OFileView* newView(QWidget *parent, const char *name );
QString name()const;
};
#endif