00001
00008 #include <gtk/gtk.h>
00009 #include <zakdef.h>
00010 #include <stdio.h>
00011 #include <globals.h>
00012 #include <ui.h>
00013 #include <zonemon.h>
00014 #include <simulation.h>
00015 #include <zonestrings.h>
00016 #include <uibits.h>
00017
00019 static struct tag_things {
00020 GtkWidget *win;
00021 GtkWidget *name;
00022 GtkWidget *value;
00023 GtkWidget *density;
00024 GtkWidget *pollution;
00025 GtkWidget *crime;
00026 GtkWidget *power;
00027 GtkWidget *painted;
00028 GtkWidget *water;
00030 UInt16 old_xpos;
00031 UInt16 old_ypos;
00032 } ttg;
00033
00040 void
00041 hoverUpdate(UInt16 xpos, UInt16 ypos, int force)
00042 {
00043 welem_t world;
00044 selem_t status;
00045 char text[1024];
00046
00047 if (ttg.win == NULL)
00048 return;
00049
00050 LockZone(lz_world);
00051 getWorldAndFlag(WORLDPOS(xpos, ypos), &world, &status);
00052 UnlockZone(lz_world);
00053
00054 if ((ttg.old_xpos == xpos) && (ttg.old_ypos == ypos))
00055 if (!force) return;
00056
00057 ttg.old_xpos = xpos;
00058 ttg.old_ypos = ypos;
00059
00060 sprintf(text, "Status (%d, %d)", (int)xpos, (int)ypos);
00061 gtk_window_set_title(GTK_WINDOW(ttg.win), text);
00062 if (-1 == getFieldString(world, text, 1024)) {
00063 sprintf(text, "type == %x(?)", (int)world);
00064 }
00065 gtk_label_set_text(GTK_LABEL(ttg.name), text);
00066 (void) getFieldValue(world, text, 1024);
00067 gtk_label_set_text(GTK_LABEL(ttg.value), text);
00068 (void) getFieldDensity(world, text, 1024);
00069 gtk_label_set_text(GTK_LABEL(ttg.density), text);
00070 gtk_widget_hide(ttg.power);
00071 if (CarryPower(world)) {
00072 if (status & POWEREDBIT)
00073 gtk_label_set_text(GTK_LABEL(ttg.power), "Pow+");
00074 else
00075 gtk_label_set_text(GTK_LABEL(ttg.power), "-Pow");
00076 gtk_widget_show(ttg.power);
00077 }
00078 gtk_widget_hide(ttg.water);
00079 if (CarryWater(world)) {
00080 if (status & WATEREDBIT)
00081 gtk_label_set_text(GTK_LABEL(ttg.water), "Wat+");
00082 else
00083 gtk_label_set_text(GTK_LABEL(ttg.water), "-Wat");
00084 gtk_widget_show(ttg.water);
00085 }
00086 if (status & PAINTEDBIT)
00087 gtk_label_set_text(GTK_LABEL(ttg.painted), "HAS");
00088 else
00089 gtk_label_set_text(GTK_LABEL(ttg.painted), "---");
00090 }
00091
00092 static gint
00093 hoverClose(GtkWidget *wid __attribute__((unused)),
00094 gpointer data __attribute__((unused)))
00095 {
00096 ttg.win = NULL;
00097 return (FALSE);
00098 }
00099
00100 void
00101 hoverShow(void)
00102 {
00103 GtkLabel *lab;
00104 GtkTable *table;
00105
00106 if (ttg.win != NULL) {
00107 gtk_widget_show(ttg.win);
00108 return;
00109 }
00110
00111 ttg.win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
00112 gtk_window_set_title(GTK_WINDOW(ttg.win), "Status");
00113 gtk_window_set_skip_taskbar_hint(GTK_WINDOW(ttg.win), TRUE);
00114 g_signal_connect(G_OBJECT(ttg.win), "delete_event",
00115 G_CALLBACK(hoverClose), NULL);
00116
00117 table = GTK_TABLE(gtk_table_new(6, 3, TRUE));
00118 lab = GTK_LABEL(create_right_label("Type:"));
00119 gtk_table_attach(table, GTK_WIDGET(lab), 0, 1, 0, 1,
00120 GTK_FILL, GTK_FILL, 0, 0);
00121 ttg.name = create_left_label("-");
00122 gtk_table_attach(table, ttg.name, 1, 3, 0, 1, GTK_FILL, GTK_FILL,
00123 0, 0);
00124
00125 lab = GTK_LABEL(create_right_label("Value:"));
00126 gtk_label_set_justify(lab, GTK_JUSTIFY_RIGHT);
00127 gtk_table_attach(table, GTK_WIDGET(lab), 0, 1, 1, 2,
00128 GTK_FILL, GTK_FILL, 0, 0);
00129 ttg.value = create_left_label("-");
00130 gtk_table_attach(table, ttg.value, 1, 3, 1, 2, GTK_FILL, GTK_FILL,
00131 0, 0);
00132
00133 lab = GTK_LABEL(create_right_label("Density:"));
00134 gtk_table_attach(table, GTK_WIDGET(lab), 0, 1, 2, 3,
00135 GTK_FILL, GTK_FILL, 0, 0);
00136 ttg.density = create_left_label("-");
00137 gtk_table_attach(table, ttg.density, 1, 3, 2, 3,
00138 GTK_FILL, GTK_FILL, 0, 0);
00139
00140 lab = GTK_LABEL(create_right_label("Pollution:"));
00141 gtk_table_attach(table, GTK_WIDGET(lab), 0, 1, 3, 4,
00142 GTK_FILL, GTK_FILL, 0, 0);
00143 ttg.pollution = create_left_label("-");
00144 gtk_table_attach(table, ttg.pollution, 1, 3, 3, 4,
00145 GTK_FILL, GTK_FILL, 0, 0);
00146
00147 lab = GTK_LABEL(create_right_label("Crime:"));
00148 gtk_table_attach(table, GTK_WIDGET(lab), 0, 1, 4, 5,
00149 GTK_FILL, GTK_FILL, 0, 0);
00150 ttg.crime = create_left_label("-");
00151 gtk_table_attach(table, ttg.crime, 1, 3, 4, 5,
00152 GTK_FILL, GTK_FILL, 0, 0);
00153
00154 ttg.power = gtk_label_new("-");
00155 gtk_table_attach(table, ttg.power, 0, 1, 5, 6,
00156 GTK_EXPAND, GTK_FILL, 0, 0);
00157
00158 ttg.painted = gtk_label_new("-");
00159 gtk_table_attach(table, ttg.painted, 1, 2, 5, 6,
00160 GTK_EXPAND, GTK_FILL, 0, 0);
00161 ttg.water = gtk_label_new("-");
00162 gtk_table_attach(table, ttg.water, 2, 3, 5, 6,
00163 GTK_EXPAND, GTK_FILL, 0, 0);
00164
00165 gtk_container_add(GTK_CONTAINER(ttg.win), GTK_WIDGET(table));
00166
00167 gtk_window_set_policy(GTK_WINDOW(ttg.win), FALSE, TRUE, FALSE);
00168 gtk_widget_show_all(GTK_WIDGET(table));
00169 gtk_widget_show(ttg.win);
00170 }
00171