123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- /* ButtonEditor.cpp
- *
- * Copyright (C) 1996-2011,2013,2014,2015,2017 Paul Boersma
- *
- * This code is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This code is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this work. If not, see <http://www.gnu.org/licenses/>.
- */
- #include "ButtonEditor.h"
- #include "praatP.h"
- #include "praat_script.h"
- #include "EditorM.h"
- #include "machine.h"
- Thing_implement (ButtonEditor, HyperPage, 0);
- #if defined (_WIN32)
- #define BUTTON_WIDTH 72
- #elif defined (macintosh)
- #define BUTTON_WIDTH 72
- #else
- #define BUTTON_WIDTH 96
- #endif
- static void drawMenuCommand (ButtonEditor me, Praat_Command cmd, integer i) {
- static MelderString text { };
- bool isAdded = cmd -> uniqueID != 0 || !! cmd -> script;
- bool isHidden = cmd -> hidden;
- bool isToggled = cmd -> toggled;
- conststring32 clickText = isHidden ? (isToggled ? (isAdded ? U"REMOVED" : U"HIDDEN") : U"hidden") :
- (isToggled ? U"SHOWN" : (isAdded ? (cmd -> uniqueID ? U"ADDED" : U"START-UP") : U"shown"));
- MelderString_empty (& text);
- if (cmd -> unhidable) {
- MelderString_append (& text, U"#unhidable ");
- } else {
- MelderString_append (& text, U"@@m", i, U"|", clickText, U"@ ");
- }
- MelderString_append (& text, cmd -> window.get(), U": ");
- if (cmd -> menu) {
- MelderString_append (& text, cmd -> menu.get(), U": ");
- }
- if (cmd -> title) {
- if (cmd -> executable) {
- MelderString_append (& text, U"@@p", i, U"|", cmd -> title.get(), U"@");
- } else {
- MelderString_append (& text, cmd -> title.get());
- }
- } else {
- MelderString_append (& text, U"---------");
- }
- if (cmd -> after) {
- MelderString_append (& text, U", %%%%after \"", cmd -> after.get(), U"\"%%");
- }
- if (cmd -> script) {
- MelderString_append (& text, U", script \"", Melder_peekExpandBackslashes (cmd -> script.get()), U"\"");
- }
- HyperPage_any (me, text.string, my p_font, my p_fontSize, cmd -> callback ? 0 : Graphics_ITALIC, 0.0,
- cmd -> depth * 0.3, 0.4, 0.0, 0.0, 0);
- }
- static void drawAction (ButtonEditor me, Praat_Command cmd, integer i) {
- static MelderString text { };
- bool isAdded = cmd -> uniqueID != 0 || !! cmd -> script;
- bool isHidden = cmd -> hidden, isToggled = cmd -> toggled;
- conststring32 clickText = isHidden ? (isToggled ? (isAdded ? U"REMOVED" : U"HIDDEN") : U"hidden") :
- (isToggled ? U"SHOWN" : (isAdded ? (cmd -> uniqueID ? U"ADDED" : U"START-UP") : U"shown"));
- int n1 = cmd -> n1;
- MelderString_empty (& text);
- if (cmd -> class4) {
- MelderString_append (& text, U"#unhidable ");
- } else {
- MelderString_append (& text, U"@@a", i, U"|", clickText, U"@ ");
- }
- MelderString_append (& text, cmd -> class1 -> className);
- if (n1) {
- MelderString_append (& text, U" (", n1, U")");
- }
- if (cmd -> class2) {
- int n2 = cmd -> n2;
- MelderString_append (& text, U" & ", cmd -> class2 -> className);
- if (n2) {
- MelderString_append (& text, U" (", n2, U")");
- }
- }
- if (cmd -> class3) {
- int n3 = cmd -> n3;
- MelderString_append (& text, U" & ", cmd -> class3 -> className);
- if (n3) {
- MelderString_append (& text, U" (", n3, U")");
- }
- }
- if (cmd -> class4) {
- int n4 = cmd -> n4;
- MelderString_append (& text, U" & ", cmd -> class4 -> className);
- if (n4) {
- MelderString_append (& text, U" (", n4, U")");
- }
- }
- MelderString_append (& text, U": ");
- if (cmd -> title) {
- if (cmd -> executable) {
- MelderString_append (& text, U"@@e", i, U"|", cmd -> title.get(), U"@");
- } else {
- MelderString_append (& text, cmd -> title.get());
- }
- } else {
- MelderString_append (& text, U"---------");
- }
- if (cmd -> after) {
- MelderString_append (& text, U", %%%%after \"", cmd -> after.get(), U"\"%%");
- }
- if (cmd -> script) {
- MelderString_append (& text, U", script \"", Melder_peekExpandBackslashes (cmd -> script.get()), U"\"");
- }
- HyperPage_any (me, text.string, my p_font, my p_fontSize, cmd -> callback ? 0 : Graphics_ITALIC, 0.0,
- cmd -> depth * 0.3, 0.4, 0.0, 0.0, 0);
- }
- void structButtonEditor :: v_draw () {
- Graphics_clearWs (our graphics.get());
- switch (show) {
- case 1:
- for (integer i = 1, n = praat_getNumberOfMenuCommands (); i <= n; i ++) {
- Praat_Command cmd = praat_getMenuCommand (i);
- if (str32equ (cmd -> window.get(), U"Objects"))
- drawMenuCommand (this, praat_getMenuCommand (i), i);
- }
- break;
- case 2:
- for (integer i = 1, n = praat_getNumberOfMenuCommands (); i <= n; i ++) {
- Praat_Command cmd = praat_getMenuCommand (i);
- if (str32equ (cmd -> window.get(), U"Picture"))
- drawMenuCommand (this, praat_getMenuCommand (i), i);
- }
- break;
- case 3:
- for (integer i = 1, n = praat_getNumberOfMenuCommands (); i <= n; i ++) {
- Praat_Command cmd = praat_getMenuCommand (i);
- if (! str32equ (cmd -> window.get(), U"Objects") && ! str32equ (cmd -> window.get(), U"Picture"))
- drawMenuCommand (this, praat_getMenuCommand (i), i);
- }
- break;
- case 4:
- for (integer i = 1, n = praat_getNumberOfActions (); i <= n; i ++) {
- Praat_Command cmd = praat_getAction (i);
- conststring32 klas = cmd -> class1 -> className;
- if (str32cmp (klas, U"N") < 0)
- drawAction (this, praat_getAction (i), i);
- }
- break;
- case 5:
- for (integer i = 1, n = praat_getNumberOfActions (); i <= n; i ++) {
- Praat_Command cmd = praat_getAction (i);
- conststring32 klas = cmd -> class1 -> className;
- if (str32cmp (klas, U"N") >= 0)
- drawAction (this, praat_getAction (i), i);
- }
- break;
- }
- }
- int structButtonEditor :: v_goToPage (conststring32 title) {
- if (! title || ! title [0]) return 0;
- if (str32equ (title, U"Buttons")) return 1;
- switch (title [0]) {
- case 'a': { // toggle visibility of action
- integer i = Melder_atoi (& title [1]);
- Praat_Command action = praat_getAction (i);
- if (! action) return 0;
- if (action -> hidden)
- praat_showAction (action -> class1, action -> class2, action -> class3, action -> title.get());
- else
- praat_hideAction (action -> class1, action -> class2, action -> class3, action -> title.get());
- } break;
- case 'm': { // toggle visibility of menu command
- integer i = Melder_atoi (& title [1]);
- Praat_Command menuCommand = praat_getMenuCommand (i);
- if (! menuCommand) return 0;
- if (menuCommand -> hidden)
- praat_showMenuCommand (menuCommand -> window.get(), menuCommand -> menu.get(), menuCommand -> title.get());
- else
- praat_hideMenuCommand (menuCommand -> window.get(), menuCommand -> menu.get(), menuCommand -> title.get());
- } break;
- case 'e': { // execute action
- integer i = Melder_atoi (& title [1]);
- Praat_Command action = praat_getAction (i);
- if (! action || ! action -> callback) return 0;
- if (action -> title) {
- UiHistory_write (U"\n");
- UiHistory_write_colonize (action -> title.get());
- }
- if (action -> script) {
- try {
- DO_RunTheScriptFromAnyAddedMenuCommand (nullptr, 0, nullptr, action -> script.get(), nullptr, nullptr, false, nullptr);
- } catch (MelderError) {
- Melder_flushError (U"Command not executed.");
- }
- } else {
- try {
- action -> callback (nullptr, 0, nullptr, nullptr, nullptr, nullptr, false, nullptr);
- } catch (MelderError) {
- Melder_flushError (U"Command not executed.");
- }
- }
- praat_updateSelection ();
- } break;
- case 'p': { // perform menu command
- integer i = Melder_atoi (& title [1]);
- Praat_Command menuCommand = praat_getMenuCommand (i);
- if (! menuCommand || ! menuCommand -> callback) return 0;
- if (menuCommand -> title) {
- UiHistory_write (U"\n");
- UiHistory_write_colonize (menuCommand -> title.get());
- }
- if (menuCommand -> script) {
- try {
- DO_RunTheScriptFromAnyAddedMenuCommand (nullptr, 0, nullptr, menuCommand -> script.get(), nullptr, nullptr, false, nullptr);
- } catch (MelderError) {
- Melder_flushError (U"Command not executed.");
- }
- } else {
- try {
- menuCommand -> callback (nullptr, 0, nullptr, nullptr, nullptr, nullptr, false, nullptr);
- } catch (MelderError) {
- Melder_flushError (U"Command not executed.");
- }
- }
- praat_updateSelection ();
- } break;
- default: break;
- }
- return 0;
- }
- static void which (ButtonEditor me, int show) {
- my show = show;
- GuiRadioButton_set (show == 1 ? my button1 : show == 2 ? my button2 : show == 3 ? my button3 : show == 4 ? my button4 : my button5);
- HyperPage_goToPage (me, U"Buttons");
- }
- static void gui_radiobutton_cb_objects (ButtonEditor me, GuiRadioButtonEvent /* event */) { which (me, 1); }
- static void gui_radiobutton_cb_picture (ButtonEditor me, GuiRadioButtonEvent /* event */) { which (me, 2); }
- static void gui_radiobutton_cb_editors (ButtonEditor me, GuiRadioButtonEvent /* event */) { which (me, 3); }
- static void gui_radiobutton_cb_actionsAM (ButtonEditor me, GuiRadioButtonEvent /* event */) { which (me, 4); }
- static void gui_radiobutton_cb_actionsNZ (ButtonEditor me, GuiRadioButtonEvent /* event */) { which (me, 5); }
- void structButtonEditor :: v_createChildren () {
- ButtonEditor_Parent :: v_createChildren ();
- int x = 3, y = Machine_getMenuBarHeight () + 4;
- GuiRadioGroup_begin ();
- button1 = GuiRadioButton_createShown (our windowForm, x, x + BUTTON_WIDTH, y, y + Gui_RADIOBUTTON_HEIGHT,
- U"Objects", gui_radiobutton_cb_objects, this, GuiRadioButton_SET);
- x += BUTTON_WIDTH + 5;
- button2 = GuiRadioButton_createShown (our windowForm, x, x + BUTTON_WIDTH, y, y + Gui_RADIOBUTTON_HEIGHT,
- U"Picture", gui_radiobutton_cb_picture, this, 0);
- x += BUTTON_WIDTH + 5;
- button3 = GuiRadioButton_createShown (our windowForm, x, x + BUTTON_WIDTH, y, y + Gui_RADIOBUTTON_HEIGHT,
- U"Editors", gui_radiobutton_cb_editors, this, 0);
- x += BUTTON_WIDTH + 5;
- button4 = GuiRadioButton_createShown (our windowForm, x, x + BUTTON_WIDTH + 30, y, y + Gui_RADIOBUTTON_HEIGHT,
- U"Actions A-M", gui_radiobutton_cb_actionsAM, this, 0);
- x += BUTTON_WIDTH + 35;
- button5 = GuiRadioButton_createShown (our windowForm, x, x + BUTTON_WIDTH + 30, y, y + Gui_RADIOBUTTON_HEIGHT,
- U"Actions N-Z", gui_radiobutton_cb_actionsNZ, this, 0);
- GuiRadioGroup_end ();
- }
- static void menu_cb_ButtonEditorHelp (ButtonEditor /* me */, EDITOR_ARGS_DIRECT) { Melder_help (U"ButtonEditor"); }
- void structButtonEditor :: v_createHelpMenuItems (EditorMenu menu) {
- ButtonEditor_Parent :: v_createHelpMenuItems (menu);
- EditorMenu_addCommand (menu, U"ButtonEditor help", '?', menu_cb_ButtonEditorHelp);
- }
- autoButtonEditor ButtonEditor_create () {
- try {
- autoButtonEditor me = Thing_new (ButtonEditor);
- HyperPage_init (me.get(), U"Buttons", nullptr);
- which (me.get(), 1);
- return me;
- } catch (MelderError) {
- Melder_throw (U"Buttons window not created.");
- }
- }
- /* End of file ButtonEditor.cpp */
|