]> git.lyx.org Git - features.git/commitdiff
Get rid of Pseudo Actions
authorLars Gullik Bjønnes <larsbj@gullik.org>
Sun, 21 Sep 2003 18:57:15 +0000 (18:57 +0000)
committerLars Gullik Bjønnes <larsbj@gullik.org>
Sun, 21 Sep 2003 18:57:15 +0000 (18:57 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7799 a592a061-630c-0410-9148-cb99ea01b6c8

32 files changed:
src/ChangeLog
src/LyXAction.C
src/LyXAction.h
src/MenuBackend.C
src/MenuBackend.h
src/ToolbarBackend.C
src/ToolbarBackend.h
src/frontends/ChangeLog
src/frontends/LyXView.C
src/frontends/Toolbar.h
src/frontends/gtk/ChangeLog
src/frontends/gtk/GMenubar.C
src/frontends/gtk/GToolbar.C
src/frontends/gtk/GToolbar.h
src/frontends/qt2/ChangeLog
src/frontends/qt2/QLPopupMenu.C
src/frontends/qt2/QLPopupMenu.h
src/frontends/qt2/QLToolbar.C
src/frontends/qt2/QLToolbar.h
src/frontends/qt2/QtView.C
src/frontends/qt2/QtView.h
src/frontends/xforms/ChangeLog
src/frontends/xforms/XFormsMenubar.C
src/frontends/xforms/XFormsMenubar.h
src/frontends/xforms/XFormsToolbar.C
src/frontends/xforms/XFormsToolbar.h
src/funcrequest.C
src/funcrequest.h
src/lyxfunc.C
src/lyxfunc.h
src/toc.C
src/toc.h

index dd567ef2ee07ceeb0415a5eb742ada0af92de95a..8ca3dc7d59ff62852fb37d742c35f82b7579ddc9 100644 (file)
@@ -1,5 +1,42 @@
 2003-09-21  Lars Gullik Bjønnes  <larsbj@gullik.net>
 
+       * toc.C (action): return a FuncRequest, simplify
+
+       * lyxfunc.C (processKeySym): adjust
+       (getStatus): delete version that takes an int.
+       (getStatus): adjust
+       (dispatch): delete version that takes action as int
+       (dispatch): adjust
+       (sendDispatchMessage): simplify and adjust
+
+       * funcrequest.C (getArg): take unsigned int as arg
+
+       * ToolbarBackend.C (read): adjust
+       (add): delete version that takes func as a string.
+       (getIton): take a FuncRequest as arg
+
+       * MenuBackend.h (MenuItem): store a FuncRequest instead of an int
+       action.
+
+       * MenuBackend.C (MenuItem): add a new construct that only takes a
+       Kind, simplify the constructor use for submenus.
+       (add): adjust
+       (expandLastfiles): adjust
+       (expandDocuments): adjust
+       (expandFormats): adjust
+       (expandFloatListInsert): adjust
+       (expandFloatInsert): adjust
+       (expandToc2,expandToc,expandPasteRecent,expandBranches): adjust
+
+       * LyXAction.h: remove typdefs pseudo_map, arg_item and arg_map.
+       Remove class variables lyx_pseudo_map and lyx_arg_map
+
+       * LyXAction.C (searchActionArg): delete function
+       (getPseudoAction): delete function
+       (retrieveActionArg): delete function
+       (LookupFunc): make it return kb_action, simplify.
+       (getActionName): simplify
+
        * factory.C (createInset): fix new bug
 
 2003-09-19  Angus Leeming  <leeming@lyx.org>
index 42979e0c2f334cccb9fb82de156ef00e43043a90..a6489053d62a78a797dccff7016a582e0ad38852 100644 (file)
@@ -344,83 +344,8 @@ LyXAction::LyXAction()
 }
 
 
-int LyXAction::searchActionArg(kb_action action, string const & arg) const
-{
-       arg_map::const_iterator pit = lyx_arg_map.find(action);
-
-       if (pit == lyx_arg_map.end()) {
-               lyxerr[Debug::ACTION] << "Action " << action
-                                     << " does not have any pseudo actions."
-                                     << endl;
-               return LFUN_UNKNOWN_ACTION;
-       }
-
-       arg_item::const_iterator aci = pit->second.find(arg);
-
-       if (aci == pit->second.end()) {
-               lyxerr[Debug::ACTION]
-                       << "Action " << action
-                       << "does not have any pseudoactions with arg "
-                       << arg << endl;
-               return LFUN_UNKNOWN_ACTION;
-       }
-
-       lyxerr[Debug::ACTION] << "Pseudoaction exists["
-                             << action << '|'
-                             << arg << "] = " << aci->second << endl;
-
-       return aci->second;
-}
-
-
-int LyXAction::getPseudoAction(kb_action action, string const & arg)
-{
-       int const psdaction = searchActionArg(action, arg);
-
-       if (isPseudoAction(psdaction)) return psdaction;
-
-       static unsigned int pseudo_counter = LFUN_LASTACTION;
-
-       // Create new pseudo action.
-       lyx_pseudo_map[++pseudo_counter] = FuncRequest(0, action, arg);
-
-       // First ensure that the action is in lyx_arg_map;
-       lyx_arg_map[action];
-       // get the arg_item map
-       arg_map::iterator ami = lyx_arg_map.find(action);
-       // put the new pseudo function in it
-       ami->second[arg] = pseudo_counter;
-
-       lyxerr[Debug::ACTION] << "Creating new pseudoaction "
-                             << pseudo_counter << " for [" << action
-                             << '|' << arg << "]\n";
-
-       return pseudo_counter;
-}
-
-
-FuncRequest LyXAction::retrieveActionArg(int pseudo) const
-{
-       if (!isPseudoAction(pseudo))
-               return FuncRequest(static_cast<kb_action>(pseudo));
-
-       pseudo_map::const_iterator pit = lyx_pseudo_map.find(pseudo);
-
-       if (pit != lyx_pseudo_map.end()) {
-               lyxerr[Debug::ACTION] << "Found the pseudoaction: ["
-                                     << pit->second.action << '|'
-                                     << pit->second.argument << "]" << endl;
-               return pit->second;
-       } else {
-               lyxerr << "Lyx Error: Unrecognized pseudo-action "
-                       << pseudo << endl;
-               return FuncRequest(LFUN_UNKNOWN_ACTION);
-       }
-}
-
-
 // Returns an action tag from a string.
-int LyXAction::LookupFunc(string const & func)
+kb_action LyXAction::LookupFunc(string const & func)
 {
        string const func2 = trim(func);
        if (func2.empty()) return LFUN_NOACTION;
@@ -433,25 +358,15 @@ int LyXAction::LookupFunc(string const & func)
 
        func_map::const_iterator fit = lyx_func_map.find(actstr);
 
-       if (!argstr.empty() && fit != lyx_func_map.end()) {
-               // might be pseudo (or create one)
-               return getPseudoAction(fit->second, argstr);
-       }
-
        return fit != lyx_func_map.end() ? fit->second : LFUN_UNKNOWN_ACTION;
 }
 
 
 string const LyXAction::getActionName(int action) const
 {
-       FuncRequest ev = retrieveActionArg(action);
-       if (!ev.argument.empty())
-               ev.argument.insert(string::size_type(0), 1, ' ');
-
-       info_map::const_iterator const it = lyx_info_map.find(ev.action);
-
+       info_map::const_iterator const it = lyx_info_map.find(kb_action(action));
        if (it != lyx_info_map.end())
-               return it->second.name + ev.argument;
+               return it->second.name;
        return string();
 }
 
