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

📄 classicladder_gtk.c

📁 Source code for an Numeric Cmputer
💻 C
📖 第 1 页 / 共 3 页
字号:
	ButtonRunStop =	    gtk_button_new_with_label((InfosGene->LadderState ==		STATE_RUN) ? "Stop" : "Run");	gtk_box_pack_start(GTK_BOX(hboxbottom), ButtonRunStop, TRUE, TRUE, 0);	gtk_signal_connect(GTK_OBJECT(ButtonRunStop), "clicked",	    (GtkSignalFunc) ButtonRunStop_click, 0);	gtk_widget_show(ButtonRunStop);    }    ButtonConfig = gtk_button_new_with_label("Config");    gtk_box_pack_start(GTK_BOX(hboxbottom), ButtonConfig, TRUE, TRUE, 0);    gtk_signal_connect(GTK_OBJECT(ButtonConfig), "clicked",	(GtkSignalFunc) ButtonConfig_click, 0);    gtk_widget_show(ButtonConfig);    ButtonAbout = gtk_button_new_with_label("About");    gtk_box_pack_start(GTK_BOX(hboxbottom), ButtonAbout, TRUE, TRUE, 0);    gtk_signal_connect(GTK_OBJECT(ButtonAbout), "clicked",	(GtkSignalFunc) ButtonAbout_click, 0);    gtk_widget_show(ButtonAbout);    ButtonQuit = gtk_button_new_with_label("Quit");    gtk_box_pack_start(GTK_BOX(hboxbottom), ButtonQuit, TRUE, TRUE, 0);//    gtk_signal_connect_object (GTK_OBJECT (ButtonQuit), "clicked",//                                GTK_SIGNAL_FUNC (gtk_widget_destroy),//                                GTK_OBJECT (RungWindow));    gtk_signal_connect_object(GTK_OBJECT(ButtonQuit), "clicked",	ConfirmQuit, NULL);    gtk_widget_show(ButtonQuit);    /* Signals used to handle backing pixmap */    gtk_signal_connect(GTK_OBJECT(drawing_area), "expose_event",	(GtkSignalFunc) expose_event, NULL);    gtk_signal_connect(GTK_OBJECT(drawing_area), "configure_event",	(GtkSignalFunc) configure_event, NULL);    /* Event signals */    gtk_signal_connect(GTK_OBJECT(drawing_area), "button_press_event",	(GtkSignalFunc) button_press_event, NULL);    gtk_widget_set_events(drawing_area, GDK_EXPOSURE_MASK	| GDK_LEAVE_NOTIFY_MASK	| GDK_BUTTON_PRESS_MASK	| GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK);    gtk_signal_connect(GTK_OBJECT(RungWindow), "delete_event",	(GtkSignalFunc) RungWindowDeleteEvent, 0);    gtk_widget_show(RungWindow);    GetTheSizesForRung();}gint VarsWindowDeleteEvent(GtkWidget * widget, GdkEvent * event,    gpointer data){    // we do not want that the window be destroyed.    return TRUE;}void VarsWindowInitGtk(){    GtkWidget *windowvars;    GtkWidget *vboxboolvars[NBR_TYPE_BOOLS_SPY], *vboxmain, *hboxvars,	*hboxvars2;    GtkWidget *vboxvarsnames, *vboxvarsvalues, *vboxvarsformats;    int NumCheckWidget, ColumnVar, NumVarSpy, NumEntry;    GList *DisplayFormatItems = NULL;    windowvars = gtk_window_new(GTK_WINDOW_TOPLEVEL);    gtk_window_set_title((GtkWindow *) windowvars, "Vars");    vboxmain = gtk_vbox_new(FALSE, 0);    gtk_container_add(GTK_CONTAINER(windowvars), vboxmain);    gtk_widget_show(vboxmain);    hboxvars = gtk_hbox_new(FALSE, 0);    gtk_container_add(GTK_CONTAINER(vboxmain), hboxvars);    gtk_widget_show(hboxvars);    hboxvars2 = gtk_hbox_new(FALSE, 0);    gtk_container_add(GTK_CONTAINER(vboxmain), hboxvars2);    gtk_widget_show(hboxvars2);    for (ColumnVar = 0; ColumnVar < NBR_TYPE_BOOLS_SPY; ColumnVar++) {	vboxboolvars[ColumnVar] = gtk_vbox_new(FALSE, 0);	gtk_container_add(GTK_CONTAINER(hboxvars), vboxboolvars[ColumnVar]);	gtk_widget_show(vboxboolvars[ColumnVar]);    }    vboxvarsnames = gtk_vbox_new(FALSE, 0);    gtk_container_add(GTK_CONTAINER(hboxvars2), vboxvarsnames);    gtk_widget_show(vboxvarsnames);    vboxvarsvalues = gtk_vbox_new(FALSE, 0);    gtk_container_add(GTK_CONTAINER(hboxvars2), vboxvarsvalues);    gtk_widget_show(vboxvarsvalues);    vboxvarsformats = gtk_vbox_new(FALSE, 0);    gtk_container_add(GTK_CONTAINER(hboxvars2), vboxvarsformats);    gtk_widget_show(vboxvarsformats);    DisplayFormatItems = g_list_append(DisplayFormatItems, "Dec");    DisplayFormatItems = g_list_append(DisplayFormatItems, "Hex");    DisplayFormatItems = g_list_append(DisplayFormatItems, "Bin");    NumCheckWidget = 0;    for (ColumnVar = 0; ColumnVar < NBR_TYPE_BOOLS_SPY; ColumnVar++) {	int OffVar;	offsetboolvar[ColumnVar] = gtk_entry_new();	gtk_widget_set_usize((GtkWidget *) offsetboolvar[ColumnVar], 40, 0);	gtk_box_pack_start(GTK_BOX(vboxboolvars[ColumnVar]),	    offsetboolvar[ColumnVar], FALSE, FALSE, 0);	gtk_widget_show(offsetboolvar[ColumnVar]);	gtk_entry_set_text((GtkEntry *) offsetboolvar[ColumnVar], "0");	gtk_signal_connect(GTK_OBJECT(offsetboolvar[ColumnVar]), "activate",	    (GtkSignalFunc) OffsetBoolVar_activate_event, (void *) ColumnVar);	for (OffVar = 0; OffVar < NBR_BOOLS_VAR_SPY; OffVar++) {	    chkvar[ColumnVar][OffVar] =		gtk_check_button_new_with_label("xxxx");	    gtk_box_pack_start(GTK_BOX(vboxboolvars[ColumnVar]),		chkvar[ColumnVar][OffVar], FALSE, FALSE, 0);	    gtk_widget_show(chkvar[ColumnVar][OffVar]);	    gtk_signal_connect(GTK_OBJECT(chkvar[ColumnVar][OffVar]),		"toggled", (GtkSignalFunc) chkvar_press_event,		(void *) NumCheckWidget);	    NumCheckWidget++;	}    }    UpdateAllLabelsBoolsVars();    for (NumVarSpy = 0; NumVarSpy < NBR_FREE_VAR_SPY; NumVarSpy++) {	for (ColumnVar = 0; ColumnVar < 2; ColumnVar++) {	    NumEntry = NumVarSpy + ColumnVar * NBR_FREE_VAR_SPY;	    EntryVarSpy[NumEntry] = gtk_entry_new();	    gtk_widget_set_usize((GtkWidget *) EntryVarSpy[NumEntry], 30, 0);	    gtk_box_pack_start((ColumnVar ==		    0) ? GTK_BOX(vboxvarsnames) : GTK_BOX(vboxvarsvalues),		EntryVarSpy[NumEntry], FALSE, FALSE, 0);	    gtk_widget_show(EntryVarSpy[NumEntry]);	    if (ColumnVar == 0) {		gtk_entry_set_text((GtkEntry *) EntryVarSpy[NumEntry],		    DisplayInfo(VarSpy[NumVarSpy][0], VarSpy[NumVarSpy][1]));		gtk_signal_connect(GTK_OBJECT(EntryVarSpy[NumEntry]),		    "activate", (GtkSignalFunc) EntryVarSpy_activate_event,		    &VarSpy[NumVarSpy][0]);	    }	}	DisplayFormatVarSpy[NumVarSpy] = gtk_combo_new();	gtk_combo_set_value_in_list(GTK_COMBO(DisplayFormatVarSpy[NumVarSpy]), TRUE	/* val 	     */ , FALSE /* ok_if_empty */ );	gtk_combo_set_popdown_strings(GTK_COMBO(DisplayFormatVarSpy		[NumVarSpy]), DisplayFormatItems);	gtk_widget_set_usize((GtkWidget *) DisplayFormatVarSpy[NumVarSpy], 40,	    0);	gtk_box_pack_start(GTK_BOX(vboxvarsformats),	    DisplayFormatVarSpy[NumVarSpy], FALSE, FALSE, 0);	gtk_widget_show(DisplayFormatVarSpy[NumVarSpy]);    }    gtk_signal_connect(GTK_OBJECT(windowvars), "delete_event",	(GtkSignalFunc) VarsWindowDeleteEvent, 0);    gtk_widget_show(windowvars);}char *ConvToBin(unsigned int Val){    static char TabBin[33];    int Pos;    unsigned int Mask = 0x80000000;    char First1 = FALSE;    strcpy(TabBin, "");    for (Pos = 0; Pos < 32; Pos++) {	if (Val & Mask)	    First1 = TRUE;	if (First1) {	    if (Val & Mask)		strcat(TabBin, "1");	    else		strcat(TabBin, "0");	}	Mask = Mask >> 1;    }    if (Val == 0)	strcpy(TabBin, "0");    return TabBin;}void DisplayFreeVarSpy(){    int NumVarSpy;    int Value;    char BufferValue[50];    char DisplayFormat[10];    for (NumVarSpy = 0; NumVarSpy < NBR_FREE_VAR_SPY; NumVarSpy++) {	Value = ReadVar(VarSpy[NumVarSpy][0], VarSpy[NumVarSpy][1]);	strcpy(DisplayFormat,	    (char *) gtk_entry_get_text((GtkEntry *) ((GtkCombo *)		    DisplayFormatVarSpy[NumVarSpy])->entry));	strcpy(BufferValue, "");	if (strcmp(DisplayFormat, "Dec") == 0)	    sprintf(BufferValue, "%d", Value);	if (strcmp(DisplayFormat, "Hex") == 0)	    sprintf(BufferValue, "%X", Value);	if (strcmp(DisplayFormat, "Bin") == 0)	    strcpy(BufferValue, ConvToBin(Value));	gtk_entry_set_text((GtkEntry *) EntryVarSpy[NBR_FREE_VAR_SPY +		NumVarSpy], BufferValue);    }}void RefreshOneBoolVar(int Type, int Num, int Val){    int Col = 0;    switch (Type) {    case VAR_PHYS_INPUT:	Col = 1;	break;    case VAR_PHYS_OUTPUT:	Col = 2;	break;    }    if (Num >= ValOffsetBoolVar[Col]	&& Num < ValOffsetBoolVar[Col] + NBR_BOOLS_VAR_SPY)	gtk_toggle_button_set_active((GtkToggleButton *) chkvar[Col][Num -		ValOffsetBoolVar[Col]], (Val != 0) ? TRUE : FALSE);}void RefreshAllBoolsVars(){    int NumVar;    for (NumVar = 0; NumVar < NBR_BOOLS_VAR_SPY; NumVar++) {	gtk_toggle_button_set_active((GtkToggleButton *) chkvar[0][NumVar],	    ReadVar(VAR_MEM_BIT,		NumVar + ValOffsetBoolVar[0]) ? TRUE : FALSE);	gtk_toggle_button_set_active((GtkToggleButton *) chkvar[1][NumVar],	    ReadVar(VAR_PHYS_INPUT,		NumVar + ValOffsetBoolVar[1]) ? TRUE : FALSE);	gtk_toggle_button_set_active((GtkToggleButton *) chkvar[2][NumVar],	    ReadVar(VAR_PHYS_OUTPUT,		NumVar + ValOffsetBoolVar[2]) ? TRUE : FALSE);    }}void UpdateAllLabelsBoolsVars(){    int ColumnVar, OffVar;    for (ColumnVar = 0; ColumnVar < NBR_TYPE_BOOLS_SPY; ColumnVar++) {	for (OffVar = 0; OffVar < NBR_BOOLS_VAR_SPY; OffVar++) {	    char BufNumVar[20];	    switch (ColumnVar) {	    case 0:		sprintf(BufNumVar, "%cB%d", '%',		    OffVar + ValOffsetBoolVar[ColumnVar]);		break;	    case 1:		sprintf(BufNumVar, "%cI%d", '%',		    OffVar + ValOffsetBoolVar[ColumnVar]);		break;	    case 2:		sprintf(BufNumVar, "%cQ%d", '%',		    OffVar + ValOffsetBoolVar[ColumnVar]);		break;	    }	    gtk_label_set_text(GTK_LABEL(GTK_BIN(chkvar[ColumnVar][OffVar])->		    child), BufNumVar);	}    }}void quit_appli(){    gtk_exit(0);}static gint cyclic_refresh(gpointer data){    if (InfosGene->LadderState == STATE_RUN) {	char TextBuffer[20];	sprintf(TextBuffer, "%d us", InfosGene->DurationOfLastScan / 1000);	gtk_entry_set_text(GTK_ENTRY(DurationOfLastScan), TextBuffer);	if(!readOnly){	    if (InfosGene->CmdRefreshVarsBits) {		RefreshAllBoolsVars();		InfosGene->CmdRefreshVarsBits = FALSE;	    }	    DisplayFreeVarSpy();	}    }    DrawCurrentSection();    return 1;}void InitGtkWindows(int argc, char *argv[]){    gtk_init(&argc, &argv);    RungWindowInitGtk();    if(!readOnly){	VarsWindowInitGtk();	EditorInitGtk();	PropertiesInitGtk();	ManagerInitGtk();    }}void UpdateGtkAfterLoading(char cCreateTimer){    DrawCurrentSection();    refresh_label_comment();    autorize_prevnext_buttons(TRUE);    UpdateVScrollBar();    if (cCreateTimer) {	gtk_timeout_add(TIME_REFRESH_RUNG_MS, cyclic_refresh, NULL);    }    if(!readOnly){	ManagerDisplaySections();    }}

⌨️ 快捷键说明

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