123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- /*
- GWEN
- Copyright (c) 2010 Facepunch Studios
- See license in Gwen.h
- */
- #include "Gwen/Gwen.h"
- #include "Gwen/Skin.h"
- #include "Gwen/Controls/Properties.h"
- #include "Gwen/Utility.h"
- using namespace Gwen;
- using namespace Gwen::Controls;
- GWEN_CONTROL_CONSTRUCTOR( Properties )
- {
- m_SplitterBar = new SplitterBar( this );
- m_SplitterBar->SetPos( 80, 0 );
- m_SplitterBar->SetCursor( Gwen::CursorType::SizeWE );
- m_SplitterBar->onDragged.Add( this, &Properties::OnSplitterMoved );
- m_SplitterBar->SetShouldDrawBackground( false );
- }
- void Properties::PostLayout( Gwen::Skin::Base* /*skin*/ )
- {
- m_SplitterBar->SetHeight( 0 );
- if ( SizeToChildren( false, true ) )
- {
- InvalidateParent();
- }
- m_SplitterBar->SetSize( 3, Height() );
- }
- void Properties::OnSplitterMoved( Controls::Base * /*control*/ )
- {
- InvalidateChildren();
- }
- int Properties::GetSplitWidth()
- {
- return m_SplitterBar->X();
- }
- PropertyRow* Properties::Add( const UnicodeString& text, const UnicodeString& value )
- {
- Property::Base* pProp = new Property::Text( this );
- pProp->SetPropertyValue( value );
- return Add( text, pProp );
- }
- PropertyRow* Properties::Add( const String& text, const String& value )
- {
- return Add( Gwen::Utility::StringToUnicode( text ), Gwen::Utility::StringToUnicode( value ) );
- }
- PropertyRow* Properties::Add( const UnicodeString& text, Property::Base* pProp )
- {
- PropertyRow* row = new PropertyRow( this );
- row->Dock( Pos::Top );
- row->GetLabel()->SetText( text );
- row->SetProperty( pProp );
- m_SplitterBar->BringToFront();
- return row;
- }
- PropertyRow* Properties::Add( const String& text, Property::Base* pProp )
- {
- return Add( Gwen::Utility::StringToUnicode( text ), pProp );
- }
- void Properties::Clear()
- {
- Base::List ChildListCopy = Children;
- for ( Base::List::iterator it = ChildListCopy.begin(); it != ChildListCopy.end(); ++it )
- {
- PropertyRow* row = (*it)->DynamicCastPropertyRow();
- if ( !row ) continue;
- row->DelayedDelete();
- }
- }
- GWEN_CONTROL_CONSTRUCTOR( PropertyRow )
- {
- m_Property = NULL;
- m_Label = new Label( this );
- m_Label->SetAlignment( Pos::CenterV | Pos::Left );
- m_Label->Dock( Pos::Left );
- m_Label->SetMargin( Margin( 2, 0, 0, 0 ) );
- SetHeight( 16 );
- }
- void PropertyRow::Render( Gwen::Skin::Base* skin )
- {
- skin->DrawPropertyRow( this, m_Label->Right(), m_Property->IsEditing() );
- }
- void PropertyRow::Layout( Gwen::Skin::Base* /*skin*/ )
- {
- Properties* pParent = GetParent()->DynamicCastProperties();
- if ( !pParent ) return;
- m_Label->SetWidth( pParent->GetSplitWidth() );
- }
- void PropertyRow::SetProperty( Property::Base* prop )
- {
- m_Property = prop;
- m_Property->SetParent( this );
- m_Property->Dock( Pos::Fill );
- m_Property->onChange.Add( this, &ThisClass::OnPropertyValueChanged );
- }
- void PropertyRow::OnPropertyValueChanged( Gwen::Controls::Base* /*control*/ )
- {
- onChange.Call( this );
- }
|