1 /* GIMP - The GNU Image Manipulation Program
2  * Copyright (C) 1995 Spencer Kimball and Peter Mattis
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
16  */
17 
18 #include "config.h"
19 
20 #include <string.h>
21 
22 #include <gegl.h>
23 #include <gtk/gtk.h>
24 
25 #include "libgimpwidgets/gimpwidgets.h"
26 
27 #include "actions-types.h"
28 
29 #include "core/gimp.h"
30 #include "core/gimpcontainer.h"
31 #include "core/gimpcontext.h"
32 #include "core/gimptoolinfo.h"
33 
34 #include "widgets/gimpaction.h"
35 #include "widgets/gimpactiongroup.h"
36 #include "widgets/gimphelp-ids.h"
37 
38 #include "actions.h"
39 #include "tools-actions.h"
40 #include "tools-commands.h"
41 
42 #include "gimp-intl.h"
43 
44 
45 static const GimpActionEntry tools_actions[] =
46 {
47   { "tools-menu",           NULL, NC_("tools-action", "_Tools")           },
48   { "tools-select-menu",    NULL, NC_("tools-action", "_Selection Tools") },
49   { "tools-paint-menu",     NULL, NC_("tools-action", "_Paint Tools")     },
50   { "tools-transform-menu", NULL, NC_("tools-action", "_Transform Tools") },
51   { "tools-color-menu",     NULL, NC_("tools-action", "_Color Tools")     },
52 };
53 
54 static const GimpStringActionEntry tools_alternative_actions[] =
55 {
56   { "tools-by-color-select-short", GIMP_ICON_TOOL_BY_COLOR_SELECT,
57     NC_("tools-action", "_By Color"), NULL,
58     NC_("tools-action", "Select regions with similar colors"),
59     "gimp-by-color-select-tool",
60     GIMP_HELP_TOOL_BY_COLOR_SELECT },
61 
62   { "tools-rotate-arbitrary", GIMP_ICON_TOOL_ROTATE,
63     NC_("tools-action", "_Arbitrary Rotation..."), "",
64     NC_("tools-action", "Rotate drawable by an arbitrary angle"),
65     "gimp-rotate-layer",
66     GIMP_HELP_TOOL_ROTATE },
67 
68   { "tools-rotate-image-arbitrary", GIMP_ICON_TOOL_ROTATE,
69     NC_("tools-action", "_Arbitrary Rotation..."), "",
70     NC_("tools-action", "Rotate image by an arbitrary angle"),
71     "gimp-rotate-image",
72     GIMP_HELP_TOOL_ROTATE }
73 };
74 
75 static const GimpEnumActionEntry tools_color_average_radius_actions[] =
76 {
77   { "tools-color-average-radius-set", GIMP_ICON_TOOL_COLOR_PICKER,
78     "Set Color Picker Radius", NULL, NULL,
79     GIMP_ACTION_SELECT_SET, TRUE,
80     NULL }
81 };
82 
83 static const GimpEnumActionEntry tools_paintbrush_size_actions[] =
84 {
85   { "tools-paintbrush-size-set", GIMP_ICON_TOOL_PAINTBRUSH,
86     "Set Brush Size", NULL, NULL,
87     GIMP_ACTION_SELECT_SET, TRUE,
88     NULL }
89 };
90 
91 static const GimpEnumActionEntry tools_paintbrush_aspect_ratio_actions[] =
92 {
93   { "tools-paintbrush-aspect-ratio-set", GIMP_ICON_TOOL_PAINTBRUSH,
94     "Set Brush Aspect Ratio", NULL, NULL,
95     GIMP_ACTION_SELECT_SET, TRUE,
96     NULL }
97 };
98 
99 static const GimpEnumActionEntry tools_paintbrush_angle_actions[] =
100 {
101   { "tools-paintbrush-angle-set", GIMP_ICON_TOOL_PAINTBRUSH,
102     "Set Brush Angle", NULL, NULL,
103     GIMP_ACTION_SELECT_SET, TRUE,
104     NULL }
105 };
106 
107 static const GimpEnumActionEntry tools_paintbrush_spacing_actions[] =
108 {
109   { "tools-paintbrush-spacing-set", GIMP_ICON_TOOL_PAINTBRUSH,
110     "Set Brush Spacing", NULL, NULL,
111     GIMP_ACTION_SELECT_SET, TRUE,
112     NULL }
113 };
114 
115 static const GimpEnumActionEntry tools_paintbrush_hardness_actions[] =
116 {
117   { "tools-paintbrush-hardness-set", GIMP_ICON_TOOL_PAINTBRUSH,
118     "Set Brush Hardness", NULL, NULL,
119     GIMP_ACTION_SELECT_SET, TRUE,
120     NULL }
121 };
122 
123 static const GimpEnumActionEntry tools_paintbrush_force_actions[] =
124 {
125   { "tools-paintbrush-force-set", GIMP_ICON_TOOL_PAINTBRUSH,
126     "Set Brush Force", NULL, NULL,
127     GIMP_ACTION_SELECT_SET, TRUE,
128     NULL }
129 };
130 
131 static const GimpEnumActionEntry tools_ink_blob_size_actions[] =
132 {
133   { "tools-ink-blob-size-set", GIMP_ICON_TOOL_INK,
134     "Set Ink Blob Size", NULL, NULL,
135     GIMP_ACTION_SELECT_SET, TRUE,
136     NULL }
137 };
138 
139 static const GimpEnumActionEntry tools_ink_blob_aspect_actions[] =
140 {
141   { "tools-ink-blob-aspect-set", GIMP_ICON_TOOL_INK,
142     "Set Ink Blob Aspect", NULL, NULL,
143     GIMP_ACTION_SELECT_SET, TRUE,
144     NULL }
145 };
146 
147 static const GimpEnumActionEntry tools_ink_blob_angle_actions[] =
148 {
149   { "tools-ink-blob-angle-set", GIMP_ICON_TOOL_INK,
150     "Set Ink Blob Angle", NULL, NULL,
151     GIMP_ACTION_SELECT_SET, TRUE,
152     NULL }
153 };
154 
155 static const GimpEnumActionEntry tools_airbrush_rate_actions[] =
156 {
157   { "tools-airbrush-rate-set", GIMP_ICON_TOOL_AIRBRUSH,
158     NC_("tools-action", "Airbrush Rate: Set"), NULL, NULL,
159     GIMP_ACTION_SELECT_SET, TRUE,
160     NULL },
161   { "tools-airbrush-rate-minimum", GIMP_ICON_TOOL_AIRBRUSH,
162     NC_("tools-action", "Airbrush Rate: Set to Minimum"), NULL, NULL,
163     GIMP_ACTION_SELECT_FIRST, FALSE,
164     NULL },
165   { "tools-airbrush-rate-maximum", GIMP_ICON_TOOL_AIRBRUSH,
166     NC_("tools-action", "Airbrush Rate: Set to Maximum"), NULL, NULL,
167     GIMP_ACTION_SELECT_LAST, FALSE,
168     NULL },
169   { "tools-airbrush-rate-decrease", GIMP_ICON_TOOL_AIRBRUSH,
170     NC_("tools-action", "Airbrush Rate: Decrease by 1"), NULL, NULL,
171     GIMP_ACTION_SELECT_PREVIOUS, FALSE,
172     NULL },
173   { "tools-airbrush-rate-increase", GIMP_ICON_TOOL_AIRBRUSH,
174     NC_("tools-action", "Airbrush Rate: Increase by 1"), NULL, NULL,
175     GIMP_ACTION_SELECT_NEXT, FALSE,
176     NULL },
177   { "tools-airbrush-rate-decrease-skip", GIMP_ICON_TOOL_AIRBRUSH,
178     NC_("tools-action", "Airbrush Rate: Decrease by 10"), NULL, NULL,
179     GIMP_ACTION_SELECT_SKIP_PREVIOUS, FALSE,
180     NULL },
181   { "tools-airbrush-rate-increase-skip", GIMP_ICON_TOOL_AIRBRUSH,
182     NC_("tools-action", "Airbrush Rate: Increase by 10"), NULL, NULL,
183     GIMP_ACTION_SELECT_SKIP_NEXT, FALSE,
184     NULL }
185 };
186 
187 static const GimpEnumActionEntry tools_airbrush_flow_actions[] =
188 {
189   { "tools-airbrush-flow-set", GIMP_ICON_TOOL_AIRBRUSH,
190     NC_("tools-action", "Airbrush Flow: Set"), NULL, NULL,
191     GIMP_ACTION_SELECT_SET, TRUE,
192     NULL },
193   { "tools-airbrush-flow-minimum", GIMP_ICON_TOOL_AIRBRUSH,
194     NC_("tools-action", "Airbrush Flow: Set to Minimum"), NULL, NULL,
195     GIMP_ACTION_SELECT_FIRST, FALSE,
196     NULL },
197   { "tools-airbrush-flow-maximum", GIMP_ICON_TOOL_AIRBRUSH,
198     NC_("tools-action", "Airbrush Flow: Set to Maximum"), NULL, NULL,
199     GIMP_ACTION_SELECT_LAST, FALSE,
200     NULL },
201   { "tools-airbrush-flow-decrease", GIMP_ICON_TOOL_AIRBRUSH,
202     NC_("tools-action", "Airbrush Flow: Decrease by 1"), NULL, NULL,
203     GIMP_ACTION_SELECT_PREVIOUS, FALSE,
204     NULL },
205   { "tools-airbrush-flow-increase", GIMP_ICON_TOOL_AIRBRUSH,
206     NC_("tools-action", "Airbrush Flow: Increase by 1"), NULL, NULL,
207     GIMP_ACTION_SELECT_NEXT, FALSE,
208     NULL },
209   { "tools-airbrush-flow-decrease-skip", GIMP_ICON_TOOL_AIRBRUSH,
210     NC_("tools-action", "Airbrush Flow: Decrease by 10"), NULL, NULL,
211     GIMP_ACTION_SELECT_SKIP_PREVIOUS, FALSE,
212     NULL },
213   { "tools-airbrush-flow-increase-skip", GIMP_ICON_TOOL_AIRBRUSH,
214     NC_("tools-action", "Airbrush Flow: Increase by 10"), NULL, NULL,
215     GIMP_ACTION_SELECT_SKIP_NEXT, FALSE,
216     NULL }
217 };
218 
219 static const GimpEnumActionEntry tools_mybrush_radius_actions[] =
220 {
221   { "tools-mypaint-brush-radius-set", GIMP_ICON_TOOL_MYPAINT_BRUSH,
222     "Set MyPaint Brush Radius", NULL, NULL,
223     GIMP_ACTION_SELECT_SET, TRUE,
224     NULL }
225 };
226 
227 static const GimpEnumActionEntry tools_mybrush_hardness_actions[] =
228 {
229   { "tools-mypaint-brush-hardness-set", GIMP_ICON_TOOL_MYPAINT_BRUSH,
230     "Set MyPaint Brush Hardness", NULL, NULL,
231     GIMP_ACTION_SELECT_SET, TRUE,
232     NULL }
233 };
234 
235 static const GimpEnumActionEntry tools_foreground_select_brush_size_actions[] =
236 {
237   { "tools-foreground-select-brush-size-set",
238     GIMP_ICON_TOOL_FOREGROUND_SELECT,
239     "Set Foreground Select Brush Size", NULL, NULL,
240     GIMP_ACTION_SELECT_SET, TRUE,
241     NULL }
242 };
243 
244 static const GimpEnumActionEntry tools_transform_preview_opacity_actions[] =
245 {
246   { "tools-transform-preview-opacity-set", GIMP_ICON_TOOL_PERSPECTIVE,
247     "Set Transform Tool Preview Opacity", NULL, NULL,
248     GIMP_ACTION_SELECT_SET, TRUE,
249     NULL }
250 };
251 
252 static const GimpEnumActionEntry tools_warp_effect_size_actions[] =
253 {
254   { "tools-warp-effect-size-set", GIMP_ICON_TOOL_WARP,
255     "Set Warp Effect Size", NULL, NULL,
256     GIMP_ACTION_SELECT_SET, TRUE,
257     NULL }
258 };
259 
260 static const GimpEnumActionEntry tools_warp_effect_hardness_actions[] =
261 {
262   { "tools-warp-effect-hardness-set", GIMP_ICON_TOOL_WARP,
263     "Set Warp Effect Hardness", NULL, NULL,
264     GIMP_ACTION_SELECT_SET, TRUE,
265     NULL }
266 };
267 
268 static const GimpEnumActionEntry tools_opacity_actions[] =
269 {
270   { "tools-opacity-set", GIMP_ICON_DIALOG_TOOL_OPTIONS,
271     NC_("tools-action", "Tool's Opacity: Set"), NULL, NULL,
272     GIMP_ACTION_SELECT_SET, TRUE,
273     NULL },
274   { "tools-opacity-set-to-default", GIMP_ICON_DIALOG_TOOL_OPTIONS,
275     NC_("tools-action", "Tool's Opacity: Set to Default Value"), NULL, NULL,
276     GIMP_ACTION_SELECT_SET_TO_DEFAULT, FALSE,
277     NULL },
278   { "tools-opacity-minimum", GIMP_ICON_DIALOG_TOOL_OPTIONS,
279     NC_("tools-action", "Tool's Opacity: Minimize"), NULL, NULL,
280     GIMP_ACTION_SELECT_FIRST, FALSE,
281     NULL },
282   { "tools-opacity-maximum", GIMP_ICON_DIALOG_TOOL_OPTIONS,
283     NC_("tools-action", "Tool's Opacity: Maximize"), NULL, NULL,
284     GIMP_ACTION_SELECT_LAST, FALSE,
285     NULL },
286   { "tools-opacity-decrease", GIMP_ICON_DIALOG_TOOL_OPTIONS,
287     NC_("tools-action", "Tool's Opacity: Decrease by 1"), "less", NULL,
288     GIMP_ACTION_SELECT_PREVIOUS, FALSE,
289     NULL },
290   { "tools-opacity-increase", GIMP_ICON_DIALOG_TOOL_OPTIONS,
291     NC_("tools-action", "Tool's Opacity: Increase by 1"), "greater", NULL,
292     GIMP_ACTION_SELECT_NEXT, FALSE,
293     NULL },
294   { "tools-opacity-decrease-skip", GIMP_ICON_DIALOG_TOOL_OPTIONS,
295     NC_("tools-action", "Tool's Opacity: Decrease by 10"), "<primary>less", NULL,
296     GIMP_ACTION_SELECT_SKIP_PREVIOUS, FALSE,
297     NULL },
298   { "tools-opacity-increase-skip", GIMP_ICON_DIALOG_TOOL_OPTIONS,
299     NC_("tools-action", "Tool's Opacity: Increase by 10"), "<primary>greater", NULL,
300     GIMP_ACTION_SELECT_SKIP_NEXT, FALSE,
301     NULL },
302   { "tools-opacity-decrease-percent", GIMP_ICON_DIALOG_TOOL_OPTIONS,
303     NC_("tools-action", "Tool's Opacity: Decrease Relative"), NULL, NULL,
304     GIMP_ACTION_SELECT_PERCENT_PREVIOUS, FALSE,
305     NULL },
306   { "tools-opacity-increase-percent", GIMP_ICON_DIALOG_TOOL_OPTIONS,
307     NC_("tools-action", "Tool's Opacity: Increase Relative"), NULL, NULL,
308     GIMP_ACTION_SELECT_PERCENT_NEXT, FALSE,
309     NULL },
310 };
311 
312 static const GimpEnumActionEntry tools_size_actions[] =
313 {
314   { "tools-size-set", GIMP_ICON_DIALOG_TOOL_OPTIONS,
315     NC_("tools-action", "Tool's Size: Set"), NULL, NULL,
316     GIMP_ACTION_SELECT_SET, TRUE,
317     NULL },
318   { "tools-size-set-to-default", GIMP_ICON_DIALOG_TOOL_OPTIONS,
319     NC_("tools-action", "Tool's Size: Set to Default Value"), "backslash", NULL,
320     GIMP_ACTION_SELECT_SET_TO_DEFAULT, FALSE,
321     NULL },
322   { "tools-size-minimum", GIMP_ICON_DIALOG_TOOL_OPTIONS,
323     NC_("tools-action", "Tool's Size: Minimize"), NULL, NULL,
324     GIMP_ACTION_SELECT_FIRST, FALSE,
325     NULL },
326   { "tools-size-maximum", GIMP_ICON_DIALOG_TOOL_OPTIONS,
327     NC_("tools-action", "Tool's Size: Maximize"), NULL, NULL,
328     GIMP_ACTION_SELECT_LAST, FALSE,
329     NULL },
330   { "tools-size-decrease", GIMP_ICON_DIALOG_TOOL_OPTIONS,
331     NC_("tools-action", "Tool's Size: Decrease by 1"), "bracketleft", NULL,
332     GIMP_ACTION_SELECT_PREVIOUS, FALSE,
333     NULL },
334   { "tools-size-increase", GIMP_ICON_DIALOG_TOOL_OPTIONS,
335     NC_("tools-action", "Tool's Size: Increase by 1"), "bracketright", NULL,
336     GIMP_ACTION_SELECT_NEXT, FALSE,
337     NULL },
338   { "tools-size-decrease-skip", GIMP_ICON_DIALOG_TOOL_OPTIONS,
339     NC_("tools-action", "Tool's Size: Decrease by 10"), "braceleft", NULL,
340     GIMP_ACTION_SELECT_SKIP_PREVIOUS, FALSE,
341     NULL },
342   { "tools-size-increase-skip", GIMP_ICON_DIALOG_TOOL_OPTIONS,
343     NC_("tools-action", "Tool's Size: Increase by 10"), "braceright", NULL,
344     GIMP_ACTION_SELECT_SKIP_NEXT, FALSE,
345     NULL },
346   { "tools-size-decrease-percent", GIMP_ICON_DIALOG_TOOL_OPTIONS,
347     NC_("tools-action", "Tool's Size: Decrease Relative"), NULL, NULL,
348     GIMP_ACTION_SELECT_PERCENT_PREVIOUS, FALSE,
349     NULL },
350   { "tools-size-increase-percent", GIMP_ICON_DIALOG_TOOL_OPTIONS,
351     NC_("tools-action", "Tool's Size: Increase Relative"), NULL, NULL,
352     GIMP_ACTION_SELECT_PERCENT_NEXT, FALSE,
353     NULL },
354 };
355 
356 static const GimpEnumActionEntry tools_aspect_actions[] =
357 {
358   { "tools-aspect-set", GIMP_ICON_DIALOG_TOOL_OPTIONS,
359     NC_("tools-action", "Tool's Aspect Ratio: Set"), NULL, NULL,
360     GIMP_ACTION_SELECT_SET, TRUE,
361     NULL },
362   { "tools-aspect-set-to-default", GIMP_ICON_DIALOG_TOOL_OPTIONS,
363     NC_("tools-action", "Tool's Aspect Ratio: Set To Default Value"), NULL, NULL,
364     GIMP_ACTION_SELECT_SET_TO_DEFAULT, FALSE,
365     NULL },
366   { "tools-aspect-minimum", GIMP_ICON_DIALOG_TOOL_OPTIONS,
367     NC_("tools-action", "Tool's Aspect Ratio: Minimize"), NULL, NULL,
368     GIMP_ACTION_SELECT_FIRST, FALSE,
369     NULL },
370   { "tools-aspect-maximum", GIMP_ICON_DIALOG_TOOL_OPTIONS,
371     NC_("tools-action", "Tool's Aspect Ratio: Maximize"), NULL, NULL,
372     GIMP_ACTION_SELECT_LAST, FALSE,
373     NULL },
374   { "tools-aspect-decrease", GIMP_ICON_DIALOG_TOOL_OPTIONS,
375     NC_("tools-action", "Tool's Aspect Ratio: Decrease by 0.1"), NULL, NULL,
376     GIMP_ACTION_SELECT_PREVIOUS, FALSE,
377     NULL },
378   { "tools-aspect-increase", GIMP_ICON_DIALOG_TOOL_OPTIONS,
379     NC_("tools-action", "Tool's Aspect Ratio: Increase by 0.1"), NULL, NULL,
380     GIMP_ACTION_SELECT_NEXT, FALSE,
381     NULL },
382   { "tools-aspect-decrease-skip", GIMP_ICON_DIALOG_TOOL_OPTIONS,
383     NC_("tools-action", "Tool's Aspect Ratio: Decrease by 1"), NULL, NULL,
384     GIMP_ACTION_SELECT_SKIP_PREVIOUS, FALSE,
385     NULL },
386   { "tools-aspect-increase-skip", GIMP_ICON_DIALOG_TOOL_OPTIONS,
387     NC_("tools-action", "Tool's Aspect Ratio: Increase by 1"), NULL, NULL,
388     GIMP_ACTION_SELECT_SKIP_NEXT, FALSE,
389     NULL },
390   { "tools-aspect-decrease-percent", GIMP_ICON_DIALOG_TOOL_OPTIONS,
391     NC_("tools-action", "Tool's Aspect Ratio: Decrease Relative"), NULL, NULL,
392     GIMP_ACTION_SELECT_PERCENT_PREVIOUS, FALSE,
393     NULL },
394   { "tools-aspect-increase-percent", GIMP_ICON_DIALOG_TOOL_OPTIONS,
395     NC_("tools-action", "Tool's Aspect Ratio: Increase Relative"), NULL, NULL,
396     GIMP_ACTION_SELECT_PERCENT_NEXT, FALSE,
397     NULL },
398 };
399 
400 static const GimpEnumActionEntry tools_angle_actions[] =
401 {
402   { "tools-angle-set", GIMP_ICON_DIALOG_TOOL_OPTIONS,
403     NC_("tools-action", "Tool's Angle: Set"), NULL, NULL,
404     GIMP_ACTION_SELECT_SET, TRUE,
405     NULL },
406   { "tools-angle-set-to-default", GIMP_ICON_DIALOG_TOOL_OPTIONS,
407     NC_("tools-action", "Tool's Angle: Set Angle To Default Value"), NULL, NULL,
408     GIMP_ACTION_SELECT_SET_TO_DEFAULT, FALSE,
409     NULL },
410   { "tools-angle-minimum", GIMP_ICON_DIALOG_TOOL_OPTIONS,
411     NC_("tools-action", "Tool's Angle: Minimize"), NULL, NULL,
412     GIMP_ACTION_SELECT_FIRST, FALSE,
413     NULL },
414   { "tools-angle-maximum", GIMP_ICON_DIALOG_TOOL_OPTIONS,
415     NC_("tools-action", "Tool's Angle: Maximize"), NULL, NULL,
416     GIMP_ACTION_SELECT_LAST, FALSE,
417     NULL },
418   { "tools-angle-decrease", GIMP_ICON_DIALOG_TOOL_OPTIONS,
419     NC_("tools-action", "Tool's Angle: Decrease by 1°"), NULL, NULL,
420     GIMP_ACTION_SELECT_PREVIOUS, FALSE,
421     NULL },
422   { "tools-angle-increase", GIMP_ICON_DIALOG_TOOL_OPTIONS,
423     NC_("tools-action", "Tool's Angle: Increase by 1°"), NULL, NULL,
424     GIMP_ACTION_SELECT_NEXT, FALSE,
425     NULL },
426   { "tools-angle-decrease-skip", GIMP_ICON_DIALOG_TOOL_OPTIONS,
427     NC_("tools-action", "Tool's Angle: Decrease by 15°"), NULL, NULL,
428     GIMP_ACTION_SELECT_SKIP_PREVIOUS, FALSE,
429     NULL },
430   { "tools-angle-increase-skip", GIMP_ICON_DIALOG_TOOL_OPTIONS,
431     NC_("tools-action", "Tool's Angle: Increase by 15°"), NULL, NULL,
432     GIMP_ACTION_SELECT_SKIP_NEXT, FALSE,
433     NULL },
434   { "tools-angle-decrease-percent", GIMP_ICON_DIALOG_TOOL_OPTIONS,
435     NC_("tools-action", "Tool's Angle: Decrease Relative"), NULL, NULL,
436     GIMP_ACTION_SELECT_PERCENT_PREVIOUS, FALSE,
437     NULL },
438   { "tools-angle-increase-percent", GIMP_ICON_DIALOG_TOOL_OPTIONS,
439     NC_("tools-action", "Tool's Angle: Increase Relative"), NULL, NULL,
440     GIMP_ACTION_SELECT_PERCENT_NEXT, FALSE,
441     NULL },
442 };
443 
444 static const GimpEnumActionEntry tools_spacing_actions[] =
445 {
446   { "tools-spacing-set", GIMP_ICON_DIALOG_TOOL_OPTIONS,
447     NC_("tools-action", "Tool's Spacing: Set"), NULL, NULL,
448     GIMP_ACTION_SELECT_SET, TRUE,
449     NULL },
450   { "tools-spacing-set-to-default", GIMP_ICON_DIALOG_TOOL_OPTIONS,
451     NC_("tools-action", "Tool's Spacing: Set To Default Value"), NULL, NULL,
452     GIMP_ACTION_SELECT_SET_TO_DEFAULT, FALSE,
453     NULL },
454   { "tools-spacing-minimum", GIMP_ICON_DIALOG_TOOL_OPTIONS,
455     NC_("tools-action", "Tool's Spacing: Minimize"), NULL, NULL,
456     GIMP_ACTION_SELECT_FIRST, FALSE,
457     NULL },
458   { "tools-spacing-maximum", GIMP_ICON_DIALOG_TOOL_OPTIONS,
459     NC_("tools-action", "Tool's Spacing: Maximize"), NULL, NULL,
460     GIMP_ACTION_SELECT_LAST, FALSE,
461     NULL },
462   { "tools-spacing-decrease", GIMP_ICON_DIALOG_TOOL_OPTIONS,
463     NC_("tools-action", "Tool's Spacing: Decrease by 1"), NULL, NULL,
464     GIMP_ACTION_SELECT_PREVIOUS, FALSE,
465     NULL },
466   { "tools-spacing-increase", GIMP_ICON_DIALOG_TOOL_OPTIONS,
467     NC_("tools-action", "Tool's Spacing: Increase by 1"), NULL, NULL,
468     GIMP_ACTION_SELECT_NEXT, FALSE,
469     NULL },
470   { "tools-spacing-decrease-skip", GIMP_ICON_DIALOG_TOOL_OPTIONS,
471     NC_("tools-action", "Tool's Spacing: Decrease by 10"), NULL, NULL,
472     GIMP_ACTION_SELECT_SKIP_PREVIOUS, FALSE,
473     NULL },
474   { "tools-spacing-increase-skip", GIMP_ICON_DIALOG_TOOL_OPTIONS,
475     NC_("tools-action", "Tool's Spacing: Increase by 10"), NULL, NULL,
476     GIMP_ACTION_SELECT_SKIP_NEXT, FALSE,
477     NULL },
478   { "tools-spacing-decrease-percent", GIMP_ICON_DIALOG_TOOL_OPTIONS,
479     NC_("tools-action", "Tool's Spacing: Decrease Relative"), NULL, NULL,
480     GIMP_ACTION_SELECT_PERCENT_PREVIOUS, FALSE,
481     NULL },
482   { "tools-spacing-increase-percent", GIMP_ICON_DIALOG_TOOL_OPTIONS,
483     NC_("tools-action", "Tool's Spacing: Increase Relative"), NULL, NULL,
484     GIMP_ACTION_SELECT_PERCENT_NEXT, FALSE,
485     NULL },
486 };
487 
488 static const GimpEnumActionEntry tools_hardness_actions[] =
489 {
490   { "tools-hardness-set", GIMP_ICON_DIALOG_TOOL_OPTIONS,
491     NC_("tools-action", "Tool's Hardness: Set"), NULL, NULL,
492     GIMP_ACTION_SELECT_SET, TRUE,
493     NULL },
494   { "tools-hardness-set-to-default", GIMP_ICON_DIALOG_TOOL_OPTIONS,
495     NC_("tools-action", "Tool's Hardness: Set to Default Value"), NULL, NULL,
496     GIMP_ACTION_SELECT_SET_TO_DEFAULT, FALSE,
497     NULL },
498   { "tools-hardness-minimum", GIMP_ICON_DIALOG_TOOL_OPTIONS,
499     NC_("tools-action", "Tool's Hardness: Minimize"), NULL, NULL,
500     GIMP_ACTION_SELECT_FIRST, FALSE,
501     NULL },
502   { "tools-hardness-maximum", GIMP_ICON_DIALOG_TOOL_OPTIONS,
503     NC_("tools-action", "Tool's Hardness: Maximize"), NULL, NULL,
504     GIMP_ACTION_SELECT_LAST, FALSE,
505     NULL },
506   { "tools-hardness-decrease", GIMP_ICON_DIALOG_TOOL_OPTIONS,
507     NC_("tools-action", "Tool's Hardness: Decrease by 1"), NULL, NULL,
508     GIMP_ACTION_SELECT_PREVIOUS, FALSE,
509     NULL },
510   { "tools-hardness-increase", GIMP_ICON_DIALOG_TOOL_OPTIONS,
511     NC_("tools-action", "Tool's Hardness: Increase by 1"), NULL, NULL,
512     GIMP_ACTION_SELECT_NEXT, FALSE,
513     NULL },
514   { "tools-hardness-decrease-skip", GIMP_ICON_DIALOG_TOOL_OPTIONS,
515     NC_("tools-action", "Tool's Hardness: Decrease by 10"), NULL, NULL,
516     GIMP_ACTION_SELECT_SKIP_PREVIOUS, FALSE,
517     NULL },
518   { "tools-hardness-increase-skip", GIMP_ICON_DIALOG_TOOL_OPTIONS,
519     NC_("tools-action", "Tool's Hardness: Increase by 10"), NULL, NULL,
520     GIMP_ACTION_SELECT_SKIP_NEXT, FALSE,
521     NULL },
522   { "tools-hardness-decrease-percent", GIMP_ICON_DIALOG_TOOL_OPTIONS,
523     NC_("tools-action", "Tool's Hardness: Decrease Relative"), NULL, NULL,
524     GIMP_ACTION_SELECT_PERCENT_PREVIOUS, FALSE,
525     NULL },
526   { "tools-hardness-increase-percent", GIMP_ICON_DIALOG_TOOL_OPTIONS,
527     NC_("tools-action", "Tool's Hardness: Increase Relative"), NULL, NULL,
528     GIMP_ACTION_SELECT_PERCENT_NEXT, FALSE,
529     NULL },
530 };
531 
532 static const GimpEnumActionEntry tools_force_actions[] =
533 {
534   { "tools-force-set", GIMP_ICON_DIALOG_TOOL_OPTIONS,
535     NC_("tools-action", "Tool's Force: Set"), NULL, NULL,
536     GIMP_ACTION_SELECT_SET, TRUE,
537     NULL },
538   { "tools-force-set-to-default", GIMP_ICON_DIALOG_TOOL_OPTIONS,
539     NC_("tools-action", "Tool's Force: Set to Default Value"), NULL, NULL,
540     GIMP_ACTION_SELECT_SET_TO_DEFAULT, FALSE,
541     NULL },
542   { "tools-force-minimum", GIMP_ICON_DIALOG_TOOL_OPTIONS,
543     NC_("tools-action", "Tool's Force: Minimize"), NULL, NULL,
544     GIMP_ACTION_SELECT_FIRST, FALSE,
545     NULL },
546   { "tools-force-maximum", GIMP_ICON_DIALOG_TOOL_OPTIONS,
547     NC_("tools-action", "Tool's Force: Maximize"), NULL, NULL,
548     GIMP_ACTION_SELECT_LAST, FALSE,
549     NULL },
550   { "tools-force-decrease", GIMP_ICON_DIALOG_TOOL_OPTIONS,
551     NC_("tools-action", "Tool's Force: Decrease by 1"), NULL, NULL,
552     GIMP_ACTION_SELECT_PREVIOUS, FALSE,
553     NULL },
554   { "tools-force-increase", GIMP_ICON_DIALOG_TOOL_OPTIONS,
555     NC_("tools-action", "Tool's Force: Increase by 1"), NULL, NULL,
556     GIMP_ACTION_SELECT_NEXT, FALSE,
557     NULL },
558   { "tools-force-decrease-skip", GIMP_ICON_DIALOG_TOOL_OPTIONS,
559     NC_("tools-action", "Tool's Force: Decrease by 10"), NULL, NULL,
560     GIMP_ACTION_SELECT_SKIP_PREVIOUS, FALSE,
561     NULL },
562   { "tools-force-increase-skip", GIMP_ICON_DIALOG_TOOL_OPTIONS,
563     NC_("tools-action", "Tool's Force: Increase by 10"), NULL, NULL,
564     GIMP_ACTION_SELECT_SKIP_NEXT, FALSE,
565     NULL },
566   { "tools-force-decrease-percent", GIMP_ICON_DIALOG_TOOL_OPTIONS,
567     NC_("tools-action", "Tool's Force: Decrease Relative"), NULL, NULL,
568     GIMP_ACTION_SELECT_PERCENT_PREVIOUS, FALSE,
569     NULL },
570   { "tools-force-increase-percent", GIMP_ICON_DIALOG_TOOL_OPTIONS,
571     NC_("tools-action", "Tool's Force: Increase Relative"), NULL, NULL,
572     GIMP_ACTION_SELECT_PERCENT_NEXT, FALSE,
573     NULL },
574 };
575 
576 static const GimpEnumActionEntry tools_object_1_actions[] =
577 {
578   { "tools-object-1-set", GIMP_ICON_DIALOG_TOOL_OPTIONS,
579     "Select Object 1 by Index", NULL, NULL,
580     GIMP_ACTION_SELECT_SET, TRUE,
581     NULL },
582   { "tools-object-1-first", GIMP_ICON_DIALOG_TOOL_OPTIONS,
583     "First Object 1", NULL, NULL,
584     GIMP_ACTION_SELECT_FIRST, FALSE,
585     NULL },
586   { "tools-object-1-last", GIMP_ICON_DIALOG_TOOL_OPTIONS,
587     "Last Object 1", NULL, NULL,
588     GIMP_ACTION_SELECT_LAST, FALSE,
589     NULL },
590   { "tools-object-1-previous", GIMP_ICON_DIALOG_TOOL_OPTIONS,
591     "Previous Object 1", NULL, NULL,
592     GIMP_ACTION_SELECT_PREVIOUS, FALSE,
593     NULL },
594   { "tools-object-1-next", GIMP_ICON_DIALOG_TOOL_OPTIONS,
595     "Next Object 1", NULL, NULL,
596     GIMP_ACTION_SELECT_NEXT, FALSE,
597     NULL }
598 };
599 
600 static const GimpEnumActionEntry tools_object_2_actions[] =
601 {
602   { "tools-object-2-set", GIMP_ICON_DIALOG_TOOL_OPTIONS,
603     "Select Object 2 by Index", NULL, NULL,
604     GIMP_ACTION_SELECT_SET, TRUE,
605     NULL },
606   { "tools-object-2-first", GIMP_ICON_DIALOG_TOOL_OPTIONS,
607     "First Object 2", NULL, NULL,
608     GIMP_ACTION_SELECT_FIRST, FALSE,
609     NULL },
610   { "tools-object-2-last", GIMP_ICON_DIALOG_TOOL_OPTIONS,
611     "Last Object 2", NULL, NULL,
612     GIMP_ACTION_SELECT_LAST, FALSE,
613     NULL },
614   { "tools-object-2-previous", GIMP_ICON_DIALOG_TOOL_OPTIONS,
615     "Previous Object 2", NULL, NULL,
616     GIMP_ACTION_SELECT_PREVIOUS, FALSE,
617     NULL },
618   { "tools-object-2-next", GIMP_ICON_DIALOG_TOOL_OPTIONS,
619     "Next Object 2", NULL, NULL,
620     GIMP_ACTION_SELECT_NEXT, FALSE,
621     NULL }
622 };
623 
624 
625 void
tools_actions_setup(GimpActionGroup * group)626 tools_actions_setup (GimpActionGroup *group)
627 {
628   GimpAction *action;
629   GList      *list;
630 
631   gimp_action_group_add_actions (group, "tools-action",
632                                  tools_actions,
633                                  G_N_ELEMENTS (tools_actions));
634 
635   gimp_action_group_add_string_actions (group, "tools-action",
636                                         tools_alternative_actions,
637                                         G_N_ELEMENTS (tools_alternative_actions),
638                                         tools_select_cmd_callback);
639 
640   action = gimp_action_group_get_action (group,
641                                          "tools-by-color-select-short");
642   gimp_action_set_accel_path (action, "<Actions>/tools/tools-by-color-select");
643 
644   gimp_action_group_add_enum_actions (group, NULL,
645                                       tools_color_average_radius_actions,
646                                       G_N_ELEMENTS (tools_color_average_radius_actions),
647                                       tools_color_average_radius_cmd_callback);
648 
649   gimp_action_group_add_enum_actions (group, NULL,
650                                       tools_paintbrush_size_actions,
651                                       G_N_ELEMENTS (tools_paintbrush_size_actions),
652                                       tools_paintbrush_size_cmd_callback);
653   gimp_action_group_add_enum_actions (group, NULL,
654                                       tools_paintbrush_aspect_ratio_actions,
655                                       G_N_ELEMENTS (tools_paintbrush_aspect_ratio_actions),
656                                       tools_paintbrush_aspect_ratio_cmd_callback);
657   gimp_action_group_add_enum_actions (group, NULL,
658                                       tools_paintbrush_angle_actions,
659                                       G_N_ELEMENTS (tools_paintbrush_angle_actions),
660                                       tools_paintbrush_angle_cmd_callback);
661   gimp_action_group_add_enum_actions (group, NULL,
662                                       tools_paintbrush_spacing_actions,
663                                       G_N_ELEMENTS (tools_paintbrush_spacing_actions),
664                                       tools_paintbrush_spacing_cmd_callback);
665   gimp_action_group_add_enum_actions (group, NULL,
666                                       tools_paintbrush_hardness_actions,
667                                       G_N_ELEMENTS (tools_paintbrush_hardness_actions),
668                                       tools_paintbrush_hardness_cmd_callback);
669   gimp_action_group_add_enum_actions (group, NULL,
670                                       tools_paintbrush_force_actions,
671                                       G_N_ELEMENTS (tools_paintbrush_force_actions),
672                                       tools_paintbrush_force_cmd_callback);
673 
674   gimp_action_group_add_enum_actions (group, NULL,
675                                       tools_ink_blob_size_actions,
676                                       G_N_ELEMENTS (tools_ink_blob_size_actions),
677                                       tools_ink_blob_size_cmd_callback);
678   gimp_action_group_add_enum_actions (group, NULL,
679                                       tools_ink_blob_aspect_actions,
680                                       G_N_ELEMENTS (tools_ink_blob_aspect_actions),
681                                       tools_ink_blob_aspect_cmd_callback);
682   gimp_action_group_add_enum_actions (group, NULL,
683                                       tools_ink_blob_angle_actions,
684                                       G_N_ELEMENTS (tools_ink_blob_angle_actions),
685                                       tools_ink_blob_angle_cmd_callback);
686 
687   gimp_action_group_add_enum_actions (group, "tools-action",
688                                       tools_airbrush_rate_actions,
689                                       G_N_ELEMENTS (tools_airbrush_rate_actions),
690                                       tools_airbrush_rate_cmd_callback);
691   gimp_action_group_add_enum_actions (group, "tools-action",
692                                       tools_airbrush_flow_actions,
693                                       G_N_ELEMENTS (tools_airbrush_flow_actions),
694                                       tools_airbrush_flow_cmd_callback);
695 
696   gimp_action_group_add_enum_actions (group, NULL,
697                                       tools_mybrush_radius_actions,
698                                       G_N_ELEMENTS (tools_mybrush_radius_actions),
699                                       tools_mybrush_radius_cmd_callback);
700   gimp_action_group_add_enum_actions (group, NULL,
701                                       tools_mybrush_hardness_actions,
702                                       G_N_ELEMENTS (tools_mybrush_hardness_actions),
703                                       tools_mybrush_hardness_cmd_callback);
704 
705   gimp_action_group_add_enum_actions (group, NULL,
706                                       tools_foreground_select_brush_size_actions,
707                                       G_N_ELEMENTS (tools_foreground_select_brush_size_actions),
708                                       tools_fg_select_brush_size_cmd_callback);
709 
710   gimp_action_group_add_enum_actions (group, NULL,
711                                       tools_transform_preview_opacity_actions,
712                                       G_N_ELEMENTS (tools_transform_preview_opacity_actions),
713                                       tools_transform_preview_opacity_cmd_callback);
714 
715   gimp_action_group_add_enum_actions (group, NULL,
716                                       tools_warp_effect_size_actions,
717                                       G_N_ELEMENTS (tools_warp_effect_size_actions),
718                                       tools_warp_effect_size_cmd_callback);
719   gimp_action_group_add_enum_actions (group, NULL,
720                                       tools_warp_effect_hardness_actions,
721                                       G_N_ELEMENTS (tools_warp_effect_hardness_actions),
722                                       tools_warp_effect_hardness_cmd_callback);
723 
724   gimp_action_group_add_enum_actions (group, "tools-action",
725                                       tools_opacity_actions,
726                                       G_N_ELEMENTS (tools_opacity_actions),
727                                       tools_opacity_cmd_callback);
728   gimp_action_group_add_enum_actions (group, "tools-action",
729                                       tools_size_actions,
730                                       G_N_ELEMENTS (tools_size_actions),
731                                       tools_size_cmd_callback);
732   gimp_action_group_add_enum_actions (group, "tools-action",
733                                       tools_aspect_actions,
734                                       G_N_ELEMENTS (tools_aspect_actions),
735                                       tools_aspect_cmd_callback);
736   gimp_action_group_add_enum_actions (group, "tools-action",
737                                       tools_angle_actions,
738                                       G_N_ELEMENTS (tools_angle_actions),
739                                       tools_angle_cmd_callback);
740   gimp_action_group_add_enum_actions (group, "tools-action",
741                                       tools_spacing_actions,
742                                       G_N_ELEMENTS (tools_spacing_actions),
743                                       tools_spacing_cmd_callback);
744   gimp_action_group_add_enum_actions (group, "tools-action",
745                                       tools_hardness_actions,
746                                       G_N_ELEMENTS (tools_hardness_actions),
747                                       tools_hardness_cmd_callback);
748   gimp_action_group_add_enum_actions (group, "tools-action",
749                                       tools_force_actions,
750                                       G_N_ELEMENTS (tools_force_actions),
751                                       tools_force_cmd_callback);
752 
753   gimp_action_group_add_enum_actions (group, NULL,
754                                       tools_object_1_actions,
755                                       G_N_ELEMENTS (tools_object_1_actions),
756                                       tools_object_1_cmd_callback);
757   gimp_action_group_add_enum_actions (group, NULL,
758                                       tools_object_2_actions,
759                                       G_N_ELEMENTS (tools_object_2_actions),
760                                       tools_object_2_cmd_callback);
761 
762   for (list = gimp_get_tool_info_iter (group->gimp);
763        list;
764        list = g_list_next (list))
765     {
766       GimpToolInfo *tool_info = list->data;
767 
768       if (tool_info->menu_label)
769         {
770           GimpStringActionEntry  entry;
771           gchar                 *name;
772           const gchar           *icon_name;
773           const gchar           *identifier;
774 
775           name       = gimp_tool_info_get_action_name (tool_info);
776           icon_name  = gimp_viewable_get_icon_name (GIMP_VIEWABLE (tool_info));
777           identifier = gimp_object_get_name (tool_info);
778 
779           entry.name        = name;
780           entry.icon_name   = icon_name;
781           entry.label       = tool_info->menu_label;
782           entry.accelerator = tool_info->menu_accel;
783           entry.tooltip     = tool_info->tooltip;
784           entry.help_id     = tool_info->help_id;
785           entry.value       = identifier;
786 
787           gimp_action_group_add_string_actions (group, NULL,
788                                                 &entry, 1,
789                                                 tools_select_cmd_callback);
790 
791           g_free (name);
792         }
793     }
794 }
795 
796 void
tools_actions_update(GimpActionGroup * group,gpointer data)797 tools_actions_update (GimpActionGroup *group,
798                       gpointer         data)
799 {
800 }
801