📄 menu_options.c
字号:
/* File : menu_options.c Author : Sergiy Uvarov - Copyright (C) 2001 Description : creating option menu. Copyright notice: avr_simulator - A GNU/Linux simulator for the Atmel AVR series of microcontrollers. Copyright (C) 2001 Sergey Uvarov This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Sergiy Uvarov E-mail : colonel@ff.dsu.dp.ua*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <libintl.h>#include <Xm/XmAll.h>#include "types.h"#include "global.h"#include "menu_options.h"#define _(x) gettext(x)void use_debugger_callback();void close_debugger_callback();void use_ports_callback();void close_ports_callback();void toggle_ports_callback();void popup_file_selection_callback();void watchdog_unprog_callback();void watchdog_prog_callback();void close_project_callback();int check_port_file();void init_ports_window();void file_selection_ok_port();void create_project_selection();Widget ports_window,debugger_window,project_window, freq_field, /* field where you enter frequency */ watchdog_freq_field, /* field where you enter watchdog frequency*/ combo_proc, /* widgets for choose processor */ file_selection_port, prog_option_menu, /* option menu for set reset delay */ prog_button[2]; /* buttons from previous menu */ int multi_step=10, /* number of command is executed by multi step */ auto_step=100, /* it's time while a command are executed by auto step */ debug_flag=0, /* */ ports_window_flag, /* show what buttons was pressed logging or stimuli */ number_edit_line, /* in port logging and stimuli window */ wacthdog_timeout_temp=UNPROGRAMMED;Line_port_window data_port_window[6];Data_port_window data_port_log[6],data_port_sti[6];void create_ports_window(void){ Widget shell,frame,button,form,separator; XmString string; int n; char buf[10]; /* create Selection File */ string=XmStringGenerate(_("Selection of file"),XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE); file_selection_port=XmCreateFileSelectionDialog(toplevel, "selection_file",NULL,0); XtVaSetValues(file_selection_port,XmNdialogTitle,string, XmNheight,400,XmNwidth,400, XmNdialogStyle,XmDIALOG_PRIMARY_APPLICATION_MODAL,NULL); XmStringFree(string); XtAddCallback(file_selection_port,XmNcancelCallback, (XtCallbackProc)unmanage, (XtPointer)&file_selection_port); XtAddCallback(file_selection_port,XmNokCallback, (XtCallbackProc)file_selection_ok_port,NULL); XtUnmanageChild(XmFileSelectionBoxGetChild(file_selection_port, XmDIALOG_HELP_BUTTON)); /* end creation of file selection */ shell=XtVaCreateWidget("Shell",xmDialogShellWidgetClass,toplevel,NULL); ports_window=XtVaCreateWidget("form",xmFormWidgetClass,shell, XmNautoUnmanage,False,XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL, XmNresizePolicy,XmRESIZE_NONE, XmNfractionBase,5,NULL); frame=XtVaCreateManagedWidget("Frame",xmFrameWidgetClass,ports_window, XmNtopAttachment,XmATTACH_FORM, XmNtopOffset,5, XmNleftAttachment,XmATTACH_FORM, XmNleftOffset,5, XmNrightAttachment,XmATTACH_FORM, XmNrightOffset,5, NULL); form=XtVaCreateManagedWidget("form",xmFormWidgetClass,frame,NULL); for(n=0;n<6;n++) { sprintf(buf,"%s %c",_("Port"),'A'+n); string=XmStringGenerate(buf,XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE); data_port_window[n].button1= XtVaCreateManagedWidget(" ",xmToggleButtonGadgetClass, form,XmNleftAttachment,XmATTACH_FORM, XmNleftOffset,4,XmNtopOffset,4, XmNlabelString,string,NULL); XmStringFree(string); XtAddCallback(data_port_window[n].button1,XmNvalueChangedCallback, toggle_ports_callback,NULL); data_port_window[n].data= XtVaCreateManagedWidget("field",xmTextFieldWidgetClass,form, XmNtopOffset,4, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,data_port_window[n].button1, XmNleftOffset,4, XmNcolumns,50,XmNmaxLength,15, XmNcursorPositionVisible,False,NULL); data_port_window[n].button2= XtVaCreateManagedWidget("...",xmPushButtonGadgetClass,form, XmNtopOffset,4, XmNrightAttachment,XmATTACH_FORM, XmNrightOffset,4,NULL); XtAddCallback(data_port_window[n].button2,XmNactivateCallback, (XtCallbackProc)popup_file_selection_callback,NULL); XtVaSetValues(data_port_window[n].data,XmNrightAttachment, XmATTACH_WIDGET,XmNrightOffset,4, XmNrightWidget,data_port_window[n].button2,NULL); if(n==0) { XtVaSetValues(data_port_window[n].button1, XmNtopAttachment,XmATTACH_FORM,NULL); XtVaSetValues(data_port_window[n].data, XmNtopAttachment,XmATTACH_FORM,NULL); XtVaSetValues(data_port_window[n].button2, XmNtopAttachment,XmATTACH_FORM,NULL); } else { XtVaSetValues(data_port_window[n].button1,XmNtopAttachment, XmATTACH_WIDGET,XmNtopWidget,separator,NULL); XtVaSetValues(data_port_window[n].data,XmNtopAttachment, XmATTACH_WIDGET,XmNtopWidget,separator,NULL); XtVaSetValues(data_port_window[n].button2,XmNtopAttachment, XmATTACH_WIDGET,XmNtopWidget,separator,NULL); } if(n!=5) separator= XtVaCreateManagedWidget("separator",xmSeparatorGadgetClass,form, XmNtopAttachment,XmATTACH_WIDGET, XmNtopWidget,data_port_window[n].button1, XmNtopOffset,4, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, NULL); } XtVaSetValues(data_port_window[5].button1,XmNbottomOffset,4, XmNbottomAttachment,XmATTACH_FORM,NULL); XtVaSetValues(data_port_window[5].data,XmNbottomOffset,4,XmNbottomAttachment, XmATTACH_FORM,NULL); XtVaSetValues(data_port_window[5].button2,XmNbottomOffset,4, XmNbottomAttachment,XmATTACH_FORM,NULL); string=XmStringGenerate(_("OK"),XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE); button=XtVaCreateManagedWidget("OK",xmPushButtonGadgetClass, ports_window, XmNtopAttachment,XmATTACH_WIDGET, XmNtopOffset,7,XmNtopWidget,frame, XmNleftAttachment,XmATTACH_POSITION, XmNleftPosition,1,XmNlabelString,string, XmNrightAttachment,XmATTACH_POSITION, XmNrightPosition,2, XmNbottomAttachment,XmATTACH_FORM, XmNbottomOffset,7,NULL); XtAddCallback(button,XmNactivateCallback, (XtCallbackProc)use_ports_callback,ports_window); XmStringFree(string); string=XmStringGenerate(_("Cancel"),XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE); button=XtVaCreateManagedWidget("Close",xmPushButtonGadgetClass, ports_window, XmNtopAttachment,XmATTACH_WIDGET, XmNtopOffset,7,XmNtopWidget,form, XmNrightAttachment,XmATTACH_POSITION, XmNrightPosition,4,XmNlabelString,string, XmNleftAttachment,XmATTACH_POSITION, XmNleftPosition,3, XmNbottomAttachment,XmATTACH_FORM, XmNbottomOffset,7,NULL); XtAddCallback(button,XmNactivateCallback, (XtCallbackProc)close_ports_callback,ports_window); XmStringFree(string); XtAddCallback(shell,XmNpopupCallback,(XtCallbackProc)set_size_static_window, NULL);}void file_selection_ok_port(Widget w,Widget *client_data, XmFileSelectionBoxCallbackStruct *call_data){ Data_port_window *data; char *filename; if(ports_window_flag) data=data_port_sti; else data=data_port_log; XtUnmanageChild(file_selection_port); filename=XmCvtXmStringToCT(call_data->value); XmTextFieldSetString(data_port_window[number_edit_line].data,filename); XtFree(filename);}void popup_file_selection_callback(Widget w,Widget *client_data, XtPointer call_data){ int n; XmString string; n=0; while(w!=data_port_window[n].button2) n++; number_edit_line=n; XtManageChild(file_selection_port); if(ports_window_flag) string=XmStringGenerate("*.sti",XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE); else string=XmStringGenerate("*.log",XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE); XtVaSetValues(file_selection_port,XmNpattern,string,NULL); XmStringFree(string); }void close_ports_callback(Widget w,Widget *client_data,XtPointer call_data){ int n; Data_port_window *data; if(ports_window_flag) data=data_port_sti; else data=data_port_log; XtUnmanageChild(*client_data); for(n=0;n<6;n++) { XtVaSetValues(data_port_window[n].button1,XmNset,data[n].state,NULL); XmTextFieldSetString(data_port_window[n].data,data[n].filename); if(data[n].state==XmUNSET) { XtSetSensitive(data_port_window[n].data,False); XtSetSensitive(data_port_window[n].button2,False); } else { XtSetSensitive(data_port_window[n].data,True); XtSetSensitive(data_port_window[n].button2,True); } }}void use_ports_callback(Widget w,Widget *client_data,XtPointer call_data){ int n; Data_port_window *data; XtUnmanageChild(*client_data); if(ports_window_flag) data=data_port_sti; else data=data_port_log; for(n=0;n<6;n++) if(data[n].state!=-1) { XtVaGetValues(data_port_window[n].button1,XmNset,&data[n].state,NULL); XtFree(data[n].filename); data[n].filename=XmTextFieldGetString(data_port_window[n].data); if(data[n].state==XmSET&&ports_window_flag==1) if(check_port_file(data[n].filename)) { XtFree(data[n].filename); data[n].filename=XtMalloc(1); data[n].filename[0]=0; show_error(); } }}void toggle_ports_callback(Widget w,Widget *client_data, XmToggleButtonCallbackStruct *call_data){ int n; n=0; while(data_port_window[n].button1!=w) n++; if(call_data->set==XmSET) { XtSetSensitive(data_port_window[n].data,True); XtSetSensitive(data_port_window[n].button2,True); } else { XtSetSensitive(data_port_window[n].data,False); XtSetSensitive(data_port_window[n].button2,False); }}void create_debugger_window(void){ Widget shell,frame1,frame2,frame3,label,form,option_form,button; static Widget data[3]; XmString string; char number[10]; shell=XtVaCreateWidget("Shell",xmDialogShellWidgetClass,toplevel, XmNtitle,_("Debugger's options"), NULL); debugger_window=XtVaCreateWidget("form",xmFormWidgetClass,shell, XmNautoUnmanage,False, XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL, XmNresizePolicy,XmRESIZE_NONE, XmNfractionBase,5,NULL); option_form=XtVaCreateManagedWidget("form",xmFormWidgetClass,debugger_window, XmNtopAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM,NULL); frame1=XtVaCreateManagedWidget("Frame",xmFrameWidgetClass,option_form, XmNtopAttachment,XmATTACH_FORM, XmNtopOffset,5, XmNleftAttachment,XmATTACH_FORM, XmNleftOffset,5, XmNmarginWidth,2,XmNmarginHeight,2,NULL); string=XmStringGenerate(_("Multi Step"),XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE); XtVaCreateManagedWidget("label",xmLabelGadgetClass,frame1, XmNlabelString,string, XmNframeChildType,XmFRAME_TITLE_CHILD, XmNchildHorizontalAlignment,XmALIGNMENT_CENTER, XmNchildVerticalAlignment,XmALIGNMENT_CENTER, NULL); XmStringFree(string); form=XtVaCreateManagedWidget("form",xmFormWidgetClass,frame1,NULL); string=XmStringGenerate(_("Number of Single Steps"),XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE); label=XtVaCreateManagedWidget("label",xmLabelGadgetClass,form, XmNlabelString,string,XmNbottomOffset,4, XmNtopAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM,NULL); XmStringFree(string); sprintf(number,"%d",multi_step); data[0]=XtVaCreateManagedWidget("field",xmTextFieldWidgetClass,form, XmNtopAttachment,XmATTACH_FORM,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -