tree.cpp Aggiunta possibilita' di non disegnare le foglie
utility.cpp Migliorata leggibilita' delle funzioni encode/decode viswin.* Derivata la TViswin da TField_window, non piu' da TScroll_window window.* Reso pubblico il metodo parent() usato ora da TWindowed_field git-svn-id: svn://10.65.10.50/trunk@6187 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
d38dca6338
commit
f464012520
@ -1,5 +1,3 @@
|
|||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include <colors.h>
|
#include <colors.h>
|
||||||
#include <tree.h>
|
#include <tree.h>
|
||||||
#include <urldefid.h>
|
#include <urldefid.h>
|
||||||
@ -672,11 +670,9 @@ bool TString_tree::get_description(TString& str) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// TTree_window
|
// TNode_info
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include <maskfld.h>
|
|
||||||
|
|
||||||
class TNode_info : public TSortable
|
class TNode_info : public TSortable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -757,11 +753,17 @@ int TNode_info_array::find(const TNode_info& ni) const
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
class TTree_window : public TScroll_window
|
|
||||||
{
|
|
||||||
TTree_field* _owner;
|
|
||||||
TTree* _tree;
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TTree_window
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <maskfld.h>
|
||||||
|
|
||||||
|
class TTree_window : public TField_window
|
||||||
|
{
|
||||||
|
TTree* _tree;
|
||||||
|
bool _hide_leaves;
|
||||||
long _first_line; // Prima riga disegnata
|
long _first_line; // Prima riga disegnata
|
||||||
TNode_info_array _node_info;
|
TNode_info_array _node_info;
|
||||||
TNode_info _curr_info; // Nodo attualmente selezionato
|
TNode_info _curr_info; // Nodo attualmente selezionato
|
||||||
@ -781,6 +783,7 @@ protected: // Internal use
|
|||||||
public:
|
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; }
|
||||||
|
|
||||||
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);
|
||||||
@ -913,7 +916,8 @@ void TTree_window::draw_plus_minus()
|
|||||||
|
|
||||||
void TTree_window::update()
|
void TTree_window::update()
|
||||||
{
|
{
|
||||||
xvt_dwin_clear(win(), NORMAL_BACK_COLOR);
|
TField_window::update();
|
||||||
|
|
||||||
if (_tree == NULL)
|
if (_tree == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -947,7 +951,9 @@ void TTree_window::update()
|
|||||||
|
|
||||||
_node_info.reset();
|
_node_info.reset();
|
||||||
|
|
||||||
const word flags = SCAN_IGNORING_UNEXPANDED | SCAN_PRE_ORDER | SCAN_IN_ORDER;
|
word flags = SCAN_PRE_ORDER | SCAN_IN_ORDER | SCAN_IGNORING_UNEXPANDED;
|
||||||
|
if (_hide_leaves) flags |= SCAN_IGNORING_LEAVES;
|
||||||
|
|
||||||
_tree->scan_depth_first(callback_draw_node, &ui, flags);
|
_tree->scan_depth_first(callback_draw_node, &ui, flags);
|
||||||
while (ui._y < ui._lasty)
|
while (ui._y < ui._lasty)
|
||||||
{
|
{
|
||||||
@ -1042,14 +1048,14 @@ bool TTree_window::on_key(KEY key)
|
|||||||
if (ok && _curr_info != ni)
|
if (ok && _curr_info != ni)
|
||||||
{
|
{
|
||||||
_tree->curr_id(_curr_info._id);
|
_tree->curr_id(_curr_info._id);
|
||||||
_owner->on_key(K_SPACE);
|
owner().on_key(K_SPACE);
|
||||||
if (!scroll)
|
if (!scroll)
|
||||||
force_update();
|
force_update();
|
||||||
}
|
}
|
||||||
if (!scroll)
|
if (!scroll)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
return TScroll_window::on_key(key);
|
return TField_window::on_key(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TTree_window::handler(WINDOW win, EVENT* ep)
|
void TTree_window::handler(WINDOW win, EVENT* ep)
|
||||||
@ -1074,11 +1080,11 @@ void TTree_window::handler(WINDOW win, EVENT* ep)
|
|||||||
else
|
else
|
||||||
ok = _tree->expand();
|
ok = _tree->expand();
|
||||||
if (ok)
|
if (ok)
|
||||||
_owner->on_key(K_CTRL + K_SPACE);
|
owner().on_key(K_CTRL + K_SPACE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_owner->on_key(K_SPACE);
|
owner().on_key(K_SPACE);
|
||||||
}
|
}
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
@ -1089,22 +1095,15 @@ void TTree_window::handler(WINDOW win, EVENT* ep)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
TScroll_window::handler(win, ep);
|
TField_window::handler(win, ep);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TTree_window::TTree_window(int x, int y, int dx, int dy,
|
TTree_window::TTree_window(int x, int y, int dx, int dy,
|
||||||
WINDOW parent, TTree_field* owner)
|
WINDOW parent, TTree_field* owner)
|
||||||
: _owner(owner), _tree(NULL)
|
: TField_window(x, y, dx, dy, parent, owner), _tree(NULL), _hide_leaves(FALSE)
|
||||||
{
|
{
|
||||||
create(x, y, dx, dy, "", WSF_HSCROLL | WSF_VSCROLL, W_PLAIN, parent);
|
|
||||||
set_font();
|
|
||||||
activate(owner->enabled());
|
|
||||||
if (owner->shown())
|
|
||||||
open();
|
|
||||||
else
|
|
||||||
close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -1135,10 +1134,12 @@ void TTree_field::set_tree(TTree* tree)
|
|||||||
tree_win().set_tree(tree);
|
tree_win().set_tree(tree);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TTree_field::create(WINDOW parent)
|
void TTree_field::hide_leaves(bool yes)
|
||||||
{
|
{
|
||||||
TWindowed_field::create(parent);
|
tree_win().hide_leaves(yes);
|
||||||
set_win(new TTree_window(_ctl_data._x, _ctl_data._y,
|
}
|
||||||
_ctl_data._width, _ctl_data._size,
|
|
||||||
parent, this));
|
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);
|
||||||
}
|
}
|
||||||
|
@ -429,7 +429,7 @@ const char *esc(
|
|||||||
return(__tmp_string);
|
return(__tmp_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
HIDDEN const char * const key = "QSECOFR-";
|
HIDDEN const char * const encryption_key = "QSECOFR-";
|
||||||
|
|
||||||
// @doc EXTERNAL
|
// @doc EXTERNAL
|
||||||
|
|
||||||
@ -442,7 +442,7 @@ const char * encode(
|
|||||||
// @xref <f decode>
|
// @xref <f decode>
|
||||||
{
|
{
|
||||||
for (int i = 0; data[i]; i++)
|
for (int i = 0; data[i]; i++)
|
||||||
__tmp_string[i] = data[i] + (i < 8 ? key[i] : data[i - 8]);
|
__tmp_string[i] = data[i] + (i < 8 ? encryption_key[i] : data[i - 8]);
|
||||||
__tmp_string[i] = '\0';
|
__tmp_string[i] = '\0';
|
||||||
return __tmp_string;
|
return __tmp_string;
|
||||||
}
|
}
|
||||||
@ -458,7 +458,7 @@ const char * decode(
|
|||||||
// @xref <f encode>
|
// @xref <f encode>
|
||||||
{
|
{
|
||||||
for (int i = 0; data[i]; i++)
|
for (int i = 0; data[i]; i++)
|
||||||
__tmp_string[i] = data[i] - (i < 8 ? key[i] : __tmp_string[i - 8]);
|
__tmp_string[i] = data[i] - (i < 8 ? encryption_key[i] : __tmp_string[i - 8]);
|
||||||
__tmp_string[i] = '\0';
|
__tmp_string[i] = '\0';
|
||||||
return __tmp_string;
|
return __tmp_string;
|
||||||
}
|
}
|
||||||
|
@ -1187,6 +1187,9 @@ void TViswin::update ()
|
|||||||
// }
|
// }
|
||||||
if (_need_update)
|
if (_need_update)
|
||||||
{
|
{
|
||||||
|
if (!_toplevel)
|
||||||
|
TField_window::update();
|
||||||
|
|
||||||
check_link();
|
check_link();
|
||||||
if (_isselection)
|
if (_isselection)
|
||||||
erase_selection ();
|
erase_selection ();
|
||||||
@ -2463,6 +2466,7 @@ TViswin::TViswin(const char *fname,
|
|||||||
bool rulers, // overridden by config parms
|
bool rulers, // overridden by config parms
|
||||||
WINDOW parent,
|
WINDOW parent,
|
||||||
TBrowsefile_field* brwfld):
|
TBrowsefile_field* brwfld):
|
||||||
|
TField_window(x, y, width, height, parent, brwfld),
|
||||||
_filename (fname), _txt (fname, BUFFERSIZE), _islink (linkbutton), _isedit (editbutton),
|
_filename (fname), _txt (fname, BUFFERSIZE), _islink (linkbutton), _isedit (editbutton),
|
||||||
_isprint (printbutton), _isbar (FALSE), _istimer (FALSE), _iscross (FALSE),
|
_isprint (printbutton), _isbar (FALSE), _istimer (FALSE), _iscross (FALSE),
|
||||||
_isselection (FALSE), _sel_displayed (FALSE), _cross_displayed (FALSE),
|
_isselection (FALSE), _sel_displayed (FALSE), _cross_displayed (FALSE),
|
||||||
@ -2500,34 +2504,30 @@ TViswin::TViswin(const char *fname,
|
|||||||
_rulers = cnf.get_bool("Righelli", NULL, -1,TRUE);
|
_rulers = cnf.get_bool("Righelli", NULL, -1,TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
const int larg = 76;
|
|
||||||
const int alt = 20;
|
|
||||||
|
|
||||||
RCT r;
|
RCT r;
|
||||||
|
|
||||||
xvt_vobj_get_client_rect (parent, &r);
|
xvt_vobj_get_client_rect (parent, &r);
|
||||||
int maxlarg = width == 0 ? (r.right / CHARX - 6) : width;
|
int maxlarg = width == 0 ? (r.right / CHARX - 6) : width;
|
||||||
int maxalt = height == 0 ? (r.bottom / CHARY - 6) : height;
|
int maxalt = height == 0 ? (r.bottom / CHARY - 6) : height;
|
||||||
|
|
||||||
if (_toplevel && larg > maxlarg)
|
if (_toplevel)
|
||||||
maxlarg = larg;
|
{
|
||||||
if (_toplevel && alt > maxalt)
|
const int larg = 76;
|
||||||
maxalt = alt;
|
const int alt = 20;
|
||||||
|
|
||||||
|
if (_toplevel && larg > maxlarg)
|
||||||
|
maxlarg = larg;
|
||||||
|
if (_toplevel && alt > maxalt)
|
||||||
|
maxalt = alt;
|
||||||
|
|
||||||
|
long flags = WSF_HSCROLL | WSF_VSCROLL | WSF_SIZE;
|
||||||
|
create(x, y, maxlarg, maxalt, title, flags, W_DOC, parent,
|
||||||
|
_toplevel ? VISWIN_BAR : 0);
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
_modules.add(new TImage(BMP_MODULE1 + i), i);
|
_modules.add(new TImage(BMP_MODULE1 + i), i);
|
||||||
_modules.add(new TImage(BMP_MODULE), i);
|
_modules.add(new TImage(BMP_MODULE), i);
|
||||||
|
|
||||||
long flags = WSF_HSCROLL | WSF_VSCROLL;
|
|
||||||
if (_toplevel)
|
|
||||||
{
|
|
||||||
flags |= WSF_SIZE /* | WSF_CLOSE */;
|
|
||||||
}
|
|
||||||
|
|
||||||
WIN_TYPE rt = _toplevel ? W_DOC : W_PLAIN;
|
|
||||||
create(x, y, maxlarg, maxalt, title, flags, rt, parent,
|
|
||||||
_toplevel ? VISWIN_BAR : 0);
|
|
||||||
|
|
||||||
attach_interface(win(), BACKGROUND);
|
attach_interface(win(), BACKGROUND);
|
||||||
|
|
||||||
set_opaque_text (TRUE);
|
set_opaque_text (TRUE);
|
||||||
@ -2610,7 +2610,7 @@ TViswin ::~TViswin ()
|
|||||||
|
|
||||||
// Certified 100%
|
// Certified 100%
|
||||||
TBrowsefile_field::TBrowsefile_field(TMask* m)
|
TBrowsefile_field::TBrowsefile_field(TMask* m)
|
||||||
: TOperable_field(m), _viswin(NULL), _m_link(FALSE), _background(36), _lh(NULL)
|
: TWindowed_field(m), _m_link(FALSE), _background(36), _lh(NULL)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
// Certified 100%
|
// Certified 100%
|
||||||
@ -2622,34 +2622,13 @@ word TBrowsefile_field::class_id() const
|
|||||||
// Certified 100%
|
// Certified 100%
|
||||||
TBrowsefile_field::~TBrowsefile_field()
|
TBrowsefile_field::~TBrowsefile_field()
|
||||||
{
|
{
|
||||||
delete _viswin;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TBrowsefile_field::parse_head(TScanner& scanner)
|
|
||||||
{
|
|
||||||
_ctl_data._width = scanner.integer();
|
|
||||||
_ctl_data._size = scanner.integer();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TBrowsefile_field::set_vis_win(TViswin* viswin)
|
|
||||||
{
|
|
||||||
if (_viswin != NULL)
|
|
||||||
delete _viswin;
|
|
||||||
_viswin = viswin;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Certified 100%
|
// Certified 100%
|
||||||
void TBrowsefile_field::create(WINDOW parent)
|
TField_window* TBrowsefile_field::create_window(int x, int y, int dx, int dy, WINDOW parent)
|
||||||
{
|
{
|
||||||
if (_viswin == NULL)
|
return new TViswin(_ctl_data._prompt, _ctl_data._prompt, FALSE, FALSE, FALSE,
|
||||||
_viswin = new TViswin(_ctl_data._prompt, _ctl_data._prompt, FALSE, FALSE, FALSE,
|
x, y, dy, dx, _flags.rightjust ? TRUE : FALSE, parent, this);
|
||||||
_ctl_data._x, _ctl_data._y, _ctl_data._size, _ctl_data._width,
|
|
||||||
_flags.rightjust ? TRUE : FALSE, parent, this);
|
|
||||||
_dlg = _ctl_data._dlg;
|
|
||||||
_parent = parent;
|
|
||||||
WINDOW win = _viswin->win();
|
|
||||||
xvt_vobj_set_enabled(win, enabled());
|
|
||||||
xvt_vobj_set_visible(win, shown());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2685,7 +2664,7 @@ long TBrowsefile_field::set_text(const char* file, const char* line)
|
|||||||
}
|
}
|
||||||
fclose(instr);
|
fclose(instr);
|
||||||
|
|
||||||
_viswin->close_print();
|
vis_win().close_print();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -2715,7 +2694,7 @@ int TBrowsefile_field::enable_link(const char *descr, char fg, char bg)
|
|||||||
b[0] = bg;
|
b[0] = bg;
|
||||||
tt->add(b);
|
tt->add(b);
|
||||||
lnk = _links.add(tt);
|
lnk = _links.add(tt);
|
||||||
_viswin->_txt.set_hotspots(fg, bg);
|
vis_win()._txt.set_hotspots(fg, bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
return lnk;
|
return lnk;
|
||||||
@ -2744,42 +2723,42 @@ void TBrowsefile_field::set_background(const char* bg)
|
|||||||
|
|
||||||
void TBrowsefile_field::add_line(const char* l)
|
void TBrowsefile_field::add_line(const char* l)
|
||||||
{
|
{
|
||||||
_viswin->add_line(l);
|
vis_win().add_line(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TBrowsefile_field::close()
|
void TBrowsefile_field::close()
|
||||||
{
|
{
|
||||||
_viswin->close_print();
|
vis_win().close_print();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TBrowsefile_field::goto_pos(long r, long c)
|
void TBrowsefile_field::goto_pos(long r, long c)
|
||||||
{
|
{
|
||||||
_viswin->goto_pos(r,c,TRUE);
|
vis_win().goto_pos(r,c,TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TBrowsefile_field::goto_top()
|
void TBrowsefile_field::goto_top()
|
||||||
{
|
{
|
||||||
_viswin->goto_top();
|
vis_win().goto_top();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TBrowsefile_field::goto_end()
|
void TBrowsefile_field::goto_end()
|
||||||
{
|
{
|
||||||
_viswin->goto_end();
|
vis_win().goto_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TBrowsefile_field::refresh()
|
void TBrowsefile_field::refresh()
|
||||||
{
|
{
|
||||||
_viswin->refresh();
|
vis_win().refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* TBrowsefile_field::get_text(long line, int column, int len)
|
const char* TBrowsefile_field::get_text(long line, int column, int len)
|
||||||
{
|
{
|
||||||
return _viswin->_txt.line(line,(long)column, len);
|
return vis_win()._txt.line(line,(long)column, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
long TBrowsefile_field::lines()
|
long TBrowsefile_field::lines()
|
||||||
{
|
{
|
||||||
return _viswin->_txt.lines();
|
return vis_win()._txt.lines();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
class TPushbutton_control;
|
class TPushbutton_control;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __WINDOW_H
|
#ifndef __MASK_H
|
||||||
#include <window.h>
|
#include <mask.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __TEXTFILE_H
|
#ifndef __TEXTFILE_H
|
||||||
@ -20,7 +20,7 @@ class TBrowsefile_field;
|
|||||||
// @class TViswin | Classe per la gestione della finestra video di anteprima di stampa
|
// @class TViswin | Classe per la gestione della finestra video di anteprima di stampa
|
||||||
//
|
//
|
||||||
// @base public | TScroll_window
|
// @base public | TScroll_window
|
||||||
class TViswin : public TScroll_window
|
class TViswin : public TField_window
|
||||||
|
|
||||||
// @author:(INTERNAL) Villa
|
// @author:(INTERNAL) Villa
|
||||||
|
|
||||||
|
@ -1056,7 +1056,6 @@ void TWindow::line(short x0, short y0, short x1, short y1)
|
|||||||
PNT f = log2dev(x0,y0);
|
PNT f = log2dev(x0,y0);
|
||||||
PNT t = log2dev(x1,y1);
|
PNT t = log2dev(x1,y1);
|
||||||
|
|
||||||
#if XVT_OS == XVT_OS_WIN || XVT_OS == XVT_OS_WIN32
|
|
||||||
if (!_pixmap)
|
if (!_pixmap)
|
||||||
{
|
{
|
||||||
if (f.h == 0) f.h = -CHARX; else f.h += CHARX>>1;
|
if (f.h == 0) f.h = -CHARX; else f.h += CHARX>>1;
|
||||||
@ -1064,7 +1063,6 @@ void TWindow::line(short x0, short y0, short x1, short y1)
|
|||||||
if (t.h == 0) t.h = -CHARX; else t.h += CHARX>>1;
|
if (t.h == 0) t.h = -CHARX; else t.h += CHARX>>1;
|
||||||
if (t.v == 0) t.v = -CHARY; else t.v += CHARY>>1;
|
if (t.v == 0) t.v = -CHARY; else t.v += CHARY>>1;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
xvt_dwin_draw_set_pos(win(), f);
|
xvt_dwin_draw_set_pos(win(), f);
|
||||||
xvt_dwin_draw_line(win(), t);
|
xvt_dwin_draw_line(win(), t);
|
||||||
|
@ -193,9 +193,6 @@ protected:
|
|||||||
void set_modal(bool m)
|
void set_modal(bool m)
|
||||||
{ _modal = m; }
|
{ _modal = m; }
|
||||||
|
|
||||||
// @cmember Ritorna l'handler della finestra padre
|
|
||||||
WINDOW parent() const;
|
|
||||||
|
|
||||||
// @cmember Fa' l'update della finstra
|
// @cmember Fa' l'update della finstra
|
||||||
virtual void update()
|
virtual void update()
|
||||||
{}
|
{}
|
||||||
@ -221,6 +218,8 @@ public:
|
|||||||
// @cmember Ritorna il descrittore della finestra
|
// @cmember Ritorna il descrittore della finestra
|
||||||
virtual WINDOW win() const
|
virtual WINDOW win() const
|
||||||
{ return _win; }
|
{ return _win; }
|
||||||
|
// @cmember Ritorna il descrittore della finestra padre
|
||||||
|
WINDOW parent() const;
|
||||||
|
|
||||||
// @cmember Gestisce la pressione del tasto
|
// @cmember Gestisce la pressione del tasto
|
||||||
virtual bool on_key(KEY)
|
virtual bool on_key(KEY)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user