Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
421498e1fe | ||
|
|
8909ded488 | ||
|
|
5114ceb4b7 | ||
|
|
1472b7d6a5 | ||
|
|
52d2cbf5dd | ||
|
|
e4529a949a |
@@ -176,7 +176,7 @@
|
||||
SuppressStartupBanner="true"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile=".\Debug/G3DTest.pdb"
|
||||
SubSystem="2"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
@@ -290,10 +290,6 @@
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Property.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\propertyGrid.cpp"
|
||||
>
|
||||
@@ -407,10 +403,6 @@
|
||||
RelativePath=".\PartType.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Property.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\propertyGrid.h"
|
||||
>
|
||||
|
||||
14
Instance.cpp
14
Instance.cpp
@@ -41,26 +41,26 @@ PROPGRIDITEM Instance::createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc,
|
||||
return pItem;
|
||||
}
|
||||
|
||||
void Instance::PropUpdate(DWORD &addr, PROPGRIDITEM &pItem)
|
||||
void Instance::PropUpdate(LPPROPGRIDITEM &item)
|
||||
{
|
||||
if((DWORD)&name == addr)
|
||||
if(strcmp(item->lpszPropName, "Name") == 0)
|
||||
{
|
||||
name = pItem.lpCurValue;
|
||||
name = item->lpCurValue;
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<Property> Instance::getProperties()
|
||||
std::vector<PROPGRIDITEM> Instance::getProperties()
|
||||
{
|
||||
std::vector<Property> properties;
|
||||
std::vector<PROPGRIDITEM> properties;
|
||||
|
||||
|
||||
properties.push_back(Property(createPGI(
|
||||
properties.push_back(createPGI(
|
||||
"Properties",
|
||||
"Name",
|
||||
"The name of this instance",
|
||||
(LPARAM)name.c_str(),
|
||||
PIT_EDIT
|
||||
), (DWORD)&name));
|
||||
));
|
||||
return properties;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
#pragma once
|
||||
#include <G3DAll.h>
|
||||
#include "Property.h"
|
||||
#include "propertyGrid.h"
|
||||
class Instance
|
||||
{
|
||||
public:
|
||||
@@ -20,8 +20,8 @@ public:
|
||||
void removeChild(Instance*);
|
||||
Instance* getParent();
|
||||
virtual Instance* clone() const { return new Instance(*this); }
|
||||
virtual std::vector<Property> getProperties();
|
||||
virtual void PropUpdate(DWORD &addr, PROPGRIDITEM &pItem);
|
||||
virtual std::vector<PROPGRIDITEM> getProperties();
|
||||
virtual void PropUpdate(LPPROPGRIDITEM &pItem);
|
||||
protected:
|
||||
std::string className;
|
||||
Instance* parent; // Another pointer.
|
||||
|
||||
@@ -212,37 +212,69 @@ void PhysicalInstance::render(RenderDevice* rd)
|
||||
PhysicalInstance::~PhysicalInstance(void)
|
||||
{
|
||||
}
|
||||
char pto[512];
|
||||
#include <sstream>
|
||||
|
||||
void PhysicalInstance::PropUpdate(LPPROPGRIDITEM &item)
|
||||
{
|
||||
if(strcmp(item->lpszPropName, "Name") == 0)
|
||||
{
|
||||
name = (LPTSTR)item->lpCurValue;
|
||||
}
|
||||
else if(strcmp(item->lpszPropName, "Offset") == 0)
|
||||
{
|
||||
std::string str = (LPTSTR)item->lpCurValue;
|
||||
std::vector<float> vect;
|
||||
std::stringstream ss(str);
|
||||
float i;
|
||||
|
||||
void PhysicalInstance::PropUpdate(DWORD &addr, PROPGRIDITEM &pItem)
|
||||
while (ss >> i)
|
||||
{
|
||||
if((DWORD)&name == addr)
|
||||
vect.push_back(i);
|
||||
|
||||
if (ss.peek() == ',')
|
||||
ss.ignore();
|
||||
}
|
||||
|
||||
if(vect.size() != 3)
|
||||
{
|
||||
name = pItem.lpCurValue;
|
||||
sprintf(pto, "%g, %g, %g", cFrame.translation.x, cFrame.translation.y, cFrame.translation.z, "what");
|
||||
LPCSTR str = LPCSTR(pto);
|
||||
item->lpCurValue = (LPARAM)str;
|
||||
MessageBox(NULL, "NO","NO", MB_OK);
|
||||
}
|
||||
else
|
||||
{
|
||||
Vector3 pos(vect.at(0),vect.at(1),vect.at(2));
|
||||
setPosition(pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<Property> PhysicalInstance::getProperties()
|
||||
std::vector<PROPGRIDITEM> PhysicalInstance::getProperties()
|
||||
{
|
||||
std::vector<Property> properties;
|
||||
std::vector<PROPGRIDITEM> properties;
|
||||
|
||||
|
||||
properties.push_back(Property(createPGI(
|
||||
properties.push_back(createPGI(
|
||||
"Properties",
|
||||
"Name",
|
||||
"The name of this instance",
|
||||
(LPARAM)name.c_str(),
|
||||
PIT_EDIT
|
||||
), (DWORD)&name));
|
||||
char pso[512];
|
||||
));
|
||||
|
||||
properties.push_back(Property(createPGI(
|
||||
|
||||
|
||||
sprintf(pto, "%g, %g, %g", cFrame.translation.x, cFrame.translation.y, cFrame.translation.z, "what");
|
||||
LPCSTR str = LPCSTR(pto);
|
||||
properties.push_back(createPGI(
|
||||
"Item",
|
||||
"Offset",
|
||||
"The position of the object in the workspace",
|
||||
(LPARAM)"Coming soon",
|
||||
(LPARAM)str,
|
||||
PIT_EDIT
|
||||
), (DWORD)&name));
|
||||
));
|
||||
return properties;
|
||||
}
|
||||
|
||||
|
||||
@@ -33,8 +33,8 @@ public:
|
||||
bool anchored;
|
||||
Vector3 rotVelocity;
|
||||
bool collides(Box);
|
||||
virtual std::vector<Property> getProperties();
|
||||
virtual void PropUpdate(DWORD &addr, PROPGRIDITEM &pItem);
|
||||
virtual std::vector<PROPGRIDITEM> getProperties();
|
||||
virtual void PropUpdate(LPPROPGRIDITEM &pItem);
|
||||
private:
|
||||
Vector3 position;
|
||||
Vector3 size;
|
||||
|
||||
15
Property.cpp
15
Property.cpp
@@ -1,15 +0,0 @@
|
||||
#include "Property.h"
|
||||
|
||||
Property::Property(PROPGRIDITEM item, DWORD addr)
|
||||
{
|
||||
this->addr = addr;
|
||||
this->item = item;
|
||||
}
|
||||
|
||||
Property::~Property(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
11
Property.h
11
Property.h
@@ -1,11 +0,0 @@
|
||||
#pragma once
|
||||
#include <windows.h>
|
||||
#include "propertyGrid.h"
|
||||
class Property
|
||||
{
|
||||
public:
|
||||
PROPGRIDITEM item;
|
||||
DWORD addr;
|
||||
Property(PROPGRIDITEM item, DWORD addr);
|
||||
~Property(void);
|
||||
};
|
||||
@@ -1,7 +1,6 @@
|
||||
#define _WINSOCKAPI_
|
||||
#include <windows.h>
|
||||
#include "WindowFunctions.h"
|
||||
#include "Property.h"
|
||||
#include "resource.h"
|
||||
#include "PropertyWindow.h"
|
||||
|
||||
@@ -10,7 +9,8 @@
|
||||
Property ∝
|
||||
} PRGP;*/
|
||||
|
||||
//std::vector<PRGP> propvec;
|
||||
std::vector<PROPGRIDITEM> prop;
|
||||
Instance* selectedInstance;
|
||||
LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
PropertyWindow *propWind = (PropertyWindow *)GetWindowLongPtr(hwnd, GWL_USERDATA);
|
||||
@@ -20,13 +20,33 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
}
|
||||
switch(msg)
|
||||
{
|
||||
case WM_CLOSE:
|
||||
{
|
||||
ShowWindow(hwnd, SW_HIDE);
|
||||
}
|
||||
break;
|
||||
case WM_SIZE:
|
||||
{
|
||||
propWind->onResize();
|
||||
}
|
||||
case WM_NOTIFY:
|
||||
MessageBox(NULL,"Test","Test",0);
|
||||
break;
|
||||
case WM_NOTIFY:
|
||||
{
|
||||
switch(((LPNMHDR)lParam)->code)
|
||||
{
|
||||
case PGN_PROPERTYCHANGE:
|
||||
{
|
||||
if (IDC_PROPERTYGRID==wParam) {
|
||||
LPNMHDR pnm = (LPNMHDR)lParam;
|
||||
LPNMPROPGRID lpnmp = (LPNMPROPGRID)pnm;
|
||||
LPPROPGRIDITEM item = PropGrid_GetItemData(pnm->hwndFrom,lpnmp->iIndex);
|
||||
selectedInstance->PropUpdate(item);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
//MessageBox(NULL,"Test","Test",0);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return DefWindowProc(hwnd, msg, wParam, lParam);
|
||||
@@ -41,7 +61,7 @@ bool PropertyWindow::onCreate(int x, int y, int sx, int sy, HMODULE hThisInstanc
|
||||
_hwndProp = CreateWindowEx(
|
||||
WS_EX_TOOLWINDOW,
|
||||
"propHWND",
|
||||
"Prop Test",
|
||||
"PropertyGrid",
|
||||
WS_VISIBLE | WS_POPUPWINDOW | WS_THICKFRAME | WS_CAPTION,
|
||||
CW_USEDEFAULT,
|
||||
CW_USEDEFAULT,
|
||||
@@ -55,7 +75,7 @@ bool PropertyWindow::onCreate(int x, int y, int sx, int sy, HMODULE hThisInstanc
|
||||
|
||||
_propGrid = New_PropertyGrid(_hwndProp,IDC_PROPERTYGRID);
|
||||
|
||||
PROPGRIDITEM pItem;
|
||||
/*PROPGRIDITEM pItem;
|
||||
PropGrid_ItemInit(pItem);
|
||||
|
||||
pItem.lpszCatalog="Test";
|
||||
@@ -89,8 +109,8 @@ bool PropertyWindow::onCreate(int x, int y, int sx, int sy, HMODULE hThisInstanc
|
||||
|
||||
PropGrid_Enable(_propGrid,true);
|
||||
ShowWindow(_propGrid,SW_SHOW);
|
||||
PropGrid_AddItem(_propGrid,&pItem);
|
||||
PropGrid_AddItem(_propGrid,&pItem2);
|
||||
// PropGrid_AddItem(_propGrid,&pItem);
|
||||
// PropGrid_AddItem(_propGrid,&pItem2);
|
||||
PropGrid_SetItemHeight(_propGrid,20);
|
||||
PropGrid_ShowToolTips(_propGrid,TRUE);
|
||||
PropGrid_ShowPropertyDescriptions(_propGrid,TRUE);
|
||||
@@ -121,11 +141,11 @@ void PropertyWindow::_redraw()
|
||||
void PropertyWindow::SetProperties(Instance * instance)
|
||||
{
|
||||
PropGrid_ResetContent(_propGrid);
|
||||
std::vector<Property> prop = instance->getProperties();
|
||||
|
||||
prop = instance->getProperties();
|
||||
selectedInstance = instance;
|
||||
for(size_t i = 0; i < prop.size(); i++)
|
||||
{
|
||||
::PROPGRIDITEM item = prop.at(i).item;
|
||||
::PROPGRIDITEM item = prop.at(i);
|
||||
PropGrid_AddItem(_propGrid, &item);
|
||||
//PRGP propgp;
|
||||
//propgp.instance = instance;
|
||||
@@ -135,3 +155,8 @@ void PropertyWindow::SetProperties(Instance * instance)
|
||||
SetWindowLongPtr(_propGrid,GWL_USERDATA,(LONG)this);
|
||||
_redraw();
|
||||
}
|
||||
|
||||
void PropertyWindow::ClearProperties()
|
||||
{
|
||||
PropGrid_ResetContent(_propGrid);
|
||||
}
|
||||
@@ -5,9 +5,11 @@ public:
|
||||
PropertyWindow(int x, int y, int sx, int sy, HMODULE hThisInstance);
|
||||
bool onCreate(int x, int y, int sx, int sy, HMODULE hThisInstance);
|
||||
void SetProperties(Instance *);
|
||||
void ClearProperties();
|
||||
void onResize();
|
||||
|
||||
HWND _hwndProp;
|
||||
private:
|
||||
HWND _propGrid;
|
||||
HWND _hwndProp;
|
||||
void _redraw();
|
||||
};
|
||||
29
main.cpp
29
main.cpp
@@ -143,7 +143,7 @@ Demo::Demo(const GAppSettings& settings,HWND parentWindow) { //: GApp(settings,w
|
||||
SetWindowLongPtr(_hwndRenderer,GWL_USERDATA,(LONG)this);
|
||||
_propWindow = new PropertyWindow(0, 0, 200, 640, hThisInstance);
|
||||
IEBrowser* webBrowser = new IEBrowser(_hwndToolbox);
|
||||
webBrowser->navigateSyncURL(L"http://scottbeebiwan.tk/g3d/toolbox/");
|
||||
//webBrowser->navigateSyncURL(L"http://scottbeebiwan.tk/g3d/toolbox/");
|
||||
}
|
||||
|
||||
void clearInstances()
|
||||
@@ -1258,25 +1258,40 @@ void Demo::onMouseLeftPressed(HWND hwnd,int x,int y)
|
||||
}
|
||||
if(!onGUI)
|
||||
{
|
||||
while(selectedInstances.size() > 0)
|
||||
selectedInstances.erase(selectedInstances.begin());
|
||||
testRay = cameraController.getCamera()->worldRay(dataModel->mousex, dataModel->mousey, renderDevice->getViewport());
|
||||
float nearest=std::numeric_limits<float>::infinity();
|
||||
Vector3 camPos = cameraController.getCamera()->getCoordinateFrame().translation;
|
||||
std::vector<Instance*> instances = dataModel->getWorkspace()->getAllChildren();
|
||||
bool objFound = false;
|
||||
for(size_t i = 0; i < instances.size(); i++)
|
||||
{
|
||||
if(PhysicalInstance* test = dynamic_cast<PhysicalInstance*>(instances.at(i)))
|
||||
{
|
||||
float time = testRay.intersectionTime(test->getBox());
|
||||
|
||||
if (time != inf())
|
||||
{
|
||||
objFound = true;
|
||||
if (nearest>time)
|
||||
{
|
||||
nearest=time;
|
||||
while(selectedInstances.size() > 0)
|
||||
bool found = false;
|
||||
for(size_t i = 0; i < selectedInstances.size(); i++)
|
||||
{
|
||||
if(selectedInstances.at(i) == test)
|
||||
{
|
||||
found = true;
|
||||
ShowWindow(_propWindow->_hwndProp, SW_SHOW);
|
||||
SetActiveWindow(_propWindow->_hwndProp);
|
||||
SetForegroundWindow(_propWindow->_hwndProp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!found)
|
||||
{while(selectedInstances.size() > 0)
|
||||
selectedInstances.erase(selectedInstances.begin());
|
||||
selectedInstances.push_back(test);
|
||||
}
|
||||
_propWindow->SetProperties(test);
|
||||
//message = "Dragging = true.";
|
||||
//messageTime = System::time();
|
||||
@@ -1285,6 +1300,12 @@ void Demo::onMouseLeftPressed(HWND hwnd,int x,int y)
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!objFound)
|
||||
{
|
||||
while(selectedInstances.size() > 0)
|
||||
selectedInstances.erase(selectedInstances.begin());
|
||||
_propWindow->ClearProperties();
|
||||
}
|
||||
}
|
||||
}
|
||||
void Demo::onMouseLeftUp(int x,int y)
|
||||
|
||||
Reference in New Issue
Block a user