00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00034 #include "config.h"
00035
00036 #include <stdlib.h>
00037 #include <string.h>
00038
00039 #include <gtk/gtk.h>
00040 #include <gdk/gdkkeysyms.h>
00041
00042 #include <liberdm/display.h>
00043 #include <liberdm/connectionMgrConstants.h>
00044 #include <liberregxml/erregapi.h>
00045 #include <liberipc/eripctoolbar.h>
00046
00047 #include "connectionMgrLog.h"
00048 #include "displayStatus.h"
00049 #include "erbusy.h"
00050 #include "pagebar.h"
00051 #include "toolbar.h"
00052 #ifdef ECDC_LIBRARY
00053 #include "ecdctypes.h"
00054 #else
00055 #include "ecdc_err.h"
00056 #endif
00057 #include "commonData.h"
00058 #include "editScreenData.h"
00059 #include "connectionMgr.h"
00060 #include "background.h"
00061 #include "connectScreen.h"
00062 #include "connectScreenProfiles.h"
00063 #include "connectScreenData.h"
00064 #include "connectBackground.h"
00065 #include "editScreen.h"
00066 #include "editScreenProfiles.h"
00067 #include "editScreenSearch.h"
00068 #include "editScreenOverview.h"
00069 #include "editScreenWireless.h"
00070 #include "editScreenWirelessExt.h"
00071 #include "editScreenDialup.h"
00072 #include "editScreenStatic.h"
00073 #include "editScreenProxy.h"
00074 #include "connectPing.h"
00075 #include "languages.h"
00076
00077
00078 static GtkWidget *g_edit_notebook = NULL;
00079
00080
00081 static editMode_t g_edit_mode = editModeNormal_e;
00082
00083
00084
00085 static gboolean g_wizard_mode = FALSE;
00086
00087
00088
00089 static gboolean g_back_overview = FALSE;
00090
00091
00092 static gboolean g_in_set_network_settings = FALSE;
00093
00094
00095 static networkProfile_t* g_nw_settings = NULL;
00096
00097
00098 static void on_edit_screen_destroy(GtkObject* object, gpointer data);
00099 static void on_edit_switch_page(GtkNotebook* notebook,
00100 GtkNotebookPage* new_page,
00101 guint page_num,
00102 gpointer data);
00103
00104
00105 static void edit_show_back(void);
00106 static void edit_show_keyboard(void);
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124 GtkWidget *edit_screen_create(void)
00125 {
00126 GtkWidget* alignment;
00127 GtkWidget* vbox;
00128 GtkWidget* page;
00129 GtkWidget* widget;
00130
00131 CN_LOGPRINTF("entry");
00132
00133
00134 alignment = gtk_alignment_new(0.0, 0.0, 0.0, 0.0);
00135 gtk_alignment_set_padding(GTK_ALIGNMENT(alignment),
00136 0, 0, SCREEN_BORDER_LEFT, 0);
00137 g_signal_connect(alignment, "destroy",
00138 G_CALLBACK(on_edit_screen_destroy), NULL);
00139 gtk_widget_show(alignment);
00140
00141
00142 vbox = gtk_vbox_new(FALSE, 0);
00143 gtk_container_add(GTK_CONTAINER(alignment), vbox);
00144 gtk_widget_show(vbox);
00145
00146
00147 widget = gtk_notebook_new();
00148 gtk_widget_set_size_request(widget, -1, -1);
00149 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(widget), FALSE);
00150 gtk_notebook_set_show_border(GTK_NOTEBOOK(widget), FALSE);
00151 g_edit_notebook = widget;
00152
00153 page = edit_profiles_create();
00154 gtk_notebook_append_page(GTK_NOTEBOOK(g_edit_notebook), page, NULL);
00155
00156 page = edit_search_create();
00157 gtk_notebook_append_page(GTK_NOTEBOOK(g_edit_notebook), page, NULL);
00158
00159 page = edit_overview_create();
00160 gtk_notebook_append_page(GTK_NOTEBOOK(g_edit_notebook), page, NULL);
00161
00162 page = edit_wireless_create();
00163 gtk_notebook_append_page(GTK_NOTEBOOK(g_edit_notebook), page, NULL);
00164
00165 page = edit_wireless_ext_create();
00166 gtk_notebook_append_page(GTK_NOTEBOOK(g_edit_notebook), page, NULL);
00167
00168 page = edit_dialup_create();
00169 gtk_notebook_append_page(GTK_NOTEBOOK(g_edit_notebook), page, NULL);
00170
00171 page = edit_static_create();
00172 gtk_notebook_append_page(GTK_NOTEBOOK(g_edit_notebook), page, NULL);
00173
00174 page = edit_proxy_create();
00175 gtk_notebook_append_page(GTK_NOTEBOOK(g_edit_notebook), page, NULL);
00176
00177
00178 gtk_notebook_set_current_page(GTK_NOTEBOOK(g_edit_notebook), 0);
00179 g_signal_connect_after(g_edit_notebook, "switch-page",
00180 G_CALLBACK(on_edit_switch_page), NULL);
00181
00182 gtk_box_pack_start(GTK_BOX(vbox), g_edit_notebook, FALSE, FALSE, 0);
00183 gtk_widget_show(g_edit_notebook);
00184
00185 return alignment;
00186 }
00187
00188 void edit_screen_set_text(void)
00189 {
00190 CN_LOGPRINTF("entry");
00191
00192 edit_profiles_set_text();
00193 edit_search_set_text();
00194 edit_overview_set_text();
00195 edit_wireless_set_text();
00196 edit_wireless_ext_set_text();
00197 edit_dialup_set_text();
00198 edit_static_set_text();
00199 edit_proxy_set_text();
00200 }
00201
00202 void edit_screen_display(void)
00203 {
00204 int page;
00205
00206 CN_LOGPRINTF("entry");
00207
00208 page = edit_get_current_page(NULL);
00209 if (page == editScreenProfiles_e)
00210 {
00211 edit_profiles_display();
00212 }
00213 }
00214
00215 editMode_t edit_get_mode(void)
00216 {
00217 CN_LOGPRINTF("return mode[%d]", g_edit_mode);
00218
00219 return g_edit_mode;
00220 }
00221
00222 void edit_set_mode(editMode_t mode)
00223 {
00224 CN_LOGPRINTF("entry mode[%d]", mode);
00225
00226 if ((mode >= 0) && (mode < editModeUndef_e))
00227 {
00228 g_edit_mode = mode;
00229
00230 bg_display_title();
00231
00232 switch (mode)
00233 {
00234 case editModeConnectFillIn_e:
00235 case editModeConnectCreate_e:
00236 case editModeConnectNormal_e:
00237 edit_overview_enable_save_button(FALSE);
00238 edit_wireless_enable_save_button(FALSE);
00239 edit_dialup_enable_save_button(FALSE);
00240 break;
00241 case editModeNormal_e:
00242 edit_overview_enable_save_button(TRUE);
00243 edit_wireless_enable_save_button(TRUE);
00244 edit_dialup_enable_save_button(TRUE);
00245 default:
00246 break;
00247 }
00248 }
00249 }
00250
00251
00252 gboolean edit_get_wizard_mode(void)
00253 {
00254 CN_LOGPRINTF("return mode[%d]", g_wizard_mode);
00255
00256 return g_wizard_mode;
00257 }
00258
00259 void edit_set_wizard_mode(gboolean mode)
00260 {
00261 CN_LOGPRINTF("entry: mode [%d]", mode);
00262
00263 g_wizard_mode = mode;
00264 }
00265
00266
00267 gboolean edit_get_in_set_network_settings(void)
00268 {
00269 CN_LOGPRINTF("return [%d]", g_in_set_network_settings);
00270
00271 return g_in_set_network_settings;
00272 }
00273
00274 void edit_set_in_set_network_settings(gboolean value)
00275 {
00276 CN_LOGPRINTF("entry [%d]", value);
00277
00278 g_in_set_network_settings = value;
00279 }
00280
00281 void edit_set_back_overview(gboolean back)
00282 {
00283 CN_LOGPRINTF("entry [%d]", back);
00284 g_back_overview = back;
00285 }
00286
00287 gboolean edit_get_back_overview(void)
00288 {
00289 CN_LOGPRINTF("return %d", g_back_overview);
00290 return g_back_overview;
00291 }
00292
00293 regNetworkProfile_t* edit_get_network_settings(void)
00294 {
00295 regNetworkProfile_t* settings;
00296 editMode_t mode;
00297
00298 CN_LOGPRINTF("entry");
00299
00300 settings = g_new0(regNetworkProfile_t, 1);
00301 g_assert(settings != NULL);
00302
00303 edit_overview_get_network_settings(settings);
00304
00305 if (settings->connection == wireless_t)
00306 {
00307 mode = edit_get_mode();
00308 if (mode == editModeConnectFillIn_e)
00309 {
00310 edit_wireless_ext_get_network_settings(settings);
00311 }
00312 else
00313 {
00314 edit_wireless_get_network_settings(settings);
00315 }
00316 }
00317 else if (settings->connection == dialup_t)
00318 {
00319 edit_dialup_get_network_settings(settings);
00320 }
00321
00322 if (settings->addressMode == static_t)
00323 {
00324 edit_static_get_network_settings(settings);
00325 }
00326
00327 if (settings->proxy)
00328 {
00329 edit_proxy_get_network_settings(settings);
00330 }
00331
00332 return settings;
00333 }
00334
00335 void edit_set_network_settings(const regNetworkProfile_t* settings)
00336 {
00337 editMode_t mode;
00338
00339 CN_LOGPRINTF("entry");
00340
00341 g_return_if_fail(settings != NULL);
00342
00343 edit_set_in_set_network_settings(TRUE);
00344
00345 CN_LOGPRINTF("settings->connection=%d", settings->connection);
00346
00347 edit_overview_set_network_settings(settings);
00348
00349 if (settings->connection == wireless_t)
00350 {
00351 mode = edit_get_mode();
00352 if (mode == editModeConnectFillIn_e)
00353 {
00354 edit_wireless_ext_set_network_settings(settings);
00355 }
00356 else
00357 {
00358 edit_wireless_set_network_settings(settings);
00359 }
00360 }
00361 else if (settings->connection == dialup_t)
00362 {
00363 edit_dialup_set_network_settings(settings);
00364 }
00365
00366 edit_static_set_network_settings(settings);
00367 edit_proxy_set_network_settings(settings);
00368
00369 edit_set_in_set_network_settings(FALSE);
00370 }
00371
00372 void edit_restore_network_settings(int page)
00373 {
00374 CN_LOGPRINTF("entry page[%d]", page);
00375
00376 switch (page)
00377 {
00378 case editScreenProfiles_e:
00379 case editScreenSearch_e:
00380 case editScreenOverview_e:
00381
00382
00383 break;
00384 case editScreenWireless_e:
00385 edit_wireless_restore_network_settings();
00386 break;
00387 case editScreenWirelessExt_e:
00388 edit_wireless_ext_restore_network_settings();
00389 break;
00390 case editScreenDialup_e:
00391 edit_dialup_restore_network_settings();
00392 break;
00393 case editScreenStatic_e:
00394 edit_static_restore_network_settings();
00395 break;
00396 case editScreenProxy_e:
00397 edit_proxy_restore_network_settings();
00398 break;
00399 case editScreenUndefined_e:
00400 default:
00401 break;
00402 }
00403 }
00404
00405
00406 void edit_save_profile(void)
00407 {
00408 int profileIndex = -1;
00409 regNetworkProfile_t* settings = NULL;
00410 networkProfile_t network;
00411
00412 CN_LOGPRINTF("entry");
00413
00414
00415
00416 settings = edit_get_network_settings();
00417 g_return_if_fail(settings != NULL);
00418
00419 network.regSettingsList = g_new0(regNetworkProfile_t*, 1);
00420 g_assert(network.regSettingsList != NULL);
00421 network.regSettingsList[0] = settings;
00422 network.regIndexList = NULL;
00423 network.nRegProfiles = 1;
00424 network.nActiveIndex = 0;
00425
00426
00427 profileIndex = edit_profiles_get_edited_profile_index();
00428
00429
00430 edit_data_set_network_profile(profileIndex, &network);
00431
00432
00433 erRegFreeNetworkProfile(settings);
00434 g_free(network.regSettingsList);
00435
00436
00437 edit_data_store_network_profiles();
00438 }
00439
00440
00441 gint edit_get_current_page(gint *pagecount)
00442 {
00443 GtkNotebook *notebook = GTK_NOTEBOOK(g_edit_notebook);
00444
00445
00446 if (pagecount != NULL)
00447 {
00448 *pagecount = gtk_notebook_get_n_pages(notebook);
00449 }
00450
00451
00452 return gtk_notebook_get_current_page(notebook);
00453 }
00454
00455
00456 void edit_goto_page(gint new_page)
00457 {
00458 gint current_page;
00459 gint pagecount;
00460
00461 current_page = edit_get_current_page(&pagecount);
00462
00463 CN_LOGPRINTF("new_page %d - pagecount %d", new_page, pagecount);
00464
00465
00466 if (current_page != new_page)
00467 {
00468
00469 switch (current_page)
00470 {
00471 case editScreenStatic_e:
00472 edit_static_screen_leave();
00473 break;
00474 case editScreenProxy_e:
00475 edit_proxy_screen_leave();
00476 break;
00477 default:
00478 ;
00479 }
00480 }
00481 else
00482 {
00483
00484
00485
00486 erbusy_off();
00487 }
00488
00489
00490 if (new_page >= 0 && new_page < pagecount)
00491 {
00492 CN_LOGPRINTF("switch to new_page %d", new_page);
00493
00494 switch (new_page)
00495 {
00496 case editScreenOverview_e:
00497 edit_overview_show_profilename();
00498 break;
00499 case editScreenProfiles_e:
00500 edit_profiles_display();
00501 break;
00502 default:
00503 break;
00504 }
00505
00506 gtk_notebook_set_current_page(GTK_NOTEBOOK(g_edit_notebook),
00507 new_page);
00508 }
00509 }
00510
00511
00512 void edit_set_pagebar(void)
00513 {
00514
00515
00516 pagebar_reset();
00517
00518
00519
00520 pagebar_set_pagecount( 1 );
00521 pagebar_goto_page( 1 );
00522 pagebar_redraw();
00523 }
00524
00525
00526 void edit_set_toolbar(void)
00527 {
00528 CN_LOGPRINTF("entry");
00529
00530 edit_show_back();
00531 edit_show_keyboard();
00532 edit_show_trashcan();
00533 }
00534
00535 static void edit_show_back(void)
00536 {
00537 screenPage_t curPage, backPage;
00538
00539 CN_LOGPRINTF("entry");
00540
00541 curPage.screen = cmgrScreenEdit_e;
00542 curPage.page = edit_get_current_page(NULL);
00543
00544 cmgr_get_back_page(&curPage, &backPage);
00545
00546 if ((backPage.screen == cmgrScreenUndef_e)
00547 || (backPage.page == -1))
00548 {
00549 toolbar_setIconState(iconID_back, iconState_grey);
00550 }
00551 else
00552 {
00553 toolbar_setIconState(iconID_back, iconState_normal);
00554 }
00555 }
00556
00557 static void edit_show_keyboard(void)
00558 {
00559 connection_t networkType;
00560
00561 switch (edit_get_current_page(NULL))
00562 {
00563 case editScreenOverview_e:
00564 networkType = edit_data_get_network_type();
00565 if (networkType == wired_t)
00566 {
00567 show_keyboard(TRUE);
00568 }
00569 else
00570 {
00571 show_keyboard(FALSE);
00572 }
00573 break;
00574 case editScreenWireless_e:
00575 case editScreenWirelessExt_e:
00576 case editScreenDialup_e:
00577 case editScreenStatic_e:
00578 case editScreenProxy_e:
00579 show_keyboard(TRUE);
00580 break;
00581 case editScreenSearch_e:
00582 case editScreenProfiles_e:
00583 show_keyboard(FALSE);
00584 break;
00585 default:
00586 ;
00587 }
00588 }
00589
00590 void edit_show_trashcan(void)
00591 {
00592 CN_LOGPRINTF("entry");
00593
00594 switch (edit_get_current_page(NULL))
00595 {
00596 case editScreenProfiles_e:
00597 if (edit_data_get_n_network_profiles() > 0)
00598 {
00599 toolbar_setIconState(iconID_trashcan, iconState_normal);
00600 }
00601 else
00602 {
00603 toolbar_setIconState(iconID_trashcan, iconState_grey);
00604 }
00605 break;
00606
00607 case editScreenSearch_e:
00608 case editScreenOverview_e:
00609 case editScreenWireless_e:
00610 case editScreenWirelessExt_e:
00611 case editScreenDialup_e:
00612 case editScreenStatic_e:
00613 case editScreenProxy_e:
00614 toolbar_setIconState(iconID_trashcan, iconState_grey);
00615 break;
00616 default:
00617 ;
00618 }
00619 }
00620
00621
00622 static void on_edit_screen_destroy(GtkObject* object, gpointer data)
00623 {
00624 CN_LOGPRINTF("entry");
00625 show_keyboard(FALSE);
00626 }
00627
00628 static void on_edit_switch_page(GtkNotebook* notebook,
00629 GtkNotebookPage* new_page,
00630 guint page_num,
00631 gpointer data)
00632 {
00633 CN_LOGPRINTF("Entry, new_page [%d]", (int)page_num);
00634
00635 edit_set_pagebar();
00636 edit_set_toolbar();
00637 }
00638
00639 void on_edit_goto_page(gint new_page)
00640 {
00641 CN_LOGPRINTF("entry: %d", new_page);
00642
00643 edit_goto_page(new_page - 1);
00644 }
00645
00646 gboolean on_edit_keypress(GdkEventKey* event)
00647 {
00648 gboolean ret = FALSE;
00649
00650 CN_LOGPRINTF("entry: keyval [0x%02X]", event->keyval);
00651
00652 switch (edit_get_current_page(NULL) )
00653 {
00654 case editScreenProfiles_e:
00655 ret = on_edit_profiles_keypress(event);
00656 break;
00657 case editScreenSearch_e:
00658 ret = on_edit_search_keypress(event);
00659 break;
00660 case editScreenOverview_e:
00661 ret = on_edit_overview_keypress(event);
00662 break;
00663 case editScreenWireless_e:
00664 ret = on_edit_wireless_keypress(event);
00665 break;
00666 case editScreenWirelessExt_e:
00667 ret = on_edit_wireless_ext_keypress(event);
00668 break;
00669 case editScreenProxy_e:
00670 ret = on_edit_proxy_keypress(event);
00671 break;
00672 case editScreenStatic_e:
00673 ret = on_edit_static_keypress(event);
00674 break;
00675 case editScreenDialup_e:
00676 ret = on_edit_dialup_keypress(event);
00677 break;
00678 default:
00679 erbusy_off();
00680 }
00681
00682 return ret;
00683 }
00684
00685 void on_edit_icon_clicked(int iconID, int iconState)
00686 {
00687 pingContext_t *ctxt;
00688 int page;
00689
00690 CN_LOGPRINTF("entry iconID[%d] iconState[%d]", iconID, iconState);
00691
00692 page = edit_get_current_page(NULL);
00693 switch (iconID)
00694 {
00695 case iconID_back:
00696 ctxt = cmgr_get_ping_ctxt();
00697 if (!connect_ping_in_pinging(ctxt)
00698 && (iconState == iconState_normal))
00699 {
00700 toolbar_setIconState(iconID_back, iconState_selected);
00701 cmgr_add_on_toolbar_sync_action(cmgr_back_page);
00702 toolbar_synchronise();
00703 }
00704 break;
00705 case iconID_trashcan:
00706 if (page == editScreenProfiles_e)
00707 {
00708 on_edit_profiles_icon_clicked(iconID, iconState);
00709 }
00710 break;
00711 default:
00712 break;
00713 }
00714 }
00715
00716
00717
00718
00719
00720 int edit_get_initial_profile(void)
00721 {
00722 CN_LOGPRINTF("entry");
00723 return 0;
00724 }
00725
00726 int edit_get_n_network_profiles(void)
00727 {
00728 CN_LOGPRINTF("entry");
00729 return 1;
00730 }
00731
00732 const networkProfile_t* edit_get_network_profile(int profileIndex)
00733 {
00734 regNetworkProfile_t* settings;
00735
00736 CN_LOGPRINTF("entry");
00737 if (g_nw_settings)
00738 {
00739 common_data_destroy_network_profiles(g_nw_settings, 1);
00740 }
00741
00742 g_nw_settings = g_new0(networkProfile_t, 1);
00743 g_assert(g_nw_settings != NULL);
00744
00745 settings = edit_get_network_settings();
00746
00747 g_nw_settings->scanSettings = NULL;
00748
00749 g_nw_settings->regSettingsList = g_new0(regNetworkProfile_t*, 1);
00750 g_nw_settings->regSettingsList[0] = (regNetworkProfile_t*)settings;
00751 g_nw_settings->regIndexList = g_new0(int, 1);
00752 g_nw_settings->regIndexList[0] = -1;
00753 g_nw_settings->nRegProfiles = 1;
00754 g_nw_settings->nActiveIndex = 0;
00755
00756 return (const networkProfile_t*)g_nw_settings;
00757 }
00758
00759 gboolean edit_select_next_regprofile(int profileIndex)
00760 {
00761 CN_LOGPRINTF("entry");
00762 return FALSE;
00763 }
00764
00765 void edit_on_connected(void)
00766 {
00767 int profileIndex;
00768 int nProfiles;
00769 int regIndex = -1;
00770
00771 CN_LOGPRINTF("entry");
00772
00773
00774 profileIndex = edit_profiles_get_edited_profile_index();
00775 CN_LOGPRINTF("profileIndex[%d]", profileIndex);
00776
00777 if (profileIndex == -1)
00778 {
00779
00780
00781 nProfiles = common_data_get_n_profiles();
00782 if (nProfiles > 0)
00783 {
00784 regIndex = nProfiles - 1;
00785 }
00786 }
00787 else
00788 {
00789 regIndex = edit_data_get_reg_index(profileIndex);
00790 }
00791 CN_LOGPRINTF("regIndex[%d]", regIndex);
00792
00793
00794 connect_data_set_last_connected_profile(regIndex);
00795
00796
00797 main_start_child_process();
00798 }
00799
00800