irrlicht/source/Irrlicht.NET/IGUIEnvironment.cpp

262 lines
6.5 KiB
C++

// Copyright (C) 2002-2006 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#include "IGUIEnvironment.h"
#include "NativeConverter.h"
#include "IGUIFont.h"
#include "IGUIElement.h"
#include "IGUIListBox.h"
#include "IGUIStaticText.h"
#include <vcclr.h> // for PtrToStringChars
namespace Irrlicht
{
namespace GUI
{
IGUIEnvironment::IGUIEnvironment(irr::gui::IGUIEnvironment* env)
: Environment(env), BuildInFont(0)
{
Environment->grab();
irr::gui::IGUIFont* font = Environment->getBuiltInFont();
if (font)
BuildInFont = new IGUIFont(font);
}
IGUIEnvironment::~IGUIEnvironment()
{
if ( Environment )
Environment->drop();
Environment = 0;
}
IGUIFont* IGUIEnvironment::GetFont(System::String* filename)
{
char* str = (char*)(void*)
System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(filename);
irr::gui::IGUIFont* font = Environment->getFont(str);
System::Runtime::InteropServices::Marshal::FreeHGlobal(str);
if (!font)
return 0;
return new IGUIFont(font);
}
IGUIFont* IGUIEnvironment::get_BuiltInFont()
{
return BuildInFont;
}
void IGUIEnvironment::SetFocus(IGUIElement* element)
{
Environment->setFocus(element ? element->get_NativeElement() : 0);
}
void IGUIEnvironment::RemoveFocus(IGUIElement* element)
{
Environment->removeFocus(element ? element->get_NativeElement() : 0);
}
void IGUIEnvironment::DrawAll()
{
Environment->drawAll();
}
bool IGUIEnvironment::HasFocus(IGUIElement* element)
{
return Environment->hasFocus(element ? element->get_NativeElement() : 0);
}
IGUISkin* IGUIEnvironment::CreateSkin(SkinType type)
{
return new IGUISkin(Environment->createSkin((irr::gui::EGUI_SKIN_TYPE)type));
}
void IGUIEnvironment::set_Skin(IGUISkin* skin)
{
Environment->setSkin(skin ? skin->get_NativeSkin() : 0);
}
IGUISkin* IGUIEnvironment::get_Skin()
{
irr::gui::IGUISkin* s = Environment->getSkin();
if (!s)
return 0;
return new IGUISkin(s);
}
IGUIElement* IGUIEnvironment::get_RootGUIElement()
{
return new IGUIElement(Environment->getRootGUIElement());
}
IGUIElement* IGUIEnvironment::AddButton(Core::Rect position, IGUIElement* parent, int id,
System::String* text)
{
const wchar_t __pin* pinchars = PtrToStringChars(text);
irr::gui::IGUIElement* e = Environment->addButton(
irr::NativeConverter::getNativeRect(position),
parent ? parent->get_NativeElement() : 0,
id, pinchars);
if (!e)
return 0;
return new IGUIElement(e);
}
IGUIElement* IGUIEnvironment::AddWindow(Core::Rect position, bool modal,
System::String* text, IGUIElement* parent, int id)
{
const wchar_t __pin* pinchars = PtrToStringChars(text);
irr::gui::IGUIElement* e = Environment->addWindow(
irr::NativeConverter::getNativeRect(position), modal, pinchars,
parent ? parent->get_NativeElement() : 0, id);
if (!e)
return 0;
return new IGUIElement(e);
}
IGUIElement* IGUIEnvironment::AddMessageBox(System::String* caption, System::String* text,
bool modal, MessageBoxFlag flags, IGUIElement* parent, int id)
{
const wchar_t __pin* ncaption = PtrToStringChars(caption);
const wchar_t __pin* ntext = PtrToStringChars(text);
irr::gui::IGUIElement* e = Environment->addMessageBox(
ncaption, ntext, modal, flags,
parent ? parent->get_NativeElement() : 0, id);
if (!e)
return 0;
return new IGUIElement(e);
}
IGUIElement* IGUIEnvironment::AddScrollBar(bool horizontal, Core::Rect position,
IGUIElement* parent, int id)
{
irr::gui::IGUIElement* e = Environment->addScrollBar(horizontal,
irr::NativeConverter::getNativeRect(position),
parent ? parent->get_NativeElement() : 0, id);
if (!e)
return 0;
return new IGUIElement(e);
}
IGUIElement* IGUIEnvironment::AddImage(Video::ITexture* image, Core::Position2D pos,
bool useAlphaChannel, IGUIElement* parent, int id, System::String* text)
{
const wchar_t __pin* ntext = PtrToStringChars(text);
irr::gui::IGUIElement* e = Environment->addImage(
image ? image->get_NativeTexture() : 0,
irr::NativeConverter::getNativePos(pos),
useAlphaChannel,
parent ? parent->get_NativeElement() : 0, id,
ntext);
if (!e)
return 0;
return new IGUIElement(e);
}
IGUIElement* IGUIEnvironment::AddCheckBox(bool checked, Core::Rect position,
IGUIElement* parent, int id, System::String* text)
{
const wchar_t __pin* ntext = PtrToStringChars(text);
irr::gui::IGUIElement* e = Environment->addCheckBox(
checked,
irr::NativeConverter::getNativeRect(position),
parent ? parent->get_NativeElement() : 0, id, ntext);
if (!e)
return 0;
return new IGUIElement(e);
}
IGUIListBox* IGUIEnvironment::AddListBox(Core::Rect position, IGUIElement* parent,
int id, bool drawBackGround)
{
irr::gui::IGUIListBox* e = Environment->addListBox(
irr::NativeConverter::getNativeRect(position),
parent ? parent->get_NativeElement() : 0, id, drawBackGround);
if (!e)
return 0;
return new IGUIListBox(e);
}
IGUIElement* IGUIEnvironment::AddFileOpenDialog(System::String* text, bool modal,
IGUIElement* parent, int id)
{
const wchar_t __pin* ntext = PtrToStringChars(text);
irr::gui::IGUIElement* e = Environment->addFileOpenDialog(
ntext, modal, parent ? parent->get_NativeElement() : 0, id);
if (!e)
return 0;
return new IGUIElement(e);
}
IGUIStaticText* IGUIEnvironment::AddStaticText(System::String* text, Core::Rect position,
bool border, bool wordWrap, IGUIElement* parent, int id)
{
const wchar_t __pin* ntext = PtrToStringChars(text);
irr::gui::IGUIStaticText* e = Environment->addStaticText(
ntext,
irr::NativeConverter::getNativeRect(position),
border, wordWrap,
parent ? parent->get_NativeElement() : 0, id);
if (!e)
return 0;
return new IGUIStaticText(e);
}
IGUIElement* IGUIEnvironment::AddEditBox(System::String* text, Core::Rect position,
bool border, IGUIElement* parent, int id)
{
const wchar_t __pin* ntext = PtrToStringChars(text);
irr::gui::IGUIElement* e = Environment->addEditBox(
ntext,
irr::NativeConverter::getNativeRect(position),
border, parent ? parent->get_NativeElement() : 0, id);
if (!e)
return 0;
return new IGUIElement(e);
}
}
}