2022-07-12 01:08:04 +05:30
/* -----------------------------------------------------------------------------
* ipdcGui . c
*
* iPDC - Phasor Data Concentrator
*
* Copyright ( C ) 2011 - 2012 Nitesh Pandit
* Copyright ( C ) 2011 - 2012 Kedar V . Khandeparkar
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
*
* Authors :
* Nitesh Pandit < panditnitesh @ gmail . com >
* Kedar V . Khandeparkar < kedar . khandeparkar @ gmail . com >
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <strings.h>
# include <netinet/in.h>
# include <gtk/gtk.h>
# include <glib.h>
# include <cairo/cairo.h>
# include <glib/gprintf.h>
# include <ctype.h>
2022-08-23 13:05:44 +05:30
# include <osm-gps-map.h>
2022-07-12 01:08:04 +05:30
# include "ipdcGui.h"
# include "global.h"
# include "connections.h"
# include "new_pmu_or_pdc.h"
# include "recreate.h"
/* ------------------------------------------------------------------------------------ */
/* Functions in ipdcGui.c */
/* ------------------------------------------------------------------------------------ */
/* 1. int isNumber(char *s); */
/* 2. void destroy (GtkWidget *widget, gpointer udata); */
/* 3. GdkPixbuf *create_pixbuf(const gchar * filename); */
/* 4. void display_pdc_detail (GtkButton *widget, gpointer udata); */
/* 5. void about_ipdc (GtkButton *widget, gpointer udata); */
/* 6. void ipdc_help (GtkButton *but, gpointer udata); */
/* 7. void validation_result (char *msg); */
/* 8. void ipdc_colors(); */
/* 9. void final_pdc_setup_call(); */
/* 10. int validation_pdc_detail (GtkButton *button, gpointer udata); */
/* 11. void validation_setup_file_name (GtkWidget *widget, gpointer data); */
/* 12. int add_pmu_validation (GtkButton *but, gpointer udata); */
/* 13. int cmd_or_remove_pmu_validation (GtkButton *but, gpointer udata); */
/* 14. int new_pdc_validation (GtkButton *but, gpointer udata); */
/* 15. int remove_pdc_validation (GtkButton *but, gpointer udata); */
/* 16. void fill_pdc_details (char *filePath); */
/* 17. void add_pmu (GtkButton *but, gpointer udata); */
/* 18. void cmd_or_remove_pmu (GtkButton *but, gpointer udata); */
/* 19. void add_new_pdc (GtkButton *but, gpointer udata); */
/* 20. void remove_pdc (GtkButton *but, gpointer udata); */
/* 21. void connection_table (GtkButton *but, gpointer udata); */
/* 22. void ipdc_setup_fileSelector (GtkWidget *widget, gpointer udata); */
2022-07-20 01:56:51 +05:30
/* 23. void view_setup_file (GtkWidget *w, GtkFileChooser *fs); */
2022-07-12 01:08:04 +05:30
/* 24. void apply_ipdc_setup (GtkWidget *w, gpointer udata); */
/* 25. void* display_time(); */
/* */
/* ------------------------------------------------------------------------------------ */
/* ---------------------------------------------------------------------------- */
/* FUNCTION isNumber(char *s): */
/* It checks the passing character is a number or not, return 0 if its a */
/* otherwise returns 1. */
/* ---------------------------------------------------------------------------- */
int isNumber ( char * s )
{
int dot = 0 , num = 0 , end = 0 ;
while ( isspace ( * s ) ) s + + ;
if ( * s = = ' - ' ) s + + ;
if ( ! * s ) return 0 ;
while ( * s )
if ( isspace ( * s ) )
end = 1 , s + + ;
else if ( end )
return 0 ;
else if ( isdigit ( * s ) )
num = 1 , s + + ;
else if ( * s = = ' . ' )
if ( dot )
return 0 ;
else
dot = 1 , s + + ;
else
return 0 ;
return num ;
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION destroy (GtkWidget *widget, gpointer udata): */
/* It Destroy(close) the iPDC main window with child (if any open) and */
/* also close the opened terminal. */
/* ---------------------------------------------------------------------------- */
void destroy ( GtkWidget * widget , gpointer udata )
{
FILE * f ;
char name [ 20 ] , * psid , * psname , psN [ 15 ] ;
g_print ( " \n iPDC Closing Now. \n \n " ) ;
gtk_main_quit ( ) ;
exit ( 1 ) ;
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION GdkPixbuf *create_pixbuf(const gchar * filename) */
/* function creates a new pixbuf by loading an image from a file. */
/* The file format is detected automatically. If NULL, error will be set. */
/* ---------------------------------------------------------------------------- */
GdkPixbuf * create_pixbuf ( const gchar * filename )
{
GdkPixbuf * pixbuf ;
GError * error = NULL ;
pixbuf = gdk_pixbuf_new_from_file ( filename , & error ) ;
if ( ! pixbuf )
{
fprintf ( stderr , " %s \n " , error - > message ) ;
g_error_free ( error ) ;
}
return pixbuf ;
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION display_pdc_detail (GtkButton *widget, gpointer udata) */
/* It displays the details of running iPDC software on your machine */
/* to user at any time. */
/* ---------------------------------------------------------------------------- */
void display_pdc_detail ( GtkButton * widget , gpointer udata )
{
/* local variables */
int rows = 0 ;
char line [ 20 ] ;
char * markup ;
GtkWidget * new_window , * table ;
GtkWidget * label , * ok_button ;
FILE * file_1 ;
/* Open the file 'ipdc?.bin' in read mode */
file_1 = fopen ( ipdcFilePath , " rb " ) ;
if ( file_1 ! = NULL )
{
/* If its available, then create a new dialog window for displaying the iPDC details. */
new_window = gtk_dialog_new ( ) ;
g_signal_connect ( new_window , " destroy " , G_CALLBACK ( gtk_widget_destroy ) , new_window ) ;
gtk_window_set_title ( GTK_WINDOW ( new_window ) , " iPDC Details " ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( new_window ) , 10 ) ;
gtk_window_set_resizable ( GTK_WINDOW ( new_window ) , FALSE ) ;
/* create a table of 8 by 2 squares. */
rows = 6 ;
table = gtk_table_new ( rows , 2 , FALSE ) ;
/* set the spacing to 10 on x and 10 on y */
gtk_table_set_row_spacings ( GTK_TABLE ( table ) , 16 ) ;
gtk_table_set_col_spacings ( GTK_TABLE ( table ) , 16 ) ;
/* pack the table into the window */
2022-07-20 01:56:51 +05:30
gtk_box_pack_start ( GTK_BOX ( GTK_DIALOG ( new_window ) ) , table , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_show ( table ) ;
/* Add a "close" button to the bottom of the dialog */
ok_button = gtk_button_new_from_stock ( GTK_STOCK_OK ) ; // or GTK_STOCK_APPLY);
/* This simply creates a grid of labels on the table to demonstrate the window.
g_markup_printf_escaped ( ) : function to display diffrent color and font of text on label */
label = gtk_label_new ( " " ) ;
markup = g_markup_printf_escaped ( " <span foreground= \" #7D2252 \" font='12'><b>iPDC Details</b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 2 , 0 , 1 ) ;
gtk_widget_show ( label ) ;
g_free ( markup ) ;
label = gtk_label_new ( " iPDC ID Code " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " iPDC UDP Port " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 2 , 3 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " iPDC TCP Port " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 3 , 4 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Database Server IP " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 4 , 5 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Database Server Port " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 5 , 6 ) ;
gtk_widget_show ( label ) ;
/* This simply read from file and print on label in the table. */
memset ( line , ' \0 ' , sizeof ( line ) ) ;
fgets ( line , 20 , file_1 ) ;
memset ( line , ' \0 ' , sizeof ( line ) ) ;
fgets ( line , 20 , file_1 ) ;
label = gtk_label_new ( line ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
memset ( line , ' \0 ' , sizeof ( line ) ) ;
fgets ( line , 20 , file_1 ) ;
label = gtk_label_new ( line ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , 2 , 3 ) ;
gtk_widget_show ( label ) ;
memset ( line , ' \0 ' , sizeof ( line ) ) ;
fgets ( line , 20 , file_1 ) ;
label = gtk_label_new ( line ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , 3 , 4 ) ;
gtk_widget_show ( label ) ;
memset ( line , ' \0 ' , sizeof ( line ) ) ;
fgets ( line , 20 , file_1 ) ;
label = gtk_label_new ( line ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , 4 , 5 ) ;
gtk_widget_show ( label ) ;
fclose ( file_1 ) ;
/* This is print static text (9000) on label in the table. */
label = gtk_label_new ( " 9000 " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , 5 , 6 ) ;
gtk_widget_show ( label ) ;
/* Define signal on ok_button when it "clicked". */
g_signal_connect_swapped ( ok_button , " clicked " , G_CALLBACK ( gtk_widget_destroy ) , new_window ) ;
/* This makes it so the ok_button is the default. */
gtk_widget_set_can_default ( ok_button , TRUE ) ;
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( gtk_dialog_get_action_area ( new_window ) , ok_button , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
/* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */
gtk_widget_grab_default ( ok_button ) ;
gtk_widget_show ( ok_button ) ;
/* Finally show the new_window. */
gtk_widget_show ( new_window ) ;
}
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION about_ipdc (GtkButton *widget, gpointer udata) */
/* It display the information about iPDC Software like authors, licensing, etc. */
/* ---------------------------------------------------------------------------- */
void about_ipdc ( GtkButton * widget , gpointer udata )
{
/* local variables */
GtkWidget * about_dialog ;
const gchar * auth [ ] = { " \n Dr. A.M. Kulkarni <http://www.ee.iitb.ac.in/wiki/faculty/anil> " , " \n Nitesh Pandit <panditnitesh@gmail.com> " , " \n Kedar V. Khandeparkar <kedar.khandeparkar@gmail.com> " , " \n Gopal Gajjar <gopal@ee.iitb.ac.in> " , NULL } ;
/* Create a about dialog for displaying about the iPDC. */
about_dialog = gtk_about_dialog_new ( ) ;
/* Define the diffrent properties of about_dialog. */
gtk_about_dialog_set_program_name ( ( GtkAboutDialog * ) about_dialog , " " ) ;
gtk_about_dialog_set_comments ( ( GtkAboutDialog * ) about_dialog , " Authors : \n Nitesh Pandit \n Kedar Khandeparkar " ) ; //nWide Aera Measurement System\nDepartment of Electrical Engineering\nIndian Institute of Technology, Bombay\nMumbai, INDIA");
gtk_about_dialog_set_license ( ( GtkAboutDialog * ) about_dialog , " iPDC - A Free Phasor Data Concentrator & PMU Simulator \n \n General Public License (GPL) \n \n Authors: \n \t \t Nitesh Pandit <panditnitesh@gmail.com> \n \t \t Kedar V. Khandeparkar <kedar.khandeparkar@gmail.com> \n \n \n This program is free software; you can redistribute it and/or \n modify it under the terms of the GNU General Public License \n as published by the Free Software Foundation; either version 2 \n of the License, or (at your option) any later version. \n \n This program is distributed in the hope that it will be useful, \n but WITHOUT ANY WARRANTY; without even the implied warranty of \n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n GNU General Public License for more details. \n \n You should have received a copy of the GNU General Public License \n along with this program; if not, write to the Free Software \n Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. \n " ) ;
gtk_about_dialog_set_logo ( ( GtkAboutDialog * ) about_dialog , create_pixbuf ( " /usr/local/share/iPDC/ipdcLogo1.png " ) ) ;
gtk_about_dialog_set_website ( ( GtkAboutDialog * ) about_dialog , " \n http://ipdc.codeplex.com/ \n " ) ;
gtk_about_dialog_set_copyright ( ( GtkAboutDialog * ) about_dialog , " Copyright (C) 2011-2012 GPL3 " ) ;
gtk_about_dialog_set_authors ( ( GtkAboutDialog * ) about_dialog , auth ) ;
gtk_about_dialog_set_logo ( ( GtkAboutDialog * ) about_dialog , NULL ) ;
/* Ensure that the dialog box is destroyed when the user responds */
g_signal_connect_swapped ( about_dialog , " response " , G_CALLBACK ( gtk_widget_destroy ) , about_dialog ) ;
/* Finally show the about_dialog. */
gtk_widget_show_all ( about_dialog ) ;
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION ipdc_help (GtkButton *but, gpointer udata) */
/* It shows the general guidelines to user to fill the entries for connecting, */
/* or disconnecting devices in iPDC Software. */
/* ---------------------------------------------------------------------------- */
void ipdc_help ( GtkButton * but , gpointer udata )
{
/* local variables */
GtkWidget * help_dialog ;
/* Create a about dialog for displaying iPDC help. */
help_dialog = gtk_about_dialog_new ( ) ;
/* Define the diffrent properties of about_dialog. */
gtk_about_dialog_set_program_name ( ( GtkAboutDialog * ) help_dialog , " iPDC HELP \n " ) ;
gtk_about_dialog_set_comments ( ( GtkAboutDialog * ) help_dialog , " 1) ID Code should be integer i.e. 50, 60, etc. \n 2) Port should be >1500 && < 65535. \t \t \n 3) IP Address should be like 192.168.23.10. " ) ;
/* Ensure that the dialog box is destroyed when the user responds */
g_signal_connect_swapped ( help_dialog , " response " , G_CALLBACK ( gtk_widget_destroy ) , help_dialog ) ;
/* Finally show the about_dialog. */
gtk_widget_show_all ( help_dialog ) ;
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION validation_result (char *msg) */
/* It displays the status message of last performed operation. */
/* ---------------------------------------------------------------------------- */
void validation_result ( char * msg )
{
/* local variables */
GtkWidget * val_dialog ;
/* Create a new about dialog to displaying the status message of last performed operation. */
val_dialog = gtk_about_dialog_new ( ) ;
/* Define the diffrent properties of val_dialog. */
2022-08-11 00:36:01 +05:30
// gtk_about_dialog_set_program_name ((GtkAboutDialog *)val_dialog, " ");
2022-07-12 01:08:04 +05:30
gtk_about_dialog_set_comments ( ( GtkAboutDialog * ) val_dialog , msg ) ;
/* Ensure that the dialog box is destroyed when the user responds */
g_signal_connect_swapped ( val_dialog , " response " , G_CALLBACK ( gtk_widget_destroy ) , val_dialog ) ;
/* Finally show the val_dialog. */
gtk_widget_show_all ( val_dialog ) ;
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION ipdc_colors(): */
/* It fills the colors in text on lables and set the images on given buttons. */
/* It called in main only one time to initialized all the parameters. */
/* ---------------------------------------------------------------------------- */
void ipdc_colors ( )
{
GtkTextBuffer * buffer , * buffer1 ;
GtkTextMark * cursor , * cursor1 ;
GtkTextIter iter , iter1 ;
char * markup11 ;
markup11 = g_markup_printf_escaped ( " <span foreground= \" #333333 \" font='10'><b>Admin Operations</b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( data - > admin_label ) , markup11 ) ;
g_free ( markup11 ) ;
markup11 = g_markup_printf_escaped ( " <span foreground= \" #330000 \" font='8'>@All Rights Reserved</span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( data - > rights_label ) , markup11 ) ;
g_free ( markup11 ) ;
/* Set the image (iPDC-logo) on a specific textview1 */
buffer1 = gtk_text_view_get_buffer ( GTK_TEXT_VIEW ( data - > text_view1 ) ) ;
cursor1 = gtk_text_buffer_get_insert ( buffer1 ) ;
gtk_text_buffer_get_iter_at_mark ( buffer1 , & iter1 , cursor1 ) ;
gtk_text_buffer_insert_pixbuf ( buffer1 , & iter1 , create_pixbuf ( " /usr/local/share/iPDC/ipdcLogo.png " ) ) ;
gtk_widget_show ( data - > text_view1 ) ;
/* Set the general image on a textview */
buffer = gtk_text_view_get_buffer ( GTK_TEXT_VIEW ( data - > text_view ) ) ;
cursor = gtk_text_buffer_get_insert ( buffer ) ;
gtk_text_buffer_get_iter_at_mark ( buffer , & iter , cursor ) ;
gtk_text_buffer_insert_pixbuf ( buffer , & iter , create_pixbuf ( " /usr/local/share/iPDC/PSLab.PNG " ) ) ;
gtk_widget_show ( data - > text_view ) ;
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION validation_pdc_detail (GtkButton *button, gpointer udata) */
/* It Validates the user enterd details for iPDC device. It gives the */
/* successful message and go ahead with entered data if all entries */
/* were right, else it shows the validation error message to user. */
/* ---------------------------------------------------------------------------- */
int validation_pdc_detail ( GtkButton * button , gpointer udata )
{
/* local variables */
char * errmsg1 , ip [ 20 ] ;
const char * text , * text1 , * text2 , * text3 ;
/* Get the text entries filled by user */
text = gtk_entry_get_text ( GTK_ENTRY ( p_id ) ) ;
text1 = gtk_entry_get_text ( GTK_ENTRY ( p_udp ) ) ;
text2 = gtk_entry_get_text ( GTK_ENTRY ( p_tcp ) ) ;
text3 = gtk_entry_get_text ( GTK_ENTRY ( p_ip ) ) ;
memset ( ip , ' \0 ' , 20 ) ;
strcat ( ip , text3 ) ;
if ( ! isNumber ( ( char * ) text ) | | ! ( atoi ( text ) > 0 ) | | ( PDC_IDCODE = = atoi ( text ) ) )
{
errmsg1 = " Not a valid iPDC ID value! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
else if ( ! isNumber ( ( char * ) text1 ) | | ! ( atoi ( text1 ) > 1500 & & atoi ( text1 ) < 65535 ) | | ( atoi ( text1 ) = = 9000 ) )
{
errmsg1 = " Not a valid iPDC UDP Port, must not be 9000! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
else if ( ! isNumber ( ( char * ) text2 ) | | ! ( atoi ( text2 ) > 1500 & & atoi ( text2 ) < 65535 ) | | ( atoi ( text2 ) = = atoi ( text1 ) ) | | ( atoi ( text2 ) = = 9000 ) )
{
errmsg1 = " Not a valid iPDC TCP Port! \n Must be different from UDP port & 9000. Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
else if ( ! checkip ( ip ) ) /* Check text_box entry for valid IP Address or not? */
{
errmsg1 = " Not a valid IP Addess for iPDC-Database Server! Try again \n " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
else /* Only if all the text_box entries were right */
{
PDC_IDCODE = atoi ( text ) ;
UDPPORT = atoi ( text1 ) ;
TCPPORT = atoi ( text2 ) ;
memset ( dbserver_ip , ' \0 ' , 20 ) ;
strcpy ( dbserver_ip , ( char * ) text3 ) ;
FILE * fp_ptr ;
/* Open the file "ipdc?.bin" and write all the enterd informations */
memset ( ipdcFilePath , ' \0 ' , 200 ) ;
strcpy ( ipdcFilePath , ipdcFolderPath ) ;
strcat ( ipdcFilePath , " / " ) ;
strcat ( ipdcFilePath , " ipdc " ) ;
strcat ( ipdcFilePath , text ) ;
strcat ( ipdcFilePath , " .bin " ) ;
ipdcFilePath [ strlen ( ipdcFilePath ) ] = ' \0 ' ;
/* Close/destroy the pdc_detail_window */
gtk_widget_destroy ( pdc_detail_window ) ;
fp_ptr = fopen ( ipdcFilePath , " rb " ) ;
if ( fp_ptr = = NULL )
{
final_pdc_setup_call ( ) ;
}
else
{
/* Close the open iPDC Setup file */
fclose ( fp_ptr ) ;
GtkWidget * table , * label , * yes , * no ;
/* Create a new dialog window for PMU Server Setup */
new_window = gtk_dialog_new ( ) ;
gtk_window_set_title ( GTK_WINDOW ( new_window ) , " Warning! " ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( new_window ) , 10 ) ;
/* Create a table of 4 by 2 squares. */
table = gtk_table_new ( 4 , 3 , FALSE ) ;
/* Set the spacing to 50 on x and 5 on y */
gtk_table_set_row_spacings ( GTK_TABLE ( table ) , 15 ) ;
gtk_table_set_col_spacings ( GTK_TABLE ( table ) , 5 ) ;
/* Pack the table into the window */
2022-07-20 01:56:51 +05:30
gtk_box_pack_start ( GTK_BOX ( GTK_DIALOG ( new_window ) ) , table , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_show ( table ) ;
/* Add few buttons to the bottom of the dialog */
yes = gtk_button_new_with_label ( " YES " ) ;
no = gtk_button_new_with_label ( " NO " ) ;
/* This simply creates a grid of toggle buttons on the table */
label = gtk_label_new ( " " ) ;
markup = g_markup_printf_escaped ( " <span foreground= \" #F13313 \" font='12'><b>Warning!</b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , 0 , 1 ) ;
gtk_widget_show ( label ) ;
g_free ( markup ) ;
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 3 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " " ) ;
markup = g_markup_printf_escaped ( " <span foreground= \" #333333 \" font='10'><b>iPDC Setup File with the given ID code is alredy present \n in the system. Do you want to overwrite it?</b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , 2 , 3 ) ;
gtk_widget_show ( label ) ;
g_free ( markup ) ;
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 3 , 3 , 4 ) ;
gtk_widget_show ( label ) ;
/* Signal handling for buttons on PMU Server Setup Window */
g_signal_connect ( yes , " clicked " , G_CALLBACK ( validation_setup_file_name ) , ( gpointer ) " yes " ) ;
g_signal_connect ( no , " clicked " , G_CALLBACK ( validation_setup_file_name ) , ( gpointer ) " no " ) ;
g_signal_connect ( new_window , " destroy " , G_CALLBACK ( gtk_widget_destroy ) , new_window ) ;
g_signal_connect_swapped ( new_window , " response " , G_CALLBACK ( gtk_widget_destroy ) , new_window ) ;
/* This makes it so the button is the default. */
gtk_widget_set_can_default ( yes , TRUE ) ;
gtk_widget_set_can_default ( no , TRUE ) ;
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( gtk_dialog_get_action_area ( new_window ) , yes , TRUE , TRUE , 0 ) ;
gtk_box_pack_start ( gtk_dialog_get_action_area ( new_window ) , no , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
/* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */
gtk_widget_grab_default ( yes ) ;
gtk_widget_show ( yes ) ;
gtk_widget_grab_default ( no ) ;
gtk_widget_show ( no ) ;
/* Finally show the new_window */
gtk_widget_show ( new_window ) ;
}
return 1 ;
}
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION validation_setup_file_name (GtkWidget *widget, gpointer data) */
/* It Validates the user's choice, whether he wants to go with new iPDC setup, */
/* or want to fill the new iPDC setup details? */
/* ---------------------------------------------------------------------------- */
void validation_setup_file_name ( GtkWidget * widget , gpointer data )
{
char t [ 4 ] ;
strcpy ( t , ( char * ) data ) ;
/* destroy the warning window */
gtk_widget_destroy ( new_window ) ;
/* Match the user's choice and take appropiate action? */
if ( ! strcmp ( t , " yes " ) )
{
/* User with ok with overwtithing new iPDC setup, then call the final setup call*/
final_pdc_setup_call ( ) ;
}
else
{
/* User do not want to overwtithing new iPDC setup, then again call iPDC setup window */
fill_pdc_details ( NULL ) ;
}
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION final_pdc_setup_call() */
/* It will create the iPDC setup file and intialize the few global variable. */
/* ---------------------------------------------------------------------------- */
void final_pdc_setup_call ( )
{
/* local variables */
char buff [ 50 ] ;
FILE * fp_ptr ;
fp_ptr = fopen ( ipdcFilePath , " wb " ) ;
fputs ( " ipdcServer " , fp_ptr ) ;
fputs ( " 1 " , fp_ptr ) ;
fputc ( ' \n ' , fp_ptr ) ;
memset ( buff , ' \0 ' , 50 ) ;
sprintf ( buff , " %d " , PDC_IDCODE ) ;
fputs ( buff , fp_ptr ) ;
fputc ( ' \n ' , fp_ptr ) ;
memset ( buff , ' \0 ' , 50 ) ;
sprintf ( buff , " %d " , UDPPORT ) ;
fputs ( buff , fp_ptr ) ;
fputc ( ' \n ' , fp_ptr ) ;
memset ( buff , ' \0 ' , 50 ) ;
sprintf ( buff , " %d " , TCPPORT ) ;
fputs ( buff , fp_ptr ) ;
fputc ( ' \n ' , fp_ptr ) ;
fputs ( dbserver_ip , fp_ptr ) ;
fputc ( ' \n ' , fp_ptr ) ;
fputs ( " LowerDevices 0 " , fp_ptr ) ;
fputc ( ' \n ' , fp_ptr ) ;
fputs ( " UpperDevices 0 " , fp_ptr ) ;
fputc ( ' \n ' , fp_ptr ) ;
fputs ( " SourcesCFG 0 " , fp_ptr ) ;
fputc ( ' \n ' , fp_ptr ) ;
fclose ( fp_ptr ) ;
/* Enable all (mentioned) buttons on main ipdc window */
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > add_pmu_button ) , TRUE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > remove_pmu_button ) , TRUE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > cmd_data_off_button ) , TRUE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > cmd_data_on_button ) , TRUE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > cmd_cfg_button ) , TRUE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > add_pdc_button ) , TRUE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > remove_pdc_button ) , TRUE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > display_conn_table_button ) , TRUE ) ;
2022-08-11 00:36:01 +05:30
// gtk_menu_attach_to_widget (GTK_MENU (data->menuitem2), GTK_WIDGET (data->ipdc), NULL);
// gtk_widget_show (data->ipdc);
gtk_widget_set_visible ( GTK_WIDGET ( data - > menu_conn_table ) , TRUE ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_set_visible ( GTK_WIDGET ( data - > pdc_details_menuitem ) , TRUE ) ;
2022-08-11 00:36:01 +05:30
// /* Disable the menuitem for iPDC details entries */
2022-07-12 01:08:04 +05:30
gtk_widget_set_visible ( GTK_WIDGET ( data - > enter_pdc_detail_menuitem ) , FALSE ) ;
gtk_widget_set_visible ( GTK_WIDGET ( data - > open_ipdc_setup ) , FALSE ) ;
/* setup() call to stablish the connections at iPDC restart */
recreate_cfg_objects ( ) ;
setup ( ) ;
validation_result ( " iPDC Setup is successfully done. " ) ;
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION add_pmu_validation (GtkButton *but, gpointer udata) */
/* It Validates the user enterd details for add Source devices (PMU/PDC). */
/* It gives the successful message and go ahead with entered data if */
/* all entries were right, else it shows the validation error message to user. */
/* ---------------------------------------------------------------------------- */
int add_pmu_validation ( GtkButton * but , gpointer udata )
{
/* local variables */
int ret ;
char * errmsg1 , ip [ 20 ] , tmp [ 4 ] ;
const char * text , * text1 , * text2 , * text3 ;
/* Get the text entries filled by user */
text = gtk_entry_get_text ( GTK_ENTRY ( p_id ) ) ;
text1 = gtk_entry_get_text ( GTK_ENTRY ( p_ip ) ) ;
text2 = gtk_entry_get_text ( GTK_ENTRY ( p_port ) ) ;
2022-07-20 01:56:51 +05:30
text3 = gtk_combo_box_text_get_active_text ( GTK_COMBO_BOX ( p_protocol ) ) ;
2022-07-12 01:08:04 +05:30
memset ( ip , ' \0 ' , 20 ) ;
strcat ( ip , text1 ) ;
strcpy ( tmp , text3 ) ;
if ( ( ! isNumber ( ( char * ) text ) ) | | ! ( atoi ( text ) > 0 ) | | ( atoi ( text ) = = PDC_IDCODE ) ) /* Check text_box entry for valid integer or not? */
{
errmsg1 = " Not a valid Source Device ID code! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
else if ( ! isNumber ( ( char * ) text2 ) | | ! ( atoi ( text2 ) > 1500 & & atoi ( text2 ) < 65535 ) | | ( atoi ( text2 ) = = TCPPORT ) | | ( atoi ( text2 ) = = UDPPORT ) | | ( atoi ( text2 ) = = DBPORT ) ) /* TCP and UDP port of iPDC should not match with it */
{
errmsg1 = " Not a valid Port for Source Device! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
else if ( ! checkip ( ip ) ) /* Check text_box entry for valid IP Address or not? */
{
errmsg1 = " Not a valid IP Addess of Source Device! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
else /* Only if all the text_box entries were right */
{
/* call add_PMU() to actual add pmu/pdc and start communication */
ret = add_PMU ( ( char * ) text , ( char * ) text1 , ( char * ) text2 , ( char * ) text3 ) ;
if ( ret = = 0 )
{
/* Close/destroy the add_pmu_window */
gtk_widget_destroy ( add_pmu_window ) ;
errmsg1 = " Source Device Successfully Added. " ;
validation_result ( errmsg1 ) ; /* Show the success message to user */
return 1 ;
}
else
{
errmsg1 = " Device details already exists! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
}
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION cmd_or_remove_pmu_validation (GtkButton *but, gpointer udata) */
/* It Validates the user enterd details for function Removes the Source devices */
/* or send command frames to Source devices. It gives the successful message */
/* and go ahead with entered data if all entries were right, */
/* else it shows the validation error message to user. */
/* ---------------------------------------------------------------------------- */
int cmd_or_remove_pmu_validation ( GtkButton * but , gpointer udata )
{
/* local variables */
int ret ;
char * errmsg1 , tmp [ 4 ] ;
/* Get the text entries filled by user */
if ( gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chkBtn ) ) = = TRUE )
{
set_all = 1 ;
if ( ! strcmp ( find_butn , " 1 " ) ) /* If function called by 'Remove source device' */
{
/* call remove_Lower_Node() to remove source device */
ret = remove_Lower_Node ( NULL , NULL ) ;
if ( ret = = 0 )
{
/* Close/destroy the Source remove window */
gtk_widget_destroy ( new_window ) ;
errmsg1 = " Source device successfully removed. " ;
validation_result ( errmsg1 ) ;
return 1 ;
}
else
{
errmsg1 = " Entered Source device not found! Try again " ;
validation_result ( errmsg1 ) ;
return 0 ;
}
}
else if ( ! strcmp ( find_butn , " 2 " ) ) /* If function called by 'Send Data Transmission OFF' */
{
/* call put_data_transmission_off() to put OFF data of source device */
ret = put_data_transmission_off ( NULL , NULL ) ;
if ( ret = = 0 )
{
/* Close/destroy the Send command frame window */
gtk_widget_destroy ( new_window ) ;
errmsg1 = " Data Transmission OFF now for given device. " ;
validation_result ( errmsg1 ) ;
return 1 ;
}
else
{
errmsg1 = " Entered Source device not found! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
}
else if ( ! strcmp ( find_butn , " 3 " ) ) /* If function called by 'Send Data Transmission ON' */
{
/* call put_data_transmission_on() to put ON data of source device */
ret = put_data_transmission_on ( NULL , NULL ) ;
if ( ret = = 0 )
{
/* Close/destroy the Send command frame window */
gtk_widget_destroy ( new_window ) ;
errmsg1 = " Data Transmission ON now for given device. " ;
validation_result ( errmsg1 ) ;
return 1 ;
}
else
{
errmsg1 = " Entered Source device not found! Try again " ;
validation_result ( errmsg1 ) ;
return 0 ;
}
}
else if ( ! strcmp ( find_butn , " 4 " ) ) /* If function called by Send Configuration request */
{
/* call configuration_request() to send Configuration request */
ret = configuration_request ( NULL , NULL ) ;
if ( ret = = 0 )
{
/* Close/destroy the Send command frame window */
gtk_widget_destroy ( new_window ) ;
errmsg1 = " Configuration Frame request sent to given device " ;
validation_result ( errmsg1 ) ;
return 1 ;
}
else
{
errmsg1 = " Entered Source device not found! Try again " ;
validation_result ( errmsg1 ) ;
return 0 ;
}
}
else
{
errmsg1 = " UNKNOWN FUNCTION CALL??? Try again " ;
validation_result ( errmsg1 ) ;
return 1 ;
}
}
else
{
const char * text , * text1 ;
text = gtk_entry_get_text ( GTK_ENTRY ( p_id ) ) ;
2022-07-20 01:56:51 +05:30
text1 = gtk_combo_box_text_get_active_text ( GTK_COMBO_BOX ( p_protocol ) ) ;
2022-07-12 01:08:04 +05:30
memset ( tmp , ' \0 ' , 4 ) ;
strcpy ( tmp , text1 ) ;
if ( ( ! isNumber ( ( char * ) text ) ) | | ! ( atoi ( text ) > 0 ) | | ( atoi ( text ) = = PDC_IDCODE ) ) /* Check text_box entry for valid integer or not? */
{
errmsg1 = " Not a valid Source Device ID code! Try again " ;
validation_result ( errmsg1 ) ;
return 0 ;
}
else /* Only if all the text_box entries were right */
{
if ( ! strcmp ( find_butn , " 1 " ) ) /* If function called by 'Remove source device' */
{
/* call remove_Lower_Node() to remove source device */
ret = remove_Lower_Node ( ( char * ) text , ( char * ) text1 ) ;
if ( ret = = 0 )
{
/* Close/destroy the Source remove window */
gtk_widget_destroy ( new_window ) ;
errmsg1 = " Source device successfully removed. " ;
validation_result ( errmsg1 ) ; /* Show the success message to user */
return 1 ;
}
else
{
errmsg1 = " Entered Source device not found! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
}
else if ( ! strcmp ( find_butn , " 2 " ) ) /* If function called by 'Send Data Transmission OFF' */
{
/* call put_data_transmission_off() to put OFF data of source device */
ret = put_data_transmission_off ( ( char * ) text , ( char * ) text1 ) ;
if ( ret = = 0 )
{
/* Close/destroy the Send command frame window */
gtk_widget_destroy ( new_window ) ;
errmsg1 = " Data Transmission OFF now for given device. " ;
validation_result ( errmsg1 ) ; /* Show the success message to user */
return 1 ;
}
else
{
errmsg1 = " Entered Source device not found! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
}
else if ( ! strcmp ( find_butn , " 3 " ) ) /* If function called by 'Send Data Transmission ON' */
{
/* call put_data_transmission_on() to put ON data of source device */
ret = put_data_transmission_on ( ( char * ) text , ( char * ) text1 ) ;
if ( ret = = 0 )
{
/* Close/destroy the Send command frame window */
gtk_widget_destroy ( new_window ) ;
errmsg1 = " Data Transmission ON now for given device. " ;
validation_result ( errmsg1 ) ; /* Show the success message to user */
return 1 ;
}
else
{
errmsg1 = " Entered Source device not found! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
}
else if ( ! strcmp ( find_butn , " 4 " ) ) /* If function called by Send Configuration request */
{
/* call configuration_request() to send Configuration request */
ret = configuration_request ( ( char * ) text , ( char * ) text1 ) ;
if ( ret = = 0 )
{
/* Close/destroy the Send command frame window */
gtk_widget_destroy ( new_window ) ;
errmsg1 = " Configuration Frame request sent to given device " ;
validation_result ( errmsg1 ) ; /* Show the success message to user */
return 1 ;
}
else
{
errmsg1 = " Entered Source device not found! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
}
else
{
errmsg1 = " UNKNOWN FUNCTION CALL??? Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 1 ;
}
}
}
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION new_pdc_validation (GtkButton *but, gpointer udata) */
/* It Validates the user enterd details for add Destination devices as PDC. */
/* It gives the successful message and go ahead with entered data if */
/* all entries were right, else it shows the validation error message to user. */
/* ---------------------------------------------------------------------------- */
int new_pdc_validation ( GtkButton * but , gpointer udata )
{
/* local variables */
int ret ;
const char * text , * text1 ;
char * errmsg1 , ip [ 20 ] , tmp [ 6 ] ;
/* Get the text entries for PDC, filled by user */
text = gtk_entry_get_text ( GTK_ENTRY ( p_ip ) ) ;
2022-07-20 01:56:51 +05:30
text1 = gtk_combo_box_text_get_active_text ( GTK_COMBO_BOX ( p_protocol ) ) ;
2022-07-12 01:08:04 +05:30
memset ( ip , ' \0 ' , 20 ) ;
strcat ( ip , text ) ;
strcpy ( tmp , text1 ) ;
if ( ! checkip ( ip ) ) /* Check text_box entry for valid IP Address or not? */
{
errmsg1 = " Not a valid IP Addess for Destination Device! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
else /* Only if all the text_box entries were right */
{
/* call add_PDC() to actual add pdc and start communication */
ret = add_PDC ( ( char * ) text , ( char * ) text1 ) ;
if ( ret = = 0 )
{
gtk_widget_destroy ( new_window ) ;
errmsg1 = " Destination device is successfully added. " ;
validation_result ( errmsg1 ) ; /* Show the success message to user */
return 1 ;
}
else
{
errmsg1 = " Device details already exists! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
}
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION remove_pdc_validation (GtkButton *but, gpointer udata) */
/* It Validates the user enterd details for remove Destination devices as PDC. */
/* It gives the successful message and go ahead with entered data if */
/* all entries were right, else it shows the validation error message to user. */
/* ---------------------------------------------------------------------------- */
int remove_pdc_validation ( GtkButton * but , gpointer udata )
{
/* local variables */
int ret ;
const char * text , * text1 , * text2 ;
char * errmsg1 , ip [ 20 ] , tmp [ 6 ] ;
/* Get the text entries for remove source device by user */
text = gtk_entry_get_text ( GTK_ENTRY ( p_ip ) ) ;
text1 = gtk_entry_get_text ( GTK_ENTRY ( p_port ) ) ;
2022-07-20 01:56:51 +05:30
text2 = gtk_combo_box_text_get_active_text ( GTK_COMBO_BOX ( p_protocol ) ) ;
2022-07-12 01:08:04 +05:30
memset ( ip , ' \0 ' , 20 ) ;
strcat ( ip , text ) ;
strcpy ( tmp , text2 ) ;
if ( ! isNumber ( ( char * ) text ) | | ! ( atoi ( text1 ) > 1500 | | ( atoi ( text1 ) < 65535 ) ) | | ( atoi ( text ) = = PDC_IDCODE ) )
{
errmsg1 = " Not a valid port of Destination Device! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
else if ( ! checkip ( ip ) ) /* Check text_box entry for valid IP Address or not? */
{
errmsg1 = " Not a valid IP Addess of Destination Device! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
else /* Only if all the text_box entries were right */
{
/* Call remove_PDC() to remove PDC device entry as well as objects if it presents */
ret = remove_PDC ( ( char * ) text , ( char * ) text1 , ( char * ) text2 ) ;
if ( ret = = 0 )
{
/* Close/destroy the remove PDC window */
gtk_widget_destroy ( new_window ) ;
errmsg1 = " Destination device is successfully removed. " ;
validation_result ( errmsg1 ) ; /* Show the success message to user */
return 1 ;
}
else
{
errmsg1 = " Entered destination device not found! Try again " ;
validation_result ( errmsg1 ) ; /* Show the unsuccess message to user */
return 0 ;
}
}
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION fill_pdc_details () */
/* This function called by main once to accept the iPDC details from user */
/* on a 'iPDC Setup' window. If teher is already a file 'ipdcINFO.bin' available */
/* then it read the file and initialized them globally. */
/* ---------------------------------------------------------------------------- */
void fill_pdc_details ( char * filePath )
{
if ( filePath ! = NULL )
{
/* Open the file 'ipdcINFO.bin' in read mode */
FILE * file_1 = fopen ( filePath , " rb " ) ;
if ( file_1 ! = NULL )
{
char line [ 20 ] ;
/* If file is present initialize the global varialbes by details in file */
memset ( line , ' \0 ' , sizeof ( line ) ) ;
fgets ( line , 20 , file_1 ) ;
memset ( line , ' \0 ' , sizeof ( line ) ) ;
fgets ( line , 20 , file_1 ) ;
PDC_IDCODE = atoi ( line ) ;
memset ( line , ' \0 ' , sizeof ( line ) ) ;
fgets ( line , 20 , file_1 ) ;
UDPPORT = atoi ( line ) ;
memset ( line , ' \0 ' , sizeof ( line ) ) ;
fgets ( line , 20 , file_1 ) ;
TCPPORT = atoi ( line ) ;
memset ( line , ' \0 ' , sizeof ( line ) ) ;
fgets ( line , 20 , file_1 ) ;
strcpy ( dbserver_ip , line ) ;
fclose ( file_1 ) ;
/* Disable all the (mentioned) buttons on main ipdc window */
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > add_pmu_button ) , TRUE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > remove_pmu_button ) , TRUE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > cmd_data_off_button ) , TRUE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > cmd_data_on_button ) , TRUE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > cmd_cfg_button ) , TRUE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > add_pdc_button ) , TRUE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > remove_pdc_button ) , TRUE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( data - > display_conn_table_button ) , TRUE ) ;
2022-08-11 14:13:57 +05:30
// gtk_widget_set_visible(GTK_WIDGET(data->menuitem2), FALSE);
2022-07-12 01:08:04 +05:30
gtk_widget_set_visible ( GTK_WIDGET ( data - > menu_conn_table ) , TRUE ) ;
gtk_widget_set_visible ( GTK_WIDGET ( data - > pdc_details_menuitem ) , TRUE ) ;
/* Desable the menuitem button if there is already enty for iPDC */
gtk_widget_set_visible ( GTK_WIDGET ( data - > enter_pdc_detail_menuitem ) , FALSE ) ;
gtk_widget_set_visible ( GTK_WIDGET ( data - > open_ipdc_setup ) , FALSE ) ;
/* Recreate the configuration objects and connection table */
recreate_cfg_objects ( ) ;
recreate_Connection_Table ( ) ;
/* setup() call to stablish the connections if any */
setup ( ) ;
}
}
else
{
/* local variables for iPDC Detail windows */
char * markup15 ;
GtkWidget * table , * label ;
GtkWidget * valdbutton , * help_button , * cancle_button ;
/* Create a new dialog window for iPDC Setup */
pdc_detail_window = gtk_dialog_new ( ) ;
g_signal_connect ( pdc_detail_window , " destroy " , G_CALLBACK ( gtk_widget_destroy ) , pdc_detail_window ) ;
gtk_window_set_title ( GTK_WINDOW ( pdc_detail_window ) , " iPDC Setup " ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( pdc_detail_window ) , 10 ) ;
/* Create a table of 6 by 2 squares. */
table = gtk_table_new ( 6 , 2 , FALSE ) ;
/* Set the spacing to 15 on x and 25 on y */
gtk_table_set_row_spacings ( GTK_TABLE ( table ) , 16 ) ;
gtk_table_set_col_spacings ( GTK_TABLE ( table ) , 16 ) ;
/* Pack the table into the window */
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( GTK_BOX ( gtk_dialog_get_content_area ( pdc_detail_window ) ) , table , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_show ( table ) ;
/* Add few button to the bottom of the dialog */
valdbutton = gtk_button_new_with_label ( " Add " ) ;
cancle_button = gtk_button_new_from_stock ( GTK_STOCK_CANCEL ) ;
help_button = gtk_button_new_from_stock ( GTK_STOCK_HELP ) ; // or GTK_STOCK_APPLY);
/* This simply creates a grid of toggle buttons on the table */
label = gtk_label_new ( " " ) ;
markup15 = g_markup_printf_escaped ( " <span foreground= \" #7D2252 \" font='12'><b>Fill iPDC Details</b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup15 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 2 , 0 , 1 ) ;
gtk_widget_show ( label ) ;
g_free ( markup15 ) ;
label = gtk_label_new ( " iPDC ID Code " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " iPDC UDP Port " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 2 , 3 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " iPDC TCP Port " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 3 , 4 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Database Server IP " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 4 , 5 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Database Server Port " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 5 , 6 ) ;
gtk_widget_show ( label ) ;
/* Create text boxes for user to enter appropriate values */
p_id = gtk_entry_new ( ) ;
gtk_entry_set_max_length ( ( GtkEntry * ) p_id , 5 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , p_id , 1 , 2 , 1 , 2 ) ;
gtk_widget_show ( p_id ) ;
p_udp = gtk_entry_new ( ) ;
gtk_entry_set_max_length ( ( GtkEntry * ) p_udp , 5 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , p_udp , 1 , 2 , 2 , 3 ) ;
gtk_widget_show ( p_udp ) ;
p_tcp = gtk_entry_new ( ) ;
gtk_entry_set_max_length ( ( GtkEntry * ) p_tcp , 5 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , p_tcp , 1 , 2 , 3 , 4 ) ;
gtk_widget_show ( p_tcp ) ;
p_ip = gtk_entry_new ( ) ;
gtk_entry_set_max_length ( ( GtkEntry * ) p_ip , 15 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , p_ip , 1 , 2 , 4 , 5 ) ;
gtk_widget_show ( p_ip ) ;
label = gtk_label_new ( " " ) ;
markup15 = g_markup_printf_escaped ( " <span foreground= \" #111111 \" font='12'><b>9000</b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup15 ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , 5 , 6 ) ;
gtk_widget_show ( label ) ;
/* Signal handling for buttons on iPDC Setup Window */
g_signal_connect_swapped ( valdbutton , " clicked " , G_CALLBACK ( validation_pdc_detail ) , NULL ) ;
g_signal_connect_swapped ( help_button , " clicked " , G_CALLBACK ( ipdc_help ) , NULL ) ;
g_signal_connect_swapped ( cancle_button , " clicked " , G_CALLBACK ( gtk_widget_destroy ) , pdc_detail_window ) ;
g_signal_connect_swapped ( pdc_detail_window , " destroy " , G_CALLBACK ( gtk_widget_destroy ) , pdc_detail_window ) ;
/* This makes it so the button is the default. */
gtk_widget_set_can_default ( valdbutton , TRUE ) ;
gtk_widget_set_can_default ( cancle_button , TRUE ) ;
gtk_widget_set_can_default ( help_button , TRUE ) ;
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( GTK_BOX ( gtk_dialog_get_action_area ( pdc_detail_window ) ) , valdbutton , TRUE , TRUE , 0 ) ;
gtk_box_pack_start ( GTK_BOX ( gtk_dialog_get_action_area ( pdc_detail_window ) ) , cancle_button , TRUE , TRUE , 0 ) ;
gtk_box_pack_start ( GTK_BOX ( gtk_dialog_get_action_area ( pdc_detail_window ) ) , help_button , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
/* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */
gtk_widget_grab_default ( valdbutton ) ;
gtk_widget_show ( valdbutton ) ;
gtk_widget_grab_default ( cancle_button ) ;
gtk_widget_show ( cancle_button ) ;
gtk_widget_grab_default ( help_button ) ;
gtk_widget_show ( help_button ) ;
/* Finally show the pdc_detail_window */
gtk_widget_show ( pdc_detail_window ) ;
}
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION add_pmu (GtkButton *but, gpointer udata) */
/* It open the add source device dialog window, and user have to enter */
/* the source device details of which he wants to connect. */
/* ---------------------------------------------------------------------------- */
void add_pmu ( GtkButton * but , gpointer udata )
{
/* local variables */
char * markup1 ;
GtkWidget * table , * close_button ;
GtkWidget * valdbutton , * help_button , * label ;
/* Create a new dialog window for Source Device Details */
add_pmu_window = gtk_dialog_new ( ) ;
g_signal_connect ( add_pmu_window , " destroy " , G_CALLBACK ( gtk_widget_destroy ) , add_pmu_window ) ;
gtk_window_set_title ( GTK_WINDOW ( add_pmu_window ) , " Add Source Device " ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( add_pmu_window ) , 10 ) ;
gtk_window_set_resizable ( GTK_WINDOW ( add_pmu_window ) , FALSE ) ;
/* Create a table of 5 by 2 squares. */
table = gtk_table_new ( 5 , 2 , FALSE ) ;
/* Set the spacing to 20 on x and 30 on y */
gtk_table_set_row_spacings ( GTK_TABLE ( table ) , 16 ) ;
gtk_table_set_col_spacings ( GTK_TABLE ( table ) , 16 ) ;
/* Pack the table into the window */
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( GTK_BOX ( gtk_dialog_get_content_area ( add_pmu_window ) ) , table , FALSE , FALSE , 0 ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_show ( table ) ;
/* Add few button to the bottom of the dialog */
close_button = gtk_button_new_with_label ( " close " ) ;
valdbutton = gtk_button_new_with_label ( " Add " ) ;
help_button = gtk_button_new_with_label ( " Help " ) ;
/* This simply creates a grid of toggle buttons on the table */
label = gtk_label_new ( " - " ) ;
markup1 = g_markup_printf_escaped ( " <span foreground= \" #7D2252 \" font='12'><b>Enter Source Device Details</b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup1 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 2 , 0 , 1 ) ;
gtk_widget_show ( label ) ;
g_free ( markup1 ) ;
label = gtk_label_new ( " Source ID Code " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Source IP Address " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 2 , 3 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Source Port Number " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 3 , 4 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Protocol " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_label_set_justify ( GTK_LABEL ( label ) , GTK_JUSTIFY_LEFT ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 4 , 5 ) ;
gtk_widget_show ( label ) ;
/* Create text boxes for user to enter appropriate values */
p_id = gtk_entry_new ( ) ;
gtk_entry_set_max_length ( ( GtkEntry * ) p_id , 5 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , p_id , 1 , 2 , 1 , 2 ) ;
gtk_widget_show ( p_id ) ;
p_ip = gtk_entry_new ( ) ;
gtk_entry_set_max_length ( ( GtkEntry * ) p_ip , 15 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , p_ip , 1 , 2 , 2 , 3 ) ;
gtk_widget_show ( p_ip ) ;
p_port = gtk_entry_new ( ) ;
gtk_entry_set_max_length ( ( GtkEntry * ) p_port , 5 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , p_port , 1 , 2 , 3 , 4 ) ;
gtk_widget_show ( p_port ) ;
/* Create combo boxe for user with some fixed values */
2022-07-20 01:56:51 +05:30
p_protocol = gtk_combo_box_text_new ( ) ;
gtk_combo_box_text_append_text ( GTK_COMBO_BOX ( p_protocol ) , " UDP " ) ;
gtk_combo_box_text_append_text ( GTK_COMBO_BOX ( p_protocol ) , " TCP " ) ;
2022-07-12 01:08:04 +05:30
gtk_combo_box_set_active ( GTK_COMBO_BOX ( p_protocol ) , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , p_protocol , 1 , 2 , 4 , 5 ) ;
gtk_widget_show ( p_protocol ) ;
/* Signal handling for buttons on Source Device Details Window */
g_signal_connect_swapped ( valdbutton , " clicked " , G_CALLBACK ( add_pmu_validation ) , valdbutton ) ;
g_signal_connect_swapped ( help_button , " clicked " , G_CALLBACK ( ipdc_help ) , NULL ) ;
g_signal_connect_swapped ( close_button , " clicked " , G_CALLBACK ( gtk_widget_destroy ) , add_pmu_window ) ;
/* This makes it so the button is the default. */
gtk_widget_set_can_default ( close_button , TRUE ) ;
gtk_widget_set_can_default ( valdbutton , TRUE ) ;
gtk_widget_set_can_default ( help_button , TRUE ) ;
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( gtk_dialog_get_action_area ( add_pmu_window ) , valdbutton , TRUE , TRUE , 0 ) ;
gtk_box_pack_start ( gtk_dialog_get_action_area ( add_pmu_window ) , help_button , TRUE , TRUE , 0 ) ;
gtk_box_pack_start ( gtk_dialog_get_action_area ( add_pmu_window ) , close_button , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
/* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */
gtk_widget_grab_default ( valdbutton ) ;
gtk_widget_show ( valdbutton ) ;
gtk_widget_grab_default ( help_button ) ;
gtk_widget_show ( help_button ) ;
gtk_widget_grab_default ( close_button ) ;
gtk_widget_show ( close_button ) ;
/* Finally show the add_pmu_window */
gtk_widget_show ( add_pmu_window ) ;
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION cmd_or_remove_pmu (GtkButton *but, gpointer udata) */
/* It is a common function for Remove Source Device and Send Different command */
/* frames to Source devices. */
/* ---------------------------------------------------------------------------- */
void cmd_or_remove_pmu ( GtkButton * but , gpointer udata )
{
/* local variables */
GtkWidget * scrolled_window , * window2 , * hbox1 ;
GtkWidget * table , * close_button ;
GtkWidget * valdbutton , * help_button , * label ;
int on_flag = 0 , off_flag = 0 , min_rows = 6 ;
char * markup2 ;
char * p_buff , tmp_str [ 20 ] ;
/* Copy the 'udata' that came along with signal to identifies which function should execute */
strcpy ( find_butn , ( char * ) udata ) ;
memset ( buff , ' \0 ' , strlen ( buff ) ) ;
/* Create a new dialog window for the scrolled window to be packed into */
new_window = gtk_dialog_new ( ) ;
g_signal_connect ( new_window , " destroy " , G_CALLBACK ( gtk_widget_destroy ) , new_window ) ;
/* Set the window title according to fired signal */
if ( ! strcmp ( find_butn , " 1 " ) )
{
gtk_window_set_title ( GTK_WINDOW ( new_window ) , " Remove Source Device " ) ;
}
else if ( ! strcmp ( find_butn , " 2 " ) )
{
gtk_window_set_title ( GTK_WINDOW ( new_window ) , " Turn OFF Data Transmission " ) ;
}
else if ( ! strcmp ( find_butn , " 3 " ) )
{
gtk_window_set_title ( GTK_WINDOW ( new_window ) , " Turn ON Data Transmission " ) ;
}
else
{
gtk_window_set_title ( GTK_WINDOW ( new_window ) , " Configuration Frame Request " ) ;
}
gtk_container_set_border_width ( GTK_CONTAINER ( new_window ) , 10 ) ;
/* Create a new scrolled window */
scrolled_window = gtk_scrolled_window_new ( NULL , NULL ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( scrolled_window ) , 10 ) ;
gtk_widget_set_size_request ( scrolled_window , - 1 , 350 ) ;
/* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */
gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scrolled_window ) , GTK_POLICY_NEVER , GTK_POLICY_AUTOMATIC ) ;
/* The dialog window is created with a vbox packed into it */
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( GTK_BOX ( gtk_dialog_get_content_area ( new_window ) ) , scrolled_window , FALSE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_show ( scrolled_window ) ;
hbox1 = gtk_hbox_new ( FALSE , 16 ) ;
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( GTK_BOX ( gtk_dialog_get_content_area ( new_window ) ) , hbox1 , FALSE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_show ( hbox1 ) ;
window2 = gtk_alignment_new ( 0 , 0 , 0 , 0 ) ;
gtk_box_pack_start ( GTK_BOX ( hbox1 ) , window2 , FALSE , TRUE , 0 ) ;
gtk_widget_show ( window2 ) ;
/* create a table of 4 by 2 squares. */
table = gtk_table_new ( 20 , 4 , FALSE ) ;
/* Set the spacing to 15 on x and 25 on y */
gtk_table_set_row_spacings ( GTK_TABLE ( table ) , 4 ) ;
gtk_table_set_col_spacings ( GTK_TABLE ( table ) , 8 ) ;
/* Pack the table into the scrolled window */
gtk_scrolled_window_add_with_viewport ( GTK_SCROLLED_WINDOW ( scrolled_window ) , table ) ;
gtk_widget_show ( table ) ;
/* Open the file 'ipdcINFO.bin' in read mode */
set_all = 0 ;
struct Lower_Layer_Details * t = LLfirst ;
if ( t = = NULL )
{
/* Place lable on a spacific position on table with text 'No records were found'*/
label = gtk_label_new ( " " ) ;
markup2 = g_markup_printf_escaped ( " <span foreground= \" #7D2252 \" font='10'><b>No records were found. \n ------------------------------------------------------------------- \n </b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup2 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 4 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
g_free ( markup2 ) ;
}
else
{
/* Check wether fired signal from remove source or send CFG request */
/* Add the button with title according to fired signal */
if ( ! strcmp ( find_butn , " 4 " ) )
{
valdbutton = gtk_button_new_with_label ( " Send " ) ;
}
else if ( ! strcmp ( find_butn , " 1 " ) )
{
valdbutton = gtk_button_new_with_label ( " Remove " ) ;
}
else if ( ! strcmp ( find_butn , " 2 " ) ) /* if signal fired from send Transmission OFF request to Source device */
{
/* Add a "Send" button to the bottom of the dialog */
valdbutton = gtk_button_new_with_label ( " Send " ) ;
}
else if ( ! strcmp ( find_butn , " 3 " ) ) /* if signal fired from send Transmission ON request to Source device */
{
/* Add a "Send" button to the bottom of the dialog */
valdbutton = gtk_button_new_with_label ( " Send " ) ;
}
t = LLfirst ;
int i = 2 ;
while ( t ! = NULL )
{
if ( ( ! strcmp ( find_butn , " 1 " ) ) | | ( ! strcmp ( find_butn , " 4 " ) ) | | ( ! strcmp ( find_butn , " 2 " ) & & ( t - > data_transmission_off = = 0 ) ) | | ( ! strcmp ( find_butn , " 3 " ) & & ( t - > data_transmission_off = = 1 ) ) )
{
/* Concate all the data into a big buffer */
memset ( tmp_str , ' \0 ' , sizeof ( tmp_str ) ) ;
sprintf ( tmp_str , " %d " , t - > pmuid ) ;
label = gtk_label_new ( tmp_str ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
memset ( tmp_str , ' \0 ' , sizeof ( tmp_str ) ) ;
strcpy ( tmp_str , t - > ip ) ;
label = gtk_label_new ( tmp_str ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
memset ( tmp_str , ' \0 ' , sizeof ( tmp_str ) ) ;
sprintf ( tmp_str , " %d " , t - > port ) ;
label = gtk_label_new ( tmp_str ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 2 , 3 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
memset ( tmp_str , ' \0 ' , sizeof ( tmp_str ) ) ;
strncpy ( tmp_str , t - > protocol , 3 ) ;
label = gtk_label_new ( tmp_str ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 3 , 4 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
i + + ;
}
t = t - > next ;
} // while ends
if ( i ! = 2 )
{
/* This simply creates a grid of toggle buttons on the table to demonstrate the scrolled window. */
label = gtk_label_new ( " " ) ;
markup2 = g_markup_printf_escaped ( " <span foreground= \" #7D2252 \" font='10'><b>Connections Detail</b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup2 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 4 , 0 , 1 ) ;
gtk_widget_show ( label ) ;
g_free ( markup2 ) ;
label = gtk_label_new ( " Source ID " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " IP " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Port " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 2 , 3 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Protocol " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 3 , 4 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
}
else
{
gtk_widget_set_sensitive ( valdbutton , FALSE ) ;
if ( ! strcmp ( find_butn , " 2 " ) )
{
/* Place lable on a spacific position on table with text 'No records were found'*/
label = gtk_label_new ( " " ) ;
markup2 = g_markup_printf_escaped ( " <span foreground= \" #7D2252 \" font='10'><b>No records were found. \n </b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup2 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
g_free ( markup2 ) ;
}
else if ( ! strcmp ( find_butn , " 3 " ) ) /* Simply check for source objects whose Transmission is not ON (or OFF) */
{
/* Place lable on a spacific position on table with text 'No records were found'*/
label = gtk_label_new ( " " ) ;
markup2 = g_markup_printf_escaped ( " <span foreground= \" #7D2252 \" font='10'><b>No records were found. \n </b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup2 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
g_free ( markup2 ) ;
}
}
if ( i < min_rows )
{
int jj ;
for ( jj = i ; jj < min_rows ; jj + + )
{
label = gtk_label_new ( " " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 4 , jj , jj + 1 ) ;
gtk_widget_show ( label ) ;
}
}
/* Create combo boxe for user with some fixed values */
2022-07-20 01:56:51 +05:30
p_protocol = gtk_combo_box_text_new ( ) ;
gtk_combo_box_text_append_text ( GTK_COMBO_BOX ( p_protocol ) , " UDP " ) ;
gtk_combo_box_text_append_text ( GTK_COMBO_BOX ( p_protocol ) , " TCP " ) ;
2022-07-12 01:08:04 +05:30
gtk_combo_box_set_active ( GTK_COMBO_BOX ( p_protocol ) , 0 ) ;
gtk_box_pack_end ( GTK_BOX ( hbox1 ) , p_protocol , FALSE , TRUE , 0 ) ;
gtk_widget_show ( p_protocol ) ;
label = gtk_label_new ( " Protocol " ) ;
gtk_box_pack_end ( GTK_BOX ( hbox1 ) , label , FALSE , TRUE , 0 ) ;
gtk_widget_show ( label ) ;
p_id = gtk_entry_new ( ) ;
gtk_entry_set_max_length ( ( GtkEntry * ) p_id , 5 ) ;
gtk_box_pack_end ( GTK_BOX ( hbox1 ) , p_id , FALSE , TRUE , 0 ) ;
gtk_widget_show ( p_id ) ;
label = gtk_label_new ( " Source ID Code " ) ;
gtk_box_pack_end ( GTK_BOX ( hbox1 ) , label , FALSE , TRUE , 0 ) ;
gtk_widget_show ( label ) ;
chkBtn = gtk_check_button_new_with_label ( " Select All " ) ;
gtk_box_pack_end ( GTK_BOX ( hbox1 ) , chkBtn , FALSE , TRUE , 0 ) ;
gtk_widget_show ( chkBtn ) ;
/* Add a "Help" button to the bottom of the dialog */
help_button = gtk_button_new_with_label ( " Help " ) ;
/* Signal handling for buttons on Window */
g_signal_connect_swapped ( valdbutton , " clicked " , G_CALLBACK ( cmd_or_remove_pmu_validation ) , valdbutton ) ;
g_signal_connect_swapped ( help_button , " clicked " , G_CALLBACK ( ipdc_help ) , NULL ) ;
g_signal_connect ( chkBtn , " toggled " , G_CALLBACK ( select_function ) , NULL ) ;
/* This makes it so the button is the default. */
gtk_widget_set_can_default ( valdbutton , TRUE ) ;
gtk_widget_set_can_default ( help_button , TRUE ) ;
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( gtk_dialog_get_action_area ( new_window ) , valdbutton , TRUE , TRUE , 0 ) ;
gtk_box_pack_start ( gtk_dialog_get_action_area ( new_window ) , help_button , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
/* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */
gtk_widget_grab_default ( valdbutton ) ;
gtk_widget_show ( valdbutton ) ;
gtk_widget_grab_default ( help_button ) ;
gtk_widget_show ( help_button ) ;
}
/* Add a "Close" button to the bottom of the dialog */
close_button = gtk_button_new_with_label ( " Close " ) ;
g_signal_connect_swapped ( close_button , " clicked " , G_CALLBACK ( gtk_widget_destroy ) , new_window ) ;
gtk_widget_set_can_default ( close_button , TRUE ) ;
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( gtk_dialog_get_action_area ( new_window ) , close_button , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_grab_default ( close_button ) ;
gtk_widget_show ( close_button ) ;
on_flag = 0 , off_flag = 0 ;
/* Finally show the new_window */
gtk_widget_show ( new_window ) ;
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION checkbox_function(GtkWidget *widget, gpointer data) */
/* This is called when checkboxes are selected, and do the appropriate */
/* changes in the other checkbox or widget? */
/* ---------------------------------------------------------------------------- */
void select_function ( GtkWidget * widget , gpointer data )
{
if ( gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chkBtn ) ) = = TRUE )
{
gtk_widget_set_sensitive ( GTK_WIDGET ( p_id ) , FALSE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( p_protocol ) , FALSE ) ;
}
else
{
gtk_widget_set_sensitive ( GTK_WIDGET ( p_protocol ) , TRUE ) ;
gtk_widget_set_sensitive ( GTK_WIDGET ( p_id ) , TRUE ) ;
gtk_entry_set_text ( GTK_ENTRY ( p_id ) , " " ) ;
}
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION add_new_pdc (GtkButton *but, gpointer udata) */
/* It open the Destination Details window, and user have to enter */
/* the Destination details of which he wants to connect. */
/* ---------------------------------------------------------------------------- */
void add_new_pdc ( GtkButton * but , gpointer udata )
{
/* local variables */
char * markup3 ;
GtkWidget * table , * close_button ;
GtkWidget * valdbutton , * help_button , * label ;
/* Create a new dialog window for Destination Detail */
new_window = gtk_dialog_new ( ) ;
g_signal_connect ( new_window , " destroy " , G_CALLBACK ( gtk_widget_destroy ) , new_window ) ;
gtk_window_set_title ( GTK_WINDOW ( new_window ) , " Add Destination " ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( new_window ) , 10 ) ;
gtk_window_set_resizable ( GTK_WINDOW ( new_window ) , FALSE ) ;
/* Create a table of 4 by 2 squares. */
table = gtk_table_new ( 4 , 2 , FALSE ) ;
/* Set the spacing to 50 on x and 35 on y */
gtk_table_set_row_spacings ( GTK_TABLE ( table ) , 16 ) ;
gtk_table_set_col_spacings ( GTK_TABLE ( table ) , 16 ) ;
/* The dialog window is created with a vbox packed into it */
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( gtk_dialog_get_content_area ( new_window ) , table , FALSE , FALSE , 0 ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_show ( table ) ;
/* Add few buttons to the bottom of the dialog */
close_button = gtk_button_new_with_label ( " close " ) ;
valdbutton = gtk_button_new_with_label ( " Add " ) ;
help_button = gtk_button_new_with_label ( " Help " ) ;
/* this simply creates a grid of toggle buttons on the table to demonstrate the scrolled window. */
label = gtk_label_new ( " " ) ;
markup3 = g_markup_printf_escaped ( " <span foreground= \" #7D2252 \" font='10'><b>Enter Destination Device Details</b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup3 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 2 , 0 , 1 ) ;
gtk_widget_show ( label ) ;
g_free ( markup3 ) ;
label = gtk_label_new ( " Destination IP Address " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 2 , 3 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Protocol " ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 0 , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 3 , 4 ) ;
gtk_widget_show ( label ) ;
/* Create text boxes for user to enter appropriate values */
p_ip = gtk_entry_new ( ) ;
gtk_entry_set_max_length ( ( GtkEntry * ) p_ip , 15 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , p_ip , 1 , 2 , 2 , 3 ) ;
gtk_widget_show ( p_ip ) ;
/* Create combo boxe for user with some fixed values */
2022-07-20 01:56:51 +05:30
p_protocol = gtk_combo_box_text_new ( ) ;
gtk_combo_box_text_append_text ( GTK_COMBO_BOX ( p_protocol ) , " UDP " ) ;
gtk_combo_box_text_append_text ( GTK_COMBO_BOX ( p_protocol ) , " TCP " ) ;
2022-07-12 01:08:04 +05:30
gtk_combo_box_set_active ( GTK_COMBO_BOX ( p_protocol ) , 0 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , p_protocol , 1 , 2 , 3 , 4 ) ;
gtk_widget_show ( p_protocol ) ;
/* Signal handling for buttons on Destination Details Window */
g_signal_connect_swapped ( valdbutton , " clicked " , G_CALLBACK ( new_pdc_validation ) , valdbutton ) ;
g_signal_connect_swapped ( help_button , " clicked " , G_CALLBACK ( ipdc_help ) , NULL ) ;
g_signal_connect_swapped ( close_button , " clicked " , G_CALLBACK ( gtk_widget_destroy ) , new_window ) ;
/* This makes it so the button is the default. */
gtk_widget_set_can_default ( close_button , TRUE ) ;
gtk_widget_set_can_default ( valdbutton , TRUE ) ;
gtk_widget_set_can_default ( help_button , TRUE ) ;
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( gtk_dialog_get_action_area ( new_window ) , valdbutton , TRUE , TRUE , 0 ) ;
gtk_box_pack_start ( gtk_dialog_get_action_area ( new_window ) , help_button , TRUE , TRUE , 0 ) ;
gtk_box_pack_start ( gtk_dialog_get_action_area ( new_window ) , close_button , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
/* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */
gtk_widget_grab_default ( valdbutton ) ;
gtk_widget_show ( valdbutton ) ;
gtk_widget_grab_default ( help_button ) ;
gtk_widget_show ( help_button ) ;
gtk_widget_grab_default ( close_button ) ;
gtk_widget_show ( close_button ) ;
/* Finally show the new_window */
gtk_widget_show ( new_window ) ;
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION remove_pdc (GtkButton *but, gpointer udata) */
/* It open the Destination Details window, and user have to enter */
/* the Destination details of which he wants to remove. */
/* ---------------------------------------------------------------------------- */
void remove_pdc ( GtkButton * but , gpointer udata )
{
/* local variables */
GtkWidget * scrolled_window , * label , * hbox1 , * window2 ;
GtkWidget * table , * close_button ;
GtkWidget * valdbutton , * help_button ;
char * markup4 ;
char * p_buff , tmp_str [ 20 ] ;
int i , min_rows = 10 ;
/* Create a new dialog window for the scrolled window to be packed into */
new_window = gtk_dialog_new ( ) ;
g_signal_connect ( new_window , " destroy " , G_CALLBACK ( gtk_widget_destroy ) , new_window ) ;
gtk_window_set_title ( GTK_WINDOW ( new_window ) , " Remove Destination " ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( new_window ) , 10 ) ;
/* Create a new scrolled window */
scrolled_window = gtk_scrolled_window_new ( NULL , NULL ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( scrolled_window ) , 10 ) ;
gtk_widget_set_size_request ( scrolled_window , - 1 , 350 ) ;
/* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */
gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scrolled_window ) , GTK_POLICY_NEVER , GTK_POLICY_AUTOMATIC ) ;
/* The dialog window is created with a vbox packed into it. */
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( gtk_dialog_get_content_area ( new_window ) , scrolled_window , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_show ( scrolled_window ) ;
hbox1 = gtk_hbox_new ( FALSE , 16 ) ;
2022-07-20 01:56:51 +05:30
gtk_box_pack_start ( GTK_BOX ( GTK_DIALOG ( new_window ) ) , hbox1 , FALSE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_show ( hbox1 ) ;
window2 = gtk_alignment_new ( 0 , 0 , 0 , 0 ) ;
gtk_box_pack_start ( GTK_BOX ( hbox1 ) , window2 , FALSE , TRUE , 0 ) ;
gtk_widget_show ( window2 ) ;
/* create a table of 6 by 2 squares. */
table = gtk_table_new ( 20 , 3 , FALSE ) ;
/* Set the spacing to 15 on x and 25 on y */
gtk_table_set_row_spacings ( GTK_TABLE ( table ) , 8 ) ;
gtk_table_set_col_spacings ( GTK_TABLE ( table ) , 16 ) ;
/* Pack the table into the scrolled window */
gtk_scrolled_window_add_with_viewport ( GTK_SCROLLED_WINDOW ( scrolled_window ) , table ) ;
gtk_widget_show ( table ) ;
/* Add few buttons to the bottom of the dialog */
close_button = gtk_button_new_with_label ( " close " ) ;
valdbutton = gtk_button_new_with_label ( " Remove " ) ;
help_button = gtk_button_new_with_label ( " Help " ) ;
struct Upper_Layer_Details * t1 = ULfirst ;
memset ( buff , ' \0 ' , strlen ( buff ) ) ;
if ( t1 = = NULL )
{
/* Place lable on a spacific position on table with text 'No records were found'*/
label = gtk_label_new ( " " ) ;
markup4 = g_markup_printf_escaped ( " <span foreground= \" #7D2252 \" font='10'><b>No Higher Level PDC is Registered With This iPDC.</b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup4 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 3 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
g_free ( markup4 ) ;
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 3 , 2 , 3 ) ;
gtk_widget_show ( label ) ;
}
else
{
i = 4 ;
while ( t1 ! = NULL )
{
memset ( tmp_str , ' \0 ' , sizeof ( tmp_str ) ) ;
strcat ( tmp_str , t1 - > ip ) ;
label = gtk_label_new ( tmp_str ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
memset ( tmp_str , ' \0 ' , sizeof ( tmp_str ) ) ;
sprintf ( tmp_str , " %d " , t1 - > port ) ;
label = gtk_label_new ( tmp_str ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
memset ( tmp_str , ' \0 ' , sizeof ( tmp_str ) ) ;
strncat ( tmp_str , t1 - > protocol , 3 ) ;
label = gtk_label_new ( tmp_str ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 2 , 3 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
i + + ;
t1 = t1 - > next ;
}
if ( i ! = 4 )
{
/* This simply creates a grid of toggle buttons on the table to demonstrate the scrolled window. */
label = gtk_label_new ( " " ) ;
markup4 = g_markup_printf_escaped ( " <span foreground= \" #7D2252 \" font='10'><b>Destination Connections Detail</b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup4 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 3 , 0 , 1 ) ;
gtk_widget_show ( label ) ;
g_free ( markup4 ) ;
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 3 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " IP " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 2 , 3 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Port " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , 2 , 3 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Protocol " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 2 , 3 , 2 , 3 ) ;
gtk_widget_show ( label ) ;
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 3 , 3 , 4 ) ;
gtk_widget_show ( label ) ;
}
if ( i < min_rows )
{
int jj ;
for ( jj = i ; jj < min_rows ; jj + + )
{
label = gtk_label_new ( " " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 3 , jj , jj + 1 ) ;
gtk_widget_show ( label ) ;
}
}
/* Create combo box for user with some fixed values */
2022-07-20 01:56:51 +05:30
p_protocol = gtk_combo_box_text_new ( ) ;
gtk_combo_box_text_append_text ( GTK_COMBO_BOX ( p_protocol ) , " UDP " ) ;
gtk_combo_box_text_append_text ( GTK_COMBO_BOX ( p_protocol ) , " TCP " ) ;
2022-07-12 01:08:04 +05:30
gtk_combo_box_set_active ( GTK_COMBO_BOX ( p_protocol ) , 0 ) ;
2022-07-20 01:56:51 +05:30
gtk_box_pack_end ( GTK_BOX ( hbox1 ) , p_protocol , FALSE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_show ( p_protocol ) ;
label = gtk_label_new ( " Protocol " ) ;
gtk_box_pack_end ( GTK_BOX ( hbox1 ) , label , FALSE , TRUE , 0 ) ;
gtk_widget_show ( label ) ;
/* Create text boxes for user to enter appropriate values */
p_port = gtk_entry_new ( ) ;
gtk_box_pack_end ( GTK_BOX ( hbox1 ) , p_port , FALSE , TRUE , 0 ) ;
gtk_widget_show ( p_port ) ;
label = gtk_label_new ( " Port " ) ;
gtk_box_pack_end ( GTK_BOX ( hbox1 ) , label , FALSE , TRUE , 0 ) ;
gtk_widget_show ( label ) ;
p_ip = gtk_entry_new ( ) ;
gtk_box_pack_end ( GTK_BOX ( hbox1 ) , p_ip , FALSE , TRUE , 0 ) ;
gtk_widget_show ( p_ip ) ;
label = gtk_label_new ( " IP Address " ) ;
gtk_box_pack_end ( GTK_BOX ( hbox1 ) , label , FALSE , TRUE , 0 ) ;
gtk_widget_show ( label ) ;
/* Signal handling for buttons on Remove PDC Window */
g_signal_connect_swapped ( valdbutton , " clicked " , G_CALLBACK ( remove_pdc_validation ) , valdbutton ) ;
g_signal_connect_swapped ( help_button , " clicked " , G_CALLBACK ( ipdc_help ) , NULL ) ;
/* This makes it so the button is the default. */
gtk_widget_set_can_default ( valdbutton , TRUE ) ;
gtk_widget_set_can_default ( help_button , TRUE ) ;
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( gtk_dialog_get_action_area ( new_window ) , valdbutton , TRUE , TRUE , 0 ) ;
gtk_box_pack_start ( gtk_dialog_get_action_area ( new_window ) , help_button , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
/* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */
gtk_widget_grab_default ( valdbutton ) ;
gtk_widget_show ( valdbutton ) ;
gtk_widget_grab_default ( help_button ) ;
gtk_widget_show ( help_button ) ;
}
g_signal_connect_swapped ( close_button , " clicked " , G_CALLBACK ( gtk_widget_destroy ) , new_window ) ;
gtk_widget_set_can_default ( close_button , TRUE ) ;
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( gtk_dialog_get_action_area ( new_window ) , close_button , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_grab_default ( close_button ) ;
gtk_widget_show ( close_button ) ;
/* Finally show the new_window */
gtk_widget_show ( new_window ) ;
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION connection_table (GtkButton *but, gpointer udata) */
/* It Displays the connection tables, first is Source device connection table, */
/* another one is Destination device connection table. */
/* ---------------------------------------------------------------------------- */
void connection_table ( GtkButton * but , gpointer udata )
{
/* local variables */
GtkWidget * scrolled_window ;
GtkWidget * table , * close_button ;
GtkWidget * label ;
char * p_buff , tmp_str [ 20 ] ;
char * markup5 , * markup6 , * markup7 , * markup8 ;
int i = 1 ;
/* Create a new dialog window for the scrolled window to be packed into */
new_window = gtk_dialog_new ( ) ;
g_signal_connect ( new_window , " destroy " , G_CALLBACK ( gtk_widget_destroy ) , new_window ) ;
gtk_window_set_title ( GTK_WINDOW ( new_window ) , " iPDC Connections " ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( new_window ) , 10 ) ;
/* Create a new scrolled window. */
scrolled_window = gtk_scrolled_window_new ( NULL , NULL ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( scrolled_window ) , 10 ) ;
gtk_widget_set_size_request ( scrolled_window , - 1 , 350 ) ;
/* the policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */
gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scrolled_window ) , GTK_POLICY_NEVER , GTK_POLICY_AUTOMATIC ) ;
/* The dialog window is created with a vbox packed into it. */
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( gtk_dialog_get_content_area ( new_window ) , scrolled_window , FALSE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_show ( scrolled_window ) ;
/* Create a table of 20 by 5 squares */
table = gtk_table_new ( 20 , 5 , FALSE ) ;
/* Set the spacing to 15 on x and 25 on y */
gtk_table_set_row_spacings ( GTK_TABLE ( table ) , 8 ) ;
gtk_table_set_col_spacings ( GTK_TABLE ( table ) , 16 ) ;
/* Pack the table into the scrolled window */
gtk_scrolled_window_add_with_viewport ( GTK_SCROLLED_WINDOW ( scrolled_window ) , table ) ;
gtk_widget_show ( table ) ;
/* Add a "close" button to the bottom of the dialog */
close_button = gtk_button_new_from_stock ( GTK_STOCK_OK ) ; // or GTK_STOCK_APPLY);
/* Print some text on lable with color and proper font */
label = gtk_label_new ( " - " ) ;
markup5 = g_markup_printf_escaped ( " <span foreground= \" #006666 \" font='12'><b>Source Devices Connection Table \t \t </b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup5 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , 0 , 1 ) ;
gtk_widget_show ( label ) ;
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
struct Lower_Layer_Details * t = LLfirst ;
memset ( buff , ' \0 ' , strlen ( buff ) ) ;
if ( t = = NULL )
{
/* Place lable on a spacific position on table with text 'No records were found'*/
label = gtk_label_new ( " " ) ;
markup6 = g_markup_printf_escaped ( " <span foreground= \" #7D2252 \" font='10'><b>No Lower Level PMU/PDC is Registered With This iPDC.</b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup6 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , 2 , 3 ) ;
gtk_widget_show ( label ) ;
g_free ( markup6 ) ;
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , 3 , 4 ) ;
gtk_widget_show ( label ) ;
}
else
{
i = 2 ;
label = gtk_label_new ( " ID Code " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " IP " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Port " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 2 , 3 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Protocol " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 3 , 4 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
i + + ;
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
i + + ;
while ( t ! = NULL )
{
/* Concate all the data into a big buffer */
memset ( tmp_str , ' \0 ' , sizeof ( tmp_str ) ) ;
sprintf ( tmp_str , " %d " , t - > pmuid ) ;
label = gtk_label_new ( tmp_str ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
memset ( tmp_str , ' \0 ' , sizeof ( tmp_str ) ) ;
strcpy ( tmp_str , t - > ip ) ;
label = gtk_label_new ( tmp_str ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
memset ( tmp_str , ' \0 ' , sizeof ( tmp_str ) ) ;
sprintf ( tmp_str , " %d " , t - > port ) ;
label = gtk_label_new ( tmp_str ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 2 , 3 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
memset ( tmp_str , ' \0 ' , sizeof ( tmp_str ) ) ;
strncpy ( tmp_str , t - > protocol , 3 ) ;
label = gtk_label_new ( tmp_str ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 3 , 4 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
i + + ;
t = t - > next ;
}
}
/* Print some text on lable with color and proper font */
label = gtk_label_new ( " - " ) ;
markup7 = g_markup_printf_escaped ( " <span foreground= \" #006666 \" font='12'><b> \n Destination Devices Connection Table</b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup7 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , i + 2 , i + 3 ) ;
gtk_widget_show ( label ) ;
g_free ( markup7 ) ;
i = i + 3 ;
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
i + + ;
struct Upper_Layer_Details * t1 = ULfirst ;
memset ( buff , ' \0 ' , strlen ( buff ) ) ;
if ( t1 = = NULL )
{
/* Place lable on a spacific position on table with text 'No records were found'*/
label = gtk_label_new ( " " ) ;
markup8 = g_markup_printf_escaped ( " <span foreground= \" #7D2252 \" font='10'><b>No Higher Level PDC is Registered With This PDC.</b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup8 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 4 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
g_free ( markup8 ) ;
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
i + + ;
}
else
{
label = gtk_label_new ( " IP " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Port " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Protocol " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 2 , 3 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
i + + ;
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
i + + ;
while ( t1 ! = NULL )
{
memset ( tmp_str , ' \0 ' , sizeof ( tmp_str ) ) ;
strcpy ( tmp_str , t1 - > ip ) ;
label = gtk_label_new ( tmp_str ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
memset ( tmp_str , ' \0 ' , sizeof ( tmp_str ) ) ;
sprintf ( tmp_str , " %d " , t1 - > port ) ;
label = gtk_label_new ( tmp_str ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
memset ( tmp_str , ' \0 ' , sizeof ( tmp_str ) ) ;
strncpy ( tmp_str , t1 - > protocol , 3 ) ;
label = gtk_label_new ( tmp_str ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 2 , 3 , i , i + 1 ) ;
gtk_widget_show ( label ) ;
i + + ;
t1 = t1 - > next ;
}
}
/* Signal handling when Window will distroy or closed */
g_signal_connect_swapped ( close_button , " clicked " , G_CALLBACK ( gtk_widget_destroy ) , new_window ) ;
/* This makes it so the button is the default. */
gtk_widget_set_can_default ( close_button , TRUE ) ;
2022-08-11 00:36:01 +05:30
gtk_box_pack_start ( gtk_dialog_get_action_area ( new_window ) , close_button , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
/* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */
gtk_widget_grab_default ( close_button ) ;
gtk_widget_show ( close_button ) ;
/* Finally show the new_window or Connection window */
gtk_widget_show ( new_window ) ;
} ;
/* ---------------------------------------------------------------------------- */
/* FUNCTION ipdc_setup_fileSelector(GtkWidget *widget, gpointer udata) */
/* It will display a file selector window to the user. User have the */
/* responsibility to choose the correct previously saved file for iPDC Setup. */
/* ---------------------------------------------------------------------------- */
void ipdc_setup_fileSelector ( GtkWidget * widget , gpointer udata )
{
strcat ( ipdcFolderPath , " / " ) ;
2022-07-20 01:56:51 +05:30
gint res ;
2022-07-12 01:08:04 +05:30
/* Create a new file selection widget */
2022-07-20 01:56:51 +05:30
ipdc_setup_window = gtk_file_chooser_dialog_new ( " Open File " ,
GTK_WINDOW ( widget ) ,
GTK_FILE_CHOOSER_ACTION_OPEN ,
" _Cancel " , GTK_RESPONSE_CANCEL ,
" _Open " , GTK_RESPONSE_ACCEPT ,
NULL ) ;
res = gtk_dialog_run ( GTK_DIALOG ( ipdc_setup_window ) ) ;
2022-07-12 01:08:04 +05:30
2022-07-20 01:56:51 +05:30
if ( res = = GTK_RESPONSE_ACCEPT )
{
char * filename ;
filename = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER ( ipdc_setup_window ) ) ;
strcpy ( ipdcFilePath , filename ) ;
view_setup_file ( filename ) ;
g_free ( filename ) ;
}
2022-07-12 01:08:04 +05:30
/* Lets set the filename, as if this were a save dialog, and we are giving a default filename */
2022-07-20 01:56:51 +05:30
// gtk_file_selection_set_filename (GTK_FILE_SELECTION(ipdc_setup_window), ipdcFolderPath);
2022-07-12 01:08:04 +05:30
2022-07-20 01:56:51 +05:30
// gtk_widget_show(ipdc_setup_window);
2022-07-12 01:08:04 +05:30
}
/* ---------------------------------------------------------------------------- */
2022-07-20 01:56:51 +05:30
/* FUNCTION view_setup_file(GtkWidget *w, GtkFileChooser *fs) */
2022-07-12 01:08:04 +05:30
/* This function displays the different attributes of selected iPDC Setup File. */
/* It will show the iPDC connectoin details before apply. */
/* ---------------------------------------------------------------------------- */
2022-07-20 01:56:51 +05:30
void view_setup_file ( char * filename )
2022-07-12 01:08:04 +05:30
{
/* local variables */
GtkWidget * label , * hsep ;
GtkWidget * table , * scrolled_window ;
GtkWidget * apply_button , * cancel_button ;
int tempi , rowCount ;
int sDevices , dDevices , rowi ;
char * d1 , buff [ 200 ] , * s ;
char * markup , * rline = NULL ;
size_t len = 0 ;
ssize_t read ;
FILE * fp1 ;
2022-07-20 01:56:51 +05:30
strcpy ( fptr , filename ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_destroy ( ipdc_setup_window ) ;
fp1 = fopen ( s , " rb " ) ;
if ( fp1 = = NULL )
{
validation_result ( " Setup file doesn't exist! Try again " ) ;
}
else
{
rowCount = 11 ;
sDevices = 0 ;
dDevices = 0 ;
tempi = 0 ;
while ( tempi < 6 ) //iPDCServer
{
read = getline ( & rline , & len , fp1 ) ;
tempi + + ;
}
if ( read > 0 ) //LowerDevices
{
d1 = strtok ( rline , " " ) ;
d1 = strtok ( NULL , " \n " ) ;
tempi = atoi ( d1 ) ;
sDevices = tempi ;
rowCount = rowCount + 5 * sDevices ;
while ( tempi > 0 )
{
read = getline ( & rline , & len , fp1 ) ;
tempi - - ;
}
}
read = getline ( & rline , & len , fp1 ) ; //UpperDevices
if ( read > 0 )
{
d1 = strtok ( rline , " " ) ;
d1 = strtok ( NULL , " \n " ) ;
tempi = atoi ( d1 ) ;
dDevices = tempi ;
rowCount = rowCount + 4 * dDevices ;
while ( tempi > 0 )
{
read = getline ( & rline , & len , fp1 ) ;
tempi - - ;
}
}
fclose ( fp1 ) ;
/* Open the iPDC Setup File in read mode */
fp1 = fopen ( s , " rb " ) ;
/* If its available, then create a new dialog window for displaying the iPDC details. */
setup_display_window = gtk_dialog_new ( ) ;
g_signal_connect ( setup_display_window , " destroy " , G_CALLBACK ( gtk_widget_destroy ) , setup_display_window ) ;
gtk_window_set_title ( GTK_WINDOW ( setup_display_window ) , " iPDC Setup " ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( setup_display_window ) , 10 ) ;
/* Create a new scrolled window */
scrolled_window = gtk_scrolled_window_new ( NULL , NULL ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( scrolled_window ) , 10 ) ;
gtk_widget_set_size_request ( scrolled_window , - 1 , 450 ) ;
/* The policy is one of GTK_POLICY AUTOMATIC, or GTK_POLICY_ALWAYS. */
gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scrolled_window ) , GTK_POLICY_NEVER , GTK_POLICY_AUTOMATIC ) ;
/* The dialog window is created with a vbox packed into it */
2022-07-20 01:56:51 +05:30
gtk_box_pack_start ( GTK_BOX ( GTK_DIALOG ( setup_display_window ) ) , scrolled_window , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
gtk_widget_show ( scrolled_window ) ;
/* Create a table of ? by 2 squares */
rowCount = dDevices + sDevices + 15 ;
table = gtk_table_new ( rowCount , 5 , FALSE ) ;
/* set the spacing to 10 on x and 10 on y */
gtk_table_set_row_spacings ( GTK_TABLE ( table ) , 8 ) ;
gtk_table_set_col_spacings ( GTK_TABLE ( table ) , 16 ) ;
/* Pack the table into the window */
gtk_scrolled_window_add_with_viewport ( GTK_SCROLLED_WINDOW ( scrolled_window ) , table ) ;
gtk_widget_show ( table ) ;
/* Add a "close" button to the bottom of the dialog */
apply_button = gtk_button_new_from_stock ( GTK_STOCK_APPLY ) ;
cancel_button = gtk_button_new_from_stock ( GTK_STOCK_CANCEL ) ;
/* This simply creates a grid of labels on the table to demonstrate the window.
g_markup_printf_escaped ( ) : function to display diffrent color and font of text on label */
label = gtk_label_new ( " " ) ;
markup = g_markup_printf_escaped ( " <span foreground= \" #7D2252 \" font='12'><b>iPDC Setup File Details</b></span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , 0 , 1 ) ;
gtk_widget_show ( label ) ;
g_free ( markup ) ;
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , 1 , 2 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " " ) ;
markup = g_markup_printf_escaped ( " <span foreground= \" #0000FF \" font='12'>iPDC Server </span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , 2 , 3 ) ;
gtk_widget_show ( label ) ;
g_free ( markup ) ;
label = gtk_label_new ( " iPDC ID Code " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 3 , 4 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " iPDC UDP Port " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , 3 , 4 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " iPDC TCP Port " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 2 , 3 , 3 , 4 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " DB Server IP " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 3 , 4 , 3 , 4 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " DB Server Port " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 4 , 5 , 3 , 4 ) ;
gtk_widget_show ( label ) ;
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , 4 , 5 ) ;
gtk_widget_show ( label ) ;
/* This simply read from file and print on label in the table. */
getline ( & rline , & len , fp1 ) ; //To read 'ipdcServer 1' line
getline ( & rline , & len , fp1 ) ;
label = gtk_label_new ( rline ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , 5 , 6 ) ;
gtk_widget_show ( label ) ;
getline ( & rline , & len , fp1 ) ;
label = gtk_label_new ( rline ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , 5 , 6 ) ;
gtk_widget_show ( label ) ;
getline ( & rline , & len , fp1 ) ;
label = gtk_label_new ( rline ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 2 , 3 , 5 , 6 ) ;
gtk_widget_show ( label ) ;
getline ( & rline , & len , fp1 ) ;
label = gtk_label_new ( rline ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 3 , 4 , 5 , 6 ) ;
gtk_widget_show ( label ) ;
/* This is print static text (9000) on label in the table. */
sprintf ( buff , " 9000 " ) ;
label = gtk_label_new ( buff ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 4 , 5 , 5 , 6 ) ;
gtk_widget_show ( label ) ;
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , 6 , 7 ) ;
gtk_widget_show ( label ) ;
getline ( & rline , & len , fp1 ) ; //To read 'LowerDevices' line
label = gtk_label_new ( " " ) ;
markup = g_markup_printf_escaped ( " <span foreground= \" #0000FF \" font='11'>Source Devices </span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , 7 , 8 ) ;
gtk_widget_show ( label ) ;
g_free ( markup ) ;
sprintf ( buff , " Measurement Received From Total : %d Devices " , sDevices ) ;
label = gtk_label_new ( buff ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , 8 , 9 ) ;
gtk_widget_show ( label ) ;
rowi = 9 ;
if ( sDevices > 0 )
{
label = gtk_label_new ( " Source ID " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Source IP " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Port " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 2 , 3 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Protocol " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 3 , 4 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
rowi = rowi + 1 ;
}
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
rowi = rowi + 1 ;
int i = 1 ;
for ( i ; i < = sDevices ; i + + )
{
getline ( & rline , & len , fp1 ) ;
d1 = strtok ( rline , " , " ) ;
label = gtk_label_new ( d1 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
d1 = strtok ( NULL , " , " ) ;
label = gtk_label_new ( d1 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
d1 = strtok ( NULL , " , " ) ;
label = gtk_label_new ( d1 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 2 , 3 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
d1 = strtok ( NULL , " \n " ) ;
label = gtk_label_new ( d1 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 3 , 4 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
rowi = rowi + 1 ;
}
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
rowi = rowi + 1 ;
getline ( & rline , & len , fp1 ) ; //To read 'UpperDevices' line
label = gtk_label_new ( " " ) ;
markup = g_markup_printf_escaped ( " <span foreground= \" #0000FF \" font='11'>Destination Devices</span> " ) ;
gtk_label_set_markup ( GTK_LABEL ( label ) , markup ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
g_free ( markup ) ;
rowi = rowi + 1 ;
sprintf ( buff , " Consolidated Measurement Provided To Total : %d Devices " , dDevices ) ;
label = gtk_label_new ( buff ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
rowi = rowi + 1 ;
if ( dDevices > 0 )
{
label = gtk_label_new ( " Destination IP " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Port " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
label = gtk_label_new ( " Protocol " ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 2 , 3 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
rowi = rowi + 1 ;
}
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
rowi = rowi + 1 ;
for ( i = 0 ; i < dDevices ; i + + )
{
getline ( & rline , & len , fp1 ) ;
d1 = strtok ( rline , " , " ) ;
label = gtk_label_new ( d1 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 1 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
d1 = strtok ( NULL , " , " ) ;
label = gtk_label_new ( d1 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 1 , 2 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
d1 = strtok ( NULL , " \n " ) ;
label = gtk_label_new ( d1 ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 2 , 3 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
rowi = rowi + 1 ;
}
label = gtk_hseparator_new ( ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , label , 0 , 5 , rowi , rowi + 1 ) ;
gtk_widget_show ( label ) ;
rowi = rowi + 1 ;
fclose ( fp1 ) ;
/* Define signal on ok_button when it "clicked". */
g_signal_connect_swapped ( apply_button , " clicked " , G_CALLBACK ( apply_ipdc_setup ) , setup_display_window ) ;
g_signal_connect_swapped ( cancel_button , " clicked " , G_CALLBACK ( gtk_widget_destroy ) , setup_display_window ) ;
/* This makes it so the ok_button is the default. */
gtk_widget_set_can_default ( cancel_button , TRUE ) ;
gtk_widget_set_can_default ( apply_button , TRUE ) ;
2022-07-20 01:56:51 +05:30
gtk_box_pack_start ( gtk_dialog_get_action_area , apply_button , TRUE , TRUE , 0 ) ;
gtk_box_pack_start ( gtk_dialog_get_action_area , cancel_button , TRUE , TRUE , 0 ) ;
2022-07-12 01:08:04 +05:30
/* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */
gtk_widget_grab_default ( cancel_button ) ;
gtk_widget_show ( cancel_button ) ;
gtk_widget_grab_default ( apply_button ) ;
gtk_widget_show ( apply_button ) ;
/* Finally show the setup_display_window. */
gtk_widget_show ( setup_display_window ) ;
}
}
/* ---------------------------------------------------------------------------- */
/* FUNCTION apply_ipdc_setup (GtkWidget *w, gpointer udata) */
/* This function apply the user selected iPDC Setup File and go ahead with the */
/* Setup file's information. */
/* ---------------------------------------------------------------------------- */
void apply_ipdc_setup ( GtkWidget * w , gpointer udata )
{
gtk_widget_destroy ( setup_display_window ) ;
int flag = 0 ;
char * s = fptr ;
char * l1 , * d3 , * d4 ;
size_t l2 = 0 ;
ssize_t result ;
FILE * fp ;
fp = fopen ( s , " rb " ) ;
if ( fp = = NULL )
{
validation_result ( " iPDC Setup file doesn't exist! Try again " ) ;
}
else
{
if ( ( result = getline ( & l1 , & l2 , fp ) ) > 0 )
{
d3 = strtok ( l1 , " " ) ;
d4 = strtok ( NULL , " \n " ) ;
if ( ( ! ( strcmp ( d3 , " ipdcServer " ) ) ) & & ( atoi ( d4 ) = = 1 ) )
{
strcpy ( ipdcFilePath , s ) ;
ipdcFilePath [ strlen ( ipdcFilePath ) ] = ' \0 ' ;
flag = 1 ;
}
else
{
fclose ( fp ) ;
validation_result ( " Setup file data does not matched? Try a proper file " ) ;
}
}
else
{
fclose ( fp ) ;
validation_result ( " Setup file is empty?? Try a proper file " ) ;
}
}
if ( flag = = 1 )
fill_pdc_details ( ipdcFilePath ) ;
}
/* ---------------------------------------------------------------------------- */
/* FUNCTION display_time() */
/* Display the time on time lable on main PMU Simulator window. */
/* ---------------------------------------------------------------------------- */
void * display_time ( )
{
struct timeval tv ;
struct tm * ptm ;
char time_string [ 40 ] ;
while ( 1 )
{
/* Obtain the time of day, and convert it to a tm struct. */
gettimeofday ( & tv , NULL ) ;
/* Format the date and time, down to a single second. */
memset ( time_string , ' \0 ' , 40 ) ;
ptm = localtime ( & tv . tv_sec ) ;
strftime ( time_string , sizeof ( time_string ) , " %Y-%m-%d, %H:%M:%S " , ptm ) ;
gtk_label_set_text ( GTK_LABEL ( data - > time_lable ) , time_string ) ;
sleep ( 1 ) ;
}
/* Exit the display time thread at the time of PMU Closing */
pthread_exit ( NULL ) ;
}
/**************************************** End of File *******************************************************/