rtoss - Blame information for rev 345

Subversion Repositories:
Rev:
Rev Author Line No. Line
280 roytam 1 // EncStonePage.cpp : 实现文件
2 //
3  
4 #include "stdafx.h"
5 #include "PokemonRomViewer.h"
6 #include "EncStonePage.h"
7  
8  
9 // CEncStonePage 对话框
10  
11 IMPLEMENT_DYNAMIC(CEncStonePage, CEncTabPage)
12 CEncStonePage::CEncStonePage()
13 {
14         m_uTemplateId = CEncStonePage::IDD;
15 }
16  
17 CEncStonePage::~CEncStonePage()
18 {
19 }
20  
21 void CEncStonePage::DoDataExchange(CDataExchange* pDX)
22 {
23         DWORD   dwIndex;
24  
25         CEncTabPage::DoDataExchange(pDX);
26  
27         for(dwIndex = 0; dwIndex < ENC_STONE_ENTRY_COUNT; ++dwIndex)
28         {
29                 DDX_Control(pDX, IDC_ENC_BREED_LIST0 + dwIndex, m_ctrlBrdList[dwIndex]);
30                 DDX_Control(pDX, IDC_LAND_IMAGE0 + dwIndex, m_ctrlImage[dwIndex]);
31                 DDX_Control(pDX, IDC_ENC_SET_BREED0 + dwIndex, m_ctrlSetBrd[dwIndex]);
32         }
33 }
34  
35  
36 BEGIN_MESSAGE_MAP(CEncStonePage, CEncTabPage)
37         ON_CONTROL_RANGE(CBN_SELCHANGE, IDC_ENC_BREED_LIST0, IDC_ENC_BREED_LIST11, OnCbnSelchangeEncBreedList)
38         ON_CONTROL_RANGE(CBN_SETFOCUS, IDC_ENC_BREED_LIST0, IDC_ENC_BREED_LIST11, OnSetFocus)
39  
40         ON_CONTROL_RANGE(BN_CLICKED, IDC_ENC_SET_BREED0, IDC_ENC_SET_BREED11, OnBnClickedEncSetBreed)
41         ON_CONTROL_RANGE(BN_SETFOCUS, IDC_ENC_SET_BREED0, IDC_ENC_SET_BREED11, OnSetFocus)
42  
43         ON_CONTROL_RANGE(BN_SETFOCUS, IDC_MIN_LEVEL0, IDC_MIN_LEVEL11, OnSetFocus)
44         ON_CONTROL_RANGE(BN_SETFOCUS, IDC_MAX_LEVEL0, IDC_MIN_LEVEL11, OnSetFocus)
45  
46         ON_CONTROL_RANGE(STN_DBLCLK, IDC_LAND_IMAGE0, IDC_LAND_IMAGE11, OnDblClickedIcon)
47 END_MESSAGE_MAP()
48  
49  
50 // CEncStonePage 消息处理程序
51 void CEncStonePage::OnConfigChanged(BOOL bRomChanged, BOOL bUILangChanged)
52 {
53         static BOOL bInitialized = FALSE;
54  
55         if(!rom.m_bOpened)
56                 return;
57  
58         if(bUILangChanged || !bInitialized)
59         {
60                 DWORD   dwIndex;
61                 WORD    wBreed, wCurBreed;
62                 CString szIndex, szText;
63                 LPCTSTR szFmt33[3] = { _T(""), _T("%-3hu:"), _T("%03hX:") };
64  
65                 ///////////////////////////////////////////////////////////////////
66                 // refresh breed lists
67                 for(dwIndex = 0; dwIndex < ENC_STONE_ENTRY_COUNT; ++dwIndex)
68                 {
69                         wCurBreed = m_ctrlBrdList[dwIndex].GetCurSel();
70                         m_ctrlBrdList[dwIndex].ResetContent();
71                         for(wBreed = 0; wBreed < BREED_COUNT; ++wBreed)
72                         {
73                                 szIndex.Format(szFmt33[cfg.dwCount], wBreed);
74                                 szText = szIndex + cfg.pBreedNameList[wBreed].rgszText[cfg.dwLang];
75                                 m_ctrlBrdList[dwIndex].AddString(szText);
76                         }
345 roytam 77                         for(wBreed = BREED_COUNT; wBreed < BREED_COUNT+g_dwExtraBreeds; ++wBreed)
78                         {
79                                 szIndex.Format(szFmt33[cfg.dwCount], wBreed);
80                                 szText = szIndex + _T("?");
81                                 m_ctrlBrdList[dwIndex].AddString(szText);
82                         }
83                         if(wCurBreed < BREED_COUNT+g_dwExtraBreeds)
280 roytam 84                                 m_ctrlBrdList[dwIndex].SetCurSel(wCurBreed);
85                 }
86  
87                 bInitialized = TRUE;
88         }
89  
90         if(bRomChanged)
91                 TransData(TRUE);
92 }
93  
94 void CEncStonePage::TransData(BOOL bToControls)
95 {
96         m_dwFocusedEntry = -1;
97  
98         GetCurrentEncLists();
99         if(m_pStoneList == NULL)
100                 return;
101  
102         DWORD   dwIndex;
103         EncEntry *pEntry = NULL;
104         CString szText;
105  
106         if(bToControls)
107         {
108                 SetDlgItemInt(IDC_ENC_PARAM, m_pStoneList->dwEncCode, FALSE);
109  
110                 for(dwIndex = 0; dwIndex < ENC_STONE_ENTRY_COUNT; ++dwIndex)
111                 {
112                         pEntry = &(m_pStoneList->rgEntry[dwIndex]);
113  
114                         m_ctrlBrdList[dwIndex].SetCurSel(pEntry->wBreed);
115                         SetBrdImage(dwIndex);
116  
117                         SetDlgItemInt(IDC_MIN_LEVEL0 + dwIndex, pEntry->bMinLevel, FALSE);
118                         SetDlgItemInt(IDC_MAX_LEVEL0 + dwIndex, pEntry->bMaxLevel, FALSE);
119                 }
120         }
121         else
122         {
123                 GetDlgItemText(IDC_ENC_PARAM, szText);
124                 m_pStoneList->dwEncCode = _tcstoul(szText, 0, 0);
125  
126                 for(dwIndex = 0; dwIndex < ENC_STONE_ENTRY_COUNT; ++dwIndex)
127                 {
128                         pEntry = &(m_pStoneList->rgEntry[dwIndex]);
129  
130                         GetDlgItemText(IDC_MIN_LEVEL0 + dwIndex, szText);
131                         pEntry->bMinLevel = (BYTE)(min(_tcstoul(szText, 0, 0), 0x64));
132  
133                         GetDlgItemText(IDC_MAX_LEVEL0 + dwIndex, szText);
134                         pEntry->bMaxLevel = (BYTE)(min(_tcstoul(szText, 0, 0), 0x64));
135  
136                         if(pEntry->bMaxLevel < pEntry->bMinLevel)
137                                 pEntry->bMaxLevel = pEntry->bMinLevel;
138                 }
139         }
140 }
141  
142 void CEncStonePage::SetBrdImage(DWORD dwIndex)
143 {
144         WORD            wBreed;
145  
146         if(m_pStoneList && dwIndex < ENC_STONE_ENTRY_COUNT)
147         {
148                 wBreed = m_ctrlBrdList[dwIndex].GetCurSel();
149                 if(wBreed == 0 || wBreed >= BREED_COUNT)
150                 {
151                         m_ctrlImage[dwIndex].ShowWindow(SW_HIDE);
152                 }
153                 else
154                 {
155                         m_ctrlImage[dwIndex].SetBitmap(rom.GetSmallIcon(wBreed));
156                         m_ctrlImage[dwIndex].ShowWindow(SW_SHOW);
157                 }
158         }
159 }
160  
161 void CEncStonePage::GetBreed(DWORD dwIndex)
162 {
163         WORD    wBreed;
164         EncEntry *pEntry = NULL;
165  
166         if(m_pStoneList && dwIndex < ENC_STONE_ENTRY_COUNT)
167         {
168                 pEntry = &(m_pStoneList->rgEntry[dwIndex]);
169                 wBreed = m_ctrlBrdList[dwIndex].GetCurSel();
345 roytam 170                 if(wBreed < BREED_COUNT+g_dwExtraBreeds && wBreed != pEntry->wBreed)
280 roytam 171                 {
172                         pEntry->wBreed = wBreed;
173                         SetBrdImage(dwIndex);
174                 }
175         }
176 }
177  
178 void CEncStonePage::SetBreed(DWORD dwIndex)
179 {
180         if(     m_pStoneList &&
181                 dwIndex < ENC_STONE_ENTRY_COUNT &&
345 roytam 182                 theApp.m_dlgBreed.m_wCurBreed < BREED_COUNT+g_dwExtraBreeds)
280 roytam 183         {
184                 m_pStoneList->rgEntry[dwIndex].wBreed = theApp.m_dlgBreed.m_wCurBreed;
185                 m_ctrlBrdList[dwIndex].SetCurSel(theApp.m_dlgBreed.m_wCurBreed);
186         }
187 }
188  
189 void CEncStonePage::OnCbnSelchangeEncBreedList(UINT uID)
190 {
191         GetBreed(uID - IDC_ENC_BREED_LIST0);
192 }
193  
194 void CEncStonePage::OnBnClickedEncSetBreed(UINT uID)
195 {
196         SetBreed(uID - IDC_ENC_SET_BREED0);
197         SetBrdImage(uID - IDC_ENC_SET_BREED0);
198 }
199  
200 void CEncStonePage::OnSetFocus(UINT uID)
201 {
202         DWORD   dwEntryIndex = -1;
203  
204         if(uID >= IDC_ENC_BREED_LIST0 && uID <= IDC_ENC_BREED_LIST11)
205         {
206                 dwEntryIndex = uID - IDC_ENC_BREED_LIST0;
207         }
208         else if(uID >= IDC_ENC_SET_BREED0 && uID <= IDC_ENC_SET_BREED11)
209         {
210                 dwEntryIndex = uID - IDC_ENC_SET_BREED0;
211         }
212         else if(uID >= IDC_MIN_LEVEL0 && uID <= IDC_MIN_LEVEL11)
213         {
214                 dwEntryIndex = uID - IDC_MIN_LEVEL0;
215         }
216         else if(uID >= IDC_MAX_LEVEL0 && uID <= IDC_MAX_LEVEL11)
217         {
218                 dwEntryIndex = uID - IDC_MAX_LEVEL0;
219         }
220  
221         if(dwEntryIndex >= ENC_STONE_ENTRY_COUNT)
222                 m_dwFocusedEntry = -1;
223         else
224                 m_dwFocusedEntry = dwEntryIndex;
225 }
226  
227 void CEncStonePage::SetFocusedEntry(DWORD dwEncEntryIndex)
228 {
229         if(dwEncEntryIndex < ENC_STONE_ENTRY_COUNT)
230                 m_ctrlBrdList[dwEncEntryIndex].SetFocus();
231 }
232  
233 void CEncStonePage::OnDblClickedIcon(UINT uID)
234 {
235         DWORD   dwEntryIndex = uID - IDC_LAND_IMAGE0;
236         WORD    wBreed;
237  
238         if(dwEntryIndex < ENC_STONE_ENTRY_COUNT)
239         {
240                 wBreed = m_pStoneList->rgEntry[dwEntryIndex].wBreed;
241                 theApp.m_dlgBreed.SetCurPm(wBreed);
242         }
243 }