00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00030 #include <string.h>
00031 #include <stdio.h>
00032
00033 #include <gtk/gtk.h>
00034
00035 #include <liberdm/display.h>
00036 #include <libergtk/ergtk.h>
00037
00038 #include "connectionMgrLog.h"
00039 #include "displayStatus.h"
00040 #include "gtkProfileEntry.h"
00041
00042
00043 static void gtk_profile_entry_class_init(GtkProfileEntryClass * klass);
00044 static void gtk_profile_entry_init(GtkProfileEntry * profileEntry);
00045
00046 static void gtk_profile_entry_hide_signal_image(GtkProfileEntry *profileEntry);
00047
00048
00049 static gboolean on_flash_status(gpointer data);
00050
00051
00052 GtkWidget *gtk_profile_entry_new(void)
00053 {
00054 GtkProfileEntry *profileEntry;
00055
00056 profileEntry = (GtkProfileEntry *) g_object_new(GTK_PROFILE_ENTRY_TYPE, NULL);
00057
00058 gtk_widget_show_all(profileEntry->clientArea);
00059 gdk_flush();
00060
00061 gtk_profile_entry_hide_signal_image(profileEntry);
00062 gtk_widget_hide(profileEntry->encrImage);
00063 gtk_widget_hide(profileEntry->editButton);
00064
00065 return GTK_WIDGET(profileEntry);
00066 }
00067
00068
00069 GType gtk_profile_entry_get_type(void)
00070 {
00071 static GType profile_entry_type = 0;
00072
00073 if (!profile_entry_type)
00074 {
00075 static const GTypeInfo profile_entry_info =
00076 {
00077 sizeof(GtkProfileEntryClass),
00078 NULL,
00079 NULL,
00080 (GClassInitFunc) gtk_profile_entry_class_init,
00081 NULL,
00082 NULL,
00083 sizeof(GtkProfileEntry),
00084 0,
00085 (GInstanceInitFunc) gtk_profile_entry_init,
00086 0
00087 };
00088 profile_entry_type = g_type_register_static(GTK_TYPE_EVENT_BOX,
00089 "ProfileEntry",
00090 &profile_entry_info,
00091 0);
00092 }
00093
00094 return profile_entry_type;
00095 }
00096
00097
00098 static void gtk_profile_entry_class_init(GtkProfileEntryClass * klass)
00099 {
00100
00101 }
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 static void gtk_profile_entry_init(GtkProfileEntry * profileEntry)
00116 {
00117 CN_LOGPRINTF("entry");
00118
00119 GtkWidget* clientArea;
00120 GtkWidget* nameButton;
00121 GtkWidget* sigVbox;
00122 GtkWidget* sigImage;
00123 GtkWidget* encrVbox;
00124 GtkWidget* encrImage;
00125 GtkWidget* status;
00126 GtkWidget* editButton;
00127
00128 gtk_widget_set_size_request(GTK_WIDGET(profileEntry),
00129 PROFILE_ENTRY_WIDTH, PROFILE_ENTRY_HEIGHT);
00130
00131 gtk_event_box_set_visible_window(GTK_EVENT_BOX(profileEntry), FALSE);
00132
00133
00134 clientArea = gtk_hbox_new(FALSE, PROFILE_ENTRY_SPACING);
00135 gtk_widget_set_size_request(GTK_WIDGET(clientArea),
00136 PROFILE_ENTRY_WIDTH, PROFILE_ENTRY_HEIGHT);
00137
00138 gtk_container_add(GTK_CONTAINER(profileEntry), clientArea);
00139 profileEntry->clientArea = clientArea;
00140
00141
00142 nameButton = ergtk_toggle_button_new_with_label("");
00143 gtk_widget_set_size_request(GTK_WIDGET(nameButton),
00144 PROFILE_ENTRY_NAME_BUTTON_WIDTH, PROFILE_ENTRY_NAME_BUTTON_HEIGHT);
00145 gtk_box_pack_start(GTK_BOX(clientArea), nameButton, FALSE, FALSE, 0);
00146 profileEntry->nameButton = nameButton;
00147
00148
00149 sigVbox = gtk_vbox_new(FALSE, 0);
00150 gtk_widget_set_size_request(GTK_WIDGET(sigVbox),
00151 PROFILE_ENTRY_SIG_IMG_WIDTH, PROFILE_ENTRY_SIG_IMG_HEIGHT);
00152 gtk_box_pack_start(GTK_BOX(clientArea), sigVbox, FALSE, FALSE, 0);
00153 profileEntry->sigVbox = sigVbox;
00154
00155
00156 int i;
00157 char bgStyle[] = "profile_entry_signal0_background";
00158 for (i = 0; i < 5; i++)
00159 {
00160 sigImage = gtk_event_box_new();
00161 gtk_widget_set_size_request(GTK_WIDGET(sigImage),
00162 PROFILE_ENTRY_SIG_IMG_WIDTH, PROFILE_ENTRY_SIG_IMG_HEIGHT);
00163 snprintf(bgStyle, sizeof(bgStyle),
00164 "profile_entry_signal%d_background", i);
00165 gtk_widget_set_name(GTK_WIDGET(sigImage), bgStyle);
00166 gtk_box_pack_start(GTK_BOX(sigVbox), sigImage, FALSE, FALSE, 0);
00167 profileEntry->sigImage[i] = sigImage;
00168 }
00169
00170
00171 encrVbox = gtk_vbox_new(FALSE, 0);
00172 gtk_widget_set_size_request(GTK_WIDGET(encrVbox),
00173 PROFILE_ENTRY_ENCR_IMG_WIDTH, PROFILE_ENTRY_ENCR_IMG_HEIGHT);
00174 gtk_box_pack_start(GTK_BOX(clientArea), encrVbox, FALSE, FALSE, 0);
00175 profileEntry->encrVbox = encrVbox;
00176
00177
00178 encrImage = gtk_event_box_new();
00179 gtk_widget_set_size_request(GTK_WIDGET(encrImage),
00180 PROFILE_ENTRY_ENCR_IMG_WIDTH, PROFILE_ENTRY_ENCR_IMG_HEIGHT);
00181 gtk_widget_set_name(GTK_WIDGET(encrImage),
00182 "profile_entry_encrimg_background");
00183 gtk_box_pack_start(GTK_BOX(encrVbox), encrImage, FALSE, FALSE, 0);
00184 profileEntry->encrImage = encrImage;
00185
00186
00187 status = gtk_label_new("");
00188 gtk_widget_set_size_request(GTK_WIDGET(status),
00189 PROFILE_ENTRY_STATUS_WIDTH, PROFILE_ENTRY_STATUS_HEIGHT);
00190 gtk_misc_set_alignment(GTK_MISC(status), 0.02, 0.5);
00191 gtk_widget_set_name(GTK_WIDGET(status), "profile_entry_status");
00192 gtk_box_pack_start(GTK_BOX(clientArea), status, FALSE, FALSE, 0);
00193 profileEntry->status = status;
00194
00195
00196 editButton = ergtk_toggle_button_new_with_label("");
00197 gtk_widget_set_size_request(GTK_WIDGET(editButton),
00198 PROFILE_ENTRY_EDIT_BUTTON_WIDTH, PROFILE_ENTRY_EDIT_BUTTON_HEIGHT);
00199 gtk_box_pack_end(GTK_BOX(clientArea), editButton, FALSE, FALSE, 0);
00200 profileEntry->editButton = editButton;
00201
00202
00203 profileEntry->statusFlashing = FALSE;
00204
00205 CN_LOGPRINTF("done");
00206 }
00207
00208
00209 void gtk_profile_entry_display_settings(GtkProfileEntry *profileEntry,
00210 const networkProfile_t *settings, gchar *status)
00211 {
00212 CN_LOGPRINTF("entry [%p][%p][%s]", profileEntry, settings, status);
00213
00214 int nActiveIndex;
00215 regNetworkProfile_t *pRegSettings = NULL;
00216 network_spec_t *pScanSettings = NULL;
00217 char *nwName;
00218 gboolean encrypted;
00219
00220 g_return_if_fail(IS_GTK_PROFILE_ENTRY(profileEntry));
00221
00222 if (settings)
00223 {
00224 if ((settings->nRegProfiles > 0)
00225 && settings->regSettingsList
00226 && ((settings->nActiveIndex >= 0)
00227 && (settings->nActiveIndex < settings->nRegProfiles)))
00228 {
00229 nActiveIndex = settings->nActiveIndex;
00230 pRegSettings = settings->regSettingsList[nActiveIndex];
00231 }
00232 pScanSettings = settings->scanSettings;
00233 }
00234
00235 if (pRegSettings)
00236 {
00237 nwName = pRegSettings->name;
00238 }
00239 else if (pScanSettings)
00240 {
00241 nwName = pScanSettings->ssid;
00242 }
00243 else
00244 {
00245 nwName = NULL;
00246 }
00247
00248 if ((nwName == NULL) || (nwName[0] == '\0'))
00249 {
00250 gtk_profile_entry_set_namebutton_text(profileEntry, "");
00251 gtk_profile_entry_set_status(profileEntry, "");
00252 }
00253 else
00254 {
00255
00256 gtk_profile_entry_set_namebutton_text(profileEntry, nwName);
00257
00258
00259 if (pScanSettings)
00260 {
00261 gtk_profile_entry_set_signal_image(profileEntry,
00262 pScanSettings->quality);
00263 }
00264 else if (pRegSettings && pRegSettings->connection == wireless_t)
00265 {
00266 gtk_profile_entry_set_signal_image(profileEntry, 0);
00267 }
00268 else
00269 {
00270 gtk_profile_entry_hide_signal_image(profileEntry);
00271 }
00272
00273
00274 if (pScanSettings && (pScanSettings->encryption != encr_none_t))
00275 {
00276 encrypted = TRUE;
00277 }
00278 else if (pRegSettings
00279 && pRegSettings->wirelessSettings
00280 && pRegSettings->wirelessSettings->encrType != encr_none_t)
00281 {
00282 encrypted = TRUE;
00283 }
00284 else
00285 {
00286 encrypted = FALSE;
00287 }
00288
00289 gtk_profile_entry_show_encr_image(profileEntry, encrypted);
00290
00291
00292 gtk_profile_entry_set_status(profileEntry, status);
00293 }
00294 }
00295
00296
00297 void gtk_profile_entry_set_namebutton_text(GtkProfileEntry *profileEntry,
00298 gchar *nameText)
00299 {
00300 g_return_if_fail(IS_GTK_PROFILE_ENTRY(profileEntry));
00301
00302 if (nameText)
00303 {
00304 CN_LOGPRINTF("name: [%s]", nameText);
00305 gtk_button_set_label(GTK_BUTTON(profileEntry->nameButton),
00306 nameText);
00307 }
00308 }
00309
00310 void gtk_profile_entry_set_signal_image(GtkProfileEntry *profileEntry,
00311 gint quality)
00312 {
00313 g_return_if_fail(IS_GTK_PROFILE_ENTRY(profileEntry));
00314 g_return_if_fail((quality >= 0) && (quality <= 100));
00315
00316 CN_LOGPRINTF("quality: [%d]", quality);
00317
00318
00319 gtk_profile_entry_hide_signal_image(profileEntry);
00320
00321
00322 if (quality <= 0)
00323 {
00324 gtk_widget_show(profileEntry->sigImage[0]);
00325 }
00326 else if (quality <= 25)
00327 {
00328 gtk_widget_show(profileEntry->sigImage[1]);
00329 }
00330 else if (quality <= 50)
00331 {
00332 gtk_widget_show(profileEntry->sigImage[2]);
00333 }
00334 else if (quality <= 75)
00335 {
00336 gtk_widget_show(profileEntry->sigImage[3]);
00337 }
00338 else
00339 {
00340 gtk_widget_show(profileEntry->sigImage[4]);
00341 }
00342 }
00343
00344
00345 void gtk_profile_entry_set_status(GtkProfileEntry *profileEntry,
00346 gchar *statusText)
00347 {
00348 g_return_if_fail(IS_GTK_PROFILE_ENTRY(profileEntry));
00349
00350 if (statusText)
00351 {
00352 CN_LOGPRINTF("status: [%s]", statusText);
00353 gtk_label_set_text(GTK_LABEL(profileEntry->status), statusText);
00354 gtk_profile_entry_set_status_flashing(profileEntry, FALSE);
00355 }
00356 }
00357
00358 void gtk_profile_entry_set_status_flashing(GtkProfileEntry *profileEntry,
00359 gboolean flashing)
00360 {
00361 g_return_if_fail(IS_GTK_PROFILE_ENTRY(profileEntry));
00362
00363 CN_LOGPRINTF("flashing: [%d]", flashing);
00364
00365 gtk_widget_set_state(GTK_WIDGET(profileEntry->status),
00366 GTK_STATE_NORMAL);
00367
00368 if (flashing == TRUE && profileEntry->statusFlashing == FALSE)
00369 {
00370 g_timeout_add(1100, on_flash_status, profileEntry);
00371 }
00372 profileEntry->statusFlashing = flashing;
00373 }
00374
00375
00376 void gtk_profile_entry_set_editbutton_text(GtkProfileEntry *profileEntry,
00377 gchar* editText)
00378 {
00379 g_return_if_fail(IS_GTK_PROFILE_ENTRY(profileEntry));
00380
00381 if (editText)
00382 {
00383 CN_LOGPRINTF("edit: [%s]", editText);
00384 gtk_button_set_label(GTK_BUTTON(profileEntry->editButton),
00385 editText);
00386 }
00387 }
00388
00389 void gtk_profile_entry_set_buttons_active(GtkProfileEntry *profileEntry,
00390 gboolean nameActive,
00391 gboolean editActive)
00392 {
00393 GtkToggleButton *button;
00394
00395 CN_LOGPRINTF("entry nameActive[%d]editActive[%d]",
00396 nameActive, editActive);
00397
00398 g_return_if_fail(IS_GTK_PROFILE_ENTRY(profileEntry));
00399
00400 button = GTK_TOGGLE_BUTTON(profileEntry->nameButton);
00401 gtk_toggle_button_set_active(button, nameActive);
00402
00403 button = GTK_TOGGLE_BUTTON(profileEntry->editButton);
00404 gtk_toggle_button_set_active(button, editActive);
00405 }
00406
00407
00408 static void gtk_profile_entry_hide_signal_image(GtkProfileEntry *profileEntry)
00409 {
00410 int i;
00411
00412 g_return_if_fail(IS_GTK_PROFILE_ENTRY(profileEntry));
00413
00414 for (i = 0; i < 5; i++)
00415 {
00416 gtk_widget_hide(profileEntry->sigImage[i]);
00417 }
00418 }
00419
00420 void gtk_profile_entry_show_encr_image(GtkProfileEntry *profileEntry,
00421 gboolean show)
00422 {
00423 CN_LOGPRINTF("entry show[%d]", show);
00424
00425 g_return_if_fail(IS_GTK_PROFILE_ENTRY(profileEntry));
00426
00427 if (show)
00428 {
00429 gtk_widget_show(profileEntry->encrImage);
00430 }
00431 else
00432 {
00433 gtk_widget_hide(profileEntry->encrImage);
00434 }
00435 }
00436
00437 void gtk_profile_entry_show_edit_button(GtkProfileEntry *profileEntry,
00438 gboolean show)
00439 {
00440 CN_LOGPRINTF("entry show[%d]", show);
00441
00442 g_return_if_fail(IS_GTK_PROFILE_ENTRY(profileEntry));
00443
00444 if (show)
00445 {
00446 gtk_widget_show(profileEntry->editButton);
00447 }
00448 else
00449 {
00450 gtk_widget_hide(profileEntry->editButton);
00451 }
00452 }
00453
00454 static gboolean on_flash_status(gpointer data)
00455 {
00456 CN_LOGPRINTF("entry");
00457
00458 GtkWidget *status;
00459 static int delay = 0;
00460
00461 g_return_val_if_fail((data != NULL), FALSE);
00462 GtkProfileEntry* profileEntry = GTK_PROFILE_ENTRY(data);
00463
00464 if (profileEntry->statusFlashing)
00465 {
00466 if (--delay < 0)
00467 {
00468 status = GTK_WIDGET(profileEntry->status);
00469 if (GTK_WIDGET_STATE(status) == GTK_STATE_NORMAL)
00470 {
00471 gtk_widget_set_state(status, GTK_STATE_ACTIVE);
00472 delay = 0;
00473 }
00474 else
00475 {
00476 gtk_widget_set_state(status, GTK_STATE_NORMAL);
00477 delay = 3;
00478 }
00479
00480 display_update_request_screen_refresh(TEXT_ENTRY_CHANGED_LEVEL,
00481 WAVEFORM_TYPING);
00482 }
00483
00484 return TRUE;
00485 }
00486 else
00487 {
00488 return FALSE;
00489 }
00490 }
00491
00492 GtkWidget* gtk_profile_entry_get_namebutton(GtkProfileEntry* profileEntry)
00493 {
00494 CN_LOGPRINTF("entry");
00495 g_return_val_if_fail(IS_GTK_PROFILE_ENTRY(profileEntry), NULL);
00496 return profileEntry->nameButton;
00497 }
00498
00499 GtkWidget* gtk_profile_entry_get_editbutton(GtkProfileEntry* profileEntry)
00500 {
00501 CN_LOGPRINTF("entry");
00502 g_return_val_if_fail(IS_GTK_PROFILE_ENTRY(profileEntry), NULL);
00503 return profileEntry->editButton;
00504 }
00505