]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiCitation.cpp
Fix the tab ordering of GuiDocument components.
[lyx.git] / src / frontends / qt4 / GuiCitation.cpp
index f56045fb69daabd8cee25097069542ad68e002aa..e219390fbd4cd35b677bb6b5133988484fb945a2 100644 (file)
@@ -20,6 +20,7 @@
 #include "qt_helpers.h"
 
 #include "Buffer.h"
+#include "BufferView.h"
 #include "BiblioInfo.h"
 #include "BufferParams.h"
 #include "FuncRequest.h"
@@ -41,7 +42,7 @@
 
 #undef KeyPress
 
-#include <boost/regex.hpp>
+#include "support/regex.h"
 
 #include <algorithm>
 #include <string>
@@ -114,6 +115,8 @@ GuiCitation::GuiCitation(GuiView & lv)
        connect(selectionManager, SIGNAL(okHook()),
                this, SLOT(on_okPB_clicked()));
 
+       setFocusProxy(availableLV);
+
        // FIXME: the sizeHint() for this is _way_ too high
        infoML->setFixedHeight(60);
 }
@@ -193,7 +196,8 @@ void GuiCitation::updateControls()
 // such as when addPB is pressed, as the list of fields, entries, etc,
 // will not have changed. At the moment, however, the division between
 // fillStyles() and updateStyle() doesn't lend itself to dividing the
-// two methods, though they should be divisible.
+// two methods, though they should be divisible. That is, we should
+// not have to call fillStyles() every time through here.
 void GuiCitation::updateControls(BiblioInfo const & bi)
 {
        QModelIndex idx = selectionManager->getSelectedIndex();
@@ -249,11 +253,16 @@ void GuiCitation::updateStyle()
                std::find(styles.begin(), styles.end(), cs.style);
 
        if (cit != styles.end()) {
-               int const i = int(cit - styles.begin());
-               citationStyleCO->setCurrentIndex(i);
                fulllistCB->setChecked(cs.full);
                forceuppercaseCB->setChecked(cs.forceUpperCase);
        } else {
+               // restore the last used natbib style
+               if (style_ >= 0 && style_ < citationStyleCO->count()) {
+                       // the necessary update will be performed later
+                       citationStyleCO->blockSignals(true);
+                       citationStyleCO->setCurrentIndex(style_);
+                       citationStyleCO->blockSignals(false);
+               }
                fulllistCB->setChecked(false);
                forceuppercaseCB->setChecked(false);
        }
@@ -302,9 +311,6 @@ void GuiCitation::fillStyles(BiblioInfo const & bi)
                citationStyleCO->setCurrentIndex(oldIndex);
 
        citationStyleCO->blockSignals(false);
-       
-       // simulate a change of index to trigger updateFormatting().
-       on_citationStyleCO_currentIndexChanged(citationStyleCO->currentIndex());
 }
 
 
@@ -361,8 +367,8 @@ void GuiCitation::updateInfo(BiblioInfo const & bi, QModelIndex const & idx)
        }
 
        QString const keytxt = toqstr(
-               bi.getInfo(qstring_to_ucs4(idx.data().toString())));
-       infoML->document()->setPlainText(keytxt);
+               bi.getInfo(qstring_to_ucs4(idx.data().toString()), documentBuffer(), true));
+       infoML->document()->setHtml(keytxt);
 }
 
 
@@ -528,16 +534,26 @@ void GuiCitation::init()
                selectedLV->selectionModel()->select(idx, 
                                QItemSelectionModel::ClearAndSelect);
                selectedLV->blockSignals(false);
+               
+               // set the style combo appropriately
+               string const & command = params_.getCmdName();
+               vector<CiteStyle> const & styles = citeStyles_;
+               CitationStyle const cs = citationStyleFromString(command);
+       
+               vector<CiteStyle>::const_iterator cit =
+                       std::find(styles.begin(), styles.end(), cs.style);
+               if (cit != styles.end()) {
+                       int const i = int(cit - styles.begin());
+                       // the necessary update will be performed later
+                       citationStyleCO->blockSignals(true);
+                       citationStyleCO->setCurrentIndex(i);
+                       citationStyleCO->blockSignals(false);
+               }
        } else
                availableLV->setFocus();
        fillFields(bi);
        fillEntries(bi);
        updateControls(bi);
-       // restore the last used natbib style
-       if (style_ >= 0 && style_ < citationStyleCO->count())
-               citationStyleCO->setCurrentIndex(style_);
-       else
-               citationStyleCO->setCurrentIndex(0);
 }
 
 
