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

List:       kde-usability
Subject:    KFileDialog take 2
From:       "Aaron J. Seigo" <aseigo () olympusproject ! org>
Date:       2002-06-30 8:52:03
[Download RAW message or body]

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

hello...

ok... so... much hacking and several revisions later:

 o delete and properties are relegated to the RMB menu. they are advanced 
features, advanced users can find them

 o "new directory" gets promoted to being its own button on the toolbar

 o the config menu changes icons from the gear to the configure icon

 o the items in the "view" menu get put directly into the configure menu; one 
less submenu (sort is still a submenu, though)

 o the four variant options (show hidden files, show preview, show sidebar, 
seperate directories) appear in the menu together, each with a different F# 
key associated (quick access!)

 o you can have both previews and seperate directories. someone went to a lot 
of trouble to make sure you couldn't, and i can find no reason why they 
aren't compatible. so i made it so you can have both. no more inconsistent 
and strange interdependencies between view options.

 o added "int KFileDialog::pathComboIndex()" as a protected member so 
subclasses can get at the position of the combo box for inserting their own 
widgets w/out hardcoding in a number. yes, there was a program doing just 
that. and yes, i was using it to test my changes. heh. (kedit, for the 
curious)

patch is attached. thanks to everyone for their input (troels, waldo, irwin, 
marten).

please test to make sure i haven't broken anything (everything works here, but 
that doesn't mean much).  have fun. 

- -- 
Aaron J. Seigo
GPG Fingerprint: 8B8B 2209 0C6F 7C47 B1EA  EE75 D6B7 2EB1 A7F1 DB43

"Everything should be made as simple as possible, but not simpler"
    - Albert Einstein
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)

iD8DBQE9Hsaz1rcusafx20MRAoSVAKCwAOucK6x+TsUWNMm/ZP95iZUffACfWWvI
7yJ7PWY8XJN28ZdHYWZ/DA4=
=+WJ9
-----END PGP SIGNATURE-----

["kfiledialog_toolbar_reorder.diff" (text/x-diff)]

Index: kdiroperator.cpp
===================================================================
RCS file: /home/kde/kdelibs/kio/kfile/kdiroperator.cpp,v
retrieving revision 1.149
diff -u -3 -d -p -r1.149 kdiroperator.cpp
--- kdiroperator.cpp	2002/05/31 13:34:00	1.149
+++ kdiroperator.cpp	2002/06/30 08:48:09
@@ -243,29 +243,23 @@ void KDirOperator::slotToggleHidden( boo
         m_fileView->listingCompleted();
 }
 
