void praat_showLogo (bool autoPopDown) { #if gtk static const gchar *authors [3] = { "Paul Boersma", "David Weenink", nullptr }; GuiObject dialog = gtk_about_dialog_new (); #define xstr(s) str(s) #define str(s) #s gtk_about_dialog_set_version (GTK_ABOUT_DIALOG (dialog), xstr (PRAAT_VERSION_STR)); gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG (dialog), "Copyright © 1992–" xstr(PRAAT_YEAR) " by Paul Boersma and David Weenink"); gtk_about_dialog_set_license (GTK_ABOUT_DIALOG (dialog), "GPL"); gtk_about_dialog_set_website (GTK_ABOUT_DIALOG (dialog), "http://www.praat.org"); //gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG (dialog), authors); g_signal_connect (GTK_DIALOG (dialog), "response", G_CALLBACK (gtk_widget_destroy), nullptr); gtk_dialog_run (GTK_DIALOG (dialog)); #else if (theCurrentPraatApplication -> batch || ! theLogo.draw) return; if (! theLogo.dia) { int width = theLogo.width_mm / 25.4 * Gui_getResolution (nullptr); int height = theLogo.height_mm / 25.4 * Gui_getResolution (nullptr); theLogo.dia = GuiDialog_create (theCurrentPraatApplication -> topShell, 100, 100, width, height, U"About", gui_cb_goAway, nullptr, 0); theLogo.form = theLogo.dia; theLogo.drawingArea = GuiDrawingArea_createShown (theLogo.form, 0, width, 0, height, gui_drawingarea_cb_expose, gui_drawingarea_cb_click, nullptr, nullptr, nullptr, 0); } GuiThing_show (theLogo.form); GuiThing_show (theLogo.dia); #if motif if (autoPopDown) GuiAddTimeOut (2000, logo_timeOut, (XtPointer) nullptr); #endif #endif }
static void do_find (TextEditor me) { if (! theFindString) return; // e.g. when the user does "Find again" before having done any "Find" long left, right; autostring32 text = GuiText_getStringAndSelectionPosition (my textWidget, & left, & right); char32 *location = str32str (& text [right], theFindString); if (location) { long index = location - text.peek(); GuiText_setSelection (my textWidget, index, index + str32len (theFindString)); GuiText_scrollToSelection (my textWidget); #ifdef _WIN32 GuiThing_show (my d_windowForm); #endif } else { /* Try from the start of the document. */ location = str32str (text.peek(), theFindString); if (location) { long index = location - text.peek(); GuiText_setSelection (my textWidget, index, index + str32len (theFindString)); GuiText_scrollToSelection (my textWidget); #ifdef _WIN32 GuiThing_show (my d_windowForm); #endif } else { Melder_beep (); } } }
void structTextEditor :: v_goAway () { if (v_fileBased () && dirty) { if (! dirtyCloseDialog) { int buttonWidth = 120, buttonSpacing = 20; dirtyCloseDialog = GuiDialog_create (d_windowForm, 150, 70, Gui_LEFT_DIALOG_SPACING + 3 * buttonWidth + 2 * buttonSpacing + Gui_RIGHT_DIALOG_SPACING, Gui_TOP_DIALOG_SPACING + Gui_TEXTFIELD_HEIGHT + Gui_VERTICAL_DIALOG_SPACING_SAME + 2 * Gui_BOTTOM_DIALOG_SPACING + Gui_PUSHBUTTON_HEIGHT, U"Text changed", nullptr, nullptr, GuiDialog_MODAL); GuiLabel_createShown (dirtyCloseDialog, Gui_LEFT_DIALOG_SPACING, - Gui_RIGHT_DIALOG_SPACING, Gui_TOP_DIALOG_SPACING, Gui_TOP_DIALOG_SPACING + Gui_LABEL_HEIGHT, U"The text has changed! Save changes?", 0); int x = Gui_LEFT_DIALOG_SPACING, y = - Gui_BOTTOM_DIALOG_SPACING; GuiButton_createShown (dirtyCloseDialog, x, x + buttonWidth, y - Gui_PUSHBUTTON_HEIGHT, y, U"Discard & Close", gui_button_cb_discardAndClose, this, 0); x += buttonWidth + buttonSpacing; GuiButton_createShown (dirtyCloseDialog, x, x + buttonWidth, y - Gui_PUSHBUTTON_HEIGHT, y, U"Cancel", gui_button_cb_cancelClose, this, 0); x += buttonWidth + buttonSpacing; GuiButton_createShown (dirtyCloseDialog, x, x + buttonWidth, y - Gui_PUSHBUTTON_HEIGHT, y, U"Save & Close", gui_button_cb_saveAndClose, this, 0); } GuiThing_show (dirtyCloseDialog); } else { closeDocument (this); } }
static void menu_cb_new (TextEditor me, EDITOR_ARGS_CMD) { if (my v_fileBased () && my dirty) { if (! my dirtyNewDialog) { int buttonWidth = 120, buttonSpacing = 20; my dirtyNewDialog = GuiDialog_create (my d_windowForm, 150, 70, Gui_LEFT_DIALOG_SPACING + 3 * buttonWidth + 2 * buttonSpacing + Gui_RIGHT_DIALOG_SPACING, Gui_TOP_DIALOG_SPACING + Gui_TEXTFIELD_HEIGHT + Gui_VERTICAL_DIALOG_SPACING_SAME + 2 * Gui_BOTTOM_DIALOG_SPACING + Gui_PUSHBUTTON_HEIGHT, U"Text changed", nullptr, nullptr, GuiDialog_MODAL); GuiLabel_createShown (my dirtyNewDialog, Gui_LEFT_DIALOG_SPACING, - Gui_RIGHT_DIALOG_SPACING, Gui_TOP_DIALOG_SPACING, Gui_TOP_DIALOG_SPACING + Gui_LABEL_HEIGHT, U"The text has changed! Save changes?", 0); int x = Gui_LEFT_DIALOG_SPACING, y = - Gui_BOTTOM_DIALOG_SPACING; GuiButton_createShown (my dirtyNewDialog, x, x + buttonWidth, y - Gui_PUSHBUTTON_HEIGHT, y, U"Discard & New", gui_button_cb_discardAndNew, cmd, 0); x += buttonWidth + buttonSpacing; GuiButton_createShown (my dirtyNewDialog, x, x + buttonWidth, y - Gui_PUSHBUTTON_HEIGHT, y, U"Cancel", gui_button_cb_cancelNew, cmd, 0); x += buttonWidth + buttonSpacing; GuiButton_createShown (my dirtyNewDialog, x, x + buttonWidth, y - Gui_PUSHBUTTON_HEIGHT, y, U"Save & New", gui_button_cb_saveAndNew, cmd, 0); } GuiThing_show (my dirtyNewDialog); } else { newDocument (me); } }
void structStringsEditor :: v_createChildren () { list = GuiList_create (d_windowForm, 1, 0, Machine_getMenuBarHeight (), -70, true, nullptr); GuiList_setDoubleClickCallback (list, gui_list_cb_doubleClick, this); GuiThing_show (list); text = GuiText_createShown (d_windowForm, 0, 0, -40 - Gui_TEXTFIELD_HEIGHT, -40, 0); GuiButton_createShown (d_windowForm, 10, 100, -10 - Gui_PUSHBUTTON_HEIGHT, -10, U"Insert", gui_button_cb_insert, this, GuiButton_DEFAULT); GuiButton_createShown (d_windowForm, 110, 200, -10 - Gui_PUSHBUTTON_HEIGHT, -10, U"Append", gui_button_cb_append, this, 0); GuiButton_createShown (d_windowForm, 210, 300, -10 - Gui_PUSHBUTTON_HEIGHT, -10, U"Replace", gui_button_cb_replace, this, 0); GuiButton_createShown (d_windowForm, 310, 400, -10 - Gui_PUSHBUTTON_HEIGHT, -10, U"Remove", gui_button_cb_remove, this, 0); }
static void do_replace (TextEditor me) { if (! theReplaceString) return; // e.g. when the user does "Replace again" before having done any "Replace" autostring32 selection = GuiText_getSelection (my textWidget); if (! Melder_equ (selection.peek(), theFindString)) { do_find (me); return; } long left, right; autostring32 text = GuiText_getStringAndSelectionPosition (my textWidget, & left, & right); GuiText_replace (my textWidget, left, right, theReplaceString); GuiText_setSelection (my textWidget, left, left + str32len (theReplaceString)); GuiText_scrollToSelection (my textWidget); #ifdef _WIN32 GuiThing_show (my d_windowForm); #endif }
// origin is at top left. void structCategoriesEditor :: v_createChildren () { constexpr int menuBarOffset { 40 }; constexpr int button_width { 130 }, button_height { menuBarOffset }, list_width { 260 }, list_height { 420 }; constexpr int delta_x { 15 }, delta_y { menuBarOffset / 2 }, text_button_height { button_height / 2 }; int left, right, top, bottom, buttons_left, buttons_top, list_bottom; left = 5; right = left + button_width; top = 3 + menuBarOffset; bottom = top + text_button_height; GuiLabel_createShown (d_windowForm, left, right, top, bottom, U"Positions:", 0); left = right + delta_x ; right = left + button_width; GuiLabel_createShown (d_windowForm, left, right, top, bottom, U"Values:", 0); left = 0; right = left + list_width; buttons_top = (top = bottom + delta_y); list_bottom = bottom = top + list_height; list = GuiList_create (d_windowForm, left, right, top, bottom, true, 0); GuiList_setSelectionChangedCallback (list, gui_list_cb_selectionChanged, this); GuiList_setDoubleClickCallback (list, gui_list_cb_doubleClick, this); GuiList_setScrollCallback (list, gui_list_cb_scroll, this); GuiThing_show (list); buttons_left = left = right + 2 * delta_x; right = left + button_width; bottom = top + button_height; GuiLabel_createShown (d_windowForm, left, right, top, bottom, U"Value:", 0); left = right + delta_x; right = left + button_width; text = GuiText_createShown (d_windowForm, left, right, top, bottom, 0); GuiText_setString (text, CategoriesEditor_EMPTYLABEL); left = buttons_left; right = left + button_width; top = bottom + delta_y; bottom = top + button_height; insert = GuiButton_createShown (d_windowForm, left, right, top, bottom, U"Insert", gui_button_cb_insert, this, GuiButton_DEFAULT); left = right + delta_x; right = left + button_width; replace = GuiButton_createShown (d_windowForm, left, right, top, bottom, U"Replace", gui_button_cb_replace, this, 0); left = buttons_left; right = left + int (1.5 * button_width); top = bottom + delta_y; bottom = top + button_height; insertAtEnd = GuiButton_createShown (d_windowForm, left, right, top, bottom, U"Insert at end", gui_button_cb_insertAtEnd, this, 0); top = bottom + delta_y; bottom = top + button_height; undo = GuiButton_createShown (d_windowForm, left, right, top, bottom, U"Undo", gui_button_cb_undo, this, 0); top = bottom + delta_y; bottom = top + button_height; redo = GuiButton_createShown (d_windowForm, left, right, top, bottom, U"Redo", gui_button_cb_redo, this, 0); top = bottom + delta_y; bottom = top + button_height; remove = GuiButton_createShown (d_windowForm, left, right, top, bottom, U"Remove", gui_button_cb_remove, this, 0); top = bottom + delta_y; bottom = top + button_height; moveUp = GuiButton_createShown (d_windowForm, left, right, top, bottom, U"Move selection up", gui_button_cb_moveUp, this, 0); top = bottom + delta_y; bottom = top + button_height; moveDown = GuiButton_createShown (d_windowForm, left, right, top, bottom, U"Move selection down", gui_button_cb_moveDown, this, 0); top = list_bottom + delta_y; bottom = top + button_height; left = 5; right = left + 200; outOfView = GuiLabel_createShown (d_windowForm, left, right, top, bottom, U"", 0); }
GuiForm GuiForm_createInScrolledWindow (GuiScrolledWindow parent) { autoGuiForm me = Thing_new (GuiForm); my d_shell = parent -> d_shell; my d_parent = parent; #if gtk my d_widget = gtk_fixed_new (); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (parent -> d_widget), GTK_WIDGET (my d_widget)); #elif cocoa #elif motif //my d_widget = XmCreateRowColumn (parent -> d_widget, "menu", nullptr, 0); my d_widget = XmCreateForm (parent -> d_widget, "menu", nullptr, 0); #endif GuiThing_show (me.get()); #if gtk g_signal_connect (G_OBJECT (my d_widget), "destroy", G_CALLBACK (_guiGtkForm_destroyCallback), me.get()); #elif cocoa #elif motif XtAddCallback (my d_widget, XmNdestroyCallback, _guiMotifForm_destroyCallback, me.get()); #endif return me.releaseToAmbiguousOwner(); }