void area_editor(Client *conn, const char *argument) { char arg[100]; argument = one_argument(argument, arg); if (!str_prefix(arg, "show")) { conn->editing->show(conn); return; } if (!str_cmp(arg, "Q")) { finish_editing(conn); return; } if (!str_cmp(arg, "list")) { area_edit_list(conn); return; } Area *area = (Area *) conn->editing->data; if (!str_cmp(arg, "save")) { save_area(area); xwriteln(conn, "~CArea saved.~x"); return; } if (!str_cmp(arg, "A") || !str_cmp(arg, "name")) { if (!argument || !*argument) { xwriteln(conn, "~CYou must provide a name to set.~x"); return; } free_str_dup(&area->name, argument); conn->editing->show(conn); return; } if (!str_cmp(arg, "B") || !str_cmp(arg, "flags")) { if (edit_flag("flags", conn, area->flags, argument, area_flags)) { conn->editing->show(conn); } return; } }
void exit_editor(Client *conn, const char *argument) { char arg[100]; argument = one_argument(argument, arg); if (!str_prefix(arg, "show")) { conn->editing->show(conn); return; } if (!str_cmp(arg, "Q")) { finish_editing(conn); return; } Exit *exit = (Exit *) conn->editing->data; if (!str_cmp(arg, "A") || !str_cmp(arg, "ToRoom")) { if (!argument || !*argument || !is_number(argument)) { xwriteln(conn, "~CPlease specify the id of the room you want to delete.~x"); return; } Room *r = get_room_by_id(atoi(argument)); if (r == 0) { xwriteln(conn, "~CNo such room.~x"); return; } exit->to.room = r; conn->editing->show(conn); return; } if (!str_cmp(arg, "B") || !str_cmp(arg, "flags")) { if (edit_flag("flags", conn, exit->flags, argument, exit_flags)) { conn->editing->show(conn); } return; } }
static gint item_key_press (ETableItem *item, gint row, gint col, GdkEvent *event, ETableClickToAdd *etcta) { switch (event->key.keyval) { case GDK_KEY_Return: case GDK_KEY_KP_Enter: case GDK_KEY_ISO_Enter: case GDK_KEY_3270_Enter: finish_editing (etcta); return TRUE; } return FALSE; }
void skill_editor(Client *conn, const char *argument) { char arg[100]; argument = one_argument(argument, arg); if (!str_cmp(arg, "Q")) { finish_editing(conn); return; } if (!str_prefix(arg, "show")) { conn->editing->show(conn); return; } Skill *skill = (Skill *) conn->editing->data; if (!str_cmp(arg, "save")) { save_skill(skill); xwriteln(conn, "~CSkill saved.~x"); return; } if (!str_cmp(arg, "list")) { skill_edit_list(conn); return; } if (!str_cmp(arg, "A") || !str_cmp(arg, "name")) { if (nullstr(argument)) { xwriteln(conn, "~CChange skill name to what?~x"); return; } free_str(skill->name); skill->name = str_dup(argument); conn->editing->show(conn); return; } if (!str_cmp(arg, "B") || !str_cmp(arg, "damage")) { if (nullstr(argument)) { free_str(skill->damage); skill->damage = str_empty; } else { free_str(skill->name); skill->damage = str_dup(argument); } conn->editing->show(conn); return; } if (!str_cmp(arg, "C") || !str_cmp(arg, "msgOff")) { if (nullstr(argument)) { free_str(skill->msgOff); skill->msgOff = str_empty; } else { free_str(skill->msgOff); skill->msgOff = str_dup(argument); } conn->editing->show(conn); return; } if (!str_cmp(arg, "D") || !str_cmp(arg, "msgObj")) { if (nullstr(argument)) { free_str(skill->msgObj); skill->msgObj = str_empty; } else { free_str(skill->msgObj); skill->msgObj = str_dup(argument); } conn->editing->show(conn); return; } if (!str_cmp(arg, "F") || !str_cmp(arg, "mana")) { if (!is_number(argument)) { xwriteln(conn, "~CThat is not a number.~x"); return; } skill->mana = atoi(argument); conn->editing->show(conn); } if (!str_cmp(arg, "E") || !str_cmp(arg, "wait")) { if (!is_number(argument)) { xwriteln(conn, "~CThat is not a number.~x"); return; } skill->mana = atoi(argument); conn->editing->show(conn); return; } if (!str_cmp(arg, "G") || !str_cmp(arg, "cost")) { if (!is_number(argument)) { xwriteln(conn, "~CThat is not a number.~x"); return; } skill->mana = (float) atof(argument); conn->editing->show(conn); return; } if (!str_cmp(arg, "H") || !str_cmp(arg, "spell")) { if (nullstr(argument)) { skill->spellfun = 0; } else { skill->spellfun = spellfun_lookup(argument); if (skill->spellfun == 0) { xwriteln(conn, "~CValid spells are:~x"); int i; for (i = 0; spellfun_table[i].name != 0; i++) { xwritef(conn, "%-10s ", spellfun_table[i].name); if (i % 4 == 0) { xwriteln(conn, ""); } } if (i % 4 != 0) { xwriteln(conn, ""); } return; } } conn->editing->show(conn); return; } if (!str_cmp(arg, "I") || !str_cmp(arg, "gsn")) { if (nullstr(argument)) { skill->pgsn = 0; conn->editing->show(conn); return; } skill->pgsn = gsn_lookup(argument); if (skill->pgsn == 0) { xwriteln(conn, "~CValid gsns are:~x"); int i; for (i = 0; gsn_table[i].name != 0; i++) { xwritef(conn, "%-10s ", gsn_table[i].name); if (i % 4 == 0) { xwriteln(conn, ""); } } if (i % 4 != 0) { xwriteln(conn, ""); } return; } conn->editing->show(conn); return; } if (!str_cmp(arg, "J") || !str_cmp(arg, "minpos")) { long pos = value_lookup(position_table, argument); if (pos == -1) { xwritelnf(conn, "~CValid positions are: ~W%s~x", lookup_names(position_table)); return; } skill->minPos = (position_t) pos; conn->editing->show(conn); return; } if (!str_cmp(arg, "K") || !str_cmp(arg, "flags")) { if (edit_flag ("flags", conn, &skill->flags, argument, skill_flags)) { conn->editing->show(conn); } return; } if (!str_cmp(arg, "L") || !str_cmp(arg, "levels")) { char name[BUF_SIZ]; argument = one_argument(argument, name); int c = class_lookup(name); if (c == -1) { xwriteln(conn, "~CValid classes are:~W"); for (int i = 0; i < max_class; i++) { xwritef(conn, "%s ", class_table[i].name); } xwriteln(conn, "~x"); return; } if (!is_number(argument)) { xwriteln(conn, "~CThat is not a valid level.~x"); return; } skill->levels[c] = atoi(argument); conn->editing->show(conn); return; } }
/* Handles the events on the ETableClickToAdd, particularly * it creates the ETableItem and passes in some events. */ static gint etcta_event (GnomeCanvasItem *item, GdkEvent *e) { ETableClickToAdd *etcta = E_TABLE_CLICK_TO_ADD (item); switch (e->type) { case GDK_FOCUS_CHANGE: if (!e->focus_change.in) return TRUE; /* coverity[fallthrough] */ case GDK_BUTTON_PRESS: if (etcta->text) { g_object_run_dispose (G_OBJECT (etcta->text)); etcta->text = NULL; } if (etcta->rect) { g_object_run_dispose (G_OBJECT (etcta->rect)); etcta->rect = NULL; } if (!etcta->row) { ETableModel *one; one = e_table_one_new (etcta->model); etcta_add_one (etcta, one); g_object_unref (one); e_selection_model_clear (E_SELECTION_MODEL (etcta->selection)); etcta->row = gnome_canvas_item_new ( GNOME_CANVAS_GROUP (item), e_table_item_get_type (), "ETableHeader", etcta->eth, "ETableModel", etcta->one, "minimum_width", etcta->width, "horizontal_draw_grid", TRUE, "vertical_draw_grid", TRUE, "selection_model", etcta->selection, "cursor_mode", E_CURSOR_SPREADSHEET, NULL); g_signal_connect ( etcta->row, "key_press", G_CALLBACK (item_key_press), etcta); e_signal_connect_notify ( etcta->row, "notify::is-editing", G_CALLBACK (table_click_to_add_row_is_editing_changed_cb), etcta); e_canvas_item_grab_focus (GNOME_CANVAS_ITEM (etcta->row), TRUE); set_initial_selection (etcta); g_object_notify (G_OBJECT (etcta), "is-editing"); } break; case GDK_KEY_PRESS: switch (e->key.keyval) { case GDK_KEY_Tab: case GDK_KEY_KP_Tab: case GDK_KEY_ISO_Left_Tab: finish_editing (etcta); break; default: return FALSE; case GDK_KEY_Escape: if (etcta->row) { e_table_item_leave_edit (E_TABLE_ITEM (etcta->row)); etcta_drop_one (etcta); g_object_run_dispose (G_OBJECT (etcta->row)); etcta->row = NULL; create_rect_and_text (etcta); e_canvas_item_move_absolute (etcta->text, 3, 3); } break; } break; default: return FALSE; } return TRUE; }
void exits_editor(Client *conn, const char *argument) { char arg[100]; argument = one_argument(argument, arg); if (!str_prefix(arg, "show")) { conn->editing->show(conn); return; } if (!str_cmp(arg, "Q")) { finish_editing(conn); return; } Exit **exits = (Exit **) conn->editing->data; if (!str_cmp(arg, "A") || !str_prefix(arg, "create")) { if (!argument || !*argument) { xwriteln(conn, "~CCreate an exit in which direction?~x"); return; } long dir = value_lookup(direction_table, argument); if (dir == -1) { xwritelnf(conn, "~C'%s' is not a valid direction.~x", argument); return; } if (exits[dir] != 0) { xwriteln(conn, "~CThere is already an exit in that direction.~x"); return; } exits[dir] = new_exit(); exits[dir]->fromRoom = (Room *) conn->editing->next->data; Editor *edit = build_exit_editor(exits[dir]); edit->next = conn->editing; conn->editing = edit; conn->editing->show(conn); return; } if (!str_cmp(arg, "D") || !str_prefix(arg, "delete")) { if (!argument || !*argument) { xwriteln(conn, "~CCreate an exit in which direction?~x"); return; } const Lookup *dir; int count = 0; int num = atoi(argument); for (dir = direction_table; dir->name != 0; dir++) { if (exits[dir->value] != 0) { count++; } if ((num != 0 && num == count) || !str_prefix(argument, dir->name)) { break; } } if (dir->name == 0) { xwritelnf(conn, "~C'%s' is not a valid direction.~x", argument); return; } if (exits[dir->value] == 0) { xwriteln(conn, "~CThere is no exit in that direction.~x"); return; } destroy_exit(exits[dir->value]); exits[dir->value] = 0; conn->editing->show(conn); return; } if (!str_cmp(arg, "E") || !str_prefix(arg, "edit")) { if (!argument || !*argument) { xwriteln(conn, "~CWhich direction do you wish to edit?~x"); return; } int count = 0; const Lookup *dir; int num = atoi(argument); for (dir = direction_table; dir->name != 0; dir++) { if (exits[dir->value] != 0) { count++; } if ((num != 0 && num == count) || !str_prefix(argument, dir->name)) { break; } } if (dir->name == 0) { xwritelnf(conn, "~C'%s' is not a valid direction.~x", argument); return; } if (exits[dir->value] == 0) { xwriteln(conn, "~CThere is no exit in that direction.~x"); return; } Editor *ed = build_exit_editor(exits[dir->value]); ed->next = conn->editing; conn->editing = ed; conn->editing->show(conn); return; } }