📄 view.cc
字号:
/* * Simulator of microcontrollers (view.cc) * * Copyright (C) 1999,99 Drotos Daniel, Talker Bt. * * To contact author send email to drdani@mazsola.iit.uni-miskolc.hu * *//* This file is part of microcontroller simulator: ucsim.UCSIM is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2 of the License, or(at your option) any later version.UCSIM is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with UCSIM; see the file COPYING. If not, write to the FreeSoftware Foundation, 59 Temple Place - Suite 330, Boston, MA02111-1307, USA. *//*@1@*/#include "ddconfig.h"#include <stdlib.h>#include "i_string.h"#include "appcl.h"/* * Box */cl_box::cl_box(int ix, int iy, int iw, int ih): cl_base(){ x= ix; y= iy; w= iw; h= ih;}voidcl_box::set(int ix, int iy, int iw, int ih){ x= ix; y= iy; w= iw; h= ih;}voidcl_box::move_rel(int dx, int dy){ x+= dx; y+= dy;}voidcl_box::grow(int dw, int dh){ w+= dw; h+= dh;}/* * Astbract of a viewer ****************************************************************************** */cl_view::cl_view(class cl_box *ipos, char *iname, class cl_app *iapp): cl_base(){ pos= new cl_box(ipos->x,ipos->y, ipos->w,ipos->h); if ((window= newwin(pos->h,pos->w, pos->y,pos->x))) { leaveok(window, TRUE); panel= new_panel(window); } else { panel= 0; delwin(window); window= 0; } parent= 0; next= last= 0; app= iapp; state= SF_NOTHING; options= OF_SELECTABLE; if (!iname || !(*iname)) { name= (char*)malloc(100); sprintf(name, "view%p", this); } else name= strdup(iname);}cl_view::cl_view(char *iname, class cl_app *iapp): cl_base(){ window= 0; panel= 0; parent= 0; next= last= 0; app= iapp; state= SF_NOTHING; options= OF_SELECTABLE; if (!iname || !(*iname)) { name= (char*)malloc(100); sprintf(name, "view%p", this); } else name= strdup(iname);}cl_view::~cl_view(void){ if (panel) del_panel(panel); if (window) delwin(window); if (palette) free(palette); if (name) free(name);}intcl_view::init(void){ input= mk_input(); palette= mk_palette(); //draw(); return(0);}class cl_gin *cl_view::mk_input(void){ return(0);}int *cl_view::mk_palette(void){ return(0);}intcl_view::ok(void){ return(window && panel);}/* * Make output into the view */intcl_view::draw(void){ int color, x, y; color= get_color(palette?0:C_WIN_NORMAL); wattrset(window, color); for (y= 0; y < pos->h; y++) for (x= 0; x < pos->w; x++) mvwaddch(window, y,x, ' '); app->drawn++; return(0);}intcl_view::update(void){ draw(); update_panels(); doupdate(); return(0);}intcl_view::get_color(int color){ int *p; class cl_view *v; v= this; while (v) { p= v->get_palette(); if (p) color= p[color]; v= v->parent; } return(color);}int *cl_view::get_palette(void){ return(palette);}/* * Event handling */intcl_view::get_event(struct t_event *event){ if (parent) return(parent->get_event(event)); if (input) return(input->get_event(event)); return(0);}intcl_view::handle_event(struct t_event *event){ return(0);}intcl_view::unhandled(struct t_event *event){ return(0);}intcl_view::mk_event(struct t_event *event, FILE *f, int key){ event->what= EV_KEY; event->event.key= key; return(1);}class cl_view *cl_view::prev(void){ class cl_view *v; v= next; while (v != this) v= v->next; return(v);}class cl_view *cl_view::prev_view(void){ if (parent && parent->first() == this) return(0); else return(prev()); }intcl_view::select(void){ /* class cl_view *v; if (!(options & OF_SELECTABLE)) return(0); if (state & SF_SELECTED) return(1); if (parent && !(parent->select())) return(0); if (parent) { v= parent->current_sub_view(); if (v && v != this) v->unselect(); parent->set_current(this); } change_state(SF_FOCUSED, 1); change_state(SF_SELECTED, 1); draw(); return(1);*/ if (options & OF_SELECTABLE) if (parent) parent->set_current(this); return(1);}intcl_view::unselect(void){ class cl_view *csv= current_sub_view(); if (csv && !(csv->unselect())) return(0); if (!terminal_view()) change_state(SF_FOCUSED, 0); change_state(SF_SELECTED, 0); draw(); return(1);}class cl_view *cl_view::current_sub_view(void){ return(0);}intcl_view::terminal_view(void){ return(1);}voidcl_view::change_state(unsigned int what, int enable){ if (enable) state|= what; else state&= ~what; if (parent) { switch (what) { case SF_FOCUSED: //reset_cursor(); /*message(parent, EV_BROADCAST, (enable)?CM_RECEIVED_FOCUS:CM_RELEASED_FOCUS, this);*/ break; } } draw();}/* End of gui.src/view.cc */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -