[LyX/master] Transform simple search dialog to dock widget (#2625)

Juergen Spitzmueller spitz at lyx.org
Sun Feb 14 16:15:49 UTC 2021


commit 2baa3a46a6ad3576fc94fa0b915adc30ba2bbdff
Author: Juergen Spitzmueller <spitz at lyx.org>
Date:   Sun Feb 14 17:18:00 2021 +0100

    Transform simple search dialog to dock widget (#2625)
    
    Also solves #8054
---
 lib/bind/cua.bind               |    4 +-
 lib/bind/mac.bind               |    4 +-
 src/frontends/qt/GuiSearch.cpp  |  181 ++++++++++++++++++---
 src/frontends/qt/GuiSearch.h    |   75 ++++++++--
 src/frontends/qt/ui/SearchUi.ui |  342 +++++++++++++++++++++++----------------
 5 files changed, 428 insertions(+), 178 deletions(-)

diff --git a/lib/bind/cua.bind b/lib/bind/cua.bind
index fc776c2..61e941b 100644
--- a/lib/bind/cua.bind
+++ b/lib/bind/cua.bind
@@ -72,8 +72,8 @@ Format 5
 \bind "C-S-M"			"math-display"
 \bind "C-M-n"			"command-sequence math-display; math-number-toggle;"
 
-\bind "C-f"			"dialog-show findreplace"
-\bind "C-S-f"			"dialog-show findreplaceadv"
+\bind "C-f"			"dialog-toggle findreplace"
+\bind "C-S-f"			"dialog-toggle findreplaceadv"
 \bind "C-i"			"inset-toggle"		# 'i' for Inset
 \bind "C-M-i"			"inset-settings"
 
diff --git a/lib/bind/mac.bind b/lib/bind/mac.bind
index a1b3ed7..f65895f 100644
--- a/lib/bind/mac.bind
+++ b/lib/bind/mac.bind
@@ -142,8 +142,8 @@ Format 5
 #  -: "Command-E"                    # Use the selection for a find
 \bind "C-e"                          "font-emph"
 #  +: "Command-F"                    # Open a Find window
-\bind "C-f"                          "dialog-show findreplace"
-\bind "C-S-f"                        "dialog-show findreplaceadv"
+\bind "C-f"                          "dialog-toggle findreplace"
+\bind "C-S-f"                        "dialog-toggle findreplaceadv"
 #  -: "Option-Command-F"             # Move to the search field control
 #  +: "Command-G"                    # Find the next occurrence of the selection
 \bind "C-g"                          "word-find-forward"
diff --git a/src/frontends/qt/GuiSearch.cpp b/src/frontends/qt/GuiSearch.cpp
index e33e421..6722655 100644
--- a/src/frontends/qt/GuiSearch.cpp
+++ b/src/frontends/qt/GuiSearch.cpp
@@ -17,6 +17,7 @@
 #include "lyxfind.h"
 #include "qt_helpers.h"
 #include "FuncRequest.h"
+#include "LyX.h"
 #include "BufferView.h"
 #include "Buffer.h"
 #include "Cursor.h"
@@ -25,11 +26,14 @@
 #include "GuiKeySymbol.h"
 #include "GuiView.h"
 
+#include "support/debug.h"
 #include "support/gettext.h"
 #include "frontends/alert.h"
 
 #include <QLineEdit>
+#include <QSettings>
 #include <QShowEvent>
+#include "QSizePolicy"
 
 using namespace std;
 
@@ -48,8 +52,8 @@ static void uniqueInsert(QComboBox * box, QString const & text)
 }
 
 
-GuiSearch::GuiSearch(GuiView & lv)
-	: GuiDialog(lv, "findreplace", qt_("Find and Replace"))
+GuiSearchWidget::GuiSearchWidget(QWidget * parent)
+	:	QWidget(parent)
 {
 	setupUi(this);
 
@@ -57,34 +61,39 @@ GuiSearch::GuiSearch(GuiView & lv)
 	setFixedHeight(sizeHint().height());
 
 	// align items in grid on top
-	mainGridLayout->setAlignment(Qt::AlignTop);
+	gridLayout->setAlignment(Qt::AlignTop);
 
-	connect(buttonBox, SIGNAL(clicked(QAbstractButton *)),
-		this, SLOT(slotButtonBox(QAbstractButton *)));
 	connect(findPB, SIGNAL(clicked()), this, SLOT(findClicked()));
+	connect(findPrevPB, SIGNAL(clicked()), this, SLOT(findPrevClicked()));
+	connect(minimizePB, SIGNAL(clicked()), this, SLOT(minimizeClicked()));
 	connect(replacePB, SIGNAL(clicked()), this, SLOT(replaceClicked()));
+	connect(replacePrevPB, SIGNAL(clicked()), this, SLOT(replacePrevClicked()));
 	connect(replaceallPB, SIGNAL(clicked()), this, SLOT(replaceallClicked()));
 	connect(findCO, SIGNAL(editTextChanged(QString)),
 		this, SLOT(findChanged()));
 
 	setFocusProxy(findCO);
 
-	bc().setPolicy(ButtonPolicy::NoRepeatedApplyReadOnlyPolicy);
-	bc().setCancel(buttonBox->button(QDialogButtonBox::Close));
-
 	findCO->setCompleter(0);
 	replaceCO->setCompleter(0);
 
 	replacePB->setEnabled(false);
+	replacePrevPB->setEnabled(false);
 	replaceallPB->setEnabled(false);
 }
 
 
-void GuiSearch::keyPressEvent(QKeyEvent * ev)
+void GuiSearchWidget::keyPressEvent(QKeyEvent * ev)
 {
 	KeySymbol sym;
 	setKeySymbol(&sym, ev);
 
+	// catch Return and Shift-Return
+	if (ev->key() == Qt::Key_Return) {
+		findClicked(ev->modifiers() == Qt::ShiftModifier);
+		return;
+	}
+
 	// we catch the key sequences for forward and backwards search
 	if (sym.isOK()) {
 		KeyModifier mod = lyx::q_key_state(ev->modifiers());
@@ -98,53 +107,96 @@ void GuiSearch::keyPressEvent(QKeyEvent * ev)
 			findClicked(true);
 			return;
 		}
+		if (fr == FuncRequest(LFUN_DIALOG_TOGGLE, "findreplace")) {
+			dispatch(fr);
+			return;
+		}
+	}
+	QWidget::keyPressEvent(ev);
+}
+
+
+void GuiSearchWidget::minimizeClicked(bool const toggle)
+{
+	if (toggle)
+		minimized_ = !minimized_;
+
+	replaceLA->setHidden(minimized_);
+	replaceCO->setHidden(minimized_);
+	replacePB->setHidden(minimized_);
+	replacePrevPB->setHidden(minimized_);
+	replaceallPB->setHidden(minimized_);
+	wordsCB->setHidden(minimized_);
+	caseCB->setHidden(minimized_);
+	if (minimized_) {
+		minimizePB->setText(qt_("Ex&pand"));
+		minimizePB->setToolTip("Show replace and option widgets");
+	} else {
+		minimizePB->setText(qt_("&Minimize"));
+		minimizePB->setToolTip("Hide replace and option widgets");
 	}
-	QDialog::keyPressEvent(ev);
+
+	Q_EMIT needSizeUpdate();
+	Q_EMIT needTitleBarUpdate();
 }
 
 
