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:
guy 1998-02-13 13:59:33 +00:00
parent d38dca6338
commit f464012520
6 changed files with 74 additions and 97 deletions

View File

@ -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);
} }

View File

@ -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;
} }

View File

@ -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();
} }

View File

@ -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

View File

@ -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);

View File

@ -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)