void EditFaceDataMod::UpdateDialog () { TSTR buf; int numFaces=0, whichFace=0; float value = 1.0f; bool valueDetermined = true; if (!hParams) return; ModContextList mcList; INodeTab nodes; ip->GetModContexts(mcList,nodes); if (selLevel) { for (int i = 0; i < mcList.Count(); i++) { EditFaceDataModData *meshData = (EditFaceDataModData*)mcList[i]->localData; if (!meshData) continue; int numSelectedHere; meshData->DescribeSelection (numSelectedHere, whichFace, value, valueDetermined); numFaces += numSelectedHere; } } ISpinnerControl *spin = GetISpinner (GetDlgItem (hParams, IDC_VALUE_SPIN)); ICustButton *but = GetICustButton (GetDlgItem (hParams, IDC_RESET_SELECTION)); switch (selLevel) { case SEL_FACE: if (numFaces==1) { buf.printf (GetString(IDS_FACE_SELECTED), whichFace+1); } else { if (numFaces) buf.printf (GetString (IDS_FACES_SELECTED), numFaces); else buf = GetString (IDS_NO_FACE_SELECTED); } but->Enable (numFaces); spin->Enable (numFaces); if (numFaces && valueDetermined) { spin->SetIndeterminate (false); spin->SetValue (value, FALSE); } else { spin->SetIndeterminate (true); } break; case SEL_OBJECT: buf = GetString (IDS_OBJECT_SELECTED); spin->Disable(); but->Disable (); break; } SetDlgItemText(hParams,IDC_FACE_SELECTED,buf); ReleaseISpinner (spin); ReleaseICustButton (but); }
void MaterialUIHandler::UpdateCurrentMaterial (HWND hWnd, EPolyMod *pMod, TimeValue t, Interval & validity) { MtlID mat = 0; bool determined = false; if (pMod->GetPolyOperationID() == ep_op_set_material) { int materialHolder; pMod->getParamBlock()->GetValue (epm_material, t, materialHolder, validity); mat = materialHolder; determined = true; } else { bool useStackSelection = pMod->getParamBlock()->GetInt (epm_stack_selection) != 0; bool init = false; ModContextList list; INodeTab nodes; pMod->EpModGetIP()->GetModContexts (list, nodes); int i; for (i=0; i<list.Count(); i++) { EditPolyData *pData = (EditPolyData *) list[i]->localData; if (!pData) continue; MNMesh *pMesh = pData->GetMesh(); if (!pMesh) { validity = NEVER; continue; } DWORD l_selFlag = useStackSelection ? MN_EDITPOLY_STACK_SELECT:MN_SEL; int j; for (j=0; j<pMesh->numf; j++) { if (!pMesh->f[j].GetFlag (l_selFlag)) continue; if (pMesh->f[j].GetFlag (MN_DEAD)) continue; if (!init) { mat = pMesh->f[j].material; init = true; } else if (mat != pMesh->f[j].material) break; } if (j<pMesh->numf) break; } nodes.DisposeTemporary (); determined = (i>=list.Count()) && init; } ISpinnerControl *spin = GetISpinner(GetDlgItem(hWnd,IDC_MAT_IDSPIN)); spin->SetIndeterminate(!determined); if (determined) spin->SetValue (int(mat+1), FALSE); ReleaseISpinner(spin); spin = GetISpinner(GetDlgItem(hWnd,IDC_MAT_IDSPIN_SEL)); spin->SetIndeterminate(!determined); if (determined) spin->SetValue (int(mat+1), FALSE); ReleaseISpinner(spin); if (GetDlgItem (hWnd, IDC_MTLID_NAMES_COMBO)) { ValidateUINameCombo(hWnd, pMod); } }