diff --git a/include/expr.cpp b/include/expr.cpp index 0b1fc905b..a5e77109d 100755 --- a/include/expr.cpp +++ b/include/expr.cpp @@ -468,7 +468,6 @@ void TExpression::eval() o1 = (real&) evalstack.pop(); evalstack.push(pow(o1, o2)); break; - case _min: o2 = (real&)evalstack.pop(); o1 = (real&)evalstack.pop(); evalstack.push(fnc_min(o1, o2)); @@ -483,6 +482,14 @@ void TExpression::eval() s1.upper(); evalstack.push(s1); break; + case _round: + { + const int ndec = (int)((real&) evalstack.pop()).integer(); + o1 = (real&) evalstack.pop(); + o1.round(ndec); + evalstack.push(o1); + } + break; default: break; } @@ -499,11 +506,12 @@ HIDDEN const char* _s; HIDDEN char _tok[81]; HIDDEN const char* _fntable[] = { "sqrt", "sqr", "exp10", "exp", "log10", "log", "sin", "cos", "tan", "left", - "right", "pow", "min", "max", "mid", "upper", NULL }; + "right", "pow", "min", "max", "mid", "upper", + "round", NULL }; HIDDEN TCodesym _fntok[] = { _sqrt, _sqr, _exp10, _exp, _log10, _log, _sin, _cos, _tan, _left, _right, _pow, - _min, _max, _mid, _upper}; + _min, _max, _mid, _upper, _round}; TCodesym TExpression::__gettoken(bool reduct) @@ -695,8 +703,7 @@ TCodesym TExpression::__factor(TCodesym startsym) sym = __gettoken(); if (sym == _lpar) sym = __gettoken(); else break; - if ((sym == _number) || (sym == _variable)) sym = __factor(sym); - else break; + sym = __expression(sym); if (sym == _rpar) sym = __gettoken(); else break; _code.add(startsym); @@ -705,7 +712,7 @@ TCodesym TExpression::__factor(TCodesym startsym) sym = __gettoken(); if (sym == _lpar) sym = __gettoken(); else break; - if ((sym == _string) || (sym == _variable)) sym = __factor(sym); + if ((sym == _string) || (sym == _variable)) sym = __expression(sym); else break; if (sym == _rpar) sym = __gettoken(); else break; @@ -716,15 +723,14 @@ TCodesym TExpression::__factor(TCodesym startsym) case _pow: case _min: case _max: + case _round: sym = __gettoken(); if (sym == _lpar) sym = __gettoken(TRUE); else break; - if ((sym == _number) || (sym == _variable)) sym = __factor(sym); - else break; + sym = __expression(sym); if (sym == _comma) sym = __gettoken(TRUE); else break; - if ((sym == _number) || (sym == _variable)) sym = __factor(sym); - else break; + sym = __expression(sym); if (sym == _rpar) sym = __gettoken(); else break; _code.add(startsym); @@ -733,16 +739,14 @@ TCodesym TExpression::__factor(TCodesym startsym) sym = __gettoken(); if (sym == _lpar) sym = __gettoken(TRUE); else break; - if ((sym == _number) || (sym == _variable)) sym = __factor(sym); + if ((sym == _string) || (sym == _variable)) sym = __expression(sym); else break; if (sym == _comma) sym = __gettoken(TRUE); else break; - if ((sym == _number) || (sym == _variable)) sym = __factor(sym); - else break; + sym = __expression(sym); if (sym == _comma) sym = __gettoken(TRUE); else break; - if ((sym == _number) || (sym == _variable)) sym = __factor(sym); - else break; + sym = __expression(sym); if (sym == _rpar) sym = __gettoken(); else break; _code.add(startsym); diff --git a/include/expr.h b/include/expr.h index d466daafc..8b93f84a0 100755 --- a/include/expr.h +++ b/include/expr.h @@ -22,7 +22,7 @@ enum TCodesym { _invalid, _endsym, _comma, _lpar, _rpar, _variable, _chgs, _and, _or, _not, _equal, _match, _noteq, _lt, _gt, _lteq, _gteq, _sqrt, _sqr, _exp10, _exp, _log10, _log, _sin, _cos, _tan, _left, _right, _pow, _min, _max, _mid, - _upper } ; + _upper, _round } ; // @DES I tipi di espressioni definiti // @T diff --git a/include/mask.cpp b/include/mask.cpp index 1a1703626..8331da09a 100755 --- a/include/mask.cpp +++ b/include/mask.cpp @@ -653,7 +653,7 @@ void TMask::set_focus() if (pw) show_window(pw, FALSE); // hide old page } - set_front_window(f.win()); + f.highlight(); } diff --git a/include/maskfld.cpp b/include/maskfld.cpp index d3c8b08f7..9f862a4fa 100755 --- a/include/maskfld.cpp +++ b/include/maskfld.cpp @@ -1,4 +1,4 @@ -// $Id: maskfld.cpp,v 1.52 1994-11-24 14:01:01 guy Exp $ +// $Id: maskfld.cpp,v 1.53 1994-11-28 11:01:17 guy Exp $ #include #include @@ -774,6 +774,10 @@ bool TMask_field::on_key(KEY key) return TRUE; } +void TMask_field::highlight() const +{ + set_front_window(win()); +} void TMask_field::set_focus() const { diff --git a/include/maskfld.h b/include/maskfld.h index bfaa57433..509a83f48 100755 --- a/include/maskfld.h +++ b/include/maskfld.h @@ -1,4 +1,4 @@ -/* $Id: maskfld.h,v 1.12 1994-11-24 14:01:07 guy Exp $ */ +/* $Id: maskfld.h,v 1.13 1994-11-28 11:01:22 guy Exp $ */ #ifndef __MASKFLD_H #define __MASKFLD_H @@ -101,6 +101,7 @@ protected: virtual void create(WINDOW parent); virtual void destroy(); + virtual void highlight() const; virtual const char* get_window_data() const; virtual void set_window_data(const char* data); diff --git a/include/msksheet.cpp b/include/msksheet.cpp index cb0127d7b..d6a6346bb 100755 --- a/include/msksheet.cpp +++ b/include/msksheet.cpp @@ -47,8 +47,6 @@ protected: TMask_field* cell2field(const XI_OBJ* cell) const; void update_rec(int rec); - void set_focus_cell(int riga, int colonna); - TMask_field* field(short id) const; int rec2row(int rec); @@ -65,6 +63,7 @@ public: int insert(int rec); bool destroy(int rec = -1); + void set_focus_cell(int riga, int colonna); void enable(bool on); void enable_column(int col, bool on = TRUE); void enable_cell(int row, int column, bool on = TRUE); @@ -322,10 +321,12 @@ void TSpreadsheet::update_rec(int rec) } void TSpreadsheet::set_focus_cell(int riga, int colonna) -{ +{ + _firstfocus = FALSE; set_front_window(win()); // It seems necessary to make xi_set_focus work properly - XI_OBJ cell; - XI_MAKE_CELL(&cell, _list, rec2row(riga), colonna); + const int r = rec2row(riga); + XI_OBJ cell; + XI_MAKE_CELL(&cell, _list, r, colonna); xi_set_focus(&cell); } @@ -621,7 +622,7 @@ break; switch (ep->type) { case E_FOCUS: - if (ep->v.active == FALSE) + if (_check_enabled && ep->v.active == FALSE) { const bool ok = (bool)xi_move_focus(_itf); if (!ok) @@ -906,14 +907,17 @@ void TSpreadsheet::enable_cell(int row, int column, bool on) void TSpreadsheet::enable(bool on) { const dword old = xi_get_attrib(_list); - const dword att = on ? (old & ~XI_ATR_READONLY) : (old | XI_ATR_READONLY); + dword att = on ? (old & ~XI_ATR_NAVIGATE) : (old | XI_ATR_NAVIGATE); if (old != att) { int num; XI_OBJ** columns = xi_get_member_list(_list, &num); - xi_move_focus(_itf); // Set focus to interface + xi_move_focus(_itf); // Set focus to interface + + att = on ? (att | XI_ATR_TABWRAP) : (att & ~XI_ATR_TABWRAP); xi_set_attrib(_list, att); + for (int col = 1; col < num; col++) { XI_OBJ* column = columns[col]; @@ -1164,13 +1168,11 @@ void TSheet_field::force_update(int r) #endif } - int TSheet_field::items() const { return (int)_sheet->items(); } - int TSheet_field::selected() const { return _sheet->selected(); @@ -1181,6 +1183,15 @@ void TSheet_field::set_notify(SPREADSHEET_NOTIFY n) _sheet->set_notify(n); } +void TSheet_field::highlight() const +{ +#if XVT_OS == XVT_OS_WIN + if (items()) + _sheet->set_focus_cell(0, 1); +#else + TMask_field::highlight(); +#endif +} void TSheet_field::enable(bool on) { diff --git a/include/msksheet.h b/include/msksheet.h index 7b6598b6c..e7533445c 100755 --- a/include/msksheet.h +++ b/include/msksheet.h @@ -24,6 +24,7 @@ protected: virtual bool parse_item(TScanner& scanner); virtual void create(WINDOW parent); + virtual void highlight() const; virtual void exchange(bool show_value, const real& n); public: diff --git a/include/xvtility.h b/include/xvtility.h index 97c730a03..f69082874 100755 --- a/include/xvtility.h +++ b/include/xvtility.h @@ -19,52 +19,56 @@ RCT& resize_rect(short x, short y, short dx, short dy, WIN_TYPE wt, WINDOW paren void xvt_draw_rect(WINDOW w, const RCT& r, COLOR c1, COLOR c2, short depth = 1); -WINDOW xvt_create_window(WIN_TYPE wt, - short x, short y, short dx, short dy, - const char* caption, WINDOW parent, - long flags, - EVENT_HANDLER eh, - long app_data - ); +WINDOW xvt_create_window +( + WIN_TYPE wt, + short x, short y, short dx, short dy, + const char* caption, WINDOW parent, + long flags, + EVENT_HANDLER eh, + long app_data + ); - WINDOW xvt_create_control(WIN_TYPE wt, - short x, short y, short dx, short dy, - const char* caption, - WINDOW parent, - long flags, - long app_data, - int id - ); + WINDOW xvt_create_control + ( + WIN_TYPE wt, + short x, short y, short dx, short dy, + const char* caption, + WINDOW parent, + long flags, + long app_data, + int id + ); - WINDOW xvt_create_statbar(); - void xvt_statbar_set(const char* text, bool def = FALSE); - void xvt_statbar_refresh(); + WINDOW xvt_create_statbar(); + void xvt_statbar_set(const char* text, bool def = FALSE); + void xvt_statbar_refresh(); - void beep(); - void do_events(); - void customize_controls(bool on); - KEY e_char_to_key(const EVENT* ep); - void dispatch_e_char(WINDOW win, KEY key); - void dispatch_e_scroll(WINDOW win, KEY key); + void beep(); + void do_events(); + void customize_controls(bool on); + KEY e_char_to_key(const EVENT* ep); + void dispatch_e_char(WINDOW win, KEY key); + void dispatch_e_scroll(WINDOW win, KEY key); - void xvt_set_font(WINDOW win, int family, int style, int dim = 0); - void xvt_set_front_control(WINDOW win); - const char* xvt_get_title(WINDOW win); - void xvt_enable_control(WINDOW win, bool on); - void xvt_check_box(WINDOW win, bool on); - bool xvt_get_checked_state(WINDOW win); - void xvt_check_radio_button(WINDOW win, const WINDOW* ctls, int count); - int xvt_get_checked_radio(const WINDOW* ctls, int count); - void xvt_change_page_tags(WINDOW pag, bool on, WINDOW tag, byte p); + void xvt_set_font(WINDOW win, int family, int style, int dim = 0); + void xvt_set_front_control(WINDOW win); + const char* xvt_get_title(WINDOW win); + void xvt_enable_control(WINDOW win, bool on); + void xvt_check_box(WINDOW win, bool on); + bool xvt_get_checked_state(WINDOW win); + void xvt_check_radio_button(WINDOW win, const WINDOW* ctls, int count); + int xvt_get_checked_radio(const WINDOW* ctls, int count); + void xvt_change_page_tags(WINDOW pag, bool on, WINDOW tag, byte p); - bool xvt_test_menu_tag(MENU_TAG tag); + bool xvt_test_menu_tag(MENU_TAG tag); - COLOR trans_color(char c); - PAT_STYLE trans_brush(char p); - PEN_STYLE trans_pen (char p); + COLOR trans_color(char c); + PAT_STYLE trans_brush(char p); + PEN_STYLE trans_pen (char p); - extern short CHARX, CHARY, BASEY, ROWY; + extern short CHARX, CHARY, BASEY, ROWY; - /* @END */ + /* @END */ #endif