diff --git a/include/stack.cpp b/include/stack.cpp index 4236ff230..ba9da8ea8 100755 --- a/include/stack.cpp +++ b/include/stack.cpp @@ -25,6 +25,12 @@ TObject& TStack::peek(int depth) const return _data[_sp-depth-1]; } +void TStack::destroy() +{ + _data.destroy(); + _sp = 0; +} + bool TStack::destroy_base() { if (_sp > 0) _sp--; diff --git a/include/stack.h b/include/stack.h index d14872c52..1f87ad974 100755 --- a/include/stack.h +++ b/include/stack.h @@ -34,6 +34,8 @@ public: TObject& pop(); // @cmember Ritorna l'oggetto ad una data profondita' nello stack TObject& peek(int depth = 0) const; + // @cmember Distrugge l'intero stack + void destroy(); // @cmember Distrugge l'oggetto alla base dello stack bool destroy_base(); // @cmember Costruttore. Chiama il costruttore di diff --git a/include/strings.cpp b/include/strings.cpp index d0d9440fb..b3f2f9b71 100755 --- a/include/strings.cpp +++ b/include/strings.cpp @@ -118,7 +118,7 @@ void TString::resize( else *s = '\0'; if (_str) - delete [] _str; + delete _str; _str = s; _size = size; @@ -193,7 +193,7 @@ TString::TString() : _str(NULL), _size(0) TString::~TString() { if (_str) - delete [] _str; + delete _str; } char TString::shift(int n) diff --git a/include/strings.h b/include/strings.h index 6c44ba2cd..4e3695095 100755 --- a/include/strings.h +++ b/include/strings.h @@ -317,12 +317,18 @@ public: // @cmember Costruttore TString16(const TString& s) : TFixed_string(_str16, 17) { set(s); } + // @cmember Costruttore + TString16(const TString16& s) : TFixed_string(_str16, 17) + { set(s); } + // @cmember Assegna una stringa + const TString& operator =(const char* s) + { return set(s); } // @cmember Assegna una stringa const TString& operator =(const TString& s) { return set((const char*)s); } // @cmember Assegna una stringa - const TString& operator =(const char* s) - { return set(s); } + const TString& operator =(const TString16& s) + { return set((const char*)s); } // @comm Sono definite anche le classi e per le // stringhe rispettivamente di 80 e 256 caratteri. I class member sono @@ -346,8 +352,10 @@ class TString80 : public TFixed_string public: TString80(const char* s = "") : TFixed_string(_str80, 81) { set(s); } TString80(const TString& s) : TFixed_string(_str80, 81) { set(s); } + TString80(const TString80& s) : TFixed_string(_str80, 81) { set(s); } const TString& operator =(const char* s) { return set(s); } const TString& operator =(const TString& s) { return set((const char*)s); } + const TString& operator =(const TString80& s) { return set((const char*)s); } }; // @doc EXTERNAL @@ -367,8 +375,10 @@ class TString256 : public TFixed_string public: TString256(const char* s = "") : TFixed_string(_str256, 257) { set(s); } TString256(const TString& s) : TFixed_string(_str256, 257) { set(s); } + TString256(const TString256& s) : TFixed_string(_str256, 257) { set(s); } const TString& operator =(const char* s) { return set(s); } const TString& operator =(const TString& s) { return set((const char*)s); } + const TString& operator =(const TString256& s) { return set((const char*)s); } }; // @doc EXTERNAL diff --git a/include/tree.cpp b/include/tree.cpp index e86e79e9e..058451bb3 100755 --- a/include/tree.cpp +++ b/include/tree.cpp @@ -797,10 +797,14 @@ class TTree_window : public TField_window TNode_info_array _node_info; TNode_info _curr_info; // Nodo attualmente selezionato + static int _row_height; + protected: // TWindow virtual void update(); virtual bool on_key(KEY key); virtual void handler(WINDOW win, EVENT* ep); + PNT log2dev(long x, long y) const; + TPoint dev2log(const PNT& p) const; protected: // Internal use static bool callback_draw_node(TTree& node, void* jolly, word); @@ -820,6 +824,10 @@ public: virtual ~TTree_window() { } }; +int TTree_window::_row_height = CHARY+2; + +const int TABX = 3; + struct TUpdate_info { TTree_window* _win; @@ -831,7 +839,40 @@ struct TUpdate_info TNode_info* _curr_info; }; -const int TABX = 3; + +PNT TTree_window::log2dev(long x, long y) const +{ + if (autoscrolling()) + { + if (_pixmap) + { + x -= origin().x * CHARX; + y -= origin().y * _row_height; + } + else + { + x -= origin().x; + y -= origin().y; + } + } + + PNT pnt; pnt.h = (int)x; pnt.v = (int)y; + + if (!_pixmap) + { + pnt.h *= CHARX; + pnt.v *= _row_height; + } + + return pnt; +} + +TPoint TTree_window::dev2log(const PNT& p) const +{ + TPoint pnt(_pixmap ? p.h : p.h/CHARX, _pixmap ? p.v : p.v/_row_height); + return pnt; +} + bool TTree_window::callback_draw_node(TTree& node, void* jolly, word when) { @@ -873,16 +914,16 @@ bool TTree_window::callback_draw_node(TTree& node, void* jolly, word when) ui->_win->set_pen(DISABLED_COLOR); PNT q; - q.h = p.h; q.v = p.v + CHARY/2; + q.h = p.h; q.v = p.v + _row_height/2; xvt_dwin_draw_set_pos(win, q); q.h -= TABX*CHARX - 3*CHARX/2; xvt_dwin_draw_line(win, q); - q.v = (by+1)*CHARY; + q.v = (by+1)*_row_height; xvt_dwin_draw_line(win, q); TImage* bmp = node.image(is_selected); if (bmp) - bmp->draw(win, p.h, p.v + (CHARY - bmp->height()) / 2); + bmp->draw(win, p.h, p.v + (_row_height - bmp->height()) / 2); TNode_info& ni = (*ui->_node_info)[ry]; node.curr_id(ni._id); @@ -945,7 +986,7 @@ void TTree_window::draw_plus_minus() WINDOW w = win(); PNT r = log2dev(ni._plusx, firsty + i); - r.v += CHARY/2; + r.v += _row_height/2; r.h += CHARX/2; RCT rct; @@ -1182,7 +1223,9 @@ void TTree_window::handler(WINDOW win, EVENT* ep) if (_tree) { const int c = ep->v.mouse.where.h / CHARX; - const int r = ep->v.mouse.where.v / CHARY; + const int r = ep->v.mouse.where.v / _row_height; + dev2log(ep->v.mouse.where); + TNode_info ni; bool ok = index2info(r, ni); if (ok && (c == ni._plusx || (c >= ni._startx && c < ni._endx)) && @@ -1220,8 +1263,10 @@ void TTree_window::handler(WINDOW win, EVENT* ep) TTree_window::TTree_window(int x, int y, int dx, int dy, WINDOW parent, TTree_field* owner) - : TField_window(x, y, dx, dy, parent, owner), _tree(NULL), _hide_leaves(FALSE) + : TField_window(x, y, dx, dy, parent, owner), _tree(NULL), + _hide_leaves(FALSE) { + _row_height = CHARY+2; } /////////////////////////////////////////////////////////// diff --git a/include/urldefid.h b/include/urldefid.h index fd11cce7e..5555664ed 100755 --- a/include/urldefid.h +++ b/include/urldefid.h @@ -81,6 +81,7 @@ #define BMP_DIR 167 #define BMP_DIRDN 168 #define BMP_FILE 169 +#define BMP_STOP 170 #endif diff --git a/include/window.cpp b/include/window.cpp index 88d96a78f..51a2b396a 100755 --- a/include/window.cpp +++ b/include/window.cpp @@ -744,7 +744,9 @@ TPoint TWindow::size() const { RCT r; xvt_vobj_get_client_rect(win() ? win() : TASK_WIN, &r); - return TPoint(r.right / CHARX, r.bottom / CHARY); +// return TPoint(r.right / CHARX, r.bottom / CHARY); + PNT p; p.h = r.right; p.v = r.bottom; + return dev2log(p); } WINDOW TWindow::parent() const @@ -752,7 +754,6 @@ WINDOW TWindow::parent() const return xvt_vobj_get_parent(win()); } - void TWindow::set_focus() { WINDOW w = win();