]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiThesaurus.cpp
do what the FIXME suggested
[lyx.git] / src / frontends / qt4 / GuiThesaurus.cpp
index dc076319f051a042e4e43bb5ff156b02128e3de9..bd3e1794726233dd9be26f704a4466af4d918c2d 100644 (file)
 #include <config.h>
 
 #include "GuiThesaurus.h"
-#include "Qt2BC.h"
+
 #include "qt_helpers.h"
-#include "debug.h"
 
-#include <QCloseEvent>
+#include "FuncRequest.h"
+#include "lyxfind.h"
+
+#include "support/debug.h"
+#include "support/gettext.h"
+
 #include <QHeaderView>
 #include <QLineEdit>
 #include <QPushButton>
 #include <QTreeWidget>
 #include <QTreeWidgetItem>
 
-using std::string;
+
+using namespace std;
 
 namespace lyx {
 namespace frontend {
 
-/////////////////////////////////////////////////////////////////////
-//
-// QTheasurusDialog
-//
-/////////////////////////////////////////////////////////////////////
-
-GuiThesaurusDialog::GuiThesaurusDialog(GuiThesaurus * form)
-       : form_(form)
+GuiThesaurus::GuiThesaurus(GuiView & lv)
+       : GuiDialog(lv, "thesaurus", qt_("Thesaurus"))
 {
        setupUi(this);
 
@@ -42,11 +41,11 @@ GuiThesaurusDialog::GuiThesaurusDialog(GuiThesaurus * form)
        meaningsTV->header()->hide();
 
        connect(closePB, SIGNAL(clicked()),
-               form, SLOT(slotClose()));
+               this, SLOT(slotClose()));
        connect(replaceED, SIGNAL(returnPressed()),
                this, SLOT(replaceClicked()));
-       connect(replaceED, SIGNAL(textChanged(const QString &)),
-               this, SLOT(change_adaptor() ) );
+       connect(replaceED, SIGNAL(textChanged(QString)),
+               this, SLOT(change_adaptor()));
        connect(entryED, SIGNAL(returnPressed()),
                this, SLOT(entryChanged()));
        connect(replacePB, SIGNAL(clicked()),
@@ -57,53 +56,46 @@ GuiThesaurusDialog::GuiThesaurusDialog(GuiThesaurus * form)
                this, SLOT(selectionChanged()));
        connect(meaningsTV, SIGNAL(itemActivated(QTreeWidgetItem *, int)),
                this, SLOT(selectionClicked(QTreeWidgetItem *, int)));
-}
 
-
-void GuiThesaurusDialog::change_adaptor()
-{
-       form_->changed();
+       bc().setCancel(closePB);
+       bc().setApply(replacePB);
+       bc().addReadOnly(replaceED);
+       bc().addReadOnly(replacePB);
+       bc().setPolicy(ButtonPolicy::OkApplyCancelReadOnlyPolicy);
 }
 
 
-void GuiThesaurusDialog::closeEvent(QCloseEvent * e)
+void GuiThesaurus::change_adaptor()
 {
-       form_->slotWMHide();
-       e->accept();
+       changed();
 }
 
 
-void GuiThesaurusDialog::entryChanged()
+void GuiThesaurus::entryChanged()
 {
        updateLists();
 }
 
 
-void GuiThesaurusDialog::replaceClicked()
-{
-       form_->replace();
-}
-
-
-void GuiThesaurusDialog::selectionChanged()
+void GuiThesaurus::selectionChanged()
 {
        int const col = meaningsTV->currentColumn();
-       if (col<0 || form_->readOnly())
+       if (col < 0 || isBufferReadonly())
                return;
 
        replaceED->setText(meaningsTV->currentItem()->text(col));
        replacePB->setEnabled(true);
-       form_->changed();
+       changed();
 }
 
 
-void GuiThesaurusDialog::itemClicked(QTreeWidgetItem * /*item*/, int /*col*/)
+void GuiThesaurus::itemClicked(QTreeWidgetItem * /*item*/, int /*col*/)
 {
        selectionChanged();
 }
 
 
-void GuiThesaurusDialog::selectionClicked(QTreeWidgetItem * item, int col)
+void GuiThesaurus::selectionClicked(QTreeWidgetItem * item, int col)
 {
        entryED->setText(item->text(col));
        selectionChanged();
@@ -111,19 +103,19 @@ void GuiThesaurusDialog::selectionClicked(QTreeWidgetItem * item, int col)
 }
 
 
-void GuiThesaurusDialog::updateLists()
+void GuiThesaurus::updateLists()
 {
        meaningsTV->clear();
        meaningsTV->setUpdatesEnabled(false);
 
-       Thesaurus::Meanings meanings = form_->controller().getMeanings(qstring_to_ucs4(entryED->text()));
+       Thesaurus::Meanings meanings = getMeanings(qstring_to_ucs4(entryED->text()));
 
        for (Thesaurus::Meanings::const_iterator cit = meanings.begin();
                cit != meanings.end(); ++cit) {
                QTreeWidgetItem * i = new QTreeWidgetItem(meaningsTV);
                i->setText(0, toqstr(cit->first));
                meaningsTV->expandItem(i);
-               for (std::vector<docstring>::const_iterator cit2 = cit->second.begin();
+               for (vector<docstring>::const_iterator cit2 = cit->second.begin();
                        cit2 != cit->second.end(); ++cit2) {
                                QTreeWidgetItem * i2 = new QTreeWidgetItem(i);
                                i2->setText(0, toqstr(*cit2));
@@ -135,42 +127,60 @@ void GuiThesaurusDialog::updateLists()
 }
 
 
-/////////////////////////////////////////////////////////////////////
-//
-// GuiThesaurus
-//
-/////////////////////////////////////////////////////////////////////
+void GuiThesaurus::updateContents()
+{
+       entryED->setText(toqstr(text_));
+       replaceED->setText("");
+       updateLists();
+}
+
 
-GuiThesaurus::GuiThesaurus(Dialog & parent)
-       : GuiView<GuiThesaurusDialog>(parent, _("Thesaurus"))
+void GuiThesaurus::replaceClicked()
 {
+       replace(qstring_to_ucs4(replaceED->text()));
 }
 
 
-void GuiThesaurus::build_dialog()
+bool GuiThesaurus::initialiseParams(string const & data)
 {
-       dialog_.reset(new GuiThesaurusDialog(this));
+       text_ = from_utf8(data);
+       return true;
+}
 
-       bcview().setCancel(dialog_->closePB);
-       bcview().setApply(dialog_->replacePB);
-       bcview().addReadOnly(dialog_->replaceED);
-       bcview().addReadOnly(dialog_->replacePB);
+
+void GuiThesaurus::clearParams()
+{
+       text_.erase();
 }
 
 
-void GuiThesaurus::update_contents()
+void GuiThesaurus::replace(docstring const & newstr)
 {
-       dialog_->entryED->setText(toqstr(controller().text()));
-       dialog_->replaceED->setText("");
-       dialog_->updateLists();
+       /* FIXME: this is not suitable ! We need to have a "lock"
+        * on a particular charpos in a paragraph that is broken on
+        * deletion/change !
+        */
+       docstring const data =
+               replace2string(text_, newstr,
+                                    true,  // case sensitive
+                                    true,  // match word
+                                    false, // all words
+                                    true); // forward
+       dispatch(FuncRequest(LFUN_WORD_REPLACE, data));
 }
 
 
-void GuiThesaurus::replace()
+Thesaurus::Meanings const & GuiThesaurus::getMeanings(docstring const & str)
 {
-       controller().replace(qstring_to_ucs4(dialog_->replaceED->text()));
+       if (str != laststr_)
+               meanings_ = thesaurus.lookup(str);
+       return meanings_;
 }
 
+
+Dialog * createGuiThesaurus(GuiView & lv) { return new GuiThesaurus(lv); }
+
+
 } // namespace frontend
 } // namespace lyx