1 #include "studiox_includes.h"
2 #include "trigger_action_select_dlg.h"
3
4 // trigger_action_select_dlg dialog
5 enum trigger_action_select_dlg_test_commands{
6 TEST_SELECT_ACTION = 1,
7 TEST_SAVE_TRIGGER_ACTION_SELECT,
8 TEST_CANCEL_TRIGGER_ACTION_SELECT
9 };
10
11 // Define common actions
12 STRING_VAL_PAIR ActionTypes[] = {
13 { _T("Attach"), GX_ACTION_TYPE_ATTACH },
14 { _T("Detach"), GX_ACTION_TYPE_DETACH },
15 { _T("Toggle"), GX_ACTION_TYPE_TOGGLE },
16 { _T("Show"), GX_ACTION_TYPE_SHOW },
17 { _T("Hide"), GX_ACTION_TYPE_HIDE },
18 { _T("Animation"), GX_ACTION_TYPE_ANIMATION },
19 { _T("Window Execute"), GX_ACTION_TYPE_WINDOW_EXECUTE },
20 { _T("Window Execute Stop"), GX_ACTION_TYPE_WINDOW_EXECUTE_STOP },
21 { _T("Screen Stack Push"), GX_ACTION_TYPE_SCREEN_STACK_PUSH },
22 { _T("Screen Stack Pop"), GX_ACTION_TYPE_SCREEN_STACK_POP },
23 { _T("Screen Stack Reset"), GX_ACTION_TYPE_SCREEN_STACK_RESET },
24 { _T(""), 0 }
25 };
26
IMPLEMENT_DYNAMIC(trigger_action_select_dlg,express_dialog)27 IMPLEMENT_DYNAMIC(trigger_action_select_dlg, express_dialog)
28
29 BEGIN_MESSAGE_MAP(trigger_action_select_dlg, express_dialog)
30 ON_MESSAGE(STUDIO_TEST, &trigger_action_select_dlg::OnTestMessage)
31 ON_LBN_SELCHANGE(IDC_ACTION_LIST, &trigger_action_select_dlg::OnSelectActionList)
32 END_MESSAGE_MAP()
33
34 ///////////////////////////////////////////////////////////////////////////////
35 trigger_action_select_dlg::trigger_action_select_dlg(CWnd* pParent /*=NULL*/)
36 : express_dialog(trigger_action_select_dlg::IDD, pParent)
37 {
38 IconId = IDB_MACRO_PLAYBACK_ICON;
39 SetTitleText("Select Action");
40
41 mSelectedActionName = "";
42 mSelectedActionType = 0;
43 }
44
45 ///////////////////////////////////////////////////////////////////////////////
~trigger_action_select_dlg()46 trigger_action_select_dlg::~trigger_action_select_dlg()
47 {
48 }
49
50 ///////////////////////////////////////////////////////////////////////////////
GetActionType(CString type_name)51 int trigger_action_select_dlg::GetActionType(CString type_name)
52 {
53 return FindPairVal(ActionTypes, type_name);
54 }
55
56 ///////////////////////////////////////////////////////////////////////////////
GetActionTypeName(int type)57 CString trigger_action_select_dlg::GetActionTypeName(int type)
58 {
59 return FindPairString(ActionTypes, type);
60 }
61
62 ///////////////////////////////////////////////////////////////////////////////
OnInitDialog()63 BOOL trigger_action_select_dlg::OnInitDialog()
64 {
65 express_dialog::OnInitDialog();
66
67 AddCancelButton();
68 AddSaveButton();
69
70 //initiate action list
71 InitActionLists();
72
73 return TRUE;
74 }
75
76 ///////////////////////////////////////////////////////////////////////////////
DoDataExchange(CDataExchange * pDX)77 void trigger_action_select_dlg::DoDataExchange(CDataExchange* pDX)
78 {
79 express_dialog::DoDataExchange(pDX);
80
81 DDX_Control(pDX, IDC_ACTION_LIST, mActionList);
82 }
83
84 ///////////////////////////////////////////////////////////////////////////////
UpdateListBoxHorizontalExtend(CListBox * pList)85 void trigger_action_select_dlg::UpdateListBoxHorizontalExtend(CListBox *pList)
86 {
87 // Find the longest string in the list box.
88 CString str;
89 CSize sz;
90 int dx = 0;
91 TEXTMETRIC tm;
92 CDC* pDC = pList->GetDC();
93 CFont* pFont = pList->GetFont();
94
95 // Select the listbox font, save the old font
96 CFont* pOldFont = pDC->SelectObject(pFont);
97 // Get the text metrics for avg char width
98 pDC->GetTextMetrics(&tm);
99
100 for (int index = 0; index < pList->GetCount(); index++)
101 {
102 pList->GetText(index, str);
103 sz = pDC->GetTextExtent(str);
104
105 // Add the avg width to prevent clipping
106 sz.cx += tm.tmAveCharWidth;
107
108 if (sz.cx > dx)
109 dx = sz.cx;
110 }
111 // Select the old font back into the DC
112 pDC->SelectObject(pOldFont);
113 pList->ReleaseDC(pDC);
114
115 // Set the horizontal extent so every character of all strings
116 // can be scrolled to.
117 pList->SetHorizontalExtent(dx);
118 }
119
120 ///////////////////////////////////////////////////////////////////////////////
InitActionLists()121 void trigger_action_select_dlg::InitActionLists()
122 {
123 STRING_VAL_PAIR *current = ActionTypes;
124 CListBox *pBox = &mActionList;
125 int index;
126
127 while (current->name.GetLength())
128 {
129 index = pBox->AddString(current->name);
130 pBox->SetItemData(index, current->val);
131 current++;
132 }
133 UpdateListBoxHorizontalExtend(pBox);
134 pBox->SetCurSel(0);
135
136 OnSelectActionList();
137 }
138
139 ///////////////////////////////////////////////////////////////////////////////
OnSelectActionList()140 void trigger_action_select_dlg::OnSelectActionList()
141 {
142 int sel = mActionList.GetCurSel();
143
144 mActionList.GetText(sel, mSelectedActionName);
145 mSelectedActionType = mActionList.GetItemData(sel);
146 }
147
148 ///////////////////////////////////////////////////////////////////////////////
OnTestMessage(WPARAM wParam,LPARAM lParam)149 LRESULT trigger_action_select_dlg::OnTestMessage(WPARAM wParam, LPARAM lParam)
150 {
151 switch (wParam)
152 {
153 case TEST_SELECT_ACTION:
154 mActionList.SelectString(0, GetTestingParam(0));
155 OnSelectActionList();
156 break;
157
158 case TEST_SAVE_TRIGGER_ACTION_SELECT:
159 OnOK();
160 break;
161
162 case TEST_CANCEL_TRIGGER_ACTION_SELECT:
163 OnCancel();
164 break;
165 }
166 return 0;
167 }
168
169