Пример #1
0
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;
    }
}
Пример #2
0
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;
    }
}
Пример #3
0
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;
}
Пример #4
0
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;
    }
}
Пример #5
0
/* 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;
}
Пример #6
0
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;
    }
}