-void GuiSearch::showEvent(QShowEvent * e)
+void GuiSearchWidget::showEvent(QShowEvent * e)
 {
 	findChanged();
 	findPB->setFocus();
 	findCO->lineEdit()->selectAll();
-	GuiDialog::showEvent(e);
+	QWidget::showEvent(e);
 }
 
 
-void GuiSearch::findChanged()
+void GuiSearchWidget::findChanged()
 {
 	findPB->setEnabled(!findCO->currentText().isEmpty());
-	bool const replace = !findCO->currentText().isEmpty() && !isBufferReadonly();
+	findPrevPB->setEnabled(!findCO->currentText().isEmpty());
+	bool const replace = !findCO->currentText().isEmpty()
+			&& bv_ && !bv_->buffer().isReadonly();
 	replacePB->setEnabled(replace);
+	replacePrevPB->setEnabled(replace);
 	replaceallPB->setEnabled(replace);
 	replaceLA->setEnabled(replace);
 	replaceCO->setEnabled(replace);
 }
 
 
-void GuiSearch::findClicked(bool const backwards)
+void GuiSearchWidget::findClicked(bool const backwards)
 {
 	docstring const needle = qstring_to_ucs4(findCO->currentText());
-	find(needle, caseCB->isChecked(), wordsCB->isChecked(),
-		(!backwards && !backwardsCB->isChecked()));
+	find(needle, caseCB->isChecked(), wordsCB->isChecked(), !backwards);
 	uniqueInsert(findCO, findCO->currentText());
 	findCO->lineEdit()->selectAll();
 }
 
 
