foxygit / doom Log in
commit 1531993b0570f1a0af92a0238f4b871d233fa46f
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Mon May 29 19:54:11 2006 +0000
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Mon May 29 19:54:11 2006 +0000

    Allow struts to force height as well as width. Hide "start game" button
    for players which are not the game controller.

    Subversion-branch: /trunk/chocolate-doom
    Subversion-revision: 541
---
 src/net_gui.c                 | 29 +++++++++++++++++++----------
 textscreen/examples/guitest.c |  3 ++-
 textscreen/txt_strut.c        |  5 +++--
 textscreen/txt_strut.h        |  5 +++--
 textscreen/txt_table.c        |  2 +-
 5 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/src/net_gui.c b/src/net_gui.c
index 21000aa2..fa64b9d8 100644
--- a/src/net_gui.c
+++ b/src/net_gui.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*-
 //-----------------------------------------------------------------------------
 //
-// $Id: net_gui.c 539 2006-05-29 19:22:51Z fraggle $
+// $Id: net_gui.c 541 2006-05-29 19:54:11Z fraggle $
 //
 // Copyright(C) 2005 Simon Howard
 //
@@ -98,6 +98,7 @@
 #include "txt_table.h"
 #include "txt_window.h"

+static txt_window_t *window;
 static txt_label_t *player_labels[MAXPLAYERS];
 static txt_label_t *ip_labels[MAXPLAYERS];

@@ -115,10 +116,8 @@ static void StartGame(TXT_UNCAST_ARG(widget), void *unused)
 static void BuildGUI(void)
 {
     char buf[50];
-    txt_window_t *window;
     txt_table_t *table;
     txt_window_action_t *cancel;
-    txt_window_action_t *startgame;
     int i;

     TXT_SetDesktopTitle(PACKAGE_STRING);
@@ -126,13 +125,12 @@ static void BuildGUI(void)
     window = TXT_NewWindow("Waiting for game start...");
     table = TXT_NewTable(3);
     TXT_AddWidget(window, table);
-    TXT_AddWidget(window, NULL);

     // Add spacers

     TXT_AddWidget(table, NULL);
-    TXT_AddWidget(table, TXT_NewStrut(25));
-    TXT_AddWidget(table, TXT_NewStrut(17));
+    TXT_AddWidget(table, TXT_NewStrut(25, 1));
+    TXT_AddWidget(table, TXT_NewStrut(17, 1));

     // Player labels

@@ -146,18 +144,17 @@ static void BuildGUI(void)
         TXT_AddWidget(table, ip_labels[i]);
     }

+    TXT_AddWidget(window, TXT_NewStrut(0, 1));
+
     cancel = TXT_NewWindowAction(KEY_ESCAPE, "Cancel");
     TXT_SignalConnect(cancel, "pressed", EscapePressed, NULL);
-    startgame = TXT_NewWindowAction(' ', "Start game");
-    TXT_SignalConnect(startgame, "pressed", StartGame, NULL);

     TXT_SetWindowAction(window, TXT_HORIZ_LEFT, cancel);
-    TXT_SetWindowAction(window, TXT_HORIZ_RIGHT, startgame);
 }

 static void UpdateGUI(void)
 {
-    char buf[50];
+    txt_window_action_t *startgame;
     int i;

     for (i=0; i<MAXPLAYERS; ++i)
@@ -183,6 +180,18 @@ static void UpdateGUI(void)
             TXT_SetLabel(ip_labels[i], "");
         }
     }
+
+    if (net_client_controller)
+    {
+        startgame = TXT_NewWindowAction(' ', "Start game");
+        TXT_SignalConnect(startgame, "pressed", StartGame, NULL);
+    }
+    else
+    {
+        startgame = NULL;
+    }
+
+    TXT_SetWindowAction(window, TXT_HORIZ_RIGHT, startgame);
 }

 void NET_WaitForStart(void)
diff --git a/textscreen/examples/guitest.c b/textscreen/examples/guitest.c
index 23df5282..73334b47 100644
--- a/textscreen/examples/guitest.c
+++ b/textscreen/examples/guitest.c
@@ -13,6 +13,7 @@
 #include "txt_label.h"
 #include "txt_radiobutton.h"
 #include "txt_separator.h"
+#include "txt_strut.h"
 #include "txt_table.h"
 #include "txt_window.h"

@@ -104,7 +105,7 @@ void SetupWindow(void)
         TXT_AddWidget(table, TXT_NewButton(buf));
     }

-    TXT_AddWidget(window, TXT_NewLabel(""));
+    TXT_AddWidget(window, TXT_NewStrut(0, 1));
     value_label = TXT_NewLabel("");
     TXT_AddWidget(window, value_label);

diff --git a/textscreen/txt_strut.c b/textscreen/txt_strut.c
index 47e80130..0d827b5a 100644
--- a/textscreen/txt_strut.c
+++ b/textscreen/txt_strut.c
@@ -16,7 +16,7 @@ static void TXT_StrutSizeCalc(TXT_UNCAST_ARG(strut), int *w, int *h)
     // Minimum width is the string length + two spaces for padding

     *w = strut->width;
-    *h = 0;
+    *h = strut->height;
 }

 static void TXT_StrutDrawer(TXT_UNCAST_ARG(strut), int w, int selected)
@@ -40,7 +40,7 @@ txt_widget_class_t txt_strut_class =
     TXT_StrutDestructor,
 };

-txt_strut_t *TXT_NewStrut(int width)
+txt_strut_t *TXT_NewStrut(int width, int height)
 {
     txt_strut_t *strut;

@@ -49,6 +49,7 @@ txt_strut_t *TXT_NewStrut(int width)
     TXT_InitWidget(strut, &txt_strut_class);
     strut->widget.selectable = 0;
     strut->width = width;
+    strut->height = height;

     return strut;
 }
diff --git a/textscreen/txt_strut.h b/textscreen/txt_strut.h
index 5bf7b7e7..3f45b8db 100644
--- a/textscreen/txt_strut.h
+++ b/textscreen/txt_strut.h
@@ -30,7 +30,7 @@ typedef struct txt_strut_s txt_strut_t;
 #include "txt_widget.h"

 //
-// A strut is used to force a table to a minimum width.  It is not
+// A strut is used to force a table to a minimum width/height.  It is not
 // visible but it takes up space.
 //

@@ -38,9 +38,10 @@ struct txt_strut_s
 {
     txt_widget_t widget;
     int width;
+    int height;
 };

-txt_strut_t *TXT_NewStrut(int width);
+txt_strut_t *TXT_NewStrut(int width, int height);

 #endif /* #ifndef TXT_STRUT_H */

diff --git a/textscreen/txt_table.c b/textscreen/txt_table.c
index b2055825..20c74b53 100644
--- a/textscreen/txt_table.c
+++ b/textscreen/txt_table.c
@@ -92,7 +92,7 @@ static void CalcRowColSizes(txt_table_t *table,
                 // Empty spacer if widget is NULL

                 ww = 0;
-                wh = 1;
+                wh = 0;
             }

             if (wh > row_heights[y])