// ---------------------------------------------------------------------------
// 
//   Lily Engine alpha
// 
//   Copyright (c) 2010 Clifford Jolly
//     http://cliffjolly.com
//     cliff@cliffjolly.com
// 
// ---------------------------------------------------------------------------
// 
//   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
// -------------------------- END HEADER -------------------------------------

#ifndef WIDGETALIGNEDBOX_H
#define WIDGETALIGNEDBOX_H

#include "widgetsingleparent.h"

/// Alignment box. Contains a single Widget, which is reduced to its
/// minimum size. The contained Widget is aligned to either side or
/// center of this Widget on each axis.
LUA_WRAP class WidgetAlignedBox : public WidgetSingleParent {
public:
	
    // Unique stuff
		
    /// Set horizontal alignment. -1 = left, 0 = center, 1 = right.
    LUA_WRAP void setHAlign(int hAlign);
		
    /// Set vertical alignment. -1 = top, 0 = center, 1 = bottom.
    LUA_WRAP void setVAlign(int vAlign);
		
    /// Get horizontal alignment.
    LUA_WRAP int getHAlign(void);
		
    /// Get vertical alignment.
    LUA_WRAP int getVAlign(void);

    /// Set vertical stretch.
    LUA_WRAP void setVStretch(bool vStretch);

    /// Get vertical stretch.
    LUA_WRAP bool getVStretch(void);

    /// Set horizontal stretch.
    LUA_WRAP void setHStretch(bool hStretch);

    /// Get horizontal stretch.
    LUA_WRAP bool getHStretch(void);
	
    // Inherited stuff
    void draw(void);
    float getMinHeight(void);
    float getMinWidth(void);
    bool handleEvent(const WidgetEvent *event);
    void setWidth(float newWidth);
    void setHeight(float newHeight);
	
    // Constructor/destructor
    WidgetAlignedBox(void);
    virtual ~WidgetAlignedBox(void);
    // TODO: XML constructor.
	
private:
    // -1, 0, 1 = left/top, center, right/bottom
    int vAlign;
    int hAlign;
    bool hStretch;
    bool vStretch;
		
    float getOffsetX(void);
    float getOffsetY(void);
};

#endif
