]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/FindAndReplace.cpp
Use <cstdint> instead of <boost/cstdint.hpp>
[lyx.git] / src / frontends / qt4 / FindAndReplace.cpp
index e13f25d48278aad1d1b391cf0807d1ff18490b59..5605b0074fd3c78fd71ea7723bb7b27630d042ff 100644 (file)
 
 #include "FindAndReplace.h"
 
-#include "Lexer.h"
 #include "GuiApplication.h"
 #include "GuiView.h"
 #include "GuiWorkArea.h"
 #include "qt_helpers.h"
-#include "Language.h"
 
 #include "Buffer.h"
-#include "BufferParams.h"
 #include "BufferList.h"
+#include "BufferParams.h"
 #include "BufferView.h"
-#include "Text.h"
-#include "TextClass.h"
 #include "Cursor.h"
 #include "FuncRequest.h"
+#include "Language.h"
+#include "Lexer.h"
 #include "LyX.h"
 #include "lyxfind.h"
+#include "Text.h"
+#include "TextClass.h"
 
 #include "frontends/alert.h"
 
 #include "support/debug.h"
+#include "support/docstream.h"
 #include "support/filetools.h"
 #include "support/FileName.h"
 #include "support/gettext.h"
@@ -64,20 +65,26 @@ FindAndReplaceWidget::FindAndReplaceWidget(GuiView & view)
        replace_work_area_->setFrameStyle(QFrame::StyledPanel);
 
        // We don't want two cursors blinking.
-       find_work_area_->stopBlinkingCursor();
-       replace_work_area_->stopBlinkingCursor();
+       find_work_area_->stopBlinkingCaret();
+       replace_work_area_->stopBlinkingCaret();
+       old_buffer_ = view_.documentBufferView() ? 
+           &(view_.documentBufferView()->buffer()) : 0;
+
+       // align items on top
+       cbVerticalLayout->setAlignment(Qt::AlignTop);
+       pbVerticalLayout->setAlignment(Qt::AlignTop);
 }
 
 
 void FindAndReplaceWidget::dockLocationChanged(Qt::DockWidgetArea area)
 {
-       if (area == Qt::RightDockWidgetArea || area == Qt::LeftDockWidgetArea) {
-               dynamicLayoutBasic_->setDirection(QBoxLayout::TopToBottom);
-               dynamicLayoutAdvanced_->setDirection(QBoxLayout::TopToBottom);
-       } else {
-               dynamicLayoutBasic_->setDirection(QBoxLayout::LeftToRight);
-               dynamicLayoutAdvanced_->setDirection(QBoxLayout::LeftToRight);
-       }
+       if (area == Qt::RightDockWidgetArea || area == Qt::LeftDockWidgetArea) {
+               dynamicLayoutBasic_->setDirection(QBoxLayout::TopToBottom);
+               dynamicLayoutAdvanced_->setDirection(QBoxLayout::TopToBottom);
+       } else {
+               dynamicLayoutBasic_->setDirection(QBoxLayout::LeftToRight);
+               dynamicLayoutAdvanced_->setDirection(QBoxLayout::LeftToRight);
+       }
 }
 
 
@@ -110,8 +117,8 @@ bool FindAndReplaceWidget::eventFilter(QObject * obj, QEvent * event)
                // back to how it was
                searchbackCB->setChecked(searchback);
                return true;
-               break;
-               }
+       }
+
        case Qt::Key_Tab:
                if (e->modifiers() == Qt::NoModifier) {
                        if (obj == find_work_area_){
@@ -144,7 +151,7 @@ bool FindAndReplaceWidget::eventFilter(QObject * obj, QEvent * event)
 }
 
 
-static vector<string> const & allManualsFiles() 
+static vector<string> const & allManualsFiles()
 {
        static const char * files[] = {
                "Intro", "UserGuide", "Tutorial", "Additional",
@@ -169,7 +176,7 @@ static vector<string> const & allManualsFiles()
  **
  ** Return true if restarted from master-document buffer.
  **/
-static bool nextDocumentBuffer(Buffer * & buf) 
+static bool nextDocumentBuffer(Buffer * & buf)
 {
        ListOfBuffers const children = buf->allRelatives();
        LYXERR(Debug::FIND, "children.size()=" << children.size());
@@ -190,7 +197,7 @@ static bool nextDocumentBuffer(Buffer * & buf)
  **
  ** Return true if restarted from last child buffer.
  **/
-static bool prevDocumentBuffer(Buffer * & buf) 
+static bool prevDocumentBuffer(Buffer * & buf)
 {
        ListOfBuffers const children = buf->allRelatives();
        LYXERR(Debug::FIND, "children.size()=" << children.size());
@@ -289,7 +296,7 @@ docstring getQuestionString(FindAndReplaceOptions const & opt)
        docstring message = opt.forward ?
                bformat(_("%1$s: the end was reached while searching forward.\n"
                          "Continue searching from the beginning?"),
-                       scope) : 
+                       scope) :
                bformat(_("%1$s: the beginning was reached while searching backward.\n"
                          "Continue searching from the end?"),
                        scope);
@@ -308,6 +315,7 @@ bool FindAndReplaceWidget::findAndReplaceScope(FindAndReplaceOptions & opt, bool
        Buffer * buf_orig = &bv->buffer();
        DocIterator cur_orig(bv->cursor());
        int wrap_answer = -1;
+       opt.replace_all = replace_all;
        ostringstream oss;
        oss << opt;
        FuncRequest cmd(LFUN_WORD_FINDADV, from_utf8(oss.str()));
@@ -340,6 +348,8 @@ bool FindAndReplaceWidget::findAndReplaceScope(FindAndReplaceOptions & opt, bool
                }
        }
 
+       UndoGroupHelper helper(buf);
+
        do {
                LYXERR(Debug::FIND, "Dispatching LFUN_WORD_FINDADV");
                dispatch(cmd);
@@ -384,6 +394,9 @@ bool FindAndReplaceWidget::findAndReplaceScope(FindAndReplaceOptions & opt, bool
                if (buf != &view_.documentBufferView()->buffer())
                        lyx::dispatch(FuncRequest(LFUN_BUFFER_SWITCH,
                                                  buf->absFileName()));
+
+               helper.resetBuffer(buf);
+
                bv = view_.documentBufferView();
                if (opt.forward) {
                        bv->cursor().clear();
@@ -397,6 +410,7 @@ bool FindAndReplaceWidget::findAndReplaceScope(FindAndReplaceOptions & opt, bool
                }
                bv->clearSelection();
        } while (wrap_answer != 1);
+
        if (buf_orig != &view_.documentBufferView()->buffer())
                lyx::dispatch(FuncRequest(LFUN_BUFFER_SWITCH,
                                          buf_orig->absFileName()));
@@ -498,7 +512,7 @@ void FindAndReplaceWidget::hideDialog()
 }
 
 
-void FindAndReplaceWidget::on_findNextPB_clicked() 
+void FindAndReplaceWidget::on_findNextPB_clicked()
 {
        findAndReplace(searchbackCB->isChecked(), false);
        find_work_area_->setFocus();
@@ -519,16 +533,12 @@ void FindAndReplaceWidget::on_replaceallPB_clicked()
 }
 
 
-/** Copy selected elements from bv's BufferParams to the dest_bv's one
- ** We don't want to copy'em all, e.g., not the default master **/
+// Copy selected elements from bv's BufferParams to the dest_bv's
 static void copy_params(BufferView const & bv, BufferView & dest_bv) {
        Buffer const & doc_buf = bv.buffer();
        BufferParams const & doc_bp = doc_buf.params();
-       string const & lang = doc_bp.language->lang();
-       string const & doc_class = doc_bp.documentClass().name();
        Buffer & dest_buf = dest_bv.buffer();
-       dest_buf.params().setLanguage(lang);
-       dest_buf.params().setBaseClass(doc_class);
+       dest_buf.params().copyForAdvFR(doc_bp);
        dest_bv.makeDocumentClass();
        dest_bv.cursor().current_font.setLanguage(doc_bp.language);
 }
@@ -583,7 +593,7 @@ FindAndReplace::FindAndReplace(GuiView & parent,
        setFocusProxy(widget_);
 
        connect(this, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)),
-               widget_, SLOT(dockLocationChanged(Qt::DockWidgetArea)));
+               widget_, SLOT(dockLocationChanged(Qt::DockWidgetArea)));
 }
 
 
@@ -602,8 +612,17 @@ bool FindAndReplace::initialiseParams(std::string const & params)
 
 void FindAndReplaceWidget::updateGUI()
 {
-       bool replace_enabled = view_.documentBufferView()
-               && !view_.documentBufferView()->buffer().isReadonly();
+       BufferView * bv = view_.documentBufferView();
+       if (bv) {
+               if (old_buffer_ != &bv->buffer()) {
+                               copy_params(*bv, find_work_area_->bufferView());
+                               copy_params(*bv, replace_work_area_->bufferView());
+                               old_buffer_ = &bv->buffer();
+               }
+       } else
+               old_buffer_ = 0;
+
+       bool const replace_enabled = bv && !bv->buffer().isReadonly();
        replace_work_area_->setEnabled(replace_enabled);
        replacePB->setEnabled(replace_enabled);
        replaceallPB->setEnabled(replace_enabled);
@@ -613,7 +632,7 @@ void FindAndReplaceWidget::updateGUI()
 Dialog * createGuiSearchAdv(GuiView & lv)
 {
        FindAndReplace * gui = new FindAndReplace(lv, Qt::RightDockWidgetArea);
-#ifdef Q_WS_MACX
+#ifdef Q_OS_MAC
        // On Mac show and floating
        gui->setFloating(true);
 #endif