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