root / trunk / win / Figdlg.cpp

Revision 654, 5.0 kB (checked in by leo, 2 years ago)

Added precompiled headers to all source files.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1// FigDlg.cpp : implementation file
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
12static char THIS_FILE[] = __FILE__;
13#endif
14
15/////////////////////////////////////////////////////////////////////////////
16// CMinifigDlg dialog
17
18CMinifigDlg::CMinifigDlg(void* param, CWnd* pParent /*=NULL*/)
19    : CDialog(CMinifigDlg::IDD, pParent)
20{
21  m_pMinifig = (MinifigWizard*)param;
22    m_pMinifigWnd = NULL;
23
24    //{{AFX_DATA_INIT(CMinifigDlg)
25    //}}AFX_DATA_INIT
26}
27
28
29void CMinifigDlg::DoDataExchange(CDataExchange* pDX)
30{
31    CDialog::DoDataExchange(pDX);
32    //{{AFX_DATA_MAP(CMinifigDlg)
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    //}}AFX_DATA_MAP
49}
50
51
52BEGIN_MESSAGE_MAP(CMinifigDlg, CDialog)
53    //{{AFX_MSG_MAP(CMinifigDlg)
54    //}}AFX_MSG_MAP
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)
58END_MESSAGE_MAP()
59
60/////////////////////////////////////////////////////////////////////////////
61// CMinifigDlg message handlers
62
63BOOL CMinifigDlg::OnInitDialog()
64{
65    CDialog::OnInitDialog();
66
67    ModifyStyle (0, WS_CLIPCHILDREN, 0);
68
69    RECT r;
70    //RECT r = { 200, 15, 400, 320 };
71    ::GetWindowRect (::GetDlgItem(m_hWnd, IDC_PREVIEWSTATIC), &r);
72    ScreenToClient (&r);
73
74    HINSTANCE hInst = AfxGetInstanceHandle();
75    WNDCLASS wndcls;
76LRESULT 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  // check if our class is registered
82    if(!(GetClassInfo (hInst, MINIFIG_CLASSNAME, &wndcls)))
83    {
84    if (GetClassInfo (hInst, OPENGL_CLASSNAME, &wndcls))
85      {
86      // set our class name
87        wndcls.lpszClassName = MINIFIG_CLASSNAME;
88      wndcls.lpfnWndProc = GLWindowProc;
89
90        // register class
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;  // return TRUE unless you set the focus to a control
145                  // EXCEPTION: OCX Property Pages should return FALSE
146}
147
148BOOL 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
160LONG 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
168void 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
177void 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}
Note: See TracBrowser for help on using the browser.