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