Start the properties sidebar
Currently works with x,y,z / x2,y2,z2 properties, need to add nodebox name property.master
parent
a359a33cb7
commit
66f008da28
|
@ -169,6 +169,9 @@ bool Editor::run(IrrlichtDevice* irr_device,Configuration* conf){
|
|||
camera[3]=smgr->addCameraSceneNode(target,vector3df(-5,0,0),vector3df(0,0,0));
|
||||
camera[3]->setProjectionMatrix(projMat,true);
|
||||
}
|
||||
|
||||
if (GetState()->Mode())
|
||||
GetState()->Mode()->update((1000.0/60.0));
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -57,7 +57,7 @@ public:
|
|||
EditorMode(EditorState* st):_state(st){}
|
||||
virtual void load() = 0;
|
||||
virtual void unload() = 0;
|
||||
virtual void update() = 0;
|
||||
virtual void update(double dtime) = 0;
|
||||
virtual void draw(irr::video::IVideoDriver* driver) = 0;
|
||||
virtual void viewportTick(VIEWPORT window,irr::video::IVideoDriver* driver,rect<s32> offset) = 0;
|
||||
virtual bool OnEvent(const irr::SEvent &event) = 0;
|
||||
|
|
|
@ -72,7 +72,7 @@ void MenuState::init(){
|
|||
rect<s32>(
|
||||
(GetState()->GetDevice()->getVideoDriver()->getScreenSize().Width - 246), top+10,
|
||||
GetState()->GetDevice()->getVideoDriver()->getScreenSize().Width, GetState()->GetDevice()->getVideoDriver()->getScreenSize().Height
|
||||
),false,true,0,GUI_SIDEBAR_TITLE
|
||||
),false,true,0,GUI_SIDEBAR
|
||||
);
|
||||
_sidebar->setAlignment(EGUIA_LOWERRIGHT,EGUIA_LOWERRIGHT,EGUIA_UPPERLEFT,EGUIA_UPPERLEFT);
|
||||
}
|
||||
|
|
13
MenuState.h
13
MenuState.h
|
@ -39,6 +39,7 @@
|
|||
// --> Help Index
|
||||
// --> About
|
||||
|
||||
#define SIDEBAR_MAX_IDS 20
|
||||
enum GUI_ID
|
||||
{
|
||||
// File
|
||||
|
@ -65,20 +66,18 @@ enum GUI_ID
|
|||
// Tools
|
||||
GUI_PROJ_NEW_BOX = 216,
|
||||
GUI_PROJ_DELETE_BOX = 217,
|
||||
GUI_PROJ_LIST_AREA = 240,
|
||||
GUI_PROJ_LIST_AREA = 240 + SIDEBAR_MAX_IDS,
|
||||
|
||||
// Help
|
||||
GUI_HELP_HELP =218,
|
||||
GUI_HELP_HELP = 218,
|
||||
GUI_HELP_ABOUT = 219,
|
||||
|
||||
// Sidebar
|
||||
GUI_SIDEBAR_TITLE = 220,
|
||||
GUI_SIDEBAR_LISTBOX = 221,
|
||||
GUI_SIDEBAR_LABEL = 222,
|
||||
GUI_SIDEBAR = 220,
|
||||
|
||||
// File Dialog
|
||||
GUI_FILEDIALOG_PATH = 223,
|
||||
GUI_FILEDIALOG_FORM = 224
|
||||
GUI_FILEDIALOG_PATH = 220 + SIDEBAR_MAX_IDS,
|
||||
GUI_FILEDIALOG_FORM = 221 + SIDEBAR_MAX_IDS
|
||||
};
|
||||
|
||||
class EditorState;
|
||||
|
|
164
NBEditor.cpp
164
NBEditor.cpp
|
@ -1,7 +1,25 @@
|
|||
#include "NBEditor.h"
|
||||
|
||||
// The gui id numbers for this mode
|
||||
// NOTE: the maximum that can be here is 20
|
||||
// see in MenuState.h to raise limit
|
||||
enum ENB_GUI{
|
||||
ENB_GUI_MAIN_LISTBOX = GUI_SIDEBAR + 1,
|
||||
ENB_GUI_MAIN_MSG = GUI_SIDEBAR + 2,
|
||||
ENB_GUI_PROP = GUI_SIDEBAR + 3,
|
||||
ENB_GUI_PROP_X1 = GUI_SIDEBAR + 4,
|
||||
ENB_GUI_PROP_Y1 = GUI_SIDEBAR + 5,
|
||||
ENB_GUI_PROP_Z1 = GUI_SIDEBAR + 6,
|
||||
ENB_GUI_PROP_X2 = GUI_SIDEBAR + 7,
|
||||
ENB_GUI_PROP_Y2 = GUI_SIDEBAR + 8,
|
||||
ENB_GUI_PROP_Z2 = GUI_SIDEBAR + 9,
|
||||
ENB_GUI_PROP_NAME = GUI_SIDEBAR + 19,
|
||||
ENB_GUI_PROP_UPDATE = GUI_SIDEBAR + 11,
|
||||
ENB_GUI_PROP_REVERT = GUI_SIDEBAR + 12
|
||||
};
|
||||
|
||||
NBEditor::NBEditor(EditorState* st)
|
||||
:EditorMode(st),current(-1)
|
||||
:EditorMode(st),current(-1),prop_needs_update(false)
|
||||
{
|
||||
// Top Window
|
||||
cdrs[0] = CDR(EVIEW_XZ,CDR_X_P);
|
||||
|
@ -37,38 +55,76 @@ NBEditor::NBEditor(EditorState* st)
|
|||
}
|
||||
}
|
||||
|
||||
void addBox(IGUIElement* parent,IGUIEnvironment* guienv, vector2di pos,int index,const wchar_t* label){
|
||||
guienv->addStaticText(label,rect<s32>(pos.X,pos.Y,pos.X+20,pos.Y+20),false,true,parent)->setNotClipped(true);
|
||||
guienv->addEditBox(L"",rect<s32>(pos.X+15,pos.Y,pos.X+200,pos.Y+20),true,parent,index)->setNotClipped(true);
|
||||
}
|
||||
void addXYZ(IGUIElement* parent,IGUIEnvironment* guienv, vector2di pos,int startIndex){
|
||||
addBox(parent,guienv,vector2di(pos.X,pos.Y),startIndex,L"X"); // 0,0
|
||||
addBox(parent,guienv,vector2di(pos.X,pos.Y+30),startIndex+1,L"Y"); // 80, 0
|
||||
addBox(parent,guienv,vector2di(pos.X,pos.Y+60),startIndex+2,L"Z"); // 160, 0
|
||||
}
|
||||
|
||||
void NBEditor::load(){
|
||||
IGUIStaticText* sidebar = GetState()->Menu()->GetSideBar();
|
||||
IGUIEnvironment* guienv = GetState()->GetDevice()->getGUIEnvironment();
|
||||
sidebar->setText(L"Node boxes");
|
||||
IGUIStaticText* t = guienv->addStaticText(L"No node selected",rect<s32>(20,30,140,100),false,true,sidebar,GUI_SIDEBAR_LABEL);
|
||||
|
||||
if (t)
|
||||
|
||||
if (sidebar){
|
||||
sidebar->setText(L"Node Box Tool");
|
||||
IGUIStaticText* t = guienv->addStaticText(L"No node selected",rect<s32>(20,30,140,100),false,true,sidebar,ENB_GUI_MAIN_MSG);
|
||||
|
||||
IGUIListBox* lb = guienv->addListBox(rect<s32>(20,30,230,128),sidebar,ENB_GUI_MAIN_LISTBOX,true);
|
||||
|
||||
if (lb){
|
||||
lb->setVisible(false);
|
||||
IGUIButton* b = guienv->addButton(rect<s32>(0,100,50,125),lb,GUI_PROJ_NEW_BOX,L"+",L"Add a node box");
|
||||
IGUIButton* c = guienv->addButton(rect<s32>(60,100,110,125),lb,GUI_PROJ_DELETE_BOX,L"-",L"Delete node box");
|
||||
b->setNotClipped(true);
|
||||
c->setNotClipped(true);
|
||||
}
|
||||
|
||||
t = guienv->addStaticText(L"Properties",rect<s32>(0,170,120,190),false,true,sidebar,ENB_GUI_PROP);
|
||||
|
||||
t->setVisible(false);
|
||||
|
||||
IGUIListBox* lb = guienv->addListBox(rect<s32>(20,30,230,128),sidebar,GUI_SIDEBAR_LISTBOX,true);
|
||||
|
||||
if (lb){
|
||||
lb->setVisible(false);
|
||||
IGUIButton* b = guienv->addButton(rect<s32>(20-20,130-30,70-20,155-30),lb,GUI_PROJ_NEW_BOX,L"+",L"Add a node box");
|
||||
IGUIButton* c = guienv->addButton(rect<s32>(80-20,130-30,130-20,155-30),lb,GUI_PROJ_DELETE_BOX,L"-",L"Delete node box");
|
||||
b->setNotClipped(true);
|
||||
c->setNotClipped(true);
|
||||
addXYZ(t,guienv,vector2di(10,30),ENB_GUI_PROP_X1);
|
||||
addXYZ(t,guienv,vector2di(10,130),ENB_GUI_PROP_X2); // 60
|
||||
|
||||
guienv->addButton(rect<s32>(30,230,100,260),t,ENB_GUI_PROP_UPDATE,L"Update",L"")->setNotClipped(true);
|
||||
guienv->addButton(rect<s32>(110,230,180,260),t,ENB_GUI_PROP_REVERT,L"Revert",L"")->setNotClipped(true);
|
||||
}
|
||||
|
||||
load_ui();
|
||||
}
|
||||
|
||||
void fillTB(IGUIElement* sidebar,int parentId,int id,float value){
|
||||
IGUIElement* e = sidebar->getElementFromId(parentId)->getElementFromId(id);
|
||||
|
||||
if (e){
|
||||
IGUIEditBox* b = static_cast<IGUIEditBox*>(e);
|
||||
|
||||
if (!b)
|
||||
return;
|
||||
|
||||
b->setText(stringw(value).c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void NBEditor::load_ui(){
|
||||
IGUIStaticText* sidebar = GetState()->Menu()->GetSideBar();
|
||||
|
||||
if (!sidebar)
|
||||
return;
|
||||
|
||||
IGUIEnvironment* guienv = GetState()->GetDevice()->getGUIEnvironment();
|
||||
Node* node = GetState()->project->GetCurrentNode();
|
||||
if (!node){
|
||||
sidebar->getElementFromId(GUI_SIDEBAR_LABEL)->setVisible(true);
|
||||
sidebar->getElementFromId(GUI_SIDEBAR_LISTBOX)->setVisible(false);
|
||||
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(GUI_SIDEBAR_LISTBOX);
|
||||
sidebar->getElementFromId(GUI_SIDEBAR_LABEL)->setVisible(false);
|
||||
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();
|
||||
|
@ -85,13 +141,39 @@ void NBEditor::load_ui(){
|
|||
}
|
||||
lb->setSelected(lb->getListItem(node->GetId()));
|
||||
}
|
||||
|
||||
fillProperties();
|
||||
}
|
||||
}
|
||||
|
||||
void NBEditor::unload(){
|
||||
void NBEditor::fillProperties(){
|
||||
IGUIStaticText* sidebar = GetState()->Menu()->GetSideBar();
|
||||
|
||||
if (!sidebar)
|
||||
return;
|
||||
|
||||
Node* node = GetState()->project->GetCurrentNode();
|
||||
|
||||
if (!node)
|
||||
return;
|
||||
|
||||
NodeBox* nb = node->GetCurrentNodeBox();
|
||||
|
||||
if (!nb)
|
||||
return;
|
||||
|
||||
sidebar->getElementFromId(ENB_GUI_PROP)->setVisible(true);
|
||||
fillTB(sidebar,ENB_GUI_PROP,ENB_GUI_PROP_X1,nb->one.X);
|
||||
fillTB(sidebar,ENB_GUI_PROP,ENB_GUI_PROP_Y1,nb->one.Y);
|
||||
fillTB(sidebar,ENB_GUI_PROP,ENB_GUI_PROP_Z1,nb->one.Z);
|
||||
fillTB(sidebar,ENB_GUI_PROP,ENB_GUI_PROP_X2,nb->two.X);
|
||||
fillTB(sidebar,ENB_GUI_PROP,ENB_GUI_PROP_Y2,nb->two.Y);
|
||||
fillTB(sidebar,ENB_GUI_PROP,ENB_GUI_PROP_Z2,nb->two.Z);
|
||||
}
|
||||
|
||||
void NBEditor::update(){
|
||||
void NBEditor::unload(){}
|
||||
|
||||
void NBEditor::update(double dtime){
|
||||
}
|
||||
|
||||
void NBEditor::draw(irr::video::IVideoDriver* driver){
|
||||
|
@ -236,6 +318,8 @@ void CDR::update(NBEditor* editor,bool drag,rect<s32> offset){
|
|||
box->moveNodeBox(editor->GetState(),type,wpos);
|
||||
}
|
||||
node->remesh();
|
||||
|
||||
editor->triggerCDRmoved();
|
||||
}
|
||||
|
||||
vector3df pos;
|
||||
|
@ -309,7 +393,7 @@ bool NBEditor::OnEvent(const irr::SEvent &event){
|
|||
case GUI_PROJ_DELETE_BOX:
|
||||
{
|
||||
Node* node = GetState()->project->GetCurrentNode();
|
||||
IGUIListBox* lb = (IGUIListBox*) GetState()->Menu()->GetSideBar()->getElementFromId(GUI_SIDEBAR_LISTBOX);
|
||||
IGUIListBox* lb = (IGUIListBox*) GetState()->Menu()->GetSideBar()->getElementFromId(ENB_GUI_MAIN_LISTBOX);
|
||||
if (node && node->GetNodeBox(lb->getSelected())){
|
||||
printf("Clicked delete nb!\n");
|
||||
node->deleteNodebox(lb->getSelected());
|
||||
|
@ -317,10 +401,46 @@ bool NBEditor::OnEvent(const irr::SEvent &event){
|
|||
}
|
||||
}
|
||||
break;
|
||||
case ENB_GUI_PROP_REVERT:
|
||||
{
|
||||
fillProperties();
|
||||
}
|
||||
break;
|
||||
case ENB_GUI_PROP_UPDATE:
|
||||
{
|
||||
|
||||
IGUIElement* prop = GetState()->Menu()->GetSideBar()->getElementFromId(ENB_GUI_PROP);
|
||||
|
||||
if (!prop)
|
||||
return false;
|
||||
|
||||
Node* node = GetState()->project->GetCurrentNode();
|
||||
|
||||
if (!node)
|
||||
return false;
|
||||
|
||||
NodeBox* nb = node->GetCurrentNodeBox();
|
||||
|
||||
if (!nb)
|
||||
return false;
|
||||
|
||||
try{
|
||||
nb->one.X = wcstod(prop->getElementFromId(ENB_GUI_PROP_X1)->getText(),NULL);
|
||||
nb->one.Y = wcstod(prop->getElementFromId(ENB_GUI_PROP_Y1)->getText(),NULL);
|
||||
nb->one.Z = wcstod(prop->getElementFromId(ENB_GUI_PROP_Z1)->getText(),NULL);
|
||||
nb->two.X = wcstod(prop->getElementFromId(ENB_GUI_PROP_X2)->getText(),NULL);
|
||||
nb->two.Y = wcstod(prop->getElementFromId(ENB_GUI_PROP_Y2)->getText(),NULL);
|
||||
nb->two.Z = wcstod(prop->getElementFromId(ENB_GUI_PROP_Z2)->getText(),NULL);
|
||||
node->remesh();
|
||||
}catch(void* e){
|
||||
GetState()->GetDevice()->getGUIEnvironment()->addMessageBox(L"Update failed",L"Please check that the properties contain only numbers.");
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}else if (event.GUIEvent.EventType == EGET_LISTBOX_CHANGED){
|
||||
Node* node = GetState()->project->GetCurrentNode();
|
||||
IGUIListBox* lb = (IGUIListBox*) GetState()->Menu()->GetSideBar()->getElementFromId(GUI_SIDEBAR_LISTBOX);
|
||||
IGUIListBox* lb = (IGUIListBox*) GetState()->Menu()->GetSideBar()->getElementFromId(ENB_GUI_MAIN_LISTBOX);
|
||||
if (node && lb && node->GetNodeBox(lb->getSelected())){
|
||||
node->select(lb->getSelected());
|
||||
load_ui();
|
||||
|
|
|
@ -25,10 +25,11 @@ public:
|
|||
// Interface
|
||||
virtual void load();
|
||||
virtual void unload();
|
||||
virtual void update();
|
||||
virtual void update(double dtime);
|
||||
virtual void draw(irr::video::IVideoDriver* driver);
|
||||
virtual void viewportTick(VIEWPORT window,irr::video::IVideoDriver* driver,rect<s32> offset);
|
||||
virtual bool OnEvent(const irr::SEvent &event);
|
||||
void triggerCDRmoved(){prop_needs_update = true;}
|
||||
|
||||
// Snapping
|
||||
f32 snappers[NODE_RES+1];
|
||||
|
@ -37,6 +38,8 @@ private:
|
|||
int current;
|
||||
CDR cdrs[15];
|
||||
void load_ui();
|
||||
void fillProperties();
|
||||
bool prop_needs_update;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue