Checking for IsEnabled is now consistent across all GUI elements (bug 2003234 by CuteAlien)
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@1412 dfc29bdd-3216-0410-991c-e03cc46cb475master
parent
f717384735
commit
3d51b275d4
|
@ -46,6 +46,7 @@ Changes in version 1.5 (... 2008)
|
|||
Nodes are now solid or transparent. ( but still more states are needed )
|
||||
|
||||
- GUI:
|
||||
- Checking IsEnabled is now consistent across all GUI elements
|
||||
- Disabling the BMP loader now compiles without the built-in font
|
||||
- Added setTextAlignment to IGUIComboBox
|
||||
- Fixed a bug in CGUISpriteBank which caused a crash when a non-looping animated sprite reached the end of its animation.
|
||||
|
|
|
@ -93,7 +93,7 @@ void CGUIButton::setSprite(EGUI_BUTTON_STATE state, s32 index, video::SColor col
|
|||
bool CGUIButton::OnEvent(const SEvent& event)
|
||||
{
|
||||
if (!IsEnabled)
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
return IGUIElement::OnEvent(event);
|
||||
|
||||
switch(event.EventType)
|
||||
{
|
||||
|
|
|
@ -119,7 +119,7 @@ bool CGUICheckBox::OnEvent(const SEvent& event)
|
|||
}
|
||||
}
|
||||
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
return IGUIElement::OnEvent(event);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -339,92 +339,94 @@ void CGUIColorSelectDialog::buildColorRing( const core::dimension2d<s32> & dim,
|
|||
//! called if an event happened.
|
||||
bool CGUIColorSelectDialog::OnEvent(const SEvent& event)
|
||||
{
|
||||
|
||||
switch(event.EventType)
|
||||
if (IsEnabled)
|
||||
{
|
||||
case EET_GUI_EVENT:
|
||||
switch(event.GUIEvent.EventType)
|
||||
switch(event.EventType)
|
||||
{
|
||||
case EGET_SCROLL_BAR_CHANGED:
|
||||
case EET_GUI_EVENT:
|
||||
switch(event.GUIEvent.EventType)
|
||||
{
|
||||
for ( u32 i = 0; i!= Battery.size (); ++i )
|
||||
case EGET_SCROLL_BAR_CHANGED:
|
||||
{
|
||||
if ( event.GUIEvent.Caller == Battery[i].Scrollbar )
|
||||
for ( u32 i = 0; i!= Battery.size (); ++i )
|
||||
{
|
||||
s32 pos = Battery[i].Scrollbar->getPos ();
|
||||
s32 value = Template[i].range_down + ( pos );
|
||||
core::stringw s ( value );
|
||||
Battery[i].Edit->setText ( s.c_str() );
|
||||
if ( event.GUIEvent.Caller == Battery[i].Scrollbar )
|
||||
{
|
||||
s32 pos = Battery[i].Scrollbar->getPos ();
|
||||
s32 value = Template[i].range_down + ( pos );
|
||||
core::stringw s ( value );
|
||||
Battery[i].Edit->setText ( s.c_str() );
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
case EGET_ELEMENT_FOCUS_LOST:
|
||||
Dragging = false;
|
||||
break;
|
||||
case EGET_BUTTON_CLICKED:
|
||||
if (event.GUIEvent.Caller == CloseButton ||
|
||||
event.GUIEvent.Caller == CancelButton)
|
||||
{
|
||||
sendCancelEvent();
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (event.GUIEvent.Caller == OKButton)
|
||||
{
|
||||
sendSelectedEvent();
|
||||
remove();
|
||||
return true;
|
||||
case EGET_ELEMENT_FOCUS_LOST:
|
||||
Dragging = false;
|
||||
break;
|
||||
case EGET_BUTTON_CLICKED:
|
||||
if (event.GUIEvent.Caller == CloseButton ||
|
||||
event.GUIEvent.Caller == CancelButton)
|
||||
{
|
||||
sendCancelEvent();
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (event.GUIEvent.Caller == OKButton)
|
||||
{
|
||||
sendSelectedEvent();
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case EGET_LISTBOX_CHANGED:
|
||||
case EGET_LISTBOX_SELECTED_AGAIN:
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case EGET_LISTBOX_CHANGED:
|
||||
case EGET_LISTBOX_SELECTED_AGAIN:
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
DragStart.X = event.MouseInput.X;
|
||||
DragStart.Y = event.MouseInput.Y;
|
||||
Dragging = true;
|
||||
Environment->setFocus(this);
|
||||
return true;
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
Dragging = false;
|
||||
Environment->removeFocus(this);
|
||||
return true;
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if (Dragging)
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
// gui window should not be dragged outside its parent
|
||||
if (Parent)
|
||||
if (event.MouseInput.X < Parent->getAbsolutePosition().UpperLeftCorner.X +1 ||
|
||||
event.MouseInput.Y < Parent->getAbsolutePosition().UpperLeftCorner.Y +1 ||
|
||||
event.MouseInput.X > Parent->getAbsolutePosition().LowerRightCorner.X -1 ||
|
||||
event.MouseInput.Y > Parent->getAbsolutePosition().LowerRightCorner.Y -1)
|
||||
|
||||
return true;
|
||||
|
||||
move(core::position2d<s32>(event.MouseInput.X - DragStart.X, event.MouseInput.Y - DragStart.Y));
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
DragStart.X = event.MouseInput.X;
|
||||
DragStart.Y = event.MouseInput.Y;
|
||||
Dragging = true;
|
||||
Environment->setFocus(this);
|
||||
return true;
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
Dragging = false;
|
||||
Environment->removeFocus(this);
|
||||
return true;
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if (Dragging)
|
||||
{
|
||||
// gui window should not be dragged outside its parent
|
||||
if (Parent)
|
||||
if (event.MouseInput.X < Parent->getAbsolutePosition().UpperLeftCorner.X +1 ||
|
||||
event.MouseInput.Y < Parent->getAbsolutePosition().UpperLeftCorner.Y +1 ||
|
||||
event.MouseInput.X > Parent->getAbsolutePosition().LowerRightCorner.X -1 ||
|
||||
event.MouseInput.Y > Parent->getAbsolutePosition().LowerRightCorner.Y -1)
|
||||
|
||||
return true;
|
||||
|
||||
move(core::position2d<s32>(event.MouseInput.X - DragStart.X, event.MouseInput.Y - DragStart.Y));
|
||||
DragStart.X = event.MouseInput.X;
|
||||
DragStart.Y = event.MouseInput.Y;
|
||||
return true;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
return IGUIElement::OnEvent(event);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -161,132 +161,52 @@ void CGUIComboBox::setSelected(s32 idx)
|
|||
//! called if an event happened.
|
||||
bool CGUIComboBox::OnEvent(const SEvent& event)
|
||||
{
|
||||
switch(event.EventType)
|
||||
if (IsEnabled)
|
||||
{
|
||||
|
||||
case EET_KEY_INPUT_EVENT:
|
||||
if (ListBox && event.KeyInput.PressedDown && event.KeyInput.Key == KEY_ESCAPE)
|
||||
switch(event.EventType)
|
||||
{
|
||||
// hide list box
|
||||
openCloseMenu();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (event.KeyInput.Key == KEY_RETURN || event.KeyInput.Key == KEY_SPACE)
|
||||
{
|
||||
if (!event.KeyInput.PressedDown)
|
||||
openCloseMenu();
|
||||
|
||||
ListButton->setPressed(ListBox == 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (event.KeyInput.PressedDown)
|
||||
{
|
||||
s32 oldSelected = Selected;
|
||||
bool absorb = true;
|
||||
switch (event.KeyInput.Key)
|
||||
{
|
||||
case KEY_DOWN:
|
||||
setSelected(Selected+1);
|
||||
break;
|
||||
case KEY_UP:
|
||||
setSelected(Selected-1);
|
||||
break;
|
||||
case KEY_HOME:
|
||||
case KEY_PRIOR:
|
||||
setSelected(0);
|
||||
break;
|
||||
case KEY_END:
|
||||
case KEY_NEXT:
|
||||
setSelected((s32)Items.size()-1);
|
||||
break;
|
||||
default:
|
||||
absorb = false;
|
||||
}
|
||||
|
||||
if (Selected <0)
|
||||
setSelected(0);
|
||||
|
||||
if (Selected >= (s32)Items.size())
|
||||
setSelected((s32)Items.size() -1);
|
||||
|
||||
if (Selected != oldSelected)
|
||||
sendSelectionChangedEvent();
|
||||
|
||||
if (absorb)
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case EET_GUI_EVENT:
|
||||
|
||||
switch(event.GUIEvent.EventType)
|
||||
{
|
||||
case EGET_ELEMENT_FOCUS_LOST:
|
||||
if (ListBox &&
|
||||
(Environment->hasFocus(ListBox) || ListBox->isMyChild(event.GUIEvent.Caller) ) &&
|
||||
event.GUIEvent.Element != this &&
|
||||
event.GUIEvent.Element != ListButton &&
|
||||
event.GUIEvent.Element != ListBox &&
|
||||
!ListBox->isMyChild(event.GUIEvent.Element))
|
||||
{
|
||||
openCloseMenu();
|
||||
}
|
||||
break;
|
||||
case EGET_BUTTON_CLICKED:
|
||||
if (event.GUIEvent.Caller == ListButton)
|
||||
case EET_KEY_INPUT_EVENT:
|
||||
if (ListBox && event.KeyInput.PressedDown && event.KeyInput.Key == KEY_ESCAPE)
|
||||
{
|
||||
// hide list box
|
||||
openCloseMenu();
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case EGET_LISTBOX_SELECTED_AGAIN:
|
||||
case EGET_LISTBOX_CHANGED:
|
||||
if (event.GUIEvent.Caller == ListBox)
|
||||
else
|
||||
if (event.KeyInput.Key == KEY_RETURN || event.KeyInput.Key == KEY_SPACE)
|
||||
{
|
||||
setSelected(ListBox->getSelected());
|
||||
if (Selected <0 || Selected >= (s32)Items.size())
|
||||
setSelected(-1);
|
||||
openCloseMenu();
|
||||
|
||||
sendSelectionChangedEvent();
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
{
|
||||
core::position2d<s32> p(event.MouseInput.X, event.MouseInput.Y);
|
||||
|
||||
// send to list box
|
||||
if (ListBox && ListBox->isPointInside(p) && ListBox->OnEvent(event))
|
||||
return true;
|
||||
|
||||
return true;
|
||||
}
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
{
|
||||
core::position2d<s32> p(event.MouseInput.X, event.MouseInput.Y);
|
||||
|
||||
// send to list box
|
||||
if (!(ListBox &&
|
||||
ListBox->getAbsolutePosition().isPointInside(p) &&
|
||||
ListBox->OnEvent(event)))
|
||||
if (!event.KeyInput.PressedDown)
|
||||
openCloseMenu();
|
||||
|
||||
ListButton->setPressed(ListBox == 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
case EMIE_MOUSE_WHEEL:
|
||||
else
|
||||
if (event.KeyInput.PressedDown)
|
||||
{
|
||||
s32 oldSelected = Selected;
|
||||
setSelected( Selected +(event.MouseInput.Wheel < 0) ? 1 : -1);
|
||||
bool absorb = true;
|
||||
switch (event.KeyInput.Key)
|
||||
{
|
||||
case KEY_DOWN:
|
||||
setSelected(Selected+1);
|
||||
break;
|
||||
case KEY_UP:
|
||||
setSelected(Selected-1);
|
||||
break;
|
||||
case KEY_HOME:
|
||||
case KEY_PRIOR:
|
||||
setSelected(0);
|
||||
break;
|
||||
case KEY_END:
|
||||
case KEY_NEXT:
|
||||
setSelected((s32)Items.size()-1);
|
||||
break;
|
||||
default:
|
||||
absorb = false;
|
||||
}
|
||||
|
||||
if (Selected <0)
|
||||
setSelected(0);
|
||||
|
@ -296,16 +216,99 @@ bool CGUIComboBox::OnEvent(const SEvent& event)
|
|||
|
||||
if (Selected != oldSelected)
|
||||
sendSelectionChangedEvent();
|
||||
|
||||
if (absorb)
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case EET_GUI_EVENT:
|
||||
|
||||
switch(event.GUIEvent.EventType)
|
||||
{
|
||||
case EGET_ELEMENT_FOCUS_LOST:
|
||||
if (ListBox &&
|
||||
(Environment->hasFocus(ListBox) || ListBox->isMyChild(event.GUIEvent.Caller) ) &&
|
||||
event.GUIEvent.Element != this &&
|
||||
event.GUIEvent.Element != ListButton &&
|
||||
event.GUIEvent.Element != ListBox &&
|
||||
!ListBox->isMyChild(event.GUIEvent.Element))
|
||||
{
|
||||
openCloseMenu();
|
||||
}
|
||||
break;
|
||||
case EGET_BUTTON_CLICKED:
|
||||
if (event.GUIEvent.Caller == ListButton)
|
||||
{
|
||||
openCloseMenu();
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case EGET_LISTBOX_SELECTED_AGAIN:
|
||||
case EGET_LISTBOX_CHANGED:
|
||||
if (event.GUIEvent.Caller == ListBox)
|
||||
{
|
||||
setSelected(ListBox->getSelected());
|
||||
if (Selected <0 || Selected >= (s32)Items.size())
|
||||
setSelected(-1);
|
||||
openCloseMenu();
|
||||
|
||||
sendSelectionChangedEvent();
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
{
|
||||
core::position2d<s32> p(event.MouseInput.X, event.MouseInput.Y);
|
||||
|
||||
// send to list box
|
||||
if (ListBox && ListBox->isPointInside(p) && ListBox->OnEvent(event))
|
||||
return true;
|
||||
|
||||
return true;
|
||||
}
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
{
|
||||
core::position2d<s32> p(event.MouseInput.X, event.MouseInput.Y);
|
||||
|
||||
// send to list box
|
||||
if (!(ListBox &&
|
||||
ListBox->getAbsolutePosition().isPointInside(p) &&
|
||||
ListBox->OnEvent(event)))
|
||||
openCloseMenu();
|
||||
return true;
|
||||
}
|
||||
case EMIE_MOUSE_WHEEL:
|
||||
{
|
||||
s32 oldSelected = Selected;
|
||||
setSelected( Selected +(event.MouseInput.Wheel < 0) ? 1 : -1);
|
||||
|
||||
if (Selected <0)
|
||||
setSelected(0);
|
||||
|
||||
if (Selected >= (s32)Items.size())
|
||||
setSelected((s32)Items.size() -1);
|
||||
|
||||
if (Selected != oldSelected)
|
||||
sendSelectionChangedEvent();
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
return IGUIElement::OnEvent(event);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -218,61 +218,62 @@ void CGUIContextMenu::removeAllItems()
|
|||
//! called if an event happened.
|
||||
bool CGUIContextMenu::OnEvent(const SEvent& event)
|
||||
{
|
||||
if (!IsEnabled)
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
|
||||
switch(event.EventType)
|
||||
if (IsEnabled)
|
||||
{
|
||||
case EET_GUI_EVENT:
|
||||
switch(event.GUIEvent.EventType)
|
||||
|
||||
switch(event.EventType)
|
||||
{
|
||||
case EGET_ELEMENT_FOCUS_LOST:
|
||||
if (event.GUIEvent.Caller == this && !isMyChild(event.GUIEvent.Element) && AllowFocus)
|
||||
case EET_GUI_EVENT:
|
||||
switch(event.GUIEvent.EventType)
|
||||
{
|
||||
// set event parent of submenus
|
||||
setEventParent(Parent);
|
||||
remove();
|
||||
return false;
|
||||
case EGET_ELEMENT_FOCUS_LOST:
|
||||
if (event.GUIEvent.Caller == this && !isMyChild(event.GUIEvent.Element) && AllowFocus)
|
||||
{
|
||||
// set event parent of submenus
|
||||
setEventParent(Parent);
|
||||
remove();
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case EGET_ELEMENT_FOCUSED:
|
||||
if (event.GUIEvent.Caller == this && !AllowFocus)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EGET_ELEMENT_FOCUSED:
|
||||
if (event.GUIEvent.Caller == this && !AllowFocus)
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
{
|
||||
// menu might be removed if it loses focus in sendClick, so grab a reference
|
||||
grab();
|
||||
const u32 t = sendClick(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y));
|
||||
if ((t==0 || t==1) && Environment->hasFocus(this))
|
||||
Environment->removeFocus(this);
|
||||
drop();
|
||||
}
|
||||
return true;
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
return true;
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if (Environment->hasFocus(this))
|
||||
highlight(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y), true);
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
{
|
||||
// menu might be removed if it loses focus in sendClick, so grab a reference
|
||||
grab();
|
||||
const u32 t = sendClick(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y));
|
||||
if ((t==0 || t==1) && Environment->hasFocus(this))
|
||||
Environment->removeFocus(this);
|
||||
drop();
|
||||
}
|
||||
return true;
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
return true;
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if (Environment->hasFocus(this))
|
||||
highlight(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y), true);
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
return IGUIElement::OnEvent(event);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -187,32 +187,36 @@ void CGUIEditBox::setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT ver
|
|||
//! called if an event happened.
|
||||
bool CGUIEditBox::OnEvent(const SEvent& event)
|
||||
{
|
||||
switch(event.EventType)
|
||||
if (IsEnabled)
|
||||
{
|
||||
case EET_GUI_EVENT:
|
||||
if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST)
|
||||
|
||||
switch(event.EventType)
|
||||
{
|
||||
if (event.GUIEvent.Caller == this)
|
||||
case EET_GUI_EVENT:
|
||||
if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST)
|
||||
{
|
||||
MouseMarking = false;
|
||||
MarkBegin = 0;
|
||||
MarkEnd = 0;
|
||||
if (event.GUIEvent.Caller == this)
|
||||
{
|
||||
MouseMarking = false;
|
||||
MarkBegin = 0;
|
||||
MarkEnd = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EET_KEY_INPUT_EVENT:
|
||||
if (processKey(event))
|
||||
return true;
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
if (processMouse(event))
|
||||
return true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EET_KEY_INPUT_EVENT:
|
||||
if (processKey(event))
|
||||
return true;
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
if (processMouse(event))
|
||||
return true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
return IGUIElement::OnEvent(event);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -136,107 +136,110 @@ const wchar_t* CGUIFileOpenDialog::getFileName() const
|
|||
//! called if an event happened.
|
||||
bool CGUIFileOpenDialog::OnEvent(const SEvent& event)
|
||||
{
|
||||
switch(event.EventType)
|
||||
if (IsEnabled)
|
||||
{
|
||||
case EET_GUI_EVENT:
|
||||
switch(event.GUIEvent.EventType)
|
||||
switch(event.EventType)
|
||||
{
|
||||
case EGET_ELEMENT_FOCUS_LOST:
|
||||
Dragging = false;
|
||||
break;
|
||||
case EGET_BUTTON_CLICKED:
|
||||
if (event.GUIEvent.Caller == CloseButton ||
|
||||
event.GUIEvent.Caller == CancelButton)
|
||||
case EET_GUI_EVENT:
|
||||
switch(event.GUIEvent.EventType)
|
||||
{
|
||||
sendCancelEvent();
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (event.GUIEvent.Caller == OKButton && FileName != L"")
|
||||
{
|
||||
sendSelectedEvent();
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case EGET_LISTBOX_CHANGED:
|
||||
{
|
||||
s32 selected = FileBox->getSelected();
|
||||
if (FileList && FileSystem)
|
||||
case EGET_ELEMENT_FOCUS_LOST:
|
||||
Dragging = false;
|
||||
break;
|
||||
case EGET_BUTTON_CLICKED:
|
||||
if (event.GUIEvent.Caller == CloseButton ||
|
||||
event.GUIEvent.Caller == CancelButton)
|
||||
{
|
||||
if (FileList->isDirectory(selected))
|
||||
FileName = L"";
|
||||
else
|
||||
FileName = FileList->getFullFileName(selected);
|
||||
sendCancelEvent();
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case EGET_LISTBOX_SELECTED_AGAIN:
|
||||
{
|
||||
const s32 selected = FileBox->getSelected();
|
||||
if (FileList && FileSystem)
|
||||
else
|
||||
if (event.GUIEvent.Caller == OKButton && FileName != L"")
|
||||
{
|
||||
if (FileList->isDirectory(selected))
|
||||
sendSelectedEvent();
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case EGET_LISTBOX_CHANGED:
|
||||
{
|
||||
s32 selected = FileBox->getSelected();
|
||||
if (FileList && FileSystem)
|
||||
{
|
||||
FileSystem->changeWorkingDirectoryTo(FileList->getFileName(selected));
|
||||
fillListBox();
|
||||
FileName = L"";
|
||||
}
|
||||
else
|
||||
{
|
||||
FileName = FileList->getFullFileName(selected);
|
||||
return true;
|
||||
if (FileList->isDirectory(selected))
|
||||
FileName = L"";
|
||||
else
|
||||
FileName = FileList->getFullFileName(selected);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case EGET_LISTBOX_SELECTED_AGAIN:
|
||||
{
|
||||
const s32 selected = FileBox->getSelected();
|
||||
if (FileList && FileSystem)
|
||||
{
|
||||
if (FileList->isDirectory(selected))
|
||||
{
|
||||
FileSystem->changeWorkingDirectoryTo(FileList->getFileName(selected));
|
||||
fillListBox();
|
||||
FileName = L"";
|
||||
}
|
||||
else
|
||||
{
|
||||
FileName = FileList->getFullFileName(selected);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_MOUSE_WHEEL:
|
||||
return FileBox->OnEvent(event);
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
DragStart.X = event.MouseInput.X;
|
||||
DragStart.Y = event.MouseInput.Y;
|
||||
Dragging = true;
|
||||
Environment->setFocus(this);
|
||||
return true;
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
Dragging = false;
|
||||
return true;
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if (Dragging)
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
// gui window should not be dragged outside its parent
|
||||
if (Parent)
|
||||
if (event.MouseInput.X < Parent->getAbsolutePosition().UpperLeftCorner.X +1 ||
|
||||
event.MouseInput.Y < Parent->getAbsolutePosition().UpperLeftCorner.Y +1 ||
|
||||
event.MouseInput.X > Parent->getAbsolutePosition().LowerRightCorner.X -1 ||
|
||||
event.MouseInput.Y > Parent->getAbsolutePosition().LowerRightCorner.Y -1)
|
||||
|
||||
return true;
|
||||
|
||||
move(core::position2d<s32>(event.MouseInput.X - DragStart.X, event.MouseInput.Y - DragStart.Y));
|
||||
case EMIE_MOUSE_WHEEL:
|
||||
return FileBox->OnEvent(event);
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
DragStart.X = event.MouseInput.X;
|
||||
DragStart.Y = event.MouseInput.Y;
|
||||
Dragging = true;
|
||||
Environment->setFocus(this);
|
||||
return true;
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
Dragging = false;
|
||||
return true;
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if (Dragging)
|
||||
{
|
||||
// gui window should not be dragged outside its parent
|
||||
if (Parent)
|
||||
if (event.MouseInput.X < Parent->getAbsolutePosition().UpperLeftCorner.X +1 ||
|
||||
event.MouseInput.Y < Parent->getAbsolutePosition().UpperLeftCorner.Y +1 ||
|
||||
event.MouseInput.X > Parent->getAbsolutePosition().LowerRightCorner.X -1 ||
|
||||
event.MouseInput.Y > Parent->getAbsolutePosition().LowerRightCorner.Y -1)
|
||||
|
||||
return true;
|
||||
|
||||
move(core::position2d<s32>(event.MouseInput.X - DragStart.X, event.MouseInput.Y - DragStart.Y));
|
||||
DragStart.X = event.MouseInput.X;
|
||||
DragStart.Y = event.MouseInput.Y;
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
return IGUIElement::OnEvent(event);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -195,218 +195,221 @@ void CGUIListBox::setSelected(s32 id)
|
|||
//! called if an event happened.
|
||||
bool CGUIListBox::OnEvent(const SEvent& event)
|
||||
{
|
||||
switch(event.EventType)
|
||||
if (IsEnabled)
|
||||
{
|
||||
case EET_KEY_INPUT_EVENT:
|
||||
if (event.KeyInput.PressedDown &&
|
||||
(event.KeyInput.Key == KEY_DOWN ||
|
||||
event.KeyInput.Key == KEY_UP ||
|
||||
event.KeyInput.Key == KEY_HOME ||
|
||||
event.KeyInput.Key == KEY_END ||
|
||||
event.KeyInput.Key == KEY_NEXT ||
|
||||
event.KeyInput.Key == KEY_PRIOR ) )
|
||||
switch(event.EventType)
|
||||
{
|
||||
s32 oldSelected = Selected;
|
||||
switch (event.KeyInput.Key)
|
||||
case EET_KEY_INPUT_EVENT:
|
||||
if (event.KeyInput.PressedDown &&
|
||||
(event.KeyInput.Key == KEY_DOWN ||
|
||||
event.KeyInput.Key == KEY_UP ||
|
||||
event.KeyInput.Key == KEY_HOME ||
|
||||
event.KeyInput.Key == KEY_END ||
|
||||
event.KeyInput.Key == KEY_NEXT ||
|
||||
event.KeyInput.Key == KEY_PRIOR ) )
|
||||
{
|
||||
case KEY_DOWN:
|
||||
Selected += 1;
|
||||
break;
|
||||
case KEY_UP:
|
||||
Selected -= 1;
|
||||
break;
|
||||
case KEY_HOME:
|
||||
s32 oldSelected = Selected;
|
||||
switch (event.KeyInput.Key)
|
||||
{
|
||||
case KEY_DOWN:
|
||||
Selected += 1;
|
||||
break;
|
||||
case KEY_UP:
|
||||
Selected -= 1;
|
||||
break;
|
||||
case KEY_HOME:
|
||||
Selected = 0;
|
||||
break;
|
||||
case KEY_END:
|
||||
Selected = (s32)Items.size()-1;
|
||||
break;
|
||||
case KEY_NEXT:
|
||||
Selected += AbsoluteRect.getHeight() / ItemHeight;
|
||||
break;
|
||||
case KEY_PRIOR:
|
||||
Selected -= AbsoluteRect.getHeight() / ItemHeight;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (Selected >= (s32)Items.size())
|
||||
Selected = Items.size() - 1;
|
||||
else
|
||||
if (Selected<0)
|
||||
Selected = 0;
|
||||
break;
|
||||
case KEY_END:
|
||||
Selected = (s32)Items.size()-1;
|
||||
break;
|
||||
case KEY_NEXT:
|
||||
Selected += AbsoluteRect.getHeight() / ItemHeight;
|
||||
break;
|
||||
case KEY_PRIOR:
|
||||
Selected -= AbsoluteRect.getHeight() / ItemHeight;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (Selected >= (s32)Items.size())
|
||||
Selected = Items.size() - 1;
|
||||
else
|
||||
if (Selected<0)
|
||||
Selected = 0;
|
||||
|
||||
recalculateScrollPos();
|
||||
recalculateScrollPos();
|
||||
|
||||
// post the news
|
||||
// post the news
|
||||
|
||||
if (oldSelected != Selected && Parent && !Selecting && !MoveOverSelect)
|
||||
{
|
||||
SEvent e;
|
||||
e.EventType = EET_GUI_EVENT;
|
||||
e.GUIEvent.Caller = this;
|
||||
e.GUIEvent.Element = 0;
|
||||
e.GUIEvent.EventType = EGET_LISTBOX_CHANGED;
|
||||
Parent->OnEvent(e);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (!event.KeyInput.PressedDown && ( event.KeyInput.Key == KEY_RETURN || event.KeyInput.Key == KEY_SPACE ) )
|
||||
{
|
||||
if (Parent)
|
||||
{
|
||||
SEvent e;
|
||||
e.EventType = EET_GUI_EVENT;
|
||||
e.GUIEvent.Caller = this;
|
||||
e.GUIEvent.Element = 0;
|
||||
e.GUIEvent.EventType = EGET_LISTBOX_SELECTED_AGAIN;
|
||||
Parent->OnEvent(e);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if (event.KeyInput.PressedDown && event.KeyInput.Char)
|
||||
{
|
||||
// change selection based on text as it is typed.
|
||||
u32 now = os::Timer::getTime();
|
||||
|
||||
if (now - LastKeyTime < 500)
|
||||
{
|
||||
// add to key buffer if it isn't a key repeat
|
||||
if (!(KeyBuffer.size() == 1 && KeyBuffer[0] == event.KeyInput.Char))
|
||||
if (oldSelected != Selected && Parent && !Selecting && !MoveOverSelect)
|
||||
{
|
||||
KeyBuffer += L" ";
|
||||
KeyBuffer[KeyBuffer.size()-1] = event.KeyInput.Char;
|
||||
SEvent e;
|
||||
e.EventType = EET_GUI_EVENT;
|
||||
e.GUIEvent.Caller = this;
|
||||
e.GUIEvent.Element = 0;
|
||||
e.GUIEvent.EventType = EGET_LISTBOX_CHANGED;
|
||||
Parent->OnEvent(e);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
KeyBuffer = L" ";
|
||||
KeyBuffer[0] = event.KeyInput.Char;
|
||||
}
|
||||
LastKeyTime = now;
|
||||
|
||||
// find the selected item, starting at the current selection
|
||||
s32 start = Selected;
|
||||
// dont change selection if the key buffer matches the current item
|
||||
if (Selected > -1 && KeyBuffer.size() > 1)
|
||||
{
|
||||
if (Items[Selected].text.size() >= KeyBuffer.size() &&
|
||||
KeyBuffer.equals_ignore_case(Items[Selected].text.subString(0,KeyBuffer.size())))
|
||||
return true;
|
||||
}
|
||||
|
||||
s32 current;
|
||||
for (current = start+1; current < (s32)Items.size(); ++current)
|
||||
{
|
||||
if (Items[current].text.size() >= KeyBuffer.size())
|
||||
{
|
||||
if (KeyBuffer.equals_ignore_case(Items[current].text.subString(0,KeyBuffer.size())))
|
||||
{
|
||||
if (Parent && Selected != current && !Selecting && !MoveOverSelect)
|
||||
{
|
||||
SEvent e;
|
||||
e.EventType = EET_GUI_EVENT;
|
||||
e.GUIEvent.Caller = this;
|
||||
e.GUIEvent.Element = 0;
|
||||
e.GUIEvent.EventType = EGET_LISTBOX_CHANGED;
|
||||
Parent->OnEvent(e);
|
||||
}
|
||||
setSelected(current);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (current = 0; current <= start; ++current)
|
||||
{
|
||||
if (Items[current].text.size() >= KeyBuffer.size())
|
||||
{
|
||||
if (KeyBuffer.equals_ignore_case(Items[current].text.subString(0,KeyBuffer.size())))
|
||||
{
|
||||
if (Parent && Selected != current && !Selecting && !MoveOverSelect)
|
||||
{
|
||||
Selected = current;
|
||||
SEvent e;
|
||||
e.EventType = EET_GUI_EVENT;
|
||||
e.GUIEvent.Caller = this;
|
||||
e.GUIEvent.Element = 0;
|
||||
e.GUIEvent.EventType = EGET_LISTBOX_CHANGED;
|
||||
Parent->OnEvent(e);
|
||||
}
|
||||
setSelected(current);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case EET_GUI_EVENT:
|
||||
switch(event.GUIEvent.EventType)
|
||||
{
|
||||
case gui::EGET_SCROLL_BAR_CHANGED:
|
||||
if (event.GUIEvent.Caller == ScrollBar)
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (!event.KeyInput.PressedDown && ( event.KeyInput.Key == KEY_RETURN || event.KeyInput.Key == KEY_SPACE ) )
|
||||
{
|
||||
if (Parent)
|
||||
{
|
||||
SEvent e;
|
||||
e.EventType = EET_GUI_EVENT;
|
||||
e.GUIEvent.Caller = this;
|
||||
e.GUIEvent.Element = 0;
|
||||
e.GUIEvent.EventType = EGET_LISTBOX_SELECTED_AGAIN;
|
||||
Parent->OnEvent(e);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if (event.KeyInput.PressedDown && event.KeyInput.Char)
|
||||
{
|
||||
// change selection based on text as it is typed.
|
||||
u32 now = os::Timer::getTime();
|
||||
|
||||
if (now - LastKeyTime < 500)
|
||||
{
|
||||
// add to key buffer if it isn't a key repeat
|
||||
if (!(KeyBuffer.size() == 1 && KeyBuffer[0] == event.KeyInput.Char))
|
||||
{
|
||||
KeyBuffer += L" ";
|
||||
KeyBuffer[KeyBuffer.size()-1] = event.KeyInput.Char;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
KeyBuffer = L" ";
|
||||
KeyBuffer[0] = event.KeyInput.Char;
|
||||
}
|
||||
LastKeyTime = now;
|
||||
|
||||
// find the selected item, starting at the current selection
|
||||
s32 start = Selected;
|
||||
// dont change selection if the key buffer matches the current item
|
||||
if (Selected > -1 && KeyBuffer.size() > 1)
|
||||
{
|
||||
if (Items[Selected].text.size() >= KeyBuffer.size() &&
|
||||
KeyBuffer.equals_ignore_case(Items[Selected].text.subString(0,KeyBuffer.size())))
|
||||
return true;
|
||||
}
|
||||
|
||||
s32 current;
|
||||
for (current = start+1; current < (s32)Items.size(); ++current)
|
||||
{
|
||||
if (Items[current].text.size() >= KeyBuffer.size())
|
||||
{
|
||||
if (KeyBuffer.equals_ignore_case(Items[current].text.subString(0,KeyBuffer.size())))
|
||||
{
|
||||
if (Parent && Selected != current && !Selecting && !MoveOverSelect)
|
||||
{
|
||||
SEvent e;
|
||||
e.EventType = EET_GUI_EVENT;
|
||||
e.GUIEvent.Caller = this;
|
||||
e.GUIEvent.Element = 0;
|
||||
e.GUIEvent.EventType = EGET_LISTBOX_CHANGED;
|
||||
Parent->OnEvent(e);
|
||||
}
|
||||
setSelected(current);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (current = 0; current <= start; ++current)
|
||||
{
|
||||
if (Items[current].text.size() >= KeyBuffer.size())
|
||||
{
|
||||
if (KeyBuffer.equals_ignore_case(Items[current].text.subString(0,KeyBuffer.size())))
|
||||
{
|
||||
if (Parent && Selected != current && !Selecting && !MoveOverSelect)
|
||||
{
|
||||
Selected = current;
|
||||
SEvent e;
|
||||
e.EventType = EET_GUI_EVENT;
|
||||
e.GUIEvent.Caller = this;
|
||||
e.GUIEvent.Element = 0;
|
||||
e.GUIEvent.EventType = EGET_LISTBOX_CHANGED;
|
||||
Parent->OnEvent(e);
|
||||
}
|
||||
setSelected(current);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case gui::EGET_ELEMENT_FOCUS_LOST:
|
||||
|
||||
case EET_GUI_EVENT:
|
||||
switch(event.GUIEvent.EventType)
|
||||
{
|
||||
if (event.GUIEvent.Caller == this)
|
||||
Selecting = false;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
{
|
||||
core::position2d<s32> p(event.MouseInput.X, event.MouseInput.Y);
|
||||
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_MOUSE_WHEEL:
|
||||
ScrollBar->setPos(ScrollBar->getPos() + (s32)event.MouseInput.Wheel*-10);
|
||||
return true;
|
||||
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
{
|
||||
Selecting = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
{
|
||||
Selecting = false;
|
||||
|
||||
if (isPointInside(p))
|
||||
selectNew(event.MouseInput.Y);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if (Selecting || MoveOverSelect)
|
||||
case gui::EGET_SCROLL_BAR_CHANGED:
|
||||
if (event.GUIEvent.Caller == ScrollBar)
|
||||
return true;
|
||||
break;
|
||||
case gui::EGET_ELEMENT_FOCUS_LOST:
|
||||
{
|
||||
if (isPointInside(p))
|
||||
{
|
||||
selectNew(event.MouseInput.Y, true);
|
||||
return true;
|
||||
}
|
||||
if (event.GUIEvent.Caller == this)
|
||||
Selecting = false;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
{
|
||||
core::position2d<s32> p(event.MouseInput.X, event.MouseInput.Y);
|
||||
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_MOUSE_WHEEL:
|
||||
ScrollBar->setPos(ScrollBar->getPos() + (s32)event.MouseInput.Wheel*-10);
|
||||
return true;
|
||||
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
{
|
||||
Selecting = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
{
|
||||
Selecting = false;
|
||||
|
||||
if (isPointInside(p))
|
||||
selectNew(event.MouseInput.Y);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if (Selecting || MoveOverSelect)
|
||||
{
|
||||
if (isPointInside(p))
|
||||
{
|
||||
selectNew(event.MouseInput.Y, true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EET_LOG_TEXT_EVENT:
|
||||
case EET_USER_EVENT:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EET_LOG_TEXT_EVENT:
|
||||
case EET_USER_EVENT:
|
||||
break;
|
||||
}
|
||||
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
return IGUIElement::OnEvent(event);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -99,72 +99,73 @@ void CGUIMenu::draw()
|
|||
//! called if an event happened.
|
||||
bool CGUIMenu::OnEvent(const SEvent& event)
|
||||
{
|
||||
if (!IsEnabled)
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
|
||||
switch(event.EventType)
|
||||
if (IsEnabled)
|
||||
{
|
||||
case EET_GUI_EVENT:
|
||||
switch(event.GUIEvent.EventType)
|
||||
|
||||
switch(event.EventType)
|
||||
{
|
||||
case gui::EGET_ELEMENT_FOCUS_LOST:
|
||||
if (event.GUIEvent.Caller == this && !isMyChild(event.GUIEvent.Element))
|
||||
case EET_GUI_EVENT:
|
||||
switch(event.GUIEvent.EventType)
|
||||
{
|
||||
closeAllSubMenus();
|
||||
HighLighted = -1;
|
||||
case gui::EGET_ELEMENT_FOCUS_LOST:
|
||||
if (event.GUIEvent.Caller == this && !isMyChild(event.GUIEvent.Element))
|
||||
{
|
||||
closeAllSubMenus();
|
||||
HighLighted = -1;
|
||||
}
|
||||
break;
|
||||
case gui::EGET_ELEMENT_FOCUSED:
|
||||
if (event.GUIEvent.Caller == this && Parent)
|
||||
{
|
||||
Parent->bringToFront(this);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case gui::EGET_ELEMENT_FOCUSED:
|
||||
if (event.GUIEvent.Caller == this && Parent)
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
Parent->bringToFront(this);
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
{
|
||||
if (!Environment->hasFocus(this))
|
||||
{
|
||||
Environment->setFocus(this);
|
||||
}
|
||||
|
||||
if (Parent)
|
||||
Parent->bringToFront(this);
|
||||
|
||||
core::position2d<s32> p(event.MouseInput.X, event.MouseInput.Y);
|
||||
bool shouldCloseSubMenu = hasOpenSubMenu();
|
||||
if (!AbsoluteClippingRect.isPointInside(p))
|
||||
{
|
||||
shouldCloseSubMenu = false;
|
||||
s32 t = sendClick(p);
|
||||
if ((t==0 || t==1) && Environment->hasFocus(this))
|
||||
Environment->removeFocus(this);
|
||||
}
|
||||
highlight(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y), true);
|
||||
if ( shouldCloseSubMenu )
|
||||
closeAllSubMenus();
|
||||
|
||||
return true;
|
||||
}
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if (Environment->hasFocus(this))
|
||||
highlight(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y), hasOpenSubMenu());
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
{
|
||||
if (!Environment->hasFocus(this))
|
||||
{
|
||||
Environment->setFocus(this);
|
||||
}
|
||||
|
||||
if (Parent)
|
||||
Parent->bringToFront(this);
|
||||
|
||||
core::position2d<s32> p(event.MouseInput.X, event.MouseInput.Y);
|
||||
bool shouldCloseSubMenu = hasOpenSubMenu();
|
||||
if (!AbsoluteClippingRect.isPointInside(p))
|
||||
{
|
||||
shouldCloseSubMenu = false;
|
||||
s32 t = sendClick(p);
|
||||
if ((t==0 || t==1) && Environment->hasFocus(this))
|
||||
Environment->removeFocus(this);
|
||||
}
|
||||
highlight(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y), true);
|
||||
if ( shouldCloseSubMenu )
|
||||
closeAllSubMenus();
|
||||
|
||||
return true;
|
||||
}
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if (Environment->hasFocus(this))
|
||||
highlight(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y), hasOpenSubMenu());
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
return IGUIElement::OnEvent(event);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -83,7 +83,7 @@ const video::SMaterial& CGUIMeshViewer::getMaterial() const
|
|||
//! called if an event happened.
|
||||
bool CGUIMeshViewer::OnEvent(const SEvent& event)
|
||||
{
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
return IGUIElement::OnEvent(event);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -254,141 +254,144 @@ void CGUIMessageBox::refreshControls()
|
|||
//! called if an event happened.
|
||||
bool CGUIMessageBox::OnEvent(const SEvent& event)
|
||||
{
|
||||
SEvent outevent;
|
||||
outevent.EventType = EET_GUI_EVENT;
|
||||
outevent.GUIEvent.Caller = this;
|
||||
outevent.GUIEvent.Element = 0;
|
||||
|
||||
switch(event.EventType)
|
||||
if (IsEnabled)
|
||||
{
|
||||
case EET_KEY_INPUT_EVENT:
|
||||
SEvent outevent;
|
||||
outevent.EventType = EET_GUI_EVENT;
|
||||
outevent.GUIEvent.Caller = this;
|
||||
outevent.GUIEvent.Element = 0;
|
||||
|
||||
if (event.KeyInput.PressedDown)
|
||||
switch(event.EventType)
|
||||
{
|
||||
switch (event.KeyInput.Key)
|
||||
case EET_KEY_INPUT_EVENT:
|
||||
|
||||
if (event.KeyInput.PressedDown)
|
||||
{
|
||||
case KEY_RETURN:
|
||||
if (OkButton)
|
||||
switch (event.KeyInput.Key)
|
||||
{
|
||||
OkButton->setPressed(true);
|
||||
Pressed = true;
|
||||
case KEY_RETURN:
|
||||
if (OkButton)
|
||||
{
|
||||
OkButton->setPressed(true);
|
||||
Pressed = true;
|
||||
}
|
||||
break;
|
||||
case KEY_KEY_Y:
|
||||
if (YesButton)
|
||||
{
|
||||
YesButton->setPressed(true);
|
||||
Pressed = true;
|
||||
}
|
||||
break;
|
||||
case KEY_KEY_N:
|
||||
if (NoButton)
|
||||
{
|
||||
NoButton->setPressed(true);
|
||||
Pressed = true;
|
||||
}
|
||||
break;
|
||||
case KEY_ESCAPE:
|
||||
if (Pressed)
|
||||
{
|
||||
// cancel press
|
||||
if (OkButton) OkButton->setPressed(false);
|
||||
if (YesButton) OkButton->setPressed(false);
|
||||
if (NoButton) OkButton->setPressed(false);
|
||||
Pressed = false;
|
||||
}
|
||||
else
|
||||
if (CancelButton)
|
||||
{
|
||||
CancelButton->setPressed(true);
|
||||
Pressed = true;
|
||||
}
|
||||
else
|
||||
if (CloseButton && CloseButton->isVisible())
|
||||
{
|
||||
CloseButton->setPressed(true);
|
||||
Pressed = true;
|
||||
}
|
||||
break;
|
||||
default: // no other key is handled here
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case KEY_KEY_Y:
|
||||
if (YesButton)
|
||||
}
|
||||
else
|
||||
if (Pressed)
|
||||
{
|
||||
if (OkButton && event.KeyInput.Key == KEY_RETURN)
|
||||
{
|
||||
YesButton->setPressed(true);
|
||||
Pressed = true;
|
||||
}
|
||||
break;
|
||||
case KEY_KEY_N:
|
||||
if (NoButton)
|
||||
{
|
||||
NoButton->setPressed(true);
|
||||
Pressed = true;
|
||||
}
|
||||
break;
|
||||
case KEY_ESCAPE:
|
||||
if (Pressed)
|
||||
{
|
||||
// cancel press
|
||||
if (OkButton) OkButton->setPressed(false);
|
||||
if (YesButton) OkButton->setPressed(false);
|
||||
if (NoButton) OkButton->setPressed(false);
|
||||
Pressed = false;
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_OK;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (CancelButton)
|
||||
if ((CancelButton || CloseButton) && event.KeyInput.Key == KEY_ESCAPE)
|
||||
{
|
||||
CancelButton->setPressed(true);
|
||||
Pressed = true;
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_CANCEL;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (CloseButton && CloseButton->isVisible())
|
||||
if (YesButton && event.KeyInput.Key == KEY_KEY_Y)
|
||||
{
|
||||
CloseButton->setPressed(true);
|
||||
Pressed = true;
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_YES;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (NoButton && event.KeyInput.Key == KEY_KEY_N)
|
||||
{
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_NO;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
default: // no other key is handled here
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EET_GUI_EVENT:
|
||||
if (event.GUIEvent.EventType == EGET_BUTTON_CLICKED)
|
||||
{
|
||||
if (event.GUIEvent.Caller == OkButton)
|
||||
{
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_OK;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (event.GUIEvent.Caller == CancelButton ||
|
||||
event.GUIEvent.Caller == CloseButton)
|
||||
{
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_CANCEL;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (event.GUIEvent.Caller == YesButton)
|
||||
{
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_YES;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (event.GUIEvent.Caller == NoButton)
|
||||
{
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_NO;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
else
|
||||
if (Pressed)
|
||||
{
|
||||
if (OkButton && event.KeyInput.Key == KEY_RETURN)
|
||||
{
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_OK;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if ((CancelButton || CloseButton) && event.KeyInput.Key == KEY_ESCAPE)
|
||||
{
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_CANCEL;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (YesButton && event.KeyInput.Key == KEY_KEY_Y)
|
||||
{
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_YES;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (NoButton && event.KeyInput.Key == KEY_KEY_N)
|
||||
{
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_NO;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EET_GUI_EVENT:
|
||||
if (event.GUIEvent.EventType == EGET_BUTTON_CLICKED)
|
||||
{
|
||||
if (event.GUIEvent.Caller == OkButton)
|
||||
{
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_OK;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (event.GUIEvent.Caller == CancelButton ||
|
||||
event.GUIEvent.Caller == CloseButton)
|
||||
{
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_CANCEL;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (event.GUIEvent.Caller == YesButton)
|
||||
{
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_YES;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (event.GUIEvent.Caller == NoButton)
|
||||
{
|
||||
outevent.GUIEvent.EventType = EGET_MESSAGEBOX_NO;
|
||||
Parent->OnEvent(outevent);
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return CGUIWindow::OnEvent(event);
|
||||
|
|
|
@ -59,140 +59,43 @@ CGUIScrollBar::~CGUIScrollBar()
|
|||
//! called if an event happened.
|
||||
bool CGUIScrollBar::OnEvent(const SEvent& event)
|
||||
{
|
||||
switch(event.EventType)
|
||||
if (IsEnabled)
|
||||
{
|
||||
case EET_KEY_INPUT_EVENT:
|
||||
if (event.KeyInput.PressedDown)
|
||||
{
|
||||
const s32 oldPos = Pos;
|
||||
bool absorb = true;
|
||||
switch (event.KeyInput.Key)
|
||||
{
|
||||
case KEY_LEFT:
|
||||
case KEY_UP:
|
||||
setPos(Pos-SmallStep);
|
||||
break;
|
||||
case KEY_RIGHT:
|
||||
case KEY_DOWN:
|
||||
setPos(Pos+SmallStep);
|
||||
break;
|
||||
case KEY_HOME:
|
||||
setPos(0);
|
||||
break;
|
||||
case KEY_PRIOR:
|
||||
setPos(Pos-LargeStep);
|
||||
break;
|
||||
case KEY_END:
|
||||
setPos(Max);
|
||||
break;
|
||||
case KEY_NEXT:
|
||||
setPos(Pos+LargeStep);
|
||||
break;
|
||||
default:
|
||||
absorb = false;
|
||||
}
|
||||
|
||||
if (Pos != oldPos)
|
||||
switch(event.EventType)
|
||||
{
|
||||
case EET_KEY_INPUT_EVENT:
|
||||
if (event.KeyInput.PressedDown)
|
||||
{
|
||||
SEvent newEvent;
|
||||
newEvent.EventType = EET_GUI_EVENT;
|
||||
newEvent.GUIEvent.Caller = this;
|
||||
newEvent.GUIEvent.Element = 0;
|
||||
newEvent.GUIEvent.EventType = EGET_SCROLL_BAR_CHANGED;
|
||||
Parent->OnEvent(newEvent);
|
||||
}
|
||||
if (absorb)
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case EET_GUI_EVENT:
|
||||
if (event.GUIEvent.EventType == EGET_BUTTON_CLICKED)
|
||||
{
|
||||
if (event.GUIEvent.Caller == UpButton)
|
||||
setPos(Pos-SmallStep);
|
||||
else
|
||||
if (event.GUIEvent.Caller == DownButton)
|
||||
setPos(Pos+SmallStep);
|
||||
|
||||
SEvent newEvent;
|
||||
newEvent.EventType = EET_GUI_EVENT;
|
||||
newEvent.GUIEvent.Caller = this;
|
||||
newEvent.GUIEvent.Element = 0;
|
||||
newEvent.GUIEvent.EventType = EGET_SCROLL_BAR_CHANGED;
|
||||
Parent->OnEvent(newEvent);
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST)
|
||||
{
|
||||
if (event.GUIEvent.Caller == this)
|
||||
Dragging = false;
|
||||
}
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_MOUSE_WHEEL:
|
||||
if (Environment->hasFocus(this))
|
||||
{ // thanks to a bug report by REAPER
|
||||
setPos(getPos() + (s32)event.MouseInput.Wheel* -SmallStep);
|
||||
SEvent newEvent;
|
||||
newEvent.EventType = EET_GUI_EVENT;
|
||||
newEvent.GUIEvent.Caller = this;
|
||||
newEvent.GUIEvent.Element = 0;
|
||||
newEvent.GUIEvent.EventType = EGET_SCROLL_BAR_CHANGED;
|
||||
Parent->OnEvent(newEvent);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
{
|
||||
if (AbsoluteClippingRect.isPointInside(core::position2di(event.MouseInput.X, event.MouseInput.Y)))
|
||||
{
|
||||
Dragging = true;
|
||||
DraggedBySlider = SliderRect.isPointInside(core::position2di(event.MouseInput.X, event.MouseInput.Y));
|
||||
TrayClick = !DraggedBySlider;
|
||||
DesiredPos = getPosFromMousePos(event.MouseInput.X, event.MouseInput.Y);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if (Dragging)
|
||||
{
|
||||
if (event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP)
|
||||
Dragging = false;
|
||||
|
||||
const s32 newPos = getPosFromMousePos(event.MouseInput.X, event.MouseInput.Y);
|
||||
const s32 oldPos = Pos;
|
||||
|
||||
if (!DraggedBySlider)
|
||||
bool absorb = true;
|
||||
switch (event.KeyInput.Key)
|
||||
{
|
||||
if (AbsoluteClippingRect.isPointInside(core::position2di(event.MouseInput.X, event.MouseInput.Y)))
|
||||
{
|
||||
DraggedBySlider = SliderRect.isPointInside(core::position2di(event.MouseInput.X, event.MouseInput.Y));
|
||||
TrayClick = !DraggedBySlider;
|
||||
}
|
||||
else
|
||||
{
|
||||
TrayClick = false;
|
||||
if (event.MouseInput.Event == EMIE_MOUSE_MOVED)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (DraggedBySlider)
|
||||
{
|
||||
setPos(newPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
DesiredPos = newPos;
|
||||
case KEY_LEFT:
|
||||
case KEY_UP:
|
||||
setPos(Pos-SmallStep);
|
||||
break;
|
||||
case KEY_RIGHT:
|
||||
case KEY_DOWN:
|
||||
setPos(Pos+SmallStep);
|
||||
break;
|
||||
case KEY_HOME:
|
||||
setPos(0);
|
||||
break;
|
||||
case KEY_PRIOR:
|
||||
setPos(Pos-LargeStep);
|
||||
break;
|
||||
case KEY_END:
|
||||
setPos(Max);
|
||||
break;
|
||||
case KEY_NEXT:
|
||||
setPos(Pos+LargeStep);
|
||||
break;
|
||||
default:
|
||||
absorb = false;
|
||||
}
|
||||
|
||||
if (Pos != oldPos && Parent)
|
||||
if (Pos != oldPos)
|
||||
{
|
||||
SEvent newEvent;
|
||||
newEvent.EventType = EET_GUI_EVENT;
|
||||
|
@ -201,15 +104,116 @@ bool CGUIScrollBar::OnEvent(const SEvent& event)
|
|||
newEvent.GUIEvent.EventType = EGET_SCROLL_BAR_CHANGED;
|
||||
Parent->OnEvent(newEvent);
|
||||
}
|
||||
if (absorb)
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case EET_GUI_EVENT:
|
||||
if (event.GUIEvent.EventType == EGET_BUTTON_CLICKED)
|
||||
{
|
||||
if (event.GUIEvent.Caller == UpButton)
|
||||
setPos(Pos-SmallStep);
|
||||
else
|
||||
if (event.GUIEvent.Caller == DownButton)
|
||||
setPos(Pos+SmallStep);
|
||||
|
||||
SEvent newEvent;
|
||||
newEvent.EventType = EET_GUI_EVENT;
|
||||
newEvent.GUIEvent.Caller = this;
|
||||
newEvent.GUIEvent.Element = 0;
|
||||
newEvent.GUIEvent.EventType = EGET_SCROLL_BAR_CHANGED;
|
||||
Parent->OnEvent(newEvent);
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST)
|
||||
{
|
||||
if (event.GUIEvent.Caller == this)
|
||||
Dragging = false;
|
||||
}
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_MOUSE_WHEEL:
|
||||
if (Environment->hasFocus(this))
|
||||
{ // thanks to a bug report by REAPER
|
||||
setPos(getPos() + (s32)event.MouseInput.Wheel* -SmallStep);
|
||||
SEvent newEvent;
|
||||
newEvent.EventType = EET_GUI_EVENT;
|
||||
newEvent.GUIEvent.Caller = this;
|
||||
newEvent.GUIEvent.Element = 0;
|
||||
newEvent.GUIEvent.EventType = EGET_SCROLL_BAR_CHANGED;
|
||||
Parent->OnEvent(newEvent);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
{
|
||||
if (AbsoluteClippingRect.isPointInside(core::position2di(event.MouseInput.X, event.MouseInput.Y)))
|
||||
{
|
||||
Dragging = true;
|
||||
DraggedBySlider = SliderRect.isPointInside(core::position2di(event.MouseInput.X, event.MouseInput.Y));
|
||||
TrayClick = !DraggedBySlider;
|
||||
DesiredPos = getPosFromMousePos(event.MouseInput.X, event.MouseInput.Y);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if (Dragging)
|
||||
{
|
||||
if (event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP)
|
||||
Dragging = false;
|
||||
|
||||
const s32 newPos = getPosFromMousePos(event.MouseInput.X, event.MouseInput.Y);
|
||||
const s32 oldPos = Pos;
|
||||
|
||||
if (!DraggedBySlider)
|
||||
{
|
||||
if (AbsoluteClippingRect.isPointInside(core::position2di(event.MouseInput.X, event.MouseInput.Y)))
|
||||
{
|
||||
DraggedBySlider = SliderRect.isPointInside(core::position2di(event.MouseInput.X, event.MouseInput.Y));
|
||||
TrayClick = !DraggedBySlider;
|
||||
}
|
||||
else
|
||||
{
|
||||
TrayClick = false;
|
||||
if (event.MouseInput.Event == EMIE_MOUSE_MOVED)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (DraggedBySlider)
|
||||
{
|
||||
setPos(newPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
DesiredPos = newPos;
|
||||
}
|
||||
|
||||
if (Pos != oldPos && Parent)
|
||||
{
|
||||
SEvent newEvent;
|
||||
newEvent.EventType = EET_GUI_EVENT;
|
||||
newEvent.GUIEvent.Caller = this;
|
||||
newEvent.GUIEvent.Element = 0;
|
||||
newEvent.GUIEvent.EventType = EGET_SCROLL_BAR_CHANGED;
|
||||
Parent->OnEvent(newEvent);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return IGUIElement::OnEvent(event);
|
||||
|
|
|
@ -161,51 +161,54 @@ void CGUISpinBox::setDecimalPlaces(s32 places)
|
|||
|
||||
bool CGUISpinBox::OnEvent(const SEvent& event)
|
||||
{
|
||||
bool changeEvent = false;
|
||||
switch(event.EventType)
|
||||
if (IsEnabled)
|
||||
{
|
||||
case EET_GUI_EVENT:
|
||||
if (event.GUIEvent.EventType == EGET_BUTTON_CLICKED)
|
||||
bool changeEvent = false;
|
||||
switch(event.EventType)
|
||||
{
|
||||
if (event.GUIEvent.Caller == ButtonSpinUp)
|
||||
case EET_GUI_EVENT:
|
||||
if (event.GUIEvent.EventType == EGET_BUTTON_CLICKED)
|
||||
{
|
||||
f32 val = getValue();
|
||||
val += StepSize;
|
||||
setValue(val);
|
||||
changeEvent = true;
|
||||
if (event.GUIEvent.Caller == ButtonSpinUp)
|
||||
{
|
||||
f32 val = getValue();
|
||||
val += StepSize;
|
||||
setValue(val);
|
||||
changeEvent = true;
|
||||
}
|
||||
else if ( event.GUIEvent.Caller == ButtonSpinDown)
|
||||
{
|
||||
f32 val = getValue();
|
||||
val -= StepSize;
|
||||
setValue(val);
|
||||
changeEvent = true;
|
||||
}
|
||||
}
|
||||
else if ( event.GUIEvent.Caller == ButtonSpinDown)
|
||||
if ( event.GUIEvent.EventType == EGET_EDITBOX_ENTER )
|
||||
{
|
||||
f32 val = getValue();
|
||||
val -= StepSize;
|
||||
setValue(val);
|
||||
changeEvent = true;
|
||||
if (event.GUIEvent.Caller == EditBox)
|
||||
{
|
||||
verifyValueRange();
|
||||
changeEvent = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( event.GUIEvent.EventType == EGET_EDITBOX_ENTER )
|
||||
{
|
||||
if (event.GUIEvent.Caller == EditBox)
|
||||
{
|
||||
verifyValueRange();
|
||||
changeEvent = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( changeEvent )
|
||||
{
|
||||
SEvent e;
|
||||
e.EventType = EET_GUI_EVENT;
|
||||
e.GUIEvent.Caller = this;
|
||||
e.GUIEvent.Element = 0;
|
||||
if ( changeEvent )
|
||||
{
|
||||
SEvent e;
|
||||
e.EventType = EET_GUI_EVENT;
|
||||
e.GUIEvent.Caller = this;
|
||||
e.GUIEvent.Element = 0;
|
||||
|
||||
e.GUIEvent.EventType = EGET_SPINBOX_CHANGED;
|
||||
if ( Parent )
|
||||
Parent->OnEvent(e);
|
||||
return true;
|
||||
e.GUIEvent.EventType = EGET_SPINBOX_CHANGED;
|
||||
if ( Parent )
|
||||
Parent->OnEvent(e);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return IGUIElement::OnEvent(event);
|
||||
|
|
|
@ -323,50 +323,51 @@ IGUITab* CGUITabControl::getTab(s32 idx) const
|
|||
//! called if an event happened.
|
||||
bool CGUITabControl::OnEvent(const SEvent& event)
|
||||
{
|
||||
if (!IsEnabled)
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
|
||||
switch(event.EventType)
|
||||
if (IsEnabled)
|
||||
{
|
||||
case EET_GUI_EVENT:
|
||||
switch(event.GUIEvent.EventType)
|
||||
{
|
||||
case EGET_BUTTON_CLICKED:
|
||||
if (event.GUIEvent.Caller == UpButton)
|
||||
{
|
||||
scrollLeft();
|
||||
return true;
|
||||
}
|
||||
else if (event.GUIEvent.Caller == DownButton)
|
||||
{
|
||||
scrollRight();
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
switch(event.MouseInput.Event)
|
||||
switch(event.EventType)
|
||||
{
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
// todo: dragging tabs around
|
||||
return true;
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
if (selectTab(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y)))
|
||||
case EET_GUI_EVENT:
|
||||
switch(event.GUIEvent.EventType)
|
||||
{
|
||||
case EGET_BUTTON_CLICKED:
|
||||
if (event.GUIEvent.Caller == UpButton)
|
||||
{
|
||||
scrollLeft();
|
||||
return true;
|
||||
}
|
||||
else if (event.GUIEvent.Caller == DownButton)
|
||||
{
|
||||
scrollRight();
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
// todo: dragging tabs around
|
||||
return true;
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
if (selectTab(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y)))
|
||||
return true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
return IGUIElement::OnEvent(event);
|
||||
}
|
||||
|
||||
void CGUITabControl::scrollLeft()
|
||||
|
|
|
@ -502,129 +502,132 @@ void CGUITable::refreshControls()
|
|||
//! called if an event happened.
|
||||
bool CGUITable::OnEvent(const SEvent &event)
|
||||
{
|
||||
|
||||
switch(event.EventType)
|
||||
if (IsEnabled)
|
||||
{
|
||||
case EET_GUI_EVENT:
|
||||
switch(event.GUIEvent.EventType)
|
||||
|
||||
switch(event.EventType)
|
||||
{
|
||||
case gui::EGET_SCROLL_BAR_CHANGED:
|
||||
if (event.GUIEvent.Caller == VerticalScrollBar)
|
||||
case EET_GUI_EVENT:
|
||||
switch(event.GUIEvent.EventType)
|
||||
{
|
||||
// current position will get read out in draw
|
||||
return true;
|
||||
}
|
||||
if (event.GUIEvent.Caller == HorizontalScrollBar)
|
||||
{
|
||||
// current position will get read out in draw
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case gui::EGET_ELEMENT_FOCUS_LOST:
|
||||
{
|
||||
CurrentResizedColumn = -1;
|
||||
Selecting = false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
{
|
||||
if ( !IsEnabled )
|
||||
return false;
|
||||
|
||||
core::position2d<s32> p(event.MouseInput.X, event.MouseInput.Y);
|
||||
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_MOUSE_WHEEL:
|
||||
VerticalScrollBar->setPos(VerticalScrollBar->getPos() + (s32)event.MouseInput.Wheel*-10);
|
||||
return true;
|
||||
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
|
||||
if (Environment->hasFocus(this) &&
|
||||
VerticalScrollBar->isVisible() &&
|
||||
VerticalScrollBar->getAbsolutePosition().isPointInside(p) &&
|
||||
VerticalScrollBar->OnEvent(event))
|
||||
return true;
|
||||
|
||||
if (Environment->hasFocus(this) &&
|
||||
HorizontalScrollBar->isVisible() &&
|
||||
HorizontalScrollBar->getAbsolutePosition().isPointInside(p) &&
|
||||
HorizontalScrollBar->OnEvent(event))
|
||||
return true;
|
||||
|
||||
if ( dragColumnStart( event.MouseInput.X, event.MouseInput.Y ) )
|
||||
case gui::EGET_SCROLL_BAR_CHANGED:
|
||||
if (event.GUIEvent.Caller == VerticalScrollBar)
|
||||
{
|
||||
Environment->setFocus(this);
|
||||
// current position will get read out in draw
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( selectColumnHeader( event.MouseInput.X, event.MouseInput.Y ) )
|
||||
return true;
|
||||
|
||||
Selecting = true;
|
||||
Environment->setFocus(this);
|
||||
return true;
|
||||
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
|
||||
CurrentResizedColumn = -1;
|
||||
Selecting = false;
|
||||
if (!getAbsolutePosition().isPointInside(p))
|
||||
{
|
||||
Environment->removeFocus(this);
|
||||
}
|
||||
|
||||
if (Environment->hasFocus(this) &&
|
||||
VerticalScrollBar->isVisible() &&
|
||||
VerticalScrollBar->getAbsolutePosition().isPointInside(p) &&
|
||||
VerticalScrollBar->OnEvent(event))
|
||||
if (event.GUIEvent.Caller == HorizontalScrollBar)
|
||||
{
|
||||
// current position will get read out in draw
|
||||
return true;
|
||||
}
|
||||
|
||||
if (Environment->hasFocus(this) &&
|
||||
HorizontalScrollBar->isVisible() &&
|
||||
HorizontalScrollBar->getAbsolutePosition().isPointInside(p) &&
|
||||
HorizontalScrollBar->OnEvent(event))
|
||||
break;
|
||||
case gui::EGET_ELEMENT_FOCUS_LOST:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
selectNew(event.MouseInput.Y);
|
||||
return true;
|
||||
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if ( CurrentResizedColumn >= 0 )
|
||||
{
|
||||
if ( dragColumnUpdate(event.MouseInput.X) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (Selecting || MoveOverSelect)
|
||||
{
|
||||
if (getAbsolutePosition().isPointInside(p))
|
||||
{
|
||||
selectNew(event.MouseInput.Y);
|
||||
return true;
|
||||
}
|
||||
CurrentResizedColumn = -1;
|
||||
Selecting = false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
{
|
||||
if ( !IsEnabled )
|
||||
return false;
|
||||
|
||||
core::position2d<s32> p(event.MouseInput.X, event.MouseInput.Y);
|
||||
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_MOUSE_WHEEL:
|
||||
VerticalScrollBar->setPos(VerticalScrollBar->getPos() + (s32)event.MouseInput.Wheel*-10);
|
||||
return true;
|
||||
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
|
||||
if (Environment->hasFocus(this) &&
|
||||
VerticalScrollBar->isVisible() &&
|
||||
VerticalScrollBar->getAbsolutePosition().isPointInside(p) &&
|
||||
VerticalScrollBar->OnEvent(event))
|
||||
return true;
|
||||
|
||||
if (Environment->hasFocus(this) &&
|
||||
HorizontalScrollBar->isVisible() &&
|
||||
HorizontalScrollBar->getAbsolutePosition().isPointInside(p) &&
|
||||
HorizontalScrollBar->OnEvent(event))
|
||||
return true;
|
||||
|
||||
if ( dragColumnStart( event.MouseInput.X, event.MouseInput.Y ) )
|
||||
{
|
||||
Environment->setFocus(this);
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( selectColumnHeader( event.MouseInput.X, event.MouseInput.Y ) )
|
||||
return true;
|
||||
|
||||
Selecting = true;
|
||||
Environment->setFocus(this);
|
||||
return true;
|
||||
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
|
||||
CurrentResizedColumn = -1;
|
||||
Selecting = false;
|
||||
if (!getAbsolutePosition().isPointInside(p))
|
||||
{
|
||||
Environment->removeFocus(this);
|
||||
}
|
||||
|
||||
if (Environment->hasFocus(this) &&
|
||||
VerticalScrollBar->isVisible() &&
|
||||
VerticalScrollBar->getAbsolutePosition().isPointInside(p) &&
|
||||
VerticalScrollBar->OnEvent(event))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (Environment->hasFocus(this) &&
|
||||
HorizontalScrollBar->isVisible() &&
|
||||
HorizontalScrollBar->getAbsolutePosition().isPointInside(p) &&
|
||||
HorizontalScrollBar->OnEvent(event))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
selectNew(event.MouseInput.Y);
|
||||
return true;
|
||||
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if ( CurrentResizedColumn >= 0 )
|
||||
{
|
||||
if ( dragColumnUpdate(event.MouseInput.X) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (Selecting || MoveOverSelect)
|
||||
{
|
||||
if (getAbsolutePosition().isPointInside(p))
|
||||
{
|
||||
selectNew(event.MouseInput.Y);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
return IGUIElement::OnEvent(event);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -67,14 +67,17 @@ CGUIToolBar::CGUIToolBar(IGUIEnvironment* environment, IGUIElement* parent, s32
|
|||
//! called if an event happened.
|
||||
bool CGUIToolBar::OnEvent(const SEvent& event)
|
||||
{
|
||||
if (event.EventType == EET_MOUSE_INPUT_EVENT &&
|
||||
event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN)
|
||||
if (IsEnabled)
|
||||
{
|
||||
if (AbsoluteClippingRect.isPointInside(core::position2di(event.MouseInput.X, event.MouseInput.Y)))
|
||||
return true;
|
||||
if (event.EventType == EET_MOUSE_INPUT_EVENT &&
|
||||
event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN)
|
||||
{
|
||||
if (AbsoluteClippingRect.isPointInside(core::position2di(event.MouseInput.X, event.MouseInput.Y)))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return Parent ? Parent->OnEvent(event) : false;
|
||||
return IGUIElement::OnEvent(event);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -109,85 +109,89 @@ CGUIWindow::~CGUIWindow()
|
|||
//! called if an event happened.
|
||||
bool CGUIWindow::OnEvent(const SEvent& event)
|
||||
{
|
||||
switch(event.EventType)
|
||||
if (IsEnabled)
|
||||
{
|
||||
case EET_GUI_EVENT:
|
||||
if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST)
|
||||
|
||||
switch(event.EventType)
|
||||
{
|
||||
Dragging = false;
|
||||
}
|
||||
else
|
||||
if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUSED)
|
||||
{
|
||||
if (Parent && ((event.GUIEvent.Caller == this) || isMyChild(event.GUIEvent.Caller)))
|
||||
Parent->bringToFront(this);
|
||||
}
|
||||
else
|
||||
if (event.GUIEvent.EventType == EGET_BUTTON_CLICKED)
|
||||
{
|
||||
if (event.GUIEvent.Caller == CloseButton)
|
||||
case EET_GUI_EVENT:
|
||||
if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST)
|
||||
{
|
||||
if (Parent)
|
||||
{
|
||||
// send close event to parent
|
||||
SEvent e;
|
||||
e.EventType = EET_GUI_EVENT;
|
||||
e.GUIEvent.Caller = this;
|
||||
e.GUIEvent.Element = 0;
|
||||
e.GUIEvent.EventType = EGET_ELEMENT_CLOSED;
|
||||
|
||||
// if the event was not absorbed
|
||||
if (!Parent->OnEvent(e))
|
||||
remove();
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
Dragging = false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
DragStart.X = event.MouseInput.X;
|
||||
DragStart.Y = event.MouseInput.Y;
|
||||
Dragging = true;
|
||||
if (Parent)
|
||||
Parent->bringToFront(this);
|
||||
return true;
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
Dragging = false;
|
||||
return true;
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if (Dragging)
|
||||
else
|
||||
if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUSED)
|
||||
{
|
||||
// gui window should not be dragged outside its parent
|
||||
if (Parent)
|
||||
if (event.MouseInput.X < Parent->getAbsolutePosition().UpperLeftCorner.X +1 ||
|
||||
event.MouseInput.Y < Parent->getAbsolutePosition().UpperLeftCorner.Y +1 ||
|
||||
event.MouseInput.X > Parent->getAbsolutePosition().LowerRightCorner.X -1 ||
|
||||
event.MouseInput.Y > Parent->getAbsolutePosition().LowerRightCorner.Y -1)
|
||||
if (Parent && ((event.GUIEvent.Caller == this) || isMyChild(event.GUIEvent.Caller)))
|
||||
Parent->bringToFront(this);
|
||||
}
|
||||
else
|
||||
if (event.GUIEvent.EventType == EGET_BUTTON_CLICKED)
|
||||
{
|
||||
if (event.GUIEvent.Caller == CloseButton)
|
||||
{
|
||||
if (Parent)
|
||||
{
|
||||
// send close event to parent
|
||||
SEvent e;
|
||||
e.EventType = EET_GUI_EVENT;
|
||||
e.GUIEvent.Caller = this;
|
||||
e.GUIEvent.Element = 0;
|
||||
e.GUIEvent.EventType = EGET_ELEMENT_CLOSED;
|
||||
|
||||
// if the event was not absorbed
|
||||
if (!Parent->OnEvent(e))
|
||||
remove();
|
||||
|
||||
return true;
|
||||
|
||||
|
||||
move(core::position2d<s32>(event.MouseInput.X - DragStart.X, event.MouseInput.Y - DragStart.Y));
|
||||
DragStart.X = event.MouseInput.X;
|
||||
DragStart.Y = event.MouseInput.Y;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
remove();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EET_MOUSE_INPUT_EVENT:
|
||||
switch(event.MouseInput.Event)
|
||||
{
|
||||
case EMIE_LMOUSE_PRESSED_DOWN:
|
||||
DragStart.X = event.MouseInput.X;
|
||||
DragStart.Y = event.MouseInput.Y;
|
||||
Dragging = true;
|
||||
if (Parent)
|
||||
Parent->bringToFront(this);
|
||||
return true;
|
||||
case EMIE_LMOUSE_LEFT_UP:
|
||||
Dragging = false;
|
||||
return true;
|
||||
case EMIE_MOUSE_MOVED:
|
||||
if (Dragging)
|
||||
{
|
||||
// gui window should not be dragged outside its parent
|
||||
if (Parent)
|
||||
if (event.MouseInput.X < Parent->getAbsolutePosition().UpperLeftCorner.X +1 ||
|
||||
event.MouseInput.Y < Parent->getAbsolutePosition().UpperLeftCorner.Y +1 ||
|
||||
event.MouseInput.X > Parent->getAbsolutePosition().LowerRightCorner.X -1 ||
|
||||
event.MouseInput.Y > Parent->getAbsolutePosition().LowerRightCorner.Y -1)
|
||||
|
||||
return true;
|
||||
|
||||
|
||||
move(core::position2d<s32>(event.MouseInput.X - DragStart.X, event.MouseInput.Y - DragStart.Y));
|
||||
DragStart.X = event.MouseInput.X;
|
||||
DragStart.Y = event.MouseInput.Y;
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return IGUIElement::OnEvent(event);
|
||||
|
|
Loading…
Reference in New Issue