2007-10-11 14:52:00 +00:00
|
|
|
// -*- C++ -*-
|
|
|
|
/**
|
|
|
|
* \file InsetInfo.h
|
|
|
|
* This file is part of LyX, the document processor.
|
|
|
|
* Licence details can be found in the file COPYING.
|
|
|
|
*
|
|
|
|
* \author Bo Peng
|
|
|
|
*
|
|
|
|
* Full author contact details are available in file CREDITS.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef INSET_INFO_H
|
|
|
|
#define INSET_INFO_H
|
|
|
|
|
2017-10-16 08:12:21 +00:00
|
|
|
#include "InsetCollapsible.h"
|
2018-08-05 07:51:12 +00:00
|
|
|
#include <QDate>
|
2008-03-06 21:50:27 +00:00
|
|
|
|
2010-10-31 01:04:03 +00:00
|
|
|
namespace lyx {
|
|
|
|
|
|
|
|
class Cursor;
|
2007-10-11 14:52:00 +00:00
|
|
|
|
2008-06-05 03:41:35 +00:00
|
|
|
/* InsetInfo displays shortcuts, lyxrc, package and textclass
|
2007-10-13 20:49:06 +00:00
|
|
|
availability and menu information in a non-editable boxed InsetText.
|
|
|
|
|
2007-10-14 01:37:02 +00:00
|
|
|
Output of such an inset may vary from system to system, depending
|
2007-10-13 20:49:06 +00:00
|
|
|
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.
|
|
|
|
|
2007-10-14 01:37:02 +00:00
|
|
|
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
|
2008-06-05 03:41:35 +00:00
|
|
|
have type "shortcuts", "shortcut", "lyxrc", "package", "textclass", "menu",
|
2018-07-29 17:41:34 +00:00
|
|
|
"buffer" or "vcs". Arguments and outputs vary by type.
|
2007-10-13 20:49:06 +00:00
|
|
|
|
2018-08-05 07:51:12 +00:00
|
|
|
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.
|
|
|
|
|
2018-08-07 10:14:45 +00:00
|
|
|
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.
|
|
|
|
|
2018-08-05 07:51:12 +00:00
|
|
|
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.
|
2007-10-13 20:49:06 +00:00
|
|
|
|
2008-06-05 03:41:35 +00:00
|
|
|
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
|
2007-10-14 01:37:02 +00:00
|
|
|
src/LyXRC.h for available entries. The output is the content of this RC
|
2007-10-14 00:47:52 +00:00
|
|
|
entry.
|
2007-10-13 20:49:06 +00:00
|
|
|
|
2007-10-14 01:37:02 +00:00
|
|
|
package: argument is the name of a latex package such as "listings". The
|
|
|
|
output is "yes" or "no", indicating the availability of this package.
|
2007-10-13 20:49:06 +00:00
|
|
|
|
2007-10-14 01:37:02 +00:00
|
|
|
textclass: argument is the name a textclass such as "article". The output is
|
|
|
|
"yes" or "no", indicating the availability of this textclass.
|
2007-10-13 20:49:06 +00:00
|
|
|
|
2007-10-14 01:37:02 +00:00
|
|
|
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).
|
2007-10-13 20:49:06 +00:00
|
|
|
|
2018-08-13 15:18:44 +00:00
|
|
|
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.
|
|
|
|
|
2008-06-05 03:41:35 +00:00
|
|
|
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
|
2015-12-11 07:51:37 +00:00
|
|
|
the toolbar for this LFUN. Alternatively, argument can be the icon path
|
|
|
|
without extension specified with respect to the images directory.
|
2008-06-05 03:41:35 +00:00
|
|
|
|
2018-08-07 10:14:45 +00:00
|
|
|
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.
|
2017-07-03 17:45:58 +00:00
|
|
|
|
|
|
|
lyxinfo: argument must (presently) be "version". This inset outputs information
|
2018-07-29 17:41:34 +00:00
|
|
|
about the version of LyX currently in use.
|
|
|
|
|
|
|
|
vcs: argument can be one of "revision", "tree-revision", "author", "time", "date".
|
|
|
|
This insets outputs revision control information, if available.
|
2007-10-13 20:49:06 +00:00
|
|
|
|
2008-06-05 03:41:35 +00:00
|
|
|
There is currently no GUI, no menu entry for this inset. A user can define a
|
2007-10-14 00:47:52 +00:00
|
|
|
shortcut for "info-insert" (e.g. C-S-I), and
|
2007-10-13 20:49:06 +00:00
|
|
|
|
2008-06-05 03:41:35 +00:00
|
|
|
1. input the type and argument of this inset, e.g. "menu paste", in
|
2007-10-14 00:47:52 +00:00
|
|
|
the work area.
|
2007-10-13 20:49:06 +00:00
|
|
|
2. select the text and run "info-insert" (e.g. press C-S-I).
|
|
|
|
|
2008-06-05 03:41:35 +00:00
|
|
|
An alternative method is to enter command "info-insert type arg" in
|
2007-10-14 00:47:52 +00:00
|
|
|
the command buffer (view->Toolbar->Command Buffer).
|
|
|
|
|
2007-10-13 20:49:06 +00:00
|
|
|
*/
|
|
|
|
|
2018-08-06 18:07:15 +00:00
|
|
|
class InsetInfoParams {
|
2007-10-11 14:52:00 +00:00
|
|
|
public:
|
|
|
|
enum info_type {
|
2018-08-07 10:14:45 +00:00
|
|
|
DATE_INFO, // Current date
|
2018-08-05 07:51:12 +00:00
|
|
|
MODDATE_INFO, // Date of last modification
|
|
|
|
FIXDATE_INFO, // Fix date
|
2018-08-07 10:14:45 +00:00
|
|
|
TIME_INFO, // Current time
|
|
|
|
MODTIME_INFO, // Time of last modification
|
|
|
|
FIXTIME_INFO, // Fix time
|
2018-08-05 07:51:12 +00:00
|
|
|
BUFFER_INFO, // Buffer related information
|
2018-08-01 14:51:38 +00:00
|
|
|
VCS_INFO, // Version control information
|
2018-08-05 07:51:12 +00:00
|
|
|
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
|
2018-07-29 17:41:34 +00:00
|
|
|
LYX_INFO, // LyX version information
|
2018-08-13 15:18:44 +00:00
|
|
|
L7N_INFO, // Localized string
|
2018-08-05 07:51:12 +00:00
|
|
|
UNKNOWN_INFO, // Invalid type
|
2007-10-11 14:52:00 +00:00
|
|
|
};
|
2018-08-06 18:07:15 +00:00
|
|
|
///
|
|
|
|
docstring getDate(std::string const, QDate const date = QDate::currentDate()) const;
|
|
|
|
///
|
2018-08-07 10:14:45 +00:00
|
|
|
docstring getTime(std::string const, QTime const time = QTime::currentTime()) const;
|
|
|
|
///
|
2018-08-06 18:07:15 +00:00
|
|
|
std::vector<std::pair<std::string,docstring>> getArguments(Buffer const * buf,
|
|
|
|
std::string const &) const;
|
|
|
|
///
|
|
|
|
info_type type;
|
|
|
|
///
|
|
|
|
std::string infoType() const;
|
|
|
|
///
|
|
|
|
std::string name;
|
|
|
|
///
|
|
|
|
Language const * lang;
|
|
|
|
///
|
|
|
|
bool force_ltr;
|
|
|
|
};
|
|
|
|
|
|
|
|
///
|
|
|
|
extern InsetInfoParams infoparams;
|
2007-10-11 14:52:00 +00:00
|
|
|
|
2018-08-06 18:07:15 +00:00
|
|
|
class InsetInfo : public InsetCollapsible {
|
|
|
|
public:
|
2007-10-11 14:52:00 +00:00
|
|
|
///
|
2009-11-08 15:53:21 +00:00
|
|
|
InsetInfo(Buffer * buf, std::string const & info = std::string());
|
2007-10-11 14:52:00 +00:00
|
|
|
///
|
2008-09-30 14:11:40 +00:00
|
|
|
InsetCode lyxCode() const { return INFO_CODE; }
|
|
|
|
///
|
2011-03-28 22:33:04 +00:00
|
|
|
docstring layoutName() const;
|
2008-09-30 14:11:40 +00:00
|
|
|
///
|
2007-10-11 14:52:00 +00:00
|
|
|
Inset * editXY(Cursor & cur, int x, int y);
|
2017-07-20 21:56:45 +00:00
|
|
|
/** 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; }
|
2017-07-20 09:18:20 +00:00
|
|
|
///
|
2009-04-22 20:55:13 +00:00
|
|
|
bool editable() const { return false; }
|
|
|
|
///
|
|
|
|
bool hasSettings() const { return true; }
|
2007-10-11 14:52:00 +00:00
|
|
|
///
|
2008-02-27 20:43:16 +00:00
|
|
|
void read(Lexer & lex);
|
2007-10-11 14:52:00 +00:00
|
|
|
///
|
2008-02-27 20:43:16 +00:00
|
|
|
void write(std::ostream & os) const;
|
2007-10-11 14:52:00 +00:00
|
|
|
///
|
2010-01-30 11:15:05 +00:00
|
|
|
bool validateModifyArgument(docstring const & argument) const;
|
2008-06-06 08:01:59 +00:00
|
|
|
///
|
2008-06-05 15:08:46 +00:00
|
|
|
bool showInsetDialog(BufferView * bv) const;
|
|
|
|
///
|
|
|
|
bool getStatus(Cursor &, FuncRequest const &, FuncStatus &) const;
|
|
|
|
///
|
2007-10-11 14:52:00 +00:00
|
|
|
void doDispatch(Cursor & cur, FuncRequest & cmd);
|
2018-07-25 09:00:00 +00:00
|
|
|
/// Force inset into LTR environment if surroundings are RTL
|
|
|
|
bool forceLTR() const;
|
2007-10-11 14:52:00 +00:00
|
|
|
///
|
|
|
|
void setInfo(std::string const & info);
|
2017-10-03 21:28:35 +00:00
|
|
|
///
|
|
|
|
void updateBuffer(ParIterator const & it, UpdateType utype);
|
2007-10-11 14:52:00 +00:00
|
|
|
///
|
2008-06-04 07:15:43 +00:00
|
|
|
docstring toolTip(BufferView const & bv, int x, int y) const;
|
2008-06-05 15:08:46 +00:00
|
|
|
///
|
2011-10-29 14:48:55 +00:00
|
|
|
std::string contextMenu(BufferView const &, int, int) const;
|
2010-11-29 23:21:52 +00:00
|
|
|
///
|
2011-10-29 14:48:55 +00:00
|
|
|
std::string contextMenuName() const;
|
2017-09-22 07:29:16 +00:00
|
|
|
/// should paragraph indendation be omitted in any case?
|
2008-09-30 14:11:40 +00:00
|
|
|
bool neverIndent() const { return true; }
|
2018-08-06 18:07:15 +00:00
|
|
|
///
|
|
|
|
InsetInfoParams params() const { return params_; }
|
2007-10-11 14:52:00 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
///
|
|
|
|
virtual Inset * clone() const { return new InsetInfo(*this); }
|
|
|
|
///
|
2018-07-27 10:14:37 +00:00
|
|
|
void error(docstring const & err, Language const *);
|
2008-06-06 09:33:24 +00:00
|
|
|
///
|
2018-07-27 10:14:37 +00:00
|
|
|
void info(docstring const & err, Language const *);
|
|
|
|
///
|
|
|
|
void setText(docstring const & str, Language const *);
|
2008-09-30 14:11:40 +00:00
|
|
|
// make sure that the other version of setText is still available.
|
2017-10-16 08:12:21 +00:00
|
|
|
using InsetCollapsible::setText;
|
2008-06-06 09:33:24 +00:00
|
|
|
///
|
2017-10-03 21:28:35 +00:00
|
|
|
bool initialized_;
|
|
|
|
///
|
2018-08-06 18:07:15 +00:00
|
|
|
InsetInfoParams params_;
|
2018-08-05 07:51:12 +00:00
|
|
|
///
|
2018-08-06 18:07:15 +00:00
|
|
|
friend class InsetInfoParams;
|
2007-10-11 14:52:00 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
} // namespace lyx
|
|
|
|
|
|
|
|
#endif
|