Julien Galand wrote:
>
> Le 19 oct. 06, à 14:52, Carsten Driesner a écrit :
>
>> Julien Galand wrote:
>>> Thanks for this link.
>>> I had tried this previously and it didn't work,
but I think I have
>>> now found the cause (there is apparently a bug
in the C++ UNO binding
>>> about the awt::KeyEvent structure, for which I
have just posted a
>>> mail in this mailing list), and I could make it
work.
>>> But the real question in my previous mail was
to display the shortcut
>>> in the menu line. The code snippet above
doesn't change anything in
>>> the menu added by the "transient
change" method (I have set the same
>>> command URL on the shortcut and the menu line,
hoping that OO would
>>> associate both automatically).
>>> Is there a way to display for example
"Ctrl+F12" on the right of a
>>> menu line (and right-justified) ?
>> Hi Julien,
>>
>> OpenOffice.org should display all associated
keyboard shortcuts
>> automatically in the menu. If it doesn't work for
your example, then I
>> guess that it's a bug. So could you write me a bug
for this issue and
>> add a small example to reproduce it?
>>
>
> Hi Carsten,
>
> I have spent several hours to boil down the phenomenon.
> From my tests, I have concluded that this
"display connection" of the
> shortcut with its menu line doesn't work when the menu
line is in a
> submenu (i.e. not a line in a menu of the menu bar, but
in a submenu of
> a menu).
> When it is simply a menu line of a menu of the menu
bar, it works.
>
> It looks like a bug. I use OO 2.0.3.
Hi Julien,
If you are right then it would be a bug. It's a little bit
strange as I
can see keyboard shortcuts in sub menus using OOo 2.0.4.
Writer menu:
Table - Insert - Table... Strg+F12
Tools - Update - Fields F9
Insert - Fields - Other... Strg+F2
The OpenOffice.org menu implementation uses the accelerator
configuration to show shortcuts assigned to functions.
>
> With regards to a sample code, I have got one, but only
in JScript, as I
> am much more used to it than Basic.
> Copy the sample below in a text file, say
> "Insert_new_menu_and_shortcut.js".
> I launch the script in Windows, with a simple command
line (OO should be
> running) :
>
> cscript "Insert_new_menu_and_shortcut.js"
>
> I hope JScript won't be a burden for you. If it were,
tell me and I will
> try to translate it in OO Basic with my little
knowledge of it.
> Here is the sample :
>
> (you can try both cases, with a simple menu line, or
with a submenu, by
> assigning the 3rd parameter of 'InsertMenu')
JScript shouldn't be a problem. I will check you example on
Monday and
may be I am able to shed light on this issue.
Regards,
Carsten
>
____________________________________________________________
______________________________________
>
>
> var ooServMgr =
WScript.CreateObject("com.sun.star.ServiceManager"
);
>
> var mycommand =
"macro:///Standard.Module1.Test()";
>
> // Set the 3rd parameter to 'true' to insert a submenu
in the "File" menu.
> // This submenu has only one line.
> // Or 'false' to insert only the menu line in the
"File" menu.
> //
> InsertMenu(ooServMgr, mycommand, true);
>
> InsertShortcut(ooServMgr, mycommand);
>
> function InsertMenu(ooServMgr, myCommand, bWithSubmenu)
{
> var ooDesktop =
ooServMgr.createInstance("com.sun.star.frame.Desktop&qu
ot;);
> var curFrame = ooDesktop.getCurrentFrame();
> var layoutMgr = curFrame.LayoutManager;
>
> var menuElementName =
"private:resource/menubar/menubar";
> var menuBar =
layoutMgr.getElement(menuElementName);
> var menuBarSettings = menuBar.getSettings(true);
>
> menuBar.Persistent = false;
>
> // Find the "File" popup menu.
> //
> var fileMenuIndex =
FindCommand(".uno:PickList", menuBarSettings);
>
> if (fileMenuIndex >= 0) {
> var popupMenuItem =
> menuBarSettings.getByIndex(fileMenuIndex).toArray();
> var popupMenu =
GetProperty("ItemDescriptorContainer",
> popupMenuItem);
>
> //if (FindCommand(myCommand, popupMenu)==-1)
> {
> var menuItem;
> menuItem = CreateMenuItem(ooServMgr,
myCommand, "Test
> shortcut", null);
>
> var menuItemPassed =
ooServMgr.Bridge_GetValueObject();
>
menuItemPassed.Set("[]com.sun.star.beans.PropertyValue&
quot;,
> menuItem);
>
> if (bWithSubmenu) {
> var submenu;
> submenu =
>
menuBarSettings.createInstanceWithContext(ooServMgr.DefaultC
ontext);
> submenu.insertByIndex(0,
menuItemPassed);
>
> menuItem = CreateMenuItem(ooServMgr,
"", "Test shortcut
> submenu", submenu);
>
menuItemPassed.Set("[]com.sun.star.beans.PropertyValue&
quot;,
> menuItem);
> }
>
>
popupMenu.insertByIndex(popupMenu.getCount(),
menuItemPassed);
> }
> }
> menuBar.setSettings(menuBarSettings);
> }
>
> function FindCommand(command, menuBarSettings) {
> for (var i=0; i<menuBarSettings.getCount(); i++)
{
> var popupMenu =
menuBarSettings.getByIndex(i).toArray();
>
> for (var j=0; j<popupMenu.length; j++) {
> if
(popupMenu[j].Name=="CommandURL" &&
> popupMenu[j].Value==command) return i;
> }
> }
> return -1;
> }
>
> function GetProperty(propertyName, properties) {
> for (var i = 0; i<properties.length; i++) {
> if (properties[i].Name==propertyName) return
properties[i].Value;
> }
> return null;
> }
>
> function CreateMenuItem(ooServMgr, command, label,
submenu) {
> var menuItem = new Array(3 + (submenu != null));
>
> menuItem[0] =
>
ooServMgr.Bridge_GetStruct("com.sun.star.beans.Property
Value");
> menuItem[1] =
>
ooServMgr.Bridge_GetStruct("com.sun.star.beans.Property
Value");
> menuItem[2] =
>
ooServMgr.Bridge_GetStruct("com.sun.star.beans.Property
Value");
>
> menuItem[0].Name = "CommandURL";
> menuItem[0].Value = command;
> menuItem[1].Name = "Label";
> menuItem[1].Value = label;
> menuItem[2].Name = "Type";
> menuItem[2].Value = 0;
>
> if (submenu != null) {
> menuItem[3] =
>
ooServMgr.Bridge_GetStruct("com.sun.star.beans.Property
Value");
> menuItem[3].Name =
"ItemDescriptorContainer";
> menuItem[3].Value = submenu;
> }
>
> return menuItem;
> }
>
> function InsertShortcut(ooServMgr, command) {
> var xUICfgSupp =
>
ooServMgr.createInstance("com.sun.star.ui.ModuleUIConfi
gurationManagerSupplier");
>
> var xUICfgMgr =
>
xUICfgSupp.getUIConfigurationManager("com.sun.star.text
.TextDocument");
> var shortcutMgr = xUICfgMgr.getShortCutManager();
>
> var keyEvent =
ooServMgr.Bridge_GetStruct("com.sun.star.awt.KeyEvent&q
uot;);
>
> keyEvent.KeyCode = 778; // F11
> keyEvent.Modifiers = 2; // Shift==1; Ctrl==2
>
> try {
> if
(shortcutMgr.getCommandByKeyEvent(keyEvent)==command) {
> shortcutMgr.removeKeyEvent(keyEvent);
> }
> }
> catch(e) {
> var type = typeof e;
> }
>
> shortcutMgr.setKeyEvent(keyEvent, command);
> shortcutMgr.store();
> }
>
>
____________________________________________________________
______________________________________
>
>
> Julien Galand
>
------------------------------------------------------------
---------
To unsubscribe, e-mail: dev-unsubscribe api.openoffice.org
For additional commands, e-mail: dev-help api.openoffice.org
|