#ifndef INSET_INFO_H
#define INSET_INFO_H
-#include "InsetText.h"
-#include "RenderButton.h"
-#include "support/gettext.h"
-#include "Cursor.h"
-#include "support/Translator.h"
+#include "InsetCollapsible.h"
+#include <QDate>
-/* InsetInfo displays shortcuts, lyxrc, package and textclass
+namespace lyx {
+
+class Cursor;
+
+/* InsetInfo displays shortcuts, lyxrc, package and textclass
availability and menu information in a non-editable boxed InsetText.
Output of such an inset may vary from system to system, depending
This inset has two arguments: the type and argument of the information. The
screen and latex output is the content of the information. An InsetInfo can
-have type "shortcut", "lyxrc", "package", "textclass", "menu", or "buffer".
-Arguments and outputs vary by type.
-
-shortcut: argument of this type of InsetInfo is the name of the LFUN such as
- "math-insert \alpha". The syntax is the same as what is used in the bind
- and ui files. The output of this inset is all shortcuts for this LFUN
- separated by comma.
-
-lyxrc: argument is the name of the rc entry such as "bind_file". Look in
+have type "shortcuts", "shortcut", "lyxrc", "package", "textclass", "menu",
+"buffer" or "vcs". Arguments and outputs vary by type.
+
+date: argument of this type of InsetInfo is either a fixed date type of
+ "long" (long localized date, with weekday, as provided by QLocale),
+ "short" (short localized date, with two-digit year, as provided by QLocale),
+ "loclong" (long localized date, without weekday, defined in languages),
+ "locmedium" (medium localized date, defined in languages),
+ "locshort" (short localized date, with four-digit year, defined in languages),
+ "ISO" (ISO-conforming date)
+ or a custom date using the QDate syntax.
+ The output is a localized formatted (current) date.
+
+moddate: Same as date.
+ The output is a localized formatted date of last file modification (saving).
+
+fixdate: Same as date. A fixed date (in ISO format) is prepended to the argument,
+ delimited by '@'.
+ The output is a localized formatted fix date.
+
+time: argument of this type of InsetInfo is either a fixed time type of
+ "long" (long localized time, as provided by QLocale),
+ "short" (short localized time, as provided by QLocale),
+ "ISO" (ISO-conforming time)
+ or a custom date using the QTime syntax.
+ The output is a localized formatted (current) time.
+
+modtime: Same as time.
+ The output is a localized formatted time of last file modification (saving).
+
+fixtime: Same as time. A fixed time (in ISO format) is prepended to the argument,
+ delimited by '@'.
+ The output is a localized formatted fix time.
+
+shortcuts: argument is the name of the LFUN such as "math-insert \alpha".
+ The syntax is the same as what is used in the bind and ui files.
+ The output of this inset is all shortcuts for this LFUN separated by comma.
+
+shortcut: the same as shortcuts, but only output the last shortcut.
+
+lyxrc: argument is the name of the rc entry such as "bind_file". Look in
src/LyXRC.h for available entries. The output is the content of this RC
entry.
triggers this LFUN. For example, "File > Paste", where '>' is actually
\lyxarrow (an InsetSpecialChar).
-buffer: argument can be one of "name", "path", "class". This inset output the
- filename, path, and textclass of this buffer.
+l7n: argument is an English string that is marked for localization. The output
+ is the localization of that string in the current GUI language (if available).
+ Trailing colons are stripped, accelerators removed.
+ This is used to refer to GUI items in the docs.
-There is currently no GUI, no menu entry for this inset. A user can define a
+icon: argument is the name of the LFUN such as "paste". The syntax is the same
+ as what is used in the bind and ui files. The output is the icon use in
+ the toolbar for this LFUN. Alternatively, argument can be the icon path
+ without extension specified with respect to the images directory.
+
+buffer: argument can be one of "name", "name-noext", "path", "class". This inset output the
+ filename (with extension), filename (without extension), path, and textclass of this buffer.
+
+lyxinfo: argument must be "version" or "layoutformat". This outputs information
+ about the version of LyX currently in use or the current LyX layout format, respectively.
+
+vcs: argument can be one of "revision", "tree-revision", "author", "time", "date".
+ This insets outputs revision control information, if available.
+
+There is currently no GUI, no menu entry for this inset. A user can define a
shortcut for "info-insert" (e.g. C-S-I), and
-1. input the type and argument of this inset, e.g. "menu paste", in
+1. input the type and argument of this inset, e.g. "menu paste", in
the work area.
2. select the text and run "info-insert" (e.g. press C-S-I).
-An alternative method is to enter command "info-insert type arg" in
+An alternative method is to enter command "info-insert type arg" in
the command buffer (view->Toolbar->Command Buffer).
*/
-namespace lyx {
-
-/** Used to insert index labels
- */
-class InsetInfo : public InsetText {
+class InsetInfoParams {
public:
enum info_type {
- UNKNOWN_INFO, // Invalid type
- SHORTCUT_INFO, // Keyboard shortcut
- LYXRC_INFO, // RC entry
- PACKAGE_INFO, // Availability of package
- TEXTCLASS_INFO, // Availability of textclass
- MENU_INFO, // Which menu item is used for certain function
- BUFFER_INFO, // Buffer related information
+ DATE_INFO, // Current date
+ MODDATE_INFO, // Date of last modification
+ FIXDATE_INFO, // Fix date
+ TIME_INFO, // Current time
+ MODTIME_INFO, // Time of last modification
+ FIXTIME_INFO, // Fix time
+ BUFFER_INFO, // Buffer related information
+ VCS_INFO, // Version control information
+ PACKAGE_INFO, // Availability of package
+ TEXTCLASS_INFO, // Availability of textclass
+ SHORTCUTS_INFO, // Keyboard shortcuts
+ SHORTCUT_INFO, // Keyboard shortcut
+ LYXRC_INFO, // RC entry
+ MENU_INFO, // Which menu item is used for certain function
+ ICON_INFO, // which toolbar icon is used for certain function
+ LYX_INFO, // LyX version information
+ L7N_INFO, // Localized string
+ UNKNOWN_INFO, // Invalid type
};
+ ///
+ docstring getDate(std::string const, QDate const date = QDate::currentDate()) const;
+ ///
+ docstring getTime(std::string const, QTime const time = QTime::currentTime()) const;
+ ///
+ std::vector<std::pair<std::string,docstring>> getArguments(Buffer const * buf,
+ std::string const &) const;
+ ///
+ bool validateArgument(Buffer const * buf, docstring const & argument,
+ bool const usedefault = false) const;
+ ///
+ info_type type;
+ ///
+ std::string infoType() const;
+ ///
+ std::string name;
+ ///
+ Language const * lang;
+ ///
+ bool force_ltr;
+};
+
+///
+extern InsetInfoParams infoparams;
+class InsetInfo : public InsetCollapsible {
+public:
+ ///
+ InsetInfo(Buffer * buf, std::string const & info = std::string());
+ ///
+ InsetCode lyxCode() const { return INFO_CODE; }
///
- InsetInfo(BufferParams const & bp, std::string const & info = std::string());
+ docstring layoutName() const;
///
Inset * editXY(Cursor & cur, int x, int y);
+ /** FIXME: we would like to do that, but then InsetText::updateBuffer breaks
+ * on info insets. Do we need to run this method on InsetInfo contents?
+ * Having a InsetInfo that hides an InsetText is really annoying, actually.
+ */
+ ///bool isActive() const { return false; }
///
- EDITABLE editable() const { return NOT_EDITABLE; }
+ bool editable() const { return false; }
///
- void draw(PainterInfo & pi, int x, int y) const;
+ bool hasSettings() const { return true; }
///
void read(Lexer & lex);
///
void write(std::ostream & os) const;
///
- void doDispatch(Cursor & cur, FuncRequest & cmd);
+ bool validateModifyArgument(docstring const & argument) const {
+ return params_.validateArgument(&buffer(), argument); }
///
- InsetCode lyxCode() const { return INFO_CODE; }
+ bool showInsetDialog(BufferView * bv) const;
+ ///
+ bool getStatus(Cursor &, FuncRequest const &, FuncStatus &) const;
+ ///
+ void doDispatch(Cursor & cur, FuncRequest & cmd);
+ /// Force inset into LTR environment if surroundings are RTL
+ bool forceLTR() const;
///
void setInfo(std::string const & info);
- /// update info_ and text
- void updateInfo();
///
- bool setMouseHover(bool mouse_hover);
+ void updateBuffer(ParIterator const & it, UpdateType utype);
+ ///
+ docstring toolTip(BufferView const & bv, int x, int y) const;
+ ///
+ std::string contextMenu(BufferView const &, int, int) const;
+ ///
+ std::string contextMenuName() const;
+ /// should paragraph indendation be omitted in any case?
+ bool neverIndent() const { return true; }
+ ///
+ InsetInfoParams params() const { return params_; }
private:
- /// The translator between the information type enum and corresponding string.
- Translator<info_type, std::string> const & nameTranslator() const;
///
virtual Inset * clone() const { return new InsetInfo(*this); }
///
- info_type type_;
+ void error(docstring const & err, Language const *);
///
- std::string name_;
+ void info(docstring const & err, Language const *);
///
- bool mouse_hover_;
+ void setText(docstring const & str, Language const *);
+ // make sure that the other version of setText is still available.
+ using InsetCollapsible::setText;
+ ///
+ bool initialized_;
+ ///
+ InsetInfoParams params_;
+ ///
+ friend class InsetInfoParams;
};
-
} // namespace lyx
#endif