static void gui_button_cb_insert (I, GuiButtonEvent event) { (void) event; iam (StringsEditor); Strings strings = (Strings) my data; /* * Find the first selected item. */ long numberOfSelected, *selected = GuiList_getSelectedPositions (my list, & numberOfSelected); long position = selected == NULL ? strings -> numberOfStrings + 1 : selected [1]; NUMvector_free (selected, 1); wchar_t *text = GuiText_getString (my text); /* * Change the data. */ Strings_insert (strings, position, text); /* * Change the list. */ GuiList_insertItem (my list, text, position); GuiList_deselectAllItems (my list); GuiList_selectItem (my list, position); /* * Clean up. */ Melder_free (text); my broadcastDataChanged (); }
static void updateWidgets (CategoriesEditor me) { // all buttons except undo & redo long size = ( (Categories) my data)->size; bool insert = false, insertAtEnd = true, replace = false, remove = false; bool moveUp = false, moveDown = false; long posCount; autoNUMvector<long> posList (GuiList_getSelectedPositions (my list, & posCount), 1); if (posList.peek()) { long firstPos = posList[1], lastPos = posList[posCount]; bool contiguous = ( lastPos - firstPos + 1 == posCount ); moveUp = contiguous && firstPos > 1; moveDown = contiguous && lastPos < size; my position = firstPos; remove = true; replace = true; //insertAtEnd = false; if (posCount == 1) { insert = true; //if (posList[1] == size) insertAtEnd = true; if (size == 1 && ! str32cmp (CategoriesEditor_EMPTYLABEL, OrderedOfString_itemAtIndex_c ((OrderedOfString) my data, 1))) { remove = false; } } } GuiThing_setSensitive (my insert, insert); GuiThing_setSensitive (my insertAtEnd, insertAtEnd); GuiThing_setSensitive (my replace, replace); GuiThing_setSensitive (my remove, remove); GuiThing_setSensitive (my moveUp, moveUp); GuiThing_setSensitive (my moveDown, moveDown); if (my history) { updateUndoAndRedoMenuItems (me); } notifyNumberOfSelected (me); }
static void gui_button_cb_insert (StringsEditor me, GuiButtonEvent /* event */) { Strings strings = (Strings) my data; /* * Find the first selected item. */ long numberOfSelected, *selected = GuiList_getSelectedPositions (my list, & numberOfSelected); long position = selected ? selected [1] : strings -> numberOfStrings + 1; NUMvector_free (selected, 1); char32 *text = GuiText_getString (my text); /* * Change the data. */ Strings_insert (strings, position, text); /* * Change the list. */ GuiList_insertItem (my list, text, position); GuiList_deselectAllItems (my list); GuiList_selectItem (my list, position); /* * Clean up. */ Melder_free (text); Editor_broadcastDataChanged (me); }
void StringsEditor::gui_button_cb_insert (I, GuiButtonEvent event) { (void) event; StringsEditor *stringsEditor = (StringsEditor *)void_me; Strings strings = (structStrings*)stringsEditor->_data; /* * Find the first selected item. */ long numberOfSelected, *selected = GuiList_getSelectedPositions (stringsEditor->_list, & numberOfSelected); long position = selected == NULL ? strings -> numberOfStrings + 1 : selected [1]; NUMlvector_free (selected, 1); wchar_t *text = GuiText_getString (stringsEditor->_text); /* * Change the data. */ Strings_insert (strings, position, text); /* * Change the list. */ GuiList_insertItem (stringsEditor->_list, text, position); GuiList_deselectAllItems (stringsEditor->_list); GuiList_selectItem (stringsEditor->_list, position); /* * Clean up. */ Melder_free (text); stringsEditor->broadcastChange (); }
static void notifyNumberOfSelected (CategoriesEditor me) { autoMelderString tmp; long posCount; autoNUMvector<long> posList (GuiList_getSelectedPositions (my list, & posCount), 1); // waste if (posCount > 0) { MelderString_append (&tmp, posCount, U" selection", (posCount > 1 ? U"s." : U".")); } if (tmp.string) GuiLabel_setText (my outOfView, tmp.string); }
static void gui_button_cb_remove (StringsEditor me, GuiButtonEvent /* event */) { long numberOfSelected, *selected = GuiList_getSelectedPositions (my list, & numberOfSelected); for (long iselected = numberOfSelected; iselected >= 1; iselected --) { Strings_remove ((Strings) my data, selected [iselected]); } NUMvector_free (selected, 1); updateList (me); Editor_broadcastDataChanged (me); }
static void gui_button_cb_replace (StringsEditor me, GuiButtonEvent /* event */) { Strings strings = (Strings) my data; long numberOfSelected, *selected = GuiList_getSelectedPositions (my list, & numberOfSelected); char32 *text = GuiText_getString (my text); for (long iselected = 1; iselected <= numberOfSelected; iselected ++) { Strings_replace (strings, selected [iselected], text); GuiList_replaceItem (my list, text, selected [iselected]); } Melder_free (text); Editor_broadcastDataChanged (me); }
void StringsEditor::gui_button_cb_remove (I, GuiButtonEvent event) { (void) event; StringsEditor *stringsEditor = (StringsEditor *)void_me; long numberOfSelected, *selected = GuiList_getSelectedPositions (stringsEditor->_list, & numberOfSelected); for (long iselected = numberOfSelected; iselected >= 1; iselected --) { Strings_remove ((structStrings*)stringsEditor->_data, selected [iselected]); } NUMlvector_free (selected, 1); stringsEditor->updateList (); stringsEditor->broadcastChange (); }
/* Precondition: contiguous selection */ static void gui_button_cb_moveDown (CategoriesEditor me, GuiButtonEvent /* event */) { long posCount; autoNUMvector<long> posList (GuiList_getSelectedPositions (my list, & posCount), 1); if (posCount > 0) { autoCategoriesEditorMoveDown command = CategoriesEditorMoveDown_create (me, posList.peek(), posCount, posList[posCount] + 1); Command_do (command.peek()); if (my history) { CommandHistory_insertItem_move (my history.peek(), command.move()); } updateWidgets (me); } }
static void gui_button_cb_removeTarget (ArtwordEditor me, GuiButtonEvent /* event */) { Artword artword = (Artword) my data; long numberOfSelectedPositions; long *selectedPositions = GuiList_getSelectedPositions (my list, & numberOfSelectedPositions); // BUG memory if (selectedPositions) { for (long ipos = numberOfSelectedPositions; ipos > 0; ipos --) Artword_removeTarget (artword, my feature, selectedPositions [ipos]); } NUMvector_free <long> (selectedPositions, 1); updateList (me); Editor_broadcastDataChanged (me); }
static void gui_button_cb_replace (I, GuiButtonEvent event) { (void) event; iam (StringsEditor); Strings strings = (Strings) my data; long numberOfSelected, *selected = GuiList_getSelectedPositions (my list, & numberOfSelected); wchar_t *text = GuiText_getString (my text); for (long iselected = 1; iselected <= numberOfSelected; iselected ++) { Strings_replace (strings, selected [iselected], text); GuiList_replaceItem (my list, text, selected [iselected]); } Melder_free (text); my broadcastDataChanged (); }
void StringsEditor::gui_button_cb_replace (I, GuiButtonEvent event) { (void) event; StringsEditor *stringsEditor = (StringsEditor *)void_me; Strings strings = (structStrings*)stringsEditor->_data; long numberOfSelected, *selected = GuiList_getSelectedPositions (stringsEditor->_list, & numberOfSelected); wchar_t *text = GuiText_getString (stringsEditor->_text); for (long iselected = 1; iselected <= numberOfSelected; iselected ++) { Strings_replace (strings, selected [iselected], text); GuiList_replaceItem (stringsEditor->_list, text, selected [iselected]); } Melder_free (text); stringsEditor->broadcastChange (); }
static void gui_list_cb_doubleClick (CategoriesEditor me, GuiList_DoubleClickEvent event) { Melder_assert (event -> list == my list); // `my position` should just have been updated by the selectionChanged callback. long posCount; autoNUMvector<long> posList (GuiList_getSelectedPositions (my list, & posCount), 1); if (posCount == 1 // often or even usually true when double-clicking? && posList [1] == my position) // should be true, but we don't crash if it's false { const char32 *catg = OrderedOfString_itemAtIndex_c ((OrderedOfString) my data, my position); if (catg) { // should be non-null, but we don't crash if not GuiText_setString (my text, catg); } } }
static void gui_button_cb_replace (CategoriesEditor me, GuiButtonEvent /* event */) { long posCount; autoNUMvector<long> posList (GuiList_getSelectedPositions (my list, & posCount), 1); if (posCount > 0) { autostring32 text = GuiText_getString (my text); if (str32len (text.peek()) != 0) { autoSimpleString str = SimpleString_create (text.peek()); autoCategoriesEditorReplace command = CategoriesEditorReplace_create (me, str.move(), posList.peek(), posCount); Command_do (command.peek()); if (my history) { CommandHistory_insertItem_move (my history.peek(), command.move()); } updateWidgets (me); } } }