[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kwrite-devel
Subject:    File selector - patch for using a ktoolbar
From:       Anders Lund <anders () alweb ! dk>
Date:       2002-03-28 20:26:56
[Download RAW message or body]

Hi,

I finally found a sane solution,  could you please verify that this patch is 
Ok and working?

And cullmann or other, as i am starting doing some post 3.0.1 stuff for the 
file selector, could oyu commit it to the release branch?

-anders
["katefileselector.diff" (text/x-diff)]

Index: app/katefileselector.cpp
===================================================================
RCS file: /home/kde/kdebase/kate/app/katefileselector.cpp,v
retrieving revision 1.5
diff -u -r1.5 katefileselector.cpp
--- app/katefileselector.cpp	2002/02/23 19:38:52	1.5
+++ app/katefileselector.cpp	2002/03/28 20:22:44
@@ -27,6 +27,8 @@
 #include <qlabel.h>
 #include <qstrlist.h>
 #include <qtooltip.h>
+#include <qapplication.h>
+#include <qdockarea.h>
 
 #include <kiconloader.h>
 #include <kurlcombobox.h>
@@ -36,9 +38,14 @@
 #include <kconfig.h>
 #include <klocale.h>
 #include <kcombobox.h>
-
+#include <kaction.h>
 #include <kmessagebox.h>
 
+#include <kdebug.h>
+
+
+static void silenceQToolBar(QtMsgType, const char *){}
+
 KateFileSelector::KateFileSelector( KateMainWindow *mainWindow, KateViewManager \
*viewManager,  QWidget * parent, const char * name )
     : QWidget(parent, name),
@@ -46,31 +53,13 @@
       viewmanager(viewManager)
 {
   QVBoxLayout* lo = new QVBoxLayout(this);
-
-  QHBox *hlow = new QHBox (this);
-  lo->addWidget(hlow);
 
-  home = new QToolButton( hlow );
-  home->setIconSet(SmallIconSet("gohome"));
-  QToolTip::add(home, i18n("Home directory"));
-  up = new QToolButton( hlow );
-  up->setIconSet(SmallIconSet("up"));
-  QToolTip::add(up, i18n("Up one level"));
-  back = new QToolButton( hlow );
-  back->setIconSet(SmallIconSet("back"));
-  QToolTip::add(back, i18n("Previous directory"));
-  forward = new QToolButton( hlow );
-  forward->setIconSet(SmallIconSet("forward"));
-  QToolTip::add(forward, i18n("Next Directory"));
-
-  // HACK
-  QWidget* spacer = new QWidget(hlow);
-  hlow->setStretchFactor(spacer, 1);
-  hlow->setMaximumHeight(up->height());
-
-  cfdir = new QToolButton( hlow );
-  cfdir->setIconSet(SmallIconSet("curfiledir"));
-  QToolTip::add(cfdir, i18n("Current Document Directory"));
+  tbparent = new TBContainer( this );
+  lo->addWidget( tbparent );
+  QtMsgHandler oldHandler = qInstallMsgHandler( silenceQToolBar );
+  toolbar = new KToolBar( tbparent, "Kate FileSelector Toolbar", false );
+  qInstallMsgHandler( oldHandler );
+  tbparent->setTb( toolbar );
 
   cmbPath = new KURLComboBox( KURLComboBox::Directories, true, this, "path combo" );
   cmbPath->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed \
)); @@ -80,11 +69,28 @@
 
   dir = new KDirOperator(QString::null, this, "operator");
   dir->setView(KFile::/*Simple*/Detail);
