From bc8742b5f58f54fe262b18e3ca4a59083ee8ae9b Mon Sep 17 00:00:00 2001 From: andreja6 Date: Sat, 2 Nov 2019 12:26:01 -0700 Subject: [PATCH 1/2] Now has icons --- DataModelInstance.cpp | 1 + G3DTest.vcproj | 50 ++++++++++++++++---------------- Instance.cpp | 1 + PropertyWindow.cpp | 66 ++++++++++++++++++++++++++++++++++++++++--- WorkspaceInstance.cpp | 1 + 5 files changed, 90 insertions(+), 29 deletions(-) diff --git a/DataModelInstance.cpp b/DataModelInstance.cpp index 2a06a6d..0c10735 100644 --- a/DataModelInstance.cpp +++ b/DataModelInstance.cpp @@ -27,6 +27,7 @@ DataModelInstance::DataModelInstance(void) workspace->setParent(this); level->setParent(this); _loadedFileName="..//skooter.rbxm"; + listicon = 1; } diff --git a/G3DTest.vcproj b/G3DTest.vcproj index 1947667..7ba983f 100644 --- a/G3DTest.vcproj +++ b/G3DTest.vcproj @@ -266,18 +266,10 @@ RelativePath=".\IEBrowser.cpp" > - - - - @@ -298,10 +290,6 @@ /> - - @@ -310,10 +298,6 @@ RelativePath=".\PropertyWindow.cpp" > - - @@ -337,6 +321,18 @@ RelativePath=".\Instance.cpp" > + + + + + + @@ -388,7 +384,7 @@ > - - @@ -411,10 +403,6 @@ RelativePath=".\PropertyWindow.h" > - - @@ -454,6 +442,10 @@ RelativePath=".\DataModelInstance.h" > + + @@ -462,6 +454,14 @@ RelativePath=".\Instance.h" > + + + + diff --git a/Instance.cpp b/Instance.cpp index 1c0b4d8..1c14884 100644 --- a/Instance.cpp +++ b/Instance.cpp @@ -18,6 +18,7 @@ Instance::Instance(const Instance &oinst) name = oinst.name; className = oinst.className; canDelete = oinst.canDelete; + listicon = oinst.listicon; //setParent(oinst.parent); } diff --git a/PropertyWindow.cpp b/PropertyWindow.cpp index d15e976..6afce7a 100644 --- a/PropertyWindow.cpp +++ b/PropertyWindow.cpp @@ -5,6 +5,7 @@ #include "PropertyWindow.h" #include "Globals.h" #include "strsafe.h" + /*typedef struct typPRGP { Instance* instance; // Declare member types Property ∝ @@ -17,6 +18,49 @@ Instance * parent = NULL; const int CX_BITMAP = 16; const int CY_BITMAP = 16; + +HBITMAP CreateBitmapMask(HBITMAP hbmColour, COLORREF crTransparent) +{ + HDC hdcMem, hdcMem2; + HBITMAP hbmMask; + BITMAP bm; + + // Create monochrome (1 bit) mask bitmap. + + GetObject(hbmColour, sizeof(BITMAP), &bm); + hbmMask = CreateBitmap(bm.bmWidth, bm.bmHeight, 1, 1, NULL); + + // Get some HDCs that are compatible with the display driver + + hdcMem = CreateCompatibleDC(0); + hdcMem2 = CreateCompatibleDC(0); + + SelectObject(hdcMem, hbmColour); + SelectObject(hdcMem2, hbmMask); + + // Set the background colour of the colour image to the colour + // you want to be transparent. + SetBkColor(hdcMem, crTransparent); + + // Copy the bits from the colour image to the B+W mask... everything + // with the background colour ends up white while everythig else ends up + // black...Just what we wanted. + + BitBlt(hdcMem2, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY); + + // Take our new mask and use it to turn the transparent colour in our + // original colour image to black so the transparency effect will + // work right. + BitBlt(hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem2, 0, 0, SRCINVERT); + + // Clean up. + + DeleteDC(hdcMem); + DeleteDC(hdcMem2); + + return hbmMask; +} + LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { TCHAR achTemp[256]; @@ -50,7 +94,7 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) // Get the food icon from the item data. HBITMAP hbmIcon = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1)); - HBITMAP hbmMask = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1)); + HBITMAP hbmMask = CreateBitmapMask(hbmIcon, RGB(255, 0, 220)); // The colors depend on whether the item is selected. clrForeground = SetTextColor(lpdis->hDC, GetSysColor(lpdis->itemState & ODS_SELECTED ? @@ -66,7 +110,21 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) x = LOWORD(GetDialogBaseUnits()) / 4; // Get and display the text for the list item. + int mul = 0; SendMessage(lpdis->hwndItem, CB_GETLBTEXT, lpdis->itemID, (LPARAM) achTemp); + if(lpdis->itemID == 0) + { + mul = selectedInstance->listicon; + } + else if(lpdis->itemID == 1 && parent != NULL) + { + mul = parent->listicon; + } + else if(parent != NULL) + { + mul = children[lpdis->itemID-2]->listicon; + } + else mul = children[lpdis->itemID-1]->listicon; hr = StringCchLength(achTemp, 256, &cch); if (FAILED(hr)) @@ -89,11 +147,11 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) SelectObject(hdc, hbmMask); BitBlt(lpdis->hDC, x, lpdis->rcItem.top + 1, - CX_BITMAP, CY_BITMAP, hdc, 0, 0, SRCAND); + CX_BITMAP, CY_BITMAP, hdc, mul*16, 0, SRCAND); SelectObject(hdc, hbmIcon); BitBlt(lpdis->hDC, x, lpdis->rcItem.top + 1, - CX_BITMAP, CY_BITMAP, hdc, 0, 0, SRCPAINT); + CX_BITMAP, CY_BITMAP, hdc, mul*16, 0, SRCPAINT); DeleteDC(hdc); @@ -225,7 +283,7 @@ bool PropertyWindow::onCreate(int x, int y, int sx, int sy, HMODULE hThisInstanc NULL, "COMBOBOX", "Combo", - WS_VISIBLE | WS_CHILD | CBS_DROPDOWNLIST, + WS_VISIBLE | WS_CHILD | CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS , 0, 0, 0, diff --git a/WorkspaceInstance.cpp b/WorkspaceInstance.cpp index 47fceec..f7254b6 100644 --- a/WorkspaceInstance.cpp +++ b/WorkspaceInstance.cpp @@ -7,6 +7,7 @@ WorkspaceInstance::WorkspaceInstance(void) name = "Workspace"; className = "Workspace"; canDelete = false; + listicon = 8; } WorkspaceInstance::~WorkspaceInstance(void) From 55f59e46e0f9b9b7bdb634fab2a1ec667241efbd Mon Sep 17 00:00:00 2001 From: MusicalProgrammer Date: Sat, 2 Nov 2019 20:27:18 -0400 Subject: [PATCH 2/2] Explorer fixed, and renamed SetProperties() SetProperties() doesn't describe what it actually does. Changed to: UpdateSelected() --- PropertyWindow.cpp | 96 ++++++++++++++++++---------------------------- PropertyWindow.h | 4 +- main.cpp | 15 ++++---- 3 files changed, 46 insertions(+), 69 deletions(-) diff --git a/PropertyWindow.cpp b/PropertyWindow.cpp index 6afce7a..023bb5a 100644 --- a/PropertyWindow.cpp +++ b/PropertyWindow.cpp @@ -112,19 +112,14 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) // Get and display the text for the list item. int mul = 0; SendMessage(lpdis->hwndItem, CB_GETLBTEXT, lpdis->itemID, (LPARAM) achTemp); - if(lpdis->itemID == 0) + + if(lpdis->itemID >= 0) { - mul = selectedInstance->listicon; + mul = children[lpdis->itemID]->listicon; } - else if(lpdis->itemID == 1 && parent != NULL) - { - mul = parent->listicon; - } - else if(parent != NULL) - { - mul = children[lpdis->itemID-2]->listicon; - } - else mul = children[lpdis->itemID-1]->listicon; + //else mul = children[lpdis->itemID-1]->listicon; + + //mul = children[lpdis->itemID]->listicon; hr = StringCchLength(achTemp, 256, &cch); if (FAILED(hr)) @@ -181,32 +176,8 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) int ItemIndex = SendMessage((HWND) lParam, (UINT) CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0); CHAR ListItem[256]; SendMessage((HWND) lParam, (UINT) CB_GETLBTEXT, (WPARAM) ItemIndex, (LPARAM) ListItem); - if(ItemIndex != 0) - { - propWind->ClearProperties(); - while(g_selectedInstances.size() != 0) - g_selectedInstances.erase(g_selectedInstances.begin()); - if(parent != NULL) - { - std::cout << ItemIndex << std::endl; - if(ItemIndex == 1) - { - g_selectedInstances.push_back(parent); - propWind->SetProperties(parent); - } - else - { - g_selectedInstances.push_back(children.at(ItemIndex+2)); - propWind->SetProperties(children.at(ItemIndex+2)); - } - - } - else - { - g_selectedInstances.push_back(children.at(ItemIndex-1)); - propWind->SetProperties(children.at(ItemIndex-1)); - } - } + propWind->ClearProperties(); + propWind->UpdateSelected(children.at(ItemIndex)); } } break; @@ -222,7 +193,7 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) LPNMPROPGRID lpnmp = (LPNMPROPGRID)pnm; LPPROPGRIDITEM item = PropGrid_GetItemData(pnm->hwndFrom,lpnmp->iIndex); selectedInstance->PropUpdate(item); - //propWind->SetProperties(selectedInstance); + //propWind->UpdateSelected(selectedInstance); } } break; @@ -236,28 +207,35 @@ LRESULT CALLBACK PropProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) return 0; } -void PropertyWindow::refreshExplorer() +void PropertyWindow::refreshExplorer(Instance* selectedInstance) { SendMessage(_explorerComboBox,CB_RESETCONTENT,0,0); parent = NULL; - for (unsigned int i=0;iname.c_str()); - if(g_selectedInstances[i]->getParent() != NULL) - { - std::string title = ".. ("; - title += g_selectedInstances[i]->getParent()->name; - title += ")"; - SendMessage(_explorerComboBox,CB_ADDSTRING, 0,(LPARAM)title.c_str()); - parent = g_selectedInstances[i]->getParent(); - } - children = g_selectedInstances[i]->getChildren(); - for(size_t z = 0; z < children.size(); z++) - { - SendMessage(_explorerComboBox,CB_ADDSTRING, 0,(LPARAM)children.at(z)->name.c_str()); - } - SendMessage(_explorerComboBox,CB_SETCURSEL,0,(LPARAM)0); + children.clear(); + g_selectedInstances.clear(); + //for (unsigned int i=0;iname.c_str()); + if(selectedInstance->getParent() != NULL) + { + std::string title = ".. ("; + title += selectedInstance->getParent()->name; + title += ")"; + SendMessage(_explorerComboBox,CB_ADDSTRING, 0,(LPARAM)title.c_str()); + parent = selectedInstance->getParent(); + children.push_back(selectedInstance->getParent()); } + //children = g_selectedInstances[i]->getChildren(); + + std::vector selectedChildren = selectedInstance->getChildren(); + for(size_t z = 0; z < selectedChildren.size(); z++) + { + children.push_back(selectedChildren.at(z)); + SendMessage(_explorerComboBox,CB_ADDSTRING, 0,(LPARAM)selectedChildren.at(z)->name.c_str()); + } + g_selectedInstances.push_back(selectedInstance); + SendMessage(_explorerComboBox,CB_SETCURSEL,0,(LPARAM)0); + //} } bool PropertyWindow::onCreate(int x, int y, int sx, int sy, HMODULE hThisInstance) { @@ -341,7 +319,7 @@ bool PropertyWindow::onCreate(int x, int y, int sx, int sy, HMODULE hThisInstanc SetWindowLongPtr(_hwndProp,GWL_USERDATA,(LONG)this); - refreshExplorer(); + //refreshExplorer(); _resize(); return true; @@ -364,7 +342,7 @@ void PropertyWindow::_resize() SetWindowPos(_explorerComboBox, NULL, 0, 0, rect.right, 400, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE); } -void PropertyWindow::SetProperties(Instance * instance) +void PropertyWindow::UpdateSelected(Instance * instance) { PropGrid_ResetContent(_propGrid); prop = instance->getProperties(); @@ -380,7 +358,7 @@ void PropertyWindow::SetProperties(Instance * instance) PropGrid_ExpandAllCatalogs(_propGrid); //SetWindowLongPtr(_propGrid,GWL_USERDATA,(LONG)this); - refreshExplorer(); + refreshExplorer(instance); _resize(); } diff --git a/PropertyWindow.h b/PropertyWindow.h index 3479589..568a0f8 100644 --- a/PropertyWindow.h +++ b/PropertyWindow.h @@ -4,10 +4,10 @@ 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 UpdateSelected(Instance *); void ClearProperties(); void onResize(); - void refreshExplorer(); + void refreshExplorer(Instance* selectedInstance); HWND _hwndProp; private: HWND _propGrid; diff --git a/main.cpp b/main.cpp index f260bec..1fd4dfe 100644 --- a/main.cpp +++ b/main.cpp @@ -276,7 +276,7 @@ void GUDButtonListener::onButton1MouseClick(BaseButtonInstance* button) } g_selectedInstances = newinst; if(g_selectedInstances.size() > 0) - usableApp->_propWindow->SetProperties(newinst.at(0)); + usableApp->_propWindow->UpdateSelected(newinst.at(0)); } } } @@ -1380,11 +1380,11 @@ void Demo::onMouseLeftPressed(HWND hwnd,int x,int y) } } if(!found) - {while(g_selectedInstances.size() > 0) - g_selectedInstances.erase(g_selectedInstances.begin()); - g_selectedInstances.push_back(test); + { + g_selectedInstances.clear(); + g_selectedInstances.push_back(test); } - _propWindow->SetProperties(test); + _propWindow->UpdateSelected(test); //message = "Dragging = true."; //messageTime = System::time(); //dragging = true; @@ -1394,10 +1394,9 @@ void Demo::onMouseLeftPressed(HWND hwnd,int x,int y) } if(!objFound) { - while(g_selectedInstances.size() > 0) - g_selectedInstances.erase(g_selectedInstances.begin()); + g_selectedInstances.clear(); g_selectedInstances.push_back(dataModel); - _propWindow->SetProperties(dataModel); + _propWindow->UpdateSelected(dataModel); } }