20 Commits
r277 ... r297

Author SHA1 Message Date
andreja6
421498e1fe Made parts deselectable 2018-10-23 15:15:08 -07:00
andreja6
8909ded488 Made window show on double click 2018-10-23 15:09:08 -07:00
andreja6
5114ceb4b7 Removed navigate for now, made char work 2018-10-23 14:11:28 -07:00
andreja6
1472b7d6a5 Made it use addresses 2018-10-23 13:43:56 -07:00
andreja6
52d2cbf5dd Removed useless class, properties work 2018-10-23 13:42:10 -07:00
andreja6
e4529a949a Kinda sorta works 2018-10-23 12:46:54 -07:00
andreja6
6d1428ced9 Added properties to PhysicalInstance 2018-10-23 12:29:36 -07:00
MusicalProgrammer
0f700aeda5 Fixed PropertyWindow Procedure 2018-10-23 15:22:22 -04:00
DirtPiper
7273ee9ce0 struct removal and stopped parts from moving up 2018-10-23 14:00:28 -04:00
andreja6
1a7cd2e250 Failed at adding a struct, i may just use two vectors 2018-10-23 07:25:47 -07:00
andreja6
99f78be344 Added update property method 2018-10-23 06:52:06 -07:00
andreja6
ee528d1245 Changed how properties work 2018-10-23 06:49:41 -07:00
willemsteller
18b856602c Move duplicated part up 2018-10-23 09:52:45 +02:00
andreja6
0dcd054da3 Properties work 2018-10-22 22:59:41 -07:00
andreja6
268a0cd2ee Keep getting access violation exceptions 2018-10-22 22:01:46 -07:00
andreja6
c71dcb8a91 What 2018-10-22 21:05:50 -07:00
andreja6
24306c04ec Tried something, it kinda works 2018-10-22 21:04:21 -07:00
andreja6
b986815fcb Changed how properties work 2018-10-22 20:35:23 -07:00
andreja6
a70cc31d28 Class cleanup 2018-10-22 18:59:05 -07:00
andreja6
b097cb15e4 Added properties 2018-10-22 18:20:28 -07:00
14 changed files with 234 additions and 70 deletions

View File

@@ -1,14 +1,7 @@
#include "DataModelInstance.h"
WorkspaceInstance* workspace;
Instance* guiRoot;
float mousex;
float mousey;
bool mouseButton1Down;
std::string message;
bool showMessage;
G3D::GFontRef font;
DataModelInstance::DataModelInstance(void)

View File

@@ -11,8 +11,12 @@ public:
void setMessage(std::string);
void clearMessage();
void drawMessage(RenderDevice*);
GFontRef font;
WorkspaceInstance* getWorkspace();
WorkspaceInstance* workspace;
Instance* guiRoot;
std::string message;
bool showMessage;
G3D::GFontRef font;
Instance* getGuiRoot();
float mousex;
float mousey;

View File

@@ -74,7 +74,7 @@
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="Advapi32.lib UxTheme.lib Comctl32.lib"
AdditionalDependencies="Advapi32.lib UxTheme.lib Comctl32.lib Comdlg32.lib Shell32.lib"
OutputFile="./G3DTest.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
@@ -147,8 +147,8 @@
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="false"
BasicRuntimeChecks="0"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
RuntimeLibrary="3"
EnableFunctionLevelLinking="false"
PrecompiledHeaderFile=".\Debug/G3DTest.pch"
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
@@ -176,7 +176,7 @@
SuppressStartupBanner="true"
GenerateDebugInformation="true"
ProgramDatabaseFile=".\Debug/G3DTest.pdb"
SubSystem="2"
SubSystem="1"
TargetMachine="1"
/>
<Tool

View File

@@ -1,4 +1,5 @@
//#include "WindowFunctions.h"
#pragma once
#include <mshtml.h>
#include <exdisp.h>
//#include <Mshtmhst.h>

View File

