📄 classicladder_gtk.c
字号:
void save_label_comment_edited(){ strcpy(EditDatas.Rung.Label, gtk_entry_get_text((GtkEntry *) entrylabel)); strcpy(EditDatas.Rung.Comment, gtk_entry_get_text((GtkEntry *) entrycomment));}void autorize_prevnext_buttons(int Yes){ if (Yes) { gtk_widget_set_sensitive(VScrollBar, TRUE); gtk_widget_set_sensitive(entrylabel, FALSE); gtk_widget_set_sensitive(entrycomment, FALSE); } else { gtk_widget_set_sensitive(VScrollBar, FALSE); gtk_widget_set_sensitive(entrylabel, TRUE); gtk_widget_set_sensitive(entrycomment, TRUE); }}void ButtonRunStop_click(){ if (InfosGene->LadderState == STATE_RUN) { InfosGene->LadderState = STATE_STOP; gtk_label_set_text(GTK_LABEL(GTK_BIN(ButtonRunStop)->child), "Run"); } else { InfosGene->LadderState = STATE_RUN; gtk_label_set_text(GTK_LABEL(GTK_BIN(ButtonRunStop)->child), "Stop"); }}void StoreDirectorySelected(GtkFileSelection * selector, char cForLoadingProject){ char *TempDir; TempDir = (char *) gtk_file_selection_get_filename(GTK_FILE_SELECTION(FileSelector)); if (cForLoadingProject) VerifyDirectorySelected(LadderDirectory, TempDir); else strcpy(LadderDirectory, TempDir);}void LoadNewLadder(){ StoreDirectorySelected(GTK_FILE_SELECTION(FileSelector), TRUE /* cForLoadingProject */ ); if (InfosGene->LadderState == STATE_RUN) ButtonRunStop_click(); InfosGene->LadderState = STATE_LOADING; LoadProjectFiles(LadderDirectory); UpdateGtkAfterLoading(FALSE /* cCreateTimer */ ); InfosGene->LadderState = STATE_STOP;}void SaveAsLadder(void){ StoreDirectorySelected(GTK_FILE_SELECTION(FileSelector), FALSE /* cForLoadingProject */ ); SaveProjectFiles(LadderDirectory);}void CreateFileSelection(char *Prompt, int Save){ /* From the example in gtkfileselection help */ /* Create the selector */ FileSelector = gtk_file_selection_new(Prompt); if (Save) gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(FileSelector)-> ok_button), "clicked", GTK_SIGNAL_FUNC(SaveAsLadder), NULL); else gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(FileSelector)-> ok_button), "clicked", GTK_SIGNAL_FUNC(LoadNewLadder), NULL); /* Ensure that the dialog box is destroyed when the user clicks a button. */ gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(FileSelector)-> ok_button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), (gpointer) FileSelector); gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(FileSelector)-> cancel_button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), (gpointer) FileSelector); /* Display that dialog */ gtk_widget_show(FileSelector);}void ButtonNew_click(){ ShowConfirmationBox("New", "Do you really want to clear all datas ?", InitAllLadderDatas);}void ButtonLoad_click(){ CreateFileSelection("Please select the project to load", FALSE);}void ButtonSaveAs_click(){ CreateFileSelection("Please select the project to save", TRUE);}void ButtonSave_click(){ if ( LadderDirectory[0] == '\0' ) { /* no filename yet, treat like SaveAs */ ButtonSaveAs_click(); } else { SaveProjectFiles(LadderDirectory); }}void ButtonConfig_click(){ OpenConfigWindowGtk();}void ButtonAbout_click(){ /* From the example in gtkdialog help */ GtkWidget *dialog, *label, *okay_button; /* Create the widgets */ dialog = gtk_dialog_new(); label = gtk_label_new("ClassicLadder v" RELEASE_VER_STRING "\n" RELEASE_DATE_STRING "\n" "Copyright (C) 2001-2004 Marc Le Douarain\nmarc.le-douarain AT laposte DOT net\n" " http://www.sourceforge.net/projects/classicladder \n" "http://www.multimania.com/mavati/classicladder\n" "Released under the terms of the\nGNU Lesser General Public License v2.1"); okay_button = gtk_button_new_with_label("Okay"); /* Ensure that the dialog box is destroyed when the user clicks ok. */ gtk_signal_connect_object(GTK_OBJECT(okay_button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(dialog)); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), okay_button); gtk_widget_grab_focus(okay_button); /* Add the label, and show everything we've added to the dialog. */ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label); gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); gtk_widget_show_all(dialog);}void ShowMessageBox(char *title, char *text, char *button){ /* From the example in gtkdialog help */ GtkWidget *dialog, *label, *okay_button; /* Create the widgets */ dialog = gtk_dialog_new(); label = gtk_label_new(text); okay_button = gtk_button_new_with_label(button); /* Ensure that the dialog box is destroyed when the user clicks ok. */ gtk_signal_connect_object(GTK_OBJECT(okay_button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(dialog)); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), okay_button); gtk_widget_grab_focus(okay_button); /* Add the label, and show everything we've added to the dialog. */ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label); gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_title(GTK_WINDOW(dialog), title); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); gtk_widget_show_all(dialog);}void DoFunctionOfConfirmationBox(void *(*function_to_do) (void *)){ gtk_widget_destroy(ConfirmDialog); (function_to_do) (NULL);}void ShowConfirmationBox(char *title, char *text, void *function_if_yes){ /* From the example in gtkdialog help */ GtkWidget *label, *yes_button, *no_button; /* Create the widgets */ ConfirmDialog = gtk_dialog_new(); label = gtk_label_new(text); yes_button = gtk_button_new_with_label("Yes"); no_button = gtk_button_new_with_label("No"); /* Ensure that the dialog box is destroyed when the user clicks ok. */ gtk_signal_connect_object(GTK_OBJECT(no_button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(ConfirmDialog)); gtk_signal_connect_object(GTK_OBJECT(yes_button), "clicked", GTK_SIGNAL_FUNC(DoFunctionOfConfirmationBox), function_if_yes); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(ConfirmDialog)->action_area), yes_button); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(ConfirmDialog)->action_area), no_button); gtk_widget_grab_focus(no_button); /* Add the label, and show everything we've added to the dialog. */ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(ConfirmDialog)->vbox), label); gtk_window_set_modal(GTK_WINDOW(ConfirmDialog), TRUE); gtk_window_set_title(GTK_WINDOW(ConfirmDialog), title); gtk_window_set_position(GTK_WINDOW(ConfirmDialog), GTK_WIN_POS_CENTER); gtk_widget_show_all(ConfirmDialog);}void DoQuit(void){ gtk_widget_destroy(RungWindow);}void ConfirmQuit(void){ ShowConfirmationBox("Sure?", "Do you really want to quit ?\n If not saved, all modifications will be lost \n", DoQuit);}gint RungWindowDeleteEvent(GtkWidget * widget, GdkEvent * event, gpointer data){ ConfirmQuit(); // we do not want that the window be destroyed. return TRUE;}void RungWindowInitGtk(){ GtkWidget *vbox, *hboxtop, *hboxbottom; GtkWidget *hboxmiddle; GtkWidget *ButtonQuit; GtkWidget *ButtonNew, *ButtonLoad, *ButtonSave, *ButtonSaveAs, *ButtonConfig, *ButtonAbout; RungWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title((GtkWindow *) RungWindow, "Section Display"); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(RungWindow), vbox); gtk_widget_show(vbox); gtk_signal_connect(GTK_OBJECT(RungWindow), "destroy", GTK_SIGNAL_FUNC(quit_appli), NULL); hboxtop = gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(vbox), hboxtop); gtk_widget_show(hboxtop); gtk_box_set_child_packing(GTK_BOX(vbox), hboxtop, /* expand */ FALSE, /* fill */ FALSE, /* pad */ 0, GTK_PACK_START); entrylabel = gtk_entry_new(); gtk_widget_set_usize((GtkWidget *) entrylabel, 80, 0); gtk_entry_set_max_length((GtkEntry *) entrylabel, LGT_LABEL - 1); gtk_entry_prepend_text((GtkEntry *) entrylabel, ""); gtk_box_pack_start(GTK_BOX(hboxtop), entrylabel, FALSE, FALSE, 0); gtk_widget_show(entrylabel); entrycomment = gtk_entry_new(); gtk_entry_set_max_length((GtkEntry *) entrycomment, LGT_COMMENT - 1); gtk_entry_prepend_text((GtkEntry *) entrycomment, ""); gtk_box_pack_start(GTK_BOX(hboxtop), entrycomment, FALSE, FALSE, 0); gtk_widget_show(entrycomment); DurationOfLastScan = gtk_entry_new(); gtk_widget_set_usize((GtkWidget *) DurationOfLastScan, 60, 0);// gtk_entry_set_max_length((GtkEntry *)DurationOfLastScan,LGT_COMMENT-1);// gtk_entry_set_max_length((GtkEntry *)DurationOfLastScan,20); gtk_entry_prepend_text((GtkEntry *) DurationOfLastScan, ""); gtk_box_pack_start(GTK_BOX(hboxtop), DurationOfLastScan, FALSE, FALSE, 0); gtk_widget_set_sensitive(DurationOfLastScan, FALSE); gtk_widget_show(DurationOfLastScan); hboxmiddle = gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(vbox), hboxmiddle); gtk_widget_show(hboxmiddle); gtk_box_set_child_packing(GTK_BOX(vbox), hboxmiddle, /* expand */ TRUE, /* fill */ TRUE, /* pad */ 0, GTK_PACK_START); /* Create the drawing area */ drawing_area = gtk_drawing_area_new(); gtk_drawing_area_size(GTK_DRAWING_AREA(drawing_area), BLOCK_WIDTH_DEF * RUNG_WIDTH + OFFSET_X + 5, BLOCK_HEIGHT_DEF * RUNG_HEIGHT + OFFSET_Y); gtk_box_pack_start(GTK_BOX(hboxmiddle), drawing_area, TRUE, TRUE, 0); gtk_widget_show(drawing_area); AdjustVScrollBar = (GtkAdjustment *) gtk_adjustment_new(0, 0, 0, 0, 0, 0); VScrollBar = gtk_vscrollbar_new(AdjustVScrollBar); gtk_box_pack_start(GTK_BOX(hboxmiddle), VScrollBar, FALSE, FALSE, 0); gtk_widget_show(VScrollBar); AdjustHScrollBar = (GtkAdjustment *) gtk_adjustment_new(0, 0, 0, 0, 0, 0); HScrollBar = gtk_hscrollbar_new(AdjustHScrollBar); gtk_box_pack_start(GTK_BOX(vbox), HScrollBar, FALSE, FALSE, 0); gtk_widget_show(HScrollBar); UpdateVScrollBar(); gtk_signal_connect(GTK_OBJECT(AdjustVScrollBar), "value-changed", (GtkSignalFunc) VScrollBar_value_changed_event, 0); gtk_signal_connect(GTK_OBJECT(AdjustHScrollBar), "value-changed", (GtkSignalFunc) HScrollBar_value_changed_event, 0); hboxbottom = gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(vbox), hboxbottom); gtk_widget_show(hboxbottom); gtk_box_set_child_packing(GTK_BOX(vbox), hboxbottom, /* expand */ FALSE, /* fill */ FALSE, /* pad */ 0, GTK_PACK_START); if(!readOnly){ ButtonNew = gtk_button_new_with_label("New"); gtk_box_pack_start(GTK_BOX(hboxbottom), ButtonNew, TRUE, TRUE, 0); gtk_signal_connect(GTK_OBJECT(ButtonNew), "clicked", (GtkSignalFunc) ButtonNew_click, 0); gtk_widget_show(ButtonNew); ButtonLoad = gtk_button_new_with_label("Load"); gtk_box_pack_start(GTK_BOX(hboxbottom), ButtonLoad, TRUE, TRUE, 0); gtk_signal_connect(GTK_OBJECT(ButtonLoad), "clicked", (GtkSignalFunc) ButtonLoad_click, 0); gtk_widget_show(ButtonLoad); ButtonSave = gtk_button_new_with_label("Save"); gtk_box_pack_start(GTK_BOX(hboxbottom), ButtonSave, TRUE, TRUE, 0); gtk_signal_connect(GTK_OBJECT(ButtonSave), "clicked", (GtkSignalFunc) ButtonSave_click, 0); gtk_widget_show(ButtonSave); ButtonSaveAs = gtk_button_new_with_label("Save As"); gtk_box_pack_start(GTK_BOX(hboxbottom), ButtonSaveAs, TRUE, TRUE, 0); gtk_signal_connect(GTK_OBJECT(ButtonSaveAs), "clicked", (GtkSignalFunc) ButtonSaveAs_click, 0); gtk_widget_show(ButtonSaveAs);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -