⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 app4.4.c

📁 code about gtk++ for MID intel develop in Linux moblin. code interface write as language c in linu
💻 C
📖 第 1 页 / 共 5 页
字号:
	gtk_box_pack_start (GTK_BOX (hbox), button_apply, TRUE, TRUE, 5);
	//cancel button
	button_cancel = create_button (stock_item[1],"Cancel");
	g_signal_connect (G_OBJECT (button_cancel), "clicked", G_CALLBACK (cancel_click), (gpointer) key);
	gtk_box_pack_start (GTK_BOX (hbox), button_cancel, TRUE, TRUE, 5); 

	/*init button close and add signal*/
	button_close = create_button (stock_item[2],"Close");

	 g_signal_connect_swapped (G_OBJECT (button_close), "clicked",
							G_CALLBACK (gtk_widget_destroy),
				G_OBJECT (dialog_alarm));
	gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog_alarm)->action_area), button_close, TRUE, TRUE, 5);
	/* show all dialog_alarm */
	gtk_widget_show_all (dialog_alarm);
}
 
 /**************************************************************************
         * Create Date  : 02/11/2009
         * Creator Name : Tran Chi Nghia
         * Decription   :  process for event  button Channel was clicked in form control device.
         * Parameter  :  2
		 "button" (I) :  object send signal to function	
		 "data" (I) :   data recive after event has been send
         * Return       :  none
        ***************************************************************************/	
 void function_channel (GtkWidget* button, gint8 data)
{	
	/* variable for 4 channel button */
	int key = data;
	int i;
	gchar* arr_string [5]= {"Channel 1","Channel 2","Channel 3","Channel 4","Cancel"};
	gchar* arr_stock_icon [2]= { GTK_STOCK_MEDIA_PLAY , GTK_STOCK_CANCEL};
	GtkWidget *arr_button[5];
	GtkWidget *vbutton_box;
	
	/* init form contain 4 channel buttons */
    dialog_channel = gtk_dialog_new_with_buttons ("", NULL,
                                        GTK_DIALOG_MODAL,
                                        NULL);
	/* modify form */
	gtk_dialog_set_has_separator (GTK_DIALOG (dialog_channel), FALSE);
	gtk_widget_set_size_request (dialog_channel,150,260);
	/* init container contain all channel button and cancel button */
	vbutton_box = gtk_vbutton_box_new ();
	/*set properties of container*/
	gtk_vbutton_box_set_spacing_default (5);
	/*add container to dialog_channel*/
	gtk_box_pack_start_defaults (GTK_BOX (GTK_DIALOG (dialog_channel)->vbox), vbutton_box);
	/* create button channels and assigned function process for event clicked */
	for(i=0; i < 4; i++)
  {	
		int key = i;
		arr_button[i]= create_button (arr_stock_icon[0], arr_string[i]);
		gtk_box_pack_start_defaults (GTK_BOX (vbutton_box), arr_button[i]); 
		/*connect signal to buttons*/
		g_signal_connect (G_OBJECT (arr_button[i]), "clicked", G_CALLBACK (send_channel),  (gpointer) key);
		/*connect_swapped destroy dialog */
		 g_signal_connect_swapped (G_OBJECT (arr_button[i]), "clicked",
                            G_CALLBACK (gtk_widget_destroy),
			    G_OBJECT (dialog_channel));
  }
	/* init cancel button in channel form*/
	arr_button[4]= create_button (arr_stock_icon[1], arr_string[4]);
	/*add button Cancel to vbutton box container*/
	gtk_box_pack_start_defaults (GTK_BOX (vbutton_box), arr_button[4]); 
	/* add signal delete form channel to button Cancel*/
	g_signal_connect_swapped (G_OBJECT (arr_button[i]), "clicked",
                            G_CALLBACK (gtk_widget_destroy),
			    G_OBJECT (dialog_channel));
	/* show all dialog channel */
  gtk_widget_show_all (dialog_channel);  
} 

/**************************************************************************
         * Create Date  : 02/11/2009
         * Creator Name : Tran Chi Nghia
         * Decription   :  process for event  channel button was clicked in channel dialog form.
         * Parameter  :  2
		 "button" (I) :  object send signal to function	
		 "data" (I) :   data recive after event has been send
         * Return       :  none
        ***************************************************************************/	
void send_channel (GtkWidget* button, gint8 data)
{
	/* depends on device, send data to server */
	send_buffer [1] = 4;
	switch (data)
	{
		case 0:
		/*send data to server*/
			send_buffer [0] = 3;
			break;
		case 1:
			send_buffer [0] = 4;
			break;
		case 2:
			send_buffer [0] = 5;
		break;
		case 3:
			send_buffer [0] = 6;
			break;
		default: 
			break;
	}
	if ( write(sockfd,send_buffer,2) < 0 )
			perror("ERROR writing to socket");
}

/**************************************************************************
         * Create Date  : 02/11/2009
         * Creator Name : Tran Chi Nghia
         * Decription   : create socket to connect to server and send signal to server update data for MID .
         * Parameter  : none
         * Return       :  none
        ***************************************************************************/	
void create_socket ()
{	
	/* create socket*/
	sockfd = socket(AF_INET, SOCK_STREAM, 0);
	/*set serv_addr to zero*/
	memset(&serv_addr, 0, sizeof(serv_addr));
	serv_addr.sin_family = AF_INET;
	inet_aton("192.168.3.22",&serv_addr.sin_addr.s_addr);
	serv_addr.sin_port = htons(PORT);
	/*connect to server*/
	if ( connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr) ) <0)
	{
		message_form ("Disconnect to server!!");
		exit (1);
	}
	/* send data to server for update database in MID*/
	send_buffer [0] = 20;
	send_buffer [1] = 0;
	if ( write(sockfd,send_buffer,256) < 0 )
	perror("ERROR writing to socket");
}

/**************************************************************************
         * Create Date  : 02/11/2009
         * Creator Name : Tran Chi Nghia
         * Decription   :  process for event  channel button was clicked in channel dialog form.
         * Parameter  :  2
		 "data" (I) :   data recive after event has been send
         * Return       :  none
        ***************************************************************************/	