@@ -1,14 +1,5 @@
#include "ImageButtonInstance.h"
G3D::TextureRef image = NULL;
int openGLID = 0;
G3D::TextureRef image_ovr = NULL;
int openGLID_ovr = 0;
G3D::TextureRef image_dn = NULL;
int openGLID_dn = 0;
G3D::TextureRef image_ds = NULL;
int openGLID_ds = 0;
Vector2 size;
Vector2 position;
ImageButtonInstance::ImageButtonInstance(G3D::TextureRef newImage, G3D::TextureRef overImage = NULL, G3D::TextureRef downImage = NULL, G3D::TextureRef disableImage = NULL)
{

View File

@@ -2,10 +2,6 @@
#include <G3DAll.h>
#include "Instance.h"
std::string name;
Instance* parent = NULL;
std::vector<Instance* > children;
static std::string className = "BaseInstance";
Instance::Instance(void)
{
@@ -21,6 +17,8 @@ Instance::Instance(const Instance &oinst)
className = oinst.className;
}
void Instance::render(RenderDevice* rd)
{
for(size_t i = 0; i < children.size(); i++)
@@ -29,6 +27,45 @@ void Instance::render(RenderDevice* rd)
}
}
PROPGRIDITEM Instance::createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type)
{
PROPGRIDITEM pItem;
PropGrid_ItemInit(pItem);
pItem.lpszCatalog=catalog;
pItem.lpszPropName=propName;
pItem.lpszPropDesc=propDesc;
pItem.lpCurValue=curVal;
pItem.iItemType=type;
return pItem;
}
void Instance::PropUpdate(LPPROPGRIDITEM &item)
{
if(strcmp(item->lpszPropName, "Name") == 0)
{
name = item->lpCurValue;
}
}
std::vector<PROPGRIDITEM> Instance::getProperties()
{
std::vector<PROPGRIDITEM> properties;
properties.push_back(createPGI(
"Properties",
"Name",
"The name of this instance",
(LPARAM)name.c_str(),
PIT_EDIT
));
return properties;
}
Instance::~Instance(void)
{
for(size_t i = 0; i < children.size(); i++)
@@ -110,3 +147,6 @@ Instance* Instance::findFirstChild(std::string name)
}
return child;
}

View File

@@ -1,6 +1,7 @@
#include <G3DAll.h>
#pragma once
#pragma once
#include <G3DAll.h>
#include "propertyGrid.h"
class Instance
{
public:
@@ -19,7 +20,11 @@ public:
void removeChild(Instance*);
Instance* getParent();
virtual Instance* clone() const { return new Instance(*this); }
virtual std::vector<PROPGRIDITEM> getProperties();
virtual void PropUpdate(LPPROPGRIDITEM &pItem);
protected:
std::string className;
Instance* parent; // Another pointer.
PROPGRIDITEM createPGI(LPSTR catalog, LPSTR propName, LPSTR propDesc, LPARAM curVal, INT type);
};

View File

@@ -1,8 +1,6 @@
#include "PhysicalInstance.h"
#include "Globals.h"
GLfloat vertecies[96];
bool changed = true;
Box itemBox = Box();
PhysicalInstance::PhysicalInstance(void)
{
@@ -214,7 +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;
while (ss >> i)
{
vect.push_back(i);
if (ss.peek() == ',')
ss.ignore();
}
if(vect.size() != 3)
{
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<PROPGRIDITEM> PhysicalInstance::getProperties()
{
std::vector<PROPGRIDITEM> properties;
properties.push_back(createPGI(
"Properties",
"Name",
"The name of this instance",
(LPARAM)name.c_str(),
PIT_EDIT
));
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)str,
PIT_EDIT
));
return properties;
}

View File

@@ -33,7 +33,12 @@ public:
bool anchored;
Vector3 rotVelocity;
bool collides(Box);
virtual std::vector<PROPGRIDITEM> getProperties();
virtual void PropUpdate(LPPROPGRIDITEM &pItem);
private:
Vector3 position;
Vector3 size;
GLfloat vertecies[96];
bool changed;
Box itemBox;
};

View File

