summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2002-04-24 03:22:24 (UTC)
committer llornkcor <llornkcor>2002-04-24 03:22:24 (UTC)
commit219994e9d1de70b44c994ccee57060741f22d428 (patch) (side-by-side diff)
tree2acfcae2a6bfc432266ee1d0cb76285a95fe683f
parentc9159a3d5192799f5b2911d13337f04f50b1ac5a (diff)
downloadopie-219994e9d1de70b44c994ccee57060741f22d428.zip
opie-219994e9d1de70b44c994ccee57060741f22d428.tar.gz
opie-219994e9d1de70b44c994ccee57060741f22d428.tar.bz2
fixed location combo showing redundant directories and multiple seperators
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/ofileselector.cc123
-rw-r--r--libopie/ofileselector.h15
2 files changed, 111 insertions, 27 deletions
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc
index cb18039..d1f1e1f 100644
--- a/libopie/ofileselector.cc
+++ b/libopie/ofileselector.cc
@@ -37,16 +37,18 @@
#include <qcheckbox.h>
#include <qlabel.h>
#include <qheader.h>
#include <qdir.h>
#include <qpainter.h>
#include <qaction.h>
#include <qpopupmenu.h>
#include <qcursor.h>
+#include <qstringlist.h>
+#include <qmessagebox.h>
#include <qpe/qpeapplication.h>
#include <qpe/fileselector.h>
#include <qpe/applnk.h>
#include <qpe/global.h>
#include <qpe/mimetype.h>
#include <qpe/resource.h>
#include <qpe/storage.h>
@@ -129,16 +131,17 @@ OFileSelector::OFileSelector(QWidget *wid, int mode, int selector, const QString
if(m_pixmaps == 0 ) // init the pixmaps
initPics();
m_lay = new QVBoxLayout(this);
init();
m_edit->setText( fileName );
}
+
void OFileSelector::initPics()
{
qWarning("init pics" );
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 );
@@ -146,17 +149,18 @@ void OFileSelector::initPics()
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 );
-};
+}
+
// let's initialize the gui
/**
--------------------
| cmbBox Button |
--------------------
| FileSlector |
| or |
| OSelector |
@@ -174,16 +178,17 @@ void OFileSelector::initPics()
*/
void OFileSelector::delItems()
{
QLayoutIterator it = m_lay->iterator();
while ( it.current() != 0 ){
it.deleteCurrent();
}
}
+
void OFileSelector::init()
{
m_stack = new QWidgetStack(this, "wstack" );
if( m_selector == NORMAL ){
QString currMime;
if( m_mimeCheck != 0 )
currMime = m_mimeCheck->currentText();
@@ -211,17 +216,17 @@ void OFileSelector::init()
if( m_shChooser )
initializeChooser();
if(m_shYesNo )
initializeYes();
-};
+}
void OFileSelector::setYesCancelVisible( bool show )
{
if ( show == m_shYesNo )
return;
m_shYesNo = show;
if( !show ){
delete m_ok;
@@ -256,94 +261,105 @@ void OFileSelector::setPermissionBarVisible( bool show )
{
if( show == m_shPerm )
return;
m_shPerm = show;
updateLay();
}
+
void OFileSelector::setLineEditVisible( bool show )
{
if( show == m_shLne )
return;
m_shLne = show;
if( !show ){
delete m_edit;
delete m_fnLabel;
m_edit = 0;
m_fnLabel = 0;
//delete m_boxName; will be deleted
}
updateLay();
}
+
void OFileSelector::setChooserVisible( bool show )
{
if( show = m_shChooser )
return;
m_shChooser = show;
if( !show ){
delete m_mimeCheck;
delete m_viewCheck;
m_mimeCheck = 0;
m_viewCheck = 0;
}
updateLay();
}
+
QCheckBox* OFileSelector::permissionCheckbox( )
{
return m_checkPerm;
}
+
void OFileSelector::setCaseSensetive( bool caSe )
{
m_case = caSe;
reparse();
}
+
void OFileSelector::setShowFiles(bool files ){
m_files = files;
reparse();
}
+
void OFileSelector::setPopupMenu(QPopupMenu *pop )
{
//delete oldpopup;
m_custom = pop;
}
+
bool OFileSelector::setPermission( ) const
{
if( m_checkPerm == 0 )
return false;
else
return m_checkPerm->isChecked();
}
+
void OFileSelector::setPermissionChecked( bool check )
{
if( m_checkPerm == 0 )
return;
m_checkPerm->setChecked( check );
}
+
QString OFileSelector::selectedName( )const
{
QString string;
if( m_selector == NORMAL ){
const DocLnk *lnk = m_select->selected();
string = lnk->file();
}else if(m_selector == EXTENDED || m_selector == EXTENDED_ALL ) {
QListViewItem *item = m_View->currentItem();
if(item != 0 ){
string = m_currentDir + "/" + item->text( 1 );
}
}
return string;
}
+
QStringList OFileSelector::selectedNames()const
{
QStringList list;
return list;
}
+
DocLnk OFileSelector::selectedDocument( )const
{
DocLnk lnk;
return lnk;
}
void OFileSelector::updateLay()
{
/* if( m_shTool )
@@ -380,16 +396,17 @@ void OFileSelector::updateLay()
delete m_stack;
//delete m_list;
init();
if( m_shLne )
m_edit->setText(text );
if( m_shPerm )
m_checkPerm->setChecked(check );
}
+
// let's update the mimetypes. Use the current mimefilter for the 2nd QDir retrieve
// insert QListViewItems with the right options
bool OFileSelector::compliesMime(const QString &path, const QString &mime )
{
if( mime == "All" )
return true;
MimeType type( path );
if( type.id() == mime )
@@ -427,16 +444,17 @@ void OFileSelector::reparse()
++it;
}
m_mimetypes.prepend("All" );
m_mimeCheck->insertStringList(m_mimetypes );
// set it to the current mimetype
m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currMime ) );
};
+
QDir dir( m_currentDir );
//dir.setFilter(-1 );
int sort = QDir::Name | QDir::DirsFirst | QDir::Reversed;
if( m_case )
sort = QDir::IgnoreCase;
dir.setSorting( sort );
int filter;
@@ -492,28 +510,33 @@ void OFileSelector::reparse()
addDir(currMime, fi );
}else if( fi->isFile() ) { // file ?
addFile(currMime, fi );
}
++it;
}
m_View->sort();
}
+
QString OFileSelector::directory()const
{
- return m_currentDir;
+ QDir d( m_currentDir);
+ return d.absPath();
}
+
int OFileSelector::fileCount()
{
return 0;
}
+
void OFileSelector::slotOk( )
{
emit ok();
}
+
void OFileSelector::slotCancel( )
{
emit cancel();
}
void OFileSelector::initializeName()
{
m_boxName = new QHBoxLayout(this );
@@ -521,31 +544,33 @@ void OFileSelector::initializeName()
m_fnLabel = new QLabel(this );
m_fnLabel->setText(tr("Name:") );
m_boxName->addWidget(m_fnLabel );
m_boxName->insertSpacing(1, 8 );
m_boxName->addWidget(m_edit, 100 );
m_lay->addLayout(m_boxName);
}
+
void OFileSelector::initializeYes()
{
m_ok = new QPushButton("&Save", this, "save" );
m_cancel = new QPushButton("C&ancel", this, "cancel" );
m_boxOk = new QHBoxLayout(this );
m_boxOk->addWidget( m_ok, Qt::AlignHCenter );
m_boxOk->insertSpacing(1, 8 );
m_boxOk->addWidget( m_cancel, Qt::AlignHCenter);
m_lay->addLayout(m_boxOk );
connect(m_ok, SIGNAL(clicked() ),
this, SLOT(slotOk() ) );
connect(m_cancel, SIGNAL(clicked() ),
this, SLOT(slotCancel() ) );
}
+
void OFileSelector::initializeChooser()
{
m_boxView = new QHBoxLayout(this );
m_mimeCheck = new QComboBox(this, "mime check");
m_viewCheck = new QComboBox(this, "view check");
m_boxView->addWidget(m_viewCheck, 0 );
m_boxView->insertSpacing(2, 8 );
@@ -565,16 +590,17 @@ void OFileSelector::initializeChooser()
// }
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::slotMimeCheck(const QString &view ){
if(m_selector == NORMAL ){
delete m_select;
m_select = new FileSelector(view == "All" ? QString::null : view
, m_stack, "fileselector", FALSE, FALSE );
m_stack->addWidget( m_select, NORMAL );
m_stack->raiseWidget( NORMAL );
}else{
@@ -640,17 +666,17 @@ void OFileSelector::slotViewCheck(const QString &view ){
m_select = 0;
delete m_View;
m_View = 0;
m_selector = EXTENDED_ALL;
initializeListView();
reparse();
};
-};
+}
void OFileSelector::updateMimes() // lets check which mode is active
// check the current dir for items then
{
m_mimetypes.clear();
m_mimetypes.append("All" );
if( m_selector == NORMAL ){
@@ -660,17 +686,18 @@ void OFileSelector::updateMimes() // lets check which mode is active
for ( ; dit.current(); ++dit ) {
if( !m_mimetypes.contains((*dit)->type() ) )
m_mimetypes.append( (*dit)->type() );
}
}else{
// should be allreday updatet
;
}
-};
+}
+
void OFileSelector::initializeListView()
{
// just to make sure but clean it up better FIXME
delete m_View;
m_View = 0;
delete m_boxToolbar;
delete m_homeButton;
delete m_docButton;
@@ -688,16 +715,17 @@ void OFileSelector::initializeListView()
m_pseudoLayout = 0;
// time for the toolbar
m_pseudo = new QWidget(m_stack, "Pseudo Widget");
m_pseudoLayout = new QVBoxLayout(m_pseudo );
if(m_shTool ){
m_boxToolbar = new QHBoxLayout( );
m_boxToolbar->setAutoAdd( true );
m_location = new QComboBox(m_pseudo );
+ connect( m_location, SIGNAL(activated(const QString &) ), this, SLOT( locationComboActivated(const QString & ) ) );
m_up = new QPushButton(Resource::loadIconSet("up"),"", m_pseudo,"cdUpButton");
m_up->setFixedSize( QSize( 20, 20 ) );
connect(m_up ,SIGNAL(clicked()),this,SLOT(cdUP() ) );
m_up->setFlat(TRUE);
m_homeButton = new QPushButton(Resource::loadIconSet("home") , "", m_pseudo);
m_homeButton->setFixedSize( QSize( 20, 20 ) );
@@ -800,16 +828,17 @@ void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink )
}
}
}
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;
//if( showDirs )
{
bool locked=false;
QString name;
@@ -837,40 +866,44 @@ void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink )
}
new OFileSelectorItem(m_View, pix,
name, info->lastModified().toString(),
QString::number(info->size() ),info->dirPath(true), locked, true );
}
}
+
void OFileSelector::setShowDirs(bool dir )
{
m_dir = dir;
reparse();
}
void OFileSelector::slotFileSelected(const QString &string )
{
if(m_shLne )
m_edit->setText( string );
emit fileSelected( string );
// do AppLnk stuff
}
+
void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk )
{
slotFileSelected(lnk.name() );
emit fileSelected( lnk );
}
+
void OFileSelector::slotSelectionChanged() // get the current items
// fixme
{
qWarning("selection changed" );
}
+
void OFileSelector::slotCurrentChanged(QListViewItem *item )
{
qWarning("current changed" );
if( item == 0 )
return;
if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ){
OFileSelectorItem *sel = (OFileSelectorItem*)item;
@@ -880,55 +913,58 @@ void OFileSelector::slotCurrentChanged(QListViewItem *item )
m_edit->setText(sel->text(1) );
qWarning("setTexy" );
}
}
}else {
qWarning("mode not extended" );
}
}
+
// either select or change dir
void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint &point, int )
{
if( item == 0 )
return;
if( button != Qt::LeftButton )
return;
qWarning("clicked" );
if(m_selector == EXTENDED || m_selector == EXTENDED_ALL ){
qWarning("inside" );
OFileSelectorItem *sel = (OFileSelectorItem*)item;
if(!sel->isLocked() ){ // not locked either changedir or open
QStringList str = QStringList::split("->", sel->text(1) );
if(sel->isDir() ){
- cd( sel->directory() + "/" + str[0] );
- }else{
- qWarning("file" );
- if(m_shLne )
- m_edit->setText(str[0] );
- emit fileSelected(str[0] );
- // emit DocLnk need to do it
+ cd( sel->directory() + "/" + str[0] );
+ } else {
+ qWarning("file" );
+ if(m_shLne )
+ m_edit->setText(str[0] );
+ emit fileSelected(str[0] );
+ // emit DocLnk need to do it
}
- }else{
+ } else {
qWarning( "locked" );
}
};
}
+
void OFileSelector::slotRightButton(int button, QListViewItem *item, const QPoint &, int )
{
if (item == 0 )
return;
if( button != Qt::RightButton )
return;
qWarning("right button" );
slotContextMenu(item);
}
+
void OFileSelector::slotContextMenu(QListViewItem *item)
{
qWarning("context menu" );
if( item ==0 || !m_showPopup )
return;
if( m_custom !=0){
m_custom->exec();
@@ -970,88 +1006,133 @@ void OFileSelector::slotContextMenu(QListViewItem *item)
delItem.setText( tr("Delete") );
delItem.addTo(&menu );
connect(&delItem, SIGNAL(activated() ),
this, SLOT(slotDelete() ) );
menu.exec(QCursor::pos() );
}
}
+
bool OFileSelector::cd(const QString &str )
{
qWarning(" dir %s", str.latin1() );
QDir dir( str);
if(dir.exists() ){
- m_currentDir = str;
+ m_currentDir = dir.absPath();
reparse();
if(m_shTool ){
- int count = m_location->count();
- m_location->insertItem(str );
+ int count = m_location->count();
+ insertLocationPath( str ,count );
m_location->setCurrentItem( count );
}
return true;
}
return false;
}
+void OFileSelector::insertLocationPath(const QString &currentPath, int count) {
+ QStringList pathList;
+ for(int i=0;i<count;i++) {
+ pathList << m_location->text(i);
+ }
+ if( pathList.grep( currentPath,TRUE).isEmpty() ) {
+ m_location->clear();
+ if( currentPath.left(2)=="//")
+ pathList.append( currentPath.right(currentPath.length()-1) );
+ else
+ pathList.append( currentPath );
+ m_location->insertStringList( pathList,-1);
+ }
+}
+
void OFileSelector::slotChangedDir()
{
OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem();
if(sel->isDir() ){
QStringList str = QStringList::split("->", sel->text(1) );
cd( sel->directory() + "/" + str[0] );
+
}
}
+
void OFileSelector::slotOpen()
{
OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem();
if(!sel->isDir() ){
QStringList str = QStringList::split("->", sel->text(1) );
slotFileSelected( str[0] );
}
}
+
void OFileSelector::slotRescan()
{
reparse();
}
+
void OFileSelector::slotRename()
{
// rename inline
}
+
void OFileSelector::slotDelete()
{
qWarning("delete slot" );
OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem();
QStringList list = QStringList::split("->", sel->text(1) );
if( sel->isDir() ){
- QString str = QString::fromLatin1("rm -rf ") + list[0];
- ::system(str.utf8().data() );
- }else{
+ QString str = QString::fromLatin1("rm -rf ") + 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();
- m_location->insertItem(m_currentDir );
- m_location->setCurrentItem( count );
+ insertLocationPath( m_currentDir,count );
+ m_location->setCurrentItem( indexFromString(m_currentDir ));
+//this wont work in all instances
+ // FIXME
}
}
+
+int OFileSelector::indexFromString(const QString &str) {
+
+ for(int i=0;i< m_location->count();i++) {
+ if(str == m_location->text(i))
+ return i;
+ }
+ return 0;
+}
+
void OFileSelector::slotHome()
{
cd(QDir::homeDirPath() );
}
+
void OFileSelector::slotDoc()
{
cd(QDir::homeDirPath() + "/Documents" );
}
+
void OFileSelector::slotNavigate()
{
}
+
+void OFileSelector::locationComboActivated(const QString & file ) {
+ cd(file.left(file.find("<-",0,TRUE)));
+ reparse();
+}
diff --git a/libopie/ofileselector.h b/libopie/ofileselector.h
index 5e98a1e..81a9e63 100644
--- a/libopie/ofileselector.h
+++ b/libopie/ofileselector.h
@@ -62,18 +62,18 @@ class QWidgetStack;
class QHBoxLayout;
class QVBoxLayout;
class QPopupMenu;
class QFileInfo;
//
class OFileSelectorItem : public QListViewItem {
public:
OFileSelectorItem(QListView *view, const QPixmap &pixmap, const QString &path,
- const QString &date, const QString &size, const QString &mDir,
- bool isLocked=false, bool isDir=false ): QListViewItem(view) {
+ const QString &date, const QString &size, const QString &mDir,
+ bool isLocked=false, bool isDir=false ): QListViewItem(view) {
setPixmap(0, pixmap );
setText(1, path );
setText(2, size );
setText(3, date );
//setText(4, mDir );
m_dir = mDir;
dir = isDir;
mLocked = isLocked;
@@ -89,21 +89,21 @@ class OFileSelectorItem : public QListViewItem {
}
QString path()const{
return text(1 );
}
QString key(int id, bool )const {
QString ke;
if( id == 0 || id == 1 ){ // name
if( dir ){
- ke.append("0" );
- ke.append( text(1) );
+ ke.append("0" );
+ ke.append( text(1) );
}else{
- ke.append("1" );
- ke.append( text(1) );
+ ke.append("1" );
+ ke.append( text(1) );
}
}else if( id == 2 ){ // size
return text(2);
}else if( id == 3 ){ // date
return text(3);
}
return ke;
};
@@ -185,16 +185,19 @@ class OFileSelector : public QWidget {
void ok();
void cancel();
protected slots:
void slotOk();
void slotCancel();
void slotViewCheck(const QString & );
void slotMimeCheck(const QString & );
+ void locationComboActivated(const QString & );
+ void insertLocationPath(const QString &, int);
+ int indexFromString(const QString &);
protected:
void init();
void updateMimes();
protected:
private:
int m_mode, m_selector;