X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetInfo.h;h=bed5744a480a4e33e8900471082190769608c3be;hb=23abb5aaa36af07aadfa5e565869104778ba0d6d;hp=c3406485bba78e4b1ef7be4b9c042a0488969b43;hpb=8d7ea1ceaa44e7b0d2d79dfacaba00bc67f958ac;p=lyx.git diff --git a/src/insets/InsetInfo.h b/src/insets/InsetInfo.h index c3406485bb..bed5744a48 100644 --- a/src/insets/InsetInfo.h +++ b/src/insets/InsetInfo.h @@ -12,13 +12,14 @@ #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 -/* 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 @@ -29,15 +30,47 @@ uses it to display currently used shortcuts. 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. @@ -52,75 +85,153 @@ menu: argument is the name of the LFUN such as "paste". The syntax is the same 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> 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(Buffer const &, Lexer & lex); + void read(Lexer & lex); /// - void write(Buffer const & buf, std::ostream & os) const; + 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(OutputParams const &) const; /// void setInfo(std::string const & info); - /// update info_ and text - void updateInfo(Buffer const &); /// - bool setMouseHover(bool mouse_hover); + void updateBuffer(ParIterator const & it, UpdateType utype, bool const deleted = false); + /// + 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 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