added configurability of element properties button in editor
[rocksndiamonds.git] / src / editor.c
index e007d7a8847da91038df8b46e5b7eb3b99dc22ab..5fc8ccd439f779762a697f5559ad9dfba73f1d35 100644 (file)
@@ -4787,27 +4787,47 @@ static char *getElementInfoText(int element)
   return info_text;
 }
 
-char *getElementDescriptionFilename(int element)
+static char *getElementDescriptionFilenameExt(char *basename)
 {
-  char *docs_dir = options.docs_directory;
   char *elements_subdir = "elements";
+  static char *elements_subdir2 = NULL;
   static char *filename = NULL;
-  char basename[MAX_FILENAME_LEN];
+
+  if (elements_subdir2 == NULL)
+    elements_subdir2 = getPath2(DOCS_DIRECTORY, elements_subdir);
 
   checked_free(filename);
 
-  /* 1st try: look for element description file for exactly this element */
-  sprintf(basename, "%s.txt", element_info[element].token_name);
-  filename = getPath3(docs_dir, elements_subdir, basename);
+  /* 1st try: look for element description in current level set directory */
+  filename = getPath3(getCurrentLevelDir(), elements_subdir2, basename);
   if (fileExists(filename))
     return filename;
 
   free(filename);
 
+  /* 2nd try: look for element description in the game's base directory */
+  filename = getPath3(options.docs_directory, elements_subdir, basename);
+  if (fileExists(filename))
+    return filename;
+
+  return NULL;
+}
+
+char *getElementDescriptionFilename(int element)
+{
+  char basename[MAX_FILENAME_LEN];
+  char *filename;
+
+  /* 1st try: look for element description file for exactly this element */
+  sprintf(basename, "%s.txt", element_info[element].token_name);
+  filename = getElementDescriptionFilenameExt(basename);
+  if (filename != NULL)
+    return filename;
+
   /* 2nd try: look for element description file for this element's class */
   sprintf(basename, "%s.txt", element_info[element].class_name);
-  filename = getPath3(docs_dir, elements_subdir, basename);
-  if (fileExists(filename))
+  filename = getElementDescriptionFilenameExt(basename);
+  if (filename != NULL)
     return filename;
 
   return NULL;
@@ -5278,15 +5298,20 @@ static void CreateControlButtons()
     }
     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;
+      int graphic = IMG_EDITOR_BUTTON_GFX_PROPERTIES;
+      struct GraphicInfo *gd = &graphic_info[graphic];
+      struct XY ebi = editor.button.properties;
 
-      gd_x1 = DOOR_GFX_PAGEX6 + ED_CTRL5_BUTTONS_GFX_XPOS;
+      gd_bitmap = gd->bitmap;
+      gd_xoffset = DX - EX + ebi.x;
+      gd_yoffset = DY - EY + ebi.y;
+      width  = gd->width;
+      height = gd->height;
+
+      gd_x1 = gd->src_x;
       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;
+      gd_y1 = gd->src_y;
+      gd_y2 = gd->src_y + gd->pressed_yoffset;
     }
 
     if (id < ED_NUM_CTRL1_4_BUTTONS)
@@ -7466,6 +7491,9 @@ void DrawLevelEd()
     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,
@@ -7535,8 +7563,6 @@ static void AdjustDrawingAreaGadgets()
   ed_fieldy = (ed_ysize < MAX_ED_FIELDY ? ed_ysize : max_ed_fieldy);
 
   ModifyGadget(level_editor_gadget[GADGET_ID_DRAWING_LEVEL],
-              GDI_WIDTH, ed_fieldx * MINI_TILEX,
-              GDI_HEIGHT, ed_fieldy * MINI_TILEY,
               GDI_AREA_SIZE, ed_fieldx, ed_fieldy,
               GDI_END);