@@ -1,9 +1,16 @@
#define _WINSOCKAPI_
#include <windows.h>
#include "WindowFunctions.h"
#include "propertyGrid.h"
#include "resource.h"
#include "PropertyWindow.h"
/*typedef struct typPRGP {
Instance* instance; // Declare member types
Property &prop;
} PRGP;*/
std::vector<PROPGRIDITEM> prop;
Instance* selectedInstance;
LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
PropertyWindow *propWind = (PropertyWindow *)GetWindowLongPtr(hwnd, GWL_USERDATA);
@@ -13,11 +20,34 @@ 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();
}
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);
}
@@ -31,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,
@@ -45,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";
@@ -79,14 +109,14 @@ 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);
PropGrid_ExpandAllCatalogs(_propGrid);
SetWindowLongPtr(_propGrid,GWL_USERDATA,(LONG)this);
SetWindowLongPtr(_hwndProp,GWL_USERDATA,(LONG)this);
_redraw();
return true;
@@ -107,3 +137,26 @@ void PropertyWindow::_redraw()
GetClientRect(_hwndProp,&rect);
SetWindowPos(_propGrid, NULL, 0, 20, rect.right, rect.bottom-20, SWP_NOZORDER | SWP_NOACTIVATE);
}
void PropertyWindow::SetProperties(Instance * instance)
{
PropGrid_ResetContent(_propGrid);
prop = instance->getProperties();
selectedInstance = instance;
for(size_t i = 0; i < prop.size(); i++)
{
::PROPGRIDITEM item = prop.at(i);
PropGrid_AddItem(_propGrid, &item);
//PRGP propgp;
//propgp.instance = instance;
//propgp.prop = prop.at(i);
}
PropGrid_ExpandAllCatalogs(_propGrid);
SetWindowLongPtr(_propGrid,GWL_USERDATA,(LONG)this);
_redraw();
}
void PropertyWindow::ClearProperties()
{
PropGrid_ResetContent(_propGrid);
}

View File

@@ -1,12 +1,15 @@
#pragma once
#include "Instance.h"
class PropertyWindow {
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();
};

View File

@@ -1,25 +1,5 @@
#include "TextButtonInstance.h"
Vector2 boxBegin;
Vector2 boxEnd;
Vector2 fontLocationRelativeTo;
Color4 textColor;
Color4 textOutlineColor;
Color4 boxColor;
Color4 boxOutlineColor;
Color4 textColorOvr;
Color4 textOutlineColorOvr;
Color4 boxColorOvr;
Color4 boxOutlineColorOvr;
Color4 textColorDn;
Color4 textOutlineColorDn;
Color4 boxColorDn;
Color4 boxOutlineColorDn;
bool centeredWithinBox;
std::string title;
G3D::GFontRef* font;
int textSize;
bool visible;
TextButtonInstance::TextButtonInstance(void)
{

View File

@@ -1,6 +1,5 @@
#include "WorkspaceInstance.h"
float timer = 60.0F;
int score = 0;
WorkspaceInstance::WorkspaceInstance(void)
{

View File

@@ -79,7 +79,7 @@ bool dragging = false;
Vector2 oldMouse = Vector2(0,0);
float moveRate = 0.5;
std::vector<Instance*> selectedInstances = std::vector<Instance*>();
static const std::string PlaceholderName = "Dynamica";
static const std::string PlaceholderName = "HyperCube";
Demo *usableApp = NULL;
@@ -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()
@@ -254,7 +254,15 @@ void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button)
std::vector<Instance*> newinst;
for(size_t i = 0; i < selectedInstances.size(); i++)
{
newinst.push_back(selectedInstances.at(i)->clone());
PhysicalInstance* tempinst = (PhysicalInstance*) selectedInstances.at(i);
Vector3 tempPos = tempinst->getPosition();
Vector3 tempSize = tempinst->getSize();
PhysicalInstance* clonedInstance = (PhysicalInstance*) selectedInstances.at(i)->clone();
newinst.push_back(tempinst);
/*tempinst->setPosition(Vector3(tempPos.x, tempPos.y + tempSize.y, tempPos.z));
usableApp->cameraController.centerCamera(selectedInstances.at(0));*/
}
selectedInstances = newinst;
}
@@ -1250,25 +1258,41 @@ 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();
//dragging = true;
@@ -1276,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)