]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/filterbar.cpp
Unify the search interface for non-indexed and indexed folders
[dolphin.git] / src / filterbar.cpp
index f05d0d77d1e159e7938731b79b12f58c0fd7343a..b108570ce4c5e872efd4937faf5be6ffd49e0d8c 100644 (file)
@@ -15,7 +15,7 @@
  *   You should have received a copy of the GNU General Public License     *
  *   along with this program; if not, write to the                         *
  *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
  ***************************************************************************/
 #include "filterbar.h"
 
 #include <QLabel>
 #include <QToolButton>
 
-#include <kdialog.h>
+#include <kicon.h>
 #include <klocale.h>
 #include <klineedit.h>
 #include <kiconloader.h>
 
-#include "dolphinmainwindow.h"
-
-FilterBar::FilterBar(DolphinMainWindow* mainWindow, QWidget *parent, const char *name) :
-    QWidget(parent, name),
-    m_mainWindow(mainWindow)
+FilterBar::FilterBar(QWidget* parent) :
+    QWidget(parent)
 {
-    const int gap = 3;
-
-    QVBoxLayout* foo = new QVBoxLayout(this);
-    foo->setMargin(0);
-    foo->addSpacing(gap);
+    // Create close button
+    QToolButton *closeButton = new QToolButton(this);
+    closeButton->setAutoRaise(true);
+    closeButton->setIcon(KIcon("dialog-close"));
+    closeButton->setToolTip(i18nc("@info:tooltip", "Hide Filter Bar"));
+    connect(closeButton, SIGNAL(clicked()), this, SIGNAL(closeRequest()));
 
-    QHBoxLayout* layout = new QHBoxLayout(foo);
-    layout->setMargin(0);
-    layout->addSpacing(gap);
-
-    m_filter = new QLabel(i18n("Filter:"), this);
-    layout->addWidget(m_filter);
-    layout->addSpacing(KDialog::spacingHint());
+    // Create label
+    QLabel* filterLabel = new QLabel(i18nc("@label:textbox", "Filter:"), this);
 
+    // Create filter editor
     m_filterInput = new KLineEdit(this);
-    m_filter->setBuddy(m_filterInput);
-    layout->addWidget(m_filterInput);
+    m_filterInput->setLayoutDirection(Qt::LeftToRight);
+    m_filterInput->setClearButtonShown(true);
+    connect(m_filterInput, SIGNAL(textChanged(const QString&)),
+            this, SIGNAL(filterChanged(const QString&)));
 
-    m_close = new QToolButton(this);
-    m_close->setAutoRaise(true);
-    m_close->setIcon(QIcon(SmallIcon("fileclose")));
-    layout->addWidget(m_close);
-    layout->addSpacing(gap);
+    // Apply layout
+    QHBoxLayout* hLayout = new QHBoxLayout(this);
+    hLayout->setMargin(0);
+    hLayout->addWidget(closeButton);
+    hLayout->addWidget(filterLabel);
+    hLayout->addWidget(m_filterInput);
 
-    connect(m_filterInput, SIGNAL(textChanged(const QString&)),
-            this, SIGNAL(signalFilterChanged(const QString&)));
-    connect(m_close, SIGNAL(clicked()), this, SLOT(hide()));
-    connect(m_close, SIGNAL(clicked()),
-            mainWindow, SLOT(slotShowFilterBarChanged()));
+    filterLabel->setBuddy(m_filterInput);
 }
 
 FilterBar::~FilterBar()
 {
 }
 
-void FilterBar::hideEvent(QHideEvent* event)
+void FilterBar::clear()
 {
-    if (!event->spontaneous()) {
-        m_filterInput->clear();
-        m_filterInput->clearFocus();
-    }
+    m_filterInput->clear();
 }
 
 void FilterBar::showEvent(QShowEvent* event)
@@ -89,8 +79,11 @@ void FilterBar::keyReleaseEvent(QKeyEvent* event)
 {
     QWidget::keyReleaseEvent(event);
     if ((event->key() == Qt::Key_Escape)) {
-        hide();
-        m_mainWindow->slotShowFilterBarChanged();
+        if (m_filterInput->text().isEmpty()) {
+            emit closeRequest();
+        } else {
+            m_filterInput->clear();
+        }
     }
 }