index d1892d8737f42c5c8c48fbc2a32048dc4bf813cd..d59666d698bfdf9041f54d654272fcc2693c6efa 100644 (file)
@@ -44,12 +44,6 @@ public:
        typedef std::map<string, kb_action> func_map;
        /// type for map between an action and its info
        typedef std::map<kb_action, func_info> info_map;
-       /// type for a map between a pseudo-action and its stored action/arg
-       typedef std::map<unsigned int, FuncRequest> pseudo_map;
-       /// map from argument to pseudo-action
-       typedef std::map<string, unsigned int> arg_item;
-       /// map from an action to all its dependent pseudo-actions
-       typedef std::map<kb_action, arg_item> arg_map;
 
        /// possible "permissions" for an action
        enum func_attrib {
@@ -66,19 +60,7 @@ public:
         * If you include arguments in func_name, a new pseudoaction
         * will be created if needed.
         */
-       int LookupFunc(string const & func_name);
-
-       /// Returns a pseudo-action given an action and its argument.
-       int getPseudoAction(kb_action action, string const & arg);
-
-       /**
-        * Given a pseudo-action, return the real action and
-        * associated argument
-        */
-       FuncRequest retrieveActionArg(int pseudo) const;
-
-       /// Search for an existent pseudoaction, return -1 if it doesn't exist.
-       int searchActionArg(kb_action action, string const & arg) const;
+       kb_action LookupFunc(string const & func_name);
 
        /// Return the name (and argument) associated with the given (pseudo) action
        string const getActionName(int action) const;
@@ -114,18 +96,6 @@ private:
         * command attributes (ro)
         */
        info_map lyx_info_map;
-
-       /**
-        * A mapping from the automatically created pseudo action number
-        * to the real action and its argument.
-        */
-       pseudo_map lyx_pseudo_map;
-
-       /**
-        * A (multi) mapping from the lyx action to all the generated
-        * pseudofuncs and the arguments the action should use.
-        */
-       arg_map lyx_arg_map;
 };
 
 /// singleton instance
index 028d0ce0ddea7020e7f454f3e92f54765c8cf492..7c6d0363705be48d57edebc622876a5b125b086b 100644 (file)
@@ -66,45 +66,23 @@ extern boost::scoped_ptr<kb_keymap> toplevel_keymap;
 MenuBackend menubackend;
 
 
+MenuItem::MenuItem(Kind kind)
+       : kind_(kind), optional_(false)
+{}
+
+
 MenuItem::MenuItem(Kind kind, string const & label,
-                  string const & command, bool optional)
-       : kind_(kind), label_(label), optional_(optional)
+                  string const & submenu, bool optional)
+       : kind_(kind), label_(label),
+         submenuname_(submenu), optional_(optional)
 {
-       switch (kind) {
-       case Separator:
-       case Documents:
-       case Lastfiles:
-       case Toc:
-       case ViewFormats:
-       case UpdateFormats:
-       case ExportFormats:
-       case ImportFormats:
-       case FloatListInsert:
-       case FloatInsert:
-       case PasteRecent:
-       case Branches:
-               break;
-       case Command:
-               action_ = lyxaction.LookupFunc(command);
-
-               if (action_ == LFUN_UNKNOWN_ACTION) {
-                       lyxerr << "MenuItem(): LyX command `"
-                              << command << "' does not exist." << endl;
-               }
-               if (optional_)
-                       lyxerr[Debug::GUI] << "Optional item "
-                                          << command << endl;
-               break;
-       case Submenu:
-               submenuname_ = command;
-               break;
-       }
+       BOOST_ASSERT(kind == Submenu);
 }
 
 
-MenuItem::MenuItem(Kind kind, string const & label, int action, bool optional)
-       : kind_(kind), label_(label), action_(action), submenuname_(),
-         optional_(optional)
+MenuItem::MenuItem(Kind kind, string const & label,
+                  FuncRequest const & func, bool optional)
+       : kind_(kind), label_(label), func_(func), optional_(optional)
 {}
 
 
@@ -129,6 +107,7 @@ string const MenuItem::shortcut() const
        return token(label_, '|', 1);
 }
 
+
 string const MenuItem::binding() const
 {
        if (kind_ != Command)
@@ -136,7 +115,7 @@ string const MenuItem::binding() const
 
        // Get the keys bound to this action, but keep only the
        // first one later
-       string bindings = toplevel_keymap->findbinding(action_);
+       string bindings = toplevel_keymap->findbinding(func_.action);
 
        if (!bindings.empty()) {
                return bindings.substr(1, bindings.find(']') - 1);
@@ -156,7 +135,7 @@ Menu & Menu::add(MenuItem const & i, LyXView const * view)
        case MenuItem::Command:
        {
                FuncStatus status =
-                       view->getLyXFunc().getStatus(i.action());
+                       view->getLyXFunc().getStatus(i.func());
                if (status.unknown()
                    || (status.disabled() && i.optional()))
                        break;
@@ -259,8 +238,20 @@ Menu & Menu::read(LyXLex & lex)
                        string const name = _(lex.getString());
                        lex.next(true);
                        string const command = lex.getString();
-                       add(MenuItem(MenuItem::Command, name,
-                                    command, optional));
+                       string::size_type sp = command.find(' ');
+                       if (sp != string::npos) {
+                               string const cmd = command.substr(0, sp);
+                               string const arg =command.substr(sp + 1,
+                                                                string::npos);
+                               kb_action act = lyxaction.LookupFunc(cmd);
+                               add(MenuItem(MenuItem::Command, name,
+                                            FuncRequest(act, arg), optional));
+                       } else {
+                               kb_action act = lyxaction.LookupFunc(command);
+                               add(MenuItem(MenuItem::Command, name,
+                                            FuncRequest(act), optional));
+                       }
+
                        optional = false;
                        break;
                }
@@ -398,10 +389,7 @@ void expandLastfiles(Menu & tomenu, LyXView const * view)
                string const label = tostr(ii) + ". "
                        + MakeDisplayPath((*lfit), 30)
                        + '|' + tostr(ii);
-               int const action = lyxaction.
-                       getPseudoAction(LFUN_FILE_OPEN,
-                                       (*lfit));
-               tomenu.add(MenuItem(MenuItem::Command, label, action), view);
+               tomenu.add(MenuItem(MenuItem::Command, label, FuncRequest(LFUN_FILE_OPEN, (*lfit))), view);
        }
 }
 
@@ -412,7 +400,7 @@ void expandDocuments(Menu & tomenu, LyXView const * view)
 
        if (names.empty()) {
                tomenu.add(MenuItem(MenuItem::Command, _("No Documents Open!"),
-                                   LFUN_NOACTION), view);
+                                   FuncRequest(LFUN_NOACTION)), view);
                return;
        }
 
@@ -420,12 +408,10 @@ void expandDocuments(Menu & tomenu, LyXView const * view)
        Strings::const_iterator docit = names.begin();
        Strings::const_iterator end = names.end();
        for (; docit != end; ++docit, ++ii) {
-               int const action =
-                       lyxaction.getPseudoAction(LFUN_SWITCHBUFFER, *docit);
                string label = MakeDisplayPath(*docit, 20);
                if (ii < 10)
                        label = tostr(ii) + ". " + label + '|' + tostr(ii);
-               tomenu.add(MenuItem(MenuItem::Command, label, action), view);
+               tomenu.add(MenuItem(MenuItem::Command, label, FuncRequest(LFUN_SWITCHBUFFER, *docit)), view);
        }
 }
 
@@ -434,7 +420,8 @@ void expandFormats(MenuItem::Kind kind, Menu & tomenu, LyXView const * view)
 {
        if (!view->buffer() && kind != MenuItem::ImportFormats) {
                tomenu.add(MenuItem(MenuItem::Command,
-                                   _("No Documents Open!"), LFUN_NOACTION),
+                                   _("No Documents Open!"),
+                                   FuncRequest(LFUN_NOACTION)),
                                    view);
                return;
        }