-  dir->actionCollection()->action( "delete" )->setShortcut (KShortcut \
(ALT+Key_Delete)); +
+  KActionCollection *coll = dir->actionCollection();
+  // some shortcuts of diroperator that clashes with Kate
+  coll->action( "delete" )->setShortcut( KShortcut( ALT + Key_Delete ) );
+  coll->action( "reload" )->setShortcut( KShortcut( ALT + Key_F5 ) );
+  coll->action( "back" )->setShortcut( KShortcut( ALT + SHIFT + Key_Left ) );
+  coll->action( "forward" )->setShortcut( KShortcut( ALT + SHIFT + Key_Right ) );
+  // some consistency - reset up for dir too
+  coll->action( "up" )->setShortcut( KShortcut( ALT + SHIFT + Key_Up ) );
+  coll->action( "home" )->setShortcut( KShortcut( CTRL + ALT + Key_Home ) );
+
+  coll->action( "up" )->plug( toolbar );
+  coll->action( "back" )->plug( toolbar );
+  coll->action( "forward" )->plug( toolbar );
+  coll->action( "home" )->plug( toolbar );
+  coll->action( "reload" )->plug( toolbar );
+  coll->action( "short view" )->plug( toolbar );
+  coll->action( "detailed view" )->plug( toolbar );
+
   lo->addWidget(dir);
   lo->setStretchFactor(dir, 2);
 
-
   QHBox* filterBox = new QHBox(this);
   filterIcon = new QLabel(filterBox);
   filterIcon->setPixmap( BarIcon("filter") );
@@ -96,11 +102,13 @@
   connect( filter, SIGNAL( activated(const QString&) ), SLOT( slotFilterChange(const \
QString&) ) );  connect( filter, SIGNAL( returnPressed(const QString&) ),filter, \
SLOT( addToHistory(const QString&) ) );  
-  connect( home, SIGNAL( clicked() ), dir, SLOT( home() ) );
-  connect( up, SIGNAL( clicked() ), dir, SLOT( cdUp() ) );
-  connect( back, SIGNAL( clicked() ), dir, SLOT( back() ) );
-  connect( forward, SIGNAL( clicked() ), dir, SLOT( forward() ) );
-  connect( cfdir, SIGNAL( clicked() ), this, SLOT( setCurrentDocDir() ) );
+  // kaction for the dir sync method
+  acSyncDir = new KAction( i18n("Current Document Directory"), "curfiledir", 0, \
this, SLOT( setCurrentDocDir() ), this, "sync_dir" ); +  acSyncDir->plug( toolbar );
+
+  toolbar->setIconText( KToolBar::IconOnly );
+  toolbar->setIconSize( 16 );
+  toolbar->setEnableContextMenu( false );
 
   connect( cmbPath, SIGNAL( urlActivated( const KURL&  )),
              this,  SLOT( cmbPathActivated( const KURL& ) ));
@@ -121,6 +129,7 @@
 {
 }
 
