edit_gtk.c

来自「CNC 的开放码,EMC2 V2.2.8版」· C语言 代码 · 共 412 行 · 第 1/2 页

C
412
字号
void InitAllForToolbar( void ){	int Search = 0;	for ( Search=0; Search<NBR_ELE_IN_TOOLBAR; Search++ )	{		ToolbarBtnRadio[ Search ] = NULL;		ToolbarImage[ Search ] = NULL;		ToolbarPixmap[ Search ] = NULL;	}	NumWidgetEditPointer[ NUM_TOOLBAR_FOR_RUNGS ] = -1;	NumWidgetEditPointer[ NUM_TOOLBAR_FOR_SEQ ] = -1;}void CreateOneToolbar( GtkWidget * Box, int NumTable, short int PtrOnToolBarElementsList[][NBR_ELE_TOOLBAR_X_MAX] ){	int CurrentAvail = 0;	while( ToolbarBtnRadio[ CurrentAvail ]!=NULL && CurrentAvail<NBR_ELE_IN_TOOLBAR )		CurrentAvail++;	if ( CurrentAvail<NBR_ELE_IN_TOOLBAR )	{		StrElement ToolBarEle;		int ScanToolBarX,ScanToolBarY;		GSList * PtrListRadiosBtn = NULL;		ScanToolBarX = 0;		ScanToolBarY = 0;		ToolbarTable[ NumTable ] = gtk_table_new( NBR_ELE_TOOLBAR_X_MAX, NBR_ELE_TOOLBAR_Y_MAX, FALSE/*homogeneous*/ );		gtk_box_pack_start (GTK_BOX(Box), ToolbarTable[ NumTable ], TRUE, TRUE, 0);		do		{			ToolBarEle.Type = PtrOnToolBarElementsList[ScanToolBarY][ScanToolBarX];			ToolBarEle.ConnectedWithTop = 0;			if ( ToolBarEle.Type==EDIT_POINTER )			{				if ( PtrOnToolBarElementsList!=ToolBarElementsSequential )					NumWidgetEditPointer[ NUM_TOOLBAR_FOR_RUNGS ] = CurrentAvail;				else					NumWidgetEditPointer[ NUM_TOOLBAR_FOR_SEQ ] = CurrentAvail;			}			if ( ToolBarEle.Type!=0 )			{				GdkGC * gc = drawing_area->style->bg_gc[0];				ToolbarPixmap[ CurrentAvail ] = gdk_pixmap_new( GDK_DRAWABLE(drawing_area->window), PIXELS_SIZE_IN_TOOLBAR, PIXELS_SIZE_IN_TOOLBAR, -1 );				gdk_draw_rectangle (GDK_DRAWABLE(ToolbarPixmap[ CurrentAvail ]), gc, TRUE, 0, 0, PIXELS_SIZE_IN_TOOLBAR, PIXELS_SIZE_IN_TOOLBAR);		#ifdef SEQUENTIAL_SUPPORT				if ( PtrOnToolBarElementsList==ToolBarElementsSequential )					DrawSeqElementForToolBar(ToolbarPixmap[ CurrentAvail ], 0, 0, PIXELS_SIZE_IN_TOOLBAR, ToolBarEle.Type );				else	#endif					DrawElement(ToolbarPixmap[ CurrentAvail ], 0, 0, PIXELS_SIZE_IN_TOOLBAR, PIXELS_SIZE_IN_TOOLBAR, ToolBarEle, TRUE);					ToolbarImage[ CurrentAvail ] = gtk_image_new_from_pixmap( ToolbarPixmap[ CurrentAvail ], NULL );				ToolbarBtnRadio[ CurrentAvail ] = gtk_radio_button_new( PtrListRadiosBtn );				PtrListRadiosBtn = gtk_radio_button_get_group (GTK_RADIO_BUTTON(ToolbarBtnRadio[ CurrentAvail ]));				gtk_button_set_relief (GTK_BUTTON( ToolbarBtnRadio[ CurrentAvail ] ), GTK_RELIEF_NONE);				gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON(ToolbarBtnRadio[ CurrentAvail ]), FALSE);				gtk_container_add( GTK_CONTAINER( ToolbarBtnRadio[ CurrentAvail ] ), ToolbarImage[ CurrentAvail ] );				gtk_widget_show( ToolbarImage[ CurrentAvail ] );				gtk_table_attach( GTK_TABLE( ToolbarTable[ NumTable ] ), ToolbarBtnRadio[ CurrentAvail ], 									ScanToolBarX, ScanToolBarX+1, ScanToolBarY, ScanToolBarY+1,									0, 0, 0, 0 );				gtk_signal_connect( GTK_OBJECT (ToolbarBtnRadio[ CurrentAvail ]), "clicked", (GtkSignalFunc) ButtonToolbarSignal, GINT_TO_POINTER((int)ToolBarEle.Type) );				switch( ToolBarEle.Type )				{					case EDIT_POINTER:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "Current Object\n      Selector", NULL);						break;					case EDIT_ERASER:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "Eraser", NULL);						break;					case ELE_RISING_INPUT:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "Rising Edge\n Input", NULL);						break;					case ELE_FALLING_INPUT:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "Falling Edge\n Input", NULL);						break;					case ELE_INPUT:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "N.O. Input", NULL);						break;					case ELE_INPUT_NOT:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "N.C. Input ", NULL);						break;					case ELE_CONNECTION:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "Horizontal\nConection", NULL);						break;					case EDIT_CNX_WITH_TOP:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "  Vertical\nConection", NULL);						break;					case EDIT_LONG_CONNECTION:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "  Running\nConnection", NULL);						break;					case ELE_TIMER:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "Timer", NULL);						break;					case ELE_MONOSTABLE:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "Monostable", NULL);						break;					case ELE_COUNTER:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "Counter", NULL);						break;					case ELE_COMPAR:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "Compare\n Variable", NULL);						break;					case ELE_OUTPUT:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "N.O. Output", NULL);						break;					case ELE_OUTPUT_NOT:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "N.C. Output", NULL);						break;					case ELE_OUTPUT_SET:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "Set Output ", NULL);						break;					case ELE_OUTPUT_RESET:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "Reset Output", NULL);						break;					case ELE_OUTPUT_JUMP:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "Jump Coil", NULL);						break;					case ELE_OUTPUT_CALL:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "Call Coil", NULL);						break;					case ELE_OUTPUT_OPERATE:						gtk_tooltips_set_tip (TheTooltips, ToolbarBtnRadio[ CurrentAvail ], "   Variable\nAssignment", NULL);						break;										}				gtk_widget_show( ToolbarBtnRadio[ CurrentAvail ] );				CurrentAvail++;			}//if ( ToolBarEle.Type!=0 )			ScanToolBarX++;			if (ScanToolBarX>=NBR_ELE_TOOLBAR_X_MAX)			{				ScanToolBarX = 0;				ScanToolBarY++;			}		}		while( PtrOnToolBarElementsList[ScanToolBarY][ScanToolBarX]!=-1 );	}}void EditorInitGtk(){	GtkWidget *vbox;	EditWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);	gtk_window_set_title ( GTK_WINDOW( EditWindow ), "Editor");	vbox = gtk_vbox_new (FALSE, 0);	gtk_container_add (GTK_CONTAINER (EditWindow), vbox);	gtk_widget_show (vbox);	EditorButtonAdd = gtk_button_new_with_label ("Add");	gtk_box_pack_start (GTK_BOX (vbox), EditorButtonAdd, FALSE, FALSE, 0);	gtk_signal_connect(GTK_OBJECT (EditorButtonAdd), "clicked",						(GtkSignalFunc) ButtonAddRung, 0);	gtk_widget_show (EditorButtonAdd);	EditorButtonIns = gtk_button_new_with_label ("Insert");	gtk_box_pack_start (GTK_BOX (vbox), EditorButtonIns, FALSE, FALSE, 0);	gtk_signal_connect(GTK_OBJECT (EditorButtonIns), "clicked",						(GtkSignalFunc) ButtonInsertRung, 0);	gtk_widget_show (EditorButtonIns);	EditorButtonDel = gtk_button_new_with_label ("Delete");	gtk_box_pack_start (GTK_BOX (vbox), EditorButtonDel, FALSE, FALSE, 0);	gtk_signal_connect(GTK_OBJECT (EditorButtonDel), "clicked",						(GtkSignalFunc) ButtonDeleteCurrentRung, 0);	gtk_widget_show (EditorButtonDel);	EditorButtonModify = gtk_button_new_with_label ("Modify");	gtk_box_pack_start (GTK_BOX (vbox), EditorButtonModify, FALSE, FALSE, 0);	gtk_signal_connect(GTK_OBJECT (EditorButtonModify), "clicked",						(GtkSignalFunc) ButtonModifyCurrentRung, 0);	gtk_widget_show (EditorButtonModify);	EditorButtonOk = gtk_button_new_with_label ("Ok");	gtk_box_pack_start (GTK_BOX (vbox), EditorButtonOk, FALSE, FALSE, 0);	gtk_signal_connect(GTK_OBJECT (EditorButtonOk), "clicked",						(GtkSignalFunc) ButtonOkCurrentRung, 0);	EditorButtonCancel = gtk_button_new_with_label ("Cancel");	gtk_box_pack_start (GTK_BOX (vbox), EditorButtonCancel, FALSE, FALSE, 0);	gtk_signal_connect(GTK_OBJECT (EditorButtonCancel), "clicked",						(GtkSignalFunc) ButtonCancelCurrentRung, 0);	InitAllForToolbar( );	TheTooltips = gtk_tooltips_new();	/* Rungs elements toolbar */	CreateOneToolbar( vbox, NUM_TOOLBAR_FOR_RUNGS, ToolBarElementsLadder );	gtk_widget_set_sensitive( ToolbarTable[ NUM_TOOLBAR_FOR_RUNGS ], FALSE );	gtk_widget_show( ToolbarTable[ NUM_TOOLBAR_FOR_RUNGS ] );	/* Sequential elements toolbar */#ifdef SEQUENTIAL_SUPPORT	CreateOneToolbar( vbox, NUM_TOOLBAR_FOR_SEQ, ToolBarElementsSequential );	gtk_widget_set_sensitive( ToolbarTable[ NUM_TOOLBAR_FOR_SEQ ], FALSE );#endif	gtk_signal_connect( GTK_OBJECT(EditWindow), "delete_event",		(GtkSignalFunc)EditorWindowDeleteEvent, 0 );	gtk_window_set_resizable( GTK_WINDOW( EditWindow ), FALSE );//gtk_widget_show (EditWindow);	EditDatas.NumElementSelectedInToolBar = -1;}

⌨️ 快捷键说明

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