@@ -483,9 +470,9 @@ void expandFormats(MenuItem::Kind kind, Menu & tomenu, LyXView const * view)
                }
                if (!(*fit)->shortcut().empty())
                        label += '|' + (*fit)->shortcut();
-               int const action2 = lyxaction.
-                       getPseudoAction(action, (*fit)->name());
-               tomenu.add(MenuItem(MenuItem::Command, label, action2),
+
+               tomenu.add(MenuItem(MenuItem::Command, label,
+                                   FuncRequest(action, (*fit)->name())),
                           view);
        }
 }
@@ -495,7 +482,8 @@ void expandFloatListInsert(Menu & tomenu, LyXView const * view)
 {
        if (!view->buffer()) {
                tomenu.add(MenuItem(MenuItem::Command,
-                                   _("No Documents Open!"), LFUN_NOACTION),
+                                   _("No Documents Open!"),
+                                   FuncRequest(LFUN_NOACTION)),
                           view);
                return;
        }
@@ -505,10 +493,10 @@ void expandFloatListInsert(Menu & tomenu, LyXView const * view)
        FloatList::const_iterator cit = floats.begin();
        FloatList::const_iterator end = floats.end();
        for (; cit != end; ++cit) {
-               int const action =  lyxaction
-                       .getPseudoAction(LFUN_FLOAT_LIST, cit->second.type());
                tomenu.add(MenuItem(MenuItem::Command,
-                                   _(cit->second.listName()), action),
+                                   _(cit->second.listName()),
+                                   FuncRequest(LFUN_FLOAT_LIST,
+                                               cit->second.type())),
                           view);
        }
 }
@@ -518,7 +506,8 @@ void expandFloatInsert(Menu & tomenu, LyXView const * view)
 {
        if (!view->buffer()) {
                tomenu.add(MenuItem(MenuItem::Command,
-                                   _("No Documents Open!"), LFUN_NOACTION),
+                                   _("No Documents Open!"),
+                                   FuncRequest(LFUN_NOACTION)),
                           view);
                return;
        }
@@ -529,11 +518,10 @@ void expandFloatInsert(Menu & tomenu, LyXView const * view)
        FloatList::const_iterator end = floats.end();
        for (; cit != end; ++cit) {
                // normal float
-               int const action =
-                       lyxaction.getPseudoAction(LFUN_INSET_FLOAT,
-                                                 cit->second.type());
                string const label = _(cit->second.name());
-               tomenu.add(MenuItem(MenuItem::Command, label, action),
+               tomenu.add(MenuItem(MenuItem::Command, label,
+                                   FuncRequest(LFUN_INSET_FLOAT,
+                                               cit->second.type())),
                           view);
        }
 }
@@ -549,14 +537,14 @@ void expandToc2(Menu & tomenu,
        int shortcut_count = 0;
        if (to - from <= max_number_of_items) {
                for (lyx::toc::Toc::size_type i = from; i < to; ++i) {
-                       int const action = toc_list[i].action();
                        string label(4 * max(0, toc_list[i].depth - depth),' ');
                        label += limit_string_length(toc_list[i].str);
                        if (toc_list[i].depth == depth
                            && ++shortcut_count <= 9) {
                                label += '|' + tostr(shortcut_count);
                        }
-                       tomenu.add(MenuItem(MenuItem::Command, label, action));
+                       tomenu.add(MenuItem(MenuItem::Command, label,
+                                           FuncRequest(toc_list[i].action())));
                }
        } else {
                lyx::toc::Toc::size_type pos = from;
@@ -566,7 +554,6 @@ void expandToc2(Menu & tomenu,
                               toc_list[new_pos].depth > depth)
                                ++new_pos;
 
-                       int const action = toc_list[pos].action();
                        string label(4 * max(0, toc_list[pos].depth - depth), ' ');
                        label += limit_string_length(toc_list[pos].str);
                        if (toc_list[pos].depth == depth &&
@@ -575,7 +562,7 @@ void expandToc2(Menu & tomenu,
 
                        if (new_pos == pos + 1) {
                                tomenu.add(MenuItem(MenuItem::Command,
-                                                   label, action));
+                                                   label, FuncRequest(toc_list[pos].action())));
                        } else {
                                MenuItem item(MenuItem::Submenu, label);
                                item.submenu(new Menu);
@@ -598,7 +585,8 @@ void expandToc(Menu & tomenu, LyXView const * view)
 
        if (!view->buffer()) {
                tomenu.add(MenuItem(MenuItem::Command,
-                                   _("No Documents Open!"), LFUN_NOACTION),
+                                   _("No Documents Open!"),
+                                   FuncRequest(LFUN_NOACTION)),
                           view);
                return;
        }
@@ -618,7 +606,8 @@ void expandToc(Menu & tomenu, LyXView const * view)
                for (; ccit != eend; ++ccit) {
                        string const label = limit_string_length(ccit->str);
                        menu->add(MenuItem(MenuItem::Command,
-                                          label, ccit->action()));
+                                          label,
+                                          FuncRequest(ccit->action())));
                }
                string const & floatName = cit->first;
                // Is the _(...) really needed here? (Lgb)
@@ -651,9 +640,8 @@ void expandPasteRecent(Menu & tomenu, LyXView const * view)
        vector<string>::const_iterator end = selL.end();
 
        for (unsigned int index = 0; cit != end; ++cit, ++index) {
-               int const action = lyxaction.getPseudoAction(LFUN_PASTE,
-                                                            tostr(index));
-               tomenu.add(MenuItem(MenuItem::Command, *cit, action));
+               tomenu.add(MenuItem(MenuItem::Command, *cit,
+                                   FuncRequest(LFUN_PASTE, tostr(index))));
        }
 }
 
@@ -670,12 +658,11 @@ void expandBranches(Menu & tomenu, LyXView const * view)
 
        for (int ii = 1; cit != end; ++cit, ++ii) {
                string label = cit->getBranch();
-               int const action = lyxaction.
-                       getPseudoAction(LFUN_INSERT_BRANCH,
-                                       (cit->getBranch()));
                if (ii < 10)
                        label = tostr(ii) + ". " + label + "|" + tostr(ii);
-               tomenu.add(MenuItem(MenuItem::Command, label, action), view);
+               tomenu.add(MenuItem(MenuItem::Command, label,
+                                   FuncRequest(LFUN_INSERT_BRANCH,
+                                               cit->getBranch())), view);
        }
 }
 
index f6746e08bbe2a80222d81790a45e0b37aa045bb0..2d9bfa887eb8c6c9e42d94945985bde1d9fa10a2 100644 (file)
 #ifndef MENUBACKEND_H
 #define MENUBACKEND_H
 
+#include "FuncStatus.h"
+#include "funcrequest.h"
+
 #include "support/std_string.h"
 
 #include <boost/shared_ptr.hpp>
 
 #include <vector>
 
-#include "FuncStatus.h"
-
 class LyXLex;
 class LyXView;
 class Menu;
@@ -68,14 +69,17 @@ public:
                /** Available branches in document */
                Branches
        };
-       /// Create a Command type MenuItem
+
+       explicit MenuItem(Kind kind);
+
        MenuItem(Kind kind,
-                string const & label = string(),
+                string const & label,
                 string const & command = string(),
                 bool optional = false);
+
        MenuItem(Kind kind,
                 string const & label,
-                int action,
+                FuncRequest const & func,
                 bool optional = false);
 
        /// This one is just to please boost::shared_ptr<>
