Blob Blame Raw
#pragma once

#ifndef TNZ_PANEL_INCLUDED
#define TNZ_PANEL_INCLUDED

#include "tw/tw.h"
#include "tw/button.h"

class TPanel : public TWidget
{
	int m_border, m_resizeHandleWidth;
	TWidget *m_dockWidget;
	TButton *m_maximizeButton;
	bool m_maximized;
	int m_status;

public:
	enum Side {
		Center,
		Top,
		Right,
		Bottom,
		Left
	};

public:
	TPanel(TWidget *parent, string name);

	void draw();
	void keyDown(int key, TUINT32 flags, const TPoint &p);
	void close();

	void dockToggle();
	void maximizeToggle();

	void configureNotify(const TDimension &d);
	void mouseMove(const TPoint &p);
	void leftButtonDown(const TMouseEvent &e);
	void leftButtonUp(const TMouseEvent &e);

	void leave(const TPoint &p);
	void enter(const TPoint &p);

	Side findSide(const TPoint &p);
	bool canMoveSide(Side side);

	static TPanel *createPanel(TWidget *parent, string name);
	void setParent(TWidget *p)
	{
		TWidget::setParent(p);
		m_dockWidget = p;
	};
};

class TPanelResizer
{
public:
	TPanelResizer(){};
	virtual bool canMoveSide(TPanel *panel, TPanel::Side side) = 0;
	virtual void moveSide(TPanel *panel, TPanel::Side side) = 0;
};

#endif