Display accelerator (binding) labels in menus.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9035 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
John Spray 2004-10-02 23:21:36 +00:00
parent ae8999aeba
commit 005955b527
2 changed files with 36 additions and 8 deletions

View File

@ -13,6 +13,8 @@
#include "GLyXKeySym.h"
#include "kbmap.h"
#include "support/lstrings.h"
#include <gtkmm.h>
#include <gdk/gdkkeysyms.h>
@ -94,9 +96,27 @@ char GLyXKeySym::getISOEncoded(string const & /*encoding*/) const
}
//Produce a human readable version (eg "Ctrl+N")
string const GLyXKeySym::print(key_modifier::state mod) const
{
return kb_keymap::printKeySym(*this, mod);
string buf;
if (mod & key_modifier::ctrl)
buf += "Ctrl+";
if (mod & key_modifier::shift)
buf += "Shift+";
if (mod & key_modifier::alt)
buf += "Alt+";
//Uppercase the first letter, for Ctrl+N rather than Ctrl+n,
//and for Ctrl+Greater rather than Ctrl+GREATER
string symname = getSymbolName();
if (!symname.empty()) {
symname[0] = lyx::support::uppercase(symname[0]);
buf += symname;
}
return buf;
}

View File

@ -180,9 +180,6 @@ void GMenubar::onSubMenuActivate(MenuItem const * item,
break;
case MenuItem::Command:
{
#ifdef WITH_WARNINGS
#warning Bindings are not inserted into the menu labels here. (Lgb)
#endif
FuncStatus const flag =
view_->getLyXFunc().getStatus(i->func());
bool on = flag.onoff(true);
@ -198,10 +195,21 @@ void GMenubar::onSubMenuActivate(MenuItem const * item,
gmenu->items().back());
citem.set_active(on);
} else {
gmenu->items().push_back(
Gtk::Menu_Helpers::MenuElem(
labelTrans(i->label(),
i->shortcut())));
//This is necessary because add_accel_label is protected,
//and even if you subclass Gtk::MenuItem then add_accel_label
//doesn't do what you'd expect.
Gtk::MenuItem * item = Gtk::manage(new Gtk::MenuItem);
Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox);
Gtk::Label * label1 = Gtk::manage(new Gtk::Label(
labelTrans(i->label(), i->shortcut()), true));
Gtk::Label * label2 = Gtk::manage(new Gtk::Label(
" " + i->binding(), false));
hbox->pack_start(*label1, false, false, 0);
hbox->pack_end(*label2, false, false, 0);
item->add(*hbox);
gmenu->append(*item);
item->show_all();
}
Gtk::MenuItem & item = gmenu->items().back();
item.signal_activate().connect(