]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetInfo.h
Fix bug #6315: counters in insets that don't produce output have ghost values.
[lyx.git] / src / insets / InsetInfo.h
index 86d86e7feff7661a997e21434cfeeae254161a9f..25f40e241faae254f2453e6c63ea26925f093f8b 100644 (file)
 #ifndef INSET_INFO_H
 #define INSET_INFO_H
 
-#include "InsetText.h"
-#include "RenderButton.h"
-#include "gettext.h"
-#include "Cursor.h"
-#include "support/Translator.h"
+#include "InsetCollapsable.h"
 
 namespace lyx {
 
-/** Used to insert index labels
-  */
-class InsetInfo : public InsetText {
+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
+on LyX and LaTeX configurations. Two LyX help files, LaTeXConfig.lyx
+and Shortcuts.lyx make heavy use of this inset. The former uses it
+to display the availability of packages and textclasses, the latter
+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 "shortcuts", "shortcut", "lyxrc", "package", "textclass", "menu",
+or "buffer". Arguments and outputs vary by type.
+
+shortcuts: 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.
+
+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.
+
+package: argument is the name of a latex package such as "listings". The
+    output is "yes" or "no", indicating the availability of this package.
+
+textclass: argument is the name a textclass such as "article". The output is
+    "yes" or "no", indicating the availability of this textclass.
+
+menu: 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 menu item that
+    triggers this LFUN. For example, "File > Paste", where '>' is actually
+    \lyxarrow (an InsetSpecialChar).
+
+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.
+
+buffer: argument can be one of "name", "path", "class". This inset output the
+    filename, path, and textclass of this buffer.
+               
+lyxinfo: argument must (presently) be "version". This inset outputs information 
+               about the version of LyX currently in use.
+
+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
+   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
+the command buffer (view->Toolbar->Command Buffer).
+
+*/
+
+class InsetInfo : public InsetCollapsable {
 public:
        enum info_type {
                UNKNOWN_INFO,   // Invalid type
+               SHORTCUTS_INFO, // Keyboard shortcuts
                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
+               ICON_INFO,      // which toolbar icon is used for certain function
+               BUFFER_INFO,    // Buffer related information
+               LYX_INFO,       // LyX version information
        };
 
        ///
-       InsetInfo(BufferParams const & bp, std::string const & info = std::string());
+       InsetInfo(Buffer * buf, std::string const & info = std::string());
+       ///
+       InsetCode lyxCode() const { return INFO_CODE; }
+       ///
+       docstring name() const;
        ///
        Inset * editXY(Cursor & cur, int x, int y);
        ///
-       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);
+       std::string infoType() const;
+       ///
+       std::string infoName() const { return name_; }
+       ///
+       bool validateModifyArgument(docstring const & argument) const;
        ///
-       Inset::Code lyxCode() const { return Inset::INFO_CODE; }
+       bool showInsetDialog(BufferView * bv) const;
+       ///
+       bool getStatus(Cursor &, FuncRequest const &, FuncStatus &) const;
+       ///
+       void doDispatch(Cursor & cur, FuncRequest & cmd);
        ///
        void setInfo(std::string const & info);
+       /// update info_ and text
+       void updateInfo();
+       ///
+       docstring toolTip(BufferView const & bv, int x, int y) const;
        ///
-       bool setMouseHover(bool mouse_hover);
+       docstring contextMenu(BufferView const &, int, int) const;
+       /// should paragraph indendation be ommitted in any case?
+       bool neverIndent() const { return true; }
 
 private:
-       /// The translator between the information type enum and corresponding string.
-       Translator<info_type, std::string> const & nameTranslator() const;
-       /// update info_ and text
-       void updateInfo();
        ///
        virtual Inset * clone() const { return new InsetInfo(*this); }
        ///
+       void error(std::string const & err);
+       ///
+       void setText(docstring const & str);
+       // make sure that the other version of setText is still available.
+       using InsetCollapsable::setText;
+       ///
        info_type type_;
        ///
        std::string name_;
-       /// store the buffer parameter
-       BufferParams const & bp_;
-       ///
-       bool mouse_hover_;
 };
 
 
-
 } // namespace lyx
 
 #endif