@@ -89,7 +93,7 @@ public:
        /// The kind of entry
        Kind kind() const { return kind_; }
        /// the action (if relevant)
-       int action() const { return action_; }
+       FuncRequest const & func() const { return func_; }
        /// returns true if the entry should be ommited when disabled
        bool optional() const { return optional_; }
        /// returns the status of the lfun associated with this entry
@@ -116,7 +120,7 @@ private:
        ///
        string label_;
        ///
-       int action_;
+       FuncRequest func_;
        ///
        string submenuname_;
        ///
index 4ef1df0eedca6ca1afecfcf9d29a67bcabac372a..8d91fca37647ff2857e27d577960b9d440763f4c 100644 (file)
@@ -89,24 +89,43 @@ void ToolbarBackend::read(LyXLex & lex)
                        if (lex.next(true)) {
                                string const tooltip = _(lex.getString());
                                lex.next(true);
-                               string const func = lex.getString();
+                               string const func_arg = lex.getString();
                                lyxerr[Debug::PARSER]
                                        << "ToolbarBackend::read TO_ADD func: `"
-                                       << func << '\'' << endl;
-                               add(tb, func, tooltip);
+                                       << func_arg << '\'' << endl;
+                               // Split func_arg in function and arg.
+                               string::size_type sp = func_arg.find(' ');
+                               if (sp != string::npos) {
+
+                                       string const func =
+                                               func_arg.substr(0, sp);
+                                       string const arg =
+                                            func_arg.substr(sp + 1,
+                                                            string::npos);
+
+                                       kb_action const tf =
+                                               lyxaction.LookupFunc(func);
+
+                                       add(tb, FuncRequest(tf, arg), tooltip);
+                               } else {
+                                       kb_action const tf = lyxaction.LookupFunc(func_arg);
+                                       add(tb, FuncRequest(tf), tooltip);
+
+                               }
+
                        }
                        break;
 
                case TO_MINIBUFFER:
-                       add(tb, MINIBUFFER);
+                       add(tb, FuncRequest(kb_action(MINIBUFFER)));
                        break;
 
                case TO_SEPARATOR:
-                       add(tb, SEPARATOR);
+                       add(tb, FuncRequest(kb_action(SEPARATOR)));
                        break;
 
                case TO_LAYOUTS:
-                       add(tb, LAYOUTS);
+                       add(tb, FuncRequest(kb_action(LAYOUTS)));
                        break;
 
                case TO_ENDTOOLBAR:
@@ -193,29 +212,16 @@ void ToolbarBackend::readToolbars(LyXLex & lex)
 }
 
 
-void ToolbarBackend::add(Toolbar & tb, int action, string const & tooltip)
-{
-       tb.items.push_back(make_pair(action, tooltip));
-}
-
-
-void ToolbarBackend::add(Toolbar & tb, string const & func, string const & tooltip)
+void ToolbarBackend::add(Toolbar & tb,
+                        FuncRequest const & func, string const & tooltip)
 {
-       int const tf = lyxaction.LookupFunc(func);
-
-       if (tf == -1) {
-               lyxerr << "ToolbarBackend::add: no LyX command called `"
-                      << func << "' exists!" << endl;
-       } else {
-               add(tb, tf, tooltip);
-       }
+       tb.items.push_back(make_pair(func, tooltip));
 }
 
 
-string const ToolbarBackend::getIcon(int action)
+string const ToolbarBackend::getIcon(FuncRequest const & f)
 {
        string fullname;
-       FuncRequest f = lyxaction.retrieveActionArg(action);
 
        if (f.action == LFUN_INSERT_MATH) {
                if (!f.argument.empty())
@@ -245,6 +251,6 @@ string const ToolbarBackend::getIcon(int action)
 
        lyxerr[Debug::GUI] << "Cannot find icon for command \""
                           << lyxaction.getActionName(f.action)
-                          << ' ' << f.argument << '"' << endl;
+                          << '(' << f.argument << ")\"" << endl;
        return LibFileSearch("images", "unknown", "xpm");
 }
index f5651db88199188d62936c00d196ea4d8890c300..58a88765be4143b651e6638f7494f2ef4c8a97e1 100644 (file)
 #ifndef TOOLBAR_BACKEND_H
 #define TOOLBAR_BACKEND_H
 
+#include "funcrequest.h"
+
 #include <vector>
 
 #include "support/std_string.h"
 
 class LyXLex;
 
+
 ///
 class ToolbarBackend {
 public:
@@ -33,10 +36,10 @@ public:
        };
 
        /// action, tooltip
-       typedef std::pair<int, string> Item;
+       typedef std::pair<FuncRequest, string> Item;
 
        /// the toolbar items
-       typedef std::vector<std::pair<int, string> > Items;
+       typedef std::vector<Item> Items;
 
        /// toolbar flags
        enum Flags {
@@ -82,14 +85,12 @@ public:
        void readToolbars(LyXLex &);
 
        /// return a full path of an XPM for the given action
-       static string const getIcon(int action);
+       static string const getIcon(FuncRequest const &);
 
 private:
        /// add the given lfun with tooltip if relevant
-       void add(Toolbar & tb, int, string const & tooltip = string());
-
-       /// add the given lfun with tooltip if relevant
-       void add(Toolbar & tb, string const &, string const & tooltip);
+       void add(Toolbar & tb, FuncRequest const &,
+                string const & tooltip = string());
 
        /// all the toolbars
        Toolbars toolbars;
index 557a1f84efa70d2002cd082e1df3bb2e3aac6f1f..2d38f585d488c8c52cde433997305c1782debdbd 100644 (file)
@@ -1,5 +1,9 @@
+2003-09-21  Lars Gullik Bjønnes  <larsbj@gullik.net>
+
+       * LyXView.C (updateToolbar): adjust
+
 2003-09-18  Angus Leeming  <leeming@lyx.org>
-       
+
        * Painter.C:
        * Painter.h:
        * lyx_gui.h: rename EnumLColor as LColor_color.
index f13928fd0370ecfa79ce373a49a40529c1cebdca..ac51db295bd251ca5851584bb31553f5d6d728e3 100644 (file)
@@ -106,7 +106,7 @@ void LyXView::updateToolbar()
 {
        bool const math = mathcursor;
        bool const table =
-               !getLyXFunc().getStatus(LFUN_LAYOUT_TABULAR).disabled();
+               !getLyXFunc().getStatus(FuncRequest(LFUN_LAYOUT_TABULAR)).disabled();
        toolbar_->update(math, table);
 }
 
@@ -191,3 +191,4 @@ void LyXView::dispatch(FuncRequest const & req)
        r.setView(view().get());
        getLyXFunc().dispatch(r);
 }
+10
index 38ece3165f8441cc15ff531a50d8655671143bac..68ea1d5f75fef8177076dd1e266c56307133296a 100644 (file)
@@ -32,7 +32,7 @@ public:
        virtual ~Toolbar();
 
        /// Initialize toolbar from backend
-       void init();
+       void init();
 
        /// update the state of the toolbars
        void update(bool in_math, bool in_table);
index 9f0235a5d133569ae02f87d7a932c735419fa4d0..ca1487fecb4faac4065b76830eb0cb6f09d78491 100644 (file)
@@ -1,5 +1,14 @@
 2003-09-21  Lars Gullik Bjønnes  <larsbj@gullik.net>
 
+       * GToolbar.C (add): Make it take a ToobarBackend::Item as arg,
+       adjust.
+       (onButtonClicked): take a FuncRequest
+       (update): adjust
+
+       * GMenubar.C (submenuDisabled): pass FuncRequest to getStatus.
+       (onSubMenuActivate): ditto
+       (onCommandActivate): pass MenuItem::func to dispatch
+
        * LyXKeySymFactory.C (create): fix new bug
 
        * GView.C (GView): fix new bug
index 3c1034896084861b17100b063791ec1b79e492d8..ac1daf27f30788119178a77265c6b5a53ee415cf 100644 (file)
@@ -137,7 +137,7 @@ bool GMenubar::submenuDisabled(MenuItem const * item)
                case MenuItem::Command:
                {
                        FuncStatus const flag =
-                               view_->getLyXFunc().getStatus(i->action());
+                               view_->getLyXFunc().getStatus(i->func());
                        if (!flag.disabled())
                                return false;
                        break;
@@ -180,7 +180,7 @@ void GMenubar::onSubMenuActivate(MenuItem const * item,
                case MenuItem::Command:
                {
                        FuncStatus const flag =
-                               view_->getLyXFunc().getStatus(i->action());
+                               view_->getLyXFunc().getStatus(i->func());
                        bool on, off;
                        on = flag.onoff(true);
                        off = flag.onoff(false);
@@ -224,5 +224,5 @@ void GMenubar::onSubMenuActivate(MenuItem const * item,
 void GMenubar::onCommandActivate(MenuItem const * item,
                                       Gtk::MenuItem * /*gitem*/)
 {
-       view_->getLyXFunc().dispatch(item->action(), true);
+       view_->getLyXFunc().dispatch(item->func(), true);
 }
index b88d8a0455c5f2182357bf8549f084ca5a5b2566..91a31d23f0f8dc13dbe262b8641bba47a0994339 100644 (file)
@@ -81,7 +81,7 @@ void GToolbar::add(ToolbarBackend::Toolbar const & tb)
        ToolbarBackend::item_iterator it = tb.items.begin();
        ToolbarBackend::item_iterator end = tb.items.end();
        for (; it != end; ++it)
-               add(toolbar, it->first, it->second);
+               add(toolbar, *it);
        toolbar->set_toolbar_style(Gtk::TOOLBAR_ICONS);
        toolbar->show();
        vbox_.children().push_back(
@@ -92,10 +92,11 @@ void GToolbar::add(ToolbarBackend::Toolbar const & tb)
 
 
 void GToolbar::add(Gtk::Toolbar * toolbar,
-                        int action,
-                        string const & tooltip)
+                  ToolbarBackend::Item const & item)
 {
-       switch (action) {
+       FuncRequest const & func = item.first;
+       string const & tooltip = item.second;
+       switch (func.action) {
        case ToolbarBackend::SEPARATOR:
                toolbar->tools().push_back(Gtk::Toolbar_Helpers::Space());
                break;
@@ -109,20 +110,20 @@ void GToolbar::add(Gtk::Toolbar * toolbar,
                        Gtk::Toolbar_Helpers::Element(combo_));
                toolbar->tools().back().get_widget()->set_data(
                        gToolData,
-                       reinterpret_cast<void*>(LFUN_LAYOUT));
+                       reinterpret_cast<void*>(&const_cast<ToolbarBackend::Item&>(item)));
                break;
        }
        default:
        {
                Glib::ustring xpmName =
-                       Glib::locale_to_utf8(toolbarbackend.getIcon(action));
+                       Glib::locale_to_utf8(toolbarbackend.getIcon(func));
                Glib::ustring tip = Glib::locale_to_utf8(tooltip);
                if (xpmName.size() == 0) {
                        toolbar->tools().push_back(
                                Gtk::Toolbar_Helpers::ButtonElem(
                                        "",
                                        SigC::bind(SigC::slot(*this, &GToolbar::onButtonClicked),
-                                                  action),
+                                                  FuncRequest(func)),
                                        tip));
                } else {
                        Gtk::Image * image =
@@ -133,21 +134,21 @@ void GToolbar::add(Gtk::Toolbar * toolbar,
                                        "",
                                        *image,
                                        SigC::bind(SigC::slot(*this, &GToolbar::onButtonClicked),
-                                                  action),
+                                                  FuncRequest(func)),
                                        tip));
                }
                toolbar->tools().back().get_content()->set_data(
                        gToolData,
-                       reinterpret_cast<void*>(action));
+                       reinterpret_cast<void*>(&const_cast<ToolbarBackend::Item&>(item)));
                break;
        }
        }
 }
 
 
