📄 classicladder_gtk.c
字号:
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 + -