00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00024 #include <gtk/gtk.h>
00025
00026 #include "application-data.h"
00027 #include "frame-private.h"
00028 #include "frame-table.h"
00029 #include "table-utilities.h"
00030
00031
00032
00033 gboolean hidden_bar_add_frame (frame_table_t *tab, frame_t *f)
00034 {
00035 g_return_val_if_fail (tab != NULL, FALSE);
00036 g_return_val_if_fail (f != NULL, FALSE);
00037
00038 const gchar *sizelabel = NULL;
00039 gchar *timelabel = NULL;
00040 gchar *tooltip = NULL;
00041 GtkToolItem *item = NULL;
00042
00043 item = gtk_tool_button_new (NULL, f->type);
00044 gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "synema-window");
00045 gtk_toolbar_insert (GTK_TOOLBAR (tab->hidden_bar), item, -1);
00046 gtk_widget_show (GTK_WIDGET (item));
00047
00048 switch (f->size) {
00049 case NORMAL:
00050 sizelabel = NORMAL_LABEL;
00051 break;
00052 case LARGE:
00053 sizelabel = LARGE_LABEL;
00054 break;
00055 case FULL:
00056 sizelabel = FULL_LABEL;
00057 break;
00058 default:
00059 sizelabel = NULL;
00060 }
00061
00062 timelabel = time_period_get_display_name (&f->display_period, TRUE);
00063 tooltip = g_strdup_printf ("<big>\t%s</big>\n\n<b>Machine:</b>\t\t %s\n<b>Time Period:</b>\t %s\n<b>Size:</b>\t\t\t %s",
00064 f->get_display_name (f),
00065 machine_get_display_name (f->display_machine),
00066 timelabel,
00067 sizelabel);
00068 gtk_tool_item_set_tooltip_markup (item, tooltip);
00069 g_free (tooltip);
00070 g_free (timelabel);
00071
00072 f->hidden_item = item;
00073
00074 return TRUE;
00075 }
00076
00077
00078
00079 gboolean hidden_bar_remove_frame (frame_table_t *tab, frame_t *f)
00080 {
00081 g_return_val_if_fail (tab != NULL, FALSE);
00082 g_return_val_if_fail (f != NULL, FALSE);
00083 g_return_val_if_fail (f->hidden_item != NULL, FALSE);
00084
00085 gtk_container_remove (GTK_CONTAINER (tab->hidden_bar), GTK_WIDGET (f->hidden_item));
00086 f->hidden_item = NULL;
00087
00088 return TRUE;
00089 }
00090
00091
00092
00093 gint frame_table_list_cmp_by_position (gconstpointer a, gconstpointer b)
00094 {
00095 return ((frame_table_t *)a)->position - ((frame_table_t *)b)->position;
00096 }
00097
00098
00099
00102 static void frame_table_toggle_frame_hidden_flag (frame_table_t *tab)
00103 {
00104 if (tab == NULL)
00105 return;
00106
00107 GList *iter = tab->frames_list;
00108 if (iter) {
00109 do {
00110 frame_t *frame = iter->data;
00111 frame->hidden ^= TRUE;
00112 } while ((iter = g_list_next (iter)) != NULL);
00113 }
00114 }
00115
00116
00117
00118 void frame_table_hide_frames (frame_table_t *tab)
00119 {
00120 frame_table_toggle_frame_hidden_flag (tab);
00121 }
00122
00123
00124
00125 void frame_table_show_frames (frame_table_t *tab)
00126 {
00127 frame_table_toggle_frame_hidden_flag (tab);
00128 }
00129
00130
00131
00132 int frame_table_add (frame_table_t *tab, frame_t *newelem)
00133 {
00134 g_return_val_if_fail (tab != NULL, -1);
00135 g_return_val_if_fail (newelem != NULL, -2);
00136
00137 frame_set_id (newelem, tab->frames_list);
00138 tab->frames_list = g_list_prepend (tab->frames_list, newelem);
00139 newelem->parent = tab;
00140
00141 return table_add (tab, newelem);
00142 }
00143
00144
00145
00146 int frame_table_add_with_coords (frame_table_t *tab, frame_t *newelem, guint left, guint top)
00147 {
00148 g_return_val_if_fail (tab != NULL, -1);
00149 g_return_val_if_fail (newelem != NULL, -2);
00150
00151 frame_set_id (newelem, tab->frames_list);
00152 tab->frames_list = g_list_prepend (tab->frames_list, newelem);
00153 newelem->parent = tab;
00154
00155 return table_add_with_coords (tab, newelem, left, top);
00156 }
00157
00158
00159
00160 int frame_table_remove (frame_table_t *tab, frame_t *elem)
00161 {
00162 g_return_val_if_fail (tab != NULL, -1);
00163 g_return_val_if_fail (elem != NULL, -2);
00164
00165 GList *iter;
00166
00167 iter = g_list_find (tab->frames_list, elem);
00168
00169 if (iter) {
00170 int x = table_remove (tab, elem);
00171 elem->parent = NULL;
00172 frame_free (elem);
00173 tab->frames_list = g_list_remove (tab->frames_list, elem);
00174 return x;
00175 } else {
00176 return -1;
00177 }
00178 }
00179
00180
00181
00191 static void frame_free_func (gpointer data, gpointer user_data)
00192 {
00193 frame_free ((frame_t *) data);
00194 }
00195
00196
00197
00198 void frame_list_free (GList *list)
00199 {
00200 if (list == NULL)
00201 return;
00202
00203 g_list_foreach (list, frame_free_func, NULL);
00204 g_list_free (list);
00205 }
00206
00207
00208
00209 void frame_table_free (frame_table_t *tab)
00210 {
00211 g_free (tab->slot_data);
00212 frame_list_free (tab->frames_list);
00213
00214 g_free (tab);
00215 }
00216
00217
00218
00219 frame_table_t *frame_table_new ()
00220 {
00221 frame_table_t *tab = g_malloc (sizeof (frame_table_t));
00222 gint i;
00223 GtkToolItem *item = gtk_tool_item_new ();
00224
00225 tab->position = -1;
00226
00227
00228 tab->table_box = gtk_hbox_new (FALSE, 0);
00229
00230
00231 tab->table = gtk_table_new (1, 1, FALSE);
00232 gtk_table_set_row_spacings (GTK_TABLE (tab->table), 10);
00233 gtk_table_set_col_spacings (GTK_TABLE (tab->table), 10);
00234 gtk_table_set_homogeneous (GTK_TABLE (tab->table), TRUE);
00235 gtk_box_pack_start (GTK_BOX (tab->table_box), tab->table, TRUE, TRUE, 0);
00236
00237
00238 tab->hidden_bar = gtk_toolbar_new ();
00239 gtk_toolbar_set_orientation (GTK_TOOLBAR (tab->hidden_bar), GTK_ORIENTATION_VERTICAL);
00240
00241 gtk_tool_item_set_expand (item, TRUE);
00242 gtk_toolbar_insert (GTK_TOOLBAR (tab->hidden_bar), item, 0);
00243 gtk_box_pack_start (GTK_BOX (tab->table_box), tab->hidden_bar, FALSE, TRUE, 0);
00244
00245 for (i=0; i<LAST_SIZE_RATIO_T; i++)
00246 tab->children_size[i] = 0;
00247
00248 tab->slot_data = g_malloc (sizeof (frame_t*));
00249 tab->slot_data[0] = NULL;
00250
00251 tab->frames_list = NULL;
00252
00253 return tab;
00254 }