summaryrefslogtreecommitdiff
authorzecke <zecke>2002-04-01 01:48:02 (UTC)
committer zecke <zecke>2002-04-01 01:48:02 (UTC)
commit9a68bd2411e65eb6c51aead50a5b0b670174458d (patch) (side-by-side diff)
tree05ab085d430edc2e821ea890da600774abc30f01
parent84850cd8811fc29aa39ecd2452884bf48ea27e92 (diff)
downloadopie-9a68bd2411e65eb6c51aead50a5b0b670174458d.zip
opie-9a68bd2411e65eb6c51aead50a5b0b670174458d.tar.gz
opie-9a68bd2411e65eb6c51aead50a5b0b670174458d.tar.bz2
Almost done ||
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--libopie/ofileselector.cc23
-rw-r--r--libopie/ofileselector.h4
2 files changed, 25 insertions, 2 deletions
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc
index 14f035e..fbe69ed 100644
--- a/libopie/ofileselector.cc
+++ b/libopie/ofileselector.cc
@@ -558,502 +558,523 @@ void OFileSelector::initializeChooser()
else{ // check
updateMimes();
m_mimeCheck->insertStringList( m_mimetypes );
}
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{
reparse();
}
}
void OFileSelector::slotViewCheck(const QString &view ){
qWarning("changed: show %s", view.latin1() );
// if the current view is the one
QString currMime = m_mimeCheck->currentText();
if( view == QString::fromLatin1("Documents") ){
// get the mimetype now
// check if we're the current widget and return
if( m_View != 0) { // delete 0 shouldn't crash but it did :(
delete m_View;
delete m_boxToolbar;
delete m_homeButton;
delete m_docButton;
delete m_location;
delete m_up;
delete m_pseudo;
delete m_pseudoLayout;
}
m_View = 0;
m_boxToolbar = 0;
m_homeButton = 0;
m_docButton = 0;
m_location = 0;
m_up = 0;
m_pseudo = 0;
m_pseudoLayout = 0;
delete m_select;
m_select = new FileSelector( currMime == "All" ? QString::null : currMime,
m_stack,"fileselector", FALSE, FALSE );
m_stack->addWidget( m_select, NORMAL );
m_mimeCheck->clear();
m_selector = NORMAL;
updateMimes();
m_mimeCheck->insertStringList( m_mimetypes );
m_stack->raiseWidget( NORMAL );
connect(m_select, SIGNAL(fileSelected( const DocLnk &) ), this, SLOT(slotFileBridgeSelected(const DocLnk &) ) );
}else if(view == QString::fromLatin1("Files") ){
// remove from the stack
delete m_select;
m_select = 0;
delete m_View;
m_View = 0;
delete m_boxToolbar;
delete m_homeButton;
delete m_docButton;
delete m_location;
delete m_up;
delete m_pseudo;
delete m_pseudoLayout;
m_boxToolbar = 0;
m_homeButton = 0;
m_docButton = 0;
m_location = 0;
m_up = 0;
m_pseudo = 0;
m_pseudoLayout = 0;
m_selector = EXTENDED;
// create the ListView or IconView
initializeListView();
reparse();
}else if(view == QString::fromLatin1("All Files") ) {
// remove from the stack
delete m_select;
m_select = 0;
delete m_View;
m_View = 0;
delete m_boxToolbar;
delete m_homeButton;
delete m_docButton;
delete m_location;
delete m_up;
delete m_pseudo;
delete m_pseudoLayout;
m_boxToolbar = 0;
m_homeButton = 0;
m_docButton = 0;
m_location = 0;
m_up = 0;
m_pseudo = 0;
m_pseudoLayout = 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 ){
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() );
}
}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;
delete m_location;
delete m_up;
delete m_pseudo;
delete m_pseudoLayout;
m_boxToolbar = 0;
m_homeButton = 0;
m_docButton = 0;
m_location = 0;
m_up = 0;
m_pseudo = 0;
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 );
m_up = new QPushButton(Resource::loadIconSet("up"),"", m_pseudo,"cdUpButton");
m_up->setMinimumSize( QSize( 20, 20 ) );
m_up->setMaximumSize( 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->setMinimumSize( QSize( 20, 20 ) );
m_homeButton->setMaximumSize( QSize( 20, 20 ) );
connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotHome() ) );
m_homeButton->setFlat(TRUE);
m_docButton = new QPushButton(Resource::loadIconSet("DocsIcon"),"", m_pseudo,"docsButton");
m_docButton->setMinimumSize( QSize( 20, 20 ) );
m_docButton->setMaximumSize( QSize( 20, 20 ) );
connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotDoc() ) );
m_docButton->setFlat(TRUE);
m_boxToolbar->addWidget(m_location );
m_boxToolbar->addWidget(m_up );
m_boxToolbar->addWidget(m_homeButton );
m_boxToolbar->addWidget(m_docButton );
m_pseudoLayout->addLayout(m_boxToolbar );
// lets fill the 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 );
};
m_View = new QListView(m_pseudo, "Extended view" );
m_stack->addWidget( m_pseudo, EXTENDED );
m_stack->raiseWidget( EXTENDED );
m_pseudoLayout->addWidget(m_View );
QPEApplication::setStylusOperation( m_View->viewport(),QPEApplication::RightOnHold);
// set up the stuff
// Pixmap Name Date Size mime
//(m_View->header() )->hide();
//m_View->setRootIsDecorated(false);
m_View->addColumn(" ");
m_View->addColumn(tr("Name") );
m_View->addColumn(tr("Size") );
m_View->addColumn(tr("Date"), 60 );
m_View->addColumn(tr("Mime Type") );
QHeader *header = m_View->header();
header->hide();
m_View->setSorting(1 );
// connect now
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 ) ) );
};
/* If a item is locked depends on the mode
if we're in OPEN !isReadable is locked
if we're in SAVE !isWriteable is locked
*/
void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink ){
qWarning("Add Files" );
if( !m_files ){
qWarning("not mfiles" );
return;
}
MimeType type( info->filePath() );
QString name;
QString dir;
bool locked= false;
if(mime == "All" ){
;
}else if( type.id() != mime ) {
return;
}
QPixmap pix = type.pixmap();
if(pix.isNull() )
pix = Resource::loadPixmap( "UnknownDocument-14" );
dir = info->dirPath( true );
if( symlink ) { // check if the readLink is readable
// do it right later
name = info->fileName() + " -> " + info->dirPath() + "/" + info->readLink();
}else{ // keep track of the icons
name = info->fileName();
if( m_mode == OPEN ){
if( !info->isReadable() ){
locked = true;
pix = Resource::loadPixmap("locked" );
}
}else if( m_mode == SAVE ){
if( !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;
//if( showDirs )
{
bool locked=false;
QString name;
QPixmap pix;
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{
if( symlink ){
pix = (*m_pixmaps)["dirsymlink" ];
}else{
pix = Resource::loadPixmap("folder" );
}
}
if( symlink){
name = info->fileName()+ "->"+ info->dirPath(true) +"/" +info->readLink();
}else{
//if(info->isReadable() )
name = info->fileName();
}
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;
if(!sel->isDir() ){
qWarning("is not dir" );
if(m_shLne ){
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
}
}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();
}else{
QPopupMenu menu;
QAction up;
up.setText("cd up");
up.addTo( &menu );
connect(&up, SIGNAL(activated() ),
this, SLOT(cdUP() ) );
QAction act;
OFileSelectorItem *sel = (OFileSelectorItem*)item;
if(sel->isDir() ){
act.setText( tr("Change Directory") );
act.addTo(&menu );
connect(&act, SIGNAL(activated() ),
this, SLOT(slotChangedDir() ) );
}else{
act.setText( tr("Open file" ) );
act.addTo( &menu );
connect(&act, SIGNAL(activated() ),
this, SLOT(slotOpen() ) );
}
QAction rescan;
rescan.setText( tr("Rescan") );
rescan.addTo( &menu );
connect(&rescan, SIGNAL(activated() ),
this, SLOT(slotRescan() ) );
QAction rename;
rename.setText( tr("Rename") );
rename.addTo( &menu );
connect(&rename, SIGNAL(activated() ),
this, SLOT(slotRename() ) );
menu.insertSeparator();
QAction delItem;
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;
reparse();
+ if(m_shTool ){
+ int count = m_location->count();
+ m_location->insertItem(str );
+ m_location->setCurrentItem( count );
+ }
return true;
}
return false;
}
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{
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 );
}
}
+void OFileSelector::slotHome()
+{
+ cd(QDir::homeDirPath() );
+}
+void OFileSelector::slotDoc()
+{
+ cd(QDir::homeDirPath() + "/Documents" );
+}
+void OFileSelector::slotNavigate()
+{
-
+}
diff --git a/libopie/ofileselector.h b/libopie/ofileselector.h
index b91c0ea..bf3cb48 100644
--- a/libopie/ofileselector.h
+++ b/libopie/ofileselector.h
@@ -78,198 +78,200 @@ class OFileSelectorItem : public QListViewItem {
dir = isDir;
mLocked = isLocked;
}
bool isLocked() const{
return mLocked;
}
QString directory()const{
return m_dir;
}
bool isDir()const{
return dir;
}
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) );
}else{
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;
};
private:
bool mLocked:1;
bool dir:1;
QString m_dir;
};
class OFileSelector : public QWidget {
Q_OBJECT
public:
enum Mode {OPEN=1, SAVE, FILESELECTOR };
enum Selector{NORMAL=1, EXTENDED = 2, EXTENDED_ALL =4 };
enum View { DIRS = 1, FILES = 2, TREE = 4, ICON = 8 };
OFileSelector(QWidget *wid, int mode, int selector, const QString &dirName, const QString &fileName = QString::null, const QStringList mimetypes = QStringList() );
bool isToolbarVisible() const { return m_shTool; };
bool isPermissionBarVisible() const { return m_shPerm; };
bool isLineEditVisible()const { return m_shLne; };
bool isChooserVisible( )const { return m_shChooser; };
bool isYesCancelVisible()const { return m_shYesNo; };
void setYesCancelVisible( bool show );
void setToolbarVisible( bool show );
void setPermissionBarVisible( bool show );
void setLineEditVisible(bool show) ;
void setChooserVisible( bool chooser );
QCheckBox* permissionCheckbox();
bool setPermission() const;
void setPermissionChecked( bool check );
void setMode( int );
bool showDirs()const { return m_dir; }
void setShowDirs(bool );
const QListView* listView() { return m_View; };
bool isCaseSensetive()const { return m_case; }
void setCaseSensetive(bool caSe );
bool showFiles()const { return m_files; };
void setShowFiles(bool );
bool cd(const QString &path );
int mode()const { return m_mode; };
int selector()const { return m_selector; };
void setSelector( int );
bool showPopup()const { return m_showPopup; };
void setShowPopup( bool pop ) { m_showPopup = pop; };
void setPopupMenu( QPopupMenu * );
void updateLay();
void reparse(); // re reads the dir
QString selectedName( )const;
QStringList selectedNames()const;
QString selectedPath() const;
QStringList selectedPaths() const;
QString directory()const;
int fileCount();
/* the user needs to delete it */
DocLnk selectedDocument()const;
/* the user needs to delete it */
QValueList<DocLnk> selectedDocuments()const;
signals:
void fileSelected( const DocLnk & );
void fileSelected( const QString & );
void closeMe();
void ok();
void cancel();
protected slots:
void slotOk();
void slotCancel();
void slotViewCheck(const QString & );
void slotMimeCheck(const QString & );
protected:
void init();
void updateMimes();
protected:
private:
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;
QListView *m_View;
QCheckBox *m_checkPerm;
QWidget *m_pseudo;
QVBoxLayout *m_pseudoLayout;
QString m_currentDir;
QString m_name;
QStringList m_mimetypes;
FileSelector *m_select;
QWidgetStack *m_stack;
QVBoxLayout *m_lay;
QGridLayout *m_Oselector;
QHBoxLayout *m_boxToolbar;
QHBoxLayout *m_boxOk;
QHBoxLayout *m_boxName;
QHBoxLayout *m_boxView;
QPopupMenu *m_custom;
QLineEdit *m_edit;
QLabel *m_fnLabel;
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;
// implementation todo
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 initPics();
bool compliesMime(const QString &path, const QString &mime);
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 crap see above
// PopupMenu crap
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( );
};
#endif