Aggiunti bottoni agli sheet

git-svn-id: svn://10.65.10.50/trunk@752 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1994-12-12 15:52:30 +00:00
parent 433135c22a
commit 386624b650
4 changed files with 104 additions and 33 deletions

View File

@ -45,16 +45,17 @@ ACCEL MENU_FILE "f" ALT
XI_CURSOR_HAND cursor DISCARDABLE f:\p.due\bmp\hand.cur
XI_CURSOR_VRESIZE cursor DISCARDABLE f:\p.due\bmp\vresize.cur
COMBO_ICON icon DISCARDABLE f:\p.due\bmp\combo.ico
ICO_SEARCH icon DISCARDABLE f:\p.due\bmp\search.ico
BMP_OK bitmap DISCARDABLE f:\p.due\bmp\ok.bmp
BMP_CANCEL bitmap DISCARDABLE f:\p.due\bmp\cancel.bmp
BMP_QUIT bitmap DISCARDABLE f:\p.due\bmp\quit.bmp
BMP_QUITDN bitmap DISCARDABLE f:\p.due\bmp\quitdn.bmp
BMP_SELECT bitmap DISCARDABLE f:\p.due\bmp\select.bmp
BMP_FIRSTREC bitmap DISCARDABLE f:\p.due\bmp\firstrec.bmp
BMP_PREVREC bitmap DISCARDABLE f:\p.due\bmp\prevrec.bmp
BMP_STOPREC bitmap DISCARDABLE f:\p.due\bmp\stoprec.bmp
BMP_NEXTREC bitmap DISCARDABLE f:\p.due\bmp\nextrec.bmp
BMP_LASTREC bitmap DISCARDABLE f:\p.due\bmp\lastrec.bmp
// BMP_FIRSTREC bitmap DISCARDABLE f:\p.due\bmp\firstrec.bmp
// BMP_PREVREC bitmap DISCARDABLE f:\p.due\bmp\prevrec.bmp
// BMP_STOPREC bitmap DISCARDABLE f:\p.due\bmp\stoprec.bmp
// BMP_NEXTREC bitmap DISCARDABLE f:\p.due\bmp\nextrec.bmp
// BMP_LASTREC bitmap DISCARDABLE f:\p.due\bmp\lastrec.bmp
BMP_SAVEREC bitmap DISCARDABLE f:\p.due\bmp\saverec.bmp
BMP_SAVERECDN bitmap DISCARDABLE f:\p.due\bmp\saverecd.bmp
BMP_NEWREC bitmap DISCARDABLE f:\p.due\bmp\newrec.bmp

View File

