-----------------------------------------------------------------------------
*/
-/* positions in the level editor */
-#define ED_WIN_MB_LEFT_XPOS (editor.palette.element_left.x)
-#define ED_WIN_MB_LEFT_YPOS (editor.palette.element_left.y)
-#define ED_WIN_MB_MIDDLE_XPOS (editor.palette.element_middle.x)
-#define ED_WIN_MB_MIDDLE_YPOS (editor.palette.element_middle.y)
-#define ED_WIN_MB_RIGHT_XPOS (editor.palette.element_right.x)
-#define ED_WIN_MB_RIGHT_YPOS (editor.palette.element_right.y)
-
/* values for the control window */
#define ED_CTRL_NO_BUTTONS_GFX_XPOS 6
#define ED_CTRL_NO_BUTTONS_GFX_YPOS 286
#define ED_CTRL4_BUTTONS_GFX_YPOS 214
#define ED_CTRL1_BUTTONS_ALT_GFX_YPOS 142
#define ED_CTRL3_BUTTONS_ALT_GFX_YPOS 302
+#define ED_CTRL5_BUTTONS_GFX_XPOS 5
+#define ED_CTRL5_BUTTONS_GFX_YPOS 110
#define ED_CTRL1_BUTTON_XSIZE 22
#define ED_CTRL1_BUTTON_YSIZE 22
#define ED_CTRL4_BUTTON_YSIZE 22
#define ED_CTRL4_BUTTONS_XPOS 6
#define ED_CTRL4_BUTTONS_YPOS 6
+#define ED_CTRL5_BUTTON_XSIZE 90
+#define ED_CTRL5_BUTTON_YSIZE 20
+#define ED_CTRL5_BUTTONS_XPOS 5
+#define ED_CTRL5_BUTTONS_YPOS 230
#define ED_CTRL1_BUTTONS_HORIZ 4
#define ED_CTRL1_BUTTONS_VERT 4
#define ED_CTRL3_BUTTONS_VERT 1
#define ED_CTRL4_BUTTONS_HORIZ 2
#define ED_CTRL4_BUTTONS_VERT 1
+#define ED_CTRL5_BUTTONS_HORIZ 1
+#define ED_CTRL5_BUTTONS_VERT 1
#define ED_NUM_CTRL1_BUTTONS (ED_CTRL1_BUTTONS_HORIZ * ED_CTRL1_BUTTONS_VERT)
#define ED_NUM_CTRL2_BUTTONS (ED_CTRL2_BUTTONS_HORIZ * ED_CTRL2_BUTTONS_VERT)
#define ED_NUM_CTRL3_BUTTONS (ED_CTRL3_BUTTONS_HORIZ * ED_CTRL3_BUTTONS_VERT)
#define ED_NUM_CTRL4_BUTTONS (ED_CTRL4_BUTTONS_HORIZ * ED_CTRL4_BUTTONS_VERT)
+#define ED_NUM_CTRL5_BUTTONS (ED_CTRL5_BUTTONS_HORIZ * ED_CTRL5_BUTTONS_VERT)
#define ED_NUM_CTRL1_2_BUTTONS (ED_NUM_CTRL1_BUTTONS + ED_NUM_CTRL2_BUTTONS)
#define ED_NUM_CTRL1_3_BUTTONS (ED_NUM_CTRL1_2_BUTTONS + ED_NUM_CTRL3_BUTTONS)
-#define ED_NUM_CTRL_BUTTONS (ED_NUM_CTRL1_BUTTONS + \
- ED_NUM_CTRL2_BUTTONS + \
- ED_NUM_CTRL3_BUTTONS + \
- ED_NUM_CTRL4_BUTTONS)
+#define ED_NUM_CTRL1_4_BUTTONS (ED_NUM_CTRL1_3_BUTTONS + ED_NUM_CTRL4_BUTTONS)
+#define ED_NUM_CTRL_BUTTONS (ED_NUM_CTRL1_4_BUTTONS + ED_NUM_CTRL5_BUTTONS)
/* values for the element list */
#define ED_ELEMENTLIST_XPOS (editor.palette.x)
#define ED_ELEMENTLIST_YPOS (editor.palette.y)
-#define ED_ELEMENTLIST_XSIZE 20
-#define ED_ELEMENTLIST_YSIZE 20
+#define ED_ELEMENTLIST_XSIZE (graphic_info[IMG_EDITOR_PALETTE_BUTTON].width)
+#define ED_ELEMENTLIST_YSIZE (graphic_info[IMG_EDITOR_PALETTE_BUTTON].height)
#define ED_ELEMENTLIST_BUTTONS_HORIZ (editor.palette.cols)
#define ED_ELEMENTLIST_BUTTONS_VERT (editor.palette.rows)
#define ED_NUM_ELEMENTLIST_BUTTONS (ED_ELEMENTLIST_BUTTONS_HORIZ * \
#define ED_SCROLLBAR2_XPOS 50
#define ED_SCROLLBAR2_YPOS 20
-#define ED_SCROLLBUTTON2_XSIZE 10
-#define ED_SCROLLBUTTON2_YSIZE 10
+#define ED_SCROLLBUTTON2_XSIZE (graphic_info[IMG_EDITOR_PALETTE_SCROLL_UP].width)
+#define ED_SCROLLBUTTON2_YSIZE (graphic_info[IMG_EDITOR_PALETTE_SCROLL_UP].height)
#define ED_SCROLL2_UP_XPOS (ED_ELEMENTLIST_XPOS + \
ED_ELEMENTLIST_BUTTONS_HORIZ * \
#define ED_WIN_COUNT_YPOS ED_BUTTON_COUNT_YPOS
#define ED_WIN_COUNT_XSIZE 52
#define ED_WIN_COUNT_YSIZE ED_BUTTON_COUNT_YSIZE
-#define ED_WIN_COUNT2_XPOS 27
-#define ED_WIN_COUNT2_YPOS 3
-#define ED_WIN_COUNT2_XSIZE 46
-#define ED_WIN_COUNT2_YSIZE ED_BUTTON_COUNT_YSIZE
#define ED_BUTTON_MINUS_XPOS 2
#define ED_BUTTON_MINUS_YPOS ED_BUTTON_COUNT_YPOS
#define GADGET_ID_TEXT (GADGET_ID_TOOLBOX_FIRST + 7)
#define GADGET_ID_FLOOD_FILL (GADGET_ID_TOOLBOX_FIRST + 8)
#define GADGET_ID_WRAP_LEFT (GADGET_ID_TOOLBOX_FIRST + 9)
-#define GADGET_ID_PROPERTIES (GADGET_ID_TOOLBOX_FIRST + 10)
+#define GADGET_ID_ZOOM (GADGET_ID_TOOLBOX_FIRST + 10)
#define GADGET_ID_WRAP_RIGHT (GADGET_ID_TOOLBOX_FIRST + 11)
#define GADGET_ID_RANDOM_PLACEMENT (GADGET_ID_TOOLBOX_FIRST + 12)
#define GADGET_ID_GRAB_BRUSH (GADGET_ID_TOOLBOX_FIRST + 13)
#define GADGET_ID_CUSTOM_COPY (GADGET_ID_TOOLBOX_FIRST + 25)
#define GADGET_ID_CUSTOM_PASTE (GADGET_ID_TOOLBOX_FIRST + 26)
+#define GADGET_ID_PROPERTIES (GADGET_ID_TOOLBOX_FIRST + 27)
+
/* counter gadget identifiers */
-#define GADGET_ID_COUNTER_FIRST (GADGET_ID_TOOLBOX_FIRST + 27)
+#define GADGET_ID_COUNTER_FIRST (GADGET_ID_TOOLBOX_FIRST + 28)
#define GADGET_ID_SELECT_LEVEL_DOWN (GADGET_ID_COUNTER_FIRST + 0)
#define GADGET_ID_SELECT_LEVEL_TEXT (GADGET_ID_COUNTER_FIRST + 1)
{ 't', "enter text elements" },
{ 'f', "flood fill" },
{ '\0', "wrap (rotate) level left" },
- { '?', "properties of drawing element" },
+ { 'z', "zoom level tile size" },
{ '\0', "wrap (rotate) level right" },
{ '\0', "random element placement" },
{ 'b', "grab brush" },
{ '\0', "copy settings from this element" },
{ '\0', "paste settings to this element" },
+
+ { 'p', "properties of drawing element" },
};
static int random_placement_value = 10;
BackToFront();
}
+void getElementListGraphicSource(int element, Bitmap **bitmap, int *x, int *y)
+{
+ int graphic = el2edimg(element);
+ int tile_size = (editor.palette.tile_size >= TILESIZE ? TILESIZE :
+ MINI_TILESIZE);
+
+ getSizedGraphicSource(graphic, 0, tile_size, bitmap, x, y);
+}
+
static void CreateControlButtons()
{
Bitmap *gd_bitmap = graphic_info[IMG_GLOBAL_DOOR].bitmap;
int width, height;
int gd_xoffset, gd_yoffset;
int gd_x1, gd_x2, gd_y1, gd_y2;
+ int gd_x1a, gd_x2a, gd_y1a, gd_y2a;
int button_type;
int radio_button_nr;
boolean checked;
gd_y1 = DOOR_GFX_PAGEY1 + ED_CTRL3_BUTTONS_GFX_YPOS + gd_yoffset;
gd_y2 = DOOR_GFX_PAGEY1 + ED_CTRL3_BUTTONS_ALT_GFX_YPOS + gd_yoffset;
}
- else
+ else if (id < ED_NUM_CTRL1_4_BUTTONS)
{
int x = (i - ED_NUM_CTRL1_3_BUTTONS) % ED_CTRL4_BUTTONS_HORIZ;
int y = (i - ED_NUM_CTRL1_3_BUTTONS) / ED_CTRL4_BUTTONS_HORIZ + 3;
gd_y1 = DOOR_GFX_PAGEY1 + ED_CTRL4_BUTTONS_GFX_YPOS + gd_yoffset;
gd_y2 = 0; /* no alternative graphic for these buttons */
}
+ else
+ {
+ gd_xoffset = DX - EX + ED_CTRL5_BUTTONS_XPOS;
+ gd_yoffset = DY - EY + ED_CTRL5_BUTTONS_YPOS;
+ width = ED_CTRL5_BUTTON_XSIZE;
+ height = ED_CTRL5_BUTTON_YSIZE;
+
+ gd_x1 = DOOR_GFX_PAGEX6 + ED_CTRL5_BUTTONS_GFX_XPOS;
+ gd_x2 = 0; /* no alternative graphic for these buttons */
+ gd_y1 = DOOR_GFX_PAGEY1 + ED_CTRL5_BUTTONS_GFX_YPOS;
+ gd_y2 = DOOR_GFX_PAGEY1 + ED_CTRL5_BUTTONS_GFX_YPOS - height;
+ }
+
+ if (id < ED_NUM_CTRL1_4_BUTTONS)
+ {
+ gd_x1a = gd_x1;
+ gd_y1a = gd_y2;
+ gd_x2a = gd_x2;
+ gd_y2a = gd_y2;
+ gd_x1 = gd_x1;
+ gd_y1 = gd_y1;
+ gd_x2 = gd_x2;
+ gd_y2 = gd_y1;
+ }
+ else
+ {
+ gd_x1a = 0;
+ gd_y1a = 0;
+ gd_x2a = 0;
+ gd_y2a = 0;
+ gd_x1 = gd_x1;
+ gd_y1 = gd_y1;
+ gd_x2 = gd_x1;
+ gd_y2 = gd_y2;
+ }
gi = CreateGadget(GDI_CUSTOM_ID, id,
GDI_CUSTOM_TYPE_ID, i,
GDI_RADIO_NR, radio_button_nr,
GDI_CHECKED, checked,
GDI_DESIGN_UNPRESSED, gd_bitmap, gd_x1, gd_y1,
- GDI_DESIGN_PRESSED, gd_bitmap, gd_x2, gd_y1,
- GDI_ALT_DESIGN_UNPRESSED, gd_bitmap, gd_x1, gd_y2,
- GDI_ALT_DESIGN_PRESSED, gd_bitmap, gd_x2, gd_y2,
+ GDI_DESIGN_PRESSED, gd_bitmap, gd_x2, gd_y2,
+ GDI_ALT_DESIGN_UNPRESSED, gd_bitmap, gd_x1a, gd_y1a,
+ GDI_ALT_DESIGN_PRESSED, gd_bitmap, gd_x2a, gd_y2a,
GDI_EVENT_MASK, event_mask,
GDI_CALLBACK_INFO, HandleEditorGadgetInfoText,
GDI_CALLBACK_ACTION, HandleControlButtons,
int y = i / ED_ELEMENTLIST_BUTTONS_HORIZ;
int id = GADGET_ID_ELEMENTLIST_FIRST + i;
int element = editor_elements[i];
+ int tile_size = (editor.palette.tile_size >= TILESIZE ? TILESIZE :
+ MINI_TILESIZE);
event_mask = GD_EVENT_RELEASED;
gd_x2 = gd->src_x + gd->pressed_xoffset;
gd_y2 = gd->src_y + gd->pressed_yoffset;
- getMiniGraphicSource(el2edimg(element), &deco_bitmap, &deco_x, &deco_y);
- deco_xpos = (gd->width - MINI_TILEX) / 2;
- deco_ypos = (gd->height - MINI_TILEY) / 2;
+ getElementListGraphicSource(element, &deco_bitmap, &deco_x, &deco_y);
+ deco_xpos = (gd->width - tile_size) / 2;
+ deco_ypos = (gd->height - tile_size) / 2;
gi = CreateGadget(GDI_CUSTOM_ID, id,
GDI_CUSTOM_TYPE_ID, i,
GDI_DESIGN_PRESSED, gd->bitmap, gd_x2, gd_y2,
GDI_DECORATION_DESIGN, deco_bitmap, deco_x, deco_y,
GDI_DECORATION_POSITION, deco_xpos, deco_ypos,
- GDI_DECORATION_SIZE, MINI_TILEX, MINI_TILEY,
+ GDI_DECORATION_SIZE, tile_size, tile_size,
GDI_DECORATION_SHIFTING, 1, 1,
GDI_EVENT_MASK, event_mask,
GDI_CALLBACK_INFO, HandleEditorGadgetInfoText,
int max_infotext_len = getMaxInfoTextLength();
int i;
- /* these values are not constant, but can change at runtime */
- counterbutton_info[ED_COUNTER_ID_SELECT_LEVEL].x = DX + 5 - SX;
- counterbutton_info[ED_COUNTER_ID_SELECT_LEVEL].y = DY + 3 - SY;
-
for (i = 0; i < ED_NUM_COUNTERBUTTONS; i++)
{
int j;
event_mask |= GD_EVENT_RELEASED;
- if (j == 1)
- x += 2 * ED_GADGET_DISTANCE;
- y += ED_GADGET_DISTANCE;
+ if (j == 0)
+ {
+ x = DX + editor.button.prev_level.x;
+ y = DY + editor.button.prev_level.y;
+ }
+ else
+ {
+ x = DX + editor.button.next_level.x;
+ y = DY + editor.button.next_level.y;
+ }
gd_x1 = gd->src_x;
gd_y1 = gd->src_y;
int font_type = FONT_INPUT_1;
int font_type_active = FONT_INPUT_1_ACTIVE;
int gd_width = ED_WIN_COUNT_XSIZE;
+ int border_size = ED_BORDER_SIZE;
id = counterbutton_info[i].gadget_id_text;
event_mask = GD_EVENT_TEXT_RETURN | GD_EVENT_TEXT_LEAVING;
if (i == ED_COUNTER_ID_SELECT_LEVEL)
{
+ int graphic = IMG_EDITOR_INPUT_GFX_LEVEL_NUMBER;
+ struct GraphicInfo *gd = &graphic_info[graphic];
+
+ gd_bitmap = gd->bitmap;
+
+ x = DX + editor.input.level_number.x;
+ y = DY + editor.input.level_number.y;
+
+ gd_x = gd->src_x;
+ gd_y = gd->src_y;
+ gd_width = gd->width;
+ border_size = gd->border_size;
+
font_type = FONT_LEVEL_NUMBER;
font_type_active = FONT_LEVEL_NUMBER_ACTIVE;
- x += 2 * ED_GADGET_DISTANCE;
- y -= ED_GADGET_DISTANCE;
-
- gd_x = DOOR_GFX_PAGEX6 + ED_WIN_COUNT2_XPOS;
- gd_y = DOOR_GFX_PAGEY1 + ED_WIN_COUNT2_YPOS;
- gd_width = ED_WIN_COUNT2_XSIZE;
}
else
{
GDI_TEXT_FONT_ACTIVE, font_type_active,
GDI_DESIGN_UNPRESSED, gd_bitmap, gd_x, gd_y,
GDI_DESIGN_PRESSED, gd_bitmap, gd_x, gd_y,
- GDI_BORDER_SIZE, ED_BORDER_SIZE, ED_BORDER_SIZE,
+ GDI_BORDER_SIZE, border_size, border_size,
GDI_DESIGN_WIDTH, gd_width,
GDI_EVENT_MASK, event_mask,
GDI_CALLBACK_INFO, HandleEditorGadgetInfoText,
for (i = 0; i < ED_NUM_CTRL1_2_BUTTONS; i++)
MapGadget(level_editor_gadget[i]);
+ /* map toolbox buttons (element properties button) */
+ MapGadget(level_editor_gadget[ED_NUM_CTRL1_4_BUTTONS]);
+
/* map buttons to select elements */
for (i = 0; i < ED_NUM_ELEMENTLIST_BUTTONS; i++)
MapGadget(level_editor_gadget[GADGET_ID_ELEMENTLIST_FIRST + i]);
for (i = 0; i < ED_NUM_CTRL1_BUTTONS; i++)
{
if (i != GADGET_ID_SINGLE_ITEMS &&
- i != GADGET_ID_PROPERTIES &&
i != GADGET_ID_PICK_ELEMENT)
{
struct GadgetInfo *gi = level_editor_gadget[i];
void DrawLevelEd()
{
- int old_sx = SX;
- int old_sy = SY;
- int old_sxsize = SXSIZE;
- int old_sysize = SYSIZE;
-
StopAnimation();
CloseDoor(DOOR_CLOSE_ALL);
/* needed if different viewport properties defined for editor */
ChangeViewportPropertiesIfNeeded();
- if (old_sx != SX ||
- old_sy != SY ||
- old_sxsize != SXSIZE ||
- old_sysize != SYSIZE)
- playfield_area_changed = TRUE;
- else
- playfield_area_changed = FALSE;
+ playfield_area_changed = DrawingAreaChanged();
OpenDoor(DOOR_OPEN_1 | DOOR_OPEN_2 | DOOR_NO_DELAY);
level_ypos = -1;
}
+ /* needed for gadgets drawn on background (like palette scrollbar) */
+ SetDoorBackgroundImage(IMG_UNDEFINED);
+
/* copy default editor door content to main double buffer */
BlitBitmap(graphic_info[IMG_BACKGROUND_PALETTE].bitmap, drawto,
graphic_info[IMG_BACKGROUND_PALETTE].src_x,
BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
DOOR_GFX_PAGEX8, 236, EXSIZE, EYSIZE, EX, EY);
- redraw_mask |= REDRAW_ALL;
+ // redraw_mask |= REDRAW_ALL;
FreeLevelEditorGadgets();
CreateLevelEditorGadgets();
UnmapGadget(gi);
- getMiniGraphicSource(el2edimg(element), &gd->bitmap, &gd->x, &gd->y);
+ getElementListGraphicSource(element, &gd->bitmap, &gd->x, &gd->y);
+
ModifyGadget(gi, GDI_INFO_TEXT, getElementInfoText(element), GDI_END);
MapGadget(gi);
}
}
+static void DrawDrawingElement(int element, struct EditorPaletteElementInfo *e)
+{
+ int graphic = el2edimg(element);
+ int tile_size = (e->tile_size >= TILESIZE ? TILESIZE : MINI_TILESIZE);
+
+ DrawSizedGraphicExt(drawto, DX + e->x, DY + e->y, graphic, 0, tile_size);
+}
+
static void PickDrawingElement(int button, int element)
{
+ struct
+ {
+ int *new_element;
+ struct EditorPaletteElementInfo *e;
+ } de, drawing_elements[] =
+ {
+ { &new_element1, &editor.palette.element_left },
+ { &new_element2, &editor.palette.element_middle },
+ { &new_element3, &editor.palette.element_right },
+ };
+
if (button < 1 || button > 3)
return;
- if (button == 1)
- {
- new_element1 = element;
- DrawMiniGraphicExt(drawto,
- DX + ED_WIN_MB_LEFT_XPOS, DY + ED_WIN_MB_LEFT_YPOS,
- el2edimg(new_element1));
- }
- else if (button == 2)
- {
- new_element2 = element;
- DrawMiniGraphicExt(drawto,
- DX + ED_WIN_MB_MIDDLE_XPOS, DY + ED_WIN_MB_MIDDLE_YPOS,
- el2edimg(new_element2));
- }
- else
- {
- new_element3 = element;
- DrawMiniGraphicExt(drawto,
- DX + ED_WIN_MB_RIGHT_XPOS, DY + ED_WIN_MB_RIGHT_YPOS,
- el2edimg(new_element3));
- }
+ de = drawing_elements[button - 1];
+
+ DrawDrawingElement((*de.new_element = element), de.e);
redraw_mask |= REDRAW_DOOR_1;
}
else if (element >= NUM_FILE_ELEMENTS)
element_mapped = EL_UNKNOWN;
+ // dump brush as level sketch text for the R'n'D forum:
+ // - large tiles: `xxx (0x60 ASCII)
+ // - small tiles: ¸xxx (0xb8 ISO-8859-1, 0xc2b8 UTF-8)
printf("%s%03d", (mode == CB_DUMP_BRUSH ? "`" : "¸"), element_mapped);
}
case TEXT_WRITECHAR:
if (letter_element >= EL_CHAR_START && letter_element <= EL_CHAR_END)
{
+ if (new_element1 >= EL_STEEL_CHAR_START &&
+ new_element1 <= EL_STEEL_CHAR_END)
+ letter_element = letter_element - EL_CHAR_START + EL_STEEL_CHAR_START;
+
delete_buffer[sx - start_sx] = Feld[lx][ly];
Feld[lx][ly] = letter_element;
if (id < ED_NUM_CTRL1_BUTTONS &&
id != GADGET_ID_SINGLE_ITEMS &&
- id != GADGET_ID_PROPERTIES &&
id != GADGET_ID_PICK_ELEMENT &&
edit_mode != ED_MODE_DRAWING &&
drawing_function != GADGET_ID_PICK_ELEMENT &&
break;
+ case GADGET_ID_PROPERTIES:
+ if (edit_mode != ED_MODE_PROPERTIES)
+ {
+ properties_element = new_element;
+ DrawPropertiesWindow();
+ edit_mode = ED_MODE_PROPERTIES;
+
+ last_level_drawing_function = drawing_function;
+ ClickOnGadget(level_editor_gadget[GADGET_ID_SINGLE_ITEMS],
+ MB_LEFTBUTTON);
+ }
+ else
+ {
+ DrawDrawingWindow();
+ edit_mode = ED_MODE_DRAWING;
+
+ ClickOnGadget(level_editor_gadget[last_level_drawing_function],
+ MB_LEFTBUTTON);
+ }
+ break;
+
case GADGET_ID_WRAP_LEFT:
WrapLevel(-step, 0);
break;
RandomPlacement(new_element);
break;
- case GADGET_ID_PROPERTIES:
- if (edit_mode != ED_MODE_PROPERTIES)
- {
- properties_element = new_element;
- DrawPropertiesWindow();
- edit_mode = ED_MODE_PROPERTIES;
-
- last_level_drawing_function = drawing_function;
- ClickOnGadget(level_editor_gadget[GADGET_ID_SINGLE_ITEMS],
- MB_LEFTBUTTON);
- }
- else
- {
- DrawDrawingWindow();
- edit_mode = ED_MODE_DRAWING;
-
- ClickOnGadget(level_editor_gadget[last_level_drawing_function],
- MB_LEFTBUTTON);
- }
+ case GADGET_ID_ZOOM:
+ printf("::: zoom button pressed with mouse button %d\n", button);
break;
case GADGET_ID_CUSTOM_COPY_FROM:
/* needed before playing if editor playfield area has different size */
ClearRectangle(drawto, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE);
- redraw_mask = REDRAW_ALL;
+ // redraw_mask = REDRAW_ALL;
level_editor_test_game = TRUE;
if (id != GADGET_ID_NONE)
ClickOnGadget(level_editor_gadget[id], button);
+ else if (letter >= '1' && letter <= '3')
+ ClickOnGadget(level_editor_gadget[GADGET_ID_PROPERTIES], letter - '0');
+ else if (letter == '?')
+ ClickOnGadget(level_editor_gadget[GADGET_ID_PROPERTIES], button);
else if (letter == '.')
ClickOnGadget(level_editor_gadget[GADGET_ID_SINGLE_ITEMS], button);
else if (key == KSYM_Return ||