Thumbnail Bar

"Ilya Konkov" <[email protected]> Thu, 7 Feb 2008 19:05:25 +0500
Newsgroups gmane.comp.kde.gwenview
Message-ID <[email protected]>
Hello.

Sending patches and source/header files for new widget.
Additional patch adds filter bar like in Dolphin for thumbnail view.


--
Ilya Konkov

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

_______________________________________________
Gwenview-general mailing list
Gwenview-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/gwenview-general
thumbnailbar.tar.bz2 (application/x-bzip2, 4.8 KB) - not displayed
gwenview-filterbar.patch (text/x-patch, 4.5 KB)
Index: app/gwenviewui.rc
===================================================================
--- app/gwenviewui.rc	(revision 772010)
+++ app/gwenviewui.rc	(working copy)
@@ -21,6 +21,7 @@
 		<Separator/>
 		<Merge/>
 		<Separator/>
+		<Action name="toggle_filterbar"/>
 		<Action name="toggle_sidebar" />
 	</Menu>
 	<Menu name="edit" >
Index: app/mainwindow.h
===================================================================
--- app/mainwindow.h	(revision 772010)
+++ app/mainwindow.h	(working copy)
@@ -135,6 +135,8 @@
 	void editLocation();
 
 	void updateFullScreenInformation();
+	void setNameFilter();
+	void toggleFilterBarVisibility(bool);
 
 private:
 	class Private;
Index: app/mainwindow.cpp
===================================================================
--- app/mainwindow.cpp	(revision 772010)
+++ app/mainwindow.cpp	(working copy)
@@ -30,6 +30,7 @@
 #include <QStackedWidget>
 #include <QUndoGroup>
 #include <QVBoxLayout>
+#include <QToolButton>
 
 // KDE
 #include <kactioncollection.h>
@@ -57,6 +58,7 @@
 #include <kurlnavigator.h>
 #include <kxmlguifactory.h>
 #include <kwindowsystem.h>
+#include <klineedit.h>
 
 // Local
 #include "configdialog.h"
@@ -135,6 +137,8 @@
 	ThumbnailView* mThumbnailView;
 	ThumbnailViewHelper* mThumbnailViewHelper;
 	QSlider* mThumbnailSlider;
+	QWidget* mFilterBar;
+	KLineEdit* mFilterEdit;
 	QWidget* mThumbnailViewPanel;
 	SideBar* mSideBar;
 	QStackedWidget* mSideBarContainer;
@@ -160,6 +164,7 @@
 	KToggleFullScreenAction* mFullScreenAction;
 	QAction* mToggleSlideShowAction;
 	KToggleAction* mShowMenuBarAction;
+	KToggleAction* mShowFilterBar;
 
 	SortedDirModel* mDirModel;
 	ContextManager* mContextManager;
@@ -247,15 +252,52 @@
 		mThumbnailSlider->setOrientation(Qt::Horizontal);
 		connect(mThumbnailSlider, SIGNAL(valueChanged(int)), mThumbnailView, SLOT(setThumbnailSize(int)) );
 
+		setupFilterBar();
+
 		// Layout
 		QVBoxLayout* layout = new QVBoxLayout(mThumbnailViewPanel);
 		layout->setSpacing(0);
 		layout->setMargin(0);
 		layout->addWidget(mUrlNavigator);
 		layout->addWidget(mThumbnailView);
+ 		layout->addWidget(mFilterBar);
 		layout->addWidget(statusBar);
 	}
 
+	void setupFilterBar() {
+		mFilterBar = new QWidget(mThumbnailViewPanel);
+		mFilterBar->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Fixed );
+
+		QTimer* timer = new QTimer(mFilterBar);
+		timer->setInterval(350);
+		timer->setSingleShot(true);
+		connect(timer, SIGNAL(timeout()),
+			 mWindow, SLOT(setNameFilter()));
+
+		mFilterEdit = new KLineEdit(mFilterBar);  
+		mFilterEdit->setClickMessage(i18n("Enter search terms here"));
+		mFilterEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+		mFilterEdit->setClearButtonShown(true);
+		mFilterEdit->setToolTip(i18n("Enter space-separated terms to search in the thumbnail view."));
+		connect(mFilterEdit, SIGNAL(textChanged(const QString &)), 
+			 timer, SLOT(start()));
+
+		QLabel* label = new QLabel(i18nc("@label:textbox", "Filter:"), mFilterBar);
+		label->setBuddy(mFilterEdit);
+
+		QToolButton* closeButton = new QToolButton(mFilterBar);
+		closeButton->setAutoRaise(true);
+		closeButton->setIcon(KIcon("dialog-close"));
+		closeButton->setToolTip(i18nc("@info:tooltip", "Hide Filter Bar"));
+		connect(closeButton, SIGNAL(clicked(bool)), mWindow, SLOT(toggleFilterBarVisibility(bool)));
+
+		QHBoxLayout* filterBoxLayout = new QHBoxLayout(mFilterBar);
+		filterBoxLayout->addWidget(label);
+		filterBoxLayout->addWidget(mFilterEdit);
+		filterBoxLayout->addWidget(closeButton);
+		mFilterBar->hide();
+	}
+
 	void setupActions() {
 		KActionCollection* actionCollection = mWindow->actionCollection();
 
@@ -362,6 +404,11 @@
 
 		mShowMenuBarAction = KStandardAction::showMenubar(mWindow, SLOT(toggleMenuBar()), actionCollection);
 
+		mShowFilterBar = actionCollection->add<KToggleAction>("toggle_filterbar");
+		mShowFilterBar->setText(i18nc("@action:inmenu Tools", "Show Filter Bar"));
+		mShowFilterBar->setShortcut(Qt::CTRL | Qt::Key_I);
+		connect(mShowFilterBar, SIGNAL(triggered(bool)), mWindow, SLOT(toggleFilterBarVisibility(bool)));
+
 		KStandardAction::keyBindings(mWindow->guiFactory(),
 			SLOT(configureShortcuts()), actionCollection);
 
@@ -1511,4 +1558,16 @@
 	d->mUrlNavigator->setUrlEditable(true);
 	d->mUrlNavigator->setFocus();
 }
+
+
+void MainWindow::setNameFilter() {
+	d->mDirModel->setFilterRegExp(d->mFilterEdit->text());
+	updatePreviousNextActions();
+}
+
+
+void MainWindow::toggleFilterBarVisibility(bool value) {
+	d->mFilterBar->setVisible(value);
+	d->mShowFilterBar->setChecked(value);
+}
 } // namespace