tree.cpp Migliorata gestione alberi e campi relativi
utility.h Aggiunta forward declaration di TFilename validate.cpp Aggiunto validate per filtrare solo le ditte valide window.h Nessuna differenza rilevata da diff xvtility.cpp Migliorata generazione rettangoli per supportare i campi di tipo TWindowed_field git-svn-id: svn://10.65.10.50/trunk@6589 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
b86fbf2f4c
commit
4fecfd7f1f
@ -16,10 +16,8 @@ HIDDEN bool callback_compare_node(TTree& node, void* jolly, word when)
|
|||||||
|
|
||||||
HIDDEN bool callback_expand_node(TTree& node, void* jolly, word when)
|
HIDDEN bool callback_expand_node(TTree& node, void* jolly, word when)
|
||||||
{
|
{
|
||||||
if (jolly)
|
if (when == SCAN_PRE_ORDER)
|
||||||
node.expand();
|
node.expand();
|
||||||
else
|
|
||||||
node.shrink();
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,10 +248,17 @@ bool TTree::expand_all()
|
|||||||
{
|
{
|
||||||
bool ok = goto_root();
|
bool ok = goto_root();
|
||||||
if (ok)
|
if (ok)
|
||||||
scan_breadth_first(callback_expand_node, (void*)this);
|
scan_breadth_first(callback_expand_node, NULL);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TTree::shrink_all()
|
||||||
|
{
|
||||||
|
_expanded.destroy();
|
||||||
|
return goto_root();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
TImage* TTree::get_res_image(short bmp_id) const
|
TImage* TTree::get_res_image(short bmp_id) const
|
||||||
{
|
{
|
||||||
TImage* bmp = (TImage*)_image.objptr(bmp_id);
|
TImage* bmp = (TImage*)_image.objptr(bmp_id);
|
||||||
@ -706,12 +711,12 @@ public:
|
|||||||
const TNode_info& operator =(const TNode_info& ni)
|
const TNode_info& operator =(const TNode_info& ni)
|
||||||
{
|
{
|
||||||
_valid = ni._valid;
|
_valid = ni._valid;
|
||||||
_id = ni._id;
|
|
||||||
_startx = ni._startx;
|
|
||||||
_endx = ni._endx;
|
|
||||||
_plusx = ni._plusx;
|
|
||||||
_expanded = ni._expanded;
|
_expanded = ni._expanded;
|
||||||
_expandable = ni._expandable;
|
_expandable = ni._expandable;
|
||||||
|
_id = ni._id;
|
||||||
|
_plusx = ni._plusx;
|
||||||
|
_startx = ni._startx;
|
||||||
|
_endx = ni._endx;
|
||||||
return ni;
|
return ni;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -725,6 +730,7 @@ public:
|
|||||||
void reset() { _valid = FALSE; }
|
void reset() { _valid = FALSE; }
|
||||||
|
|
||||||
TNode_info() : _valid(FALSE) { }
|
TNode_info() : _valid(FALSE) { }
|
||||||
|
virtual ~TNode_info() { }
|
||||||
};
|
};
|
||||||
|
|
||||||
class TNode_info_array : public TObject
|
class TNode_info_array : public TObject
|
||||||
@ -807,6 +813,7 @@ public:
|
|||||||
TTree* tree() const { return _tree; }
|
TTree* tree() const { return _tree; }
|
||||||
void set_tree(TTree* tree) { _tree = tree; _first_line = -1; }
|
void set_tree(TTree* tree) { _tree = tree; _first_line = -1; }
|
||||||
void hide_leaves(bool yes) { _hide_leaves = yes; }
|
void hide_leaves(bool yes) { _hide_leaves = yes; }
|
||||||
|
bool select_current();
|
||||||
|
|
||||||
TTree_window(int x, int y, int dx, int dy,
|
TTree_window(int x, int y, int dx, int dy,
|
||||||
WINDOW parent, TTree_field* owner);
|
WINDOW parent, TTree_field* owner);
|
||||||
@ -832,7 +839,7 @@ bool TTree_window::callback_draw_node(TTree& node, void* jolly, word when)
|
|||||||
|
|
||||||
if (when == SCAN_PRE_ORDER)
|
if (when == SCAN_PRE_ORDER)
|
||||||
{
|
{
|
||||||
if (ui->_y >= ui->_firsty && ui->_y < ui->_lasty)
|
if (ui->_y >= ui->_firsty && ui->_y <= ui->_lasty)
|
||||||
{
|
{
|
||||||
node.curr_id(ui->_str);
|
node.curr_id(ui->_str);
|
||||||
const bool is_selected = ui->_str == ui->_curr_info->_id;
|
const bool is_selected = ui->_str == ui->_curr_info->_id;
|
||||||
@ -903,6 +910,8 @@ bool TTree_window::callback_draw_node(TTree& node, void* jolly, word when)
|
|||||||
if (when == SCAN_IN_ORDER)
|
if (when == SCAN_IN_ORDER)
|
||||||
{
|
{
|
||||||
ui->_x -= TABX;
|
ui->_x -= TABX;
|
||||||
|
if (ui->_y > ui->_lasty)
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -1023,6 +1032,13 @@ void TTree_window::update()
|
|||||||
_first_line = ui._firsty;
|
_first_line = ui._firsty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TTree_window::select_current()
|
||||||
|
{
|
||||||
|
if (_tree)
|
||||||
|
_tree->curr_id(_curr_info._id);
|
||||||
|
return _tree != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int TTree_window::info2index(const TNode_info& info) const
|
int TTree_window::info2index(const TNode_info& info) const
|
||||||
{
|
{
|
||||||
return _node_info.find(info);
|
return _node_info.find(info);
|
||||||
@ -1084,6 +1100,24 @@ bool TTree_window::on_key(KEY key)
|
|||||||
if (_tree == NULL)
|
if (_tree == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
if (key == K_RIGHT)
|
||||||
|
{
|
||||||
|
if (_tree->goto_node(_curr_info._id) &&
|
||||||
|
!_tree->expanded() && _tree->has_son())
|
||||||
|
key = K_ENTER;
|
||||||
|
else
|
||||||
|
key = K_DOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key == K_LEFT)
|
||||||
|
{
|
||||||
|
if (_tree->goto_node(_curr_info._id) &&
|
||||||
|
_tree->expanded())
|
||||||
|
key = K_ENTER;
|
||||||
|
else
|
||||||
|
key = K_UP;
|
||||||
|
}
|
||||||
|
|
||||||
if (key == K_UP || key == K_DOWN)
|
if (key == K_UP || key == K_DOWN)
|
||||||
{
|
{
|
||||||
int index = info2index(_curr_info);
|
int index = info2index(_curr_info);
|
||||||
@ -1128,7 +1162,11 @@ bool TTree_window::on_key(KEY key)
|
|||||||
else
|
else
|
||||||
ok = _tree->expand();
|
ok = _tree->expand();
|
||||||
if (ok)
|
if (ok)
|
||||||
|
{
|
||||||
force_update();
|
force_update();
|
||||||
|
do_events();
|
||||||
|
}
|
||||||
|
owner().on_key(K_CTRL + K_SPACE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1161,7 +1199,10 @@ void TTree_window::handler(WINDOW win, EVENT* ep)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
owner().on_key(K_SPACE);
|
KEY key = K_SPACE;
|
||||||
|
if (ep->type == E_MOUSE_DBL)
|
||||||
|
key += K_CTRL;
|
||||||
|
owner().on_key(key);
|
||||||
}
|
}
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
@ -1209,6 +1250,7 @@ TTree* TTree_field::tree() const
|
|||||||
void TTree_field::set_tree(TTree* tree)
|
void TTree_field::set_tree(TTree* tree)
|
||||||
{
|
{
|
||||||
tree_win().set_tree(tree);
|
tree_win().set_tree(tree);
|
||||||
|
tree_win().select_current();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TTree_field::hide_leaves(bool yes)
|
void TTree_field::hide_leaves(bool yes)
|
||||||
@ -1216,6 +1258,11 @@ void TTree_field::hide_leaves(bool yes)
|
|||||||
tree_win().hide_leaves(yes);
|
tree_win().hide_leaves(yes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TTree_field::select_current()
|
||||||
|
{
|
||||||
|
return tree_win().select_current();
|
||||||
|
}
|
||||||
|
|
||||||
TField_window* TTree_field::create_window(int x, int y, int dx, int dy, WINDOW parent)
|
TField_window* TTree_field::create_window(int x, int y, int dx, int dy, WINDOW parent)
|
||||||
{
|
{
|
||||||
return new TTree_window(x, y, dx, dy, parent, this);
|
return new TTree_window(x, y, dx, dy, parent, this);
|
||||||
|
@ -55,13 +55,14 @@ public:
|
|||||||
virtual bool kill_node() { return FALSE; }
|
virtual bool kill_node() { return FALSE; }
|
||||||
|
|
||||||
virtual void curr_id(TString& id) const { node2id(curr_node(), id); }
|
virtual void curr_id(TString& id) const { node2id(curr_node(), id); }
|
||||||
|
|
||||||
virtual bool get_description(TString& desc) const { curr_id(desc); return desc.not_empty(); }
|
virtual bool get_description(TString& desc) const { curr_id(desc); return desc.not_empty(); }
|
||||||
|
|
||||||
virtual bool expand();
|
virtual bool expand();
|
||||||
virtual bool shrink();
|
virtual bool shrink();
|
||||||
virtual bool expanded() const;
|
virtual bool expanded() const;
|
||||||
virtual bool shrunk() const { return !expanded(); }
|
virtual bool shrunk() const { return !expanded(); }
|
||||||
virtual bool expand_all();
|
virtual bool expand_all();
|
||||||
|
virtual bool shrink_all();
|
||||||
virtual TImage* image(bool selected) const;
|
virtual TImage* image(bool selected) const;
|
||||||
|
|
||||||
virtual bool scan_depth_first(NODE_HANDLER nh, void* jolly, word flags = SCAN_PRE_ORDER);
|
virtual bool scan_depth_first(NODE_HANDLER nh, void* jolly, word flags = SCAN_PRE_ORDER);
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
class TString_array;
|
class TString_array;
|
||||||
|
class TFilename;
|
||||||
|
|
||||||
char* format (const char* fmt, ...);
|
char* format (const char* fmt, ...);
|
||||||
const char* cmd2name(const char* argv0, const char* argv1 = "");
|
const char* cmd2name(const char* argv0, const char* argv1 = "");
|
||||||
|
@ -772,9 +772,19 @@ HIDDEN bool _ora_val(TMask_field& f, KEY key)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HIDDEN bool _firm_val(TMask_field& f, KEY key)
|
||||||
|
{
|
||||||
|
bool ok = TRUE;
|
||||||
|
if (f.to_check(key))
|
||||||
|
{
|
||||||
|
const long firm = atol(f.get());
|
||||||
|
if (firm > 0 && !prefix().exist(firm))
|
||||||
|
ok = f.error_box("Non esistono gli archivi della ditta %ld.", firm);
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MAX_FUNC 25
|
||||||
#define MAX_FUNC 24
|
|
||||||
|
|
||||||
HIDDEN VAL_FUNC _global_val_func[MAX_FUNC] =
|
HIDDEN VAL_FUNC _global_val_func[MAX_FUNC] =
|
||||||
{
|
{
|
||||||
@ -802,7 +812,7 @@ HIDDEN VAL_FUNC _global_val_func[MAX_FUNC] =
|
|||||||
_not_empty_chkfld_val,
|
_not_empty_chkfld_val,
|
||||||
_ora_val,
|
_ora_val,
|
||||||
_sconto_val,
|
_sconto_val,
|
||||||
|
_firm_val,
|
||||||
};
|
};
|
||||||
|
|
||||||
// @doc INTERNAL
|
// @doc INTERNAL
|
||||||
|
@ -143,14 +143,12 @@ TVariable_rectype::TVariable_rectype(const TBaseisamfile* i)
|
|||||||
|
|
||||||
TVariable_rectype::TVariable_rectype(const TRectype& r)
|
TVariable_rectype::TVariable_rectype(const TRectype& r)
|
||||||
: TRectype(r), _memo_fld_to_load(FALSE)
|
: TRectype(r), _memo_fld_to_load(FALSE)
|
||||||
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TVariable_rectype::TVariable_rectype(const TVariable_rectype& r)
|
TVariable_rectype::TVariable_rectype(const TVariable_rectype& r)
|
||||||
: TRectype((const TRectype &) r), _memo_fld_to_load(FALSE)
|
: TRectype((const TRectype &) r), _memo_fld_to_load(FALSE)
|
||||||
|
|
||||||
{
|
{
|
||||||
_virtual_fields = r._virtual_fields;
|
_virtual_fields = r._virtual_fields;
|
||||||
_memo_fld = r._memo_fld;
|
_memo_fld = r._memo_fld;
|
||||||
@ -208,8 +206,8 @@ void TVariable_rectype::set_memo_fld( const char * fieldname)
|
|||||||
{
|
{
|
||||||
if (fieldname && *fieldname)
|
if (fieldname && *fieldname)
|
||||||
{
|
{
|
||||||
CHECK(exist(fieldname), "Unknown memo field");
|
CHECKS(exist(fieldname), "Unknown memo field", fieldname);
|
||||||
CHECK(type(fieldname) == _memofld, "Incorrect field type");
|
CHECKS(type(fieldname) == _memofld, "Incorrect field type", fieldname);
|
||||||
_memo_fld = fieldname;
|
_memo_fld = fieldname;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -396,14 +396,15 @@ protected:
|
|||||||
|
|
||||||
// @cmember Converte le coordinate logiche (caratteri) in coordinate fisiche (pixel)
|
// @cmember Converte le coordinate logiche (caratteri) in coordinate fisiche (pixel)
|
||||||
virtual PNT log2dev(long x, long y) const;
|
virtual PNT log2dev(long x, long y) const;
|
||||||
// @cmember Gestice la pressione del tasto
|
|
||||||
virtual bool on_key(KEY key);
|
|
||||||
|
|
||||||
// @access Public Member
|
// @access Public Member
|
||||||
public:
|
public:
|
||||||
// @cmember Costruttore
|
// @cmember Costruttore
|
||||||
TScroll_window();
|
TScroll_window();
|
||||||
|
|
||||||
|
// @cmember Gestice la pressione del tasto
|
||||||
|
virtual bool on_key(KEY key);
|
||||||
|
|
||||||
// @cmember Gestisce l'handler della finestra (vedi <mf TWindow::handler>)
|
// @cmember Gestisce l'handler della finestra (vedi <mf TWindow::handler>)
|
||||||
virtual void handler(WINDOW win, EVENT* ep);
|
virtual void handler(WINDOW win, EVENT* ep);
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ RCT& resize_rect(
|
|||||||
if (parent != m->toolwin())
|
if (parent != m->toolwin())
|
||||||
y++;
|
y++;
|
||||||
}
|
}
|
||||||
if (x > 0 || (wt != WO_TE && x == 0))
|
if (x > 0 || (wt != WO_TE && wt != W_PLAIN && x == 0))
|
||||||
{
|
{
|
||||||
RCT pc; xvt_vobj_get_client_rect(parent, &pc); // Get parent window size
|
RCT pc; xvt_vobj_get_client_rect(parent, &pc); // Get parent window size
|
||||||
const int width = pc.right;
|
const int width = pc.right;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user