[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