-void GuiSearch::replaceClicked()
+void GuiSearchWidget::findPrevClicked()
+{
+	findClicked(true);
+}
+
+
+void GuiSearchWidget::replaceClicked(bool const backwards)
 {
 	docstring const needle = qstring_to_ucs4(findCO->currentText());
 	docstring const repl = qstring_to_ucs4(replaceCO->currentText());
 	replace(needle, repl, caseCB->isChecked(), wordsCB->isChecked(),
-		!backwardsCB->isChecked(), false);
+		!backwards, false);
 	uniqueInsert(findCO, findCO->currentText());
 	uniqueInsert(replaceCO, replaceCO->currentText());
 }
 
 
-void GuiSearch::replaceallClicked()
+void GuiSearchWidget::replacePrevClicked()
+{
+	replaceClicked(true);
+}
+
+
+void GuiSearchWidget::replaceallClicked()
 {
 	replace(qstring_to_ucs4(findCO->currentText()),
 		qstring_to_ucs4(replaceCO->currentText()),
@@ -154,7 +206,7 @@ void GuiSearch::replaceallClicked()
 }
 
 
-void GuiSearch::find(docstring const & search, bool casesensitive,
+void GuiSearchWidget::find(docstring const & search, bool casesensitive,
 			 bool matchword, bool forward)
 {
 	docstring const sdata =
@@ -163,7 +215,7 @@ void GuiSearch::find(docstring const & search, bool casesensitive,
 }
 
 
-void GuiSearch::replace(docstring const & search, docstring const & replace,
+void GuiSearchWidget::replace(docstring const & search, docstring const & replace,
 			    bool casesensitive, bool matchword,
 			    bool forward, bool all)
 {
@@ -173,6 +225,91 @@ void GuiSearch::replace(docstring const & search, docstring const & replace,
 	dispatch(FuncRequest(LFUN_WORD_REPLACE, sdata));
 }
 
+void GuiSearchWidget::saveSession(QSettings & settings, QString const & session_key) const
+{
+	settings.setValue(session_key + "/casesensitive", caseCB->isChecked());
+	settings.setValue(session_key + "/words", wordsCB->isChecked());
+	settings.setValue(session_key + "/minimized", minimized_);
+}
+
+
+void GuiSearchWidget::restoreSession(QString const & session_key)
+{
+	QSettings settings;
+	caseCB->setChecked(settings.value(session_key + "/casesensitive", false).toBool());
+	wordsCB->setChecked(settings.value(session_key + "/words", false).toBool());
+	minimized_ = settings.value(session_key + "/minimized", false).toBool();
+	// initialize hidings
+	minimizeClicked(false);
+}
+
+
+GuiSearch::GuiSearch(GuiView & parent, Qt::DockWidgetArea area, Qt::WindowFlags flags)
+	: DockView(parent, "findreplace", qt_("Search and Replace"), area, flags),
+	  widget_(new GuiSearchWidget(this))
+{
+	setWidget(widget_);
+	widget_->setBufferView(bufferview());
+	setFocusProxy(widget_->findCO);
+
+	connect(widget_, SIGNAL(needTitleBarUpdate()), this, SLOT(updateTitle()));
+	connect(widget_, SIGNAL(needSizeUpdate()), this, SLOT(updateSize()));
+}
+
+void GuiSearch::onBufferViewChanged()
+{
+	widget_->setEnabled((bool)bufferview());
+	widget_->setBufferView(bufferview());
+}
+
+
+void GuiSearch::updateView()
+{
+	updateTitle();
+	updateSize();
+}
+
+
+void GuiSearch::saveSession(QSettings & settings) const
+{
+	Dialog::saveSession(settings);
+	widget_->saveSession(settings, sessionKey());
+}
+
+
+void GuiSearch::restoreSession()
+{
+	DockView::restoreSession();
+	widget_->restoreSession(sessionKey());
+}
+
+
+void GuiSearch::updateTitle()
+{
+	if (widget_->isMinimized()) {
+		// remove title bar
+		setTitleBarWidget(new QWidget());
+		titleBarWidget()->hide();
+	} else
+		// restore title bar
+		setTitleBarWidget(nullptr);
+}
+
+
+void GuiSearch::updateSize()
+{
+	widget_->setFixedHeight(widget_->sizeHint().height());
+	if (widget_->isMinimized())
+		// FIXME still a bit too tall
+		setFixedHeight(widget_->sizeHint().height());
+	else {
+		// undo setFixedHeight
+		setMaximumHeight(QWIDGETSIZE_MAX);
+		setMinimumHeight(0);
+	}
+	update();
+}
+
 
 } // namespace frontend
 } // namespace lyx
diff --git a/src/frontends/qt/GuiSearch.h b/src/frontends/qt/GuiSearch.h
index e6c7c99..e0d5b12 100644
--- a/src/frontends/qt/GuiSearch.h
+++ b/src/frontends/qt/GuiSearch.h
@@ -14,43 +14,98 @@
 #define GUISEARCH_H
 
 #include "GuiDialog.h"
+#include "DockView.h"
+
+#include <QDockWidget>
+
 #include "ui_SearchUi.h"
 
 namespace lyx {
 namespace frontend {
 
-class GuiSearch : public GuiDialog, public Ui::SearchUi
+class GuiSearch;
+
+class GuiSearchWidget : public QWidget, public Ui::SearchUi
 {
 	Q_OBJECT
 
 public:
-	GuiSearch(GuiView & lv);
+	GuiSearchWidget(QWidget * parent);
+	///
+	void saveSession(QSettings & settings, QString const & session_key) const;
+	///
+	void restoreSession(QString const & session_key);
+	///
+	void setBufferView(BufferView const * bv) { bv_ = bv; }
+	///
+	bool isMinimized() { return minimized_; }
 
 private Q_SLOTS:
 	void findChanged();
 	void findClicked(bool const backwards = false);
-	void replaceClicked();
+	void findPrevClicked();
+	void replaceClicked(bool const backwards = false);
+	void replacePrevClicked();
 	void replaceallClicked();
+	void minimizeClicked(bool const toggle = true);
+Q_SIGNALS:
+	void needTitleBarUpdate() const;
+	void needSizeUpdate() const;
 
 private:
 	///
 	void keyPressEvent(QKeyEvent * e) override;
 	///
 	void showEvent(QShowEvent * e) override;
-	///
-	bool initialiseParams(std::string const &) override { return true; }
-	void clearParams() override {}
-	void dispatchParams() override {}
-	bool isBufferDependent() const override { return true; }
-
 	/// Searches occurrence of string
 	void find(docstring const & search,
 		  bool casesensitive, bool matchword, bool forward);
-
 	/// Replaces occurrence of string
 	void replace(docstring const & search, docstring const & replace,
 		     bool casesensitive, bool matchword,
 		     bool forward, bool all);
+	///
+	BufferView const * bv_;
+	///
+	bool minimized_ = false;
+};
+
+
+class GuiSearch : public DockView
+{
+	Q_OBJECT
+
+public:
+	GuiSearch(
+		GuiView & parent, ///< the main window where to dock.
+		Qt::DockWidgetArea area = Qt::BottomDockWidgetArea, ///< Position of the dock (and also drawer)
+		Qt::WindowFlags flags = {});
+
+	/// Controller inherited method.
+	///@{
+	bool initialiseParams(std::string const &) override { return true; }
+	void clearParams() override {}
+	void dispatchParams() override {}
+	bool isBufferDependent() const override { return true; }
+	void updateView() override;
+	void saveSession(QSettings & settings) const override;
+	void restoreSession() override;
+	bool wantInitialFocus() const override { return true; }
+	///@}
+
+public Q_SLOTS:
+	///
+	void onBufferViewChanged() override;
+
+private Q_SLOTS:
+	/// update title display
+	void updateTitle();
+	/// update dock size
+	void updateSize();
+
+private:
+	/// The encapsulated widget.
+	GuiSearchWidget * widget_;
 };
 
 } // namespace frontend
diff --git a/src/frontends/qt/ui/SearchUi.ui b/src/frontends/qt/ui/SearchUi.ui
index a42d67e..53661ba 100644
--- a/src/frontends/qt/ui/SearchUi.ui
+++ b/src/frontends/qt/ui/SearchUi.ui
@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <ui version="4.0">
  <class>SearchUi</class>
- <widget class="QDialog" name="SearchUi">
+ <widget class="QWidget" name="SearchUi">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>416</width>
-    <height>240</height>
+    <width>678</width>
+    <height>135</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -19,170 +19,228 @@
   <property name="windowTitle">
    <string/>
   </property>
-  <property name="sizeGripEnabled">
-   <bool>true</bool>
+  <property name="sizeGripEnabled" stdset="0">
+   <bool>false</bool>
   </property>
-  <layout class="QGridLayout" name="gridLayout_3">
+  <layout class="QGridLayout" name="gridLayout_2">
+   <item row="1" column="0">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QCheckBox" name="caseCB">
+       <property name="text">
+        <string>&Case sensitive[[search]]</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="wordsCB">
+       <property name="text">
+        <string>Match &whole words only</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::MinimumExpanding</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>89</width>
+       <height>0</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
    <item row="0" column="0">
-    <layout class="QGridLayout" name="mainGridLayout">
-     <item row="0" column="0" rowspan="2">
-      <layout class="QGridLayout" name="gridLayout">
-       <item row="0" column="0">
-        <widget class="QLabel" name="findLA">
-         <property name="text">
-          <string>&Find:</string>
-         </property>
-         <property name="buddy">
-          <cstring>findCO</cstring>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="1">
-        <widget class="QComboBox" name="findCO">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="focusPolicy">
-          <enum>Qt::StrongFocus</enum>
-         </property>
-         <property name="editable">
-          <bool>true</bool>
-         </property>
-         <property name="maxCount">
-          <number>666</number>
-         </property>
-         <property name="insertPolicy">
-          <enum>QComboBox::InsertAtTop</enum>
-         </property>
-         <property name="duplicatesEnabled">
-          <bool>false</bool>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="0">
-        <widget class="QLabel" name="replaceLA">
-         <property name="text">
-          <string>Re&place with:</string>
-         </property>
-         <property name="buddy">
-          <cstring>replaceCO</cstring>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="1">
-        <widget class="QComboBox" name="replaceCO">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="editable">
-          <bool>true</bool>
-         </property>
-         <property name="maxCount">
-          <number>666</number>
-         </property>
-         <property name="insertPolicy">
-          <enum>QComboBox::InsertAtTop</enum>
-         </property>
-         <property name="duplicatesEnabled">
-          <bool>false</bool>
-         </property>
-        </widget>
-       </item>
-      </layout>
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="2">
+      <widget class="QPushButton" name="findPrevPB">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="toolTip">
+        <string>Find previous occurrence (Shift+Enter)</string>
+       </property>
+       <property name="text">
+        <string>Find[[Previous]]</string>
+       </property>
+       <property name="icon">
+        <iconset theme="go-previous">
+         <normaloff>.</normaloff>.</iconset>
+       </property>
+      </widget>
      </item>
-     <item row="0" column="1">
-      <widget class="QPushButton" name="findPB">
+     <item row="1" column="4">
+      <widget class="QPushButton" name="replaceallPB">
        <property name="enabled">
         <bool>false</bool>
        </property>
+       <property name="toolTip">
+        <string>Replace all occurrences</string>
+       </property>
        <property name="text">
-        <string>Find &Next</string>
+        <string>Replace &All</string>
        </property>
-       <property name="default">
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QComboBox" name="findCO">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::StrongFocus</enum>
+       </property>
+       <property name="editable">
         <bool>true</bool>
        </property>
+       <property name="maxCount">
+        <number>666</number>
+       </property>
+       <property name="insertPolicy">
+        <enum>QComboBox::InsertAtTop</enum>
+       </property>
+       <property name="duplicatesEnabled">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="4">
+      <widget class="QPushButton" name="minimizePB">
+       <property name="toolTip">
+        <string>Hide replace and option widgets</string>
+       </property>
+       <property name="text">
+        <string>&Minimize</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLabel" name="replaceLA">
+       <property name="text">
+        <string>Rep&lace with:</string>
+       </property>
+       <property name="buddy">
+        <cstring>replaceCO</cstring>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="0">
+      <widget class="QLabel" name="findLA">
+       <property name="text">
+        <string>&Search:</string>
+       </property>
+       <property name="buddy">
+        <cstring>findCO</cstring>
+       </property>
       </widget>
      </item>
      <item row="1" column="1">
+      <widget class="QComboBox" name="replaceCO">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="editable">
+        <bool>true</bool>
+       </property>
+       <property name="maxCount">
+        <number>666</number>
+       </property>
+       <property name="insertPolicy">
+        <enum>QComboBox::InsertAtTop</enum>
+       </property>
+       <property name="duplicatesEnabled">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="3">
       <widget class="QPushButton" name="replacePB">
        <property name="enabled">
         <bool>false</bool>
        </property>
+       <property name="toolTip">
+        <string>Replace and find next occurrence</string>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::RightToLeft</enum>
+       </property>
        <property name="text">
-        <string>&Replace</string>
+        <string>&Replace[[Next]]</string>
+       </property>
+       <property name="icon">
+        <iconset theme="go-next">
+         <normaloff>.</normaloff>.</iconset>
        </property>
       </widget>
      </item>
-     <item row="2" column="0">
-      <layout class="QVBoxLayout" name="verticalLayout_4">
-       <item>
-        <widget class="QCheckBox" name="caseCB">
-         <property name="text">
-          <string>Case &sensitive[[search]]</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QCheckBox" name="wordsCB">
-         <property name="text">
-          <string>Match &whole words only</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QCheckBox" name="backwardsCB">
-         <property name="text">
-          <string>Search &backwards</string>
-         </property>
-        </widget>
-       </item>
-      </layout>
+     <item row="1" column="2">
+      <widget class="QPushButton" name="replacePrevPB">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="toolTip">
+        <string>Replace and find previous occurrence</string>
+       </property>
+       <property name="text">
+        <string>Re&place[[Previous]]</string>
+       </property>
+       <property name="icon">
+        <iconset theme="go-previous">
+         <normaloff>.</normaloff>.</iconset>
+       </property>
+      </widget>
      </item>
-     <item row="2" column="1">
-      <layout class="QVBoxLayout" name="verticalLayout">
-       <item>
-        <widget class="QPushButton" name="replaceallPB">
-         <property name="enabled">
-          <bool>false</bool>
-         </property>
-         <property name="text">
-          <string>Replace &All</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <spacer name="verticalSpacer">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeType">
-          <enum>QSizePolicy::Expanding</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>89</width>
-           <height>13</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
+     <item row="0" column="3">
+      <widget class="QPushButton" name="findPB">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="toolTip">
+        <string>Find next occurrence (Enter)</string>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::RightToLeft</enum>
+       </property>
+       <property name="text">
+        <string>Find[[Next]]</string>
+       </property>
+       <property name="icon">
+        <iconset theme="go-next">
+         <normaloff>.</normaloff>.</iconset>
+       </property>
+       <property name="default">
+        <bool>true</bool>
+       </property>
+      </widget>
      </item>
     </layout>
    </item>
-   <item row="1" column="0">
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Close</set>
-     </property>
-    </widget>
-   </item>
   </layout>
  </widget>
  <includes>


More information about the lyx-cvs mailing list