Adobe 0046100128056 Scripting Guide - Page 134

A More Complex Menu-scripting Example

Page 134 highlights

CHAPTER 9: Menus A More Complex Menu-scripting Example 134 var myScriptMenuActionNames = app.scriptMenuActions.everyItem().name; //Open a new text file. var myTextFile = File.saveDialog("Save Script Menu Action Names As", undefined); //If the user clicked the Cancel button, the result is null. if(myTextFile != null){ //Open the file with write access. myTextFile.open("w"); for(var myCounter = 0; myCounter < myScriptMenuActionNames.length; myCounter++){ myTextFile.writeln(myScriptMenuActionNames[myCounter]); } myTextFile.close(); } scriptMenuAction also can run scripts during their beforeDisplay event, in which case they are executed before an internal request for the state of the scriptMenuAction (e.g., when the menu item is about to be displayed). Among other things, the script can then change the menu names and/or set the enabled/checked status. In the following sample script, we add an eventListener to the beforeDisplay event that checks the current selection. If there is no selection, the script in the eventListener disables the menu item. If an item is selected, the menu item is enabled, and choosing the menu item displays the type of the first item in the selection. (For the complete script, see BeforeDisplay.) var mySampleScriptAction = app.scriptMenuActions.add("Display Message"); var myEventListener = mySampleScriptAction.eventListeners.add("onInvoke", function() { //JavaScript function to run when the menu item is selected. myString = app.selection[0].constructor.name; alert("The first item in the selection is a " + myString + "."); }); var mySampleScriptMenu = app.menus.item("$ID/Main").submenus.add("Script Menu Action"); var mySampleScriptMenuItem = mySampleScriptMenu.menuItems.add(mySampleScriptAction); mySampleScriptMenu.eventListeners.add("beforeDisplay", function() { //JavaScript function to run before the menu item is drawns. var mySampleScriptAction = app.scriptMenuActions.item("Display Message"); if(app.selection.length > 0){ mySampleScriptAction.enabled = true; } else{ mySampleScriptAction.enabled = false; } }); A More Complex Menu-scripting Example You have probably noticed that selecting different items in the InDesign user interface changes the contents of the context menus. The following sample script shows how to modify the context menu based on the properties of the object you select. Fragments of the script are shown below; for the complete script, see LayoutContextMenu. The following snippet shows how to create a new menu item on the Layout context menu (the context menu that appears when you have a page item selected). The following snippet adds a beforeDisplay eventListener which checks for the existence of a menuItem and removes it if it already exists. We do this to ensure the menuItem does not appear on the context menu when the selection does not contain a

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209

C
HAPTER
9: Menus
A More Complex Menu-scripting Example
134
var myScriptMenuActionNames = app.scriptMenuActions.everyItem().name;
//Open a new text file.
var myTextFile = File.saveDialog("Save Script Menu Action Names As", undefined);
//If the user clicked the Cancel button, the result is null.
if(myTextFile != null){
//Open the file with write access.
myTextFile.open("w");
for(var myCounter = 0; myCounter < myScriptMenuActionNames.length; myCounter++){
myTextFile.writeln(myScriptMenuActionNames[myCounter]);
}
myTextFile.close();
}
scriptMenuAction
also can run scripts during their
beforeDisplay
event
, in which case they are
executed before an internal request for the state of the
scriptMenuAction
(e.g., when the menu item is
about to be displayed). Among other things, the script can then change the menu names and/or set the
enabled/checked status.
In the following sample script, we add an
eventListener
to the
beforeDisplay
event
that checks the
current selection. If there is no selection, the script in the
eventListener
disables the menu item. If an
item is selected, the menu item is enabled, and choosing the menu item displays the type of the first item
in the selection. (For the complete script, see BeforeDisplay.)
var mySampleScriptAction = app.scriptMenuActions.add("Display Message");
var myEventListener = mySampleScriptAction.eventListeners.add("onInvoke", function()
{
//JavaScript function to run when the menu item is selected.
myString = app.selection[0].constructor.name;
alert("The first item in the selection is a " + myString + ".");
});
var mySampleScriptMenu = app.menus.item("$ID/Main").submenus.add("Script Menu
Action");
var mySampleScriptMenuItem = mySampleScriptMenu.menuItems.add(mySampleScriptAction);
mySampleScriptMenu.eventListeners.add("beforeDisplay", function()
{
//JavaScript function to run before the menu item is drawns.
var mySampleScriptAction = app.scriptMenuActions.item("Display Message");
if(app.selection.length > 0){
mySampleScriptAction.enabled = true;
}
else{
mySampleScriptAction.enabled = false;
}
});
A More Complex Menu-scripting Example
You have probably noticed that selecting different items in the InDesign user interface changes the
contents of the context menus. The following sample script shows how to modify the context menu based
on the properties of the object you select. Fragments of the script are shown below; for the complete
script, see LayoutContextMenu.
The following snippet shows how to create a new menu item on the Layout context menu (the context
menu that appears when you have a page item selected). The following snippet adds a
beforeDisplay
eventListener
which checks for the existence of a
menuItem
and removes it if it already exists. We do this
to ensure the
menuItem
does not appear on the context menu when the selection does not contain a