panthema / 2007 / stx-btree / stx-btree-0.8 / wxbtreedemo / WTreeDrawing.h (Download File)
// $Id: WTreeDrawing.h 58 2007-05-13 10:51:17Z tb $

 * STX B+ Tree Demo Program v0.8
 * Copyright (C) 2007 Timo Bingmann
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the Free
 * Software Foundation; either version 2 of the License, or (at your option)
 * any later version.
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 * more details.
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
 * Place, Suite 330, Boston, MA 02111-1307 USA

#ifndef _WTreeDrawing_H_
#define _WTreeDrawing_H_

#include <wx/wx.h>

/** The Custom wxScrolledWindow Canvas on which the B+ tree is drawng. It
 * supports zooming via mouse wheel and scrolling from wxScrolledWindow. */
class WTreeDrawing : public wxScrolledWindow
    WTreeDrawing(wxWindow *parent, int id);

    /// Used to determine when to update the scroll bars.
    wxSize		oldTreeSize;
    double		oldscalefactor;

    /// Zoom factor changed by the mouse wheel.
    double		scalefactor;

    /// Set if this windows has focus and draw a faint frame around it.
    bool		hasfocus;

    void		OnPaint(wxPaintEvent &pe);
    void		OnSize(wxSizeEvent &se);
    void		OnMouseWheel(wxMouseEvent &me);
    void		OnSetFocus(wxFocusEvent &fe);
    void		OnKillFocus(wxFocusEvent &fe);

    void		DrawBTree(wxDC &dc);

    /// Tree operation to draw the nodes on this canvas.
    struct BTreeOp_Draw
	BTreeOp_Draw(WTreeDrawing &_w, wxDC &_dc, const class BTreeBundle &_tb)
	    : w(_w), dc(_dc), tb(_tb)

	WTreeDrawing &w;
	wxDC &dc;
	const BTreeBundle &tb;

	typedef	wxSize	result_type;

	template <class BTreeType>
	wxSize draw_node(int offsetx, int offsety, const class BTreeType::btree_impl::node* node);

	template <class BTreeType>
	wxSize draw_tree(BTreeType &bt);

	template <class BTreeType>
	wxSize opInteger(BTreeType &bt);

	template <class BTreeType>
	wxSize opIntegerMulti(BTreeType &bt);

	template <class BTreeType>
	wxSize opString(BTreeType &bt);

	template <class BTreeType>
	wxSize opStringMulti(BTreeType &bt);

    class WMain* 	wmain;
    void		SetWMain(class WMain *wm);


#endif // _WTreeDrawing_H_