]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiCitation.h
do what the FIXME suggested
[lyx.git] / src / frontends / qt4 / GuiCitation.h
index 573525cc31c444a6b2e91f31ec0ed4386ee4cbda..f8029ece78554dbd69a5b640cdb16c90636eb87e 100644 (file)
 #ifndef GUICITATION_H
 #define GUICITATION_H
 
-#include "Dialog.h"
+#include "GuiDialog.h"
 #include "GuiSelectionManager.h"
 #include "ui_CitationUi.h"
-#include "ControlCitation.h"
 #include "support/docstring.h"
+#include "BiblioInfo.h"
 
 #include <QKeyEvent>
 #include <QStringList>
 namespace lyx {
 namespace frontend {
 
-class GuiCitation;
-
-class GuiCitationDialog : public QDialog,
-       public Ui::CitationUi, public Dialog::View
+class GuiCitation : public GuiCommand, public Ui::CitationUi
 {
        Q_OBJECT
 
 public:
-       GuiCitationDialog(Dialog &, GuiCitation * form );
-
-       virtual ~GuiCitationDialog();
-
-       virtual void apply();
-
-       /// Hide the dialog from sight
-       void hide();
-
-       /// Redraw the dialog (e.g. if the colors have been remapped).
-       void redraw() {}
-
-       /// Create the dialog if necessary, update it and display it.
-       void show();
+       ///
+       GuiCitation(GuiView & lv);
 
-       /// \return true if the dialog is visible.
-       bool isVisible() const;
+       ///
+       void applyView();
 
 public Q_SLOTS:
        /// Update the display of the dialog whilst it is still visible.
-       void update();
+       void updateView();
 
-protected:
+private:
+       ///
+       void showEvent(QShowEvent * e);
+       ///
        void closeEvent(QCloseEvent * e);
        /// prepares a call to GuiCitation::searchKeys when we
        /// are ready to search the BibTeX entries
@@ -68,7 +56,7 @@ protected:
        /// update the display of BibTeX information
        void updateInfo(QModelIndex const &);
 
-protected Q_SLOTS:
+private Q_SLOTS:
        void cleanUp();
        void on_okPB_clicked();
        void on_cancelPB_clicked();
@@ -77,9 +65,10 @@ protected Q_SLOTS:
        void on_findLE_textChanged(const QString & text);
        void on_fieldsCO_currentIndexChanged(int index);
        void on_entriesCO_currentIndexChanged(int index);
+       void on_citationStyleCO_currentIndexChanged(int index);
        void on_caseCB_stateChanged(int);
        void on_regexCB_stateChanged(int);
-       virtual void changed();
+       void changed();
        ///
        void setCitedKeys();
        /// performs a limited update, suitable for internal call
@@ -96,47 +85,29 @@ private:
        void fillEntries();
        /// set the styles combo
        void updateStyle();
+       /// set the formatting widgets
+       void updateFormatting(biblio::CiteStyle currentStyle);
        /// last used citation style
        int style_;
        
-       GuiCitation * form_;
-
        GuiSelectionManager * selectionManager;
-};
-
-
-class GuiCitation : public ControlCitation
-{
-public:
-       ///
-       GuiCitation(Dialog &);
-       virtual ~GuiCitation() {}
-       virtual bool initialiseParams(std::string const & data);
 
        ///
        void init();
-
        /// Available keys
        QStringListModel * available() { return &available_model_; }
-
        /// Selected keys
        QStringListModel * selected() { return &selected_model_; }
-
        /// Text before cite
        QString textBefore();
-
        /// Text after cite
        QString textAfter();
-
        /// Get key description
        QString getKeyInfo(QString const &);
-
        /// Clear selected keys
        void clearSelection();
-       
        /// Return a list of available fields 
        QStringList getFieldsAsQStringList();
-       
        /// Return a list of available fields 
        QStringList getEntriesAsQStringList();
        
@@ -155,10 +126,8 @@ public:
        QStringList citationStyles(int);
 
        /// Set the Params variable for the Controller.
-       virtual void apply(int const choice, bool const full, bool const force,
+       void apply(int const choice, bool const full, bool const force,
                                          QString before, QString after);
-       
-       void setCitedKeys();
 
 private:
        /// available keys.
@@ -169,8 +138,48 @@ private:
        QStringList all_keys_;
        /// Cited keys.
        QStringList cited_keys_;
-};
 
+       ///
+       bool initialiseParams(std::string const & data);
+
+       /// clean-up on hide.
+       void clearParams();
+
+       /** Disconnect from the inset when the Apply button is pressed.
+        *  Allows easy insertion of multiple citations.
+        */
+       bool disconnectOnApply() const { return true; }
+
+       /// \return the list of all available bibliography keys.
+       std::vector<docstring> const availableKeys() const;
+       /// \return the list of all used BibTeX fields
+       std::vector<docstring> const availableFields() const;
+       /// \return the list of all used BibTeX entry types
+       std::vector<docstring> const availableEntries() const;
+       ///
+       void filterByEntryType(
+               std::vector<docstring> & keyVector, docstring entryType);
+       ///
+       biblio::CiteEngine getEngine() const;
+
+       /// \return information for this key.
+       docstring getInfo(docstring const & key) const;
+
+       /// Search a given string within the passed keys.
+       /// \return the vector of matched keys.
+       std::vector<docstring> searchKeys(
+               std::vector<docstring> const & keys_to_search, //< Keys to search.
+               bool only_keys, //< whether to search only the keys
+               docstring const & search_expression, //< Search expression (regex possible)
+               docstring field, //< field to search, empty for all fields
+               bool case_sensitive = false, //< set to true is the search should be case sensitive
+               bool regex = false //< \set to true if \c search_expression is a regex
+               ); //
+
+private:
+       /// The BibTeX information available to the dialog
+       BiblioInfo bibkeysInfo_;
+};
 
 } // namespace frontend
 } // namespace lyx