-void GToolbar::onButtonClicked(int action)
+void GToolbar::onButtonClicked(FuncRequest func)
 {
-       view_->getLyXFunc().dispatch(action, true);
+       view_->getLyXFunc().dispatch(func, true);
 }
 
 
@@ -202,10 +203,11 @@ void GToolbar::update()
                        default:
                                widget = it->get_content();
                        }
-                       int action = reinterpret_cast<int>(
+                       ToolbarBackend::Item * item =
+                       reinterpret_cast<ToolbarBackend::Item*>(
                                widget->get_data(gToolData));
                        FuncStatus const status = view_->
-                               getLyXFunc().getStatus(action);
+                               getLyXFunc().getStatus(item->first);
                        bool sensitive = !status.disabled();
                        widget->set_sensitive(sensitive);
                        if (it->get_type() != Gtk::TOOLBAR_CHILD_BUTTON)
index 0cd8fdf8673a41f6ef591594321ca23eb2b85445..3d04909ab25e28dcf07582d751d31ee480b3fd7b 100644 (file)
@@ -17,6 +17,7 @@
 #include "ToolbarBackend.h"
 #include "support/std_string.h"
 
+
 class GToolbar : public Toolbar, public SigC::Object
 {
 public:
@@ -29,8 +30,7 @@ public:
 
        /// add a new button to the toolbar.
        void add(Gtk::Toolbar * toolbar,
-                int action,
-                string const & tooltip);
+                ToolbarBackend::Item const & item);
 
        /// display toolbar, not implemented
        void displayToolbar(ToolbarBackend::Toolbar const & tb, bool show);
@@ -50,7 +50,7 @@ public:
        /// Erase the layout list
        void clearLayoutList();
 private:
-       void onButtonClicked(int action);
+       void onButtonClicked(FuncRequest);
        void onLayoutSelected();
        Gtk::VBox vbox_;
        std::vector<Gtk::Toolbar*> toolbars_;
index eaab5084c2211e62425a6ec6b66ddb09260624fe..d0c61fc0cdab2f75dc8f18c6ce8abf6431cdb52d 100644 (file)
@@ -1,5 +1,18 @@
 2003-09-21  Lars Gullik Bjønnes  <larsbj@gullik.net>
 
+       * QtView.C (activated): change to take a FuncRequest, not a slot
+       anymore. 
+
+       * QLToolbar.C (update): adjust
+       (add): change to take a FuncRequest
+
+       * QLPopupMenu.C (createMenu): constify id
+       (QLPopupMenu): connect to local class func fire instead of to
+       QtView::activated.
+       (fire): new class function
+       (populate): change to store a cache of FuncRequest for the menu
+       items, adjust
+
        * QContentPane.C (keyPressEvent): fix new bug
 
        * LyXKeySymFactory.C (create): fix new bug
index cae1a1a5cf9d78d756699c4a607f97ebc13bcb83..662f766cdcefec222aab764443b5b96fd741cdcc 100644 (file)
@@ -61,7 +61,7 @@ createMenu(QMenuData * parent, MenuItem const * item, QLMenubar * owner,
 {
        // FIXME: leaks ??
        QLPopupMenu * pm = new QLPopupMenu(owner, item->submenuname(), is_toplevel);
-       int id = parent->insertItem(toqstr(getLabel(*item)), pm);
+       int const id = parent->insertItem(toqstr(getLabel(*item)), pm);
        return make_pair(id, pm);
 }
 
@@ -73,12 +73,20 @@ QLPopupMenu::QLPopupMenu(QLMenubar * owner,
        if (toplevel)
                connect(this, SIGNAL(aboutToShow()), this, SLOT(showing()));
        connect(this, SIGNAL(activated(int)),
-               owner_->view(), SLOT(activated(int)));
+               this, SLOT(fire(int)));
+}
+
+
+void QLPopupMenu::fire(int index)
+{
+       owner_->view()->activated(funcs_[index]);
 }
 
 
 void QLPopupMenu::populate(Menu * menu)
 {
+       funcs_.clear();
+
        Menu::const_iterator m = menu->begin();
        Menu::const_iterator end = menu->end();
        for (; m != end; ++m) {
@@ -92,9 +100,13 @@ void QLPopupMenu::populate(Menu * menu)
                } else {
                        FuncStatus const status = m->status();
 
-                       insertItem(toqstr(getLabel(*m)), m->action());
-                       setItemEnabled(m->action(), !status.disabled());
-                       setItemChecked(m->action(), status.onoff(true));
+                       Funcs::iterator fit =
+                               funcs_.insert(funcs_.end(), m->func());
+                       int const index = std::distance(funcs_.begin(), fit);
+
+                       insertItem(toqstr(getLabel(*m)), index);
+                       setItemEnabled(index, !status.disabled());
+                       setItemChecked(index, status.onoff(true));
                }
        }
 }