-void KDirOperator::slotSingleView()
-{
-    KFile::FileView view = static_cast<KFile::FileView>(
-        m_viewKind & ~(KFile::PreviewContents |
-                     KFile::PreviewInfo |
-                     KFile::SeparateDirs ));
-
-    setView( view );
-}
-
 void KDirOperator::slotSeparateDirs()
 {
-    KFile::FileView view = static_cast<KFile::FileView>(
-        (m_viewKind & ~(KFile::PreviewContents |
-                      KFile::PreviewInfo)
-         | KFile::SeparateDirs ));
-
-    setView( view );
+    if (separateDirsAction->isChecked())
+    {
+        KFile::FileView view = static_cast<KFile::FileView>( m_viewKind | KFile::SeparateDirs );
+        setView( view );
+    }
+    else
+    {
+        KFile::FileView view = static_cast<KFile::FileView>( m_viewKind & ~KFile::SeparateDirs );
+        setView( view );
+    }
 }
 
 void KDirOperator::slotDefaultPreview()
 {
-    m_viewKind = (m_viewKind | KFile::PreviewContents) & ~KFile::SeparateDirs;
+    m_viewKind = m_viewKind | KFile::PreviewContents;
     if ( !myPreview ) {
         myPreview = new KImageFilePreview( this );
         (static_cast<KToggleAction*>( myActionCollection->action("preview") ))->setChecked(true);
@@ -745,50 +739,58 @@ bool KDirOperator::checkPreviewInternal(
 
     return false;
 }
+
 KFileView* KDirOperator::createView( QWidget* parent, KFile::FileView view ) {
     KFileView* new_view = 0L;
     bool separateDirs = KFile::isSeparateDirs( view );
-    bool preview=( (view & KFile::PreviewInfo) == KFile::PreviewInfo ||
-                   (view & KFile::PreviewContents) == KFile::PreviewContents );
-
-    if( separateDirs ) {
-        KCombiView *combi = new KCombiView( parent, "combi view" );
-        combi->setOnlyDoubleClickSelectsFiles(d->onlyDoubleClickSelectsFiles);
+    bool preview = ( KFile::isPreviewInfo(view) || KFile::isPreviewContents( view ) );
+    
+    if( separateDirs || preview ) {
+        KCombiView *combi = 0L;
+        
+        if (separateDirs)
+        {
+            combi = new KCombiView( parent, "combi view" );
+            combi->setOnlyDoubleClickSelectsFiles(d->onlyDoubleClickSelectsFiles);
+        }
+        
         KFileView* v = 0L;
         if ( (view & KFile::Simple) == KFile::Simple )
             v = createView( combi, KFile::Simple );
         else
             v = createView( combi, KFile::Detail );
-        combi->setRight( v );
-        new_view = combi;
+        
+        if (combi)
+        {
+            combi->setRight( v );
+        }
+        
+        if (preview)
+        {
+            KFilePreview* pView = new KFilePreview( combi ? combi : v, parent, "preview" );
+            pView->setOnlyDoubleClickSelectsFiles(d->onlyDoubleClickSelectsFiles);
+            new_view = pView;
+        }
+        else
+        {
+            new_view = combi;
+        }
     }
     else if( (view & KFile::Detail) == KFile::Detail && !preview ) {
         new_view = new KFileDetailView( parent, "detail view");
     }
-    else if ((view & KFile::Simple) == KFile::Simple && !preview ) {
+    else /* if ((view & KFile::Simple) == KFile::Simple && !preview ) */ {
         new_view = new KFileIconView( parent, "simple view");
         new_view->setViewName( i18n("Short View") );
     }
-    else { // preview
-        KFileView* v = 0L; // will get reparented by KFilePreview
-        if ( (view & KFile::Simple ) == KFile::Simple )
-            v = createView( 0L, KFile::Simple );
-        else
-            v = createView( 0L, KFile::Detail );
-
-        KFilePreview* pView = new KFilePreview( v, parent, "preview" );
-        pView->setOnlyDoubleClickSelectsFiles(d->onlyDoubleClickSelectsFiles);
-        new_view = pView;
-    }
-
+    
     return new_view;
 }
 
 void KDirOperator::setView( KFile::FileView view )
 {
     bool separateDirs = KFile::isSeparateDirs( view );
-    bool preview=( (view & KFile::PreviewInfo) == KFile::PreviewInfo ||
-                   (view & KFile::PreviewContents) == KFile::PreviewContents );
+    bool preview=( KFile::isPreviewInfo(view) || KFile::isPreviewContents( view ) );
 
     if (view == KFile::Default) {
         if ( KFile::isDetailView( (KFile::FileView) defaultView ) )
@@ -809,7 +811,7 @@ void KDirOperator::setView( KFile::FileV
             return;
         }
         else if ( !separateDirs )
-            (static_cast<KRadioAction*>( myActionCollection->action("single") ))->setChecked(true);
+            separateDirsAction->setChecked(true);
 
     }
 
@@ -1141,15 +1143,11 @@ void KDirOperator::setupActions()
 
     showHiddenAction = new KToggleAction( i18n("Show Hidden Files"), 0,
                                           myActionCollection, "show hidden" );
-    KRadioAction *singleAction = new KRadioAction( i18n("Single View"), 0,
-                                                   this,
-                                                   SLOT( slotSingleView() ),
-                                                   myActionCollection, "single" );
-    separateDirsAction = new KRadioAction( i18n("Separate Directories"), 0,
+    separateDirsAction = new KToggleAction( i18n("Separate Directories"), 0,
                                             this,
                                             SLOT(slotSeparateDirs()),
                                             myActionCollection, "separate dirs" );
-    KToggleAction *previewAction = new KToggleAction(i18n("Preview"),
+    KToggleAction *previewAction = new KToggleAction(i18n("Show Preview"),
                                                      "thumbnail", 0,
                                                      myActionCollection,
                                                      "preview" );
@@ -1157,10 +1155,6 @@ void KDirOperator::setupActions()
              SLOT( togglePreview( bool )));
 
 
-    QString combiView = QString::fromLatin1("combiview");
-    singleAction->setExclusiveGroup( combiView );
-    separateDirsAction->setExclusiveGroup( combiView );
-
     QString viewGroup = QString::fromLatin1("view");
     shortAction->setExclusiveGroup( viewGroup );
     detailedAction->setExclusiveGroup( viewGroup );
@@ -1190,9 +1184,11 @@ void KDirOperator::setupMenu()
 //     viewActionMenu->insert( shortAction );
 //     viewActionMenu->insert( detailedAction );
 //     viewActionMenu->insert( actionSeparator );
-    viewActionMenu->insert( showHiddenAction );
+    viewActionMenu->insert( myActionCollection->action( "short view" ) );
+    viewActionMenu->insert( myActionCollection->action( "detailed view" ) );
     viewActionMenu->insert( actionSeparator );
-    viewActionMenu->insert( myActionCollection->action( "single" ));
+    viewActionMenu->insert( showHiddenAction );
+//    viewActionMenu->insert( myActionCollection->action( "single" ));
     viewActionMenu->insert( separateDirsAction );
     // Warning: adjust slotViewActionAdded() and slotViewActionRemoved()
     // when you add/remove actions here!
@@ -1511,8 +1507,7 @@ void KDirOperator::togglePreview( bool o
     if ( on )
         slotDefaultPreview();
     else
-        setView( (KFile::FileView) (d->restorePreview &
-                                    ~(KFile::PreviewContents|KFile::PreviewInfo)) );
+        setView( (KFile::FileView) (m_viewKind & ~(KFile::PreviewContents|KFile::PreviewInfo)) );
 }
 
 void KDirOperator::slotRefreshItems( const KFileItemList& items )
Index: kdiroperator.h
===================================================================
RCS file: /home/kde/kdelibs/kio/kfile/kdiroperator.h,v
retrieving revision 1.75
diff -u -3 -d -p -r1.75 kdiroperator.h
--- kdiroperator.h	2002/05/14 19:09:28	1.75
+++ kdiroperator.h	2002/06/30 08:48:09
@@ -772,7 +772,6 @@ private slots:
     void slotSimpleView();
     void slotToggleHidden( bool );
 
-    void slotSingleView();
     void slotSeparateDirs();
     void slotDefaultPreview();
     void togglePreview( bool );
Index: kfile.h
===================================================================
RCS file: /home/kde/kdelibs/kio/kfile/kfile.h,v
retrieving revision 1.8
diff -u -3 -d -p -r1.8 kfile.h
--- kfile.h	2002/04/09 10:19:10	1.8
+++ kfile.h	2002/06/30 08:48:09
@@ -113,6 +113,10 @@ public:
 	return (view & PreviewContents) == PreviewContents;
     }
 
+    static bool isPreviewInfo( const FileView& view ) {
+        return (view & PreviewInfo) == PreviewContents;
+    }
+
 };
 
 #endif // KFILE_H
Index: kfiledialog.cpp
===================================================================
RCS file: /home/kde/kdelibs/kio/kfile/kfiledialog.cpp,v
retrieving revision 1.304
diff -u -3 -d -p -r1.304 kfiledialog.cpp
--- kfiledialog.cpp	2002/05/11 00:05:54	1.304
+++ kfiledialog.cpp	2002/06/30 08:48:09
@@ -150,6 +150,9 @@ struct KFileDialogPrivate
     QString fileClass;
 
     KFileBookmarkHandler *bookmarkHandler;
+    
+    // the ID of the path drop down so subclasses can place their custom widgets properly
+    int m_pathComboIndex;
 };
 
 KURL *KFileDialog::lastDirectory; // to set the start path
@@ -303,7 +306,8 @@ KFileDialog::KFileDialog(const QString& 
     coll->action( "forward" )->plug( toolbar );
     coll->action( "home" )->plug( toolbar );
     coll->action( "reload" )->plug( toolbar );
-
+    coll->action( "mkdir" )->plug( toolbar );
+    
     d->bookmarkHandler = new KFileBookmarkHandler( this );
     toolbar->insertButton(QString::fromLatin1("bookmark"),
                           (int)HOTLIST_BUTTON, true,
@@ -318,35 +322,34 @@ KFileDialog::KFileDialog(const QString& 
                           (int)CONFIGURE_BUTTON, true,
                           i18n("Configure this dialog"));
     */
-
     KToggleAction *showSidebarAction =
         new KToggleAction(i18n("Show Sidebar"), Key_F9, coll,"toggleSpeedbar");
     connect( showSidebarAction, SIGNAL( toggled( bool ) ),
              SLOT( toggleSpeedbar( bool )) );
 
-    KActionMenu *menu = new KActionMenu( i18n("Extras"), "misc", this, "extra menu" );
-    menu->insert( coll->action( "mkdir" ));
-    menu->insert( coll->action( "delete" ));
-    menu->insert( coll->action( "separator" ));
+    KActionMenu *menu = new KActionMenu( i18n("Extras"), "configure", this, "extra menu" );
     menu->insert( coll->action( "sorting menu" ));
     menu->insert( coll->action( "separator" ));
-    menu->insert( coll->action( "view menu" ));
-    menu->insert( showSidebarAction );
+    menu->insert( coll->action( "short view" ));
+    menu->insert( coll->action( "detailed view" ));
     menu->insert( coll->action( "separator" ));
-    menu->insert( coll->action( "properties" ));
+    coll->action( "show hidden" )->setShortcut(Key_F8);
+    menu->insert( coll->action( "show hidden" ));
+    menu->insert( showSidebarAction );
+    coll->action( "preview" )->setShortcut(Key_F10);
+    menu->insert( coll->action( "preview" ));
+    coll->action( "separate dirs" )->setShortcut(Key_F11);
+    menu->insert( coll->action( "separate dirs" ));
+    
     menu->setDelayed( false );
     connect( menu->popupMenu(), SIGNAL( aboutToShow() ),
              ops, SLOT( updateSelectionDependentActions() ));
     menu->plug( toolbar );
 
-    coll->action( "short view" )->plug( toolbar );
-    coll->action( "detailed view" )->plug( toolbar );
-    coll->action( "preview")->plug( toolbar );
-
     connect(toolbar, SIGNAL(clicked(int)),
             SLOT(toolbarCallback(int)));
 
-    toolbar->insertWidget(PATH_COMBO, 0, d->pathCombo);
+    d->m_pathComboIndex = toolbar->insertWidget(PATH_COMBO, 0, d->pathCombo);
 
     toolbar->setItemAutoSized (PATH_COMBO);
     toolbar->setIconText(KToolBar::IconOnly);
@@ -1703,6 +1706,11 @@ void KFileDialog::toggleSpeedbar( bool s
         d->urlBar->show();
     else
         d->urlBar->hide();
+}
+
+int KFileDialog::pathComboIndex()
+{
+    return d->m_pathComboIndex;
 }
 
 void KFileDialog::virtual_hook( int id, void* data )
Index: kfiledialog.h
===================================================================
RCS file: /home/kde/kdelibs/kio/kfile/kfiledialog.h,v
retrieving revision 1.113
diff -u -3 -d -p -r1.113 kfiledialog.h
--- kfiledialog.h	2002/05/27 22:18:35	1.113
+++ kfiledialog.h	2002/06/30 08:48:09
@@ -643,6 +643,12 @@ public:
      */
     KActionCollection *actionCollection() const;
 
+    /**
+     * @returns the index of the path combobox so when inserting widgets into 
+     * the dialog (e.g. subclasses) they can do so without hardcoding in an index
+     */
+    int pathComboIndex();
+    
 signals:
     /**
       * Emitted when the user selects a file. It is only emitted in single-

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

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

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