@ -10,6 +10,12 @@ const short FIRST_FIELD = 101;
#include <xil.h>
#include <colors.h>
extern "C"
{
#include <cpb.h>
}
///////////////////////////////////////////////////////////
// TSpreadsheet
///////////////////////////////////////////////////////////
@ -40,6 +46,8 @@ class TSpreadsheet : public TWindow
int _cur_row, _cur_col; // Current cell
bool _row_dirty; // Current row changed
bool _check_enabled; // Perform OFF_ROW checks
short _icon;
static void xiev_handler(XI_OBJ *itf, XI_EVENT *xiev);
void init();
@ -47,6 +55,7 @@ class TSpreadsheet : public TWindow
protected:
void list_handler(XI_EVENT *xiev);
TMask_field* col2field(int pos) const;
TMask_field* cell2field(const XI_OBJ* cell) const;
void update_rec(int rec);
TMask_field* field(short id) const;
@ -120,7 +129,7 @@ TSpreadsheet::TSpreadsheet(short x, short y, short dx, short dy,
TSheet_field* o)
: _mask(maskname, maskno), _notify(NULL), _edit_field(NULL),
_owner(o), _cur_row(0), _cur_col(0), _active(TRUE),
_row_dirty(FALSE), _check_enabled(TRUE), _firstfocus(TRUE)
_row_dirty(FALSE), _check_enabled(TRUE), _firstfocus(TRUE), _icon(0)
{
const int NUMBER_WIDTH = 3;
const int MAX_COL = 32;
@ -152,7 +161,7 @@ TSpreadsheet::TSpreadsheet(short x, short y, short dx, short dy,
{
const TString& wi = testa.mid(at+1);
m = atoi(wi);
if (wi[wi.len()-1] == 'F')
if (wi.find('F') >= 0)
{
fixed_columns++;
f_width += m+1;
@ -164,8 +173,8 @@ TSpreadsheet::TSpreadsheet(short x, short y, short dx, short dy,
{
m = testa.len();
v = m+(f->has_query() ? 1 : 0);
}
}
m_width[i] = m+1; // m = number of allowed chars
v_width[i] = v+1; // v = width of column
if (v >= max_width) max_width = v+1;
@ -224,15 +233,36 @@ TSpreadsheet::TSpreadsheet(short x, short y, short dx, short dy,
{
const int cid = FIRST_FIELD+i; // Column & Field ID
const TMask_field* f = field(cid); // Field on mask
const int acqua = f->class_id();
long flags = XI_ATR_EDITMENU | XI_ATR_AUTOSCROLL;
if (f->class_id() == CLASS_REAL_FIELD) flags |= XI_ATR_RJUST;
switch (acqua)
{
case CLASS_REAL_FIELD:
flags |= XI_ATR_RJUST; break;
case CLASS_BUTTON_FIELD:
flags |= XI_ATR_SELECTABLE; break;
default:
break;
}
if (f->active()) flags |= XI_ATR_ENABLED | XI_ATR_FOCUSBORDER | XI_ATR_AUTOSELECT;
else _column_disabled.set(i);
coldef = xi_add_column_def(listdef, cid, flags, cid, v_width[i], m_width[i], (char*)h);
coldef->v.column->heading_platform = TRUE;
coldef->v.column->center_heading = TRUE;
if (acqua == CLASS_BUTTON_FIELD)
{
const TString80 testa(header.get(i));
const int diesis = testa.find('#');
if (diesis > 0)
{
_icon = atoi(testa.mid(diesis+1));
coldef->v.column->icon_x = (v_width[i]*CHARX-16) >> 1;
coldef->v.column->icon_y = (CHARY-16) >> 1;
coldef->v.column->column_platform = TRUE;
}
}
}
RCT itfrct;
@ -291,11 +321,10 @@ int TSpreadsheet::rec2row(int record)
return r;
}
// Retrieves the corresponding field of the mask from a spredsheet cell
TMask_field* TSpreadsheet::cell2field(const XI_OBJ* cell) const
{
const int& pos = cell->v.cell.column;
// Retrieves the corresponding field of the mask from a spredsheet cell
TMask_field* TSpreadsheet::col2field(int pos) const
{
int num;
XI_OBJ** column = xi_get_member_list(_list, &num);
@ -312,6 +341,13 @@ TMask_field* TSpreadsheet::cell2field(const XI_OBJ* cell) const
return good;
}
// Retrieves the corresponding field of the mask from a spredsheet cell
TMask_field* TSpreadsheet::cell2field(const XI_OBJ* cell) const
{
return col2field(cell->v.cell.column);
}
void TSpreadsheet::update_rec(int rec)
{
const int riga = rec2row(rec);
@ -397,6 +433,7 @@ void TSpreadsheet::xiev_handler(XI_OBJ *itf, XI_EVENT *xiev)
void TSpreadsheet::list_handler(XI_EVENT *xiev)
{
static KEY _lastab = K_TAB;
static bool _cell_dirty;
switch (xiev->type)
{
@ -441,20 +478,29 @@ break;
{
const int col = cid - FIRST_FIELD;
TMask_field* f = field(cid);
src = row(rec).get(col); // Set value for cell
if (src && *src && (f->class_id() == CLASS_REAL_FIELD
|| f->class_id() == CLASS_DATE_FIELD))
const int acqua = f->class_id();
if (acqua == CLASS_BUTTON_FIELD)
{
src = f->picture_data(src, FALSE); // Get formatted string
xiev->v.cell_request.icon_rid = _icon;
src = NULL;
}
if (field(cid)->has_query())
else
{
xiev->v.cell_request.button =
xiev->v.cell_request.button_on_focus = TRUE;
src = row(rec).get(col); // Set value for cell
if (src && *src && (acqua == CLASS_REAL_FIELD || acqua == CLASS_DATE_FIELD))
{
src = f->picture_data(src, FALSE); // Get formatted string
}
if (field(cid)->has_query())
{
xiev->v.cell_request.button =
xiev->v.cell_request.button_on_focus = TRUE;
}
if (cell_disabled(rec, col))
xiev->v.cell_request.back_color = MASK_BACK_COLOR;
}
if (cell_disabled(rec, col))
xiev->v.cell_request.back_color = MASK_BACK_COLOR;
}
}
} else src = format("%d", rec+1);
const int len = xiev->v.cell_request.len;
@ -478,15 +524,29 @@ break;
notify(_cur_row, K_SPACE);
_row_dirty = TRUE;
}
_cell_dirty = TRUE;
break;
case XIE_BUTTON:
if (xiev->v.xi_obj->type == XIT_CELL)
{
dispatch_e_char(win(), K_F9);
} else
if (xiev->v.xi_obj->type == XIT_LIST)
else
if (xiev->v.xi_obj->type == XIT_LIST)
insert(-1);
break;
case XIE_SELECT:
if (xiev->v.xi_obj->type == XIT_ROW)
{
if (!_row_dirty)
{
notify(_cur_row, K_SPACE);
_row_dirty = TRUE;
}
TMask_field* f = col2field(xiev->v.select.column);
f->on_hit();
mask2str(_cur_row);
}
xiev->refused = TRUE;
break;
case XIE_DBL_CELL:
{
_check_enabled = FALSE;
@ -551,7 +611,8 @@ break;
xiev->refused = TRUE;
}
else
{
{
set_dirty();
xvt_statbar_refresh();
}
_check_enabled = TRUE;
@ -570,6 +631,7 @@ break;
{
_edit_field = f;
_cur_col = xiev->v.xi_obj->v.cell.column;
_cell_dirty = FALSE;
}
}
break;
@ -577,7 +639,7 @@ break;
if (_edit_field && _check_enabled)
{
_check_enabled = FALSE;
if (_row_dirty)
if (_cell_dirty)
{
TMask_field* c = _edit_field; // Save field, it could turn out to be NULL on error
const char* nuo = c->picture_data(xi_get_text(xiev->v.xi_obj, NULL, -1), TRUE);
@ -645,13 +707,17 @@ break;
if (_check_enabled)
{
_check_enabled = FALSE; // Disable checks
if (!_row_dirty) notify(_cur_row, K_SPACE);
if (!_row_dirty)
{
notify(_cur_row, K_SPACE);
_row_dirty = TRUE;
}
if (_edit_field->on_key(k))
{
mask2str(_cur_row);
_row_dirty = TRUE;
}
else
{
if (k == K_F9)
{
_edit_field = &_mask.fld(_mask.focus_field());
@ -663,6 +729,7 @@ break;
dispatch_e_char(win(), K_F9);
}
}
}
set_focus_cell(_cur_row, _cur_col);
_check_enabled = TRUE; // Enable checks
}

View File

@ -1 +1 @@
#define VERSION 1.16
#define VERSION 1.1

View File

@ -29,6 +29,8 @@
#if XVT_OS == XVT_OS_WIN
#define ICO_SEARCH 109
#define BMP_OK 101
#define BMP_CANCEL 102
#define BMP_SAVEREC 103
@ -63,8 +65,9 @@
#define BMP_NEWRECDN 155
#define BMP_QUITDN 164
#define BMP_SETPRINT 165
#endif
/* @END */
#endif // __URLDEFID_H
#endif