📄 dna.cc
字号:
//--------------------------------------------------------------------//// dna.cc //// Latest revision: 05-06-2000 //// Copyright (C) 2000 by Thomas J. Nelson //// All rights reserved. ////--------------------------------------------------------------------// #include "dna.h"Globals g;extern int ylabel[30];char lestif_filename[FILENAMELENGTH] = "nothing";//// Don't set `transient' resource in fallbacks.static String fallback_resources[] = { "*.fontList: *helvetica-bold-r-normal--12*", "*.shadowThickness: 1", "*.DialogForm*shadowThickness: 1", "*.background:gray", "*.foreground:black", "*.marginWidth:1", "*.marginHeight:1", "*.FileSelector*marginWidth: 1", "*.FileSelector*marginHeight: 1", "*.FileSelector*listVisibleItemCount: 25", "*.FileSelector*borderWidth: 0", "*.XmText*fontList: fixed", "*DrawWidget*fontList: fixed", "*List*fontList:*-courier-medium-r-normal--12-120-*", "*List*XmPushButton*fontList:*helvetica-bold-r-normal--12*", "*List*XmLabel*fontList:*helvetica-bold-r-normal--12*", "*highlightThickness: 0", NULL}; //--------------------------------------------------------------------//int main(int argc, char **argv){ XtAppContext app; XtSetLanguageProc(NULL,NULL,NULL); g.main_widget = XtVaAppInitialize(&app, "Xdata", NULL, 0, &argc, argv, fallback_resources, XmNdeleteResponse, XmDO_NOTHING, NULL); initialize_globals(); init_xlib(); resize_main_widget(g.main_xsize, g.main_ysize); makewidgets(g.main_widget); if(g.sequence_mode != DNA) set_sequence_mode(PROTEIN); xminitializemisc(g.main_widget); create_main_icon(); initialize_data(); XtAppAddTimeOut(app,1000,timer_callback,NULL); XtAppMainLoop(app);}//--------------------------------------------------------------------//// create_main_icon //// Set the icon in case user iconifies program. Need a bigger one. ////--------------------------------------------------------------------//void create_main_icon(void){ Window win; XIconSize *size; int count, k, ok=0; int alloc1=0, n; Arg args[100]; Pixmap icon; const uchar icon_data[] = { 0x54, 0x01, 0xa8, 0x02, 0x50, 0x05, 0xa0, 0x0a, 0x50, 0x15, 0xa8, 0x2a, 0x14, 0x55, 0x0a, 0xaa, 0x05, 0x55, 0x82, 0x2a, 0x45, 0x15, 0xaa, 0x0a, 0x54, 0x05, 0xa8, 0x02, 0x54, 0x01, 0xaa, 0x00, 0x54, 0x01, 0xa8, 0x02, 0x50, 0x05, 0xa0, 0x0a, 0x50, 0x15, 0xa8, 0x2a, 0x14, 0x55, 0x0a, 0xaa, 0x05, 0x55, 0x82, 0x2a, 0x45, 0x15, 0xaa, 0x0a, 0x54, 0x05, 0xa8, 0x02, 0x54, 0x01, 0xaa, 0x00, 0x54, 0x01, 0xa8, 0x02, 0x50, 0x05, 0xa0, 0x0a, 0x50, 0x15, 0xa8, 0x2a, 0x14, 0x55, 0x0a, 0xaa, 0x05, 0x55, 0x82, 0x2a, 0x45, 0x15, 0xaa, 0x0a, 0x54, 0x05, 0xa8, 0x02, 0x54, 0x01, 0xaa, 0x00, 0x54, 0x01, 0xa8, 0x02, 0x50, 0x05, 0xa0, 0x0a, 0x50, 0x15, 0xa8, 0x2a, 0x14, 0x55, 0x0a, 0xaa, 0x05, 0x55, 0x82, 0x2a, 0x45, 0x15, 0xaa, 0x0a, 0x54, 0x05, 0xa8, 0x02, 0x54, 0x01, 0xaa, 0x00, }; win = RootWindow(g.display,DefaultScreen(g.display)); //// Make sure it is ok to create a 32x32 icon. XGetIconSizes returns 0 //// if preferred icon sizes are not set. Should ideally iterate through //// size[k].width_inc and size[k].height_inc. if(XGetIconSizes(g.display, win, &size, &count)) { alloc1=1; for(k=0;k<count;k++) { if(between(32, size[k].min_width, size[k].max_width) && between(32, size[k].min_height, size[k].max_height)){ ok=1; break;} } }else ok=1; if(ok) { icon = XCreateBitmapFromData(g.display, win, (char*)icon_data, 32, 32); n=0; if(icon != (Pixmap)None) { XtSetArg(args[n], XmNiconic, False); n++; XtSetArg(args[n], XmNiconName, "Xdata"); n++; XtSetArg(args[n], XmNiconPixmap, icon); n++; }else fprintf(stderr, "Can't create icon\n"); XtSetValues(g.main_widget, args, n); }else fprintf(stderr, "Not allowed to create a 32x32 icon!\n"); if(alloc1) XFree(size);}//--------------------------------------------------------------------//// Make widgets //// Call after set_motif_colors and before setup_colors. //// Widgets that exist for the life of the application. ////--------------------------------------------------------------------//void makewidgets(Widget parent){ int k,n; Arg args[100]; Widget main_widget, main_bulletin_board; Widget frame, frame2, frame3, xlabel_widget, ylabel_widget; Widget xlabel_frame, ylabel_frame; n=0; XtSetArg(args[n], XmNmarginHeight, 0); n++; XtSetArg(args[n], XmNmarginWidth, 0); n++; XtSetArg(args[n], XmNx, 2); n++; XtSetArg(args[n], XmNy, 2); n++; XtSetArg(args[n], XmNwidth, g.main_xsize-4); n++; XtSetArg(args[n], XmNheight, g.main_ysize-4); n++; main_widget = XmCreateMainWindow(parent, "Main", args, n); XtAddEventHandler(g.main_widget, StructureNotifyMask, False, (XtEH)configurecb, (XtP)NULL); n=0; XtSetArg(args[n], XmNmarginHeight, 0); n++; XtSetArg(args[n], XmNmarginWidth, 0); n++; XtSetArg(args[n], XmNx, 146); n++; XtSetArg(args[n], XmNy, 2); n++; XtSetArg(args[n], XmNwidth, g.main_xsize-4); n++; XtSetArg(args[n], XmNheight, g.main_ysize-4); n++; main_bulletin_board = XmCreateBulletinBoard(main_widget, "MainBulletinBoard", args, n); n=0; XtSetArg(args[n], XmNmarginHeight, 0); n++; XtSetArg(args[n], XmNmarginWidth, 0); n++; XtSetArg(args[n], XmNx, 16+146); n++; XtSetArg(args[n], XmNy, 16+2); n++; XtSetArg(args[n], XmNwidth, -16+g.main_xsize-154); n++; XtSetArg(args[n], XmNheight, -16+g.main_ysize-4); n++; g.draw_widget = XmCreateDrawingArea(main_bulletin_board, "DrawWidget", args, n); //// Widgets for x and y labels n=0; XtSetArg(args[n], XmNshadowType, XmSHADOW_ETCHED_IN); n++; XtSetArg(args[n], XmNx, 2+146); n++; XtSetArg(args[n], XmNy, 2); n++; XtSetArg(args[n], XmNwidth, g.main_xsize-154); n++; XtSetArg(args[n], XmNheight, 16); n++; xlabel_frame = XmCreateFrame(main_bulletin_board, "XlabelFrame", args, n); XtManageChild(xlabel_frame); n=0; XtSetArg(args[n], XmNshadowType, XmSHADOW_ETCHED_IN); n++; XtSetArg(args[n], XmNx, 2+146); n++; XtSetArg(args[n], XmNy, 2); n++; XtSetArg(args[n], XmNwidth, 14); n++; XtSetArg(args[n], XmNheight, g.main_ysize-4); n++; ylabel_frame = XmCreateFrame(main_bulletin_board, "YlabelFrame", args, n); XtManageChild(ylabel_frame); n=0; XtSetArg(args[n], XmNmarginHeight, 0); n++; XtSetArg(args[n], XmNmarginWidth, 0); n++; XtSetArg(args[n], XmNx, 2); n++; XtSetArg(args[n], XmNy, 2); n++; XtSetArg(args[n], XmNwidth, g.main_xsize-154); n++; XtSetArg(args[n], XmNheight, 16); n++; xlabel_widget = XmCreateDrawingArea(xlabel_frame, "XlabelWidget", args, n); n=0; XtSetArg(args[n], XmNmarginHeight, 0); n++; XtSetArg(args[n], XmNmarginWidth, 0); n++; XtSetArg(args[n], XmNx, 2); n++; XtSetArg(args[n], XmNy, 2); n++; XtSetArg(args[n], XmNwidth, 16); n++; XtSetArg(args[n], XmNheight, g.main_ysize-4); n++; ylabel_widget = XmCreateDrawingArea(ylabel_frame, "YlabelWidget", args, n); //////// XtManageChild(xlabel_frame); XtManageChild(ylabel_frame); XtManageChild(xlabel_widget); XtManageChild(ylabel_widget); XtManageChild(main_widget); XtManageChild(g.draw_widget); XtManageChild(main_bulletin_board); XtRealizeWidget(parent); XtAddCallback(g.draw_widget, XmNexposeCallback, (XtCBP)drawcb, 0); XtAddCallback(g.draw_widget, XmNinputCallback, (XtCBP)drawinputcb, 0); XtAddEventHandler(g.draw_widget, StructureNotifyMask, False, (XtEH)configurecb, (XtP)NULL); g.draw_window = XtWindow(g.draw_widget); g.xlabel_window = XtWindow(xlabel_widget); g.ylabel_window = XtWindow(ylabel_widget); //// Create a graphics context g.main_window=XtWindow(main_widget); XtVaGetValues(g.main_widget, XmNbackground, &g.bcolor, XmNforeground, &g.fcolor, NULL); g.hcolor = g.fcolor; g.gc = XCreateGC(g.display, g.main_window, 0L,(XGCValues*)NULL); // This would force font to be helvetica // XSetFont(g.display, g.gc, g.fontstruct->fid); XSetForeground(g.display, g.gc, g.fcolor); XSetBackground(g.display, g.gc, g.bcolor); //--------------------frame for buttons-----------------------------// n=0; XtSetArg(args[n], XmNshadowType, XmSHADOW_ETCHED_IN); n++; XtSetArg(args[n], XmNx, 2); n++; XtSetArg(args[n], XmNy, 2); n++; XtSetArg(args[n], XmNwidth, 144); n++; XtSetArg(args[n], XmNheight, g.main_ysize-106); n++; frame = XmCreateFrame(main_widget, "frame", args, n); XtManageChild(frame); //--------------info area (inside frame)---------------------------// n=0; XtSetArg(args[n], XmNtitle, "ButtonArea"); n++; XtSetArg(args[n], XmNresizePolicy, XmRESIZE_NONE); n++; XtSetArg(args[n], XmNx, 0); n++; XtSetArg(args[n], XmNwidth, 144); n++; XtSetArg(args[n], XmNheight, 8+20*(g.nbuttons/2)); n++; g.button_drawing_area = XmCreateDrawingArea(frame, "button_drawing_area", args, n); XtManageChild(g.button_drawing_area); for(k=0;k<g.nbuttons;k++) g.button[k]->widget = add_mainbutton(g.button[k]->label, mainbuttoncb); //--------------add a fancy pixmap --------------------------------// int y = 20*(g.nbuttons/2); n=0; XtSetArg(args[n], XmNshadowType, XmSHADOW_ETCHED_IN); n++; XtSetArg(args[n], XmNx, 4); n++; XtSetArg(args[n], XmNy, 10+y); n++; XtSetArg(args[n], XmNwidth, 138); n++; XtSetArg(args[n], XmNheight, 360); n++; g.helix_frame = XmCreateFrame(main_widget, "frame", args, n); XtManageChild(g.helix_frame); XtAddCallback(g.button_drawing_area, XmNexposeCallback, (XtCBP)helixcb, 0); //--------------------frame for 'match'----------------------------// n=0; XtSetArg(args[n], XmNshadowType, XmSHADOW_ETCHED_IN); n++; XtSetArg(args[n], XmNx, 2); n++; XtSetArg(args[n], XmNy, g.main_ysize-90); n++; XtSetArg(args[n], XmNwidth, 144); n++; XtSetArg(args[n], XmNheight, 50); n++; frame3 = XmCreateFrame(main_widget, "frame3", args, n); XtManageChild(frame3); //--------------info area for matches------------------------------// n=0; XtSetArg(args[n], XmNtitle, "MatchArea"); n++; XtSetArg(args[n], XmNresizePolicy, XmRESIZE_NONE); n++; XtSetArg(args[n], XmNx, 4); n++; XtSetArg(args[n], XmNy, 0); n++; XtSetArg(args[n], XmNwidth, 138); n++; XtSetArg(args[n], XmNheight, 50); n++; g.match_area = XmCreateDrawingArea(frame3, "match_area", args, n); XtManageChild(g.match_area); //--------------------frame for label------------------------------// n=0; XtSetArg(args[n], XmNshadowType, XmSHADOW_ETCHED_IN); n++; XtSetArg(args[n], XmNx, 2); n++; XtSetArg(args[n], XmNy, g.main_ysize-40); n++; XtSetArg(args[n], XmNwidth, 144); n++; XtSetArg(args[n], XmNheight, 36); n++; frame2 = XmCreateFrame(main_widget, "frame2", args, n); XtManageChild(frame2); //--------------add a label----------------------------------------// Widget label; n=0; label = XmCreateLabel(frame2, "DNA ver. 1.1\n(C) T.Nelson 2000", args, n); XtManageChild(label); }//--------------------------------------------------------------------//// helixcb ////--------------------------------------------------------------------//void helixcb(Widget widget, XtP client_data, XtP *call_data){ static int hit = 0; static Pixmap helix, pmap; static uint width, height; XColor exactcolor, hdwrcolor; // Can't make xcolors static Window win; win = XtWindow(g.helix_frame); int xhot, yhot; if(!hit)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -