1 // import_project_dlg.cpp : implementation file
2 //
3
4 #include "studiox_includes.h"
5 #include "copy_paste_engine.h"
6
7 // import_project_dlg dialog
8
9 IMPLEMENT_DYNAMIC(import_project_dlg, express_dialog)
10
11 BEGIN_MESSAGE_MAP(import_project_dlg, express_dialog)
12 ON_MESSAGE(STUDIO_TEST, OnTestMessage)
13 END_MESSAGE_MAP()
14
15 enum import_project_dlg_test_commands{
16 TEST_IMPORT = 1,
17 TEST_CANCEL,
18 TEST_CHECK_SCREEN
19 };
20
21 ///////////////////////////////////////////////////////////////////////////////
import_project_dlg(studiox_project * merge_project,CString project_path,CWnd * pParent)22 import_project_dlg::import_project_dlg(studiox_project *merge_project, CString project_path, CWnd* pParent /*=NULL*/)
23 : express_dialog(import_project_dlg::IDD, pParent)
24 {
25 IconId = IDB_PIXELMAPS;
26 SetTitleText("Import Project");
27
28 mpMergeProject = merge_project;
29 mProjectPath = project_path;
30 }
31
32 ///////////////////////////////////////////////////////////////////////////////
~import_project_dlg()33 import_project_dlg::~import_project_dlg()
34 {
35 }
36
37 ///////////////////////////////////////////////////////////////////////////////
DoDataExchange(CDataExchange * pDX)38 void import_project_dlg::DoDataExchange(CDataExchange* pDX)
39 {
40 express_dialog::DoDataExchange(pDX);
41 DDX_Control(pDX, IDC_PROJECT_TREE, mProjectTree);
42
43 if (pDX->m_bSaveAndValidate)
44 {
45
46 }
47 }
48
49 ///////////////////////////////////////////////////////////////////////////////
OnInitDialog()50 BOOL import_project_dlg::OnInitDialog()
51 {
52 express_dialog::OnInitDialog();
53
54 SetDlgItemText(IDC_MERGE_PROJECT_NAME, mpMergeProject->mHeader.project_name);
55
56 AddCancelButton();
57 AddSaveButton(_T("Import"));
58 SetSavedMsg(L"Imported");
59
60 BuildProjectTree();
61
62 return TRUE;
63 }
64
65 ///////////////////////////////////////////////////////////////////////////////
66 // import project must specify the target folder
OnOK()67 void import_project_dlg::OnOK()
68 {
69 HTREEITEM hRoot = mProjectTree.GetRootItem();
70 HTREEITEM hParent;
71 HTREEITEM hDisplay;
72 HTREEITEM hItem;
73 studiox_project *project = GetOpenProject();
74
75 if (!project)
76 {
77 return;
78 }
79
80 hParent = mProjectTree.FindItem(hRoot, _T("Displays"));
81 int state = mProjectTree.GetItemCheckState(hParent);
82
83 if (state == CUSTOM_TV_STATE_UNCHECKED)
84 {
85 return express_dialog::OnOK();
86 }
87
88 copy_paste_engine cpe;
89 extern CString gOpenProjectDir;
90 CString oldpathname = gOpenProjectDir;
91 folder_info *selected = GetProjectView()->GetSelectedFolder();
92 if (selected)
93 {
94 for (int display = 0; display < mpMergeProject->mHeader.num_displays; display++)
95 {
96 hDisplay = mProjectTree.FindItem(hParent, mpMergeProject->mDisplays[display].name);
97 state = mProjectTree.GetItemCheckState(hDisplay);
98
99 if (state == CUSTOM_TV_STATE_UNCHECKED)
100 {
101 continue;
102 }
103
104 folder_info *folder = mpMergeProject->mDisplays[display].GetFirstChildFolder();
105 CArray<widget_info *> info_list;
106
107 while (folder)
108 {
109 widget_info *info = folder->GetFirstChildWidget();
110 while (info)
111 {
112 hItem = mProjectTree.FindItem(hDisplay, info->app_name);
113 state = mProjectTree.GetItemCheckState(hItem);
114
115 if (state == CUSTOM_TV_STATE_CHECKED)
116 {
117 info_list.Add(info);
118 }
119 info = info->GetNextWidgetInfo();
120 }
121 folder = folder->GetNextFolder();
122 }
123
124 /* Should not do copy-paste while no income screen. */
125 if (info_list.GetCount())
126 {
127 SetProjectDirectory(mProjectPath);
128 cpe.SetProject(mpMergeProject);
129 cpe.CopyToClipboard(info_list, m_hWnd);
130
131 SetProjectDirectory(oldpathname);
132 cpe.SetProject(project);
133 // Should select the target folder here.
134 GetProjectView()->FolderSelected(selected);
135 GetProjectView()->OnPasteWidget();
136 }
137 }
138 }
139 express_dialog::OnOK();
140 }
141
142
143 ///////////////////////////////////////////////////////////////////////////////
BuildProjectTree()144 void import_project_dlg::BuildProjectTree()
145 {
146 mProjectTree.InitImageList();
147
148 HTREEITEM hParent;
149 HTREEITEM hDisplay;
150 HTREEITEM hItem;
151 HTREEITEM screen;
152
153 hParent = mProjectTree.InsertItem(_T("Displays"));
154 mProjectTree.SetItemState(hParent, CUSTOM_TV_STATE_CHECKED);
155
156 for (int display = 0; display < mpMergeProject->mHeader.num_displays; display++)
157 {
158 hDisplay = mProjectTree.InsertItem(mpMergeProject->mDisplays[display].name, hParent);
159 mProjectTree.SetItemState(hDisplay, CUSTOM_TV_STATE_CHECKED);
160
161 folder_info *folder = mpMergeProject->mDisplays[display].GetFirstChildFolder();
162
163 while (folder)
164 {
165 hItem = mProjectTree.InsertItem(folder->folder_name, hDisplay, TVI_SORT);
166 mProjectTree.SetItemState(hItem, CUSTOM_TV_STATE_CHECKED);
167
168 widget_info *info = folder->GetFirstChildWidget();
169
170 while (info)
171 {
172 screen = mProjectTree.InsertItem(info->app_name, hItem);
173 mProjectTree.SetItemState(screen, CUSTOM_TV_STATE_CHECKED);
174 info = info->GetNextWidgetInfo();
175 }
176 mProjectTree.Expand(hItem, TVE_EXPAND);
177 folder = folder->GetNextFolder();
178 }
179
180
181 mProjectTree.Expand(hDisplay, TVE_EXPAND);
182 }
183 mProjectTree.Expand(hParent, TVE_EXPAND);
184
185 mProjectTree.SelectSetFirstVisible(mProjectTree.GetRootItem());
186 }
187
188 ///////////////////////////////////////////////////////////////////////////////
OnTestMessage(WPARAM wParam,LPARAM lParam)189 LRESULT import_project_dlg::OnTestMessage(WPARAM wParam, LPARAM lParam)
190 {
191 HTREEITEM item;
192 CStringArray param;
193 CString parent_name;
194 CString resource_name;
195 int check;
196
197 switch (wParam)
198 {
199 case TEST_IMPORT:
200 OnOK();
201 break;
202
203 case TEST_CANCEL:
204 OnCancel();
205 break;
206
207 case TEST_CHECK_SCREEN:
208 SplitString(GetTestingParam(0), ',', ¶m);
209 parent_name = param.GetAt(0);
210 resource_name = param.GetAt(1);
211 check = _tstoi(param.GetAt(2));
212 item = mProjectTree.FindItem(mProjectTree.GetRootItem(), parent_name);
213 if (item)
214 {
215 item = mProjectTree.FindItem(item, resource_name);
216
217 if (check)
218 {
219 mProjectTree.SetItemState(item, CUSTOM_TV_STATE_CHECKED);
220 }
221 else
222 {
223 mProjectTree.SetItemState(item, CUSTOM_TV_STATE_UNCHECKED);
224 }
225
226 mProjectTree.UpdateChildrenState(item);
227 }
228 break;
229 }
230
231 return 0;
232 }