예제 #1
0
void RandKeysUtil::SpinnerChange(int id) 
	{
	switch (id) {
		case IDC_RANDKEYS_POSTIMESPIN:
			posTime = iPosTime->GetIVal(); break;
		case IDC_RANDKEYS_NEGTIMESPIN:
			negTime = iNegTime->GetIVal(); break;
		case IDC_RANDKEYS_POSVALSPIN:
			posVal = iPosVal->GetFVal(); break;
		case IDC_RANDKEYS_NEGVALSPIN:
			negVal = iNegVal->GetFVal(); break;
		}
	}
예제 #2
0
void RendSpline::CheckAspectLock(TimeValue t)
{
	ParamID lengthID;
	ParamID widthID;
	ParamID aspectlockID;
	float length, width, aspect = 1.0f;
	BOOL aspectlocked = FALSE;

	if(UseViewOrRenderParams(t) == rbViewport)
	{
		widthID = rnd_v2_vpt_width;
		lengthID = rnd_v2_vpt_length;
		aspectlockID = rnd_v2_vpt_aspect_lock;
	}
	else
	{
		widthID = rnd_v2_width;
		lengthID = rnd_v2_length;
		aspectlockID = rnd_v2_aspect_lock;
	}
	pblock->GetValue(lengthID,t,length,FOREVER);
	pblock->GetValue(widthID,t,width,FOREVER);
	pblock->GetValue(aspectlockID,t,aspectlocked,FOREVER);	

	IParamMap2 *map = pblock->GetMap(0);

	if(map)
	{
		ISpinnerControl *iSpin = GetISpinner(GetDlgItem(map->GetHWnd(), IDC_ASPECTSPIN));
		aspect = iSpin->GetFVal();
	}

	pblock->GetMap()->Enable(aspectlockID,((length != 0.0f && width != 0.0f && aspect != 0.0f) || aspectlocked));
}
예제 #3
0
static INT_PTR CALLBACK MouseDeviceDlgProc(
      HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
   {
   IMCParamDlg *dlg = DLGetWindowLongPtr<IMCParamDlg*>(hWnd);
   if (!dlg && msg!=WM_INITDIALOG) return FALSE;

   switch (msg) {
      case WM_INITDIALOG:
         dlg = (IMCParamDlg*)lParam;
         dlg->binding->UpdateRollup(dlg->iRoll);
         DLSetWindowLongPtr(hWnd, lParam);
         break;

      case WM_COMMAND:
         switch (LOWORD(wParam)) {
            case IDC_MOUSE_X: {
               MouseDeviceBinding *b = (MouseDeviceBinding*)dlg->binding;
               b->which = MC_MOUSE_X;
               b->NotifyDependents(FOREVER,0,REFMSG_CHANGE);
               break;
               }

            case IDC_MOUSE_Y: {
               MouseDeviceBinding *b = (MouseDeviceBinding*)dlg->binding;
               b->which = MC_MOUSE_Y;
               b->NotifyDependents(FOREVER,0,REFMSG_CHANGE);
               break;
               }

            case IDC_MOUSE_FLIP: {
               MouseDeviceBinding *b = (MouseDeviceBinding*)dlg->binding;
               b->invert = IsDlgButtonChecked(hWnd,IDC_MOUSE_FLIP);
               b->NotifyDependents(FOREVER,0,REFMSG_CHANGE);
               break;
               }
            }
         break;

      case CC_SPINNER_CHANGE: {
         ISpinnerControl *spin = (ISpinnerControl *)lParam;
         MouseDeviceBinding *b = (MouseDeviceBinding*)dlg->binding;
         b->scale = spin->GetFVal();
         b->NotifyDependents(FOREVER,0,REFMSG_CHANGE);
         break;
         }

      case WM_LBUTTONDOWN:
      case WM_LBUTTONUP:
      case WM_MOUSEMOVE:            
            dlg->iRoll->DlgMouseMessage(hWnd,msg,wParam,lParam);
         break; 

      default:
         return FALSE;
      }
   return TRUE;
   }
예제 #4
0
void RendSpline::OnSetAspect(HWND hWnd, TimeValue t, ParamID widthID, ParamID lengthID)
{
	CheckAspectLock(t);

	ISpinnerControl *iSpin = GetISpinner(GetDlgItem(hWnd, IDC_ASPECTSPIN));
	mAspect = iSpin->GetFVal();

	float width;

	pblock->GetValue(widthID,t,width,FOREVER);
	pblock->SetValue(lengthID,t,mAspect*width);

	ReleaseISpinner(iSpin);
}
예제 #5
0
BOOL SceneViewer::DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
    case WM_INITDIALOG:
        {
            fhDlg = hDlg;

            // Set the exe to use
            HWND hExeCombo = GetDlgItem(hDlg, IDC_EXE);
            ComboBox_AddString(hExeCombo, "Release");
            ComboBox_AddString(hExeCombo, "Debug");
            ComboBox_SetCurSel(hExeCombo, fReleaseExe ? 0 : 1);

            // Set the client path
            const char *path = plMaxConfig::GetClientPath(false, true);
            ICustEdit *edit = GetICustEdit(GetDlgItem(hDlg, IDC_CLIENT_PATH));
            edit->SetText((char*)path);

            // Set the "Load old data" checkbox
            HWND hLoadOld = GetDlgItem(hDlg, IDC_REUSE_DATA);
            Button_SetCheck(hLoadOld, fLoadOld ? BST_CHECKED : BST_UNCHECKED);
            Button_Enable(hLoadOld, SceneSync::Instance().CanLoadOldResMgr());

            // Set the update controls
            float val = float(fUpdateFreq) / 1000.f;
            ISpinnerControl *spin = SetupFloatSpinner(hDlg, IDC_SPINNER, IDC_EDIT, 0.1, 1.f, val);
            spin->Enable(fUpdate);
            CheckDlgButton(hDlg, IDC_UPDATE, fUpdate ? BST_CHECKED : BST_UNCHECKED);

            IEnableSetupControls(!SceneSync::Instance().IsClientRunning());
        }
        return TRUE;

    case WM_COMMAND:
        // Start/Stop SceneViewer
        if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_START)
        {
            IToggleRunning();
            IEnableSetupControls(!SceneSync::Instance().IsClientRunning());
            return TRUE;
        }
        // Close dialog
        else if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDCANCEL)
        {
            DestroyWindow(hDlg);
            fhDlg = NULL;
            return TRUE;
        }
        // Browse for directory
        else if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_DIR)
        {
            const char *path = plMaxConfig::GetClientPath(true);
            if (path)
            {
                ICustEdit *edit = GetICustEdit(GetDlgItem(hDlg, IDC_CLIENT_PATH));
                edit->SetText((char*)path);
            }

            return TRUE;
        }
        // "Load old data" selection changed
        else if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_REUSE_DATA)
        {
            fLoadOld = (Button_GetCheck((HWND)lParam) == BST_CHECKED);
            return TRUE;
        }
        // Release/Debug exe selection changed
        else if (HIWORD(wParam) == CBN_SELCHANGE && LOWORD(wParam) == IDC_EXE)
        {
            int sel = ComboBox_GetCurSel((HWND)lParam);
            fReleaseExe = (sel == 0);
            return TRUE;
        }
        else if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_UPDATE)
        {
            fUpdate = (SendMessage((HWND)lParam, BM_GETCHECK, 0, 0) == BST_CHECKED);

            ISpinnerControl *spin = GetISpinner(GetDlgItem(hDlg, IDC_SPINNER));
            spin->Enable(fUpdate);
            ReleaseISpinner(spin);

            // If update was turned on, send out an update message so any dirty objects
            // will be reconverted right away
            if (fUpdate)
                SceneSync::Instance().SetUpdateFreq(fUpdateFreq);

            return TRUE;
        }
        break;
        
    // Update frequency changed
    case CC_SPINNER_CHANGE:
        if (LOWORD(wParam) == IDC_SPINNER)
        {
            ISpinnerControl *spin = (ISpinnerControl*)lParam;
            float val = spin->GetFVal();
            fUpdateFreq = int(val*1000.f);
            SceneSync::Instance().SetUpdateFreq(fUpdateFreq);
        }
        return TRUE;

    // Type in directory
    case WM_CUSTEDIT_ENTER:
        if (wParam == IDC_CLIENT_PATH)
        {
            ICustEdit *edit = GetICustEdit((HWND)lParam);

            char path[MAX_PATH];
            edit->GetText(path, sizeof(path));
            plMaxConfig::SetClientPath(path);
        }
        return TRUE;
    }

    return FALSE;
}
예제 #6
0
static INT_PTR CALLBACK FaceDataDlgProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
	EditFaceDataMod *em = (EditFaceDataMod *) GetWindowLongPtr (hWnd, GWLP_USERDATA);
	ISpinnerControl *spin;

	switch (msg) {
	case WM_INITDIALOG:
		em = (EditFaceDataMod*) lParam;
		em->SetDialogHandle (hWnd);
		SetWindowLongPtr (hWnd,GWLP_USERDATA,lParam);			

		spin = GetISpinner(GetDlgItem(hWnd,IDC_VALUE_SPIN));
		spin->SetLimits (0.0f, 100.0f, FALSE);
		spin->SetScale (0.1f);
		spin->LinkToEdit (GetDlgItem(hWnd, IDC_VALUE), EDITTYPE_POS_FLOAT);
		spin->SetValue (1.0f, FALSE);
		spin->Disable();
		ReleaseISpinner(spin);

		CheckDlgButton (hWnd, IDC_COLLAPSABLE, em->GetCollapsable());

		em->UpdateDialog ();
		break;

	case CC_SPINNER_BUTTONDOWN:
		switch (LOWORD(wParam)) {
		case IDC_VALUE_SPIN:
			em->ChangeBegin ();
			break;
		}
		break;

	case CC_SPINNER_CHANGE:
		spin = (ISpinnerControl*)lParam;
		switch (LOWORD(wParam)) {
		case IDC_VALUE_SPIN:
			em->ChangeTo (spin->GetFVal());
			break;
		}
		break;

	case CC_SPINNER_BUTTONUP:
		switch (LOWORD(wParam)) {
		case IDC_VALUE_SPIN:
			em->ChangeFinish (HIWORD(wParam) ? true : false);
			break;
		}
		break;

	case WM_CUSTEDIT_ENTER:
		switch (LOWORD(wParam)) {
		case IDC_VALUE:
			em->ChangeFinish (true);
			break;
		}
		break;

	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDC_RESET_SELECTION:
			em->ResetSelection ();
			break;
		case IDC_COLLAPSABLE:
			em->SetCollapsable (IsDlgButtonChecked (hWnd, IDC_COLLAPSABLE)?true:false);
			break;
		}
		break;

	case WM_PAINT:
		// Good place for call to UpdateDialog, if needed.
		return FALSE;

	default:
		return FALSE;
	}
	return TRUE;
}
예제 #7
0
void UnwrapMod::RelaxThreadOp(int operation, HWND hWnd)
{
	ISpinnerControl *iAmount = NULL;
	ISpinnerControl *iStretch = NULL;

	//this is a structure that holds all our info we are passing to the thread


	iAmount = GetISpinner(GetDlgItem(hWnd,IDC_RELAX_AMOUNTSPIN));
	iStretch = GetISpinner(GetDlgItem(hWnd,IDC_RELAX_STRETCHSPIN));


	mRelaxThreadData.mod = this;
	HWND hType = GetDlgItem(hWnd,IDC_RELAXTYPE_COMBO);
	mRelaxThreadData.mType = SendMessage(hType, CB_GETCURSEL, 0L, 0);
	if (iAmount)
		mRelaxThreadData.mAmount = iAmount->GetFVal();
	else
		mRelaxThreadData.mAmount = 0.1f;

	mRelaxThreadData.mBoundary = IsDlgButtonChecked(hWnd,IDC_BOUNDARY_CHECK);
	if (iStretch)
		mRelaxThreadData.mStretch = iStretch->GetFVal();
	else
		mRelaxThreadData.mStretch = 0.0f;
	mRelaxThreadData.mCorner = IsDlgButtonChecked(hWnd,IDC_CORNERS_CHECK);

	mRelaxThreadData.mIterations = 1000000;

	ReleaseISpinner(iAmount);
	ReleaseISpinner(iStretch);


	if (operation == KThreadStart)
	{				
		unsigned int threadID;
		ICustButton *iButton = GetICustButton(GetDlgItem(relaxHWND, IDC_RUN_BUTTON));
		if (iButton )
		{
			iButton->SetCheck(TRUE);
			iButton->SetText(GetString(IDS_SPLINEMAP_ENDRELAX));
		}
		if (iButton)
			ReleaseICustButton(iButton);

		mRelaxThreadHandle = (HANDLE)_beginthreadex( NULL, 0, &CallRelaxThread, (void *) &mRelaxThreadData, 0, &threadID );


	}
	else if (operation == KThreadReStart)
	{
		//only restart if we have a current thread running
		if (mRelaxThreadHandle && mRelaxThreadData.mStarted)
		{

			ICustButton *iButton = GetICustButton(GetDlgItem(relaxHWND, IDC_RUN_BUTTON));
			if (iButton )
			{
				iButton->SetCheck(FALSE);
			}


			for (int ldID = 0; ldID < mMeshTopoData.Count(); ldID++)
			{
				mMeshTopoData[ldID]->SetUserCancel(TRUE);
			}

			WaitForSingleObject( mRelaxThreadHandle, INFINITE );

			CloseHandle( mRelaxThreadHandle );

			mRelaxThreadHandle = NULL;


			for (int ldID = 0; ldID < mMeshTopoData.Count(); ldID++)
			{
				mMeshTopoData[ldID]->SetUserCancel(FALSE);
			}		

			if (iButton )
			{
				iButton->SetCheck(TRUE);
			}

			if (iButton)
				ReleaseICustButton(iButton);

			unsigned int threadID;
			mRelaxThreadHandle = (HANDLE)_beginthreadex( NULL, 0, &CallRelaxThread, (void *) &mRelaxThreadData, 0, &threadID );
		}
	}
	else if (operation == KThreadEnd)
	{

		ICustButton *iButton = GetICustButton(GetDlgItem(relaxHWND, IDC_RUN_BUTTON));
		if (iButton)
		{
			iButton->SetText(GetString(IDS_SPLINEMAP_STARTRELAX));
			iButton->SetCheck(FALSE);
			ReleaseICustButton(iButton);
		}

		for (int ldID = 0; ldID < mMeshTopoData.Count(); ldID++)
		{
			mMeshTopoData[ldID]->SetUserCancel(TRUE);
		}

		WaitForSingleObject( mRelaxThreadHandle, INFINITE );

		CloseHandle( mRelaxThreadHandle );

		mRelaxThreadHandle = NULL;

		for (int ldID = 0; ldID < mMeshTopoData.Count(); ldID++)
		{
			mMeshTopoData[ldID]->SetUserCancel(FALSE);
		}



	}


}
예제 #8
0
static INT_PTR CALLBACK VertexPaintDlgProc(
		HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
	{
	int numPoints;
	VertexPaint *mod = (VertexPaint*)GetWindowLongPtr(hWnd,GWLP_USERDATA);
	if (!mod && msg!=WM_INITDIALOG) return FALSE;
	int		comboResult;

	
	// Manages Spinners.
	if (((msg==CC_SPINNER_BUTTONUP) && HIWORD(wParam)) ||
		((msg==CC_SPINNER_CHANGE) ))
	{
		ISpinnerControl *spin;
		spin = (ISpinnerControl *) lParam;
		
		switch (LOWORD(wParam)) 
		{
		case IDC_TINT_SPIN:
			if ((msg == CC_SPINNER_CHANGE))
			{
				mod->fTint = spin->GetFVal()/100;
			}
			break;
		case IDC_BEND_SPIN:
			if ((msg == CC_SPINNER_CHANGE))
			{
				mod->fGradientBend = spin->GetFVal()/100;
			}
			break;
		}
	}

	switch (msg) {
		case WM_INITDIALOG:
			LoadImages();
			mod = (VertexPaint*)lParam;
			SetWindowLongPtr(hWnd,GWLP_USERDATA,lParam);
			mod->hParams = hWnd;
			mod->iPaintButton = GetICustButton(GetDlgItem(hWnd, IDC_PAINT));
			mod->iPaintButton->SetType(CBT_CHECK);
			mod->iPaintButton->SetHighlightColor(GREEN_WASH);
			mod->iPaintButton->SetCheck(mod->ip->GetCommandMode()->ID() == CID_PAINT && 
				!((PaintMouseProc *)mod->ip->GetCommandMode()->MouseProc(&numPoints))->GetPickMode());
			mod->iPaintButton->SetImage(hButtonImages,0,0,0,0,15,14);
			mod->iPaintButton->SetTooltip (TRUE, GetString (IDS_PAINT));

			mod->iPickButton = GetICustButton(GetDlgItem(hWnd, IDC_PICK));
			mod->iPickButton->SetType(CBT_CHECK);
			mod->iPickButton->SetHighlightColor(GREEN_WASH);
			mod->iPickButton->SetCheck(mod->ip->GetCommandMode()->ID() == CID_PAINT && 
				((PaintMouseProc *)mod->ip->GetCommandMode()->MouseProc(&numPoints))->GetPickMode());
			mod->iPickButton->SetImage(hButtonImages,1,1,1,1,15,14);
			mod->iPickButton->SetTooltip (TRUE, GetString (IDS_PICK));


			mod->iColor = GetIColorSwatch(GetDlgItem(hWnd, IDC_COLOR));
			// change current Color according to editMode
			mod->reloadBkupColor();

			// Get interface For ZGradient, reload bkuped colors
			mod->iColorGradient[0] = GetIColorSwatch(GetDlgItem(hWnd, IDC_PALETTE_GRAD0));
			mod->iColorGradient[1] = GetIColorSwatch(GetDlgItem(hWnd, IDC_PALETTE_GRAD1));
			mod->iColorGradient[0]->SetColor(mod->lastGradientColor[0]);
			mod->iColorGradient[1]->SetColor(mod->lastGradientColor[1]);

			
			// Init comboBox
			SendDlgItemMessage(hWnd, IDC_COMBO_TYPE, CB_ADDSTRING, 0, (LPARAM)"Tree Weight");
			SendDlgItemMessage(hWnd, IDC_COMBO_TYPE, CB_ADDSTRING, 0, (LPARAM)"Phase Level 1");
			SendDlgItemMessage(hWnd, IDC_COMBO_TYPE, CB_ADDSTRING, 0, (LPARAM)"Phase Level 2");
			SendDlgItemMessage(hWnd, IDC_COMBO_TYPE, CB_SETCURSEL, mod->getEditionType(), 0);

			// If paint mode at last edit.
			if(mod->_LastPaintMode)
			{
				// ActivatePaint / check button.
				mod->ActivatePaint(TRUE);
				mod->iPaintButton->SetCheck(TRUE);
			}

			break;

		case WM_POSTINIT:
			mod->InitPalettes();
			break;

		case CC_COLOR_CHANGE:
			if (LOWORD(wParam) == IDC_COLOR) 
			{
				IColorSwatch* iCol = (IColorSwatch*)lParam;
				switch(mod->getEditionType())
				{
				case 0: mod->lastWeightColor = iCol->GetColor(); break;
				case 1:
				case 2: 
					mod->lastPhaseColor = iCol->GetColor(); break;
				}
			}
			break;
		case WM_DESTROY:
			mod->SavePalettes();
			mod->iPaintButton = NULL;
			mod->iPickButton = NULL;
			mod->iColor = NULL;
			mod->iColorGradient[0] = NULL;
			mod->iColorGradient[1] = NULL;
			break;

		case WM_COMMAND:
			switch(LOWORD(wParam)) {
				case IDC_PAINT:
					mod->ActivatePaint(mod->iPaintButton->IsChecked());
					break;
				case IDC_PICK:
					mod->ActivatePaint(mod->iPickButton->IsChecked(),TRUE);
					break;

				case IDC_VC_ON:
					mod->TurnVCOn(FALSE);
					break;
				case IDC_SHADED:
					mod->TurnVCOn(TRUE);
					break;
				case IDC_COMBO_TYPE:
					// Init default type.
					comboResult= SendDlgItemMessage(hWnd, IDC_COMBO_TYPE, CB_GETCURSEL, 0, 0);
					mod->setEditionType(comboResult);
					break;
				case IDC_BUTTON_FILL:
					mod->fillSelectionColor();
					break;
				case IDC_BUTTON_GRADIENT:
					mod->fillSelectionGradientColor();
					break;
				case IDC_BUTTON_GRAD0:
					mod->iColorGradient[0]->SetColor(RGB(0,0,0));
					mod->iColorGradient[1]->SetColor(RGB(85,85,85));
					break;
				case IDC_BUTTON_GRAD1:
					mod->iColorGradient[0]->SetColor(RGB(85,85,85));
					mod->iColorGradient[1]->SetColor(RGB(170,170,170));
					break;
				case IDC_BUTTON_GRAD2:
					mod->iColorGradient[0]->SetColor(RGB(170,170,170));
					mod->iColorGradient[1]->SetColor(RGB(255,255,255));
					break;
				}
			break;

		default:
			return FALSE;
		}
	return TRUE;
	}
예제 #9
0
파일: shaderonb.cpp 프로젝트: 2asoft/xray
BOOL OrenNayarShaderDlg::PanelProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam ) 
{
	int id = LOWORD(wParam);
	int code = HIWORD(wParam);
    switch (msg) {
		case WM_INITDIALOG:
			{
			int i;
			
			HDC theHDC = GetDC(hwndDlg);
			hOldPal = GetGPort()->PlugPalette(theHDC);
			ReleaseDC(hwndDlg,theHDC);

			for (i=0; i<NCOLBOX; i++) {
   				cs[i] = GetIColorSwatch(GetDlgItem(hwndDlg, colID[i]),
   					GetMtlColor(i, pShader), GetColorName(i));
			}

			hwHilite = GetDlgItem(hwndDlg, IDC_HIGHLIGHT);
			SetWindowLongPtr( hwHilite, GWLP_WNDPROC, (LONG_PTR)HiliteWndProc);

			shSpin = SetupIntSpinner(hwndDlg, IDC_SH_SPIN, IDC_SH_EDIT, 0,100, 0);
			ssSpin = SetupIntSpinner(hwndDlg, IDC_SS_SPIN, IDC_SS_EDIT, 0,999, 0);
			softSpin = SetupFloatSpinner(hwndDlg, IDC_SOFT_SPIN, IDC_SOFT_EDIT, 0.0f,1.0f,0.0f,.01f);
			trSpin = SetupIntSpinner(hwndDlg, IDC_TR_SPIN, IDC_TR_EDIT, 0,100, 0);
			dlevSpin = SetupIntSpinner(hwndDlg, IDC_DIFFLEV_SPIN, IDC_DIFFLEV_EDIT, 0, 400, 0);
			roughSpin = SetupIntSpinner(hwndDlg, IDC_DIFFROUGH_SPIN, IDC_DIFFROUGH_EDIT, 0, 100, 0);

			for (int j=0; j<NMBUTS; j++) {
				texMBut[j] = GetICustButton(GetDlgItem(hwndDlg,texMButtonsIDC[j]));
				assert( texMBut[j] );
				texMBut[j]->SetRightClickNotify(TRUE);
				texMBut[j]->SetDADMgr(&dadMgr);
			}

			SetupLockButton(hwndDlg,IDC_LOCK_AD,FALSE);
			SetupLockButton(hwndDlg,IDC_LOCK_DS,FALSE);
			SetupPadLockButton(hwndDlg,IDC_LOCK_ADTEX, TRUE);

/* // mjm - 5.10.99 - isn't this already created above when i == N_SI_CLR?
			// create both a self-illum color as well as a spinner
			cs[N_SI_CLR] = GetIColorSwatch(GetDlgItem(hwndDlg, colID[N_SI_CLR] ),
   											GetMtlColor(N_SI_CLR, pShader), GetColorName(N_SI_CLR));
*/
			siSpin = SetupIntSpinner(hwndDlg, IDC_SI_SPIN, IDC_SI_EDIT, 0,100, 0);
			
			if( pShader->IsSelfIllumClrOn() ) {
				// enable the color swatch, disable the spinner
				ShowWindow( GetDlgItem(hwndDlg, IDC_SI_EDIT), SW_HIDE );
				ShowWindow( GetDlgItem(hwndDlg, IDC_SI_SPIN), SW_HIDE );
			} else {
				// disable the color swatch
				ShowWindow( cs[N_SI_CLR]->GetHwnd(), SW_HIDE );
			}
			LoadDialog(TRUE);
		}
		break;

		case WM_COMMAND: 
			{
			for ( int i=0; i<NMBUTS; i++) {
				if (id == texMButtonsIDC[i]) {
					PostMessage(hwmEdit,WM_TEXMAP_BUTTON, texmapFromMBut[i],(LPARAM)pMtl );
					UpdateMapButtons();
					goto exit;
					}
				}
			}
		    switch (id) {

				case IDC_LOCK_AD:
					SetLockAD(IsButtonChecked(hwndDlg, IDC_LOCK_AD));
					UpdateMtlDisplay();
					break;
				
				case IDC_LOCK_DS:
					SetLockDS(IsButtonChecked(hwndDlg, IDC_LOCK_DS));
					UpdateMtlDisplay();
					break;
				
				case IDC_LOCK_ADTEX:{
					BOOL on = IsButtonChecked(hwndDlg, IDC_LOCK_ADTEX);
					SetLockADTex(on);
					UpdateMtlDisplay();
				} break;

				case IDC_SI_COLORON:{
					int isOn = GetCheckBox(hwndDlg, IDC_SI_COLORON );
					pShader->SetSelfIllumClrOn( isOn );			
					if ( isOn ) {
						// enable the color swatch, disable the spinner
						ShowWindow( GetDlgItem(hwndDlg, IDC_SI_EDIT), SW_HIDE );
						ShowWindow( GetDlgItem(hwndDlg, IDC_SI_SPIN), SW_HIDE );
						ShowWindow( cs[N_SI_CLR]->GetHwnd(), SW_SHOW );
					} else {
						// disable the color swatch
						ShowWindow( cs[N_SI_CLR]->GetHwnd(), SW_HIDE );
						ShowWindow( GetDlgItem(hwndDlg, IDC_SI_EDIT), SW_SHOW );
						ShowWindow( GetDlgItem(hwndDlg, IDC_SI_SPIN), SW_SHOW );
					}
				    NotifyChanged();
//					UpdateMtlDisplay();
				}
				break;
			}
			break;
		case CC_COLOR_SEL: {
			int id = LOWORD(wParam);
			SelectEditColor(ColorIDCToIndex(id));
		}			
		break;
		case CC_COLOR_DROP:	{
			int id = LOWORD(wParam);
			SelectEditColor(ColorIDCToIndex(id));
			UpdateMtlDisplay();				
		}
		break;
		case CC_COLOR_BUTTONDOWN:
			theHold.Begin();
		 break;
		case CC_COLOR_BUTTONUP:
			if (HIWORD(wParam)) theHold.Accept(GetString(IDS_DS_PARAMCHG));
			else theHold.Cancel();
			UpdateMtlDisplay();				
			break;
		case CC_COLOR_CHANGE: {			
			int id = LOWORD(wParam);
			int buttonUp = HIWORD(wParam); 
			int n = ColorIDCToIndex(id);
			if (buttonUp) theHold.Begin();
			Color curColor(cs[n]->GetColor());
			SetMtlColor(n, curColor, pShader, cs, curTime);
			if (buttonUp) {
				theHold.Accept(GetString(IDS_DS_PARAMCHG));
				// DS: 5/11/99-  this was commented out. I put it back in, because
				// it is necessary for the Reset button in the color picker to 
				// update the viewport.				
				UpdateMtlDisplay();  
				}
		} break;
		case WM_PAINT: 
			if (!valid) {
				valid = TRUE;
				ReloadDialog();
				}
			return FALSE;
		case WM_CLOSE:
		case WM_DESTROY: 
			break;
		case CC_SPINNER_CHANGE: 
			if (!theHold.Holding()) theHold.Begin();
			switch (id) {
				case IDC_SH_SPIN: 
					pShader->SetGlossiness(PcToFrac(shSpin->GetIVal()), curTime); 
					UpdateHilite();
					break;
				case IDC_SS_SPIN: 
					pShader->SetSpecularLevel(PcToFrac(ssSpin->GetIVal()),curTime); 
					UpdateHilite();
					break;
				case IDC_SOFT_SPIN: 
					pShader->SetSoftenLevel(softSpin->GetFVal(),curTime); 
					break;
				case IDC_SI_SPIN: 
					pShader->SetSelfIllum(PcToFrac(siSpin->GetIVal()),curTime); 
					break;
				case IDC_DIFFLEV_SPIN: 
					pShader->SetDiffuseLevel(PcToFrac(dlevSpin->GetIVal()),curTime); 
					break;
				case IDC_DIFFROUGH_SPIN: 
					pShader->SetDiffuseRoughness(PcToFrac(roughSpin->GetIVal()),curTime); 
					break;
				//******** >>>><<<< required handling for opacity....must be present in all dialogs
				case IDC_TR_SPIN: 
					pMtl->SetOpacity(PcToFrac( trSpin->GetIVal()),curTime); 
					break;
			}
//			UpdateMtlDisplay();
		break;

		case CC_SPINNER_BUTTONDOWN:
			theHold.Begin();
			break;

		case WM_CUSTEDIT_ENTER:
		case CC_SPINNER_BUTTONUP: 
			if (HIWORD(wParam) || msg==WM_CUSTEDIT_ENTER) 
				theHold.Accept(GetString(IDS_DS_PARAMCHG));
			else 
				theHold.Cancel();
			UpdateMtlDisplay();
			break;

    }
	exit:
	return FALSE;
	}
