Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/CDiaDialog.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9 - (show annotations) (download) (as text)
Tue Aug 28 14:58:05 2012 UTC (11 years, 8 months ago) by okadu
File MIME type: text/x-c++src
File size: 17425 byte(s)
[okadu] Version 2.14
ニュートラル画面分割
ダイヤ停車位置の数値設定
レイアウト読み込みバグ一部修正

1 #include "stdafx.h"
2 #include "CDiaDialog.h"
3 #include "CRailConnector.h"
4 #include "CStation.h"
5 #include "CTrainGroup.h"
6 #include "CSaveFile.h"
7 #include "CSkinPlugin.h"
8
9 // 内部グローバル
10 char *g_DiaDefaultString[2] = {lang(IndividualSetting), lang(Default)};
11
12 /*
13 * コンストラクタ
14 */
15 CDiaDialogBase::CDiaDialogBase(){
16 m_GroupMenu = NULL;
17 }
18
19 /*
20 * デストラクタ
21 */
22 CDiaDialogBase::~CDiaDialogBase(){
23 DELETE_V(m_GroupMenu);
24 DELETE_V(m_RoutineMenu);
25 }
26
27 /*
28 * 初期化
29 */
30 void CDiaDialogBase::Init(
31 int x, int y, // 位置
32 int w, int h, // サイズ
33 char *title, // タイトル
34 CInterface *p, // 親
35 char *dialabel, // グループラベル
36 int exth // 拡張領域高さ
37 ){
38 m_ExtHeight = exth;
39 m_DiaInst = NULL;
40 char *groupcol[3] = {lang(Name), lang(CarNum), lang(Setting)};
41 CWindowCtrl::Init(x, y, w, h, title, p, true);
42 SetResize(TILE_UNIT*14, m_ExtHeight+TILE_UNIT*13, g_DispWidth, g_DispHeight, this);
43 m_NameLabel.Init(TILE_HALF, TILE_UNIT+TILE_QUAD,
44 TILE_UNIT*2, TILE_UNIT, lang(Name), this, 0, 1);
45 m_NameEdit.Init(TILE_HALF+TILE_UNIT*2, TILE_UNIT+TILE_QUAD, 1, 1, "", this, 64);
46 m_GroupListView.Init(TILE_HALF, TILE_UNIT*2+TILE_QUAD*2, w-TILE_UNIT, 1,
47 this, 3, groupcol, DRAG_NONE, LISTVIEW_RENAMABLE, this, CMD_GROUP);
48 m_GroupMenu = new CPopMenu("", NULL);
49 new CPopMenu(lang(ChangeName), m_GroupMenu);
50 m_UseDefault.Init(0, 0, 1, 1, lang(UseDefaultSetting), this);
51 m_DefaultLabel.Init(0, 0, 1, 1, lang(DefaultSetting), this, 0, 1);
52 char *routinecol[1] = {lang(Routine)};
53 m_RoutineListView.Init(0, 0, w-TILE_UNIT, 1,
54 this, 1, routinecol, DRAG_NONE, 0, this, CMD_ROUTINE);
55 m_RoutineAdd.Init(0, 0, 1, 1, lang(Add), this);
56 m_RoutineDelete.Init(0, 0, 1, 1, lang(Delete), this);
57 m_RoutinePrev.Init(0, 0, 1, 1, lang(Rew), this);
58 m_RoutineNext.Init(0, 0, 1, 1, lang(Fow), this);
59 m_DiaGroup.Init(0, 0, 1, 1, dialabel, this);
60 class CRoutineAdder: public CMenuCommand{
61 private:
62 CDiaDialogBase *m_Owner; // ダイアログ
63 public:
64 CRoutineAdder(CDiaDialogBase *o){ m_Owner = o; }
65 void Exec(){ m_Owner->AddRoutine(); }
66 };
67 class CRoutineDeleter: public CMenuCommand{
68 private:
69 CDiaDialogBase *m_Owner; // ダイアログ
70 public:
71 CRoutineDeleter(CDiaDialogBase *o){ m_Owner = o; }
72 void Exec(){ m_Owner->DeleteRoutine(); }
73 };
74 class CRoutineRotater: public CMenuCommand{
75 private:
76 CDiaDialogBase *m_Owner; // ダイアログ
77 bool m_Prev; // 逆回転
78 public:
79 CRoutineRotater(CDiaDialogBase *o, bool p){ m_Owner = o; m_Prev = p; }
80 void Exec(){ m_Owner->RotateRoutine(m_Prev); }
81 };
82 m_RoutineMenu = new CPopMenu("", NULL);
83 (new CPopMenu(lang(AddRoutine), m_RoutineMenu))
84 ->SetCommand(new CRoutineAdder(this));
85 (new CPopMenu(lang(DeleteRoutine), m_RoutineMenu))
86 ->SetCommand(new CRoutineDeleter(this));
87 (new CPopMenu(lang(RewindOne), m_RoutineMenu))
88 ->SetCommand(new CRoutineRotater(this, true));
89 (new CPopMenu(lang(ForwardOne), m_RoutineMenu))
90 ->SetCommand(new CRoutineRotater(this, false));
91 }
92
93 /*
94 * 初期化 2
95 */
96 void CDiaDialogBase::InitFoot(){
97 m_ApplyButton.Init(0, 0, 1, 1, lang(Close), this);
98 WindowResized(m_Width, m_Height, this);
99 }
100
101 /*
102 * ウィンドウリサイズ
103 */
104 void CDiaDialogBase::WindowResized(
105 int w, int h, // 新規サイズ
106 CWindowCtrl *wnd // ウィドウコントロール
107 ){
108 int varh = h-m_ExtHeight-TILE_UNIT*5-TILE_QUAD*5;
109 int lvh1 = varh/2, lvh2 = varh-lvh1;
110 int y = TILE_UNIT*2+TILE_QUAD*2, tw = w-TILE_UNIT;
111 m_NameEdit.SetSize(w-TILE_UNIT*3, TILE_UNIT);
112 m_GroupListView.SetSize(tw, lvh1);
113 m_UseDefault.SetPos(TILE_HALF, y += lvh1+TILE_QUAD);
114 m_UseDefault.SetSize(tw, TILE_UNIT);
115 m_DefaultLabel.SetPos(TILE_HALF, y);
116 m_DefaultLabel.SetSize(tw, TILE_UNIT);
117 m_RoutineListView.SetPos(TILE_HALF, y += TILE_UNIT+TILE_QUAD);
118 m_RoutineListView.SetSize(tw, lvh2-TILE_UNIT);
119 m_RoutineAdd.SetPos(TILE_HALF, y += lvh2-TILE_UNIT);
120 m_RoutineAdd.SetSize(tw/4, TILE_UNIT);
121 m_RoutineDelete.SetPos(TILE_HALF+tw/4, y);
122 m_RoutineDelete.SetSize(tw*2/4-tw/4, TILE_UNIT);
123 m_RoutinePrev.SetPos(TILE_HALF+tw*2/4, y);
124 m_RoutinePrev.SetSize(tw*3/4-tw*2/4, TILE_UNIT);
125 m_RoutineNext.SetPos(TILE_HALF+tw*3/4, y);
126 m_RoutineNext.SetSize(tw-tw*3/4, TILE_UNIT);
127 m_DiaGroup.SetPos(TILE_HALF, y += TILE_UNIT+TILE_QUAD);
128 m_DiaGroup.SetSize(tw, m_ExtHeight);
129 m_ApplyButton.SetPos(w-TILE_UNIT*4-TILE_HALF, y += m_ExtHeight+TILE_QUAD);
130 m_ApplyButton.SetSize(TILE_UNIT*4, TILE_UNIT);
131 ResizeDiaDialogBase(tw, m_ExtHeight);
132 }
133
134 /*
135 * メニュー発行
136 */
137 CPopMenu *CDiaDialogBase::Dispatch(
138 CMDTYPE type, // コマンドタイプ
139 DWORD data // データ
140 ){
141 switch(type){
142 case CMD_GROUP: {
143 if(data){
144 CTrainGroup *group = (CTrainGroup *)((CListElement *)data)->GetData();
145 if(group){
146 m_GroupMenu->GetMenu(0)->Enable(true);
147 m_GroupMenu->GetMenu(0)->SetCommand(new CGroupRenamer(group));
148 }else{
149 m_GroupMenu->GetMenu(0)->Enable(false);
150 }
151 }else{
152 m_GroupMenu->GetMenu(0)->Enable(false);
153 }
154 return m_GroupMenu; }
155 case CMD_ROUTINE: {
156 return m_RoutineMenu; }
157 }
158 return NULL;
159 }
160
161 /*
162 * ダイアログ有効化
163 */
164 void CDiaDialogBase::Enter(
165 CDiaInstBase *dinst // ダイヤインスト
166 ){
167 m_DiaInst = dinst;
168 m_DiaElement = NULL;
169 m_NameEdit.SetText((char *)m_DiaInst->m_Name.c_str());
170 g_SaveFile->ListGroupDia(&m_GroupListView, m_DiaInst);
171 CListElement *le = m_GroupListView.InsertItem(0, lang(Default));
172 le->SetString(1, "-");
173 le->SetString(2, "-");
174 if(g_TrainGroup){
175 int i = g_TrainGroup->GetSerial()+1;
176 m_GroupListView.SetSelectionMark(i, 0);
177 m_GroupListView.EnsureVisible(i);
178 }else{
179 m_GroupListView.SetSelectionMark(0, 0);
180 m_GroupListView.EnsureVisible(0);
181 }
182 SetTrainGroup(g_TrainGroup);
183 m_GroupListView.GiveFocus(true);
184 Show(true);
185 }
186
187 /*
188 * 編成をセット
189 */
190 void CDiaDialogBase::SetTrainGroup(
191 CTrainGroup *group // 編成
192 ){
193 g_TrainGroup = group;
194 m_DiaList = NULL;
195 if(g_TrainGroup){
196 m_UseDefault.Show(true);
197 m_DefaultLabel.Show(false);
198 if(m_DiaInst->IsInside(g_TrainGroup)){
199 m_DiaList = m_DiaInst->Search(g_TrainGroup);
200 m_DiaList->ListElement(&m_RoutineListView, -1);
201 m_UseDefault.SetCheck(m_DiaList->m_UseDefault);
202 }else{
203 m_RoutineListView.DeleteAllItems();
204 m_UseDefault.SetCheck(true);
205 }
206 }else{
207 m_UseDefault.SetCheck(false);
208 m_UseDefault.Show(false);
209 m_DefaultLabel.Show(true);
210 m_DiaList = m_DiaInst->Search(NULL);
211 m_DiaList->ListElement(&m_RoutineListView, 0);
212 }
213 m_DiaElement = NULL;
214 }
215
216 /*
217 * ダイヤ要素をセット
218 */
219 void CDiaDialogBase::SetDiaElementBase(
220 CDiaElementBase *el // 要素
221 ){
222 m_DiaElement = el;
223 m_DiaGroup.Show(!!m_DiaElement);
224 SetElementValue(m_DiaElement);
225 }
226
227 /*
228 * 入力チェック
229 */
230 void CDiaDialogBase::ScanInputDia(){
231 if(!m_Visible){
232 m_ApplyButton.SetPush(false);
233 return;
234 }
235 if(m_ApplyButton.IsPushed()){
236 m_CloseButton->SetPush(true);
237 return;
238 }
239 m_DiaInst->m_Name = m_NameEdit.GetRealtimeText();
240 if(m_DiaList){
241 bool chk = !!m_UseDefault.GetCheck();
242 if(m_DiaList->m_UseDefault!=chk){
243 m_DiaList->m_UseDefault = chk;
244 if(chk){
245 m_RoutineListView.SetSelectionMark(-1, 0);
246 }else{
247 m_RoutineListView.SetSelectionMark(0, 0);
248 m_RoutineListView.EnsureVisible(0);
249 }
250 if(g_TrainGroup) g_TrainGroup->GetListElement()
251 ->SetString(2, g_DiaDefaultString[chk]);
252 }
253 }else if(!m_UseDefault.GetCheck()){
254 m_DiaList = m_DiaInst->Search(g_TrainGroup);
255 m_DiaList->ListElement(&m_RoutineListView, 0);
256 }
257 if(m_RoutineAdd.IsPushed()) AddRoutine();
258 else if(m_RoutineDelete.IsPushed()) DeleteRoutine();
259 else if(m_RoutinePrev.IsPushed()) RotateRoutine(true);
260 else if(m_RoutineNext.IsPushed()) RotateRoutine(false);
261 CListElement *gle = m_GroupListView.GetFocusItem();
262 if(gle && gle->IsSelected()){
263 CTrainGroup *tg = (CTrainGroup *)gle->GetData();
264 if(tg!=g_TrainGroup) SetTrainGroup(tg);
265 }else{
266 m_GroupListView.SetSelectionMark(0, 0);
267 m_GroupListView.EnsureVisible(0);
268 SetTrainGroup(NULL);
269 }
270 CListElement *rle = m_RoutineListView.GetFocusItem();
271 if(rle && rle->IsSelected()){
272 CDiaElementBase *de = (CDiaElementBase *)rle->GetData();
273 if(de!=m_DiaElement) SetDiaElementBase(de);
274 }else{
275 SetDiaElementBase(NULL);
276 }
277 ScanInputDiaDialogBase();
278 }
279
280 /*
281 * ルーチン追加
282 */
283 void CDiaDialogBase::AddRoutine(){
284 if(!m_DiaList) m_DiaList = m_DiaInst->Search(g_TrainGroup);
285 int ret = m_DiaList->AddElement(m_DiaElement);
286 m_DiaList->ListElement(&m_RoutineListView, ret);
287 if(m_DiaList->Size()==1) m_UseDefault.SetCheck(0);
288 }
289
290 /*
291 * ルーチン削除
292 */
293 void CDiaDialogBase::DeleteRoutine(){
294 if(!m_DiaList || !m_DiaElement) return;
295 int ret = m_DiaList->DeleteElement(m_DiaElement);
296 if(m_DiaList->Size()){
297 m_DiaList->ListElement(&m_RoutineListView, ret);
298 }else if(g_TrainGroup){
299 m_DiaInst->m_DiaMap.erase(g_TrainGroup);
300 g_TrainGroup->GetListElement()->SetString(2, g_DiaDefaultString[1]);
301 SetTrainGroup(g_TrainGroup);
302 }else{
303 AddRoutine();
304 }
305 }
306
307 /*
308 * ルーチン回転
309 */
310 void CDiaDialogBase::RotateRoutine(
311 bool prev // 逆回転
312 ){
313 if(!m_DiaList) return;
314 m_DiaList->RotateElement(prev);
315 int i = m_RoutineListView.GetSelectionMark()+(prev ? 1 : -1);
316 if(i<0) i = m_DiaList->Size()-1;
317 else if(i>=m_DiaList->Size()) i = 0;
318 m_DiaList->ListElement(&m_RoutineListView, i);
319 }
320
321 ////////////////////////////////////////////////////////////////////////////////
322 ////////////////////////////////////////////////////////////////////////////////
323
324 /*
325 * 初期化
326 */
327 void CPointDialog::Init(
328 CInterface *p // 親
329 ){
330 int ww = TILE_UNIT*16, wh = TILE_UNIT*20;
331 CDiaDialogBase::Init(TILE_UNIT, g_DispHeight-wh-TILE_UNIT,
332 ww, wh, lang(PointSetting), p, lang(Action), TILE_UNIT*3);
333 char *plabel[3] = {lang(Rnd), lang(Left), lang(Right)};
334 int i;
335 for(i = 0; i<3; i++) m_Point[i].Init(0, 0, 1, 1,
336 plabel[i], &m_DiaGroup, i ? &m_Point[i-1] : NULL);
337 InitFoot();
338 }
339
340 /*
341 * ウィンドウリサイズ
342 */
343 void CPointDialog::ResizeDiaDialogBase(
344 int w, int h // 新規サイズ
345 ){
346 int i, tw = w-TILE_UNIT*2+TILE_QUAD;
347 for(i = 0; i<3; i++){
348 m_Point[i].SetPos(TILE_UNIT+tw*i/3, TILE_UNIT+TILE_QUAD);
349 m_Point[i].SetSize(tw*(i+1)/3-tw*i/3-TILE_QUAD, TILE_UNIT);
350 }
351 }
352
353 /*
354 * 入力チェック
355 */
356 void CPointDialog::ScanInputDiaDialogBase(){
357 CPointElement *pe = GetElement();
358 if(!pe) return;
359 int ps = m_Point->GetNumber();
360 if(pe->m_PointSwitch!=ps){
361 pe->m_PointSwitch = ps;
362 pe->UpdateCaption();
363 }
364 }
365
366 /*
367 * 要素値をセット
368 */
369 void CPointDialog::SetElementValue(
370 CDiaElementBase *el // ダイヤ要素
371 ){
372 if(el){
373 CPointElement *pe = (CPointElement *)el;
374 m_Point[pe->m_PointSwitch].SetCheck();
375 }else{
376 m_Point[0].SetCheck();
377 }
378 }
379
380 ////////////////////////////////////////////////////////////////////////////////
381 ////////////////////////////////////////////////////////////////////////////////
382
383 /*
384 * 初期化
385 */
386 void CDiaDialog::Init(
387 CInterface *p // 親
388 ){
389 int ww = TILE_UNIT*16, wh = TILE_UNIT*25;
390 CDiaDialogBase::Init(TILE_UNIT, g_DispHeight-wh-TILE_UNIT,
391 ww, wh, lang(DiaSetting), p, lang(Action), TILE_UNIT*8);
392 char *alabel[3] = {lang(Stop), lang(Return), lang(Pass)};
393 char *tlabel[2] = {lang(StopDuration), lang(DeptTime)};
394 int i;
395 for(i = 0; i<3; i++) m_Action[i].Init(0, 0, 1, 1,
396 alabel[i], &m_DiaGroup, i ? &m_Action[i-1] : NULL);
397 for(i = 0; i<2; i++) m_TimeType[i].Init(0, 0, 1, 1,
398 tlabel[i], &m_DiaGroup, i ? &m_TimeType[i-1] : NULL);
399 m_HourEdit.Init(0, 0, TILE_UNIT*2, TILE_UNIT, "", &m_DiaGroup, 6);
400 m_HourLabel.Init(0, 0, TILE_UNIT, TILE_UNIT, lang(Hr), &m_DiaGroup, 0, 1);
401 m_MinuteEdit.Init(0, 0, TILE_UNIT*2, TILE_UNIT, "", &m_DiaGroup, 2);
402 m_MinuteLabel.Init(0, 0, TILE_UNIT, TILE_UNIT, lang(Min), &m_DiaGroup, 0, 1);
403 m_SecondEdit.Init(0, 0, TILE_UNIT*2, TILE_UNIT, "", &m_DiaGroup, 2);
404 m_SecondLabel.Init(0, 0, TILE_UNIT, TILE_UNIT, lang(Sec), &m_DiaGroup, 0, 1);
405 // m_JointCheck.Init(0, 0, 1, 1, "他編成との連結を許可", &m_DiaGroup);
406 m_StopPosEdit.Init(0, 0, TILE_UNIT*8-TILE_HALF, TILE_UNIT, "", &m_DiaGroup, 9);
407 m_StopPosButton.Init(0, 0, TILE_UNIT*3, TILE_UNIT, lang(Apply), &m_DiaGroup);
408 InitFoot();
409 m_OffsetSlide = 0;
410 }
411
412 /*
413 * ウィンドウリサイズ
414 */
415 void CDiaDialog::ResizeDiaDialogBase(
416 int w, int h // 新規サイズ
417 ){
418 int i, tw = w-TILE_UNIT*2+TILE_QUAD;
419 for(i = 0; i<3; i++){
420 m_Action[i].SetPos(TILE_UNIT+tw*i/3, TILE_UNIT+TILE_QUAD);
421 m_Action[i].SetSize(tw*(i+1)/3-tw*i/3-TILE_QUAD, TILE_UNIT);
422 }
423 for(i = 0; i<2; i++){
424 m_TimeType[i].SetPos(TILE_UNIT+tw*i/2, TILE_UNIT*2+TILE_QUAD);
425 m_TimeType[i].SetSize(tw*(i+1)/2-tw*i/2-TILE_QUAD, TILE_UNIT);
426 }
427 int tx = (w-TILE_UNIT*(2+9)-TILE_HALF*5)/2;
428 m_HourEdit.SetPos(tx+TILE_UNIT, TILE_UNIT*3+TILE_QUAD);
429 m_HourLabel.SetPos(tx+TILE_UNIT*3+TILE_HALF, TILE_UNIT*3+TILE_QUAD);
430 m_MinuteEdit.SetPos(tx+TILE_UNIT*5, TILE_UNIT*3+TILE_QUAD);
431 m_MinuteLabel.SetPos(tx+TILE_UNIT*7+TILE_HALF, TILE_UNIT*3+TILE_QUAD);
432 m_SecondEdit.SetPos(tx+TILE_UNIT*9, TILE_UNIT*3+TILE_QUAD);
433 m_SecondLabel.SetPos(tx+TILE_UNIT*11+TILE_HALF, TILE_UNIT*3+TILE_QUAD);
434 // m_JointCheck.SetPos(TILE_UNIT, TILE_UNIT*4+TILE_QUAD);
435 // m_JointCheck.SetSize(w-TILE_UNIT*2, TILE_UNIT);
436 m_StopPosEdit.SetPos(tx+TILE_UNIT, TILE_UNIT*6+TILE_QUAD);
437 m_StopPosButton.SetPos(tx+TILE_UNIT*9, TILE_UNIT*6+TILE_QUAD);
438 }
439
440 /*
441 * 入力チェック
442 */
443 void CDiaDialog::ScanInputDiaDialogBase(){
444 CDiaElement *de = GetElement();
445 if(!de) return;
446 bool update = false;
447 int act = m_Action->GetNumber();
448 if(de->m_Action!=act){
449 de->m_Action = act;
450 update = true;
451 }
452 int tt = m_TimeType->GetNumber();
453 if(de->m_TimeType!=tt){
454 de->m_TimeType = tt;
455 update = true;
456 }
457 int hour = 0, minute = 0, second = 0;
458 sscanf(m_HourEdit.GetRealtimeText().c_str(), "%d", &hour);
459 sscanf(m_MinuteEdit.GetRealtimeText().c_str(), "%d", &minute);
460 sscanf(m_SecondEdit.GetRealtimeText().c_str(), "%d", &second);
461 ValueArea(&hour, 0, tt ? 23 : 999999);
462 ValueArea(&minute, 0, 59);
463 ValueArea(&second, 0, 59);
464 if(de->m_Hour!=hour || de->m_Minute!=minute || de->m_Second!=second){
465 de->m_Hour = hour;
466 de->m_Minute = minute;
467 de->m_Second = second;
468 update = true;
469 }
470 // int jt = m_JointCheck.GetCheck();
471 // if(de->m_Joint!=jt){
472 // de->m_Joint = jt;
473 // update = true;
474 // }
475 if(m_StopPosEdit.IsFocus() && !m_StopPosEdit.IsComp()
476 && (GetKey(DIK_RETURN)|GetKey(DIK_NUMPADENTER))==S_PUSH){
477 m_StopPosEdit.FinishInput();
478 m_StopPosButton.SetPush(true);
479 }
480 if(m_StopPosButton.IsPushed()){
481 de->m_Offset = 0.0f;
482 sscanf(m_StopPosEdit.GetText(), "%f", &de->m_Offset);
483 ValueArea(&de->m_Offset, -1.0f, 1.0f);
484 m_StopPosEdit.SetText(FlashIn("%f", de->m_Offset));
485 m_StopPosEdit.GiveFocus(false);
486 return;
487 }
488 if(GetButton(DIM_LEFT)>=S_PUSH){
489 int px, py, tw = m_DiaGroup.GetWidth()-TILE_UNIT*2;
490 m_DiaGroup.GetAbsPos(&px, &py);
491 px += TILE_UNIT;
492 py += TILE_UNIT*4+TILE_QUAD;
493 int hx1 = px+tw/3, hx2 = px+tw*2/3;
494 POINT pos = g_Cursor.GetPos();
495 if(m_OffsetSlide || GetButton(DIM_LEFT)==S_PUSH &&
496 px<=pos.x && pos.x<px+tw && py+TILE_QUAD<=pos.y && pos.y<py+TILE_UNIT*2){
497 m_OffsetSlide = 1;
498 de->m_Offset = (pos.x-px-tw*0.5f)*3.0f/tw;
499 if(py+TILE_UNIT<pos.y) de->m_Offset = Round(de->m_Offset*10.0f)*0.1f;
500 ValueArea(&de->m_Offset, -1.0f, 1.0f);
501 m_StopPosEdit.FinishInput();
502 m_StopPosEdit.SetText(FlashIn("%f", de->m_Offset));
503 update = true;
504 }
505 }else{
506 m_OffsetSlide = 0;
507 }
508 if(update) de->UpdateCaption();
509 }
510
511 /*
512 * レンダリング
513 */
514 void CDiaDialog::RenderDiaDialogBase(){
515 CDiaElement *de = GetElement();
516 if(!de) return;
517 devSetTexture(0, NULL);
518 D3DCOLOR col = g_Skin->m_InterfaceData.m_StaticFontColor;
519 D3DCOLOR col2 = col&0x00ffffff;
520 if(!col2) col2 = 0x01000000;
521 int px, py, tw = m_DiaGroup.GetWidth()-TILE_UNIT*2;
522 m_DiaGroup.GetAbsPos(&px, &py);
523 px += TILE_UNIT;
524 py += TILE_UNIT*4+TILE_QUAD;
525 int hx1 = px+tw/3, hx2 = px+tw*2/3;
526 Draw2DLine(hx1, py+TILE_UNIT+1, hx2-1, py+TILE_UNIT+1, col);
527 Draw2DLine(hx1, py+TILE_UNIT+1, hx1, py+TILE_UNIT*2, col, col2);
528 Draw2DLine(hx2-1, py+TILE_UNIT+1, hx2-1, py+TILE_UNIT*2, col, col2);
529 int i, tpn = 3, ofs = Round(de->m_Offset*tw/3);
530 int trl = hx2+2-hx1;
531 for(i = 0; i<tpn; i++) Fill2DRect(
532 hx1+trl*i/tpn+ofs, py+TILE_QUAD, hx1+trl*(i+1)/tpn-2+ofs, py+TILE_UNIT, col);
533 g_StrTex->RenderCenter(px+tw/2, py+TILE_UNIT+FontY(TILE_UNIT), col, 0, lang(Platform));
534 g_StrTex->RenderLeft(px, py+TILE_UNIT+FontY(TILE_UNIT), col, 0, lang(Back_A));
535 g_StrTex->RenderRight(px+tw, py+TILE_UNIT+FontY(TILE_UNIT), col, 0, lang(Front_A));
536 }
537
538 /*
539 * 要素値をセット
540 */
541 void CDiaDialog::SetElementValue(
542 CDiaElementBase *el // ダイヤ要素
543 ){
544 if(el){
545 CDiaElement *de = (CDiaElement *)el;
546 m_Action[de->m_Action].SetCheck();
547 m_TimeType[de->m_TimeType].SetCheck();
548 m_HourEdit.FinishInput();
549 m_MinuteEdit.FinishInput();
550 m_SecondEdit.FinishInput();
551 m_HourEdit.SetText(FlashIn("%02d", de->m_Hour));
552 m_MinuteEdit.SetText(FlashIn("%02d", de->m_Minute));
553 m_SecondEdit.SetText(FlashIn("%02d", de->m_Second));
554 // m_JointCheck.SetCheck(de->m_Joint);
555 m_StopPosEdit.SetText(FlashIn("%f", de->m_Offset));
556 }else{
557 m_Action[0].SetCheck();
558 m_TimeType[0].SetCheck();
559 m_HourEdit.SetText("");
560 m_MinuteEdit.SetText("");
561 m_SecondEdit.SetText("");
562 m_StopPosEdit.SetText("");
563 // m_JointCheck.SetCheck(0);
564 }
565 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26