<URL: http://bugs.freeciv.org/Ticket/Display.html?id=40437 >

Patch adds 5 read-only tile properties: x, y, nat_x, nat_y,
and continent. Illustrates the best case of code duplication
elimination using the property editor framework. :)


----------------------------------------------------------------------
それだけか?拡張しやすいでしょうね。
diff --git a/client/gui-gtk-2.0/editprop.c b/client/gui-gtk-2.0/editprop.c
index b32e471..e8b2c8f 100644
--- a/client/gui-gtk-2.0/editprop.c
+++ b/client/gui-gtk-2.0/editprop.c
@@ -221,6 +221,11 @@ static struct propval *propstate_get_value(struct propstate *ps);
 ****************************************************************************/
 enum object_property_ids {
   OPID_TILE_IMAGE,
+  OPID_TILE_X,
+  OPID_TILE_Y,
+  OPID_TILE_NAT_X,
+  OPID_TILE_NAT_Y,
+  OPID_TILE_CONTINENT,
   OPID_TILE_ADDRESS,
   OPID_TILE_TERRAIN,
   OPID_TILE_INDEX,
@@ -1101,6 +1106,21 @@ static struct propval *objbind_get_value_from_object(struct objbind *ob,
     case OPID_TILE_INDEX:
       pv->data.v_int = tile_index(ptile);
       break;
+    case OPID_TILE_X:
+      pv->data.v_int = ptile->x;
+      break;
+    case OPID_TILE_Y:
+      pv->data.v_int = ptile->y;
+      break;
+    case OPID_TILE_NAT_X:
+      pv->data.v_int = ptile->nat_x;
+      break;
+    case OPID_TILE_NAT_Y:
+      pv->data.v_int = ptile->nat_y;
+      break;
+    case OPID_TILE_CONTINENT:
+      pv->data.v_int = ptile->continent;
+      break;
     case OPID_TILE_SPECIALS:
       pv->data.v_bv_special = tile_specials(ptile);
       break;
@@ -1994,6 +2014,11 @@ static void objprop_setup_widget(struct objprop *op)
 
   case OPID_TILE_ADDRESS:
   case OPID_TILE_INDEX:
+  case OPID_TILE_X:
+  case OPID_TILE_Y:
+  case OPID_TILE_NAT_X:
+  case OPID_TILE_NAT_Y:
+  case OPID_TILE_CONTINENT:
   case OPID_TILE_TERRAIN:
   case OPID_TILE_RESOURCE:
   case OPID_TILE_XY:
@@ -2164,6 +2189,11 @@ static void objprop_refresh_widget(struct objprop *op,
     break;
 
   case OPID_TILE_INDEX:
+  case OPID_TILE_X:
+  case OPID_TILE_Y:
+  case OPID_TILE_NAT_X:
+  case OPID_TILE_NAT_Y:
+  case OPID_TILE_CONTINENT:
   case OPID_UNIT_ID:
   case OPID_CITY_ID:
     label = objprop_get_child_widget(op, "value-label");
@@ -2931,7 +2961,21 @@ static void property_page_setup_objprops(struct property_page *pp)
             OPF_IN_LISTVIEW | OPF_HAS_WIDGET, VALTYPE_STRING);
     ADDPROP(OPID_TILE_INDEX, _("Index"),
             OPF_IN_LISTVIEW | OPF_HAS_WIDGET, VALTYPE_INT);
-    ADDPROP(OPID_TILE_XY, _("X,Y"),
+    ADDPROP(OPID_TILE_X, Q_("?coordinate:X"),
+            OPF_IN_LISTVIEW | OPF_HAS_WIDGET, VALTYPE_INT);
+    ADDPROP(OPID_TILE_Y, Q_("?coordinate:Y"),
+            OPF_IN_LISTVIEW | OPF_HAS_WIDGET, VALTYPE_INT);
+    /* TRANS: The coordinate X in native coordinates.
+     * The freeciv coordinate system is described in doc/HACKING. */
+    ADDPROP(OPID_TILE_NAT_X, _("NAT_X"),
+            OPF_IN_LISTVIEW | OPF_HAS_WIDGET, VALTYPE_INT);
+    /* TRANS: The coordinate Y in native coordinates.
+     * The freeciv coordinate system is described in doc/HACKING. */
+    ADDPROP(OPID_TILE_NAT_Y, _("NAT_Y"),
+            OPF_IN_LISTVIEW | OPF_HAS_WIDGET, VALTYPE_INT);
+    ADDPROP(OPID_TILE_CONTINENT, _("Continent"),
+            OPF_IN_LISTVIEW | OPF_HAS_WIDGET, VALTYPE_INT);
+    ADDPROP(OPID_TILE_XY, Q_("?coordinates:X,Y"),
             OPF_IN_LISTVIEW | OPF_HAS_WIDGET, VALTYPE_STRING);
     ADDPROP(OPID_TILE_SPECIALS, _("Specials"), OPF_IN_LISTVIEW
             | OPF_HAS_WIDGET | OPF_EDITABLE, VALTYPE_BV_SPECIAL);
@@ -2946,7 +2990,7 @@ static void property_page_setup_objprops(struct property_page *pp)
             OPF_IN_LISTVIEW | OPF_HAS_WIDGET, VALTYPE_STRING);
     ADDPROP(OPID_UNIT_ID, _("ID"),
             OPF_IN_LISTVIEW | OPF_HAS_WIDGET, VALTYPE_INT);
-    ADDPROP(OPID_UNIT_XY, _("X,Y"),
+    ADDPROP(OPID_UNIT_XY, Q_("?coordinates:X,Y"),
             OPF_IN_LISTVIEW | OPF_HAS_WIDGET, VALTYPE_STRING);
     ADDPROP(OPID_UNIT_MOVES_LEFT, _("Moves Left"),
             OPF_IN_LISTVIEW | OPF_HAS_WIDGET | OPF_EDITABLE, VALTYPE_INT);
@@ -2961,7 +3005,7 @@ static void property_page_setup_objprops(struct property_page *pp)
             OPF_HAS_WIDGET, VALTYPE_STRING);
     ADDPROP(OPID_CITY_ID, _("ID"),
             OPF_IN_LISTVIEW | OPF_HAS_WIDGET, VALTYPE_INT);
-    ADDPROP(OPID_CITY_XY, _("X,Y"),
+    ADDPROP(OPID_CITY_XY, Q_("?coordinates:X,Y"),
             OPF_IN_LISTVIEW | OPF_HAS_WIDGET, VALTYPE_STRING);
     ADDPROP(OPID_CITY_SIZE, _("Size"),
             OPF_IN_LISTVIEW | OPF_HAS_WIDGET | OPF_EDITABLE, VALTYPE_INT);
_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to