void ConvexApproximationObject::InitUI(HWND hWnd)
{
	m_UI_initalizationCompleted = false;

	HWND maxConcavityUI = GetDlgItem(hWnd, IDC_MAX_CONCAVITY);
	HWND maxConcavitySpinnerUI = GetDlgItem(hWnd, IDC_MAX_CONCAVITY_SPINNER);
	m_maxConcavity = GetICustEdit(maxConcavityUI);
	m_maxConcavitySpinner = GetISpinner (maxConcavitySpinnerUI);
	m_maxConcavitySpinner->LinkToEdit (maxConcavityUI, EDITTYPE_POS_FLOAT);
	m_maxConcavitySpinner->SetScale (0.01f);
	m_maxConcavitySpinner->SetLimits(0.01f, 100.0f);
	m_maxConcavitySpinner->SetValue(m_currentConcavity, TRUE);


	HWND maxSegmentsUI = GetDlgItem(hWnd, IDC_MAX_SEGMENTS);
	HWND maxSegmentsSpinnerUI = GetDlgItem(hWnd, IDC_MAX_SEGMENTS_SPINNER);
	m_maxSegments = GetICustEdit(maxSegmentsUI);
	m_maxSegmentsSpinner = GetISpinner (maxSegmentsSpinnerUI);
	m_maxSegmentsSpinner->LinkToEdit (maxSegmentsUI, EDITTYPE_POS_INT);
	m_maxSegmentsSpinner->SetScale (1.0f);
	m_maxSegmentsSpinner->SetLimits(1, 256);
	m_maxSegmentsSpinner->SetValue(m_currentMaxCount, TRUE);

	m_UI_initalizationCompleted = true;
}
void RigidBodyWorld::InitUI(HWND hWnd)
{
	RigidBodyWorldDesc* const desc = (RigidBodyWorldDesc*) RigidBodyWorldDesc::GetDescriptor();

	HWND minFps = GetDlgItem(hWnd, IDC_MINUMIN_SIMULATION_RATE);
	HWND gravity_x = GetDlgItem(hWnd, IDC_GRAVITY_X);
	HWND gravity_y = GetDlgItem(hWnd, IDC_GRAVITY_Y);
	HWND gravity_z = GetDlgItem(hWnd, IDC_GRAVITY_Z);

	m_minFps = GetICustEdit(minFps);
	m_gravity[0] = GetICustEdit(gravity_x);
	m_gravity[1] = GetICustEdit(gravity_y);
	m_gravity[2] = GetICustEdit(gravity_z);


	float scale = 1.0f / float (GetMasterScale(UNITS_METERS));
	dVector gravity = desc->m_systemMatrixInv.RotateVector(desc->m_gravity.Scale (scale));

	m_minFps->SetText(desc->m_minFps);
	m_gravity[0]->SetText(gravity.m_x, 1);
	m_gravity[1]->SetText(gravity.m_y, 1);
	m_gravity[2]->SetText(gravity.m_z, 1);

	RegisterNotification(OnUndoRedo, this, NOTIFY_SCENE_UNDO);
	RegisterNotification (OnUndoRedo, this, NOTIFY_SCENE_REDO);
}
Example #3
0
void MorphObject::SetupTargetList()
   {
   if (!morphCont) return;
   SendMessage(GetDlgItem(hParams2,IDC_MORPHTARG_LIST),LB_RESETCONTENT,0,0);
   for (int i=0; i<morphCont->NumMorphTargs(); i++) {
      SendMessage(GetDlgItem(hParams2,IDC_MORPHTARG_LIST),
         LB_ADDSTRING,0,(LPARAM)(const TCHAR*)SubAnimName(i));
      }
   if (sel>=0) {
      SendMessage(GetDlgItem(hParams2,IDC_MORPHTARG_LIST),
         LB_SETCURSEL,sel,0);
      EnableWindow(GetDlgItem(hParams2,IDC_CREATE_MORPHKEY),TRUE);
      EnableWindow(GetDlgItem(hParams2,IDC_DELETE_MORPHTARG),TRUE);

      ICustEdit *edit = GetICustEdit(GetDlgItem(hParams2,IDC_MORPHTARG_NAME));
      edit->Enable();
      edit->SetText(SubAnimName(sel));
      ReleaseICustEdit(edit);
   } else {
      EnableWindow(GetDlgItem(hParams2,IDC_CREATE_MORPHKEY),FALSE);
      EnableWindow(GetDlgItem(hParams2,IDC_DELETE_MORPHTARG),FALSE);
      
      ICustEdit *edit = GetICustEdit(GetDlgItem(hParams2,IDC_MORPHTARG_NAME));
      edit->Disable();
      edit->SetText(_T(""));
      ReleaseICustEdit(edit);
      }
   }
