src/widget/widget_caption.cpp
author KUDr
Sat, 03 Mar 2007 16:11:18 +0000
branchcpp_gui
changeset 6282 c5b92f2d924f
parent 6279 c75b2c7222ff
child 6283 7072ee68c676
permissions -rw-r--r--
(svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
-Add: when pressing gui button and holding the mouse button down you can now move mouse out of the button and it will get released silently. So if you release mouse button after leaving gui button the button will not raise OnLeftClick() event.
-Fix: OnCreate() is now propagated properly to base classes
-Codechange: old OnLeftClick() is now OnLeftButtonDown() (same with OnRightClick() and OnRightButtonDown()). New OnLeftClick() is now raised only by button when released.
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"
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
     6
#include "table/strings.h"
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     7
#include "../debug.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     8
#include "../functions.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
     9
#include "../map.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    10
#include "../player.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    11
#include "../window.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    12
#include "../gfx.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    13
#include "../viewport.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    14
#include "../console.h"
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    15
#include "../variables.h"
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: 6258
diff changeset
    19
#include "window_events.hpp"
6258
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    20
a2f86b8fd99b (svn r8801) [cpp_gui] -Codechange: few changes towards OO GUI:
KUDr
parents:
diff changeset
    21
6273
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    22
namespace gui {
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    23
6279
c75b2c7222ff (svn r8991) [cpp_gui] -Codechange: composite widgets (incl. windows) now must implement CreateWidgets() method which is called from the default OnCreate() implementation
KUDr
parents: 6278
diff changeset
    24
/*virtual*/ void CaptionBar::CreateWidgets()
c75b2c7222ff (svn r8991) [cpp_gui] -Codechange: composite widgets (incl. windows) now must implement CreateWidgets() method which is called from the default OnCreate() implementation
KUDr
parents: 6278
diff changeset
    25
{
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    26
	/* add close box */
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    27
	CloseBox *close_box = new CloseBox(this);
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    28
	AddWidget(close_box);
6279
c75b2c7222ff (svn r8991) [cpp_gui] -Codechange: composite widgets (incl. windows) now must implement CreateWidgets() method which is called from the default OnCreate() implementation
KUDr
parents: 6278
diff changeset
    29
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    30
	/* add caption */
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    31
	Rect16 rc_caption = GetRect();
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    32
	rc_caption.SetLeft(rc_caption.Left() + 11);
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    33
	Caption *caption = new Caption(this, -100, RESIZE_LR, m_color, rc_caption, 0x84, STR_018C_WINDOW_TITLE_DRAG_THIS, STR_015B_OPENTTD);
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    34
	AddWidget(caption);
6279
c75b2c7222ff (svn r8991) [cpp_gui] -Codechange: composite widgets (incl. windows) now must implement CreateWidgets() method which is called from the default OnCreate() implementation
KUDr
parents: 6278
diff changeset
    35
}
c75b2c7222ff (svn r8991) [cpp_gui] -Codechange: composite widgets (incl. windows) now must implement CreateWidgets() method which is called from the default OnCreate() implementation
KUDr
parents: 6278
diff changeset
    36
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    37
/*virtual*/ void CaptionBar::OnCreate(EvtCreate &ev)
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    38
{
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    39
	SetAnchors(PIN_LEFT | PIN_TOP | PIN_RIGHT);
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    40
	super::OnCreate(ev);
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    41
}
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    42
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    43
/*virtual*/ void Caption::DrawBackground(EvtPaint &ev)
6273
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    44
{
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    45
	BaseWindow *w = GetWindow();
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    46
	assert(w != NULL);
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    47
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    48
	byte caption_color = w->caption_color;
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    49
	assert(Height() == 14); // XXX - to ensure the same sizes are used everywhere!
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    50
	DrawFrameRect(Left(), Top(), Right(), Bottom(), m_color, FR_BORDERONLY);
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    51
	DrawFrameRect(Left() + 1, Top() + 1, Right() - 1, Bottom() - 1, m_color, (caption_color == 0xFF) ? FR_LOWERED | FR_DARKENED : FR_LOWERED | FR_DARKENED | FR_BORDERONLY);
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    52
	if (caption_color != 0xFF) {
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    53
		GfxFillRect(Left() + 2, Top() + 2, Right() - 2, Bottom() - 2, _colour_gradient[_player_colors[caption_color]][4]);
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    54
	}
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    55
}
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    56
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    57
/*virtual*/ void Caption::OnCreate(EvtCreate &ev)
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6277
diff changeset
    58
{
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6277
diff changeset
    59
	SetAnchors(PIN_LEFT | PIN_TOP | PIN_RIGHT);
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    60
	super::OnCreate(ev);
6278
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6277
diff changeset
    61
}
c09f5e53af9b (svn r8986) [cpp_gui] -Add: resizing window by dragging ResizeBox
KUDr
parents: 6277
diff changeset
    62
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    63
/*virtual*/ void Caption::OnPaint(EvtPaint &ev)
6273
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    64
{
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    65
	DrawBackground(ev);
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    66
	DrawStringCenteredTruncated(Left() + 2, Right() - 2, Top() + 2, m_text, m_text_color);
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    67
	ev.SetHandled();
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    68
}
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    69
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    70
/*virtual*/ void Caption::OnLeftButtonDown(EvtLeftButtonDown &ev)
6275
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    71
{
6276
e5f0198ec570 (svn r8984) [cpp_gui] -Cleanup: some forgotten commented code removed
KUDr
parents: 6275
diff changeset
    72
	m_moving_offset = ev.m_pt;
6275
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    73
	ev.SetHandled();
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    74
	m_ticket_moving = CaptureEventsT(this, &Caption::OnCaptureMoving);
6275
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    75
	Invalidate();
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    76
}
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    77
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    78
void Caption::OnCaptureMoving(EvtMouseOver &e)
6275
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    79
{
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    80
	if (!_left_button_down) {
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    81
		m_ticket_moving.Release();
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    82
6282
c5b92f2d924f (svn r8996) [cpp_gui] -Add: CloseBox added into CaptionBar
KUDr
parents: 6279
diff changeset
    83
		EvtLeftClick ev(Point(0, 0));
6275
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    84
		ev.m_widget = this;
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    85
		CallHandlers(ev);
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    86
		return;
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    87
	}
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    88
	GetWindow()->SetTopLeft(e.m_pt - m_moving_offset);
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    89
	e.SetHandled();
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    90
	Invalidate();
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    91
}
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    92
bd57b30a8b81 (svn r8983) [cpp_gui] -Add: moving window by dragging CaptionBar
KUDr
parents: 6273
diff changeset
    93
6273
d8a2c6844650 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget
KUDr
parents: 6264
diff changeset
    94
}; // namespace gui