kate Library API Documentation

katefileselector.cpp

00001 /* This file is part of the KDE project 00002 Copyright (C) 2001 Christoph Cullmann <cullmann@kde.org> 00003 Copyright (C) 2001 Joseph Wenninger <jowenn@kde.org> 00004 Copyright (C) 2001 Anders Lund <anders.lund@lund.tdcadsl.dk> 00005 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Library General Public 00008 License version 2 as published by the Free Software Foundation. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public License 00016 along with this library; see the file COPYING.LIB. If not, write to 00017 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00018 Boston, MA 02111-1307, USA. 00019 */ 00020 00021 //BEGIN Includes 00022 #include "katefileselector.h" 00023 #include "katefileselector.moc" 00024 00025 #include "katemainwindow.h" 00026 #include "kateviewmanager.h" 00027 #include "kbookmarkhandler.h" 00028 00029 #include <kio/netaccess.h> 00030 00031 #include "kactionselector.h" 00032 00033 #include <qlayout.h> 00034 #include <qtoolbutton.h> 00035 #include <qhbox.h> 00036 #include <qvbox.h> 00037 #include <qlabel.h> 00038 #include <qstrlist.h> 00039 #include <qtooltip.h> 00040 #include <qwhatsthis.h> 00041 #include <qapplication.h> 00042 #include <qlistbox.h> 00043 #include <qscrollbar.h> 00044 #include <qspinbox.h> 00045 #include <qgroupbox.h> 00046 #include <qcheckbox.h> 00047 #include <qregexp.h> 00048 #include <qdockarea.h> 00049 #include <qtimer.h> 00050 #include <qdir.h> 00051 00052 #include <kapplication.h> 00053 #include <kiconloader.h> 00054 #include <kurlcombobox.h> 00055 #include <kurlcompletion.h> 00056 #include <kprotocolinfo.h> 00057 #include <kdiroperator.h> 00058 #include <kconfig.h> 00059 #include <klocale.h> 00060 #include <kcombobox.h> 00061 #include <kaction.h> 00062 #include <kmessagebox.h> 00063 #include <ktoolbarbutton.h> 00064 #include <qtoolbar.h> 00065 #include <kpopupmenu.h> 00066 #include <kdialog.h> 00067 #include <kio/netaccess.h> 00068 00069 #include <kdebug.h> 00070 //END Includes 00071 00072 //BEGIN Toolbar 00073 // from kfiledialog.cpp - avoid qt warning in STDERR (~/.xsessionerrors) 00074 static void silenceQToolBar(QtMsgType, const char *){} 00075 00076 // helper classes to be able to have a toolbar without move handle 00077 KateFileSelectorToolBar::KateFileSelectorToolBar(QWidget *parent) 00078 : KToolBar( parent, "Kate FileSelector Toolbar", true ) 00079 { 00080 setMinimumWidth(10); 00081 } 00082 00083 KateFileSelectorToolBar::~KateFileSelectorToolBar(){} 00084 00085 void KateFileSelectorToolBar::setMovingEnabled( bool) 00086 { 00087 KToolBar::setMovingEnabled(false); 00088 } 00089 00090 00091 KateFileSelectorToolBarParent::KateFileSelectorToolBarParent(QWidget *parent) 00092 :QFrame(parent),m_tb(0){} 00093 KateFileSelectorToolBarParent::~KateFileSelectorToolBarParent(){} 00094 void KateFileSelectorToolBarParent::setToolBar(KateFileSelectorToolBar *tb) 00095 { 00096 m_tb=tb; 00097 } 00098 00099 void KateFileSelectorToolBarParent::resizeEvent ( QResizeEvent * ) 00100 { 00101 if (m_tb) 00102 { 00103 setMinimumHeight(m_tb->sizeHint().height()); 00104 m_tb->resize(width(),height()); 00105 } 00106 } 00107 //END 00108 00109 //BEGIN Constructor/destructor 00110 00111 KateFileSelector::KateFileSelector( KateMainWindow *mainWindow, 00112 KateViewManager *viewManager, 00113 QWidget * parent, const char * name ) 00114 : QWidget(parent, name), 00115 mainwin(mainWindow), 00116 viewmanager(viewManager) 00117 { 00118 mActionCollection = new KActionCollection( this ); 00119 00120 QVBoxLayout* lo = new QVBoxLayout(this); 00121 00122 QtMsgHandler oldHandler = qInstallMsgHandler( silenceQToolBar ); 00123 00124 KateFileSelectorToolBarParent *tbp=new KateFileSelectorToolBarParent(this); 00125 toolbar = new KateFileSelectorToolBar(tbp); 00126 tbp->setToolBar(toolbar); 00127 lo->addWidget(tbp); 00128 toolbar->setMovingEnabled(false); 00129 toolbar->setFlat(true); 00130 qInstallMsgHandler( oldHandler ); 00131 00132 cmbPath = new KURLComboBox( KURLComboBox::Directories, true, this, "path combo" ); 00133 cmbPath->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed )); 00134 KURLCompletion* cmpl = new KURLCompletion(KURLCompletion::DirCompletion); 00135 cmbPath->setCompletionObject( cmpl ); 00136 cmbPath->setAutoDeleteCompletionObject( true ); 00137 lo->addWidget(cmbPath); 00138 cmbPath->listBox()->installEventFilter( this ); 00139 00140 dir = new KDirOperator(KURL(), this, "operator"); 00141 dir->setView(KFile::/* Simple */Detail); 00142 dir->view()->setSelectionMode(KFile::Multi); 00143 00144 KActionCollection *coll = dir->actionCollection(); 00145 // some shortcuts of diroperator that clashes with Kate 00146 coll->action( "delete" )->setShortcut( KShortcut( ALT + Key_Delete ) ); 00147 coll->action( "reload" )->setShortcut( KShortcut( ALT + Key_F5 ) ); 00148 coll->action( "back" )->setShortcut( KShortcut( ALT + SHIFT + Key_Left ) ); 00149 coll->action( "forward" )->setShortcut( KShortcut( ALT + SHIFT + Key_Right ) ); 00150 // some consistency - reset up for dir too 00151 coll->action( "up" )->setShortcut( KShortcut( ALT + SHIFT + Key_Up ) ); 00152 coll->action( "home" )->setShortcut( KShortcut( CTRL + ALT + Key_Home ) ); 00153 00154 lo->addWidget(dir); 00155 lo->setStretchFactor(dir, 2); 00156 00157 // bookmarks action! 00158 KActionMenu *acmBookmarks = new KActionMenu( i18n("Bookmarks"), "bookmark", 00159 mActionCollection, "bookmarks" ); 00160 acmBookmarks->setDelayed( false ); 00161 bookmarkHandler = new KBookmarkHandler( this, acmBookmarks->popupMenu() ); 00162 QHBox* filterBox = new QHBox(this); 00163 00164 btnFilter = new QToolButton( filterBox ); 00165 btnFilter->setIconSet( SmallIconSet("filter" ) ); 00166 btnFilter->setToggleButton( true ); 00167 filter = new KHistoryCombo( true, filterBox, "filter"); 00168 filter->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed )); 00169 filterBox->setStretchFactor(filter, 2); 00170 connect( btnFilter, SIGNAL( clicked() ), this, SLOT( btnFilterClick() ) ); 00171 lo->addWidget(filterBox); 00172 00173 connect( filter, SIGNAL( activated(const QString&) ), 00174 SLOT( slotFilterChange(const QString&) ) ); 00175 connect( filter, SIGNAL( returnPressed(const QString&) ), 00176 filter, SLOT( addToHistory(const QString&) ) ); 00177 00178 // kaction for the dir sync method 00179 acSyncDir = new KAction( i18n("Current Document Folder"), "curfiledir", 0, 00180 this, SLOT( setActiveDocumentDir() ), mActionCollection, "sync_dir" ); 00181 toolbar->setIconText( KToolBar::IconOnly ); 00182 toolbar->setIconSize( 16 ); 00183 toolbar->setEnableContextMenu( false ); 00184 00185 connect( cmbPath, SIGNAL( urlActivated( const KURL& )), 00186 this, SLOT( cmbPathActivated( const KURL& ) )); 00187 connect( cmbPath, SIGNAL( returnPressed( const QString& )), 00188 this, SLOT( cmbPathReturnPressed( const QString& ) )); 00189 connect(dir, SIGNAL(urlEntered(const KURL&)), 00190 this, SLOT(dirUrlEntered(const KURL&)) ); 00191 00192 connect(dir, SIGNAL(finishedLoading()), 00193 this, SLOT(dirFinishedLoading()) ); 00194 00195 // enable dir sync button if current doc has a valid URL 00196 connect ( viewmanager, SIGNAL( viewChanged() ), 00197 this, SLOT( kateViewChanged() ) ); 00198 00199 // Connect the bookmark handler 00200 connect( bookmarkHandler, SIGNAL( openURL( const QString& )), 00201 this, SLOT( setDir( const QString& ) ) ); 00202 00203 waitingUrl = QString::null; 00204 00205 // whatsthis help 00206 QWhatsThis::add( cmbPath, 00207 i18n("<p>Here you can enter a path for a folder to display." 00208 "<p>To go to a folder previously entered, press the arrow on " 00209 "the right and choose one. <p>The entry has folder " 00210 "completion. Right-click to choose how completion should behave.") ); 00211 QWhatsThis::add( filter, 00212 i18n("<p>Here you can enter a name filter to limit which files are displayed." 00213 "<p>To clear the filter, toggle off the filter button to the left." 00214 "<p>To reapply the last filter used, toggle on the filter button." ) ); 00215 QWhatsThis::add( btnFilter, 00216 i18n("<p>This button clears the name filter when toggled off, or " 00217 "reapplies the last filter used when toggled on.") ); 00218 00219 } 00220 00221 KateFileSelector::~KateFileSelector() 00222 { 00223 } 00224 //END Constroctor/Destrctor 00225 00226 //BEGIN Public Methods 00227 00228 void KateFileSelector::readConfig(KConfig *config, const QString & name) 00229 { 00230 dir->setViewConfig( config, name + ":view" ); 00231 dir->readConfig(config, name + ":dir"); 00232 dir->setView( KFile::Default ); 00233 dir->view()->setSelectionMode(KFile::Multi); 00234 config->setGroup( name ); 00235 00236 // set up the toolbar 00237 setupToolbar( config ); 00238 00239 cmbPath->setMaxItems( config->readNumEntry( "pathcombo history len", 9 ) ); 00240 cmbPath->setURLs( config->readPathListEntry( "dir history" ) ); 00241 // if we restore history 00242 if ( config->readBoolEntry( "restore location", true ) || kapp->isRestored() ) { 00243 QString loc( config->readPathEntry( "location" ) ); 00244 if ( ! loc.isEmpty() ) { 00245 // waitingDir = loc; 00246 // QTimer::singleShot(0, this, SLOT(initialDirChangeHack())); 00247 setDir( loc ); 00248 } 00249 } 00250 00251 // else is automatic, as cmpPath->setURL is called when a location is entered. 00252 00253 filter->setMaxCount( config->readNumEntry( "filter history len", 9 ) ); 00254 filter->setHistoryItems( config->readListEntry("filter history"), true ); 00255 lastFilter = config->readEntry( "last filter" ); 00256 QString flt(""); 00257 if ( config->readBoolEntry( "restore last filter", true ) || kapp->isRestored() ) 00258 flt = config->readEntry("current filter"); 00259 filter->lineEdit()->setText( flt ); 00260 slotFilterChange( flt ); 00261 00262 autoSyncEvents = config->readNumEntry( "AutoSyncEvents", 0 ); 00263 } 00264 00265 void KateFileSelector::initialDirChangeHack() 00266 { 00267 setDir( waitingDir ); 00268 } 00269 00270 void KateFileSelector::setupToolbar( KConfig *config ) 00271 { 00272 toolbar->clear(); 00273 QStringList tbactions = config->readListEntry( "toolbar actions", ',' ); 00274 if ( tbactions.isEmpty() ) { 00275 // reasonable collection for default toolbar 00276 tbactions << "up" << "back" << "forward" << "home" << 00277 "short view" << "detailed view" << 00278 "bookmarks" << "sync_dir"; 00279 } 00280 KAction *ac; 00281 for ( QStringList::Iterator it=tbactions.begin(); it != tbactions.end(); ++it ) { 00282 if ( *it == "bookmarks" || *it == "sync_dir" ) 00283 ac = mActionCollection->action( (*it).latin1() ); 00284 else 00285 ac = dir->actionCollection()->action( (*it).latin1() ); 00286 if ( ac ) 00287 ac->plug( toolbar ); 00288 } 00289 } 00290 00291 void KateFileSelector::writeConfig(KConfig *config, const QString & name) 00292 { 00293 dir->writeConfig(config,name + ":dir"); 00294 00295 config->setGroup( name ); 00296 config->writeEntry( "pathcombo history len", cmbPath->maxItems() ); 00297 QStringList l; 00298 for (int i = 0; i < cmbPath->count(); i++) { 00299 l.append( cmbPath->text( i ) ); 00300 } 00301 config->writePathEntry( "dir history", l ); 00302 config->writePathEntry( "location", cmbPath->currentText() ); 00303 00304 config->writeEntry( "filter history len", filter->maxCount() ); 00305 config->writeEntry( "filter history", filter->historyItems() ); 00306 config->writeEntry( "current filter", filter->currentText() ); 00307 config->writeEntry( "last filter", lastFilter ); 00308 config->writeEntry( "AutoSyncEvents", autoSyncEvents ); 00309 } 00310 00311 void KateFileSelector::setView(KFile::FileView view) 00312 { 00313 dir->setView(view); 00314 dir->view()->setSelectionMode(KFile::Multi); 00315 } 00316 00317 //END Public Methods 00318 00319 //BEGIN Public Slots 00320 00321 void KateFileSelector::slotFilterChange( const QString & nf ) 00322 { 00323 QString f = nf.stripWhiteSpace(); 00324 bool empty = f.isEmpty() || f == "*"; 00325 QToolTip::remove( btnFilter ); 00326 if ( empty ) { 00327 dir->clearFilter(); 00328 filter->lineEdit()->setText( QString::null ); 00329 QToolTip::add( btnFilter, 00330 QString( i18n("Apply last filter (\"%1\")") ).arg( lastFilter ) ); 00331 } 00332 else { 00333 dir->setNameFilter( f ); 00334 lastFilter = f; 00335 QToolTip::add( btnFilter, i18n("Clear filter") ); 00336 } 00337 btnFilter->setOn( !empty ); 00338 dir->updateDir(); 00339 // this will be never true after the filter has been used;) 00340 btnFilter->setEnabled( !( empty && lastFilter.isEmpty() ) ); 00341 00342 } 00343 00344 bool kateFileSelectorIsReadable ( const KURL& url ) 00345 { 00346 if ( !url.isLocalFile() ) 00347 return true; // what else can we say? 00348 00349 QDir dir (url.path()); 00350 return dir.exists (); 00351 } 00352 00353 void KateFileSelector::setDir( KURL u ) 00354 { 00355 KURL newurl; 00356 00357 if ( !u.isValid() ) 00358 newurl.setPath( QDir::homeDirPath() ); 00359 else 00360 newurl = u; 00361 00362 QString pathstr = newurl.path(+1); 00363 newurl.setPath(pathstr); 00364 00365 if ( !kateFileSelectorIsReadable ( newurl ) ) 00366 newurl.cd(QString::fromLatin1("..")); 00367 00368 if ( !kateFileSelectorIsReadable (newurl) ) 00369 newurl.setPath( QDir::homeDirPath() ); 00370 00371 dir->setURL(newurl, true); 00372 } 00373 00374 //END Public Slots 00375 00376 //BEGIN Private Slots 00377 00378 void KateFileSelector::cmbPathActivated( const KURL& u ) 00379 { 00380 cmbPathReturnPressed( u.url() ); 00381 } 00382 00383 void KateFileSelector::cmbPathReturnPressed( const QString& u ) 00384 { 00385 QStringList urls = cmbPath->urls(); 00386 urls.remove( u ); 00387 urls.prepend( u ); 00388 cmbPath->setURLs( urls, KURLComboBox::RemoveBottom ); 00389 dir->setFocus(); 00390 dir->setURL( KURL(u), true ); 00391 } 00392 00393 void KateFileSelector::dirUrlEntered( const KURL& u ) 00394 { 00395 cmbPath->setURL( u ); 00396 } 00397 00398 void KateFileSelector::dirFinishedLoading() 00399 { 00400 } 00401 00402 00403 /* 00404 When the button in the filter box toggles: 00405 If off: 00406 If the name filer is anything but "" or "*", reset it. 00407 If on: 00408 Set last filter. 00409 */ 00410 void KateFileSelector::btnFilterClick() 00411 { 00412 if ( !btnFilter->isOn() ) { 00413 slotFilterChange( QString::null ); 00414 } 00415 else { 00416 filter->lineEdit()->setText( lastFilter ); 00417 slotFilterChange( lastFilter ); 00418 } 00419 } 00420 00421 //FIXME crash on shutdown 00422 void KateFileSelector::setActiveDocumentDir() 00423 { 00424 // kdDebug(13001)<<"KateFileSelector::setActiveDocumentDir()"<<endl; 00425 KURL u = mainwin->activeDocumentUrl(); 00426 // kdDebug(13001)<<"URL: "<<u.prettyURL()<<endl; 00427 if (!u.isEmpty()) 00428 setDir( u.upURL() ); 00429 // kdDebug(13001)<<"... setActiveDocumentDir() DONE!"<<endl; 00430 } 00431 00432 void KateFileSelector::kateViewChanged() 00433 { 00434 if ( autoSyncEvents & DocumentChanged ) 00435 { 00436 kdDebug(13001)<<"KateFileSelector::do a sync ()"<<endl; 00437 // if visible, sync 00438 if ( isVisible() ) { 00439 setActiveDocumentDir(); 00440 waitingUrl = QString::null; 00441 } 00442 // else set waiting url 00443 else { 00444 KURL u = mainwin->activeDocumentUrl(); 00445 if (!u.isEmpty()) 00446 waitingUrl = u.directory(); 00447 } 00448 } 00449 00450 // TODO: make sure the button is disabled if the directory is unreadable, eg 00451 // the document URL has protocol http 00452 acSyncDir->setEnabled( ! mainwin->activeDocumentUrl().directory().isEmpty() ); 00453 } 00454 00455 //END Private Slots 00456 00457 //BEGIN Protected 00458 00459 void KateFileSelector::focusInEvent( QFocusEvent * ) 00460 { 00461 dir->setFocus(); 00462 } 00463 00464 void KateFileSelector::showEvent( QShowEvent * ) 00465 { 00466 // sync if we should 00467 if ( autoSyncEvents & GotVisible ) { 00468 // kdDebug(13001)<<"syncing fs on show"<<endl; 00469 setActiveDocumentDir(); 00470 waitingUrl = QString::null; 00471 } 00472 // else, if we have a waiting URL set it 00473 else if ( ! waitingUrl.isEmpty() ) { 00474 setDir( waitingUrl ); 00475 waitingUrl = QString::null; 00476 } 00477 } 00478 00479 bool KateFileSelector::eventFilter( QObject* o, QEvent *e ) 00480 { 00481 /* 00482 This is rather unfortunate, but: 00483 QComboBox does not support setting the size of the listbox to something 00484 reasonable. Even using listbox->setVariableWidth() does not yield a 00485 satisfying result, something is wrong with the handling of the sizehint. 00486 And the popup is rather useless, if the paths are only partly visible. 00487 */ 00488 QListBox *lb = cmbPath->listBox(); 00489 if ( o == lb && e->type() == QEvent::Show ) { 00490 int add = lb->height() < lb->contentsHeight() ? lb->verticalScrollBar()->width() : 0; 00491 int w = QMIN( mainwin->width(), lb->contentsWidth() + add ); 00492 lb->resize( w, lb->height() ); 00493 // TODO - move the listbox to a suitable place if nessecary 00494 // TODO - decide if it is worth caching the size while untill the contents 00495 // are changed. 00496 } 00497 // TODO - same thing for the completion popup? 00498 return QWidget::eventFilter( o, e ); 00499 } 00500 00501 //END Protected 00502 00503 //BEGIN ACtionLBItem 00504 /* 00505 QListboxItem that can store and return a string, 00506 used for the toolbar action selector. 00507 */ 00508 class ActionLBItem : public QListBoxPixmap { 00509 public: 00510 ActionLBItem( QListBox *lb=0, 00511 const QPixmap &pm = QPixmap(), 00512 const QString &text=QString::null, 00513 const QString &str=QString::null ) : 00514 QListBoxPixmap( lb, pm, text ), 00515 _str(str) {}; 00516 QString idstring() { return _str; }; 00517 private: 00518 QString _str; 00519 }; 00520 //END ActionLBItem 00521 00522 //BEGIN KFSConfigPage 00524 // KFSConfigPage implementation 00526 KFSConfigPage::KFSConfigPage( QWidget *parent, const char *name, KateFileSelector *kfs ) 00527 : Kate::ConfigPage( parent, name ), 00528 fileSelector( kfs ), 00529 bDirty( false ) 00530 { 00531 QVBoxLayout *lo = new QVBoxLayout( this ); 00532 int spacing = KDialog::spacingHint(); 00533 lo->setSpacing( spacing ); 00534 00535 // Toolbar - a lot for a little... 00536 QGroupBox *gbToolbar = new QGroupBox( 1, Qt::Vertical, i18n("Toolbar"), this ); 00537 acSel = new KActionSelector( gbToolbar ); 00538 acSel->setAvailableLabel( i18n("A&vailable actions:") ); 00539 acSel->setSelectedLabel( i18n("S&elected actions:") ); 00540 lo->addWidget( gbToolbar ); 00541 connect( acSel, SIGNAL( added( QListBoxItem * ) ), this, SLOT( slotChanged() ) ); 00542 connect( acSel, SIGNAL( removed( QListBoxItem * ) ), this, SLOT( slotChanged() ) ); 00543 connect( acSel, SIGNAL( movedUp( QListBoxItem * ) ), this, SLOT( slotChanged() ) ); 00544 connect( acSel, SIGNAL( movedDown( QListBoxItem * ) ), this, SLOT( slotChanged() ) ); 00545 00546 // Sync 00547 QGroupBox *gbSync = new QGroupBox( 1, Qt::Horizontal, i18n("Auto Synchronization"), this ); 00548 cbSyncActive = new QCheckBox( i18n("When a docu&ment becomes active"), gbSync ); 00549 cbSyncShow = new QCheckBox( i18n("When the file selector becomes visible"), gbSync ); 00550 lo->addWidget( gbSync ); 00551 connect( cbSyncActive, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); 00552 connect( cbSyncShow, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); 00553 00554 // Histories 00555 QHBox *hbPathHist = new QHBox ( this ); 00556 QLabel *lbPathHist = new QLabel( i18n("Remember &locations:"), hbPathHist ); 00557 sbPathHistLength = new QSpinBox( hbPathHist ); 00558 lbPathHist->setBuddy( sbPathHistLength ); 00559 lo->addWidget( hbPathHist ); 00560 connect( sbPathHistLength, SIGNAL( valueChanged ( int ) ), this, SLOT( slotChanged() ) ); 00561 00562 QHBox *hbFilterHist = new QHBox ( this ); 00563 QLabel *lbFilterHist = new QLabel( i18n("Remember &filters:"), hbFilterHist ); 00564 sbFilterHistLength = new QSpinBox( hbFilterHist ); 00565 lbFilterHist->setBuddy( sbFilterHistLength ); 00566 lo->addWidget( hbFilterHist ); 00567 connect( sbFilterHistLength, SIGNAL( valueChanged ( int ) ), this, SLOT( slotChanged() ) ); 00568 00569 // Session 00570 QGroupBox *gbSession = new QGroupBox( 1, Qt::Horizontal, i18n("Session"), this ); 00571 cbSesLocation = new QCheckBox( i18n("Restore loca&tion"), gbSession ); 00572 cbSesFilter = new QCheckBox( i18n("Restore last f&ilter"), gbSession ); 00573 lo->addWidget( gbSession ); 00574 connect( cbSesLocation, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); 00575 connect( cbSesFilter, SIGNAL( toggled( bool ) ), this, SLOT( slotChanged() ) ); 00576 00577 // make it look nice 00578 lo->addStretch( 1 ); 00579 00580 // be helpfull 00581 /* 00582 QWhatsThis::add( lbAvailableActions, i18n( 00583 "<p>Available actions for the toolbar. To add an action, select it here " 00584 "and press the add (<strong>-&gt;</strong>) button" ) ); 00585 QWhatsThis::add( lbUsedActions, i18n( 00586 "<p>Actions used in the toolbar. To remove an action, select it and " 00587 "press the remove (<strong>&lt;-</strong>) button." 00588 "<p>To change the order of the actions, use the Up and Down buttons to " 00589 "move the selected action.") ); 00590 */ 00591 QString lhwt( i18n( 00592 "<p>Decides how many locations to keep in the history of the location " 00593 "combo box.") ); 00594 QWhatsThis::add( lbPathHist, lhwt ); 00595 QWhatsThis::add( sbPathHistLength, lhwt ); 00596 QString fhwt( i18n( 00597 "<p>Decides how many filters to keep in the history of the filter " 00598 "combo box.") ); 00599 QWhatsThis::add( lbFilterHist, fhwt ); 00600 QWhatsThis::add( sbFilterHistLength, fhwt ); 00601 QString synwt( i18n( 00602 "<p>These options allow you to have the File Selector automatically " 00603 "change location to the folder of the active document on certain " 00604 "events." 00605 "<p>Auto synchronization is <em>lazy</em>, meaning it will not take " 00606 "effect until the file selector is visible." 00607 "<p>None of these are enabled by default, but you can always sync the " 00608 "location by pressing the sync button in the toolbar.") ); 00609 QWhatsThis::add( gbSync, synwt ); 00610 QWhatsThis::add( cbSesLocation, i18n( 00611 "<p>If this option is enabled (default), the location will be restored " 00612 "when you start Kate.<p><strong>Note</strong> that if the session is " 00613 "handled by the KDE session manager, the location is always restored.") ); 00614 QWhatsThis::add( cbSesFilter, i18n( 00615 "<p>If this option is enabled (default), the current filter will be " 00616 "restored when you start Kate.<p><strong>Note</strong> that if the " 00617 "session is handled by the KDE session manager, the filter is always " 00618 "restored." 00619 "<p><strong>Note</strong> that some of the autosync settings may " 00620 "override the restored location if on.") ); 00621 00622 init(); 00623 00624 } 00625 00626 void KFSConfigPage::apply() 00627 { 00628 KConfig *config = kapp->config(); 00629 config->setGroup( "fileselector" ); 00630 // toolbar 00631 QStringList l; 00632 QListBoxItem *item = acSel->selectedListBox()->firstItem(); 00633 ActionLBItem *aItem; 00634 while ( item ) 00635 { 00636 aItem = (ActionLBItem*)item; 00637 if ( aItem ) 00638 { 00639 l << aItem->idstring(); 00640 } 00641 item = item->next(); 00642 } 00643 config->writeEntry( "toolbar actions", l ); 00644 fileSelector->setupToolbar( config ); 00645 // sync 00646 int s = 0; 00647 if ( cbSyncActive->isChecked() ) 00648 s |= KateFileSelector::DocumentChanged; 00649 if ( cbSyncShow->isChecked() ) 00650 s |= KateFileSelector::GotVisible; 00651 fileSelector->autoSyncEvents = s; 00652 00653 // histories 00654 fileSelector->cmbPath->setMaxItems( sbPathHistLength->value() ); 00655 fileSelector->filter->setMaxCount( sbFilterHistLength->value() ); 00656 // session - theese are read/written directly to the app config, 00657 // as they are not needed during operation. 00658 config->writeEntry( "restore location", cbSesLocation->isChecked() ); 00659 config->writeEntry( "restore last filter", cbSesFilter->isChecked() ); 00660 } 00661 00662 void KFSConfigPage::reload() 00663 { 00664 // hmm, what is this supposed to do, actually?? 00665 init(); 00666 } 00667 void KFSConfigPage::init() 00668 { 00669 KConfig *config = kapp->config(); 00670 config->setGroup( "fileselector" ); 00671 // toolbar 00672 QStringList l = config->readListEntry( "toolbar actions", ',' ); 00673 if ( l.isEmpty() ) // default toolbar 00674 l << "up" << "back" << "forward" << "home" << 00675 "short view" << "detailed view" << 00676 "bookmarks" << "sync_dir"; 00677 00678 // actions from diroperator + two of our own 00679 QStringList allActions; 00680 allActions << "up" << "back" << "forward" << "home" << 00681 "reload" << "mkdir" << "delete" << 00682 "short view" << "detailed view" /*<< "view menu" << 00683 "show hidden" << "properties"*/ << 00684 "bookmarks" << "sync_dir"; 00685 QRegExp re("&(?=[^&])"); 00686 KAction *ac; 00687 QListBox *lb; 00688 for ( QStringList::Iterator it=allActions.begin(); it != allActions.end(); ++it ) { 00689 lb = l.contains( *it ) ? acSel->selectedListBox() : acSel->availableListBox(); 00690 if ( *it == "bookmarks" || *it == "sync_dir" ) 00691 ac = fileSelector->actionCollection()->action( (*it).latin1() ); 00692 else 00693 ac = fileSelector->dirOperator()->actionCollection()->action( (*it).latin1() ); 00694 if ( ac ) 00695 new ActionLBItem( lb, SmallIcon( ac->icon() ), ac->text().replace( re, "" ), *it ); 00696 } 00697 00698 // sync 00699 int s = fileSelector->autoSyncEvents; 00700 cbSyncActive->setChecked( s & KateFileSelector::DocumentChanged ); 00701 cbSyncShow->setChecked( s & KateFileSelector::GotVisible ); 00702 // histories 00703 sbPathHistLength->setValue( fileSelector->cmbPath->maxItems() ); 00704 sbFilterHistLength->setValue( fileSelector->filter->maxCount() ); 00705 // session 00706 cbSesLocation->setChecked( config->readBoolEntry( "restore location", true ) ); 00707 cbSesFilter->setChecked( config->readBoolEntry( "restore last filter", true ) ); 00708 } 00709 //END KFSConfigPage
KDE Logo
This file is part of the documentation for kate Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Aug 13 21:47:01 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003