| 1 | |
|---|
| 2 | |
|---|
| 3 | |
|---|
| 4 | #include "lc_global.h" |
|---|
| 5 | #include "LeoCAD.h" |
|---|
| 6 | #include "FigDlg.h" |
|---|
| 7 | #include "minifig.h" |
|---|
| 8 | |
|---|
| 9 | #ifdef _DEBUG |
|---|
| 10 | #define new DEBUG_NEW |
|---|
| 11 | #undef THIS_FILE |
|---|
| 12 | static char THIS_FILE[] = __FILE__; |
|---|
| 13 | #endif |
|---|
| 14 | |
|---|
| 15 | |
|---|
| 16 | |
|---|
| 17 | |
|---|
| 18 | CMinifigDlg::CMinifigDlg(void* param, CWnd* pParent ) |
|---|
| 19 | : CDialog(CMinifigDlg::IDD, pParent) |
|---|
| 20 | { |
|---|
| 21 | m_pMinifig = (MinifigWizard*)param; |
|---|
| 22 | m_pMinifigWnd = NULL; |
|---|
| 23 | |
|---|
| 24 | |
|---|
| 25 | |
|---|
| 26 | } |
|---|
| 27 | |
|---|
| 28 | |
|---|
| 29 | void CMinifigDlg::DoDataExchange(CDataExchange* pDX) |
|---|
| 30 | { |
|---|
| 31 | CDialog::DoDataExchange(pDX); |
|---|
| 32 | |
|---|
| 33 | DDX_Control(pDX, IDC_MF_HANDLCOLOR, m_clrHandLeft); |
|---|
| 34 | DDX_Control(pDX, IDC_MF_TORSOCOLOR, m_clrTorso); |
|---|
| 35 | DDX_Control(pDX, IDC_MF_TOOLLCOLOR, m_clrToolLeft); |
|---|
| 36 | DDX_Control(pDX, IDC_MF_SHOELCOLOR, m_clrShoeLeft); |
|---|
| 37 | DDX_Control(pDX, IDC_MF_LEGLCOLOR, m_clrLegLeft); |
|---|
| 38 | DDX_Control(pDX, IDC_MF_HEADCOLOR, m_clrHead); |
|---|
| 39 | DDX_Control(pDX, IDC_MF_ARMLCOLOR, m_clrArmLeft); |
|---|
| 40 | DDX_Control(pDX, IDC_MF_TOOLRCOLOR, m_clrToolRight); |
|---|
| 41 | DDX_Control(pDX, IDC_MF_SHOERCOLOR, m_clrShoeRight); |
|---|
| 42 | DDX_Control(pDX, IDC_MF_LEGRCOLOR, m_clrLegRight); |
|---|
| 43 | DDX_Control(pDX, IDC_MF_HIPSCOLOR, m_clrHips); |
|---|
| 44 | DDX_Control(pDX, IDC_MF_HANDRCOLOR, m_clrHandRight); |
|---|
| 45 | DDX_Control(pDX, IDC_MF_ARMRCOLOR, m_clrArmRight); |
|---|
| 46 | DDX_Control(pDX, IDC_MF_NECKCOLOR, m_clrNeck); |
|---|
| 47 | DDX_Control(pDX, IDC_MF_HATCOLOR, m_clrHat); |
|---|
| 48 | |
|---|
| 49 | } |
|---|
| 50 | |
|---|
| 51 | |
|---|
| 52 | BEGIN_MESSAGE_MAP(CMinifigDlg, CDialog) |
|---|
| 53 | |
|---|
| 54 | |
|---|
| 55 | ON_MESSAGE(CPN_SELENDOK, OnColorSelEndOK) |
|---|
| 56 | ON_CONTROL_RANGE(CBN_SELENDOK, IDC_MF_HAT, IDC_MF_SHOER, OnPieceSelEndOK) |
|---|
| 57 | ON_CONTROL_RANGE(EN_CHANGE, IDC_MF_HATANGLE, IDC_MF_SHOERANGLE, OnChangeAngle) |
|---|
| 58 | END_MESSAGE_MAP() |
|---|
| 59 | |
|---|
| 60 | |
|---|
| 61 | |
|---|
| 62 | |
|---|
| 63 | BOOL CMinifigDlg::OnInitDialog() |
|---|
| 64 | { |
|---|
| 65 | CDialog::OnInitDialog(); |
|---|
| 66 | |
|---|
| 67 | ModifyStyle (0, WS_CLIPCHILDREN, 0); |
|---|
| 68 | |
|---|
| 69 | RECT r; |
|---|
| 70 | |
|---|
| 71 | ::GetWindowRect (::GetDlgItem(m_hWnd, IDC_PREVIEWSTATIC), &r); |
|---|
| 72 | ScreenToClient (&r); |
|---|
| 73 | |
|---|
| 74 | HINSTANCE hInst = AfxGetInstanceHandle(); |
|---|
| 75 | WNDCLASS wndcls; |
|---|
| 76 | LRESULT CALLBACK GLWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); |
|---|
| 77 | |
|---|
| 78 | #define OPENGL_CLASSNAME _T("LeoCADOpenGLClass") |
|---|
| 79 | #define MINIFIG_CLASSNAME _T("LeoCADMinifigOpenGLClass") |
|---|
| 80 | |
|---|
| 81 | |
|---|
| 82 | if(!(GetClassInfo (hInst, MINIFIG_CLASSNAME, &wndcls))) |
|---|
| 83 | { |
|---|
| 84 | if (GetClassInfo (hInst, OPENGL_CLASSNAME, &wndcls)) |
|---|
| 85 | { |
|---|
| 86 | |
|---|
| 87 | wndcls.lpszClassName = MINIFIG_CLASSNAME; |
|---|
| 88 | wndcls.lpfnWndProc = GLWindowProc; |
|---|
| 89 | |
|---|
| 90 | |
|---|
| 91 | if (!AfxRegisterClass (&wndcls)) |
|---|
| 92 | AfxThrowResourceException(); |
|---|
| 93 | } |
|---|
| 94 | else |
|---|
| 95 | AfxThrowResourceException(); |
|---|
| 96 | } |
|---|
| 97 | |
|---|
| 98 | m_pMinifigWnd = new CWnd; |
|---|
| 99 | m_pMinifigWnd->CreateEx (0, MINIFIG_CLASSNAME, "LeoCAD", |
|---|
| 100 | WS_BORDER | WS_CHILD | WS_VISIBLE, r, this, 0, m_pMinifig); |
|---|
| 101 | |
|---|
| 102 | int i; |
|---|
| 103 | |
|---|
| 104 | for (i = 0; i < LC_MFW_NUMITEMS; i++) |
|---|
| 105 | ((CColorPicker*)GetDlgItem (IDC_MF_HATCOLOR+i))->SetColorIndex (m_pMinifig->m_Colors[i]); |
|---|
| 106 | |
|---|
| 107 | for (i = 0; i < LC_MFW_NUMITEMS; i++) |
|---|
| 108 | { |
|---|
| 109 | CComboBox* pCombo = (CComboBox*)GetDlgItem(i+IDC_MF_HAT); |
|---|
| 110 | LC_MFW_PIECEINFO** items; |
|---|
| 111 | int j, count; |
|---|
| 112 | |
|---|
| 113 | m_pMinifig->GetItems(i, &items, &count); |
|---|
| 114 | |
|---|
| 115 | for (j = 0; j < count; j++) |
|---|
| 116 | { |
|---|
| 117 | if (items[j]) |
|---|
| 118 | { |
|---|
| 119 | int idx = pCombo->AddString(items[j]->description); |
|---|
| 120 | pCombo->SetItemDataPtr(idx, items[j]); |
|---|
| 121 | } |
|---|
| 122 | else |
|---|
| 123 | { |
|---|
| 124 | int idx = pCombo->AddString("None"); |
|---|
| 125 | pCombo->SetItemDataPtr(idx, NULL); |
|---|
| 126 | } |
|---|
| 127 | } |
|---|
| 128 | |
|---|
| 129 | free(items); |
|---|
| 130 | } |
|---|
| 131 | |
|---|
| 132 | char *names[LC_MFW_NUMITEMS]; |
|---|
| 133 | m_pMinifig->GetSelections (names); |
|---|
| 134 | |
|---|
| 135 | for (i = 0; i < LC_MFW_NUMITEMS; i++) |
|---|
| 136 | { |
|---|
| 137 | CComboBox* pCombo = (CComboBox*)GetDlgItem(i+IDC_MF_HAT); |
|---|
| 138 | pCombo->SetCurSel (pCombo->FindString (-1, names[i])); |
|---|
| 139 | } |
|---|
| 140 | |
|---|
| 141 | for (i = IDC_MF_HATSPIN; i <= IDC_MF_SHOERSPIN; i++) |
|---|
| 142 | ((CSpinButtonCtrl*)GetDlgItem(i))->SetRange(-360, 360); |
|---|
| 143 | |
|---|
| 144 | return TRUE; |
|---|
| 145 | |
|---|
| 146 | } |
|---|
| 147 | |
|---|
| 148 | BOOL CMinifigDlg::DestroyWindow() |
|---|
| 149 | { |
|---|
| 150 | if (m_pMinifigWnd) |
|---|
| 151 | { |
|---|
| 152 | m_pMinifigWnd->DestroyWindow(); |
|---|
| 153 | delete m_pMinifigWnd; |
|---|
| 154 | m_pMinifigWnd = NULL; |
|---|
| 155 | } |
|---|
| 156 | |
|---|
| 157 | return CDialog::DestroyWindow(); |
|---|
| 158 | } |
|---|
| 159 | |
|---|
| 160 | LONG CMinifigDlg::OnColorSelEndOK(UINT lParam, LONG wParam) |
|---|
| 161 | { |
|---|
| 162 | m_pMinifig->ChangeColor (wParam-IDC_MF_HATCOLOR, lParam); |
|---|
| 163 | m_pMinifig->Redraw (); |
|---|
| 164 | |
|---|
| 165 | return TRUE; |
|---|
| 166 | } |
|---|
| 167 | |
|---|
| 168 | void CMinifigDlg::OnPieceSelEndOK(UINT nID) |
|---|
| 169 | { |
|---|
| 170 | CComboBox* combo = (CComboBox*)GetDlgItem(nID); |
|---|
| 171 | LC_MFW_PIECEINFO* info = (LC_MFW_PIECEINFO*)combo->GetItemDataPtr(combo->GetCurSel()); |
|---|
| 172 | |
|---|
| 173 | m_pMinifig->ChangePiece(nID-IDC_MF_HAT, info); |
|---|
| 174 | m_pMinifig->Redraw(); |
|---|
| 175 | } |
|---|
| 176 | |
|---|
| 177 | void CMinifigDlg::OnChangeAngle(UINT nID) |
|---|
| 178 | { |
|---|
| 179 | char tmp[65]; |
|---|
| 180 | GetDlgItem(nID)->GetWindowText (tmp, 65); |
|---|
| 181 | if (m_pMinifigWnd) |
|---|
| 182 | { |
|---|
| 183 | int index[] = { LC_MFW_HAT, LC_MFW_HEAD, LC_MFW_NECK, |
|---|
| 184 | LC_MFW_LEFT_ARM, LC_MFW_RIGHT_ARM, LC_MFW_LEFT_HAND, |
|---|
| 185 | LC_MFW_RIGHT_HAND, LC_MFW_LEFT_TOOL, LC_MFW_RIGHT_TOOL, |
|---|
| 186 | LC_MFW_LEFT_LEG, LC_MFW_RIGHT_LEG, LC_MFW_LEFT_SHOE, LC_MFW_RIGHT_SHOE }; |
|---|
| 187 | m_pMinifig->ChangeAngle (index[nID-IDC_MF_HATANGLE], (float)strtod (tmp, NULL)); |
|---|
| 188 | m_pMinifig->Redraw (); |
|---|
| 189 | } |
|---|
| 190 | } |
|---|