+
 void KateFileSelector::readConfig(KConfig *config, const QString & name)
 {
   dir->readConfig(config, name + ":dir");
@@ -186,12 +195,6 @@
 
 void KateFileSelector::dirFinishedLoading()
 {
-   // HACK - enable the nav buttons
-   // have to wait for diroperator...
-   up->setEnabled( dir->actionCollection()->action( "up" )->isEnabled() );
-   back->setEnabled( dir->actionCollection()->action( "back" )->isEnabled() );
-   forward->setEnabled( dir->actionCollection()->action( "forward" )->isEnabled() );
-   home->setEnabled( dir->actionCollection()->action( "home" )->isEnabled() );
 }
 
 void KateFileSelector::focusInEvent(QFocusEvent*)
@@ -215,6 +218,7 @@
 {
   // TODO: make sure the button is disabled if the directory is unreadable, eg the \
document URL  //       has protocol http
-  cfdir->setEnabled( ! mainwin->currentDocUrl().directory().isEmpty() );
+  //cfdir->setEnabled( ! mainwin->currentDocUrl().directory().isEmpty() );
+  acSyncDir->setEnabled( ! mainwin->currentDocUrl().directory().isEmpty() );
 }
 
Index: app/katefileselector.h
===================================================================
RCS file: /home/kde/kdebase/kate/app/katefileselector.h,v
retrieving revision 1.5
diff -u -r1.5 katefileselector.h
--- app/katefileselector.h	2002/01/22 12:04:30	1.5
+++ app/katefileselector.h	2002/03/28 20:22:44
@@ -2,8 +2,8 @@
                           katefileselector.h  -  description
                              -------------------
     begin                : Mon Feb 5 2001
-    copyright            : (C) 2001 by Matt Newell
-    email                : newellm@proaxis.com
+    copyright            : (C) 2001 by Matt Newell, 2002 by Anders Lund
+    email                : newellm@proaxis.com, anders@alweb.dk
  ***************************************************************************/
 
 /***************************************************************************
@@ -27,6 +27,14 @@
 class KateMainWindow;
 class KateViewManager;
 
+/*
+    The kate file selector presents a directory view, in which the default action is
+    to open the activated file.
+    Additinally, a toolbar for managing the kdiroperator widget + sync that to
+    the directory of the current file is available, as well as a filter widget
+    allowing to filter the displayed files using a name filter.
+*/
+
 class KateFileSelector : public QWidget
 {
   Q_OBJECT
@@ -36,10 +44,10 @@
                       QWidget * parent = 0, const char * name = 0 );
     ~KateFileSelector();
 
-    void readConfig(KConfig *, const QString &);
-    void writeConfig(KConfig *, const QString &);
-    void setView(KFile::FileView);
-    KDirOperator * dirOperator(){return dir;}
+    void readConfig( KConfig *, const QString & );
+    void writeConfig( KConfig *, const QString & );
+    void setView( KFile::FileView );
+    KDirOperator * dirOperator(){ return dir; }
 
   public slots:
     void slotFilterChange(const QString&);
@@ -54,17 +62,61 @@
     void kateViewChanged();
 
   protected:
-    void focusInEvent(QFocusEvent*);
+    void focusInEvent( QFocusEvent* );
 
   private:
     KURLComboBox *cmbPath;
     KHistoryCombo * filter;
     QLabel* filterIcon;
     KDirOperator * dir;
-    class QToolButton *home, *up, *back, *forward, *cfdir;
-    
+    class KAction *acSyncDir;
+    class TBContainer *tbparent;
+    class KToolBar *toolbar;
     KateMainWindow *mainwin;
     KateViewManager *viewmanager;
 };
+
+/*
+    KFSFilterHelper
+    A popup widget presenting a listbox with checkable items
+    representing the mime types available in the current directory, and
+    providing a name filter based on those.
+*/
+
+/*
+    This is a hack to allow to have the toolbar without a resize
+    handle. 
+    As it seems QMainWindow(?) recursively sets all toolbars
+    movable according to the global setting in it's polish() method,
+    this class is there mainly to reset that, and to handle resizing.
+    It is required to setTB() before the widget is shown, that is in
+    the parent constructor, or add the toolbar in the constructor,
+    but there is no access to it (which could easily be changed;)
+*/
+#include <qframe.h>
+#include <ktoolbar.h>
+class TBContainer : public QFrame {
+  Q_OBJECT
+  public:
+    TBContainer( QWidget *parent=0, KToolBar *toolbar=0 )
+      : QFrame( parent, "toolbar container hack" ), tb( toolbar ){};
+    void setTb( KToolBar *toolbar) { tb = toolbar; };
+  public slots:
+    void polish() {
+      if (tb) {
+        setMinimumHeight( tb->sizeHint().height() );
+        tb->setMovingEnabled( false );
+      }
+    };
+  protected:
+    void resizeEvent( QResizeEvent *e ) {
+      if( tb ) {
+        tb->resize( e->size() );
+      }
+    }
+  private:
+    KToolBar *tb;
+};
+
 
-#endif //KANTFILESELECTOR_H
+#endif //__KATE_FILESELECTOR_H__


_______________________________________________
kwrite-devel mailing list
kwrite-devel@mail.kde.org
http://mail.kde.org/mailman/listinfo/kwrite-devel

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic