add initial examples, replacing the 'Demos/Demos3'. Will make it work cross-platform, OpenGL3/OpenGL2 and add more examples to it.
This commit is contained in:
137
examples/ThirdPartyLibs/Gwen/Controls/MenuItem.cpp
Normal file
137
examples/ThirdPartyLibs/Gwen/Controls/MenuItem.cpp
Normal file
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
GWEN
|
||||
Copyright (c) 2010 Facepunch Studios
|
||||
See license in Gwen.h
|
||||
*/
|
||||
|
||||
|
||||
#include "Gwen/Gwen.h"
|
||||
#include "Gwen/Controls/MenuItem.h"
|
||||
#include "Gwen/Skin.h"
|
||||
|
||||
using namespace Gwen;
|
||||
using namespace Gwen::Controls;
|
||||
|
||||
GWEN_CONTROL_CONSTRUCTOR( MenuItem )
|
||||
{
|
||||
m_Menu = NULL;
|
||||
m_bOnStrip = false;
|
||||
m_SubmenuArrow = NULL;
|
||||
SetTabable( false );
|
||||
SetCheckable( false );
|
||||
SetCheck( false );
|
||||
}
|
||||
|
||||
MenuItem::~MenuItem()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MenuItem::Render( Skin::Base* skin )
|
||||
{
|
||||
skin->DrawMenuItem( this, IsMenuOpen(), m_bCheckable ? m_bChecked : false );
|
||||
}
|
||||
|
||||
void MenuItem::Layout( Skin::Base* skin )
|
||||
{
|
||||
BaseClass::Layout( skin );
|
||||
|
||||
}
|
||||
|
||||
Menu* MenuItem::GetMenu()
|
||||
{
|
||||
if ( !m_Menu )
|
||||
{
|
||||
m_Menu = new Menu( GetCanvas() );
|
||||
m_Menu->SetHidden( true );
|
||||
|
||||
if ( !m_bOnStrip )
|
||||
{
|
||||
m_SubmenuArrow = new Symbol::Arrow( this );
|
||||
m_SubmenuArrow->Dock( Pos::Right );
|
||||
m_SubmenuArrow->SetSize( 20, 20 );
|
||||
}
|
||||
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
return m_Menu;
|
||||
}
|
||||
|
||||
void MenuItem::SetCheck( bool bCheck )
|
||||
{
|
||||
if ( bCheck == m_bChecked)
|
||||
return;
|
||||
|
||||
m_bChecked = bCheck;
|
||||
|
||||
onCheckChange.Call( this );
|
||||
|
||||
if ( bCheck )
|
||||
onChecked.Call( this );
|
||||
else
|
||||
onUnChecked.Call( this );
|
||||
}
|
||||
|
||||
void MenuItem::OnPress()
|
||||
{
|
||||
if ( m_Menu )
|
||||
{
|
||||
ToggleMenu();
|
||||
}
|
||||
else if ( !m_bOnStrip )
|
||||
{
|
||||
SetCheck( !GetChecked() );
|
||||
onMenuItemSelected.Call( this );
|
||||
GetCanvas()->CloseMenus();
|
||||
}
|
||||
|
||||
BaseClass::OnPress();
|
||||
}
|
||||
|
||||
void MenuItem::ToggleMenu()
|
||||
{
|
||||
if ( IsMenuOpen() ) CloseMenu();
|
||||
else OpenMenu();
|
||||
}
|
||||
|
||||
bool MenuItem::IsMenuOpen()
|
||||
{
|
||||
if ( !m_Menu ) return false;
|
||||
|
||||
return !m_Menu->Hidden();
|
||||
}
|
||||
|
||||
void MenuItem::OpenMenu()
|
||||
{
|
||||
if ( !m_Menu ) return;
|
||||
|
||||
m_Menu->SetHidden( false );
|
||||
m_Menu->BringToFront();
|
||||
|
||||
Gwen::Point p = LocalPosToCanvas( Gwen::Point( 0, 0 ) );
|
||||
|
||||
// Strip menus open downwards
|
||||
if ( m_bOnStrip )
|
||||
{
|
||||
m_Menu->SetPos( p.x, p.y + Height() + 1 );
|
||||
}
|
||||
// Submenus open sidewards
|
||||
else
|
||||
{
|
||||
m_Menu->SetPos( p.x + Width(), p.y);
|
||||
}
|
||||
|
||||
// TODO: Option this.
|
||||
// TODO: Make sure on screen, open the other side of the
|
||||
// parent if it's better...
|
||||
|
||||
|
||||
}
|
||||
|
||||
void MenuItem::CloseMenu()
|
||||
{
|
||||
if ( !m_Menu ) return;
|
||||
m_Menu->Close();
|
||||
m_Menu->CloseAll();
|
||||
}
|
||||
Reference in New Issue
Block a user