@@ -597,7 +613,7 @@ void GuiCitation::findKey(BiblioInfo const & bi,
 QStringList GuiCitation::citationStyles(BiblioInfo const & bi, int sel)
 {
        docstring const key = qstring_to_ucs4(cited_keys_[sel]);
-       return to_qstring_list(bi.getCiteStrings(key, buffer()));
+       return to_qstring_list(bi.getCiteStrings(key, documentBuffer()));
 }
 
 
@@ -609,8 +625,8 @@ void GuiCitation::setCitedKeys()
 
 bool GuiCitation::initialiseParams(string const & data)
 {
-       InsetCommand::string2params("citation", data, params_);
-       CiteEngine const engine = buffer().params().citeEngine();
+       InsetCommand::string2params(data, params_);
+       CiteEngine const engine = citeEngine();
        citeStyles_ = citeStyles(engine);
        init();
        return true;
@@ -647,7 +663,7 @@ void GuiCitation::filterByEntryType(BiblioInfo const & bi,
 
 CiteEngine GuiCitation::citeEngine() const
 {
-       return buffer().params().citeEngine();
+       return documentBuffer().params().citeEngine();
 }
 
 
@@ -660,9 +676,9 @@ static docstring escape_special_chars(docstring const & expr)
 {
        // Search for all chars '.|*?+(){}[^$]\'
        // Note that '[' and '\' must be escaped.
-       // This is a limitation of boost::regex, but all other chars in BREs
+       // This is a limitation of lyx::regex, but all other chars in BREs
        // are assumed literal.
-       static const boost::regex reg("[].|*?+(){}^$\\[\\\\]");
+       static const lyx::regex reg("[].|*?+(){}^$\\[\\\\]");
 
        // $& is a perl-like expression that expands to all
        // of the current match
@@ -670,7 +686,7 @@ static docstring escape_special_chars(docstring const & expr)
        // boost to treat it as a literal.
        // Thus, to prefix a matched expression with '\', we use:
        // FIXME: UNICODE
-       return from_utf8(boost::regex_replace(to_utf8(expr), reg, "\\\\$&"));
+       return from_utf8(lyx::regex_replace(to_utf8(expr), reg, string("\\\\$&")));
 }
 
 
@@ -687,15 +703,15 @@ vector<docstring> GuiCitation::searchKeys(BiblioInfo const & bi,
 
        if (!regex)
                // We must escape special chars in the search_expr so that
-               // it is treated as a simple string by boost::regex.
+               // it is treated as a simple string by lyx::regex.
                expr = escape_special_chars(expr);
 
-       boost::regex reg_exp;
+       lyx::regex reg_exp;
        try {
                reg_exp.assign(to_utf8(expr), case_sensitive ?
-                       boost::regex_constants::normal : boost::regex_constants::icase);
-       } catch (boost::regex_error & e) {
-               // boost::regex throws an exception if the regular expression is not
+                       lyx::regex_constants::ECMAScript : lyx::regex_constants::icase);
+       } catch (lyx::regex_error & e) {
+               // lyx::regex throws an exception if the regular expression is not
                // valid.
                LYXERR(Debug::GUI, e.what());
                return vector<docstring>();
@@ -721,10 +737,10 @@ vector<docstring> GuiCitation::searchKeys(BiblioInfo const & bi,
                        continue;
 
                try {
-                       if (boost::regex_search(data, reg_exp))
+                       if (lyx::regex_search(data, reg_exp))
                                foundKeys.push_back(*it);
                }
-               catch (boost::regex_error & e) {
+               catch (lyx::regex_error & e) {
                        LYXERR(Debug::GUI, e.what());
                        return vector<docstring>();
                }
@@ -735,15 +751,16 @@ vector<docstring> GuiCitation::searchKeys(BiblioInfo const & bi,
 
 void GuiCitation::dispatchParams()
 {
-       std::string const lfun = InsetCommand::params2string("citation", params_);
+       std::string const lfun = InsetCommand::params2string(params_);
        dispatch(FuncRequest(getLfun(), lfun));
 }
 
 
 BiblioInfo const & GuiCitation::bibInfo() const
 {
-       buffer().checkBibInfoCache();
-       return buffer().masterBibInfo();
+       Buffer const & buf = documentBuffer();
+       buf.reloadBibInfoCache();
+       return buf.masterBibInfo();
 }