index 8f1491e72d8d37f4cb565f4fe9986e38dc581fe7..cf1279cc2c524d64766445aabca70f0795e148bc 100644 (file)
 
 #include <qpopupmenu.h>
 
+#include "funcrequest.h"
+
 #include "support/std_string.h"
 
+#include <vector>
 #include <utility>
 
 class MenuBackend;
@@ -43,12 +46,19 @@ public:
 public slots:
        /// populate the toplevel menu and all children
        void showing();
+       ///
+       void fire(int);
 private:
        /// our owning menubar
        QLMenubar * owner_;
 
        /// the name of this menu
        string name_;
+
+       ///
+       typedef std::vector<FuncRequest> Funcs;
+       ///
+       Funcs funcs_;
 };
 
 #endif // QLPOPUPMENU_H
index f9bfe50f5a7c1b1e51ca2fd07d48cab1b6deca4f..f88e416d55b00db13322243ff22f2810cc2a8135 100644 (file)
@@ -62,17 +62,17 @@ void QLToolbar::update()
 
        for (; p != end; ++p) {
                QToolButton * button = p->first;
-               int action = p->second;
+               FuncRequest const & func = p->second;
 
                FuncStatus const status =
-                       owner_->getLyXFunc().getStatus(action);
+                       owner_->getLyXFunc().getStatus(func);
 
                button->setToggleButton(true);
                button->setOn(status.onoff(true));
                button->setEnabled(!status.disabled());
        }
 
-       bool const enable = !owner_->getLyXFunc().getStatus(LFUN_LAYOUT).disabled();
+       bool const enable = !owner_->getLyXFunc().getStatus(FuncRequest(LFUN_LAYOUT)).disabled();
 
        // Workaround for Qt bug where setEnabled(true) closes
        // the popup
@@ -225,9 +225,10 @@ void QLToolbar::add(ToolbarBackend::Toolbar const & tb)
 }
 
 
-void QLToolbar::add(QToolBar * tb, int action, string const & tooltip)
+void QLToolbar::add(QToolBar * tb,
+                   FuncRequest const & func, string const & tooltip)
 {
-       switch (action) {
+       switch (func.action) {
        case ToolbarBackend::SEPARATOR:
                tb->addSeparator();
                break;
@@ -247,14 +248,14 @@ void QLToolbar::add(QToolBar * tb, int action, string const & tooltip)
                tb->setHorizontalStretchable(true);
                break;
        default: {
-               if (owner_->getLyXFunc().getStatus(action).unknown())
+               if (owner_->getLyXFunc().getStatus(func).unknown())
                        break;
-               QPixmap p = QPixmap(toolbarbackend.getIcon(action).c_str());
+               QPixmap p = QPixmap(toolbarbackend.getIcon(func).c_str());
                QToolButton * button =
                        new QToolButton(p, toqstr(tooltip), "",
                        proxy_.get(), SLOT(button_selected()), tb);
 
-               map_[button] = action;
+               map_[button] = func;
                break;
        }
        }
index b71ffdeb1adcbcfe6f7c5ed9f584889e60c72cd0..1701523f27aea541a73ae35a8fcb04dd8e7732fb 100644 (file)
@@ -41,7 +41,7 @@ public:
        void add(ToolbarBackend::Toolbar const & tb);
 
        /// add an item to a toolbar
-       void add(QToolBar * tb, int action, string const & tooltip);
+       void add(QToolBar * tb, FuncRequest const &, string const & tooltip);
 
        /// show or hide a toolbar
        void displayToolbar(ToolbarBackend::Toolbar const & tb, bool show);
@@ -70,7 +70,7 @@ private:
 
        QLComboBox * combo_;
 
-       typedef std::map<QToolButton *, int> ButtonMap;
+       typedef std::map<QToolButton *, FuncRequest> ButtonMap;
 
        ButtonMap map_;
 };
index e0242ce9e7d0daeb0b66c37b63fe64295f5168eb..3d467365da47edc6a7c688002ba578a4e2781635 100644 (file)
@@ -129,9 +129,9 @@ void QtView::update_view_state()
 }
 
 
-void QtView::activated(int id)
+void QtView::activated(FuncRequest const & func)
 {
-       getLyXFunc().dispatch(id, true);
+       getLyXFunc().dispatch(func, true);
 }
 
 
index 9f3dcf580713cb75e4b444a16ac2571fe9cdb786..00d291def8c1aad0e71def4c7fda1b668c0eb8ff 100644 (file)
@@ -22,6 +22,7 @@
 #include <qtimer.h>
 
 class QCommandBuffer;
