void MaterialPreviewPropView::OnPropertyButtonClick( NMHDR *nmhdr, LRESULT *lresult ) { NMPROPTREE *nmProp; CPropTreeItem *item; nmProp = (NMPROPTREE *)nmhdr; item = nmProp->pItem; idStr itemLabel = item->GetLabelText(); if ( itemLabel == "Preview Lights" ) { AddLight(); } else if ( itemLabel.Left(5) == "Light" ) { CPropTreeItem *light; int lightId = item->GetCtrlID(); int testLightNum = 0; m_Tree.DeleteItem( item ); for( light = m_Tree.GetRootItem()->GetChild(); light != NULL; light = light->GetSibling() ) { idStr label = light->GetLabelText(); if ( label.Left(5) == "Light" ) { testLightNum++; light->SetLabelText(_T(va("Light #%d", testLightNum))); light->SetInfoText(_T(va("Parameters for light number %d.", testLightNum))); light->SetCtrlID( testLightNum - 1 ); } } materialPreview->OnDeleteLight( lightId ); numLights--; } else if ( itemLabel == "Custom Model" ) { CFileDialog dlg(TRUE); dlg.m_ofn.Flags |= OFN_FILEMUSTEXIST; item->Check(FALSE); if( dlg.DoModal()== IDOK) { item->Check(FALSE); item->SetItemValue((LPARAM)fileSystem->OSPathToRelativePath(dlg.m_ofn.lpstrFile)); m_Tree.SendNotify(PTN_ITEMCHANGED, item); } } }
void MaterialPreviewPropView::OnPropertyChangeNotification( NMHDR *nmhdr, LRESULT *lresult ) { idVec3 testColor; int lightId = 0; COLORREF color; NMPROPTREE *nmProp; CPropTreeItem *item; CPropTreeItem *parent; nmProp = (NMPROPTREE *)nmhdr; item = nmProp->pItem; // Determine which light this item modifies parent = item->GetParent(); if ( parent ) { lightId = parent->GetCtrlID(); } idStr itemLabel = item->GetLabelText(); if ( itemLabel == "Model Type" ) { materialPreview->OnModelChange( item->GetItemValue() ); } else if ( itemLabel == "Custom Model" ) { materialPreview->OnCustomModelChange( (const char *)item->GetItemValue() ); } else if ( itemLabel == "Show Lights" ) { materialPreview->OnShowLightsChange( item->GetItemValue() ? true : false ); } else if ( itemLabel == "Shader" ) { CPropTreeItemCombo *combo = (CPropTreeItemCombo *)item; CString materialName; combo->GetLBText( combo->GetCurSel(), materialName ); materialPreview->OnLightShaderChange( lightId, materialName.GetBuffer() ); } else if ( itemLabel == "Radius" ) { materialPreview->OnLightRadiusChange( lightId, atof( (char *)item->GetItemValue() ) ); } else if ( itemLabel == "Color" ) { color = item->GetItemValue(); testColor.x = (float)GetRValue( color ) * (float)( 1.f/255.f ); testColor.y = (float)GetGValue( color ) * (float)( 1.f/255.f ); testColor.z = (float)GetBValue( color ) * (float)( 1.f/255.f ); materialPreview->OnLightColorChange( lightId, testColor ); } else if ( itemLabel == "Move light" ) { materialPreview->OnLightAllowMoveChange( lightId, item->GetItemValue() ? true : false ); } else if ( itemLabel.Left(4) == "parm" ) { int index; itemLabel.Strip( "parm" ); index = atoi( itemLabel.c_str() ); materialPreview->OnLocalParmChange( index, atof( (char *)item->GetItemValue() ) ); } else if ( itemLabel.Left(6) == "global" ) { int index; itemLabel.Strip( "global" ); index = atoi( itemLabel.c_str() ); materialPreview->OnGlobalParmChange( index, atof( (char *)item->GetItemValue() ) ); } }
void CPropTreeList::OnKeyDown(UINT nChar, UINT, UINT) { CPropTreeItem* pItem; ASSERT(m_pProp!=NULL); if (m_pProp->IsDisableInput() || !m_pProp->IsWindowEnabled()) return; switch (nChar) { case VK_RETURN: if ((pItem = m_pProp->GetFocusedItem())!=NULL && !pItem->IsRootLevel() && !pItem->IsReadOnly()) { pItem->Activate(CPropTreeItem::ACTIVATE_TYPE_KEYBOARD, CPoint(0,0)); } break; case VK_HOME: if (m_pProp->FocusFirst()) Invalidate(); break; case VK_END: if (m_pProp->FocusLast()) Invalidate(); break; case VK_LEFT: if ((pItem = m_pProp->GetFocusedItem())!=NULL) { if (!m_pProp->SendNotify(PTN_ITEMEXPANDING, pItem)) { if (pItem->GetChild() && pItem->IsExpanded()) { pItem->Expand(FALSE); UpdateResize(); Invalidate(); UpdateWindow(); CheckVisibleFocus(); break; } } } else break; // pass thru to next case VK_UP case VK_UP: if (m_pProp->FocusPrev()) Invalidate(); break; case VK_RIGHT: if ((pItem = m_pProp->GetFocusedItem())!=NULL) { if (!m_pProp->SendNotify(PTN_ITEMEXPANDING, pItem)) { if (pItem->GetChild() && !pItem->IsExpanded()) { pItem->Expand(); UpdateResize(); Invalidate(); UpdateWindow(); CheckVisibleFocus(); break; } } } else break; // pass thru to next case VK_DOWN case VK_DOWN: if (m_pProp->FocusNext()) Invalidate(); break; } }
//Create sample data for the preview properties void MaterialPreviewPropView::InitializePropTree( void ) { int i; CPropTreeItem *pRoot; CPropTreeItem *pParmRoot; CPropTreeItemCheck *pCheck; CPropTreeItemEdit *pEdit; pRoot = m_Tree.InsertItem(new CPropTreeItem()); pRoot->SetLabelText(_T("Preview Properties")); pRoot->SetInfoText(_T("Properties for the preview window.")); pRoot->Expand(); // have this item expanded by default CPropTreeItemCombo* pCombo; pCombo = (CPropTreeItemCombo*)m_Tree.InsertItem(new CPropTreeItemCombo(), pRoot); pCombo->SetLabelText(_T("Model Type")); pCombo->SetInfoText(_T("Select the type of model on which to preview the material.")); pCombo->CreateComboBox(); pCombo->InsertString( 0, "Cube" ); pCombo->InsertString( 1, "Box - 2:1"); pCombo->InsertString( 2, "Box - 4:1"); pCombo->InsertString( 3, "Box - 1:2"); pCombo->InsertString( 4, "Box - 1:4"); pCombo->InsertString( 5, "Cylinder - V"); pCombo->InsertString( 6, "Cylinder - H"); pCombo->InsertString( 7, "Sphere"); pCombo->SetItemData( 0, 0 ); pCombo->SetItemData( 1, 1 ); pCombo->SetItemData( 2, 2 ); pCombo->SetItemData( 3, 3 ); pCombo->SetItemData( 4, 4 ); pCombo->SetItemData( 5, 5 ); pCombo->SetItemData( 6, 6 ); pCombo->SetItemData( 7, 7 ); pCombo->SetCurSel( 0 ); // Custom model entry /*pEdit = (CPropTreeItemEdit*)m_Tree.InsertItem( new CPropTreeItemEdit(), pRoot ); pEdit->SetLabelText(_T("Custom Model")); pEdit->SetInfoText(_T("Specify any model to display the current material.")); pEdit->SetItemValue((LPARAM)_T(""));*/ CPropTreeItemEditButton *pCutomButton; pCutomButton = (CPropTreeItemEditButton*)m_Tree.InsertItem(new CPropTreeItemEditButton(), pRoot ); pCutomButton->SetButtonText(_T("...")); pCutomButton->SetLabelText(_T("Custom Model")); pCutomButton->SetInfoText(_T("Specify any model to display the current material.")); pCutomButton->SetItemValue((LPARAM)_T("")); // Checkbox for showing debug light spheres pCheck = (CPropTreeItemCheck*)m_Tree.InsertItem( new CPropTreeItemCheck(), pRoot ); pCheck->SetLabelText(_T("Show Lights")); pCheck->SetInfoText(_T("Show the light origin sphere and number in the preview.")); pCheck->CreateCheckBox(); pCheck->SetCheckState( BST_CHECKED ); // Local and Global shader parms pParmRoot = m_Tree.InsertItem(new CPropTreeItem()); pParmRoot->SetLabelText(_T("Local Parms")); pParmRoot->SetInfoText(_T("Local shaderparms for the model being displayed.")); pParmRoot->Expand( FALSE ); // have this item NOT expanded by default for( i = 0; i < MAX_ENTITY_SHADER_PARMS; i++ ) { pEdit = (CPropTreeItemEdit*)m_Tree.InsertItem( new CPropTreeItemEdit(), pParmRoot ); pEdit->SetLabelText(_T(va("parm%d", i))); pEdit->SetInfoText(_T("Set the local shaderparm for the model")); if ( i < 4 ) { pEdit->SetItemValue((LPARAM)_T("1")); } else { pEdit->SetItemValue((LPARAM)_T("0")); } } pParmRoot = m_Tree.InsertItem(new CPropTreeItem()); pParmRoot->SetLabelText(_T("Global Parms")); pParmRoot->SetInfoText(_T("Global shaderparms for the renderworld being displayed.")); pParmRoot->Expand( FALSE ); // have this item NOT expanded by default for( i = 0; i < MAX_GLOBAL_SHADER_PARMS; i++ ) { pEdit = (CPropTreeItemEdit*)m_Tree.InsertItem( new CPropTreeItemEdit(), pParmRoot ); pEdit->SetLabelText(_T(va("global%d", i))); pEdit->SetInfoText(_T("Set the global shaderparm for the renderworld")); if ( i < 4 ) { pEdit->SetItemValue((LPARAM)_T("1")); } else { pEdit->SetItemValue((LPARAM)_T("0")); } } // Lights pRoot = m_Tree.InsertItem(new CPropTreeItem()); pRoot->SetLabelText(_T("")); pRoot->SetInfoText(_T("")); CPropTreeItemButton *pButton; pButton = (CPropTreeItemButton*)m_Tree.InsertItem(new CPropTreeItemButton()); pButton->SetButtonText(_T(" Add Light ")); pButton->SetLabelText(_T("Preview Lights")); pButton->SetInfoText(_T("Test the button.")); pRoot = m_Tree.InsertItem(new CPropTreeItem()); pRoot->SetLabelText(_T("")); pRoot->SetInfoText(_T("")); AddLight(); }
void CPropTreeList::OnLButtonDown(UINT, CPoint point) { ASSERT(m_pProp!=NULL); if (m_pProp->IsDisableInput()) return; m_pProp->SendNotify(NM_CLICK); if (!m_pProp->IsWindowEnabled()) return; SetFocus(); LONG nHit = m_pProp->HitTest(point); CPropTreeItem* pItem; CRect rc; CDC* pDC; switch (nHit) { case HTCOLUMN: if (m_pProp->SendNotify(PTN_COLUMNCLICK)) break; m_bColDrag = TRUE; SetCapture(); m_nPrevCol = m_pProp->GetOrigin().x; // paint drag line pDC = GetDC(); GetClientRect(rc); pDC->PatBlt(m_nPrevCol - PROPTREEITEM_COLRNG/2, 0, PROPTREEITEM_COLRNG, rc.bottom, PATINVERT); ReleaseDC(pDC); break; case HTCHECKBOX: if ((pItem = m_pProp->FindItem(point))!=NULL) { pItem->Check(!pItem->IsChecked()); m_pProp->SendNotify(PTN_CHECKCLICK, pItem); Invalidate(); } break; case HTBUTTON: if ((pItem = m_pProp->FindItem(point))!=NULL) { pItem->Check(); m_pProp->SendNotify(PTN_ITEMBUTTONCLICK, pItem); Invalidate(); } break; case HTEXPAND: if ((pItem = m_pProp->FindItem(point))!=NULL) { if (pItem->GetChild() && !m_pProp->SendNotify(PTN_ITEMEXPANDING, pItem)) { pItem->Expand(!pItem->IsExpanded()); UpdateResize(); Invalidate(); UpdateWindow(); CheckVisibleFocus(); } } break; default: if ((pItem = m_pProp->FindItem(point))!=NULL) { CPropTreeItem* pOldFocus = m_pProp->GetFocusedItem(); m_pProp->SelectItems(NULL, FALSE); m_pProp->SetFocusedItem(pItem); pItem->Select(); Invalidate(); if (pItem!=pOldFocus) m_pProp->SendNotify(PTN_SELCHANGE, pItem); if (nHit==HTATTRIBUTE && !pItem->IsRootLevel()) { if (!m_pProp->SendNotify(PTN_PROPCLICK, pItem) && !pItem->IsReadOnly()) pItem->Activate(CPropTreeItem::ACTIVATE_TYPE_MOUSE, point); } } else { m_pProp->SelectItems(NULL, FALSE); m_pProp->SetFocusedItem(NULL); m_pProp->SendNotify(PTN_SELCHANGE); Invalidate(); } break; } }