1 #include "studiox_includes.h"
2 #include "trigger_list_edit_dlg.h"
3
4 extern CString target_class_name;
5 extern CFont NormalFont;
6
7 enum trigger_list_edit_dlg_test_commands{
8 TEST_ADD_TRIGGER = 1,
9 TEST_DELETE_TRIGGER,
10 TEST_EDIT_TRIGGER,
11 TEST_EDIT_ACTION,
12 TEST_SELETE_ROW,
13 TEST_SAVE_TRIGGER_LIST_EDIT,
14 TEST_CANCEL_TRIGGER_LIST_EDIT
15 };
16
IMPLEMENT_DYNAMIC(trigger_list_edit_dlg,express_dialog)17 IMPLEMENT_DYNAMIC(trigger_list_edit_dlg, express_dialog)
18
19 BEGIN_MESSAGE_MAP(trigger_list_edit_dlg, express_dialog)
20 ON_WM_DESTROY()
21 ON_BN_CLICKED(IDC_TRIGGER_ADD_BTN, &trigger_list_edit_dlg::OnAddTrigger)
22 ON_BN_CLICKED(IDC_TRIGGER_DEL_BTN, &trigger_list_edit_dlg::OnDeleteTrigger)
23 ON_BN_CLICKED(IDC_TRIGGER_EDIT_BTN, &trigger_list_edit_dlg::OnEditTrigger)
24 ON_BN_CLICKED(IDC_TRIGGER_ACTION_EDIT_BTN, &trigger_list_edit_dlg::OnEditTriggerAction)
25 ON_MESSAGE(STUDIO_TEST, &trigger_list_edit_dlg::OnTestMessage)
26 END_MESSAGE_MAP()
27
28 ///////////////////////////////////////////////////////////////////////////////
29 trigger_list_edit_dlg::trigger_list_edit_dlg(int display_index, screen_flow *flow, flow_item *item, CWnd* pParent /*=NULL*/)
30 : express_dialog(trigger_list_edit_dlg::IDD, pParent)
31 {
32 SetTitleText("Edit Trigger List");
33 IconId = IDB_MACRO_PLAYBACK_ICON;
34 mpTriggerFrame = NULL;
35 mpOldFlow = flow;
36 mDisplayIndex = display_index;
37
38 mItem = *item;
39
40 trigger_info *trigger = mItem.trigger_list;
41 while (trigger)
42 {
43 mTriggerList.Add(trigger);
44 trigger = trigger->next;
45 }
46 }
47
48 ///////////////////////////////////////////////////////////////////////////////
~trigger_list_edit_dlg()49 trigger_list_edit_dlg::~trigger_list_edit_dlg()
50 {
51 }
52
53 ///////////////////////////////////////////////////////////////////////////////
OnDestroy()54 void trigger_list_edit_dlg::OnDestroy()
55 {
56 express_dialog::OnDestroy();
57
58 mpTriggerFrame->DestroyWindow();
59 delete mpTriggerFrame;
60 }
61
62 ///////////////////////////////////////////////////////////////////////////////
DoDataExchange(CDataExchange * pDX)63 void trigger_list_edit_dlg::DoDataExchange(CDataExchange* pDX)
64 {
65 express_dialog::DoDataExchange(pDX);
66 }
67
68 ///////////////////////////////////////////////////////////////////////////////
OnOK()69 void trigger_list_edit_dlg::OnOK()
70 {
71 flow_item *item = mpOldFlow->GetFlowItem(mItem.screen_name);
72
73 if (item->trigger_list)
74 {
75 delete item->trigger_list;
76 }
77 item->trigger_list = mItem.trigger_list;
78 mItem.trigger_list = NULL;
79
80 express_dialog::OnOK();
81 }
82
83 ///////////////////////////////////////////////////////////////////////////////
OnCancel()84 void trigger_list_edit_dlg::OnCancel()
85 {
86 mItem.RemovedAnimationIdFromDictionary(mDisplayIndex);
87
88 flow_item *item = mpOldFlow->GetFlowItem(mItem.screen_name);
89 if (item)
90 {
91 item->AddAnimationIdToDictionary(mDisplayIndex);
92 }
93
94 express_dialog::OnCancel();
95 }
96
97 int bad_wnd_pointers = 0;
98
99 ///////////////////////////////////////////////////////////////////////////////
OnInitDialog()100 BOOL trigger_list_edit_dlg::OnInitDialog()
101 {
102 CString List_Prompt;
103 CWnd *wnd;
104
105 express_dialog::OnInitDialog();
106
107 AddCancelButton();
108 AddSaveButton();
109
110 CRect rect;
111 CRect list_prompt_rect;
112 GetClientRect(&rect);
113 rect.left += 10;
114 rect.right -= 10;
115 rect.bottom -= (m_status_bar_height + 10);
116
117 wnd = GetDlgItem(IDC_TRIGGER_LIST_PROMPT);
118 if (wnd)
119 {
120 wnd->GetWindowRect(&list_prompt_rect);
121 ScreenToClient(&list_prompt_rect);
122 rect.top = list_prompt_rect.bottom + 1;
123 }
124 else
125 {
126 bad_wnd_pointers++;
127 }
128
129 // create trigger frame
130 mpTriggerFrame = new trigger_frame(this, &mTriggerList);
131 mpTriggerFrame->Create(target_class_name, _T("trigger_frame"),
132 WS_VISIBLE | WS_CHILD | WS_VSCROLL | WS_TABSTOP, rect, this, 0);
133 mpTriggerFrame->SetWindowPos(GetDlgItem(IDC_TRIGGER_ACTION_EDIT_BTN), 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
134
135 //set source screen name
136 List_Prompt.Format(_T("List of defined triggers for \"%s\":"), mItem.screen_name);
137 SetDlgItemText(IDC_TRIGGER_LIST_PROMPT, List_Prompt);
138
139 EnableDisableTriggerEditControls();
140
141 return TRUE;
142 }
143
144 ///////////////////////////////////////////////////////////////////////////////
OnAddTrigger()145 void trigger_list_edit_dlg::OnAddTrigger()
146 {
147 trigger_info *trigger = new trigger_info;
148 trigger->event_type = 0;
149 trigger_edit_dlg dlg(mDisplayIndex, &mItem, trigger, this);
150
151 if ((dlg.DoModal() == IDOK) && trigger->event_type)
152 {
153 mTriggerList.Add(trigger);
154
155 mpTriggerFrame->CreateTriggerRows();
156 mpTriggerFrame->PositionChildren();
157
158 //select new added trigger
159 mpTriggerFrame->SetSelectedRow(mTriggerList.GetCount() - 1);
160
161 EnableDisableTriggerEditControls();
162 }
163 else
164 {
165 delete trigger;
166 }
167 }
168
169 ///////////////////////////////////////////////////////////////////////////////
OnDeleteTrigger()170 void trigger_list_edit_dlg::OnDeleteTrigger()
171 {
172 int index = mpTriggerFrame->GetSelectedRow();
173
174 if (index < mTriggerList.GetCount())
175 {
176 trigger_info *trigger = mTriggerList.GetAt(index);
177 trigger->RemoveAnimationIdFromDictionary(mDisplayIndex);
178 screen_flow::RemoveTrigger(&mItem, trigger);
179 mTriggerList.RemoveAt(index);
180
181 mpTriggerFrame->CreateTriggerRows();
182 mpTriggerFrame->PositionChildren();
183
184 if (index > 0)
185 {
186 mpTriggerFrame->SetSelectedRow(index - 1);
187 }
188 }
189
190 EnableDisableTriggerEditControls();
191 }
192
193 ///////////////////////////////////////////////////////////////////////////////
OnEditTrigger()194 void trigger_list_edit_dlg::OnEditTrigger()
195 {
196 int index = mpTriggerFrame->GetSelectedRow();
197
198 if (mTriggerList.GetCount())
199 {
200 trigger_info *trigger = mTriggerList.GetAt(index);
201 trigger_edit_dlg dlg(mDisplayIndex, &mItem, trigger, this);
202
203 if (dlg.DoModal() == IDOK)
204 {
205 if (trigger->event_type == 0)
206 {
207 trigger = mTriggerList.GetAt(index);
208 screen_flow::RemoveTrigger(&mItem, trigger);
209 mTriggerList.RemoveAt(index);
210 }
211
212 mpTriggerFrame->CreateTriggerRows();
213 mpTriggerFrame->PositionChildren();
214 }
215 }
216 }
217
218 ///////////////////////////////////////////////////////////////////////////////
OnEditTriggerAction()219 void trigger_list_edit_dlg::OnEditTriggerAction()
220 {
221 int index = mpTriggerFrame->GetSelectedRow();
222
223 if (mTriggerList.GetCount())
224 {
225 trigger_info *trigger = mTriggerList.GetAt(index);
226 trigger_action_edit_dlg dlg(mDisplayIndex, &mItem, trigger, this);
227
228 if (dlg.DoModal() == IDOK)
229 {
230 mpTriggerFrame->CreateTriggerRows();
231 mpTriggerFrame->PositionChildren();
232 }
233 }
234 }
235
236 ///////////////////////////////////////////////////////////////////////////////
PreTranslateMessage(MSG * pMsg)237 BOOL trigger_list_edit_dlg::PreTranslateMessage(MSG* pMsg)
238 {
239 // TODO: Add your specialized code here and/or call the base class
240
241 if ((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_RETURN))
242 {
243 CWnd* focus_owner = GetFocus();
244
245 if (focus_owner)
246 {
247 switch (focus_owner->GetDlgCtrlID())
248 {
249 case IDC_TRIGGER_ADD_BTN:
250 OnAddTrigger();
251 return TRUE;
252
253 case IDC_TRIGGER_DEL_BTN:
254 OnDeleteTrigger();
255 return TRUE;
256
257 case IDC_TRIGGER_EDIT_BTN:
258 OnEditTrigger();
259 return TRUE;
260
261 case IDC_TRIGGER_ACTION_EDIT_BTN:
262 OnEditTriggerAction();
263 return TRUE;
264
265 default:
266 break;
267 }
268 }
269 }
270
271 return express_dialog::PreTranslateMessage(pMsg);
272 }
273
274
275 ///////////////////////////////////////////////////////////////////////////////
EnableDisableTriggerEditControls()276 void trigger_list_edit_dlg::EnableDisableTriggerEditControls()
277 {
278 BOOL enable = TRUE;
279 if (mTriggerList.GetCount() == 0)
280 {
281 enable = FALSE;
282
283 if (GetFocus() == GetDlgItem(IDC_TRIGGER_DEL_BTN))
284 {
285 // Move focus to trigger add button.
286 GetDlgItem(IDC_TRIGGER_ADD_BTN)->SetFocus();
287 }
288 }
289
290 GetDlgItem(IDC_TRIGGER_DEL_BTN)->EnableWindow(enable);
291 GetDlgItem(IDC_TRIGGER_EDIT_BTN)->EnableWindow(enable);
292 GetDlgItem(IDC_TRIGGER_ACTION_EDIT_BTN)->EnableWindow(enable);
293 mpTriggerFrame->EnableWindow(enable);
294 }
295
296 ///////////////////////////////////////////////////////////////////////////////
OnTestMessage(WPARAM wParam,LPARAM lParam)297 LRESULT trigger_list_edit_dlg::OnTestMessage(WPARAM wParam, LPARAM lParam)
298 {
299 switch (wParam)
300 {
301 case TEST_ADD_TRIGGER:
302 OnAddTrigger();
303 break;
304
305 case TEST_DELETE_TRIGGER:
306 OnDeleteTrigger();
307 break;
308
309 case TEST_EDIT_TRIGGER:
310 OnEditTrigger();
311 break;
312
313 case TEST_EDIT_ACTION:
314 OnEditTriggerAction();
315 break;
316
317 case TEST_SELETE_ROW:
318 mpTriggerFrame->SetSelectedRow(lParam);
319 break;
320
321 case TEST_SAVE_TRIGGER_LIST_EDIT:
322 OnOK();
323 break;
324
325 case TEST_CANCEL_TRIGGER_LIST_EDIT:
326 OnCancel();
327 break;
328 }
329
330 return 0;
331 }
332
333 ///////////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(trigger_frame,CWnd)334 BEGIN_MESSAGE_MAP(trigger_frame, CWnd)
335 ON_WM_DESTROY()
336 ON_WM_CREATE()
337 ON_WM_VSCROLL()
338 ON_WM_MOUSEWHEEL()
339 ON_WM_PAINT()
340 ON_WM_SIZE()
341 ON_WM_SETFOCUS()
342 END_MESSAGE_MAP()
343
344 ///////////////////////////////////////////////////////////////////////////////
345 trigger_frame::trigger_frame(CWnd *parent, CArray<trigger_info *> *trigger_list)
346 {
347 mpTriggerList = trigger_list;
348 mSelectedRow = 0;
349 m_scroll_helper = new CScrollHelper;
350 m_scroll_helper->AttachWnd(this);
351
352 mRowHeight = GetScaledValue(TRIGGER_ROW_HEIGHT, GetSystemDPI(), GetTextScaler());
353 }
354
~trigger_frame()355 trigger_frame::~trigger_frame()
356 {
357 if (m_scroll_helper)
358 {
359 delete m_scroll_helper;
360 }
361 }
362
363 ///////////////////////////////////////////////////////////////////////////////
OnCreate(LPCREATESTRUCT lpCreateStruct)364 int trigger_frame::OnCreate(LPCREATESTRUCT lpCreateStruct)
365 {
366 if (CWnd::OnCreate(lpCreateStruct) == -1)
367 return -1;
368
369 CreateTriggerRows();
370
371 return 0;
372 }
373
374 ///////////////////////////////////////////////////////////////////////////////
OnDestroy()375 void trigger_frame::OnDestroy()
376 {
377 CWnd::OnDestroy();
378
379 CWnd *child = GetWindow(GW_CHILD);
380
381 while (child)
382 {
383 child->DestroyWindow();
384 delete child;
385 child = GetWindow(GW_CHILD);
386 }
387 }
388
389 ///////////////////////////////////////////////////////////////////////////////
OnSize(UINT nType,int cx,int cy)390 void trigger_frame::OnSize(UINT nType, int cx, int cy)
391 {
392 CWnd::OnSize(nType, cx, cy);
393
394 PositionChildren();
395 }
396
397 ///////////////////////////////////////////////////////////////////////////////
OnVScroll(UINT nSBCode,UINT nPos,CScrollBar * pScrollBar)398 void trigger_frame::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
399 {
400 // Compute the desired change or delta in scroll position.
401 m_scroll_helper->OnVScroll(nSBCode, nPos, pScrollBar);
402 }
403
404 ///////////////////////////////////////////////////////////////////////////////
OnMouseWheel(UINT nFlags,short zDelta,CPoint pt)405 BOOL trigger_frame::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
406 {
407 BOOL wasScrolled = m_scroll_helper->OnMouseWheel(nFlags, zDelta, pt);
408 return wasScrolled;
409 }
410
411 ///////////////////////////////////////////////////////////////////////////////
OnPaint()412 void trigger_frame::OnPaint()
413 {
414 CPaintDC dc(this);
415
416 CRect rect;
417 CBrush fill_brush(GetSysColor(COLOR_3DFACE));
418 GetClientRect(&rect);
419
420 dc.FillRect(rect, &fill_brush);
421 }
422
423 ///////////////////////////////////////////////////////////////////////////////
OnSetFocus(CWnd * pOldWnd)424 void trigger_frame::OnSetFocus(CWnd* pOldWnd)
425 {
426 CWnd::OnSetFocus(pOldWnd);
427
428 // TODO: Add your message handler code here
429 // Move focus to the selected row
430 AssignFocus(mSelectedRow);
431 }
432
433 ///////////////////////////////////////////////////////////////////////////////
PreTranslateMessage(MSG * pMsg)434 BOOL trigger_frame::PreTranslateMessage(MSG* pMsg)
435 {
436 int pagesize;
437 CRect rect;
438
439 // TODO: Add your specialized code here and/or call the base class
440 if (pMsg->message == WM_KEYDOWN)
441 {
442 switch (pMsg->wParam)
443 {
444 case VK_UP:
445 if (mSelectedRow > 0)
446 {
447 SetSelectedRow(mSelectedRow - 1, TRUE);
448 }
449 return TRUE;
450
451 case VK_DOWN:
452 if (mSelectedRow < mpTriggerList->GetCount() - 1)
453 {
454 SetSelectedRow(mSelectedRow + 1, TRUE);
455 }
456 return TRUE;
457
458 case VK_HOME:
459 if (mSelectedRow > 0)
460 {
461 SetSelectedRow(0, TRUE);
462 }
463 break;
464
465 case VK_END:
466 if (mSelectedRow < mpTriggerList->GetCount() - 1)
467 {
468 SetSelectedRow(mpTriggerList->GetCount() - 1, TRUE);
469 }
470 break;
471
472 case VK_PRIOR:
473 GetClientRect(&rect);
474 if (m_scroll_helper->Scroll(SB_VERT, -rect.Height()))
475 {
476 pagesize = rect.Height() / mRowHeight;
477 SetSelectedRow(max(0, mSelectedRow - pagesize), TRUE);
478 }
479 break;
480
481 case VK_NEXT:
482 GetClientRect(&rect);
483 if (m_scroll_helper->Scroll(SB_VERT, rect.Height()))
484 {
485 pagesize = rect.Height() / mRowHeight;
486 SetSelectedRow(min(mpTriggerList->GetCount() - 1, mSelectedRow + pagesize), TRUE);
487 }
488 break;
489 }
490 }
491
492 return CWnd::PreTranslateMessage(pMsg);
493 }
494
495 ///////////////////////////////////////////////////////////////////////////////
AssignFocus(int rowId)496 void trigger_frame::AssignFocus(int rowId)
497 {
498 CWnd* child = GetWindow(GW_CHILD);
499
500 while (child && rowId)
501 {
502 child = child->GetWindow(GW_HWNDNEXT);
503 rowId--;
504 }
505
506 // move focus to selected row
507 if (child)
508 {
509 child->SetFocus();
510 child->Invalidate();
511 }
512 }
513
514 ///////////////////////////////////////////////////////////////////////////////
SetSelectedRow(int rowId,bool assign_focus)515 void trigger_frame::SetSelectedRow(int rowId, bool assign_focus)
516 {
517 if (mSelectedRow != rowId)
518 {
519 mSelectedRow = rowId;
520 SelectedVisible();
521 Invalidate();
522
523 if (assign_focus)
524 {
525 AssignFocus(rowId);
526 }
527 }
528 }
529
530 ///////////////////////////////////////////////////////////////////////////////
SelectedVisible()531 void trigger_frame::SelectedVisible()
532 {
533 if (mSelectedRow >= 0)
534 {
535 int min_scroll_value = ((mSelectedRow + 1) * mRowHeight) - m_scroll_helper->GetPageSize().cy;
536 int max_scroll_value = min_scroll_value + m_scroll_helper->GetPageSize().cy - mRowHeight;
537
538 if (min_scroll_value < 0)
539 {
540 min_scroll_value = 0;
541 }
542
543 if (max_scroll_value > m_scroll_helper->GetDisplaySize().cy - m_scroll_helper->GetPageSize().cy)
544 {
545 max_scroll_value = m_scroll_helper->GetDisplaySize().cy - m_scroll_helper->GetPageSize().cy;
546 }
547
548 int current_scroll_value = m_scroll_helper->GetScrollPos().cy;
549 if ((current_scroll_value < min_scroll_value) || (current_scroll_value > max_scroll_value))
550 {
551 // scroll so that selected item is visible
552 m_scroll_helper->SetScrollPos(SB_VERT, min_scroll_value);
553 }
554 }
555 }
556
557 ///////////////////////////////////////////////////////////////////////////////
CreateTriggerRows()558 void trigger_frame::CreateTriggerRows()
559 {
560 int index;
561 trigger_row *row;
562 CWnd *child = GetWindow(GW_CHILD);
563
564 while (child)
565 {
566 child->DestroyWindow();
567 delete child;
568 child = GetWindow(GW_CHILD);
569 }
570
571 int rowcount = mpTriggerList->GetCount();
572 trigger_info* trigger;
573 CString row_name("");
574 for (index = 0; index < rowcount; index++)
575 {
576 row = new trigger_row(this, index, mpTriggerList);
577 trigger = mpTriggerList->GetAt(index);
578 if (trigger)
579 {
580 row_name = trigger->trigger_name;
581 }
582 row->Create(target_class_name, row_name, WS_VISIBLE | WS_CHILD, CRect(0, 0, 0, 0), this, 0);
583 SetControlAccessibleRole(row->GetSafeHwnd(), ROLE_SYSTEM_LISTITEM);
584
585 }
586 }
587
588 ///////////////////////////////////////////////////////////////////////////////
PositionChildren()589 void trigger_frame::PositionChildren()
590 {
591 int rowheight;
592 CRect client;
593 GetClientRect(&client);
594 CRect childsize = client;
595 trigger_row *row = (trigger_row *)GetWindow(GW_CHILD);
596
597 if (row)
598 {
599 rowheight = mRowHeight;
600
601 childsize.top -= (m_scroll_helper->GetScrollPos()).cy;
602 childsize.bottom = childsize.top + rowheight;
603
604 while (row)
605 {
606 row->MoveWindow(&childsize);
607 childsize.top += rowheight;
608 childsize.bottom += rowheight;
609 row = (trigger_row *)row->GetWindow(GW_HWNDNEXT);
610 }
611 }
612
613 m_scroll_helper->SetDisplaySize(0, mpTriggerList->GetCount() * mRowHeight);
614
615 Invalidate();
616 }
617
618
619 ///////////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(trigger_row,CWnd)620 BEGIN_MESSAGE_MAP(trigger_row, CWnd)
621 ON_WM_PAINT()
622 ON_WM_LBUTTONDOWN()
623 ON_WM_KILLFOCUS()
624 END_MESSAGE_MAP()
625
626 ///////////////////////////////////////////////////////////////////////////////
627 trigger_row::trigger_row(CWnd *parent, int Id, CArray<trigger_info *> *trigger_list)
628 {
629 mRowId = Id;
630 frame = (trigger_frame *)parent;
631 mpTriggerList = trigger_list;
632 }
633
634 ///////////////////////////////////////////////////////////////////////////////
OnPaint()635 void trigger_row::OnPaint()
636 {
637 CPaintDC dc(this);
638 CFont *old_font;
639 CRect boxrect;
640 CBrush brush;
641
642 GetClientRect(&boxrect);
643
644 dc.SetBkMode(TRANSPARENT);
645 old_font = dc.SelectObject(&NormalFont);
646 if (mRowId == frame->GetSelectedRow())
647 {
648
649 //highlight selected item
650 if (GetFocus() == this)
651 {
652 brush.CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT));
653 dc.SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT));
654 }
655 else
656 {
657 brush.CreateSolidBrush(GetSysColor(COLOR_BTNSHADOW));
658 dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
659 }
660
661 dc.FillRect(&boxrect, &brush);
662 }
663 else
664 {
665 brush.CreateSolidBrush(GetSysColor(COLOR_WINDOW));
666 dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
667 dc.FillRect(&boxrect, &brush);
668 }
669
670 CPen line_pen;
671 line_pen.CreatePen(PS_SOLID, 0, GetSysColor(COLOR_BTNSHADOW));
672 CPen* old_pen = dc.SelectObject(&line_pen);
673
674 // Draw control border
675 if (mRowId == 0)
676 {
677 dc.MoveTo(boxrect.left, boxrect.top);
678 dc.LineTo(boxrect.right, boxrect.top);
679 }
680
681 dc.MoveTo(boxrect.left, boxrect.top);
682 dc.LineTo(boxrect.left, boxrect.bottom - 1);
683 dc.MoveTo(boxrect.right - 1, boxrect.top);
684 dc.LineTo(boxrect.right - 1, boxrect.bottom - 1);
685 dc.MoveTo(boxrect.left, boxrect.bottom - 1);
686 dc.LineTo(boxrect.right, boxrect.bottom - 1);
687 dc.SelectObject(old_pen);
688
689 trigger_info* trigger = mpTriggerList->GetAt(mRowId);
690 if (trigger)
691 {
692 boxrect.left += 4;
693 dc.DrawText(trigger->trigger_name, boxrect, DT_LEFT | DT_TOP | DT_SINGLELINE | DT_VCENTER);
694 }
695
696 dc.SelectObject(old_font);
697 }
698
699
700 ///////////////////////////////////////////////////////////////////////////////
OnLButtonDown(UINT nFlags,CPoint point)701 void trigger_row::OnLButtonDown(UINT nFlags, CPoint point)
702 {
703 frame->SetSelectedRow(mRowId);
704 frame->SetFocus();
705 CWnd::OnLButtonDown(nFlags, point);
706 }
707
708 ///////////////////////////////////////////////////////////////////////////////
OnKillFocus(CWnd * pNewWnd)709 void trigger_row::OnKillFocus(CWnd* pNewWnd)
710 {
711 CWnd::OnKillFocus(pNewWnd);
712
713 Invalidate();
714 }
715