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