1 // -*- C++ -*-
2 /**
3  * \file GuiCitation.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Angus Leeming
8  * \author Kalle Dalheimer
9  * \author Abdelrazak Younes
10  * \author Richard Heck
11  *
12  * Full author contact details are available in file CREDITS.
13  */
14 
15 #ifndef GUICITATION_H
16 #define GUICITATION_H
17 
18 #include "DialogView.h"
19 #include "ui_CitationUi.h"
20 #include "FancyLineEdit.h"
21 
22 #include "insets/InsetCommandParams.h"
23 
24 #include "BiblioInfo.h"
25 #include "Citation.h"
26 
27 #include <QAbstractListModel>
28 #include <QStandardItemModel>
29 #include <QStringList>
30 #include <QStringListModel>
31 
32 namespace lyx {
33 
34 class BiblioInfo;
35 
36 namespace frontend {
37 
38 class GuiSelectionManager;
39 
40 
41 class GuiCitation : public DialogView, public Ui::CitationUi
42 {
43 	Q_OBJECT
44 
45 public:
46 	///
47 	GuiCitation(GuiView & lv);
48 
49 private Q_SLOTS:
50 	void on_okPB_clicked();
51 	void on_cancelPB_clicked();
52 	void on_restorePB_clicked();
53 	void on_applyPB_clicked();
54 	void on_literalCB_clicked();
55 	void filterPressed();
56 	void filterChanged(const QString & text);
57 	void on_fieldsCO_currentIndexChanged(int index);
58 	void on_entriesCO_currentIndexChanged(int index);
59 	void on_citationStyleCO_currentIndexChanged(int index);
60 	void resetFilter();
61 	void caseChanged();
62 	void regexChanged();
63 	void instantChanged(bool checked);
64 	void changed();
65 	/// set the citation keys, mark as changed
66 	void setCitedKeys();
67 	/// update the styles for the style combo, mark as changed
68 	void updateStyles();
69 	/// performs a limited update, suitable for internal call
70 	void updateControls();
71 
72 
73 private:
74 	/// Dialog inherited methods
75 	//@{
76 	void applyView();
updateView()77 	void updateView() {}
78 	bool initialiseParams(std::string const & data);
79 	void clearParams();
80 	void dispatchParams();
isBufferDependent()81 	bool isBufferDependent() const { return true; }
82 	void saveSession(QSettings & settings) const;
83 	void restoreSession();
84 	/** Disconnect from the inset when the Apply button is pressed.
85 	 *  Allows easy insertion of multiple citations.
86 	 */
disconnectOnApply()87 	bool disconnectOnApply() const { return true; }
88 	//@}
89 
90 	///
91 	void showEvent(QShowEvent * e);
92 	///
93 	void closeEvent(QCloseEvent * e);
94 	/// prepares a call to GuiCitation::searchKeys when we
95 	/// are ready to search the BibTeX entries
96 	void findText(QString const & text, bool reset = false);
97 	/// check whether key is already selected
98 	bool isSelected(const QModelIndex &);
99 	/// update the display of BibTeX information
100 	void updateInfo(BiblioInfo const & bi, QModelIndex const &);
101 	/// enable/disable buttons
102 	void setButtons();
103 	/// fill the fields combo
104 	void fillFields(BiblioInfo const & bi);
105 	/// fill the entries combo
106 	void fillEntries(BiblioInfo const & bi);
107 	/// set the styles combo
108 	void updateStyles(BiblioInfo const & bi);
109 	/// set the formatting widgets
110 	void updateFormatting(CitationStyle const & currentStyle);
111 	///
112 	void updateControls(BiblioInfo const & bi);
113 	/// Set the appropriate hinting text on the filter bar
114 	void updateFilterHint();
115 	///
116 	void init();
117 	/// Clear selected keys
118 	void clearSelection();
119 
120 	/// Set selected keys
121 	void setSelectedKeys(QStringList const);
122 	/// Get selected keys
123 	QStringList selectedKeys();
124 	/// Set pre texts of qualified lists
125 	void setPreTexts(std::vector<docstring> const m);
126 	/// Get pre texts of qualified lists
127 	std::vector<docstring> getPreTexts();
128 	/// Set post texts of qualified lists
129 	void setPostTexts(std::vector<docstring> const m);
130 	/// Get post texts of qualified lists
131 	std::vector<docstring> getPostTexts();
132 
133 	/// Find keys containing a string.
134 	void findKey(
135 		BiblioInfo const & bi, //< optimize by passing this
136 		QString const & str, //< string expression
137 		bool only_keys, //< set to true if only keys shall be searched.
138 		docstring field, //<field to search, empty for all fields
139 		docstring entryType, //<entry type to display, empty for all
140 		bool case_sensitive, //< set to true for case sensitive search.
141 		bool reg_exp, //< set to true if \c str is a regular expression.
142 		bool reset = false //< whether to reset and search all keys
143 		);
144 
145 	/// List of example cite strings and their correlating lyx name
146 	BiblioInfo::CiteStringMap citationStyles(BiblioInfo const & bi,
147 								size_t max_size);
148 
149 	/// Set the Params variable for the Controller.
150 	void applyParams(int const choice, bool const full, bool const force,
151 					  QString before, QString after);
152 
153 	///
154 	void filterByEntryType(BiblioInfo const & bi,
155 		std::vector<docstring> & keyVector, docstring entryType);
156 
157 	/// Search a given string within the passed keys.
158 	/// \return the vector of matched keys.
159 	std::vector<docstring> searchKeys(
160 		BiblioInfo const & bi, //< optimize by passing this
161 		std::vector<docstring> const & keys_to_search, //< Keys to search.
162 		bool only_keys, //< whether to search only the keys
163 		docstring const & search_expression, //< Search expression (regex possible)
164 		docstring field, //< field to search, empty for all fields
165 		bool case_sensitive = false, //< set to true is the search should be case sensitive
166 		bool regex = false //< \set to true if \c search_expression is a regex
167 		); //
168 
169 	/// The BibTeX information available to the dialog
170 	/// Calls to this method will lead to checks of modification times and
171 	/// the like, so it should be avoided.
172 	BiblioInfo const & bibInfo() const;
173 
174 	/// contains the search box
175 	FancyLineEdit * filter_;
176 
177 	/// Regexp action
178 	QAction * regexp_;
179 	/// Case sensitive action
180 	QAction * casesense_;
181 	/// Search as you type action
182 	QAction * instant_;
183 
184 	/// last used citation style
185 	QString style_;
186 	///
187 	GuiSelectionManager * selectionManager;
188 	/// available keys.
189 	QStringListModel available_model_;
190 	/// selected keys.
191 	QStandardItemModel selected_model_;
192 	/// All keys.
193 	QStringList all_keys_;
194 	/// Cited keys.
195 	QStringList cited_keys_;
196 	///
197 	InsetCommandParams params_;
198 };
199 
200 } // namespace frontend
201 } // namespace lyx
202 
203 #endif // GUICITATION_H
204