void NBEditor::load_ui()
{
	IGUIStaticText *sidebar = state->menu->sidebar;

	if (!sidebar) {
		return;
	}

	IGUIEnvironment *guienv = state->device->getGUIEnvironment();
	Node *node = state->project->GetCurrentNode();
	if (!node) {
		sidebar->getElementFromId(ENB_GUI_MAIN_MSG)->setVisible(true);
		sidebar->getElementFromId(ENB_GUI_MAIN_LISTBOX)->setVisible(false);
		sidebar->getElementFromId(ENB_GUI_PROP)->setVisible(false);
	} else {
		IGUIListBox *lb = (IGUIListBox *) sidebar->getElementFromId(ENB_GUI_MAIN_LISTBOX);		
		sidebar->getElementFromId(ENB_GUI_MAIN_MSG)->setVisible(false);
		sidebar->getElementFromId(ENB_GUI_PROP)->setVisible(false);

		if (lb) {
			lb->clear();
			lb->setVisible(true);
			std::vector<NodeBox*> & boxes = node->boxes;
			for (std::vector<NodeBox*>::const_iterator it = boxes.begin();
					it != boxes.end();
					++it) {
				lb->addItem(narrow_to_wide((*it)->name).c_str());
			}
			lb->setSelected(lb->getListItem(node->GetId()));
		}

		fillProperties();
	}
}
GUIAnchorEffector::GUIAnchorEffector(EPosAnchor anch,const math::vector2d& offset):
	m_anchor(anch),
	Anchor(this,&GUIAnchorEffector::setAnchor,&GUIAnchorEffector::getAnchor,mT("EPosAnchor"),mT("Anchor")),
	Offset(this,&GUIAnchorEffector::setOffset,&GUIAnchorEffector::getOffset,EPT_VECTOR2Df,mT("Offset"))
{
	m_offset=offset;
	fillProperties();
}
GUITranslateEffector::GUITranslateEffector(math::vector2d startP,math::vector2d endP,float speed):
	StartPos(this,&GUITranslateEffector::setStartPos,&GUITranslateEffector::getStartPos,EPT_VECTOR2Df,mT("StartPos")),
	EndPos(this,&GUITranslateEffector::setEndPos,&GUITranslateEffector::getEndPos,EPT_VECTOR2Df,mT("EndPos")),
	Speed(this,&GUITranslateEffector::setSpeed,&GUITranslateEffector::getSpeed,EPT_FLOAT,mT("Speed")),
	AutoReverse(this,&GUITranslateEffector::setAutoReverse,&GUITranslateEffector::getAutoReverse,EPT_BOOLEAN,mT("AutoReverse"))
{
	m_startPos=startP;
	m_endPos=endP;
	m_t=0;
	m_speed=speed;
	m_dirSgn=1;
	m_autoReverse=1;

	fillProperties();
}
bool NBEditor::OnEvent(const irr::SEvent &event) {
	if (event.EventType == EET_GUI_EVENT) {
		if (event.GUIEvent.EventType == EGET_BUTTON_CLICKED) {
			switch (event.GUIEvent.Caller->getID()) {
			case GUI_PROJ_NEW_BOX: {
				Node* node = state->project->GetCurrentNode();
				if (node) {
					node->addNodeBox();
					load_ui();
				}
				break;
			}
			case GUI_PROJ_DELETE_BOX: {
				Node* node = state->project->GetCurrentNode();
				IGUIListBox* lb = (IGUIListBox*) state->menu->sidebar->getElementFromId(ENB_GUI_MAIN_LISTBOX);	
				if (node && node->GetNodeBox(lb->getSelected())){
					node->deleteNodebox(lb->getSelected());
					load_ui();
				}
				break;
			}
			case ENB_GUI_PROP_REVERT:
				fillProperties();
				break;
			case ENB_GUI_PROP_UPDATE:
				updateProperties();
				break;
			}
		} else if (event.GUIEvent.EventType == EGET_LISTBOX_CHANGED) {
			Node* node = state->project->GetCurrentNode();
			IGUIListBox* lb = (IGUIListBox*) state->menu->sidebar->getElementFromId(ENB_GUI_MAIN_LISTBOX);	
			if (node && lb && node->GetNodeBox(lb->getSelected())){
				node->select(lb->getSelected());
			}
			load_ui();
		}
	} else if (event.EventType == EET_KEY_INPUT_EVENT && !event.KeyInput.PressedDown) {
		if (event.KeyInput.Key == KEY_RETURN) {
			updateProperties();
			return false;
		}

		if (
				state->device->getGUIEnvironment()->getFocus() &&
				state->device->getGUIEnvironment()->getFocus()->getType() == EGUIET_EDIT_BOX) {
			return false;
		}

		if (event.KeyInput.Key == KEY_INSERT) {
			Node *node = state->project->GetCurrentNode();
			if (node) {
				node->addNodeBox();
				load_ui();
			}
		} else if (event.KeyInput.Key == KEY_DELETE) {
			Node* node = state->project->GetCurrentNode();
			IGUIListBox* lb = (IGUIListBox*) state->menu->sidebar->getElementFromId(ENB_GUI_MAIN_LISTBOX);
			if (node && node->GetNodeBox(lb->getSelected())) {
				node->deleteNodebox(lb->getSelected());
			}
			load_ui();
		} else if (event.KeyInput.Key == KEY_DOWN) {
			IGUIListBox* lb = (IGUIListBox*) state->menu->sidebar->getElementFromId(ENB_GUI_MAIN_LISTBOX);
			Node* node = state->project->GetCurrentNode();
			if (node) {
				int idx = node->GetId();
				if (lb && idx < node->boxes.size() - 1){
					node->select(idx + 1);
				}
			}
			load_ui();
		} else if (event.KeyInput.Key == KEY_UP) {
			IGUIListBox* lb = (IGUIListBox*) state->menu->sidebar->getElementFromId(ENB_GUI_MAIN_LISTBOX);
			Node* node = state->project->GetCurrentNode();
			if (node) {
				int idx = node->GetId();
				if (lb && idx > 0) {
					node->select(idx - 1);
				}
			}
			load_ui();
		}
	}
	return false;
}