+class FuncRequest;
 
 /**
  * QtView - Qt implementation of LyXView
@@ -51,10 +52,10 @@ public:
        /// add the command buffer
        void addCommandBuffer(QWidget * parent);
 
-public slots:
        /// menu item has been selected
-       void activated(int id);
+       void activated(FuncRequest const &);
 
+public slots:
        /// idle timeout
        void update_view_state_qt();
 protected:
index 557bb8cf5b1f8d5676353f9ed4928537ca4160f6..bd4a9213b58b12e984d3b4c66aa8a5505420546f 100644 (file)
@@ -1,5 +1,11 @@
 2003-09-21  Lars Gullik Bjønnes  <larsbj@gullik.net>
 
+       * XFormsToolbar.C: adjust
+
+       * XFormsMenubar.C (create_submenu): change to update a cache of
+       FuncRequest for the MenuItems.
+       (MenuCallback): adjust
+
        * lyx_gui.C (parse_init): fix new bug
 
        * XFormsToolbar.C (XFormsToolbar): fix new bug
index a839c726241a741d74e61f5b35a9b801cb1d1ca3..0bd5360782703c0fc158b79189579e46c588b74b 100644 (file)
@@ -192,9 +192,10 @@ string const fixlabel(string const & str)
 
 
 int XFormsMenubar::create_submenu(Window win, XFormsView * view,
-                                  Menu const & menu, vector<int> & smn)
+                                 Menu const & menu,
+                                 vector<int> & smn, Funcs & funcs)
 {
-       const int menuid = get_new_submenu(smn, win);
+       int const menuid = get_new_submenu(smn, win);
        lyxerr[Debug::GUI] << "XFormsMenubar::create_submenu: creating "
                           << menu.name() << " as menuid=" << menuid << endl;
 
@@ -226,7 +227,7 @@ int XFormsMenubar::create_submenu(Window win, XFormsView * view,
                ++count;
                // add a More... submenu if the menu is too long (but
                // not just for one extra entry!)
-               if (count > max_number_of_items && (i+1) != end) {
+               if (count > max_number_of_items && (i + 1) != end) {
                        int tmpmenuid = get_new_submenu(smn, win);
                        lyxerr[Debug::GUI] << "Too many items, creating "
                                           << "new menu " << tmpmenuid << endl;
@@ -258,7 +259,7 @@ int XFormsMenubar::create_submenu(Window win, XFormsView * view,
                        }
 
                        // Is there a separator after the item?
-                       if ((i+1) != end
+                       if ((i + 1) != end
                            && (i + 1)->kind() == MenuItem::Separator)
                                label += "%l";
 
@@ -282,7 +283,7 @@ int XFormsMenubar::create_submenu(Window win, XFormsView * view,
                                // create the submenu
                                submenuid =
                                        create_submenu(win, view,
-                                                      *item.submenu(), smn);
+                                                      *item.submenu(), smn, funcs);
                                if (submenuid == -1)
                                        return -1;
                                label += "%x" + tostr(smn.size());
@@ -292,10 +293,16 @@ int XFormsMenubar::create_submenu(Window win, XFormsView * view,
                                        << "), ";
                        } else {
                                // Add the action
-                               label += "%x" + tostr(item.action()
-                                                     + action_offset);
+                               Funcs::iterator fit =
+                                       funcs.insert(funcs.end(), item.func());
+                               int const action_count =
+                                       std::distance(funcs.begin(), fit);
+
+                               label += "%x" + tostr(action_count + action_offset);
                                lyxerr[Debug::GUI] << "Action: \""
-                                                  << item.action() << "\", ";
+                                                  << item.func().action
+                                                  << "(" << item.func().argument
+                                                  << ")\", ";
                        }
 
                        // Add everything to the menu
@@ -353,9 +360,10 @@ void XFormsMenubar::MenuCallback(FL_OBJECT * ob, long button)
        Menu tomenu;
        Menu const frommenu = menubackend_->getMenu(item->submenuname());
        menubackend_->expand(frommenu, tomenu, view);
+       Funcs funcs;
        vector<int> submenus;
        int menu = iteminfo->menubar_->create_submenu(FL_ObjWin(ob), view,
-                                                   tomenu, submenus);
+                                                   tomenu, submenus, funcs);
        if (menu != -1) {
                // place popup
                fl_setpup_position(view->getForm()->x + ob->x,
@@ -370,8 +378,8 @@ void XFormsMenubar::MenuCallback(FL_OBJECT * ob, long button)
 
                // If the action value is too low, then it is not a
                // valid action, but something else.
-               if (choice >= action_offset + 1) {
-                       view->getLyXFunc().dispatch(choice - action_offset, true);
+               if (choice >= action_offset) {
+                       view->getLyXFunc().dispatch(funcs[choice - action_offset], true);
                } else {
                        lyxerr[Debug::GUI]
                                << "MenuCallback: ignoring bogus action "
index 8d01d077ca994ff3f11ba39e3264522011ca12c9..04775b3ea0fb63ec045328ca8303e32391a46edd 100644 (file)
@@ -12,6 +12,7 @@
 #ifndef XFORMSMENUBAR_H
 #define XFORMSMENUBAR_H
 
+#include "funcrequest.h"
 #include "frontends/Menubar.h"
 
 #include <boost/shared_ptr.hpp>
@@ -22,6 +23,7 @@
 #include "support/std_string.h"
 #include <vector>
 
+
 class LyXView;
 class XFormsView;
 class Menu;
@@ -30,6 +32,8 @@ class MenuBackend;
 
 class XFormsMenubar : public Menubar {
 public:
+       ///
+       typedef std::vector<FuncRequest> Funcs;
        ///
        XFormsMenubar(LyXView *, MenuBackend const &);
        ///
@@ -53,7 +57,8 @@ private:
                            std::vector<int> & smn, Window win);
        ///
        int create_submenu(Window win, XFormsView * view,
-                          Menu const & menu, std::vector<int> & smn);
+                          Menu const & menu,
+                          std::vector<int> & smn, Funcs & funcs);
 
        //
        void makeMenubar(Menu const & menu);
index 5f4e7c99476949cecf7e88802a4fc3da8468334c..34ab67c8457168d3daf0c4f40c1e854c7be88aec 100644 (file)
@@ -40,7 +40,7 @@ const int buttonwidth = 30; // the standard button width
 const int height = 30; // the height of all items in the toolbar
 
 XFormsToolbar::toolbarItem::toolbarItem()
-       : action(LFUN_NOACTION), icon(0)
+       : icon(0)
 {}
 
 
@@ -81,7 +81,7 @@ XFormsToolbar::toolbarItem::operator=(toolbarItem const & ti)
        // But we don't copy the icon from ti
        kill_icon();
 
-       action = ti.action;
+       func = ti.func;
 
        return *this;
 }
@@ -113,10 +113,10 @@ void XFormsToolbar::update()
        ToolbarList::const_iterator p = toollist_.begin();
        ToolbarList::const_iterator end = toollist_.end();
        for (; p != end; ++p) {
-               if (p->action == ToolbarBackend::LAYOUTS && combox_) {
+               if (p->func.action == int(ToolbarBackend::LAYOUTS) && combox_) {
                        LyXFunc const & lf = owner_->getLyXFunc();
                        bool const disable =
-                               lf.getStatus(LFUN_LAYOUT).disabled();
+                               lf.getStatus(FuncRequest(LFUN_LAYOUT)).disabled();
                        setEnabled(combox_, !disable);
                        continue;
                }
@@ -124,7 +124,7 @@ void XFormsToolbar::update()
                if (!p->icon)
                        continue;
 
-               FuncStatus const status = owner_->getLyXFunc().getStatus(p->action);
+               FuncStatus const status = owner_->getLyXFunc().getStatus(p->func);
                if (status.onoff(true)) {
                        // I'd like to use a different color
                        // here, but then the problem is to
@@ -249,9 +249,12 @@ namespace {
 
 void ToolbarCB(FL_OBJECT * ob, long ac)
 {
-       XFormsView * owner = static_cast<XFormsView *>(ob->u_vdata);
+       if (!ob || !ob->u_vdata)
+               return;
 
-       owner->getLyXFunc().dispatch(int(ac), true);
+       XFormsToolbar * ptr = static_cast<XFormsToolbar *>(ob->u_vdata);
+       XFormsView * owner = ptr->owner_;
+       owner->getLyXFunc().dispatch(ptr->funcs[ac], true);
 }
 
 
@@ -273,6 +276,8 @@ void XFormsToolbar::add(ToolbarBackend::Toolbar const & tb)
        if (!toollist_.empty())
                return;
 
+       funcs.clear();
+
        ToolbarBackend::item_iterator it = tb.items.begin();
        ToolbarBackend::item_iterator end = tb.items.end();
        for (; it != end; ++it)
@@ -280,12 +285,12 @@ void XFormsToolbar::add(ToolbarBackend::Toolbar const & tb)
 }
 
 
-void XFormsToolbar::add(int action, string const & tooltip)
+void XFormsToolbar::add(FuncRequest const & func, string const & tooltip)
 {
        toolbarItem item;
-       item.action = action;
+       item.func = func;
 
-       switch (action) {
+       switch (func.action) {
        case ToolbarBackend::SEPARATOR:
                xpos += sepspace;
                break;
@@ -322,17 +327,19 @@ void XFormsToolbar::add(int action, string const & tooltip)
                fl_set_object_gravity(obj,
                                      NorthWestGravity,
                                      NorthWestGravity);
-               fl_set_object_callback(obj, C_Toolbar_ToolbarCB,
-                                      static_cast<long>(action));
+
+               Funcs::iterator fit = funcs.insert(funcs.end(), func);
+               int const index = std::distance(funcs.begin(), fit);
+               fl_set_object_callback(obj, C_Toolbar_ToolbarCB, index);
                // Remove the blue feedback rectangle
                fl_set_pixmapbutton_focus_outline(obj, 0);
 
                tooltip_->init(obj, tooltip);
 
                // The view that this object belongs to.
-               obj->u_vdata = owner_;
+               obj->u_vdata = this;
 
-               string const xpm = toolbarbackend.getIcon(action);
+               string const xpm = toolbarbackend.getIcon(func);
                fl_set_pixmapbutton_file(obj, xpm.c_str());
 
                // we must remember to update the positions
index 9da0a3d77458dcadc0a0f3f51542f3095346dfc1..f0a50847302e6f818497e1bbff48f78707e966ef 100644 (file)
@@ -36,7 +36,7 @@ public:
        void add(ToolbarBackend::Toolbar const & tb);
 
        /// add an item to a toolbar
-       void add(int action, string const & tooltip);
+       void add(FuncRequest const &, string const & tooltip);
 
        /// display toolbar, not implemented
        void displayToolbar(ToolbarBackend::Toolbar const & tb, bool show);
@@ -67,12 +67,16 @@ public:
                /// deallocate icon
                void kill_icon();
 
-               /// lyx action number
-               int action;
+               /// lyx action
+               FuncRequest func;
                /// icon for this item
                FL_OBJECT * icon;
        };
 
+       typedef std::vector<FuncRequest> Funcs;
+
+       Funcs funcs;
+
        typedef std::vector<toolbarItem> ToolbarList;
 
        /// The list containing all the buttons
index d916a4c620a35a74e5f636982b0e5c0984191190..6192a79f57ab7bce0e1e29cdb241497963fff500 100644 (file)
@@ -127,7 +127,7 @@ void split(vector<string> & args, string str)
 }
 
 
-string FuncRequest::getArg(int i) const
+string FuncRequest::getArg(unsigned int i) const
 {
        vector<string> args;
        split(args, argument);
index 5ebe6fa9d1d429110d4b14c73c89d047f8a3ed75..439671b7803bc97d876271efa5082208c4386116 100644 (file)
@@ -57,7 +57,7 @@ public:
        void errorMessage(string const & msg) const;
 
        /// argument parsing, extract argument i as string
-       string getArg(int i) const;
+       string getArg(unsigned int i) const;
 
 private:
        /// the BufferView we are talking to
index 43b1d9010e802aa1a5d372379bd7c7368544db06..ac8e3beb0b6d39ebf9d1fe4fdbf341a11a010fea 100644 (file)
@@ -264,17 +264,11 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym,
                                   << argument << "']" << endl;
                }
        } else {
-               dispatch(action);
+               dispatch(FuncRequest(kb_action(action)));
        }
 }
 
 
-FuncStatus LyXFunc::getStatus(int ac) const
-{
-       return getStatus(lyxaction.retrieveActionArg(ac));
-}
-
-
 FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
 {
        FuncStatus flag;
@@ -809,7 +803,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
        // solution, we consider only the first action of the sequence
        if (ev.action == LFUN_SEQUENCE) {
                // argument contains ';'-terminated commands
-               flag = getStatus(lyxaction.LookupFunc(token(ev.argument, ';', 0)));
+               flag = getStatus(FuncRequest(lyxaction.LookupFunc(token(ev.argument, ';', 0))));
        }
 
        return flag;
@@ -825,15 +819,10 @@ void LyXFunc::dispatch(string const & s, bool verbose)
                return;
        }
 
-       dispatch(action, verbose);
+       dispatch(FuncRequest(kb_action(action)), verbose);
 }
 
 
-void LyXFunc::dispatch(int ac, bool verbose)
-{
-       dispatch(lyxaction.retrieveActionArg(ac), verbose);
-}
-
 namespace {
        bool ensureBufferClean(BufferView * bv) {
 
@@ -1093,7 +1082,7 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose)
                meta_fake_bit = key_modifier::none;
                if (view()->available())
                        // cancel any selection
-                       dispatch(LFUN_MARK_OFF);
+                       dispatch(FuncRequest(LFUN_MARK_OFF));
                setMessage(N_("Cancel"));
                break;
 
@@ -1715,22 +1704,16 @@ void LyXFunc::sendDispatchMessage(string const & msg, FuncRequest const & ev, bo
 
        string comname = lyxaction.getActionName(ev.action);
 
-       int pseudoaction = ev.action;
        bool argsadded = false;
 
        if (!ev.argument.empty()) {
-               // the pseudoaction is useful for the bindings
-               pseudoaction = lyxaction.searchActionArg(ev.action, ev.argument);
-
-               if (pseudoaction == LFUN_UNKNOWN_ACTION) {
-                       pseudoaction = ev.action;
-               } else {
+               if (ev.action != LFUN_UNKNOWN_ACTION) {
                        comname += ' ' + ev.argument;
                        argsadded = true;
                }
        }
 
-       string const shortcuts = toplevel_keymap->findbinding(pseudoaction);
+       string const shortcuts = toplevel_keymap->findbinding(ev.action);
 
        if (!shortcuts.empty()) {
                comname += ": " + shortcuts;
index b67b5c582169a8fb547fa62c98cdbd2f9f9aa74d..e71f0ef33f5bfad84b9616f929b03fe058ec1476 100644 (file)
@@ -49,9 +49,6 @@ public:
        /// Dispatch via a string argument
        void dispatch(string const & s, bool verbose = false);
 
-       /// Dispatch via a pseudo action, also displaying shortcut/command name
-       void dispatch(int ac, bool verbose = false);
-
        /// return the status bar state string
        string const view_status_message();
 
@@ -60,9 +57,6 @@ public:
        ///
        void processKeySym(LyXKeySymPtr key, key_modifier::state state);
 
-       /// we need one internal which is called from inside LyXAction and
-       /// can contain the string argument.
-       FuncStatus getStatus(int ac) const;
        ///
        FuncStatus getStatus(FuncRequest const & action) const;
 
index 0338f3f98ac3608f92e70c1e0f17d82b80ddd18b..8861cc4c083863b1b2e25ee73d9ff872867dd00d 100644 (file)
--- a/src/toc.C
+++ b/src/toc.C
@@ -47,10 +47,9 @@ void TocItem::goTo(LyXView & lv_) const
 }
 
 
-int TocItem::action() const
+FuncRequest TocItem::action() const
 {
-       return lyxaction.getPseudoAction(LFUN_GOTO_PARAGRAPH,
-                                        tostr(id_));
+       return FuncRequest(LFUN_GOTO_PARAGRAPH, tostr(id_));
 }
 
 
index 91aeaacc41d31691f125746b82b1ca4df4f5165a..5ca643da7201304cec6a407f2f3f4eb8b45b5d06 100644 (file)
--- a/src/toc.h
+++ b/src/toc.h
@@ -22,6 +22,7 @@
 class Buffer;
 class LyXView;
 class Paragraph;
+class FuncRequest;
 
 /** Nice functions and objects to handle TOCs
  */
@@ -37,7 +38,7 @@ struct TocItem {
        /// set cursor in LyXView to this TocItem
        void goTo(LyXView & lv_) const;
        /// the action corresponding to the goTo above
-       int action() const;
+       FuncRequest action() const;
        /// Paragraph ID containing this item
        int id_;
        /// nesting depth