src/widget/widget_base.cpp
author KUDr
Sat, 21 Apr 2007 08:23:57 +0000
branchcpp_gui
changeset 6308 646711c5feaa
parent 6301 e0251f797d59
permissions -rw-r--r--
(svn r9708) [cpp_gui] -Sync with trunk (r9633:9707)
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     1
/* $Id$ */
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     2
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     3
#include "../stdafx.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     4
#include <stdarg.h>
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     5
#include "../openttd.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     6
#include "../debug.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     7
#include "../functions.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     8
#include "../map.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     9
#include "../player.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    10
#include "../window.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    11
#include "../gfx.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    12
#include "../viewport.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    13
#include "../console.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    14
#include "../variables.h"
6301
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
    15
#include "../strings.h"
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    16
#include "../table/sprites.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    17
#include "../genworld.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    18
#include "../helpers.hpp"
6264
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
    19
#include "window_events.hpp"
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
    20
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
    21
namespace gui {
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    22
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    23
int16 Widget::Left() const
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    24
{
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    25
	return m_rect.Left();
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    26
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    27
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    28
int16 Widget::Top() const
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    29
{
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    30
	return m_rect.Top();
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    31
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    32
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    33
int16 Widget::Right() const
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    34
{
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    35
	return m_rect.Right();
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    36
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    37
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    38
int16 Widget::Bottom() const
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    39
{
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    40
	return m_rect.Bottom();
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    41
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    42
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    43
int16 Widget::Width() const
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    44
{
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    45
	return m_rect.Width();
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    46
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    47
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    48
int16 Widget::Height() const
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    49
{
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    50
	return m_rect.Height();
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    51
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    52
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    53
const Point16& Widget::TopLeft() const
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    54
{
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    55
	return m_rect.TopLeft();
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    56
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    57
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    58
const Point16& Widget::BottomRight() const
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    59
{
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    60
	return m_rect.BottomRight();
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    61
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    62
6301
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
    63
Size16 Widget::GetSize() const
6263
19dab6a68886 (svn r8913) [cpp_gui] -Codechange: use BaseWindow accessors instead of accessing window size/position directly
KUDr
parents: 6258
diff changeset
    64
{
19dab6a68886 (svn r8913) [cpp_gui] -Codechange: use BaseWindow accessors instead of accessing window size/position directly
KUDr
parents: 6258
diff changeset
    65
	return m_rect.Size();
19dab6a68886 (svn r8913) [cpp_gui] -Codechange: use BaseWindow accessors instead of accessing window size/position directly
KUDr
parents: 6258
diff changeset
    66
}
19dab6a68886 (svn r8913) [cpp_gui] -Codechange: use BaseWindow accessors instead of accessing window size/position directly
KUDr
parents: 6258
diff changeset
    67
6264
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
    68
Point16 Widget::CenterPt() const
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
    69
{
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
    70
	return m_rect.CenterPt();
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
    71
}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
    72
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    73
const Rect16& Widget::GetRect() const
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    74
{
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    75
	return m_rect;
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    76
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    77
6295
a88d8c2cff6e (svn r9091) [cpp_gui] -Codechange: Widgets now use container's coordinate space instead of window's space
KUDr
parents: 6290
diff changeset
    78
Rect16 Widget::GetLocalRect() const
a88d8c2cff6e (svn r9091) [cpp_gui] -Codechange: Widgets now use container's coordinate space instead of window's space
KUDr
parents: 6290
diff changeset
    79
{
a88d8c2cff6e (svn r9091) [cpp_gui] -Codechange: Widgets now use container's coordinate space instead of window's space
KUDr
parents: 6290
diff changeset
    80
	return Rect16(Point16(0, 0), BottomRight() - TopLeft());
a88d8c2cff6e (svn r9091) [cpp_gui] -Codechange: Widgets now use container's coordinate space instead of window's space
KUDr
parents: 6290
diff changeset
    81
}
a88d8c2cff6e (svn r9091) [cpp_gui] -Codechange: Widgets now use container's coordinate space instead of window's space
KUDr
parents: 6290
diff changeset
    82
6301
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
    83
Point16 Widget::GetTopLeftInWindow() const
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
    84
{
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
    85
	Point16 pt = TopLeft();
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
    86
	if (m_container != NULL) pt += m_container->GetTopLeftInWindow();
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
    87
	return pt;
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
    88
}
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
    89
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    90
void Widget::SetLeft(int16 val)
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    91
{
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
    92
	m_rect.SetRight(Right() + val - Left());
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    93
	m_rect.SetLeft(val);
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    94
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    95
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    96
void Widget::SetTop(int16 val)
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    97
{
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
    98
	m_rect.SetBottom(Bottom() + val - Top());
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    99
	m_rect.SetTop(val);
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   100
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   101
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   102
void Widget::SetRight(int16 val)
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   103
{
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   104
	EvtResize evt_resize(Point16(val - Right(), 0));
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   105
	m_rect.SetRight(val);
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   106
	OnResize(evt_resize);
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   107
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   108
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   109
void Widget::SetBottom(int16 val)
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   110
{
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   111
	EvtResize evt_resize(Point16(0, val - Bottom()));
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   112
	m_rect.SetBottom(val);
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   113
	OnResize(evt_resize);
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   114
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   115
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   116
void Widget::SetWidth(int16 val)
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   117
{
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   118
	EvtResize evt_resize(Point16(val - Width(), 0));
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   119
	m_rect.SetWidth(val);
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   120
	OnResize(evt_resize);
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   121
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   122
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   123
void Widget::SetHeight(int16 val)
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   124
{
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   125
	EvtResize evt_resize(Point16(0, val - Height()));
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   126
	m_rect.SetHeight(val);
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   127
	OnResize(evt_resize);
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   128
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   129
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   130
void Widget::SetTopLeft(const Point16 &pt)
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   131
{
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   132
	m_rect.SetBottomRight(BottomRight() + pt - TopLeft());
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   133
	m_rect.SetTopLeft(pt);
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   134
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   135
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   136
void Widget::SetBottomRight(const Point16 &pt)
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   137
{
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   138
	EvtResize evt_resize(pt - BottomRight());
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   139
	m_rect.SetBottomRight(pt);
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   140
	OnResize(evt_resize);
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   141
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   142
6263
19dab6a68886 (svn r8913) [cpp_gui] -Codechange: use BaseWindow accessors instead of accessing window size/position directly
KUDr
parents: 6258
diff changeset
   143
void Widget::SetSize(const Point16 &pt)
19dab6a68886 (svn r8913) [cpp_gui] -Codechange: use BaseWindow accessors instead of accessing window size/position directly
KUDr
parents: 6258
diff changeset
   144
{
6301
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   145
	EvtResize evt_resize(pt - GetSize());
6263
19dab6a68886 (svn r8913) [cpp_gui] -Codechange: use BaseWindow accessors instead of accessing window size/position directly
KUDr
parents: 6258
diff changeset
   146
	m_rect.SetSize(pt);
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   147
	OnResize(evt_resize);
6263
19dab6a68886 (svn r8913) [cpp_gui] -Codechange: use BaseWindow accessors instead of accessing window size/position directly
KUDr
parents: 6258
diff changeset
   148
}
19dab6a68886 (svn r8913) [cpp_gui] -Codechange: use BaseWindow accessors instead of accessing window size/position directly
KUDr
parents: 6258
diff changeset
   149
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   150
void Widget::SetRect(const Rect16 &rect)
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   151
{
6301
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   152
	EvtResize evt_resize(rect.Size() - GetSize());
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   153
	m_rect = rect;
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   154
	OnResize(evt_resize);
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   155
}
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   156
6301
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   157
void Widget::SetSlotRect(const Rect16 &rc_slot)
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   158
{
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   159
	Rect16 rc = rc_slot;
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   160
	if ((m_feature_flags & FF_MIN_WIDTH) != FF_NONE) {
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   161
		switch (m_feature_flags & (FF_ALIGN_LEFT | FF_ALIGN_RIGHT)) {
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   162
			case FF_ALIGN_HCENTER:
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   163
				rc.DoMove((rc.Width() - m_min_size.x) / 2, 0);
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   164
				break;
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   165
			case FF_ALIGN_RIGHT:
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   166
				rc.DoMove(rc.Width() - m_min_size.x, 0);
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   167
				/* fall down to FF_ALIGN_LEFT */
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   168
			case FF_ALIGN_LEFT:
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   169
			default:
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   170
				break;
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   171
		}
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   172
		rc.SetWidth(m_min_size.x);
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   173
	}
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   174
	if ((m_feature_flags & FF_MIN_HEIGHT) != FF_NONE) {
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   175
		switch (m_feature_flags & (FF_ALIGN_TOP | FF_ALIGN_BOTTOM)) {
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   176
			case FF_ALIGN_VCENTER:
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   177
				rc.DoMove(0, (rc.Height() - m_min_size.y) / 2);
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   178
				break;
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   179
			case FF_ALIGN_BOTTOM:
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   180
				rc.DoMove(0, rc.Height() - m_min_size.y);
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   181
				/* fall down to FF_ALIGN_TOP */
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   182
			case FF_ALIGN_TOP:
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   183
			default:
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   184
				break;
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   185
		}
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   186
		rc.SetHeight(m_min_size.y);
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   187
	}
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   188
	SetRect(rc);
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   189
}
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   190
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   191
/** Check widget size against minimal size and resize if needed. Return true if resized. */
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   192
bool Widget::CheckMinSize()
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   193
{
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   194
	Size16 size = GetSize();
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   195
	Size16 new_size(max(size.x, m_min_size.x), max(size.y, m_min_size.y));
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   196
	if (new_size != size) {
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   197
		/* The current size if smaller then minimal size. */
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   198
		SetSize(new_size);
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   199
		return true;
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   200
	}
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   201
	return false;
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   202
}
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   203
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   204
uint16 Widget::GetColor() const
6286
6e8eec87fa9d (svn r9006) [cpp_gui] -Add: Label widget (MiHaMiX)
KUDr
parents: 6282
diff changeset
   205
{
6e8eec87fa9d (svn r9006) [cpp_gui] -Add: Label widget (MiHaMiX)
KUDr
parents: 6282
diff changeset
   206
	return m_color;
6e8eec87fa9d (svn r9006) [cpp_gui] -Add: Label widget (MiHaMiX)
KUDr
parents: 6282
diff changeset
   207
}
6e8eec87fa9d (svn r9006) [cpp_gui] -Add: Label widget (MiHaMiX)
KUDr
parents: 6282
diff changeset
   208
6301
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   209
byte Widget::GetBkColor() const
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   210
{
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   211
	if (m_color == COLOUR_PARENT || m_color == COLOUR_TRANSPARENT) {
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   212
		if (m_container == NULL) return 0;
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   213
		return m_container->GetBkColor();
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   214
	}
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   215
	return (byte)m_color;
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   216
}
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   217
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   218
void Widget::SetColor(uint16 val)
6286
6e8eec87fa9d (svn r9006) [cpp_gui] -Add: Label widget (MiHaMiX)
KUDr
parents: 6282
diff changeset
   219
{
6e8eec87fa9d (svn r9006) [cpp_gui] -Add: Label widget (MiHaMiX)
KUDr
parents: 6282
diff changeset
   220
	m_color = val;
6e8eec87fa9d (svn r9006) [cpp_gui] -Add: Label widget (MiHaMiX)
KUDr
parents: 6282
diff changeset
   221
}
6e8eec87fa9d (svn r9006) [cpp_gui] -Add: Label widget (MiHaMiX)
KUDr
parents: 6282
diff changeset
   222
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   223
void Widget::SetAnchors(Anchors a)
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   224
{
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   225
	m_anchors = a;
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   226
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   227
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   228
WidgetId Widget::GetId() const
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   229
{
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   230
	return m_id;
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   231
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   232
6264
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   233
void Widget::AddHandler(EventHandlerDelegate *d)
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   234
{
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   235
	m_handlers.push_back(Handler(d));
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   236
}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   237
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   238
void Widget::CallHandlers(EventBase &e)
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   239
{
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   240
	BaseWindow *w = GetWindow();
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   241
	if (w == NULL) return;
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   242
	for (Handlers::iterator it = m_handlers.begin(); it != m_handlers.end(); ++it) {
6269
3b3bd4fe0736 (svn r8947) [cpp_gui] -Codechange: proprietary smart pointer adapter replaced by generic one
KUDr
parents: 6264
diff changeset
   243
		EventHandlerDelegatePtr d = (*it);
6264
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   244
		if (d->m_code != e.GetCode()) continue;
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   245
		d->HandleEvent(w, e);
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   246
	}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   247
}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   248
6301
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   249
/*static*/ Size16 Widget::GetStringSize(StringID id)
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   250
{
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   251
	if (id != 0) {
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   252
		char str[512];
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   253
		GetString(str, id, lastof(str));
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   254
		if (str[0] != 0) {
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   255
			BoundingRect br = GetStringBoundingBox(str);
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   256
			return Size(br.width, br.height);
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   257
		}
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   258
	}
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   259
	return Size16(0, 0);
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   260
}
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   261
6264
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   262
/*static*/ void Widget::DrawFrameRect(int left, int top, int right, int bottom, int ctab, FrameFlags flags)
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   263
{
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   264
	uint dark         = _colour_gradient[ctab][3];
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   265
	uint medium_dark  = _colour_gradient[ctab][5];
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   266
	uint medium_light = _colour_gradient[ctab][6];
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   267
	uint light        = _colour_gradient[ctab][7];
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   268
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   269
	if (flags & FR_TRANSPARENT) {
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   270
		GfxFillRect(left, top, right, bottom, PALETTE_TO_TRANSPARENT | (1 << USE_COLORTABLE));
6286
6e8eec87fa9d (svn r9006) [cpp_gui] -Add: Label widget (MiHaMiX)
KUDr
parents: 6282
diff changeset
   271
	} else if (flags & FR_BG_ONLY) {
6e8eec87fa9d (svn r9006) [cpp_gui] -Add: Label widget (MiHaMiX)
KUDr
parents: 6282
diff changeset
   272
		GfxFillRect(left, top, right, bottom, medium_dark);
6264
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   273
	} else {
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   274
		uint interior;
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   275
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   276
		if (flags & FR_LOWERED) {
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   277
			GfxFillRect(left,     top,     left,  bottom,     dark);
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   278
			GfxFillRect(left + 1, top,     right, top,        dark);
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   279
			GfxFillRect(right,    top + 1, right, bottom - 1, light);
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   280
			GfxFillRect(left + 1, bottom,  right, bottom,     light);
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   281
			interior = (flags & FR_DARKENED ? medium_dark : medium_light);
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   282
		} else {
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   283
			GfxFillRect(left,     top,    left,      bottom - 1, light);
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   284
			GfxFillRect(left + 1, top,    right - 1, top,        light);
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   285
			GfxFillRect(right,    top,    right,     bottom - 1, dark);
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   286
			GfxFillRect(left,     bottom, right,     bottom,     dark);
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   287
			interior = medium_dark;
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   288
		}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   289
		if (!(flags & FR_BORDERONLY)) {
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   290
			GfxFillRect(left + 1, top + 1, right - 1, bottom - 1, interior);
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   291
		}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   292
	}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   293
}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   294
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   295
void Widget::DrawFrameRect(int ctab, FrameFlags flags)
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   296
{
6295
a88d8c2cff6e (svn r9091) [cpp_gui] -Codechange: Widgets now use container's coordinate space instead of window's space
KUDr
parents: 6290
diff changeset
   297
	DrawFrameRect(0, 0, Width() - 1, Height() - 1, ctab, flags);
6264
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   298
}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   299
6290
8078f7a3c8a0 (svn r9023) [cpp_gui] -Add: ImageButton and ImageButton2
KUDr
parents: 6286
diff changeset
   300
void Widget::DrawSprite(SpriteID img, SpriteID pal, const Point16 &local_pos)
8078f7a3c8a0 (svn r9023) [cpp_gui] -Add: ImageButton and ImageButton2
KUDr
parents: 6286
diff changeset
   301
{
6295
a88d8c2cff6e (svn r9091) [cpp_gui] -Codechange: Widgets now use container's coordinate space instead of window's space
KUDr
parents: 6290
diff changeset
   302
	::DrawSprite(img, pal, local_pos.x, local_pos.y);
6290
8078f7a3c8a0 (svn r9023) [cpp_gui] -Add: ImageButton and ImageButton2
KUDr
parents: 6286
diff changeset
   303
}
8078f7a3c8a0 (svn r9023) [cpp_gui] -Add: ImageButton and ImageButton2
KUDr
parents: 6286
diff changeset
   304
8078f7a3c8a0 (svn r9023) [cpp_gui] -Add: ImageButton and ImageButton2
KUDr
parents: 6286
diff changeset
   305
6264
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   306
/*virtual*/ BaseWindow* Widget::GetWindow()
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   307
{
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   308
	if (m_container != NULL) {
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   309
		return m_container->GetWindow();
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   310
	}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   311
	return NULL;
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   312
}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   313
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   314
/*virtual*/ Widget* Widget::WidgetFromPt(const Point16 &pt)
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   315
{
6301
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   316
	if (GetLocalRect().PtInRect(pt)) return this;
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   317
	return NULL;
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   318
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   319
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   320
/*virtual*/ void Widget::Close()
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   321
{
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   322
	m_is_closing = true;
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   323
}
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
   324
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6278
diff changeset
   325
/*virtual*/ void Widget::OnLeftClick(EvtLeftClick &ev)
6264
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   326
{
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6278
diff changeset
   327
	CallHandlers(ev);
6264
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   328
}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   329
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6278
diff changeset
   330
/*virtual*/ void Widget::OnRightButtonDown(EvtRightButtonDown &ev)
6264
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   331
{
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   332
	if (m_tooltips != 0) {
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   333
		GuiShowTooltips(m_tooltips);
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   334
		ev.SetHandled();
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   335
		return;
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   336
	}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   337
}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   338
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   339
/*virtual*/ void Widget::OnResizeParent(EvtResizeParent &ev)
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   340
{
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   341
	Rect16 rc = GetRect();
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   342
	if ((m_anchors & PIN_RIGHT) != PIN_NONE) {
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   343
		rc.SetRight(rc.Right() + ev.m_change.x);
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   344
		if ((m_anchors & PIN_LEFT) == PIN_NONE) {
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   345
			rc.SetLeft(rc.Left() + ev.m_change.x);
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   346
		}
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   347
	}
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   348
	if ((m_anchors & PIN_BOTTOM) != PIN_NONE) {
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   349
		rc.SetBottom(rc.Bottom() + ev.m_change.y);
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   350
		if ((m_anchors & PIN_TOP) == PIN_NONE) {
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   351
			rc.SetTop(rc.Top() + ev.m_change.y);
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   352
		}
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   353
	}
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   354
	SetRect(rc);
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   355
}
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6269
diff changeset
   356
6264
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   357
/*virtual*/ void Widget::DrawBackground(EvtPaint &ev)
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   358
{
6301
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   359
	bool draw_frame = (m_feature_flags & FF_NO_FRAME) == FF_NONE;
e0251f797d59 (svn r9484) [cpp_gui] -Add: Auto layout/resize ability of widgets.
KUDr
parents: 6295
diff changeset
   360
	DrawFrameRect(GetBkColor(), draw_frame ? FR_NONE : FR_BG_ONLY);
6264
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   361
}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   362
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   363
/*virtual*/ void Widget::DispatchEvent(EventBase &ev)
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   364
{
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   365
	if (ev.m_widget.IsNull()) ev.m_widget = this;
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   366
	ev.Dispatch();
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   367
}
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   368
9fc3b5467396 (svn r8931) [cpp_gui] -Add: first OO widget type (TextButton) added only with basic functionality
KUDr
parents: 6263
diff changeset
   369
}; // namespace gui