Merge pull request #76 from Vulpovile/feature/selection-service
Create a selection service
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
||||||
<assemblyIdentity
|
<assemblyIdentity
|
||||||
version="0.0.105.2"
|
version="0.0.106.0"
|
||||||
processorArchitecture="*"
|
processorArchitecture="*"
|
||||||
name="Blocks3D.Blocks3D.Blocks3D"
|
name="Blocks3D.Blocks3D.Blocks3D"
|
||||||
type="win32"
|
type="win32"
|
||||||
|
|||||||
@@ -491,6 +491,10 @@
|
|||||||
/>
|
/>
|
||||||
</FileConfiguration>
|
</FileConfiguration>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\src\source\DataModel\SelectionService.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\src\source\DataModelV2\WorkspaceInstance.cpp"
|
RelativePath=".\src\source\DataModelV2\WorkspaceInstance.cpp"
|
||||||
>
|
>
|
||||||
@@ -840,6 +844,10 @@
|
|||||||
RelativePath=".\src\include\DataModelV2\PVInstance.h"
|
RelativePath=".\src\include\DataModelV2\PVInstance.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\src\include\DataModelV2\SelectionService.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\src\include\DataModelV2\WorkspaceInstance.h"
|
RelativePath=".\src\include\DataModelV2\WorkspaceInstance.h"
|
||||||
>
|
>
|
||||||
|
|||||||
36
Dialogs.rc
36
Dialogs.rc
@@ -16,7 +16,39 @@
|
|||||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
|
||||||
IDB_BITMAP1 BITMAP "Parts.bmp"
|
IDB_BITMAP1 BITMAP "Parts.bmp"
|
||||||
|
|
||||||
|
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
|
1 VERSIONINFO
|
||||||
|
FILEVERSION 0,0,106,0
|
||||||
|
PRODUCTVERSION 0,0,106,0
|
||||||
|
FILEOS VOS__WINDOWS32
|
||||||
|
FILETYPE VFT_APP
|
||||||
|
FILESUBTYPE VFT2_UNKNOWN
|
||||||
|
FILEFLAGSMASK 0
|
||||||
|
FILEFLAGS 0
|
||||||
|
{
|
||||||
|
BLOCK "StringFileInfo"
|
||||||
|
{
|
||||||
|
BLOCK "100901B5"
|
||||||
|
{
|
||||||
|
VALUE "Comments", ""
|
||||||
|
VALUE "CompanyName", "Blocks3D Team"
|
||||||
|
VALUE "FileDescription", "Blocks 3D"
|
||||||
|
VALUE "FileVersion", "v0.0.106.0"
|
||||||
|
VALUE "InternalName", "Blocks3D"
|
||||||
|
VALUE "LegalCopyright", "Blocks3D Team - 2022"
|
||||||
|
VALUE "LegalTrademarks", ""
|
||||||
|
VALUE "OriginalFilename", "Blocks3D.exe"
|
||||||
|
VALUE "PrivateBuild", ""
|
||||||
|
VALUE "ProductName", "Blocks3D"
|
||||||
|
VALUE "ProductVersion", "v0.0.106.0"
|
||||||
|
VALUE "SpecialBuild", ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BLOCK "VarFileInfo"
|
||||||
|
{
|
||||||
|
VALUE "Translation", 0x1009, 0x01B5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Dialog resources
|
// Dialog resources
|
||||||
@@ -49,5 +81,5 @@ IDI_ICON1 ICON "FatB3dIcon.ico"
|
|||||||
//
|
//
|
||||||
#ifndef _DEBUG
|
#ifndef _DEBUG
|
||||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
1 RT_MANIFEST ".\\Blocks3D.exe.manifest"
|
1 MANIFEST ".\\Blocks3D.exe.manifest"
|
||||||
#endif
|
#endif
|
||||||
@@ -1,14 +1,15 @@
|
|||||||
;InnoSetupVersion=5.4.3
|
;InnoSetupVersion=5.4.3
|
||||||
|
#define AppVer GetFileVersion('..\Blocks3D.exe')
|
||||||
|
|
||||||
[Setup]
|
[Setup]
|
||||||
AppName=Blocks3D
|
AppName=Blocks3D
|
||||||
|
AppVersion=v{#AppVer}
|
||||||
AppId={{4C5DF268-0208-4CDE-A7F0-65F7E2CB5067}
|
AppId={{4C5DF268-0208-4CDE-A7F0-65F7E2CB5067}
|
||||||
AppVersion=v0.0.105.2
|
|
||||||
AppPublisherURL=http://blocks3d.com/
|
AppPublisherURL=http://blocks3d.com/
|
||||||
AppSupportURL=http://blocks3d.com/
|
AppSupportURL=http://blocks3d.com/
|
||||||
AppUpdatesURL=http://blocks3d.com/
|
AppUpdatesURL=http://blocks3d.com/
|
||||||
DefaultDirName={%localappdata}\Blocks3D
|
DefaultDirName={%localappdata}\Blocks3D
|
||||||
OutputBaseFilename=Blocks3D_Setup_{#SetupSetting("AppVersion")}
|
OutputBaseFilename=Blocks3D_Setup_v{#AppVer}
|
||||||
Compression=lzma2
|
Compression=lzma2
|
||||||
PrivilegesRequired=lowest
|
PrivilegesRequired=lowest
|
||||||
WizardImageFile=setup.bmp
|
WizardImageFile=setup.bmp
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ class Application { // : public GApp {
|
|||||||
PartInstance* makePart();
|
PartInstance* makePart();
|
||||||
void drawButtons(RenderDevice* rd);
|
void drawButtons(RenderDevice* rd);
|
||||||
void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters lighting, Vector3 size, Vector3 pos, CoordinateFrame c);
|
void drawOutline(Vector3 from, Vector3 to, RenderDevice* rd, LightingParameters lighting, Vector3 size, Vector3 pos, CoordinateFrame c);
|
||||||
std::vector<Instance*> getSelection();
|
|
||||||
void deleteInstance();
|
void deleteInstance();
|
||||||
void run();
|
void run();
|
||||||
void QuitApp();
|
void QuitApp();
|
||||||
@@ -60,6 +59,7 @@ class Application { // : public GApp {
|
|||||||
Tool * tool;
|
Tool * tool;
|
||||||
void changeTool(Tool *);
|
void changeTool(Tool *);
|
||||||
Mouse mouse;
|
Mouse mouse;
|
||||||
|
bool viewportHasFocus();
|
||||||
private:
|
private:
|
||||||
bool mouseMoveState;
|
bool mouseMoveState;
|
||||||
RenderDevice* renderDevice;
|
RenderDevice* renderDevice;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#include "WorkspaceInstance.h"
|
#include "WorkspaceInstance.h"
|
||||||
#include "LevelInstance.h"
|
#include "LevelInstance.h"
|
||||||
#include "PartInstance.h"
|
#include "PartInstance.h"
|
||||||
|
#include "SelectionService.h"
|
||||||
#include "rapidxml/rapidxml.hpp"
|
#include "rapidxml/rapidxml.hpp"
|
||||||
#include "GuiRootInstance.h"
|
#include "GuiRootInstance.h"
|
||||||
#include "XplicitNgine/XplicitNgine.h"
|
#include "XplicitNgine/XplicitNgine.h"
|
||||||
@@ -30,12 +31,7 @@ public:
|
|||||||
bool showMessage;
|
bool showMessage;
|
||||||
G3D::GFontRef font;
|
G3D::GFontRef font;
|
||||||
GuiRootInstance* getGuiRoot();
|
GuiRootInstance* getGuiRoot();
|
||||||
//float mousex;
|
SelectionService* getSelectionService();
|
||||||
//float mousey;
|
|
||||||
//Vector2 getMousePos();
|
|
||||||
//void setMousePos(int x,int y);
|
|
||||||
//void setMousePos(Vector2 pos);
|
|
||||||
//bool mouseButton1Down;
|
|
||||||
PartInstance* makePart();
|
PartInstance* makePart();
|
||||||
void clearLevel();
|
void clearLevel();
|
||||||
void toggleRun();
|
void toggleRun();
|
||||||
@@ -56,6 +52,7 @@ private:
|
|||||||
WorkspaceInstance* workspace;
|
WorkspaceInstance* workspace;
|
||||||
LevelInstance * level;
|
LevelInstance * level;
|
||||||
GuiRootInstance* guiRoot;
|
GuiRootInstance* guiRoot;
|
||||||
|
SelectionService* selectionService;
|
||||||
bool running;
|
bool running;
|
||||||
XplicitNgine * xplicitNgine;
|
XplicitNgine * xplicitNgine;
|
||||||
};
|
};
|
||||||
|
|||||||
21
src/include/DataModelV2/SelectionService.h
Normal file
21
src/include/DataModelV2/SelectionService.h
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "Instance.h"
|
||||||
|
#include "PropertyWindow.h"
|
||||||
|
|
||||||
|
class SelectionService : public Instance
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SelectionService(void);
|
||||||
|
~SelectionService(void);
|
||||||
|
SelectionService(const SelectionService &oinst);
|
||||||
|
std::vector<Instance *> getSelection();
|
||||||
|
void clearSelection();
|
||||||
|
bool isSelected(Instance * instance);
|
||||||
|
void addSelected(Instance * instance);
|
||||||
|
void removeSelected(Instance * instance);
|
||||||
|
void addSelected(const std::vector<Instance *> &instances);
|
||||||
|
void setPropertyWindow(PropertyWindow * propertyWindow);
|
||||||
|
private:
|
||||||
|
std::vector<Instance *> selection;
|
||||||
|
PropertyWindow * propertyWindow;
|
||||||
|
};
|
||||||
@@ -25,7 +25,6 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern std::vector<Instance*> postRenderStack;
|
extern std::vector<Instance*> postRenderStack;
|
||||||
extern std::vector<Instance*> g_selectedInstances;
|
|
||||||
extern bool running;
|
extern bool running;
|
||||||
extern DataModelInstance* g_dataModel;
|
extern DataModelInstance* g_dataModel;
|
||||||
extern XplicitNgine* g_xplicitNgine;
|
extern XplicitNgine* g_xplicitNgine;
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "DataModelV2/Instance.h"
|
#include "DataModelV2/Instance.h"
|
||||||
|
#include <set>
|
||||||
|
|
||||||
class PropertyWindow {
|
class PropertyWindow {
|
||||||
public:
|
public:
|
||||||
PropertyWindow(int x, int y, int sx, int sy, HMODULE hThisInstance);
|
PropertyWindow(int x, int y, int sx, int sy, HMODULE hThisInstance);
|
||||||
bool onCreate(int x, int y, int sx, int sy, HMODULE hThisInstance);
|
bool onCreate(int x, int y, int sx, int sy, HMODULE hThisInstance);
|
||||||
void UpdateSelected(Instance *);
|
void UpdateSelected(std::vector<Instance *> selection);
|
||||||
void ClearProperties();
|
void ClearProperties();
|
||||||
void onResize();
|
void onResize();
|
||||||
void refreshExplorer(Instance* selectedInstance);
|
void refreshExplorer(std::vector<Instance *> selection);
|
||||||
HWND _hwndProp;
|
HWND _hwndProp;
|
||||||
private:
|
private:
|
||||||
HWND _propGrid;
|
HWND _propGrid;
|
||||||
|
|||||||
@@ -143,6 +143,11 @@ Application::Application(HWND parentWindow) : _propWindow(NULL) { //: GApp(setti
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Application::viewportHasFocus()
|
||||||
|
{
|
||||||
|
return GetActiveWindow() == this->_hWndMain;
|
||||||
|
}
|
||||||
|
|
||||||
void Application::navigateToolbox(std::string path)
|
void Application::navigateToolbox(std::string path)
|
||||||
{
|
{
|
||||||
int len = path.size() + 1;
|
int len = path.size() + 1;
|
||||||
@@ -154,19 +159,19 @@ void Application::navigateToolbox(std::string path)
|
|||||||
|
|
||||||
void Application::deleteInstance()
|
void Application::deleteInstance()
|
||||||
{
|
{
|
||||||
if(g_selectedInstances.size() > 0)
|
if(_dataModel->getSelectionService()->getSelection().size() > 0)
|
||||||
{
|
{
|
||||||
size_t undeletable = 0;
|
size_t undeletable = 0;
|
||||||
while(g_selectedInstances.size() > undeletable)
|
while(_dataModel->getSelectionService()->getSelection().size() > undeletable)
|
||||||
{
|
{
|
||||||
if(g_selectedInstances.at(0)->canDelete)
|
if(_dataModel->getSelectionService()->getSelection()[0]->canDelete)
|
||||||
{
|
{
|
||||||
AudioPlayer::playSound(GetFileInPath("/content/sounds/pageturn.wav"));
|
AudioPlayer::playSound(GetFileInPath("/content/sounds/pageturn.wav"));
|
||||||
Instance* selectedInstance = g_selectedInstances.at(0);
|
Instance* selectedInstance = g_dataModel->getSelectionService()->getSelection()[0];
|
||||||
|
_dataModel->getSelectionService()->removeChild(selectedInstance);
|
||||||
selectedInstance->setParent(NULL);
|
selectedInstance->setParent(NULL);
|
||||||
delete selectedInstance;
|
delete selectedInstance;
|
||||||
selectedInstance = NULL;
|
selectedInstance = NULL;
|
||||||
g_selectedInstances.erase(g_selectedInstances.begin());
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -174,8 +179,8 @@ void Application::deleteInstance()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(g_selectedInstances.size() == 0)
|
if(_dataModel->getSelectionService()->getSelection().size() == 0)
|
||||||
g_usableApp->_propWindow->UpdateSelected(g_dataModel);
|
_dataModel->getSelectionService()->addSelected(_dataModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -280,6 +285,8 @@ void Application::onInit() {
|
|||||||
_dataModel->debugGetOpen();
|
_dataModel->debugGetOpen();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
_dataModel->getSelectionService()->clearSelection();
|
||||||
|
_dataModel->getSelectionService()->addSelected(_dataModel);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -311,10 +318,6 @@ void Application::onNetwork() {
|
|||||||
// return pow(pow((double)vector1.x - (double)vector2.x, 2) + pow((double)vector1.y - (double)vector2.y, 2) + pow((double)vector1.z - (double)vector2.z, 2), 0.5);
|
// return pow(pow((double)vector1.x - (double)vector2.x, 2) + pow((double)vector1.y - (double)vector2.y, 2) + pow((double)vector1.z - (double)vector2.z, 2), 0.5);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
std::vector<Instance*> Application::getSelection()
|
|
||||||
{
|
|
||||||
return g_selectedInstances;
|
|
||||||
}
|
|
||||||
void Application::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) {
|
void Application::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) {
|
||||||
|
|
||||||
if(_dataModel->isRunning())
|
if(_dataModel->isRunning())
|
||||||
@@ -331,25 +334,13 @@ void Application::onSimulation(RealTime rdt, SimTime sdt, SimTime idt) {
|
|||||||
else
|
else
|
||||||
_dataModel->getEngine()->createBody(partInstance);
|
_dataModel->getEngine()->createBody(partInstance);
|
||||||
}
|
}
|
||||||
bool a = false;
|
|
||||||
while(toDelete.size() > 0)
|
while(toDelete.size() > 0)
|
||||||
{
|
{
|
||||||
PartInstance * p = toDelete.back();
|
PartInstance * p = toDelete.back();
|
||||||
toDelete.pop_back();
|
toDelete.pop_back();
|
||||||
if(std::find(g_selectedInstances.begin(), g_selectedInstances.end(), p) != g_selectedInstances.end())
|
g_dataModel->getSelectionService()->removeSelected(p);
|
||||||
{
|
|
||||||
g_selectedInstances.erase(std::remove(g_selectedInstances.begin(), g_selectedInstances.end(), p), g_selectedInstances.end());
|
|
||||||
a = true;
|
|
||||||
}
|
|
||||||
p->setParent(NULL);
|
p->setParent(NULL);
|
||||||
delete p;
|
delete p;
|
||||||
}
|
|
||||||
if(a)
|
|
||||||
{
|
|
||||||
if(g_selectedInstances.size() == 0)
|
|
||||||
g_usableApp->_propWindow->UpdateSelected(g_dataModel);
|
|
||||||
else if(g_selectedInstances.size() == 1)
|
|
||||||
g_usableApp->_propWindow->UpdateSelected(g_selectedInstances[0]);
|
|
||||||
}
|
}
|
||||||
for(int i = 0; i < 6; i++)
|
for(int i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
@@ -603,17 +594,15 @@ void Application::onGraphics(RenderDevice* rd) {
|
|||||||
|
|
||||||
|
|
||||||
//Draw::box(G3D::Box(mouse.getPosition()-Vector3(2,0.5F,1),mouse.getPosition()+Vector3(2,0.5F,1)), rd, Color3::cyan(), Color4::clear());
|
//Draw::box(G3D::Box(mouse.getPosition()-Vector3(2,0.5F,1),mouse.getPosition()+Vector3(2,0.5F,1)), rd, Color3::cyan(), Color4::clear());
|
||||||
if(g_selectedInstances.size() > 0)
|
|
||||||
|
for(size_t i = 0; i < _dataModel->getSelectionService()->getSelection().size(); i++)
|
||||||
{
|
{
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
if(PartInstance* part = dynamic_cast<PartInstance*>(g_dataModel->getSelectionService()->getSelection()[i]))
|
||||||
{
|
{
|
||||||
if(PartInstance* part = dynamic_cast<PartInstance*>(g_selectedInstances.at(i)))
|
Vector3 size = part->getSize();
|
||||||
{
|
Vector3 pos = part->getPosition();
|
||||||
Vector3 size = part->getSize();
|
drawOutline(Vector3(0+size.x/2, 0+size.y/2, 0+size.z/2) ,Vector3(0-size.x/2,0-size.y/2,0-size.z/2), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x, pos.y, pos.z), part->getCFrame());
|
||||||
Vector3 pos = part->getPosition();
|
}
|
||||||
drawOutline(Vector3(0+size.x/2, 0+size.y/2, 0+size.z/2) ,Vector3(0-size.x/2,0-size.y/2,0-size.z/2), rd, lighting, Vector3(size.x/2, size.y/2, size.z/2), Vector3(pos.x, pos.y, pos.z), part->getCFrame());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -702,12 +691,6 @@ void Application::onKeyUp(int key)
|
|||||||
|
|
||||||
void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
|
void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
|
||||||
{
|
{
|
||||||
//Removed set focus
|
|
||||||
|
|
||||||
|
|
||||||
//std::cout << "Click: " << x << "," << y << std::endl;
|
|
||||||
|
|
||||||
|
|
||||||
bool onGUI = _dataModel->getGuiRoot()->mouseInGUI(renderDevice, x, y);
|
bool onGUI = _dataModel->getGuiRoot()->mouseInGUI(renderDevice, x, y);
|
||||||
|
|
||||||
|
|
||||||
@@ -717,19 +700,6 @@ void Application::onMouseLeftPressed(HWND hwnd,int x,int y)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::selectInstance(Instance* selectedInstance, PropertyWindow* propWindow)
|
|
||||||
{
|
|
||||||
if(!GetHoldKeyState(VK_RCONTROL) && !GetHoldKeyState(VK_LCONTROL))
|
|
||||||
{
|
|
||||||
printf("No control key hold \n");
|
|
||||||
g_selectedInstances.clear();
|
|
||||||
}
|
|
||||||
else printf("Control held\n");
|
|
||||||
if(std::find(g_selectedInstances.begin(), g_selectedInstances.end(),selectedInstance)==g_selectedInstances.end())
|
|
||||||
g_selectedInstances.push_back(selectedInstance);
|
|
||||||
propWindow->UpdateSelected(selectedInstance);
|
|
||||||
|
|
||||||
}
|
|
||||||
G3D::RenderDevice* Application::getRenderDevice()
|
G3D::RenderDevice* Application::getRenderDevice()
|
||||||
{
|
{
|
||||||
return renderDevice;
|
return renderDevice;
|
||||||
@@ -737,13 +707,9 @@ G3D::RenderDevice* Application::getRenderDevice()
|
|||||||
|
|
||||||
void Application::onMouseLeftUp(G3D::RenderDevice* renderDevice, int x, int y)
|
void Application::onMouseLeftUp(G3D::RenderDevice* renderDevice, int x, int y)
|
||||||
{
|
{
|
||||||
//std::cout << "Release: " << x << "," << y << std::endl;
|
|
||||||
_dataModel->getGuiRoot()->onMouseLeftUp(renderDevice, x, y);
|
_dataModel->getGuiRoot()->onMouseLeftUp(renderDevice, x, y);
|
||||||
_dragging = false;
|
_dragging = false;
|
||||||
tool->onButton1MouseUp(mouse);
|
tool->onButton1MouseUp(mouse);
|
||||||
//_message = "Dragging = false.";
|
|
||||||
//_messageTime = System::time();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::onMouseRightPressed(int x,int y)
|
void Application::onMouseRightPressed(int x,int y)
|
||||||
@@ -763,8 +729,6 @@ void Application::onMouseMoved(int x,int y)
|
|||||||
mouse.y = y;
|
mouse.y = y;
|
||||||
//tool->onMouseMoved(mouse);
|
//tool->onMouseMoved(mouse);
|
||||||
mouseMoveState = true;
|
mouseMoveState = true;
|
||||||
//_dataModel->mousex = x;
|
|
||||||
//_dataModel->mousey = y;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
void Application::onMouseWheel(int x,int y,short delta)
|
void Application::onMouseWheel(int x,int y,short delta)
|
||||||
|
|||||||
@@ -193,6 +193,8 @@ void CameraController::update(Application* app)
|
|||||||
Vector3 cameraPos = g3dCamera.getCoordinateFrame().translation;
|
Vector3 cameraPos = g3dCamera.getCoordinateFrame().translation;
|
||||||
CoordinateFrame frame = g3dCamera.getCoordinateFrame();
|
CoordinateFrame frame = g3dCamera.getCoordinateFrame();
|
||||||
bool moving=false;
|
bool moving=false;
|
||||||
|
if(!app->viewportHasFocus())
|
||||||
|
return;
|
||||||
if(GetHoldKeyState('U')) {
|
if(GetHoldKeyState('U')) {
|
||||||
forwards = true;
|
forwards = true;
|
||||||
moving=true;
|
moving=true;
|
||||||
|
|||||||
53
src/source/DataModel/SelectionService.cpp
Normal file
53
src/source/DataModel/SelectionService.cpp
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
#include "DataModelV2/SelectionService.h"
|
||||||
|
|
||||||
|
SelectionService::SelectionService(void){
|
||||||
|
Instance::Instance();
|
||||||
|
propertyWindow = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
SelectionService::~SelectionService(void){
|
||||||
|
}
|
||||||
|
|
||||||
|
SelectionService::SelectionService(const SelectionService &oinst){
|
||||||
|
Instance::Instance(oinst);
|
||||||
|
propertyWindow = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<Instance *> SelectionService::getSelection(){
|
||||||
|
return this->selection;
|
||||||
|
}
|
||||||
|
void SelectionService::clearSelection(){
|
||||||
|
this->selection.clear();
|
||||||
|
if(propertyWindow != NULL)
|
||||||
|
propertyWindow->ClearProperties();
|
||||||
|
}
|
||||||
|
bool SelectionService::isSelected(Instance * instance){
|
||||||
|
return std::find(selection.begin(), selection.end(), instance) != selection.end();
|
||||||
|
}
|
||||||
|
void SelectionService::addSelected(Instance * instance){
|
||||||
|
if(!isSelected(instance))
|
||||||
|
this->selection.push_back(instance);
|
||||||
|
if(propertyWindow != NULL)
|
||||||
|
propertyWindow->UpdateSelected(selection);
|
||||||
|
}
|
||||||
|
void SelectionService::removeSelected(Instance * instance){
|
||||||
|
selection.erase(std::remove(selection.begin(), selection.end(), instance), selection.end());
|
||||||
|
if(propertyWindow != NULL)
|
||||||
|
propertyWindow->UpdateSelected(selection);
|
||||||
|
}
|
||||||
|
void SelectionService::addSelected(const std::vector<Instance *> &instances){
|
||||||
|
for(size_t i = 0; i < instances.size(); i++)
|
||||||
|
{
|
||||||
|
if(!isSelected(instances[i]))
|
||||||
|
this->selection.push_back(instances[i]);
|
||||||
|
}
|
||||||
|
if(propertyWindow != NULL)
|
||||||
|
propertyWindow->UpdateSelected(selection);
|
||||||
|
}
|
||||||
|
void SelectionService::setPropertyWindow(PropertyWindow * propertyWindow)
|
||||||
|
{
|
||||||
|
this->propertyWindow = propertyWindow;
|
||||||
|
if(propertyWindow != NULL)
|
||||||
|
propertyWindow->ClearProperties();
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include "DataModelV2/GuiRootInstance.h"
|
#include "DataModelV2/GuiRootInstance.h"
|
||||||
|
#include "DataModelV2/ToggleImageButtonInstance.h"
|
||||||
#include "DataModelV2/DataModelInstance.h"
|
#include "DataModelV2/DataModelInstance.h"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@@ -19,6 +20,8 @@ DataModelInstance::DataModelInstance(void)
|
|||||||
workspace = new WorkspaceInstance();
|
workspace = new WorkspaceInstance();
|
||||||
guiRoot = new GuiRootInstance();
|
guiRoot = new GuiRootInstance();
|
||||||
level = new LevelInstance();
|
level = new LevelInstance();
|
||||||
|
selectionService = new SelectionService();
|
||||||
|
selectionService->setPropertyWindow(g_usableApp->_propWindow);
|
||||||
//children.push_back(workspace);
|
//children.push_back(workspace);
|
||||||
//children.push_back(level);
|
//children.push_back(level);
|
||||||
className = "dataModel";
|
className = "dataModel";
|
||||||
@@ -61,6 +64,7 @@ void DataModelInstance::toggleRun()
|
|||||||
//if(!running)
|
//if(!running)
|
||||||
//resetEngine();
|
//resetEngine();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DataModelInstance::isRunning()
|
bool DataModelInstance::isRunning()
|
||||||
{
|
{
|
||||||
return running;
|
return running;
|
||||||
@@ -83,8 +87,17 @@ void DataModelInstance::modXMLLevel(float modY)
|
|||||||
|
|
||||||
void DataModelInstance::clearLevel()
|
void DataModelInstance::clearLevel()
|
||||||
{
|
{
|
||||||
|
running = false;
|
||||||
|
Instance * goButton = this->getGuiRoot()->findFirstChild("go");
|
||||||
|
if(goButton != NULL){
|
||||||
|
if(ToggleImageButtonInstance* goButtonReal = dynamic_cast<ToggleImageButtonInstance*>(goButton))
|
||||||
|
{
|
||||||
|
goButtonReal->checked = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
selectionService->clearSelection();
|
||||||
|
selectionService->addSelected(this);
|
||||||
workspace->clearChildren();
|
workspace->clearChildren();
|
||||||
g_usableApp->_propWindow->UpdateSelected(this);
|
|
||||||
}
|
}
|
||||||
PartInstance* DataModelInstance::makePart()
|
PartInstance* DataModelInstance::makePart()
|
||||||
{
|
{
|
||||||
@@ -480,6 +493,8 @@ bool DataModelInstance::load(const char* filename, bool clearObjects)
|
|||||||
std::string tname = hname.substr(0, hname.length() - 5);
|
std::string tname = hname.substr(0, hname.length() - 5);
|
||||||
name = tname;
|
name = tname;
|
||||||
resetEngine();
|
resetEngine();
|
||||||
|
selectionService->clearSelection();
|
||||||
|
selectionService->addSelected(this);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -622,25 +637,16 @@ WorkspaceInstance* DataModelInstance::getWorkspace()
|
|||||||
{
|
{
|
||||||
return workspace;
|
return workspace;
|
||||||
}
|
}
|
||||||
/*Vector2 DataModelInstance::getMousePos()
|
|
||||||
{
|
|
||||||
return Vector2(mousex,mousey);
|
|
||||||
}
|
|
||||||
void DataModelInstance::setMousePos(int x,int y)
|
|
||||||
{
|
|
||||||
mousex=x;
|
|
||||||
mousey=y;
|
|
||||||
}
|
|
||||||
void DataModelInstance::setMousePos(Vector2 pos)
|
|
||||||
{
|
|
||||||
mousex=pos.x;
|
|
||||||
mousey=pos.y;
|
|
||||||
}*/
|
|
||||||
GuiRootInstance* DataModelInstance::getGuiRoot()
|
GuiRootInstance* DataModelInstance::getGuiRoot()
|
||||||
{
|
{
|
||||||
return guiRoot;
|
return guiRoot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SelectionService* DataModelInstance::getSelectionService()
|
||||||
|
{
|
||||||
|
return selectionService;
|
||||||
|
}
|
||||||
|
|
||||||
LevelInstance* DataModelInstance::getLevel()
|
LevelInstance* DataModelInstance::getLevel()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -507,8 +507,8 @@ void GuiRootInstance::update()
|
|||||||
button4->disabled = true;
|
button4->disabled = true;
|
||||||
button5->disabled = true;
|
button5->disabled = true;
|
||||||
button6->disabled = true;
|
button6->disabled = true;
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++)
|
||||||
if(g_selectedInstances.at(i)->canDelete)
|
if(g_dataModel->getSelectionService()->getSelection()[i]->canDelete)
|
||||||
{
|
{
|
||||||
button->disabled = false;
|
button->disabled = false;
|
||||||
button2->disabled = false;
|
button2->disabled = false;
|
||||||
|
|||||||
@@ -40,12 +40,12 @@ std::vector<PROPGRIDITEM> LevelInstance::getProperties()
|
|||||||
sprintf_s(scoreTxt, "%d", score);
|
sprintf_s(scoreTxt, "%d", score);
|
||||||
properties.push_back(createPGI("Gameplay",
|
properties.push_back(createPGI("Gameplay",
|
||||||
"InitialTimerValue",
|
"InitialTimerValue",
|
||||||
"The ammount of time in seconds the player has to complete this level.\r\n\r\nPut 0 if time is limitless.",
|
"The amount of time in seconds the player has to complete this level.\r\n\r\nPut 0 if time is limitless.",
|
||||||
(LPARAM)timerTxt,
|
(LPARAM)timerTxt,
|
||||||
PIT_EDIT));
|
PIT_EDIT));
|
||||||
properties.push_back(createPGI("Gameplay",
|
properties.push_back(createPGI("Gameplay",
|
||||||
"InitialScoreValue",
|
"InitialScoreValue",
|
||||||
"The ammount of points the player starts with.",
|
"The amount of points the player starts with.",
|
||||||
(LPARAM)scoreTxt,
|
(LPARAM)scoreTxt,
|
||||||
PIT_EDIT));
|
PIT_EDIT));
|
||||||
return properties;
|
return properties;
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ int Globals::surfaceId = 2;
|
|||||||
bool Globals::useMousePoint = false;
|
bool Globals::useMousePoint = false;
|
||||||
std::vector<Instance*> postRenderStack = std::vector<Instance*>();
|
std::vector<Instance*> postRenderStack = std::vector<Instance*>();
|
||||||
|
|
||||||
std::vector<Instance*> g_selectedInstances = std::vector<Instance*>();
|
|
||||||
DataModelInstance* g_dataModel = NULL;
|
DataModelInstance* g_dataModel = NULL;
|
||||||
XplicitNgine* g_xplicitNgine = NULL;
|
XplicitNgine* g_xplicitNgine = NULL;
|
||||||
|
|
||||||
|
|||||||
@@ -43,9 +43,9 @@ HRESULT IEBrowser::doExternal(std::wstring funcName,
|
|||||||
if(pDispParams->rgvarg->intVal < 0 || pDispParams->rgvarg->intVal > 7)
|
if(pDispParams->rgvarg->intVal < 0 || pDispParams->rgvarg->intVal > 7)
|
||||||
return S_OK;
|
return S_OK;
|
||||||
Enum::Controller::Value cont = (Enum::Controller::Value)pDispParams->rgvarg->intVal;
|
Enum::Controller::Value cont = (Enum::Controller::Value)pDispParams->rgvarg->intVal;
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++)
|
||||||
{
|
{
|
||||||
if(PVInstance* part = dynamic_cast<PVInstance*>(g_selectedInstances.at(i)))
|
if(PVInstance* part = dynamic_cast<PVInstance*>(g_dataModel->getSelectionService()->getSelection()[i]))
|
||||||
{
|
{
|
||||||
ding = true;
|
ding = true;
|
||||||
part->controller = cont;
|
part->controller = cont;
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ void CameraButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
|||||||
{
|
{
|
||||||
AudioPlayer::playSound(cameraSound);
|
AudioPlayer::playSound(cameraSound);
|
||||||
CoordinateFrame frame = g_usableApp->cameraController.getCamera()->getCoordinateFrame();
|
CoordinateFrame frame = g_usableApp->cameraController.getCamera()->getCoordinateFrame();
|
||||||
if(button->name == "CenterCam" && g_selectedInstances.size() > 0)
|
if(button->name == "CenterCam" && g_dataModel->getSelectionService()->getSelection().size() > 0)
|
||||||
g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));
|
g_usableApp->cameraController.centerCamera(g_dataModel->getSelectionService()->getSelection()[0]);
|
||||||
else if(button->name == "ZoomIn")
|
else if(button->name == "ZoomIn")
|
||||||
g_usableApp->cameraController.Zoom(1);
|
g_usableApp->cameraController.Zoom(1);
|
||||||
else if(button->name == "ZoomOut")
|
else if(button->name == "ZoomOut")
|
||||||
|
|||||||
@@ -2,13 +2,14 @@
|
|||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
#include "AudioPlayer.h"
|
#include "AudioPlayer.h"
|
||||||
|
#include "DataModelV2/SelectionService.h"
|
||||||
#include "Listener/GUDButtonListener.h"
|
#include "Listener/GUDButtonListener.h"
|
||||||
|
|
||||||
void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
||||||
{
|
{
|
||||||
bool cont = false;
|
bool cont = false;
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++)
|
||||||
if(g_selectedInstances.at(i)->canDelete)
|
if(g_dataModel->getSelectionService()->getSelection()[i]->canDelete)
|
||||||
{
|
{
|
||||||
cont = true;
|
cont = true;
|
||||||
break;
|
break;
|
||||||
@@ -19,53 +20,46 @@ void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
|||||||
if(button->name == "Duplicate")
|
if(button->name == "Duplicate")
|
||||||
{
|
{
|
||||||
std::vector<Instance*> newinst;
|
std::vector<Instance*> newinst;
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++)
|
||||||
{
|
{
|
||||||
if(g_selectedInstances.at(i)->canDelete)
|
if(g_dataModel->getSelectionService()->getSelection()[i]->canDelete)
|
||||||
{
|
{
|
||||||
Instance* tempinst = g_selectedInstances.at(i);
|
Instance* tempinst = g_dataModel->getSelectionService()->getSelection()[i];
|
||||||
|
|
||||||
Instance* clonedInstance = g_selectedInstances.at(i)->clone();
|
Instance* clonedInstance = g_dataModel->getSelectionService()->getSelection()[i]->clone();
|
||||||
|
|
||||||
newinst.push_back(tempinst);
|
newinst.push_back(tempinst);
|
||||||
}
|
}
|
||||||
/*tempinst->setPosition(Vector3(tempPos.x, tempPos.y + tempSize.y, tempPos.z));
|
|
||||||
g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));*/
|
|
||||||
}
|
}
|
||||||
g_selectedInstances = newinst;
|
g_dataModel->getSelectionService()->clearSelection();
|
||||||
if(g_selectedInstances.size() > 0)
|
g_dataModel->getSelectionService()->addSelected(newinst);
|
||||||
g_usableApp->_propWindow->UpdateSelected(newinst.at(0));
|
|
||||||
}
|
}
|
||||||
else if(button->name == "Group")
|
else if(button->name == "Group")
|
||||||
{
|
{
|
||||||
GroupInstance * inst = new GroupInstance();
|
GroupInstance * inst = new GroupInstance();
|
||||||
inst->setParent(g_dataModel->getWorkspace());
|
inst->setParent(g_dataModel->getWorkspace());
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++)
|
||||||
{
|
{
|
||||||
if(g_selectedInstances.at(i)->canDelete)
|
if(g_dataModel->getSelectionService()->getSelection()[i]->canDelete)
|
||||||
{
|
{
|
||||||
g_selectedInstances.at(i)->setParent(inst);
|
g_dataModel->getSelectionService()->getSelection()[i]->setParent(inst);
|
||||||
if(PartInstance* part = dynamic_cast<PartInstance*>(g_selectedInstances.at(i)))
|
if(PartInstance* part = dynamic_cast<PartInstance*>(g_dataModel->getSelectionService()->getSelection()[i]))
|
||||||
{
|
{
|
||||||
inst->primaryPart = part;
|
inst->primaryPart = part;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*tempinst->setPosition(Vector3(tempPos.x, tempPos.y + tempSize.y, tempPos.z));
|
|
||||||
g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));*/
|
|
||||||
}
|
}
|
||||||
g_selectedInstances.clear();
|
g_dataModel->getSelectionService()->clearSelection();
|
||||||
g_selectedInstances.push_back(inst);
|
g_dataModel->getSelectionService()->addSelected(inst);
|
||||||
if(g_selectedInstances.size() > 0)
|
|
||||||
g_usableApp->_propWindow->UpdateSelected(g_selectedInstances.at(0));
|
|
||||||
}
|
}
|
||||||
else if(button->name == "UnGroup")
|
else if(button->name == "UnGroup")
|
||||||
{
|
{
|
||||||
std::vector<Instance*> newinst;
|
std::vector<Instance*> newinst;
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++)
|
||||||
{
|
{
|
||||||
if(g_selectedInstances.at(i)->canDelete)
|
if(g_dataModel->getSelectionService()->getSelection()[i]->canDelete)
|
||||||
{
|
{
|
||||||
if(GroupInstance* model = dynamic_cast<GroupInstance*>(g_selectedInstances.at(i)))
|
if(GroupInstance* model = dynamic_cast<GroupInstance*>(g_dataModel->getSelectionService()->getSelection()[i]))
|
||||||
{
|
{
|
||||||
newinst = model->unGroup();
|
newinst = model->unGroup();
|
||||||
model->setParent(NULL);
|
model->setParent(NULL);
|
||||||
@@ -73,13 +67,9 @@ void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
|||||||
model = NULL;
|
model = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*tempinst->setPosition(Vector3(tempPos.x, tempPos.y + tempSize.y, tempPos.z));
|
|
||||||
g_usableApp->cameraController.centerCamera(g_selectedInstances.at(0));*/
|
|
||||||
}
|
}
|
||||||
g_selectedInstances.clear();
|
g_dataModel->getSelectionService()->clearSelection();
|
||||||
g_selectedInstances = newinst;
|
g_dataModel->getSelectionService()->addSelected(newinst);
|
||||||
if(g_selectedInstances.size() > 0)
|
|
||||||
g_usableApp->_propWindow->UpdateSelected(newinst.at(0));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,9 +5,9 @@
|
|||||||
|
|
||||||
void RotateButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
void RotateButtonListener::onButton1MouseClick(BaseButtonInstance* button)
|
||||||
{
|
{
|
||||||
if(g_selectedInstances.size() > 0)
|
if(g_dataModel->getSelectionService()->getSelection().size() > 0)
|
||||||
{
|
{
|
||||||
Instance* selectedInstance = g_selectedInstances.at(0);
|
Instance* selectedInstance = g_dataModel->getSelectionService()->getSelection()[0];
|
||||||
AudioPlayer::playSound(clickSound);
|
AudioPlayer::playSound(clickSound);
|
||||||
if(PartInstance* part = dynamic_cast<PartInstance*>(selectedInstance))
|
if(PartInstance* part = dynamic_cast<PartInstance*>(selectedInstance))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -112,31 +112,3 @@ void Mouse::setMouseDown(bool bval)
|
|||||||
{
|
{
|
||||||
mouseDown = bval;
|
mouseDown = bval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//bool found = false;
|
|
||||||
/*for(size_t i = 0; i < g_selectedInstances.size(); i++)
|
|
||||||
{
|
|
||||||
if(g_selectedInstances.at(i) == test)
|
|
||||||
{
|
|
||||||
found = true;
|
|
||||||
//ShowWindow(_propWindow->_hwndProp, SW_SHOW);
|
|
||||||
//SetActiveWindow(_propWindow->_hwndProp);
|
|
||||||
//SetForegroundWindow(_propWindow->_hwndProp);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!found)
|
|
||||||
{
|
|
||||||
selectedInstance = test;
|
|
||||||
//if(!GetHoldKeyState(VK_RCONTROL) && !GetHoldKeyState(VK_LCONTROL))
|
|
||||||
//g_selectedInstances.clear();
|
|
||||||
//if(std::find(g_selectedInstances.begin(), g_selectedInstances.end(),test)==g_selectedInstances.end())
|
|
||||||
//g_selectedInstances.push_back(test);
|
|
||||||
}
|
|
||||||
//selectInstance(test, _propWindow);
|
|
||||||
//_message = "Dragging = true.";
|
|
||||||
//_messageTime = System::time();
|
|
||||||
//_dragging = true;*/
|
|
||||||
|
|
||||||
|
|||||||
@@ -172,8 +172,8 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
int ItemIndex = SendMessage((HWND) lParam, (UINT) CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
|
int ItemIndex = SendMessage((HWND) lParam, (UINT) CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0);
|
||||||
CHAR ListItem[256];
|
CHAR ListItem[256];
|
||||||
SendMessage((HWND) lParam, (UINT) CB_GETLBTEXT, (WPARAM) ItemIndex, (LPARAM) ListItem);
|
SendMessage((HWND) lParam, (UINT) CB_GETLBTEXT, (WPARAM) ItemIndex, (LPARAM) ListItem);
|
||||||
propWind->ClearProperties();
|
g_dataModel->getSelectionService()->clearSelection();
|
||||||
g_usableApp->selectInstance(children.at(ItemIndex),propWind);
|
g_dataModel->getSelectionService()->addSelected(children.at(ItemIndex));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -203,13 +203,12 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PropertyWindow::refreshExplorer(Instance* selectedInstance)
|
void PropertyWindow::refreshExplorer(std::vector<Instance*> selectedInstances)
|
||||||
{
|
{
|
||||||
|
Instance * instance = selectedInstances[0];
|
||||||
SendMessage(_explorerComboBox,CB_RESETCONTENT,0,0);
|
SendMessage(_explorerComboBox,CB_RESETCONTENT,0,0);
|
||||||
parent = NULL;
|
parent = NULL;
|
||||||
children.clear();
|
children.clear();
|
||||||
//g_selectedInstances.clear();
|
|
||||||
//for (unsigned int i=0;i<g_selectedInstances.size();i++) {
|
|
||||||
children.push_back(selectedInstance);
|
children.push_back(selectedInstance);
|
||||||
SendMessage(_explorerComboBox, CB_ADDSTRING, 0, (LPARAM)selectedInstance->name.c_str());
|
SendMessage(_explorerComboBox, CB_ADDSTRING, 0, (LPARAM)selectedInstance->name.c_str());
|
||||||
if(selectedInstance->getParent() != NULL)
|
if(selectedInstance->getParent() != NULL)
|
||||||
@@ -221,7 +220,6 @@ void PropertyWindow::refreshExplorer(Instance* selectedInstance)
|
|||||||
parent = selectedInstance->getParent();
|
parent = selectedInstance->getParent();
|
||||||
children.push_back(selectedInstance->getParent());
|
children.push_back(selectedInstance->getParent());
|
||||||
}
|
}
|
||||||
//children = g_selectedInstances[i]->getChildren();
|
|
||||||
|
|
||||||
std::vector<Instance*> selectedChildren = selectedInstance->getChildren();
|
std::vector<Instance*> selectedChildren = selectedInstance->getChildren();
|
||||||
for(size_t z = 0; z < selectedChildren.size(); z++)
|
for(size_t z = 0; z < selectedChildren.size(); z++)
|
||||||
@@ -338,8 +336,14 @@ void PropertyWindow::_resize()
|
|||||||
SetWindowPos(_explorerComboBox, NULL, 0, 0, rect.right, 400, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
|
SetWindowPos(_explorerComboBox, NULL, 0, 0, rect.right, 400, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PropertyWindow::UpdateSelected(Instance * instance)
|
void PropertyWindow::UpdateSelected(std::vector<Instance *> instances)
|
||||||
{
|
{
|
||||||
|
if(instances.size() < 0)
|
||||||
|
{
|
||||||
|
ClearProperties();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Instance * instance = instances[0];
|
||||||
PropGrid_ResetContent(_propGrid);
|
PropGrid_ResetContent(_propGrid);
|
||||||
prop = instance->getProperties();
|
prop = instance->getProperties();
|
||||||
//if (selectedInstance != instance)
|
//if (selectedInstance != instance)
|
||||||
@@ -356,7 +360,7 @@ void PropertyWindow::UpdateSelected(Instance * instance)
|
|||||||
PropGrid_ExpandAllCatalogs(_propGrid);
|
PropGrid_ExpandAllCatalogs(_propGrid);
|
||||||
//SetWindowLongPtr(_propGrid,GWL_USERDATA,(LONG)this);
|
//SetWindowLongPtr(_propGrid,GWL_USERDATA,(LONG)this);
|
||||||
|
|
||||||
refreshExplorer(instance);
|
refreshExplorer(instances);
|
||||||
_resize();
|
_resize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "Tool/ArrowTool.h"
|
#include "Tool/ArrowTool.h"
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
#include "DataModelV2/SelectionService.h"
|
||||||
|
|
||||||
ArrowTool::ArrowTool(void)
|
ArrowTool::ArrowTool(void)
|
||||||
{
|
{
|
||||||
@@ -21,13 +22,12 @@ void ArrowTool::onButton1MouseDown(Mouse mouse)
|
|||||||
mouseDownStarty = mouse.y;
|
mouseDownStarty = mouse.y;
|
||||||
mouseDown = true;
|
mouseDown = true;
|
||||||
if(!lctrlDown && !rctrlDown)
|
if(!lctrlDown && !rctrlDown)
|
||||||
g_selectedInstances.clear();
|
g_dataModel->getSelectionService()->clearSelection();
|
||||||
PartInstance * target = mouse.getTarget();
|
PartInstance * target = mouse.getTarget();
|
||||||
if(target != NULL && std::find(g_selectedInstances.begin(), g_selectedInstances.end(), target) == g_selectedInstances.end())
|
if(target != NULL)
|
||||||
g_selectedInstances.push_back(target);
|
g_dataModel->getSelectionService()->addSelected(target);
|
||||||
if(g_selectedInstances.size() == 0)
|
if(g_dataModel->getSelectionService()->getSelection().size() == 0)
|
||||||
g_selectedInstances.push_back(g_dataModel);
|
g_dataModel->getSelectionService()->addSelected(g_dataModel);
|
||||||
g_usableApp->_propWindow->UpdateSelected(g_selectedInstances[0]);
|
|
||||||
}
|
}
|
||||||
void ArrowTool::onButton1MouseUp(Mouse mouse)
|
void ArrowTool::onButton1MouseUp(Mouse mouse)
|
||||||
{
|
{
|
||||||
@@ -47,11 +47,11 @@ void ArrowTool::onMouseMoved(Mouse mouse)
|
|||||||
}
|
}
|
||||||
else return;
|
else return;
|
||||||
}
|
}
|
||||||
for(size_t i = 0; i < g_selectedInstances.size(); i++) //This will later decide primary and move all parts according to primary
|
for(size_t i = 0; i < g_dataModel->getSelectionService()->getSelection().size(); i++) //This will later decide primary and move all parts according to primary
|
||||||
{
|
{
|
||||||
if(PartInstance * part = dynamic_cast<PartInstance *>(g_selectedInstances[i]))
|
if(PartInstance * part = dynamic_cast<PartInstance *>(g_dataModel->getSelectionService()->getSelection()[i]))
|
||||||
{
|
{
|
||||||
part->setPosition(mouse.getPosition(g_selectedInstances));
|
part->setPosition(mouse.getPosition(g_dataModel->getSelectionService()->getSelection()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user