Example #4
0
void EllipseObject::UpdateUI(HWND hwnd)
{
	Interval valid;
	BOOL build_outine = FALSE;
	TimeValue t = ip? ip->GetTime() : 0;

	myParamBlock->GetValue(PB_OUTLINE, t, build_outine, valid);
	ICustEdit *thickness_edit = GetICustEdit(GetDlgItem(hwnd, IDC_THICKNESSEDIT));
	ISpinnerControl *thickness_spin = GetISpinner(GetDlgItem(hwnd, IDC_THICKSPINNER));

	if(!thickness_edit || !thickness_spin)
		return;

	if(build_outine)
	{
		EnableWindow(GetDlgItem(hwnd,IDC_THICKNESS_TEXT),TRUE);
		thickness_edit->Enable();
		thickness_spin->Enable();
	}
	else
	{
		EnableWindow(GetDlgItem(hwnd,IDC_THICKNESS_TEXT),FALSE);
		thickness_edit->Disable();
		thickness_spin->Disable();
	}

	ReleaseICustEdit(thickness_edit);
	ReleaseISpinner(thickness_spin);
}
Example #5
0
int
Fixed32::make_dialog_gadgets( HWND hPanel )
{
	int x;
	int width;

	assert( _td );

	assert( hPanel );
	assert( hInstance );
	assert( _td->name );

	int wLabel = uiDialog::make_dialog_gadgets( hPanel );

	x = 5 + wLabel;
	width = min( LAST_BUTTON_WIDTH( x + 12 + 1 ), 55 );
	hwndEdit = theAttributes.CreateWindowEx(
		0,
		"CustEdit",
		_td->name,
		0 | WS_TABSTOP,
		x,
		theAttributes.y,
		width, 16,
		hPanel,
		NULL,
		hInstance,
		NULL );
	assert( hwndEdit );
	_edit = GetICustEdit( hwndEdit );
	assert( _edit );

	hwndSpinner = theAttributes.CreateWindowEx(
		0,
		"SpinnerControl",
		"",
		0x50000000,
		x + width + 1,
		theAttributes.y,
		7,
		10,
		hPanel,
		NULL,
		hInstance,
		NULL );
	assert( hwndSpinner );
	_spinner = GetISpinner( hwndSpinner );
	assert( _spinner );

	reset();

	_spinner->LinkToEdit( hwndEdit, EDITTYPE_FLOAT );
	_spinner->SetAutoScale();

	return x + width + 1 + 7;
}
Example #6
0
void SceneViewer::IEnableSetupControls(bool enable)
{
    ICustEdit *edit = GetICustEdit(GetDlgItem(fhDlg, IDC_CLIENT_PATH));
    edit->Enable(enable);

    EnableWindow(GetDlgItem(fhDlg, IDC_DIR), enable);
    EnableWindow(GetDlgItem(fhDlg, IDC_EXE), enable);
    EnableWindow(GetDlgItem(fhDlg, IDC_REUSE_DATA), enable);

    SetWindowText(GetDlgItem(fhDlg, IDC_START), enable ? "Start" : "Stop");
}
Example #7
0
void
FooControl::set_enable()
{
	if (parent_rollout != NULL && parent_rollout->page != NULL)
	{
		// set spinner enable
		ISpinnerControl *spin = GetISpinner(GetDlgItem(parent_rollout->page, control_ID));
		if (enabled) spin->Enable();
		else spin->Disable();
		ReleaseISpinner(spin);
		// set editbox enable
		ICustEdit *edit = GetICustEdit(GetDlgItem(parent_rollout->page, control_ID+2));
		if (enabled) edit->Enable();
		else edit->Disable();
		ReleaseICustEdit(edit);
		// set caption enable
		HWND ctrl = GetDlgItem(parent_rollout->page, control_ID+1);
		if (ctrl)
			EnableWindow(ctrl, enabled);
	}
}
void RigidBodyUIPane::InitUI(HWND hWnd)
{
	HWND massControlHandle = GetDlgItem(hWnd, IDC_RIGID_BODY_MASS);
	HWND massSpinControlHandle = GetDlgItem(hWnd, IDC_RIGID_BODY_MASS_PINNER);
	HWND collisionShapeHandle = GetDlgItem(hWnd, IDC_RIGID_BODY_COLLISION);

	m_massEdit = GetICustEdit(massControlHandle);
	m_massSpinner = GetISpinner (massSpinControlHandle);
	m_massSpinner->LinkToEdit (massControlHandle, EDITTYPE_POS_FLOAT);
	m_massSpinner->SetScale (0.1f);
	m_massSpinner->SetLimits(0.0f, 1000.0f);
/*
	SetCollisionData (collisionShapeHandle, m_box, "box");
	SetCollisionData (collisionShapeHandle, m_sphere, "sphere");
	SetCollisionData (collisionShapeHandle, m_cylinder, "cylinder");
	SetCollisionData (collisionShapeHandle, m_convexHull, "convex hull");
	SetCollisionData (collisionShapeHandle, m_collisionTree, "collision tree");

	//SendMessage (collisionShapeHandle, CB_SELECTSTRING, 0, LPARAM ("convex hull"));
	SendMessage (collisionShapeHandle, CB_SELECTSTRING, 0, LPARAM ("box"));
	m_curCollsionShape = m_box;

	PhysicsPluginObject& me = *(PhysicsPluginObject*)this;
	dList<INode*> nodeList;
	me.GetNodeList (nodeList);
	for (dList<INode*>::dListNode* ptr = nodeList.GetFirst(); ptr; ptr = ptr->GetNext()) {
		INode* const node = ptr->GetInfo();
		AppDataChunk* const rigidBodyChunk = node->GetAppDataChunk(GetRigidBodyID(), node->SuperClassID(), 0); 
		if (rigidBodyChunk) {
			RidBodyData* const bodyData = (RidBodyData*) rigidBodyChunk->data;
			bodyData->m_body = NULL;
			AddNodeToWorld (node);
		}
	}
*/
}
Example #9
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;
}
Example #10
0
int
ObjectReference::make_dialog_gadgets( HWND hPanel )
{
	int x;
	int width;

	assert( _td );

	assert( hPanel );
	assert( hInstance );
	assert( _td->name );

	int wLabel = uiDialog::make_dialog_gadgets( hPanel );

	x = 5 + wLabel;
	width = LAST_BUTTON_WIDTH( x + 16+1 + 16+1 );

	//theAttributes.y += 18;

	hwndEdit = theAttributes.CreateWindowEx(
		0,
		"CustEdit",
		_td->name,
		0 | WS_TABSTOP,
		x,
		theAttributes.y,
		width,
		16,
		hPanel );
	assert( hwndEdit );
	_edit = GetICustEdit( hwndEdit );
	assert( _edit );

	hwndBrowseButton = theAttributes.CreateWindowEx(
		0,
		"BUTTON",
		"8",
		0,
		x + width + 1,
		theAttributes.y,
		16,
		16,
		hPanel );
	assert( hwndBrowseButton );
	SetWindowLong( hwndBrowseButton, GWL_USERDATA, (LONG)this );
	SetWindowFont( hwndBrowseButton, theAttributes._fontWingdings, true );

	char szButton[ 2 ];
	szButton[ 0 ] = 240;
	szButton[ 1 ] = '\0';

	hwndGoToObjectButton = theAttributes.CreateWindowEx(
		0,
		"BUTTON",
		szButton,
		0,
		x + width + 16+1 + 1,
		theAttributes.y,
		16,
		16,
		hPanel );
	assert( hwndGoToObjectButton );
	SetWindowLong( hwndGoToObjectButton, GWL_USERDATA, (LONG)this );
	SetWindowFont( hwndGoToObjectButton, theAttributes._fontWingdings, true );

	reset();

	return x + width + 1 + 16 + 16;
}
Example #11
0
static INT_PTR CALLBACK MorphParamDlgProc2( 
      HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
   {
   MorphObject *mo = DLGetWindowLongPtr<MorphObject*>(hWnd);
   if (!mo && message!=WM_INITDIALOG) return FALSE;

   switch (message) {
      case WM_INITDIALOG: {
         mo = (MorphObject*)lParam;
         DLSetWindowLongPtr(hWnd, lParam);
         mo->hParams2 = hWnd;
         mo->SetupTargetList();        
         break;
         }

      case WM_COMMAND:
         switch(LOWORD(wParam)) {
            case IDC_CREATE_MORPHKEY: {
               TSTR name;
               Matrix3 tm = mo->morphCont->GetMorphTargTM(mo->sel);
               SetMorphTargetPacket pckt(
                  mo->morphCont->GetMorphTarg(mo->sel),name,
                  tm,TRUE);
               theHold.Begin();
               mo->morphCont->SetValue(mo->ip->GetTime(),&pckt);
               theHold.Accept(GetString(IDS_RB_CREATEMORPHKEY));
               mo->ip->RedrawViews(mo->ip->GetTime());
               break;
               }

            case IDC_MORPHTARG_LIST:
               if (HIWORD(wParam)==LBN_SELCHANGE) {
                  mo->sel = SendMessage(
                     GetDlgItem(mo->hParams2,IDC_MORPHTARG_LIST),
                     LB_GETCURSEL,0,0);                  
                  if (mo->sel < 0) {
                     EnableWindow(GetDlgItem(hWnd,IDC_CREATE_MORPHKEY),FALSE);
                     EnableWindow(GetDlgItem(hWnd,IDC_DELETE_MORPHTARG),FALSE);
                     ICustEdit *edit = GetICustEdit(GetDlgItem(hWnd,IDC_MORPHTARG_NAME));
                     edit->Disable();
                     edit->SetText(_T(""));
                     ReleaseICustEdit(edit);
                  } else {
                     EnableWindow(GetDlgItem(hWnd,IDC_CREATE_MORPHKEY),TRUE);
                     EnableWindow(GetDlgItem(hWnd,IDC_DELETE_MORPHTARG),TRUE);
                     ICustEdit *edit = GetICustEdit(GetDlgItem(hWnd,IDC_MORPHTARG_NAME));
                     edit->Enable();
                     edit->SetText(mo->SubAnimName(mo->sel));
                     ReleaseICustEdit(edit);
                     }
                  mo->NotifyDependents(FOREVER,(PartID) mo,REFMSG_BRANCHED_HISTORY_CHANGED);
                  }
               break;

            case IDC_DELETE_MORPHTARG:
               if (mo->sel>=0) {
                  theHold.Begin();
                  mo->morphCont->DeleteMorphTarg(mo->sel);
                  theHold.Accept(GetString(IDS_RB_DELETEMORPHTARG));
                  mo->sel = -1;
                  mo->SetupTargetList();
                  mo->ip->RedrawViews(mo->ip->GetTime());
                  //GetSystemSetting(SYSSET_CLEAR_UNDO);
                  }
               break;               
            }
         break;

      case WM_CUSTEDIT_ENTER:
         if (LOWORD(wParam)==IDC_MORPHTARG_NAME && mo->sel >= 0) {
            ICustEdit *edit = GetICustEdit(GetDlgItem(hWnd,IDC_MORPHTARG_NAME));
            TCHAR buf[256];
            edit->GetText(buf,256);
            mo->morphCont->SetMorphTargName(mo->sel,TSTR(buf));
            mo->SetupTargetList();
            mo->NotifyDependents(FOREVER,0,REFMSG_SUBANIM_STRUCTURE_CHANGED);
            ReleaseICustEdit(edit);          
            }
         break;

      case WM_LBUTTONDOWN:
      case WM_LBUTTONUP:
      case WM_MOUSEMOVE:
         mo->ip->RollupMouseMessage(hWnd,message,wParam,lParam);
         return FALSE;
      
      default:
         return FALSE;
      }
   return TRUE;
   }
Example #12
0
void plResponderWaitProc::LoadPoint(bool force)
{
    int who = fWaitPB->GetInt(kWaitWho);
    const char *point = fWaitPB->GetStr(kWaitPoint);
    if (point && *point == '\0')
        point = nil;

    CheckRadioButton(fhDlg, IDC_RADIO_FINISH, IDC_RADIO_POINT, point || force ? IDC_RADIO_POINT : IDC_RADIO_FINISH);

    BOOL enableAll = (who != -1);
    EnableWindow(GetDlgItem(fhDlg, IDC_RADIO_FINISH), enableAll);
    EnableWindow(GetDlgItem(fhDlg, IDC_RADIO_POINT), enableAll);

    BOOL enablePoint = ((point != nil) || force) && enableAll;
    EnableWindow(GetDlgItem(fhDlg, IDC_WAIT_POINT), enablePoint);
    ComboBox_ResetContent(GetDlgItem(fhDlg, IDC_WAIT_POINT));

    if (enableAll)
    {
        IParamBlock2 *pb = (IParamBlock2*)fStatePB->GetReferenceTarget(kStateCmdParams, 0, who);
        plResponderCmd *cmd = plResponderCmd::Find(pb);

        // KLUDGE - stupid one-shot needs editable box
        if (cmd == &(plResponderCmdOneShot::Instance()))
        {
            ShowWindow(GetDlgItem(fhDlg, IDC_WAIT_POINT), SW_HIDE);

            HWND hEdit = GetDlgItem(fhDlg, IDC_MARKER_EDIT);
            ShowWindow(hEdit, SW_SHOW);
            ICustEdit *custEdit = GetICustEdit(hEdit);
            custEdit->SetText(point ? (char*)point : "");
        }
        else
        {
            ShowWindow(GetDlgItem(fhDlg, IDC_WAIT_POINT), SW_SHOW);

            HWND hEdit = GetDlgItem(fhDlg, IDC_MARKER_EDIT);
            ShowWindow(hEdit, SW_HIDE);

            plResponderCmd::WaitPoints waitPoints;
            cmd->GetWaitPoints(pb, waitPoints);

            HWND hCombo = GetDlgItem(fhDlg, IDC_WAIT_POINT);
            ComboBox_ResetContent(hCombo);

            if (waitPoints.size() == 0)
            {
                EnableWindow(GetDlgItem(fhDlg, IDC_RADIO_POINT), FALSE);
                EnableWindow(GetDlgItem(fhDlg, IDC_WAIT_POINT), FALSE);
            }
            else
            {
                for (int i = 0; i < waitPoints.size(); i++)
                {
                    const char *marker = waitPoints[i].c_str();
                    int idx = ComboBox_AddString(hCombo, marker);
                    if (point && !strcmp(point, marker))
                        ComboBox_SetCurSel(hCombo, idx);
                }
            }
        }
    }
}
Example #13
0
BOOL plResponderWaitProc::DlgProc(TimeValue t, IParamMap2 *pm, HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        case WM_INITDIALOG:
        {
            fhDlg = hDlg;

            fWaitPB = pm->GetParamBlock();

            ResponderWait::FixupWaitBlock(fWaitPB);

            IParamBlock2 *pb = GetCmdParams(fCurCmd);
            plResponderCmd *cmd = plResponderCmd::Find(pb);
            pm->Enable(kWaitMe, cmd->IsWaitable(pb));

            LoadWho();
            LoadPoint();
            return TRUE;
        }

        case WM_CUSTEDIT_ENTER:
            if (wParam == IDC_MARKER_EDIT)
            {
                ICustEdit *edit = GetICustEdit((HWND)lParam);
                char buf[256];
                edit->GetText(buf, sizeof(buf));
                fWaitPB->SetValue(kWaitPoint, 0, buf);

                return TRUE;
            }
            break;

        case WM_COMMAND:
        {
            int code = HIWORD(wParam);
            int id = LOWORD(wParam);

            if (id == IDC_CHECK_WAIT && code == BN_CLICKED)
            {
                BOOL checked = (IsDlgButtonChecked(hDlg, IDC_CHECK_WAIT) == BST_CHECKED);
                if (!checked)
                {
                    fWaitPB->SetValue(kWaitWho, 0, -1);
                    fWaitPB->SetValue(kWaitPoint, 0, "");

                    LoadPoint();

                    HWND hWho = GetDlgItem(hDlg, IDC_WAIT_WHO);
                    EnableWindow(hWho, FALSE);
                    ComboBox_ResetContent(hWho);
                }
                else
                {
                    LoadWho(true);
                    LoadPoint();
                }

                return TRUE;
            }
            else if (id == IDC_WAIT_WHO && code == CBN_SELCHANGE)
            {
                HWND hWho = (HWND)lParam;
                int who = ComboBox_GetCurSel(hWho);
                int idx = ComboBox_GetItemData(hWho, who);
                fWaitPB->SetValue(kWaitWho, 0, idx);

                LoadPoint();
                return TRUE;
            }
            else if (id == IDC_RADIO_FINISH && code == BN_CLICKED)
            {
                fWaitPB->SetValue(kWaitPoint, 0, "");
                LoadPoint();
                return TRUE;
            }
            else if (id == IDC_RADIO_POINT && code == BN_CLICKED)
            {
                LoadPoint(true);
                return TRUE;
            }
            else if (id == IDC_WAIT_POINT && code == CBN_SELCHANGE)
            {
                HWND hPoint = (HWND)lParam;
                if (ComboBox_GetCurSel(hPoint) != CB_ERR)
                {
                    char buf[256];
                    ComboBox_GetText(hPoint, buf, sizeof(buf));
                    fWaitPB->SetValue(kWaitPoint, 0, buf);
                }
                return TRUE;
            }
            break;
        }
    }

    return FALSE;
}
Example #14
0
// --[  Method  ]---------------------------------------------------------------
//
//  - Class     : CStravaganzaMaxTools
//
//  - prototype : void ReadConfig(bool bLoadDefaults = false)
//
//  - Purpose   : Initializes the tool parameters, reading the previous
//                configuration from a cfg file or creating default values.
//                If bLoadDefaults is true, the config file won't be read and
//                default values will be assigned.
//
// -----------------------------------------------------------------------------
void CStravaganzaMaxTools::ReadConfig(bool bLoadDefaults)
{
	if(!m_hPanel) return;

	ISpinnerControl* pMaxSpin;
	ICustEdit*       pMaxEdit;
	CInputFile cfgFile;

	m_bPreprocessMesh         = true;
	m_bUseLights              = true;
	m_eAnimType               = ANIMATION_SAMPLING;
	m_nAnimCheckStep          = 20;
	m_nNumPosSamplesPerSec    = 30;
	m_nNumSclSamplesPerSec    = 30;
	m_nNumRotSamplesPerSec    = 30;
	m_nNumCamSettingsPerSec   = 15;
	m_nNumLightSettingsPerSec = 15;

	m_strFile                 = "";
	m_bCopyTextures           = true;
	m_strTexturePath          = "";	

	m_ePreviewType            = CRenderVisitor::MODE_SOLID;
	m_bFullscreen             = false;
	m_bLoop                   = true;
	m_nPreviewResX            = 800;
	m_nPreviewResY            = 600;
	m_fViewportHeight         = 1.0f;
	m_bShowStats              = true;
	m_bRenderToAvi            = false;
	m_strAviFile              = "";
	m_strPreviewCamera        = "";

	if(cfgFile.Open(m_strCfgFile, false) && !bLoadDefaults)
	{
		int nValue;

		// Common options

		cfgFile.ReadInt(&nValue);
		m_bPreprocessMesh = nValue ? true : false;

		cfgFile.ReadInt(&nValue);
		m_bUseLights = nValue ? true : false;

		m_fStartTime = TICKS_TO_SECONDS(m_pMaxInterface->GetAnimRange().Start());
		m_fEndTime   = TICKS_TO_SECONDS(m_pMaxInterface->GetAnimRange().End());

		cfgFile.ReadInt(&m_nAnimCheckStep);
		cfgFile.ReadInt(&m_nNumPosSamplesPerSec);
		cfgFile.ReadInt(&m_nNumSclSamplesPerSec);
		cfgFile.ReadInt(&m_nNumRotSamplesPerSec);
		cfgFile.ReadInt(&m_nNumCamSettingsPerSec);
		cfgFile.ReadInt(&m_nNumLightSettingsPerSec);

		cfgFile.ReadInt(&nValue);

		switch(nValue)
		{
		case ANIMATION_SAMPLING: m_eAnimType = ANIMATION_SAMPLING; break;
		case ANIMATION_MAXKEYS:  m_eAnimType = ANIMATION_MAXKEYS;  break;
		}

		// Export options

		cfgFile.ReadStringZero(&m_strFile);
		cfgFile.ReadInt(&nValue);
		m_bCopyTextures = nValue ? true : false;
		cfgFile.ReadStringZero(&m_strTexturePath);

		// Preview options

		cfgFile.ReadStringZero(&m_strPreviewCamera);
		FillCameraCombobox(GetDlgItem(m_hPanel, IDC_COMBO_CAMERA), m_pMaxInterface->GetRootNode());

		cfgFile.ReadInt(&nValue);
		switch(nValue)
		{
		case CRenderVisitor::MODE_WIREFRAME:  m_ePreviewType = CRenderVisitor::MODE_WIREFRAME;  break;
		case CRenderVisitor::MODE_SOLID:      m_ePreviewType = CRenderVisitor::MODE_SOLID;      break;
		case CRenderVisitor::MODE_FULLDETAIL: m_ePreviewType = CRenderVisitor::MODE_FULLDETAIL; break;
		}

		cfgFile.ReadInt(&nValue);
		m_bFullscreen = nValue ? true : false;

		cfgFile.ReadInt(&nValue);
		m_bLoop = nValue ? true : false;

		cfgFile.ReadInt  (&m_nPreviewResX);
		cfgFile.ReadInt  (&m_nPreviewResY);
		cfgFile.ReadFloat(&m_fViewportHeight);
		cfgFile.ReadInt  (&nValue);
		m_bShowStats = nValue ? true : false;
		cfgFile.ReadInt  (&nValue);
		m_bRenderToAvi = nValue ? true : false;
		cfgFile.ReadStringZero(&m_strAviFile);
	}

	cfgFile.Close();

	// Common

	CheckDlgButton(m_hPanel, IDC_CHECK_PREPROCESSMESHES, m_bPreprocessMesh ? BST_CHECKED : BST_UNCHECKED);
	CheckDlgButton(m_hPanel, IDC_CHECK_USELIGHTS,        m_bUseLights      ? BST_CHECKED : BST_UNCHECKED);

	EnableWindow(GetDlgItem(m_hPanel, IDC_RADIO_USEMAXKEYS), FALSE);

	switch(m_eAnimType)
	{
	case ANIMATION_SAMPLING:

		CheckRadioButton(m_hPanel, IDC_RADIO_USESAMPLING, IDC_RADIO_USEMAXKEYS, IDC_RADIO_USESAMPLING);
		break;

	case ANIMATION_MAXKEYS:

		CheckRadioButton(m_hPanel, IDC_RADIO_USESAMPLING, IDC_RADIO_USEMAXKEYS, IDC_RADIO_USEMAXKEYS);
		break;
	}

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_STARTTIME));
	pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_STARTTIME), EDITTYPE_FLOAT);
	pMaxSpin->SetLimits(m_fStartTime, m_fEndTime, TRUE);
	pMaxSpin->SetScale(0.01f);
	pMaxSpin->SetValue(m_fStartTime, FALSE);
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ENDTIME));
	pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_ENDTIME), EDITTYPE_FLOAT);
	pMaxSpin->SetLimits(m_fStartTime, m_fEndTime, TRUE);
	pMaxSpin->SetScale(0.01f);
	pMaxSpin->SetValue(m_fEndTime, FALSE);
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ANIMCHECKSTEP));
	pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_ANIMCHECKSTEP), EDITTYPE_INT);
	pMaxSpin->SetLimits(0, 100, TRUE);
	pMaxSpin->SetScale(1);
	pMaxSpin->SetValue(m_nAnimCheckStep, FALSE);
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_POSSAMPLINGFREQ));
	pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_POSSAMPLINGFREQ), EDITTYPE_INT);
	pMaxSpin->SetLimits(0, 100, TRUE);
	pMaxSpin->SetScale(1);
	pMaxSpin->SetValue(m_nNumPosSamplesPerSec, FALSE);
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_SCLSAMPLINGFREQ));
	pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_SCLSAMPLINGFREQ), EDITTYPE_INT);
	pMaxSpin->SetLimits(0, 100, TRUE);
	pMaxSpin->SetScale(1);
	pMaxSpin->SetValue(m_nNumSclSamplesPerSec, FALSE);
	ReleaseISpinner(pMaxSpin);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ROTSAMPLINGFREQ));
	pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_ROTSAMPLINGFREQ), EDITTYPE_INT);
	pMaxSpin->SetLimits(0, 100, TRUE);
	pMaxSpin->SetScale(1);
	pMaxSpin->SetValue(m_nNumRotSamplesPerSec, FALSE);
	ReleaseISpinner(pMaxSpin);

	// Export

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_DESTINATIONFILE));
	pMaxEdit->SetText((char*)m_strFile.data());
	pMaxEdit->SetLeading(2);
	ReleaseICustEdit(pMaxEdit);

	CheckDlgButton(m_hPanel, IDC_CHECK_COPYTEXTURES, m_bCopyTextures ? BST_CHECKED : BST_UNCHECKED);

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_TEXTUREFOLDER));
	pMaxEdit->SetText((char*)m_strTexturePath.data());
	pMaxEdit->SetLeading(2);
	ReleaseICustEdit(pMaxEdit);

	EnableWindow(GetDlgItem(m_hPanel, IDC_EDIT_TEXTUREFOLDER),   m_bCopyTextures ? TRUE : FALSE);
	EnableWindow(GetDlgItem(m_hPanel, IDC_BUTTON_TEXTUREFOLDER), m_bCopyTextures ? TRUE : FALSE);

	// Preview

	switch(m_ePreviewType)
	{
	case CRenderVisitor::MODE_WIREFRAME:
		
		CheckRadioButton(m_hPanel, IDC_RADIO_WIREFRAME, IDC_RADIO_FULLDETAIL, IDC_RADIO_WIREFRAME);
		break;

	case CRenderVisitor::MODE_SOLID:
		
		CheckRadioButton(m_hPanel, IDC_RADIO_WIREFRAME, IDC_RADIO_FULLDETAIL, IDC_RADIO_SOLID);
		break;

	case CRenderVisitor::MODE_FULLDETAIL:
		
		CheckRadioButton(m_hPanel, IDC_RADIO_WIREFRAME, IDC_RADIO_FULLDETAIL, IDC_RADIO_FULLDETAIL);
		break;
	}

	CheckDlgButton(m_hPanel, IDC_CHECK_FULLSCREEN, m_bFullscreen ? BST_CHECKED : BST_UNCHECKED);
	CheckDlgButton(m_hPanel, IDC_CHECK_LOOP,       m_bLoop       ? BST_CHECKED : BST_UNCHECKED);

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_RESW));
	pMaxEdit->SetText(m_nPreviewResX);
	ReleaseICustEdit(pMaxEdit);

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_RESH));
	pMaxEdit->SetText(m_nPreviewResY);
	ReleaseICustEdit(pMaxEdit);

	pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_VIEWPORTHEIGHT));
	pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_VIEWPORTHEIGHT), EDITTYPE_FLOAT);
	pMaxSpin->SetLimits(0.0f, 1.0f, TRUE);
	pMaxSpin->SetScale(0.01f);
	pMaxSpin->SetValue(m_fViewportHeight, FALSE);
	ReleaseISpinner(pMaxSpin);

	CheckDlgButton(m_hPanel, IDC_CHECK_SHOWSTATS,   m_bShowStats   ? BST_CHECKED : BST_UNCHECKED);
	CheckDlgButton(m_hPanel, IDC_CHECK_RENDERTOAVI, m_bRenderToAvi ? BST_CHECKED : BST_UNCHECKED);

	pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_AVIFILE));
	pMaxEdit->SetText((char*)m_strAviFile.data());
	pMaxEdit->SetLeading(2);
	ReleaseICustEdit(pMaxEdit);

	EnableWindow(GetDlgItem(m_hPanel, IDC_EDIT_AVIFILE),   m_bRenderToAvi ? TRUE : FALSE);
	EnableWindow(GetDlgItem(m_hPanel, IDC_BUTTON_AVIFILE), m_bRenderToAvi ? TRUE : FALSE);
}
Example #15
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();
}
Example #16
0
INT_PTR MorphByBoneParamsMapDlgProcProp::DlgProc(TimeValue t,IParamMap2 *map,HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)		


			
	{


	switch (msg) 
		{
		case WM_INITDIALOG:
			{

			mod->iEditButton = GetICustButton(GetDlgItem(hWnd, IDC_EDITMORPH));
			mod->iEditButton->SetType(CBT_CHECK);
			mod->iEditButton->SetHighlightColor(GREEN_WASH);

			mod->iNodeButton = GetICustButton(GetDlgItem(hWnd, IDC_EXTERNALNODE));
			mod->iNodeButton->SetType(CBT_CHECK);
			mod->iNodeButton->SetHighlightColor(GREEN_WASH);



			mod->iDeleteMorphButton = GetICustButton(GetDlgItem(hWnd, IDC_DELETEMORPH_BUTTON));
			mod->iCreateMorphButton = GetICustButton(GetDlgItem(hWnd, IDC_CREATEMORPH_BUTTON));

			mod->iResetMorphButton = GetICustButton(GetDlgItem(hWnd, IDC_RESET_BUTTON));
			mod->iClearVertsButton = GetICustButton(GetDlgItem(hWnd, IDC_CLEARVERTICES));
			mod->iRemoveVertsButton = GetICustButton(GetDlgItem(hWnd, IDC_REMOVEVERTICES));
			
			mod->iReloadButton = GetICustButton(GetDlgItem(hWnd, IDC_RELOAD_BUTTON));
			mod->iGraphButton = GetICustButton(GetDlgItem(hWnd, IDC_EDITGRAPH));

			mod->iNameField = GetICustEdit(GetDlgItem(hWnd, IDC_NAME));
			mod->iInfluenceAngleSpinner = GetISpinner(GetDlgItem(hWnd, IDC_ANGLE_SPIN));
			mod->hwndFalloffDropList = GetDlgItem(hWnd, IDC_FALLOFF_COMBO);
			mod->hwndJointTypeDropList = GetDlgItem(hWnd, IDC_JOINTTYPE_COMBO);

			mod->hwndSelectedVertexCheckBox = GetDlgItem(hWnd, IDC_RELOADSELECTED_CHECK);
			mod->hwndEnabledCheckBox = GetDlgItem(hWnd, IDC_ENABLED_CHECK);

			mod->UpdateLocalUI();

			mod->rollupPropHWND = hWnd;
			break;
			}
		case WM_COMMAND:
			{
			switch (LOWORD(wParam)) 
				{

				case IDC_CLEARVERTICES:
					{
					macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.clearSelectedVertices"), 0, 0);
					mod->ClearSelectedVertices(FALSE);
					mod->NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE);
					GetCOREInterface()->RedrawViews(GetCOREInterface()->GetTime());

					break;
					}
				case IDC_REMOVEVERTICES:
					{
					macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.deleteSelectedVertices"), 0, 0);
					mod->ClearSelectedVertices(TRUE);
					mod->NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE);
					GetCOREInterface()->RedrawViews(GetCOREInterface()->GetTime());

					break;
					}


				case IDC_CREATEMORPH_BUTTON:
					{
					macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.createMorph"), 1, 0,mr_reftarg,mod->GetNode(mod->currentBone));
					mod->CreateMorph(mod->GetNode(mod->currentBone),TRUE);
					break;
					}
				case IDC_DELETEMORPH_BUTTON:
					{
					macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.removeMorph"), 2, 0,
								mr_reftarg,mod->GetNode(mod->currentBone),
								mr_string,mod->GetMorphName(mod->GetNode(mod->currentBone),mod->currentMorph)
								);
					mod->DeleteMorph(mod->currentBone, mod->currentMorph);
					mod->NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE);
					GetCOREInterface()->RedrawViews(GetCOREInterface()->GetTime());

					break;
					}

				case IDC_EDITMORPH:
					{
					if (mod->iEditButton->IsChecked())
						{
						macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.editMorph"), 1, 0,
												mr_bool,TRUE);
						mod->editMorph = TRUE;
						GetCOREInterface()->SetSubObjectLevel(1);
						mod->NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE);
						GetCOREInterface()->RedrawViews(GetCOREInterface()->GetTime());

						}
					else
						{
						macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.editMorph"), 1, 0,
												mr_bool,FALSE);

						mod->editMorph = FALSE;
						mod->NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE);
						GetCOREInterface()->RedrawViews(GetCOREInterface()->GetTime());
						}
					break;
					}
				case IDC_EXTERNALNODE:
					{
					thePickMode.mod = mod;
					thePickMode.pickExternalNode = TRUE;
					GetCOREInterface()->SetPickMode(&thePickMode);
					break;
					}
				case IDC_RELOAD_BUTTON:
					{
					macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.reloadTarget"), 2, 0,
								mr_reftarg,mod->GetNode(mod->currentBone),
								mr_string,mod->GetMorphName(mod->GetNode(mod->currentBone),mod->currentMorph)
								);
					mod->ReloadMorph(mod->currentBone, mod->currentMorph);
					mod->NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE);
					GetCOREInterface()->RedrawViews(GetCOREInterface()->GetTime());
					break;
					}
				case IDC_EDITGRAPH:
					{
					macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.editFalloffGraph"), 2, 0,
								mr_reftarg,mod->GetNode(mod->currentBone),
								mr_string,mod->GetMorphName(mod->GetNode(mod->currentBone),mod->currentMorph)
								);
					mod->BringUpGraph(mod->currentBone, mod->currentMorph);
					break;
					}
				case IDC_RESET_BUTTON:
					{
					macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.resetOrientation"), 2, 0,
								mr_reftarg,mod->GetNode(mod->currentBone),
								mr_string,mod->GetMorphName(mod->GetNode(mod->currentBone),mod->currentMorph)
								);
					mod->ResetMorph(mod->currentBone, mod->currentMorph);
					mod->NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE);
					GetCOREInterface()->RedrawViews(GetCOREInterface()->GetTime());

					break;
					}
				}

			break;
			}



		}
	return FALSE;
	}