예제 #10
0
// --[  Method  ]---------------------------------------------------------------
//
//  - Class     : CStravaganzaMaxTools
//
//  - prototype : void SaveConfig()
//
//  - Purpose   : Saves the panel parameters to a file.
//
// -----------------------------------------------------------------------------
void CStravaganzaMaxTools::SaveConfig()
{
	if(!m_hPanel) return;

	ISpinnerControl* pMaxSpin;
	ICustEdit*       pMaxEdit;

	int  nSelectedItem;
	char szAuxBuffer[MAX_PATH];
	COutputFile cfgFile;

	// GET SETTINGS FROM PANEL

	// Common

	m_bPreprocessMesh = IsDlgButtonChecked(m_hPanel, IDC_CHECK_PREPROCESSMESHES) == BST_CHECKED ? true : false;
	m_bUseLights      = IsDlgButtonChecked(m_hPanel, IDC_CHECK_USELIGHTS)        == BST_CHECKED ? true : false;

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_STARTTIME));
	m_fStartTime = pMaxSpin->GetFVal();
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ENDTIME));
	m_fEndTime = pMaxSpin->GetFVal();
	ReleaseISpinner(pMaxSpin);

	if(IsDlgButtonChecked(m_hPanel, IDC_RADIO_USESAMPLING) == BST_CHECKED)
	{
		m_eAnimType = ANIMATION_SAMPLING;
	}
	else if(IsDlgButtonChecked(m_hPanel, IDC_RADIO_USEMAXKEYS) == BST_CHECKED)
	{
		m_eAnimType = ANIMATION_MAXKEYS;
	}

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ANIMCHECKSTEP));
	m_nAnimCheckStep = pMaxSpin->GetIVal();
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_POSSAMPLINGFREQ));
	m_nNumPosSamplesPerSec = pMaxSpin->GetIVal();
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_SCLSAMPLINGFREQ));
	m_nNumSclSamplesPerSec = pMaxSpin->GetIVal();
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ROTSAMPLINGFREQ));
	m_nNumRotSamplesPerSec = pMaxSpin->GetIVal();
	ReleaseISpinner(pMaxSpin);

	// Export

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_DESTINATIONFILE));
	pMaxEdit->GetText(szAuxBuffer, MAX_PATH);
	ReleaseICustEdit(pMaxEdit);
	m_strFile = szAuxBuffer;

	m_bCopyTextures = IsDlgButtonChecked(m_hPanel, IDC_CHECK_COPYTEXTURES) == BST_CHECKED ? true : false;

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_TEXTUREFOLDER));
	pMaxEdit->GetText(szAuxBuffer, MAX_PATH);
	ReleaseICustEdit(pMaxEdit);
	m_strTexturePath = szAuxBuffer;

	// Preview

	// Get selected combo box camera

	nSelectedItem = SendMessage(GetDlgItem(m_hPanel, IDC_COMBO_CAMERA), CB_GETCURSEL, 0, 0);

	if(nSelectedItem == CB_ERR) // Items?
	{
		m_strPreviewCamera = "";
	}
	else
	{
		// Get selected item

		memset(szAuxBuffer, 0, MAX_PATH);

		if(SendMessage(GetDlgItem(m_hPanel, IDC_COMBO_CAMERA), CB_GETLBTEXT, (WPARAM)nSelectedItem, (LPARAM)(LPCSTR)szAuxBuffer) == CB_ERR)
		{
			CLogger::ErrorWindow("Error getting camera selection");
		}
		else
		{
			m_strPreviewCamera = szAuxBuffer;
		}
	}

	if(IsDlgButtonChecked(m_hPanel, IDC_RADIO_SOLID) == BST_CHECKED)
	{
		m_ePreviewType = CRenderVisitor::MODE_SOLID;
	}
	else if(IsDlgButtonChecked(m_hPanel, IDC_RADIO_WIREFRAME) == BST_CHECKED)
	{
		m_ePreviewType = CRenderVisitor::MODE_WIREFRAME;
	}
	else if(IsDlgButtonChecked(m_hPanel, IDC_RADIO_FULLDETAIL) == BST_CHECKED)
	{
		m_ePreviewType = CRenderVisitor::MODE_FULLDETAIL;
	}

	m_bFullscreen = IsDlgButtonChecked(m_hPanel, IDC_CHECK_FULLSCREEN) == BST_CHECKED ? true : false;
	m_bLoop       = IsDlgButtonChecked(m_hPanel, IDC_CHECK_LOOP)       == BST_CHECKED ? true : false;

	int  nAux;
	BOOL valid;

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_RESW));
	nAux = pMaxEdit->GetInt(&valid);
	if(valid) m_nPreviewResX = nAux; else pMaxEdit->SetText(m_nPreviewResX);
	ReleaseICustEdit(pMaxEdit);

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_RESH));
	nAux = pMaxEdit->GetInt(&valid);
	if(valid) m_nPreviewResY = nAux; else pMaxEdit->SetText(m_nPreviewResY);
	ReleaseICustEdit(pMaxEdit);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_VIEWPORTHEIGHT));
	m_fViewportHeight = pMaxSpin->GetFVal();
	ReleaseISpinner(pMaxSpin);

	m_bShowStats   = IsDlgButtonChecked(m_hPanel, IDC_CHECK_SHOWSTATS)   == BST_CHECKED ? true : false;
	m_bRenderToAvi = IsDlgButtonChecked(m_hPanel, IDC_CHECK_RENDERTOAVI) == BST_CHECKED ? true : false;

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_AVIFILE));
	pMaxEdit->GetText(szAuxBuffer, MAX_PATH);
	ReleaseICustEdit(pMaxEdit);
	m_strAviFile = szAuxBuffer;

	// SAVE SETTINGS

	if(cfgFile.Open(m_strCfgFile, false, false) == false)
	{
		return;
	}

	cfgFile.WriteInt(m_bPreprocessMesh ? 1 : 0);
	cfgFile.WriteInt(m_bUseLights      ? 1 : 0);

	cfgFile.WriteInt(m_nAnimCheckStep);
	cfgFile.WriteInt(m_nNumPosSamplesPerSec);
	cfgFile.WriteInt(m_nNumSclSamplesPerSec);
	cfgFile.WriteInt(m_nNumRotSamplesPerSec);
	cfgFile.WriteInt(m_nNumCamSettingsPerSec);
	cfgFile.WriteInt(m_nNumLightSettingsPerSec);

	cfgFile.WriteInt(m_eAnimType);

	// Export options

	cfgFile.WriteStringZero(m_strFile);
	cfgFile.WriteInt(m_bCopyTextures ? 1 : 0);
	cfgFile.WriteStringZero(m_strTexturePath);

	// Preview options

	cfgFile.WriteStringZero(m_strPreviewCamera);
	cfgFile.WriteInt(m_ePreviewType);
	cfgFile.WriteInt(m_bFullscreen ? 1 : 0);
	cfgFile.WriteInt(m_bLoop       ? 1 : 0);
	cfgFile.WriteInt(m_nPreviewResX);
	cfgFile.WriteInt(m_nPreviewResY);
	cfgFile.WriteFloat(m_fViewportHeight);
	cfgFile.WriteInt(m_bShowStats   ? 1 : 0);
	cfgFile.WriteInt(m_bRenderToAvi ? 1 : 0);
	cfgFile.WriteStringZero(m_strAviFile);

	cfgFile.Close();
}