TSP: The Transport Sample Protocol



Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

gdisp_dataBook.c

Go to the documentation of this file.
00001 
00043 /*
00044  * System includes.
00045  */
00046 #include <stdio.h>
00047 #include <stdlib.h>
00048 #include <assert.h>
00049 #include <string.h>
00050 
00051 
00052 /*
00053  * GDISP+ includes.
00054  */
00055 #include "gdisp_kernel.h"
00056 #include "gdisp_prototypes.h"
00057 
00058 
00059 /*
00060  --------------------------------------------------------------------
00061                              STATIC ROUTINES
00062  --------------------------------------------------------------------
00063 */
00064 
00065 
00066 /*
00067  * The "delete_event" occurs when the window manager sens this event
00068  * to the application, usually by the "close" option, or on the titlebar.
00069  * Returning TRUE means that we do not want to have the "destroy" event 
00070  * emitted, keeping GDISP+ running. Returning FALSE, we ask that "destroy"
00071  * be emitted, which in turn will call the "destroy" signal handler.
00072  */
00073 static gint
00074 gdispManageDeleteEventFromWM (GtkWidget *symbolWindow,
00075                               GdkEvent  *event,
00076                               gpointer   data)
00077 {
00078 
00079   return FALSE;
00080 
00081 }
00082 
00083 
00084 /*
00085  * The "destroy" event occurs when we call "gtk_widget_destroy" on
00086  * the top-level window, of if we return FALSE in the "delete_event"
00087  * callback (see above).
00088  */
00089 static void
00090 gdispDestroySignalHandler (GtkWidget *dataBookWindow,
00091                            gpointer   data)
00092 {
00093 
00094   Kernel_T *kernel = (Kernel_T*)data;
00095 
00096   /*
00097    * Stop provider GTK timer.
00098    */
00099   gdisp_providerTimer     (kernel,FALSE /* timerIsStoped */);
00100   gdisp_sampledSymbolTimer(kernel,FALSE /* timerIsStoped */);
00101 
00102   /*
00103    * Destroy ressources within page.
00104    */
00105   gdisp_destroySymbolList       (kernel);
00106   gdisp_destroySampledSymbolList(kernel);
00107   gdisp_destroyProviderList     (kernel);
00108   gdisp_destroyGraphicList      (kernel);
00109 
00110   /*
00111    * Close and destroy data book.
00112    */
00113   gtk_widget_destroy(dataBookWindow);
00114   kernel->widgets.dataBookWindow      = (GtkWidget*)NULL;
00115 
00116   /*
00117    * Reset all widgets.
00118    */
00119   kernel->widgets.dataBookWidget      = (GtkWidget*)NULL;
00120   kernel->widgets.dataBookApplyButton = (GtkWidget*)NULL;
00121   kernel->widgets.symbolCList         = (GtkWidget*)NULL;
00122   kernel->widgets.symbolFrame         = (GtkWidget*)NULL;
00123   kernel->widgets.pRadioButton        = (GtkWidget*)NULL;
00124   kernel->widgets.naRadioButton       = (GtkWidget*)NULL;
00125   kernel->widgets.ndRadioButton       = (GtkWidget*)NULL;
00126   kernel->widgets.uRadioButton        = (GtkWidget*)NULL;
00127   kernel->widgets.spRadioButton       = (GtkWidget*)NULL;
00128   kernel->widgets.apRadioButton       = (GtkWidget*)NULL;
00129   kernel->widgets.filterEntry         = (GtkWidget*)NULL;
00130 
00131 }
00132 
00133 
00134 /*
00135  * Apply button callback.
00136  */
00137 static void
00138 gdisp_applyChangesCallback (GtkWidget *applyButtonWidget,
00139                             gpointer   data )
00140 {
00141 
00142   /*
00143    * These definitions must match the order of page creation.
00144    */
00145 #define GD_ALL_SYMBOL_PAGE     0
00146 #define GD_SAMPLED_SYMBOL_PAGE 1
00147 #define GD_PROVIDER_PAGE       2
00148 #define GD_GRAPHIC_PLOT_PAGE   3
00149 
00150   Kernel_T *kernel     = (Kernel_T*)data;
00151   gint      pageNumber = 0;
00152 
00153   /*
00154    * Activate the "apply" callback according to the selected page.
00155    */
00156   pageNumber =
00157   gtk_notebook_get_current_page(GTK_NOTEBOOK(kernel->widgets.dataBookWidget));
00158 
00159   switch (pageNumber) {
00160 
00161   case GD_ALL_SYMBOL_PAGE     :
00162     gdisp_symbolApplyCallback(kernel->widgets.dataBookApplyButton,
00163                               (gpointer)kernel);
00164     break;
00165 
00166   case GD_SAMPLED_SYMBOL_PAGE :
00167   case GD_PROVIDER_PAGE       :
00168   case GD_GRAPHIC_PLOT_PAGE   :
00169   default                     :
00170     break;
00171 
00172   }
00173 
00174 }
00175 
00176 
00177 /*
00178  * The current page of the data book has changed,
00179  * OR a new page has been inserted into the databook.
00180  */
00181 static void
00182 gdisp_switchDataBookPageCallback ( GtkNotebook     *notebook,
00183                                    GtkNotebookPage *page,
00184                                    gint             pageNumber,
00185                                    gpointer         data )
00186 {
00187 
00188   Kernel_T *kernel = (Kernel_T*)data;
00189 
00190   /*
00191    * This callback is activated whenever a new page is inserted
00192    * into the notebook widget.
00193    * Thus, the apply button is not already created.
00194    */
00195   if (kernel->widgets.dataBookApplyButton == (GtkWidget*)NULL) {
00196 
00197     return;
00198 
00199   }
00200 
00201   /*
00202    * Apply button is active when the symbol list is shown.
00203    */
00204   switch (pageNumber) {
00205 
00206   case GD_ALL_SYMBOL_PAGE     :
00207     gtk_widget_set_sensitive(kernel->widgets.dataBookApplyButton,
00208                              TRUE); /* active */
00209     break;
00210 
00211   case GD_SAMPLED_SYMBOL_PAGE :
00212   case GD_PROVIDER_PAGE       :
00213   case GD_GRAPHIC_PLOT_PAGE   :
00214   default                     :
00215     gtk_widget_set_sensitive(kernel->widgets.dataBookApplyButton,
00216                              FALSE); /* inactive */
00217     break;
00218 
00219   }
00220 
00221   /*
00222    * Registered provider status polling when provider page is shown.
00223    */
00224   gdisp_providerTimer(kernel,
00225                       pageNumber == GD_PROVIDER_PAGE ?
00226                       TRUE : FALSE);
00227 
00228   /*
00229    * Registered sampled symbol polling when sampled symbol page is shown.
00230    */
00231   gdisp_sampledSymbolTimer(kernel,
00232                            pageNumber == GD_SAMPLED_SYMBOL_PAGE ?
00233                            TRUE : FALSE);
00234 
00235 }
00236 
00237 
00238 /*
00239  --------------------------------------------------------------------
00240                              PUBLIC ROUTINES
00241  --------------------------------------------------------------------
00242 */
00243 
00244 
00245 /*
00246  * Create GDISP+ data book.
00247  */
00248 void
00249 gdisp_showDataBook (gpointer factoryData,
00250                     guint    itemData)
00251 {
00252 
00253   Kernel_T  *kernel      = (Kernel_T*)factoryData;
00254 
00255   GtkWidget *notebook    = (GtkWidget*)NULL;
00256   GtkWidget *mainVBox    = (GtkWidget*)NULL;
00257   GtkWidget *mainHBox    = (GtkWidget*)NULL;
00258   GtkWidget *mainChild   = (GtkWidget*)NULL;
00259   GtkWidget *label       = (GtkWidget*)NULL;
00260   GtkWidget *closeButton = (GtkWidget*)NULL;
00261   GtkWidget *applyButton = (GtkWidget*)NULL;
00262 
00263   assert(kernel);
00264 
00265 
00266   /*
00267    * If databook is already on the screen, just raise its window.
00268    */
00269   if (kernel->widgets.dataBookWindow != (GtkWidget*)NULL) {
00270 
00271     gdk_window_raise(GTK_WIDGET(kernel->widgets.dataBookWindow)->window);
00272 
00273     return;
00274 
00275   }
00276 
00277 
00278   /* ------------------------ MAIN WINDOW ------------------------ */
00279 
00280   /*
00281    * The GTK_WINDOW_TOPLEVEL argument specifies that we want the window
00282    * to undergo window manager decoration and placement.
00283    */
00284   kernel->widgets.dataBookWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
00285   assert(kernel->widgets.dataBookWindow);
00286 
00287   gtk_signal_connect(GTK_OBJECT(kernel->widgets.dataBookWindow),
00288                      "delete_event",
00289                      GTK_SIGNAL_FUNC(gdispManageDeleteEventFromWM),
00290                      (gpointer)kernel);
00291 
00292   gtk_signal_connect(GTK_OBJECT(kernel->widgets.dataBookWindow),
00293                      "destroy",
00294                      GTK_SIGNAL_FUNC(gdispDestroySignalHandler),
00295                      (gpointer)kernel);
00296 
00297   /*
00298    * Set up window title and border width.
00299    */
00300   gtk_window_set_title(GTK_WINDOW(kernel->widgets.dataBookWindow),
00301                        "Symbols / Providers / Graphic Plots");
00302 
00303   gtk_container_set_border_width(GTK_CONTAINER(kernel->widgets.dataBookWindow),
00304                                  1);
00305 
00306 
00307   /* ------------------------ PACKING BOX ------------------------ */
00308 
00309   /*
00310    * We need a vertical packing box for managing all widgets.
00311    */
00312   mainVBox = gtk_vbox_new(FALSE, /* homogeneous */
00313                           5      /* spacing     */ );
00314   gtk_container_border_width(GTK_CONTAINER(mainVBox),3);
00315   gtk_container_add(GTK_CONTAINER(kernel->widgets.dataBookWindow),mainVBox);
00316   gtk_widget_show(mainVBox);
00317 
00318 
00319   /* ------------------------ MAIN WINDOW ------------------------ */
00320 
00321   /*
00322    * Map top-level window.
00323    */
00324   gtk_widget_set_uposition(kernel->widgets.dataBookWindow,
00325                            0,
00326                            0); /* top left corner */
00327   gtk_widget_show(kernel->widgets.dataBookWindow);
00328 
00329 
00330   /* ------------------------ DATA BOOK ------------------------ */
00331 
00332   /*
00333    * Create a notebook widget, place the position of the tabs.
00334    */
00335   notebook = gtk_notebook_new ();
00336   gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook),GTK_POS_TOP);
00337   gtk_box_pack_start(GTK_BOX(mainVBox),
00338                      notebook,
00339                      TRUE  /* expand  */,
00340                      TRUE  /* fill    */,
00341                      0     /* padding */);
00342 
00343   gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook));
00344 
00345   gtk_widget_show(notebook);
00346 
00347   gtk_signal_connect(GTK_OBJECT(notebook),
00348                      "switch-page",
00349                      GTK_SIGNAL_FUNC(gdisp_switchDataBookPageCallback),
00350                      (gpointer)kernel);
00351 
00352   kernel->widgets.dataBookWidget = notebook;
00353 
00354 
00355   /* -------------- PACKING BOX CHILD FOR SYMBOL LIST -------------- */
00356 
00357   /*
00358    * We need a vertical packing box for managing all widgets.
00359    */
00360   label     = gtk_label_new("All Symbols");
00361   mainChild = gtk_vbox_new(FALSE, /* homogeneous */
00362                            5      /* spacing     */ );
00363   gtk_container_border_width(GTK_CONTAINER(mainChild),3);
00364 
00365   gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
00366                            mainChild,
00367                            label);
00368   gtk_widget_show(mainChild);
00369 
00370   /*
00371    * Insert the symbol list into the databook.
00372    */
00373   gdisp_createSymbolList(kernel,mainChild);
00374 
00375 
00376   /* -------------- PACKING BOX CHILD FOR SAMPLED SYMBOLS -------------- */
00377 
00378   /*
00379    * We need a vertical packing box for managing all widgets.
00380    */
00381   label     = gtk_label_new("Sampled Symbols");
00382   mainChild = gtk_vbox_new(FALSE, /* homogeneous */
00383                            5      /* spacing     */ );
00384   gtk_container_border_width(GTK_CONTAINER(mainChild),3);
00385 
00386   gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
00387                            mainChild,
00388                            label);
00389   gtk_widget_show(mainChild);
00390 
00391   /*
00392    * Insert the sampled symbol list into the databook.
00393    */
00394   gdisp_createSampledSymbolList(kernel,mainChild);
00395 
00396 
00397   /* -------------- PACKING BOX CHILD FOR PROVIDER LIST -------------- */
00398 
00399   /*
00400    * We need a vertical packing box for managing all widgets.
00401    */
00402   label     = gtk_label_new("Providers");
00403   mainChild = gtk_vbox_new(FALSE, /* homogeneous */
00404                            5      /* spacing     */ );
00405   gtk_container_border_width(GTK_CONTAINER(mainChild),3);
00406 
00407   gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
00408                            mainChild,
00409                            label);
00410   gtk_widget_show(mainChild);
00411 
00412   /*
00413    * Insert the symbol list into the databook.
00414    */
00415   gdisp_createProviderList(kernel,mainChild);
00416 
00417 
00418   /* -------------- PACKING BOX CHILD FOR GRAPHIC PLOTS -------------- */
00419 
00420   /*
00421    * We need a vertical packing box for managing all widgets.
00422    */
00423   label     = gtk_label_new("Graphic Plots");
00424   mainChild = gtk_vbox_new(FALSE, /* homogeneous */
00425                            5      /* spacing     */ );
00426   gtk_container_border_width(GTK_CONTAINER(mainChild),3);
00427 
00428   gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
00429                            mainChild,
00430                            label);
00431   gtk_widget_show(mainChild);
00432 
00433   /*
00434    * Insert the symbol list into the databook.
00435    */
00436   gdisp_createGraphicList(kernel,mainChild);
00437 
00438 
00439   /* ------------------------ PACKING BOX ------------------------ */
00440 
00441   mainHBox = gdisp_createButtonBar(kernel,
00442                                    kernel->widgets.dataBookWindow,
00443                                    &applyButton,
00444                                    &closeButton);
00445 
00446   gtk_box_pack_start(GTK_BOX(mainVBox),
00447                      mainHBox,
00448                      FALSE /* expand  */,
00449                      TRUE  /* fill    */,
00450                      0     /* padding */);
00451 
00452   gtk_signal_connect(GTK_OBJECT(applyButton),
00453                      "clicked",
00454                      GTK_SIGNAL_FUNC(gdisp_applyChangesCallback),
00455                      (gpointer)kernel);
00456 
00457   gtk_signal_connect_object(GTK_OBJECT(closeButton),
00458                             "clicked",
00459                             (GtkSignalFunc)gtk_widget_destroy,
00460                             GTK_OBJECT(kernel->widgets.dataBookWindow));
00461 
00462   /*
00463    * This grabs this button to be the default button.
00464    * Simply hitting the "Enter" key will cause this button to activate.
00465    */
00466   GTK_WIDGET_SET_FLAGS(applyButton,GTK_CAN_DEFAULT);
00467   GTK_WIDGET_SET_FLAGS(closeButton,GTK_CAN_DEFAULT);
00468   gtk_widget_grab_default(closeButton);
00469 
00470   /*
00471    * Remember apply button identity.
00472    */
00473   kernel->widgets.dataBookApplyButton = applyButton;
00474 
00475 }
00476 
Framework Home Page.

Beware !! TSP wave is coming...