lyx_mirror/src/FuncRequest.cpp
Bernhard Roider 1a77c867a2 CmdDef.cpp/h: A class that manages command definitions. The definitions are
by default read from lib/commands/default.def 
              A .def file allows to define a command with
              \define "Name" "lfun"
              where Name is the name of the new command and lfun is the code
              to be executed.
              \def_file "FileName"
              allows to include another .def file.
              The implementation of CmdDef is similar to KeyMap, i.e. there is 
              one instance created in the LyX.cpp that reads the .def file, holds 
              a list containing all definitions, and supplies access methods.


LFUN_CALL:    The new lfun is used to execute a command definition, e.g.
              call Name

If a toolbar item has the associated action "call Name" then the image 
lib/images/commands/Name.png is used for the button.



git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21093 a592a061-630c-0410-9148-cb99ea01b6c8
2007-10-20 23:27:03 +00:00

122 lines
2.5 KiB
C++

/**
* \file FuncRequest.cpp
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author André Pönitz
*
* Full author contact details are available in file CREDITS.
*/
#include <config.h>
#include "FuncRequest.h"
#include <iostream>
#include <sstream>
#include <vector>
using std::getline;
using std::istringstream;
using std::vector;
using std::string;
namespace lyx {
FuncRequest const FuncRequest::unknown(LFUN_UNKNOWN_ACTION);
FuncRequest const FuncRequest::noaction(LFUN_NOACTION);
FuncRequest::FuncRequest(Origin o)
: action(LFUN_NOACTION), origin(o), x(0), y(0),
button_(mouse_button::none)
{}
FuncRequest::FuncRequest(kb_action act, Origin o)
: action(act), origin(o), x(0), y(0), button_(mouse_button::none)
{}
FuncRequest::FuncRequest(kb_action act, docstring const & arg, Origin o)
: action(act), argument_(arg), origin(o), x(0), y(0),
button_(mouse_button::none)
{}
FuncRequest::FuncRequest(kb_action act, string const & arg, Origin o)
: action(act), argument_(from_utf8(arg)), origin(o), x(0), y(0),
button_(mouse_button::none)
{}
FuncRequest::FuncRequest(kb_action act, int ax, int ay,
mouse_button::state but, Origin o)
: action(act), origin(o), x(ax), y(ay), button_(but)
{}
FuncRequest::FuncRequest(FuncRequest const & cmd, docstring const & arg, Origin o)
: action(cmd.action), argument_(arg), origin(o),
x(cmd.x), y(cmd.y), button_(cmd.button_)
{}
FuncRequest::FuncRequest(FuncRequest const & cmd, string const & arg, Origin o)
: action(cmd.action), argument_(from_utf8(arg)), origin(o),
x(cmd.x), y(cmd.y), button_(cmd.button_)
{}
mouse_button::state FuncRequest::button() const
{
return button_;
}
void split(vector<string> & args, string const & str)
{
istringstream is(str);
while (is) {
char c;
string s;
is >> c;
if (is) {
if (c == '"')
getline(is, s, '"');
else {
is.putback(c);
is >> s;
}
args.push_back(s);
}
}
}
string FuncRequest::getArg(unsigned int i) const
{
vector<string> args;
split(args, to_utf8(argument_));
return i < args.size() ? args[i] : string();
}
bool operator==(FuncRequest const & lhs, FuncRequest const & rhs)
{
return lhs.action == rhs.action && lhs.argument() == rhs.argument();
}
std::ostream & operator<<(std::ostream & os, FuncRequest const & cmd)
{
return os
<< " action: " << cmd.action
<< " arg: '" << to_utf8(cmd.argument()) << "'"
<< " x: " << cmd.x
<< " y: " << cmd.y;
}
} // namespace lyx