void  *do_thread_recive (void *data)
{
	int i,k;
	/* read  recive buffer */
    while ( read ( sockfd, recive_buffer, 256) > 0 )
    {
        if (recive_buffer != NULL)
     	{
			/* check recive_buffer[0] for all case*/
			gint8 rc = recive_buffer[0];
			switch (rc)
			{
			        /* device open */
					case  0 :
						/* change in array state device */ 
						G_LOCK (state_arr);
							state_arr[recive_buffer[1]] = 1;	
						G_UNLOCK (state_arr);
						/* lcok thread */
						gdk_threads_enter();
						/*check recvie_buffer[1] for info about device*/
						switch (recive_buffer[1])
						{
						/* change icon in main form window at tab Active_device and Unactive_device*/
							case 0 :
								gtk_widget_reparent (arr_active_unactive[0], arr_hbutton_box[1] );
								break;
							case 1 :
								gtk_widget_reparent (arr_active_unactive[1], arr_hbutton_box[1] );
								break;
							case 2 :
								gtk_widget_reparent (arr_active_unactive[2], arr_hbutton_box[1] );
								break;
							case 3 :
								gtk_widget_reparent (arr_active_unactive[3], arr_hbutton_box[1] );
								break;
							case 4:
								gtk_widget_reparent (arr_active_unactive[4], arr_hbutton_box[1] );
								break;
							default: 
								break;
						}
						/* update data*/
						gdk_flush ();
						/* unlock thread */
						gdk_threads_leave();
						break;
						
					/*device close*/
					case  1 :
						/* change in array state device */ 
						G_LOCK (state_arr);
							state_arr[recive_buffer[1]] = 0;	
						G_UNLOCK (state_arr);
						/* lock thread */
						gdk_threads_enter();
						switch (recive_buffer[1])
						{
							case 0 :
								gtk_widget_reparent (arr_active_unactive[0], arr_hbutton_box[2] );
								break;
							case 1 :
								gtk_widget_reparent (arr_active_unactive[1], arr_hbutton_box[2] );
								break;
							case 2 :
								gtk_widget_reparent (arr_active_unactive[2], arr_hbutton_box[2] );
								break;
							case 3 :
								gtk_widget_reparent (arr_active_unactive[3], arr_hbutton_box[2] );
								break;
							case 4:	
								gtk_widget_reparent (arr_active_unactive[4], arr_hbutton_box[2] );
								break;	
							default: 
								break;
						}
						/* update data*/
						gdk_flush ();
						/* unlock thread */
						gdk_threads_leave();
						break;
					case 2: //open all
						i =0;
						G_LOCK (state_arr);
							for (i =0; i< NUMBER_DEVICE; i++)
							{
								state_arr[i] = 1;	
							}
						G_UNLOCK (state_arr);
						/*lock thread*/
						gdk_threads_enter();
						for (i =0; i < NUMBER_DEVICE; i++)
						{
							/*change object to Active_device tabs*/
							gtk_widget_reparent (arr_active_unactive[i], arr_hbutton_box[1] );
						}
						/*update data*/
						gdk_flush ();
						/* unlock thread */
						gdk_threads_leave();
						break;
					case 3: //close all
						G_LOCK (state_arr);
							i = 0;
							for (i =0; i< NUMBER_DEVICE; i++)
							{
								state_arr[i] = 0;	
							}
						G_UNLOCK (state_arr);
						
						gdk_threads_enter();
						for (i =0; i < NUMBER_DEVICE; i++)
						{
							gtk_widget_reparent (arr_active_unactive[i], arr_hbutton_box[2] );
						}
						gdk_flush ();
						gdk_threads_leave();
						break;
					
					case 20 : // server start , update data
						 G_LOCK (state_arr);
						i =0;
						/*update state of all devices */
						for (i =0; i <NUMBER_DEVICE; i++)
						{
							state_arr[i] = recive_buffer[i+1];	
						}
						G_UNLOCK (state_arr);
						gdk_threads_enter();
						/* insert active device and unactive device to tab Actice and Unactive*/
						for (i =0; i <NUMBER_DEVICE; i++)
						{
							if (state_arr[i] ==1 )
							{
								gtk_widget_reparent (arr_active_unactive[i], arr_hbutton_box[1] );
							}
							else
							{
								gtk_widget_reparent (arr_active_unactive[i], arr_hbutton_box[2] );
							}
						}
						gdk_flush ();
						gdk_threads_leave();
						break;
					
					case 5: // server die
						gdk_threads_enter();
						/*message and exit program*/
						message_form ("Disconnect to server");
						exit (1);
						gdk_flush ();
						
						gdk_threads_leave();
						break;
					case 9:  //interrupt
						// change state of device
						G_LOCK (state_arr);
							state_arr[recive_buffer[1]] = 0;	
						G_UNLOCK (state_arr);
						/*change icon in main form*/
						gdk_threads_enter();
							switch (recive_buffer[1])
							{
								case 0 :
									gtk_widget_reparent (arr_active_unactive[0], arr_hbutton_box[2] );
									break;
								case 1 :
									gtk_widget_reparent (arr_active_unactive[1], arr_hbutton_box[2] );
									break;
								case 2 :
									gtk_widget_reparent (arr_active_unactive[2], arr_hbutton_box[2] );
									break;
								case 3 :
									gtk_widget_reparent (arr_active_unactive[3], arr_hbutton_box[2] );
									break;
								case 4:	
									gtk_widget_reparent (arr_active_unactive[4], arr_hbutton_box[2] );
									break;	
								default: 
									break;
							}
							message_form ("Have a device break!!");
						gdk_flush ();
						gdk_threads_leave();
						break;
					case 90:  //report
						G_LOCK (data_buffer);
						i =1;
						/* read infomation about database from recive_buffer */
						for ( k = 0; k < 10;  k++)
						{
					
							data_buffer[k].id_device = recive_buffer[i];
							data_buffer[k].id_user = recive_buffer[i+1];
							data_buffer[k].id_event = recive_buffer[i+2];
							data_buffer[k].minute =  recive_buffer[i+3];
							data_buffer[k].hour = recive_buffer[i+4];
							data_buffer[k].day =  recive_buffer[i+5];
							data_buffer[k].month = recive_buffer[i+6];
							data_buffer[k].year = recive_buffer[i+7];
							i = i+8;
						}
						
						G_UNLOCK (data_buffer);
					
						gdk_threads_enter();
						/* copy database to list */
						for ( k = 0; k < 10;  k++)
						{
							list[k].device_name = all_device [data_buffer[k].id_device].name;
							if (data_buffer[k].id_user == 9)
							{
								list[k].user_name = "Unknown";
							}
							else
							{
								list[k].user_name = all_user [data_buffer[k].id_user].usr;
							}
							if (data_buffer[k].id_event == 1)
							{
								list[k].event = "Close";
							}
							else if ( data_buffer[k].id_event == 0)
							{
								list[k].event = "Open";
							}
							else
							{
								list[k].event = "Interrupt";
							}
			
							list[k].minute = data_buffer[k].minut

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -