00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00026
00027
00028
00029
00030
00031 #include <gtk/gtk.h>
00032 #include <string.h>
00033 #include <liberdm/display.h>
00034 #include "languages.h"
00035 #include "logging.h"
00036 #include "view.h"
00037 #include "displayUpdate.h"
00038
00039
00040 static GtkWidget* g_error_background;
00041 static GtkWidget* g_error_icon;
00042 static GtkWidget* g_error_text;
00043 static GtkWidget* g_error_confirm;
00044 static GtkWidget* g_progress;
00045 static GtkWidget* g_info;
00046
00047 static int g_progressCount = 1;
00048
00049
00050 gboolean view_expose_event(GtkWidget* widget, GdkEventExpose* event, gpointer data);
00051 gboolean on_error_button_pressed(GtkWidget* widget, GdkEventButton* event, gpointer data);
00052
00053 static on_error_confirmed_t* g_on_error_confirmed = NULL;
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 void viewInit(GtkWidget * topLevelWindow)
00079 {
00080 GtkWidget *hbox;
00081 GtkWidget *alignment;
00082 GtkWidget *vbox;
00083 GtkWidget *viewbackground;
00084 GtkWidget *textbackground;
00085 GtkWidget *error_vbox;
00086 GtkWidget *widget;
00087
00088 DL_LOGPRINTF("entry");
00089
00090
00091 widget = gtk_event_box_new();
00092 gtk_widget_set_name(widget, "downloadMgr_background");
00093 gtk_container_add(GTK_CONTAINER(topLevelWindow), widget);
00094 viewbackground = widget;
00095
00096 g_signal_connect(G_OBJECT(viewbackground), "expose-event", G_CALLBACK(view_expose_event), NULL);
00097
00098
00099 widget = gtk_alignment_new(0, 0, 1, 1);
00100 gtk_alignment_set_padding(GTK_ALIGNMENT(widget), TEXT_BORDER_TOP, TEXT_BORDER_BOTTOM, TEXT_BORDER_LEFT, TEXT_BORDER_RIGHT);
00101 gtk_container_add(GTK_CONTAINER(viewbackground), widget);
00102 alignment = widget;
00103
00104
00105 vbox = gtk_vbox_new(FALSE, VBOX_SPACING);
00106 gtk_container_add(GTK_CONTAINER(alignment), vbox);
00107
00108
00109 widget = gtk_event_box_new();
00110 gtk_widget_set_name(widget, "downloadMgr_textbackground");
00111 gtk_widget_set_size_request(widget, TEXT_BG_WIDTH, TEXT_BG_HEIGHT);
00112 gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, FALSE, 0);
00113 textbackground = widget;
00114
00115
00116 hbox = gtk_hbox_new(FALSE, VIEW_TEXT_SPACING);
00117 gtk_widget_set_size_request(hbox, TEXT_BG_WIDTH, TEXT_BG_HEIGHT);
00118 gtk_container_set_border_width(GTK_CONTAINER(hbox), HBOX_TEXT_BORDER);
00119 gtk_container_add(GTK_CONTAINER(textbackground), hbox);
00120
00121
00122 widget = gtk_label_new("");
00123 gtk_widget_set_name(widget, "downloadMgr_info_text");
00124 gtk_widget_set_size_request(widget, INFO_TEXT_WIDTH, (-1));
00125 gtk_label_set_ellipsize(GTK_LABEL(widget), PANGO_ELLIPSIZE_END);
00126 gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
00127 gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);
00128 g_info = widget;
00129
00130
00131 widget = gtk_label_new("");
00132 gtk_widget_set_name(widget, "downloadMgr_progress_text");
00133 gtk_label_set_ellipsize(GTK_LABEL(widget), PANGO_ELLIPSIZE_END);
00134 gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
00135 gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0);
00136 g_progress = widget;
00137
00138
00139
00140 widget = gtk_event_box_new();
00141 gtk_widget_set_name(widget, "downloadMgr_error_background");
00142 gtk_widget_set_size_request(widget, ERROR_BG_WIDTH, ERROR_BG_HEIGHT);
00143 gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, FALSE, 0);
00144 g_error_background = widget;
00145
00146 g_signal_connect(G_OBJECT(g_error_background), "button-press-event", G_CALLBACK(on_error_button_pressed), NULL);
00147
00148
00149 hbox = gtk_hbox_new(FALSE, VIEW_TEXT_SPACING);
00150 gtk_container_set_border_width(GTK_CONTAINER(hbox), HBOX_TEXT_BORDER);
00151 gtk_container_add(GTK_CONTAINER(g_error_background), hbox);
00152
00153
00154 widget = gtk_alignment_new(0.5, 0.5, 0, 0);
00155 gtk_widget_set_size_request(widget, ERRORICON_BG_WIDTH, ERRORICON_BG_HEIGHT);
00156 gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);
00157 alignment = widget;
00158
00159
00160 widget = gtk_event_box_new();
00161 gtk_widget_set_name(widget, "downloadMgr_error_icon");
00162 gtk_widget_set_size_request(widget, ERRORICON_IMG_WIDTH, ERRORICON_IMG_HEIGHT);
00163 gtk_container_add(GTK_CONTAINER(alignment), widget);
00164 g_error_icon = widget;
00165
00166
00167 widget = gtk_vbox_new(FALSE, 0);
00168 gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);
00169 error_vbox = widget;
00170
00171
00172 widget = gtk_label_new("");
00173 gtk_widget_set_name(widget, "downloadMgr_error_text");
00174 gtk_widget_set_size_request(widget, ERRORTEXT_WIDTH, ERRORTEXT_HEIGHT);
00175 gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.0);
00176 gtk_label_set_single_line_mode(GTK_LABEL(widget), FALSE);
00177 gtk_label_set_line_wrap(GTK_LABEL(widget), TRUE);
00178 gtk_box_pack_start(GTK_BOX(error_vbox), widget, FALSE, FALSE, 0);
00179 g_error_text = widget;
00180
00181
00182 hbox = gtk_hbox_new(FALSE, 0);
00183 gtk_container_set_border_width(GTK_CONTAINER(hbox), 0);
00184 gtk_container_add(GTK_CONTAINER(error_vbox), hbox);
00185
00186
00187 widget = gtk_label_new("");
00188 gtk_widget_set_name(widget, "downloadMgr_error_confirm");
00189 gtk_widget_set_size_request(widget, ERRORCONFIRM_WIDTH, -1);
00190 gtk_misc_set_alignment(GTK_MISC(widget), 0.5, 0.5);
00191 gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 0);
00192 g_error_confirm = widget;
00193
00194
00195
00196 gtk_widget_show_all(viewbackground);
00197 gdk_flush();
00198 gtk_widget_hide(g_error_background);
00199 }
00200
00201
00202 void viewSetText(void)
00203 {
00204 gtk_label_set_text(GTK_LABEL(g_error_confirm), _("Please click here to confirm."));
00205 }
00206
00207
00208
00209 void viewShowInfo(char *info)
00210 {
00211 DL_LOGPRINTF("entry %s", (info == NULL) ? "NULL" : info);
00212
00213 gtk_label_set_text(GTK_LABEL(g_info), info);
00214
00215 gtk_widget_show(g_info);
00216 display_update_request_screen_refresh(TEXT_UPDATE_LEVEL, (gpointer) WAVEFORM_TYPING);
00217 }
00218
00219
00220 void viewHideInfo(void)
00221 {
00222 DL_LOGPRINTF("entry");
00223 gtk_label_set_text(GTK_LABEL(g_info), "");
00224
00225 display_update_request_screen_refresh(TEXT_UPDATE_LEVEL, (gpointer) WAVEFORM_TYPING);
00226 }
00227
00228
00229 void viewShowProgress(void)
00230 {
00231 gchar text[10];
00232
00233 DL_LOGPRINTF("entry %d", g_progressCount);
00234
00235 memset(text, '+', g_progressCount);
00236 text[g_progressCount] = '\0';
00237
00238 gtk_label_set_text(GTK_LABEL(g_progress), text);
00239 gtk_widget_show(g_progress);
00240
00241 if (g_progressCount == VIEW_MAX_DOTS)
00242 {
00243 g_progressCount = 1;
00244 }
00245 else
00246 {
00247 g_progressCount++;
00248 }
00249
00250 display_update_request_screen_refresh(TEXT_UPDATE_LEVEL, (gpointer) WAVEFORM_BW);
00251 }
00252
00253
00254 void viewHideProgress(void)
00255 {
00256 DL_LOGPRINTF("entry");
00257 g_progressCount = 1;
00258 gtk_label_set_text(GTK_LABEL(g_progress), "");
00259 display_update_request_screen_refresh(TEXT_UPDATE_LEVEL, (gpointer) WAVEFORM_TYPING);
00260 }
00261
00262
00263 static gboolean on_delayed_update_screen(gpointer p)
00264 {
00265 display_update_request_screen_refresh(TEXT_EXPOSE_LEVEL, (gpointer) WAVEFORM_TYPING);
00266 return FALSE;
00267 }
00268
00269 void viewShowError(const char *msg)
00270 {
00271 DL_LOGPRINTF("entry %s", (msg == NULL) ? "NULL" : msg);
00272
00273 gtk_label_set_text(GTK_LABEL(g_error_text), msg);
00274
00275 gtk_widget_show(g_error_background);
00276
00277
00278
00279
00280 g_timeout_add(1000, on_delayed_update_screen, 0);
00281 }
00282
00283
00284 void viewHideError(void)
00285 {
00286 DL_LOGPRINTF("entry");
00287 gtk_label_set_text(GTK_LABEL(g_error_text), "");
00288
00289 gtk_widget_hide(g_error_background);
00290
00291 }
00292
00293
00294
00295 gboolean view_expose_event(GtkWidget* widget, GdkEventExpose* event, gpointer data)
00296 {
00297 DL_LOGPRINTF("entry");
00298
00299 display_update_request_screen_refresh(VIEW_WINDOW_EXPOSE_LEVEL, (gpointer) WAVEFORM_FULLSCREEN);
00300 return FALSE;
00301 }
00302
00303
00304 gboolean on_error_button_pressed(GtkWidget* widget, GdkEventButton* event, gpointer data)
00305 {
00306 DL_LOGPRINTF("entry");
00307
00308 if (g_on_error_confirmed)
00309 {
00310 g_on_error_confirmed();
00311 }
00312 else
00313 {
00314 viewHideError();
00315 }
00316 return FALSE;
00317 }
00318
00319
00320 void view_callback_on_error_confirmed(on_error_confirmed_t* callback)
00321 {
00322 DL_LOGPRINTF("entry");
00323
00324 g_on_error_confirmed = callback;
00325 }
00326
00327