]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt2/QCitation.C
Some string(widget->text()) fixes. Weirdness
[lyx.git] / src / frontends / qt2 / QCitation.C
index 0d1770dedaf688a8f6647282e07d4714dcca995e..03fcd326c64c000033028cb9659832d5e3d2c76a 100644 (file)
@@ -1,10 +1,12 @@
 /**
  * \file QCitation.C
- * Copyright 2001 the LyX Team
- * Read the file COPYING
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- * \author Angus Leeming <a.leeming@ic.ac.uk>
- * \author Kalle Dalheimer <kalle@klaralvdalens-datakonsult.se>
+ * \author Angus Leeming
+ * \author Kalle Dalheimer
+ *
+ * Full author contact details are available in file CREDITS
  */
 
 #include <config.h>
@@ -15,7 +17,7 @@
 
 #include "QCitationDialog.h"
 #include "QCitation.h"
+
 #include <qcheckbox.h>
 #include <qcombobox.h>
 #include <qlineedit.h>
@@ -23,7 +25,7 @@
 #include <qmultilineedit.h>
 #include <qpushbutton.h>
 
-#include "QtLyXView.h" 
+#include "QtLyXView.h"
 #include "Qt2BC.h"
 #include "ControlCitation.h"
 #include "debug.h"
@@ -41,17 +43,28 @@ using std::vector;
 
 typedef Qt2CB<ControlCitation, Qt2DB<QCitationDialog> > base_class;
 
-QCitation::QCitation(ControlCitation & c)
-       : base_class(c, _("Citation"))
+
+QCitation::QCitation()
+       : base_class(_("Citation"))
 {}
 
 
 void QCitation::apply()
 {
-       controller().params().setCmdName("cite");
+       vector<biblio::CiteStyle> const & styles =
+               ControlCitation::getCiteStyles();
+
+       int const choice = dialog_->citationStyleCO->currentItem();
+       bool const full  = dialog_->fulllistCB->isChecked();
+       bool const force = dialog_->forceuppercaseCB->isChecked();
+
+       string const command =
+               biblio::getCiteCommand(styles[choice], full, force);
+
+       controller().params().setCmdName(command);
        controller().params().setContents(getStringFromVector(citekeys));
-       
-       string const after  = dialog_->textAfterED->text().latin1();
+
+       string const after = dialog_->textAfterED->text().latin1();
        controller().params().setOptions(after);
 }
 
@@ -60,7 +73,7 @@ void QCitation::hide()
 {
        citekeys.clear();
        bibkeys.clear();
-       
+
        Qt2Base::hide();
 }
 
@@ -83,18 +96,68 @@ void QCitation::build_dialog()
        bc().addReadOnly(dialog_->upPB);
        bc().addReadOnly(dialog_->downPB);
        bc().addReadOnly(dialog_->citationStyleCO);
-       // add when enabled ! 
+       bc().addReadOnly(dialog_->forceuppercaseCB);
+       bc().addReadOnly(dialog_->fulllistCB);
+       // add when enabled !
        //bc().addReadOnly(dialog_->textBeforeED);
        bc().addReadOnly(dialog_->textAfterED);
 }
 
 
+void QCitation::fillStyles()
+{
+       // style
+       string key;
+
+       if (!citekeys.empty())
+               key = citekeys[0];
+
+       dialog_->citationStyleCO->clear();
+       vector<string> const & sty = controller().getCiteStrings(key);
+
+       for (vector<string>::const_iterator it = sty.begin();
+               it != sty.end(); ++it) {
+               dialog_->citationStyleCO->insertItem(it->c_str());
+       }
+}
+
+
+void QCitation::updateStyle()
+{
+       string const & command = controller().params().getCmdName();
+
+       // Find the style of the citekeys
+       vector<biblio::CiteStyle> const & styles =
+               ControlCitation::getCiteStyles();
+       biblio::CitationStyle cs = biblio::getCitationStyle(command);
+
+       vector<biblio::CiteStyle>::const_iterator cit =
+               find(styles.begin(), styles.end(), cs.style);
+
+       dialog_->citationStyleCO->setCurrentItem(0);
+       dialog_->fulllistCB->setChecked(false);
+       dialog_->forceuppercaseCB->setChecked(false);
+
+       if (cit != styles.end()) {
+               int const i = int(cit - styles.begin());
+               dialog_->citationStyleCO->setCurrentItem(i);
+               dialog_->fulllistCB->setChecked(cs.full);
+               dialog_->forceuppercaseCB->setChecked(cs.forceUCase);
+       }
+
+       bool const natbib = controller().usingNatbib();
+       dialog_->citationStyleCO->setEnabled(natbib);
+       dialog_->fulllistCB->setEnabled(natbib);
+       dialog_->forceuppercaseCB->setEnabled(natbib);
+}
+
+
 void QCitation::update_contents()
 {
        // Make the list of all available bibliography keys
        bibkeys = biblio::getKeys(controller().bibkeysInfo());
        updateBrowser(dialog_->bibLB, bibkeys);
-       
+
        // Ditto for the keys cited in this inset
        citekeys = getVectorFromString(controller().params().getContents());
        updateBrowser(dialog_->citeLB, citekeys);
@@ -105,19 +168,23 @@ void QCitation::update_contents()
        setCiteButtons(OFF);
 
        dialog_->textAfterED->setText(controller().params().getOptions().c_str());
+
+       fillStyles();
+
+       updateStyle();
 }
 
 
-void QCitation::updateBrowser(QListBox* browser,
+void QCitation::updateBrowser(QListBox * browser,
                                  vector<string> const & keys) const
 {
        browser->clear();
 
        for (vector<string>::const_iterator it = keys.begin();
                it < keys.end(); ++it) {
-               string const key = frontStrip(strip(*it));
+               string const key = trim(*it);
                // FIXME: why the .empty() test ?
-               if(!key.empty())
+               if (!key.empty())
                        browser->insertItem(key.c_str());
        }
 }