Update of /cvsroot/netrek/client/netrekxp/src
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv1181/src

Modified Files:
	input.c planetlist.c playerlist.c util.c 
Log Message:
Te planet list window can now be used with info, lock and certain RCDs.
In other words, you can lock onto planets through the planet list window,
and send planet-related RCDs  through the window as well.
Left clicking the planet list window will toggle between a sorted and
unsorted planet list, right clicking will close the planet window.  Team's
starting planets are now separated by a white line.
Sorting functionality to come in a later patch.

Index: playerlist.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/playerlist.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- playerlist.c	14 Mar 2007 18:36:07 -0000	1.11
+++ playerlist.c	16 Mar 2007 01:44:24 -0000	1.12
@@ -1506,6 +1506,6 @@
         }
     }
 
-	// We didn't find player or its state is wrong
+    // We didn't find player or its state is wrong
     return (-1);
 }
\ No newline at end of file

Index: util.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/util.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- util.c	7 May 2006 16:59:27 -0000	1.3
+++ util.c	16 Mar 2007 01:44:24 -0000	1.4
@@ -67,6 +67,17 @@
         targ = &_targ;
         return (targ);
     }
+    if (ww == planetw)
+    {
+        /* Here we will get planet from planet list */
+        static struct obtype _targ;
+        g_x = (x - 1) / W_Textwidth;
+        g_y = (y - 4) / W_Textheight - 2; // Two header lines
+        _targ.o_type = PLANETTYPE;
+        _targ.o_num = GetPlanetFromPlist (g_x, g_y);
+        targ = &_targ;
+        return (targ);
+    }
 
     if (ww == mapw)
     {

Index: input.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/input.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- input.c	14 Mar 2007 18:36:07 -0000	1.27
+++ input.c	16 Mar 2007 01:44:24 -0000	1.28
@@ -1210,7 +1210,7 @@
                                  * fastquit! */
 
     if (data->Window != mapw && data->Window != w && data->Window != infow
-        && data->Window != playerw)
+        && data->Window != playerw && data->Window != planetw)
         return;
 
     key = data->key;
@@ -1231,6 +1231,12 @@
             data->x = x;
             data->y = y;
         }
+        else if (findMouseInWin (&x, &y, planetw))
+        {                       /* planet list window */
+            data->Window = planetw;
+            data->x = x;
+            data->y = y;
+        }
         else if (findMouseInWin (&x, &y, playerw))
         {                       /* player list window */
             data->Window = playerw;
@@ -1386,9 +1392,9 @@
         return;
     }
 
-    /* If the mouse is in player list window - enable info and lock */
-    /* This part has to be after macros, so point macros will work on */
-    /* the players from playerlist */
+    /* If the mouse is in player list window - enable info and lock, as
+       well as certain RCDs.  This part has to be after macros, so the RCDs
+       will work on the players from this list */
     if (data->Window == playerw)
     {
         switch (key)
@@ -1410,6 +1416,29 @@
                 return;
         }
     }
+    /* If the mouse is in planet list window - enable info and lock, as
+       well as certain RCDs.  This part has to be after macros, so that RCDs
+       will work on the planets from this list */
+    if (data->Window == planetw)
+    {
+        switch (key)
+        {
+            case 'i':
+            case 'I':
+            case 'l':
+            case 194: /* ^b */
+            case 195: /* ^c */
+            case 204: /* ^l */
+            case 205: /* ^m */
+            case 212: /* ^t */
+            case 144: /* ^0 */
+            case 145: /* ^1 */
+            case 150: /* ^6 */
+                break;
+            default:
+                return;
+        }
+    }
 
 #ifdef MOTION_MOUSE
     if ((data->type == W_EV_CM_BUTTON) &&       /*  KOC - 10/18/95     */
@@ -1496,10 +1525,31 @@
 #endif
 
     if (data->Window != w && data->Window != mapw
-        && data->Window != infow
-		&& data->Window != playerw)
+        && data->Window != infow && data->Window != playerw
+        && data->Window != planetw)
         return;
     
+    if (data->Window == planetw)
+    {
+    	int x, y;
+    	
+    	if (findMouseInWin (&x, &y, planetw))
+    	{
+    	    data->Window = planetw;
+            data->x = x;
+            data->y = y;
+        }
+        if (data->key == W_LBUTTON)
+        {
+            sortPlanets = !sortPlanets;
+            updatePlanetw();
+        }
+        else if (data->key == W_RBUTTON)
+            W_UnmapWindow (planetw);
+
+        return;
+    }
+
     if (data->Window == playerw)
     {
     	int x, y;

Index: planetlist.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/planetlist.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- planetlist.c	12 Dec 2006 04:47:08 -0000	1.4
+++ planetlist.c	16 Mar 2007 01:44:24 -0000	1.5
@@ -32,6 +32,8 @@
     "ORI"
 };
 
+int planet_row[MAXPLANETS];  /* planets location in current plist */
+
 /* * Open a window which contains all the planets and their current *
  * statistics.  Players will not know about planets that their team * has not
  * orbited. */
@@ -42,8 +44,10 @@
     char buf[BUFSIZ];
 
     /* W_ClearWindow(planetw); */
-    (void) sprintf (buf, "Planet Name      own armies REPAIR FUEL AGRI CORE info");
+    (void) sprintf (buf, "Planet Name      Own Armies REPAIR FUEL AGRI CORE Info");
     W_WriteText (planetw, 2, 1, textColor, buf, strlen (buf), W_RegularFont);
+    /* Underline heading */
+    W_MakeLine (planetw, 2, 2 + 2 * W_Textheight, 2 + 57 * W_Textwidth , 2 + 2 * W_Textheight, W_White);
     /* Initialize planet window string array */
     for (i = 0; i < MAXPLANETS; i++)
         strcpy(priorplanets[i], "");
@@ -60,6 +64,9 @@
 
     for (i = 0, j = &planets[i]; i < MAXPLANETS; i++, j++)
     {
+        /* Fill planet_row to get right planet placement in the list */
+        planet_row[i] = j->pl_no;
+
         if (j->pl_info & me->p_team)
         {
             (void) sprintf (buf, "%-16s %3s %3d    %6s %4s %4s %4s %c%c%c%c",
@@ -93,5 +100,34 @@
                 strcpy(priorplanets[i], buf);
             } 
         }
+        if (i != 0 && (i % 10) == 0)
+        {
+              W_MakeLine (planetw,
+                          2 + 18 * W_Textwidth,
+                          2 + W_Textheight * (i+2),
+                          2 + 39 * W_Textwidth,
+                          2 + W_Textheight * (i+2),
+                          W_White);
+        }
+    }
+}
+
+int
+GetPlanetFromPlist (int x, int y)
+{
+    int i;
+    int planet_no;
+
+    /* Let's find what planet sits in poition y in the list */
+    for (i = 0; i < MAXPLANETS; i++)
+    {
+        if (planet_row[i] == y)
+        {
+            planet_no = i;
+            return planet_no;
+        }
     }
+
+    // We didn't find planet
+    return (-1);
 }
\ No newline at end of file