source: EDIS/tags/ed/tracking-ui-core/src/main/flex/gov/va/med/edp/view/config/ConfigBeds.mxml@ 1240

Last change on this file since 1240 was 1240, checked in by George Lilly, 13 years ago

new version from the VA

File size: 15.3 KB
Line 
1<?xml version="1.0" encoding="utf-8"?>
2<mx:HBox
3 xmlns:mx="http://www.adobe.com/2006/mxml"
4 xmlns:acc="flash.accessibility.*"
5 xmlns:config-model="gov.va.med.edp.vo.*"
6 xmlns:widget="gov.va.med.edp.widget.*"
7 creationComplete="init()"
8 horizontalGap="0"
9 width="100%" height="100%"
10 currentState="{selectedBed != null ? 'editing' : ''}" xmlns:config="gov.va.med.edp.view.config.*">
11
12 <mx:Script>
13 <![CDATA[
14import mx.events.DragEvent;
15 import mx.validators.Validator;
16 import mx.controls.Image;
17 import mx.binding.utils.BindingUtils;
18 import mx.events.ListEvent;
19 import gov.va.med.edp.util.Vista;
20 import gov.va.med.edp.widget.InfoDialog;
21 import gov.va.med.edp.widget.CenteredCheckBox;
22 import mx.collections.ArrayCollection;
23 import gov.va.med.edp.control.config.ConfigurationEvent;
24 import mx.core.UIComponent;
25 import mx.controls.CheckBox;
26 import mx.controls.ComboBox;
27 import mx.controls.TextInput;
28 import mx.events.CollectionEvent;
29 import mx.events.CollectionEventKind;
30 import gov.va.med.edp.model.TrackingModelLocator;
31 import gov.va.med.edp.control.config.ChangeBedSequenceEvent;
32 import gov.va.med.edp.control.config.SaveBedConfigEvent;
33 import gov.va.med.edp.control.config.AddBedEvent;
34 import gov.va.med.edp.vo.RoomBedVO;
35 import gov.va.med.edp.widget.ColorSelector;
36 import gov.va.med.edp.vo.ColorSelectionVO;
37 import gov.va.med.edp.util.AccessibilityTools;
38
39 [Embed(source="icon_close16.png")]
40 public var inactiveImg:Class;
41
42 public var activeImg:Class = Bitmap;
43
44 [Bindable]
45 private var model: TrackingModelLocator = TrackingModelLocator.getInstance();
46
47 private var reordering:Boolean = false;
48
49 private var _selectedBed:RoomBedVO;
50
51 private var newCount: int = 0;
52
53 private var validators:Array;
54
55 [Bindable(event="selectedBedChange")]
56 private function get selectedBed():RoomBedVO {
57 return _selectedBed;
58 }
59
60 private function set selectedBed(bed:RoomBedVO):void {
61 if (bed == null) {
62 if (reordering) {
63 callLater(reselect);
64 return;
65 }
66 } else if (bed === _selectedBed) {
67 if (reordering) reordering = false;
68 }
69 _selectedBed = bed;
70 dispatchEvent(new Event("selectedBedChange"));
71 }
72
73 private function reselect():void {
74 var index:int = grdBeds.dataProvider.getItemIndex(_selectedBed);
75 grdBeds.scrollToIndex(index);
76 grdBeds.selectedIndex = index;
77 model.config.bedMods = true;
78 }
79
80 private function init():void {
81 validators = [roomBedNameValidator, roomBedDisplayNameValidator];
82 }
83
84 private function selectedItemChanged(): void {
85 Validator.validateAll(validators);
86 }
87
88 private function inactiveImgFunction(o:Object, c:DataGridColumn):String {
89 var bed:RoomBedVO = o as RoomBedVO;
90 if (bed.inactive)
91 return "inactiveImg";
92 else
93 return "activeImg";
94 }
95
96 private function saveBeds(): void
97 {
98 // loop thru all beds checking for duplicates
99 var i: int;
100 var bed: RoomBedVO;
101 var empties: Boolean = false;
102 var dups: String = "";
103 var dflts: String = "";
104 for (i = 0; i < model.config.beds.source.length; i++) {
105 bed = model.config.beds.source[i] as RoomBedVO;
106 if (bed.name == null || bed.name.length == 0 || bed.displayName == null || bed.displayName.length == 0) {
107 empties = true;
108 break;
109 }
110 if (isDuplicate("name", bed.name, i) || isDuplicate("displayName", bed.displayName, i)) {
111 dups = dups + bed.name + ": " + bed.displayName + "\n";
112 }
113 if (bed.inactive && (bed.id == model.config.params.ambulanceArea)) {
114 dflts = dflts + bed.name + ": " + bed.displayName + "\n";
115 }
116 if (bed.inactive && (bed.id == model.config.params.defaultRoom)) {
117 dflts = dflts + bed.name + ": " + bed.displayName + "\n";
118 }
119 }
120 if (empties) {
121 InfoDialog.show("There are Room/Areas with blank names which must be corrected before saving.\n"
122 , "Required Names", false, btnSave);
123 return;
124 }
125 if (dups.length > 0) {
126 InfoDialog.show("The following duplicate names must be corrected before saving:\n"
127 + dups, "Duplicate Names", false, btnSave);
128 return;
129 }
130
131 if (dflts.length > 0) {
132 InfoDialog.show("The following are default rooms/areas and may not be inactivated:\n"
133 + dflts, "Default Rooms/Areas", false, btnSave);
134 return;
135 }
136
137 var saveEvent: SaveBedConfigEvent =
138 new SaveBedConfigEvent(SaveBedConfigEvent.EVENT_SAVE_CONFIG_BEDS);
139 saveEvent.dispatch();
140 }
141
142 private function addBed(): void
143 {
144 newCount++;
145 var addEvent: AddBedEvent = new AddBedEvent(AddBedEvent.EVENT_ADD_BED);
146 addEvent.newIndex = newCount;
147 addEvent.dispatch();
148 this.callLater(selectNewIndex, [model.config.beds.length]);
149 }
150
151 private function isDuplicate(field: String, value: String, index: int): Boolean
152 {
153 if (!((field == "name") || (field == "displayName"))) return false;
154
155 var bed: RoomBedVO;
156 for (var i: int = 0; i < model.config.beds.length; i++) {
157 if (i == index) continue;
158 bed = model.config.beds[i] as RoomBedVO;
159 if (bed[field].toLowerCase() == value.toLowerCase()) return true;
160 }
161 return false;
162 }
163
164 private function markChanged(event: Event): void
165 {
166 var bed: RoomBedVO = selectedBed;
167
168 if (event.currentTarget === nameInput) {
169 if (bed.name != nameInput.text) {
170 bed.name = nameInput.text;
171 bed.changed = true;
172 }
173 } else if (event.currentTarget === displayNameInput) {
174 if (bed.displayName != displayNameInput.text) {
175 bed.displayName = displayNameInput.text;
176 bed.changed = true;
177 }
178 } else if (event.currentTarget === whenChooser) {
179 if (bed.displayWhen != whenChooser.selectedItem.data) {
180 bed.displayWhen = int(whenChooser.selectedItem.data);
181 bed.changed = true;
182 }
183 } else if (event.currentTarget === statusChooser) {
184 if (bed.defaultStatus != statusChooser.selectedItem.data) {
185 bed.defaultStatus = statusChooser.selectedItem.data;
186 bed.changed = true;
187 }
188 } else if (event.currentTarget === inactiveCheckBox) {
189 if (bed.inactive != inactiveCheckBox.selected) {
190 bed.inactive = inactiveCheckBox.selected;
191 bed.changed = true;
192 }
193 } else if (event.currentTarget === roomCategoryChooser) {
194 if (bed.category != roomCategoryChooser.selectedItem.data) {
195 bed.category = int(roomCategoryChooser.selectedItem.data);
196 bed.changed = true;
197 }
198 } else if (event.currentTarget === sharedInput) {
199 if (bed.sharedName != sharedInput.text) {
200 bed.sharedName = sharedInput.text;
201 bed.changed = true;
202 }
203 } else if (event.currentTarget === boardInput) {
204 if (bed.boardName != boardInput.text) {
205 bed.boardName = boardInput.text;
206 bed.changed = true;
207 }
208 } else if (event.currentTarget === colorSelector) {
209 if (bed.color != colorSelector.color) {
210 bed.color.ignore = colorSelector.color.ignore;
211 bed.color.text = colorSelector.color.text;
212 bed.color.back = colorSelector.color.back;
213 bed.changed = true;
214 }
215 }
216 if (bed.changed) {
217 new ConfigurationEvent(ConfigurationEvent.EVENT_BED_MODIFIED).dispatch();
218 }
219 model.config.beds.refresh();
220 }
221
222 private function listOrderTextChanged(event:Event):void {
223 if (listOrderInput.text.length == 0) return;
224 var newIndex:int = int(listOrderInput.text) - 1;
225 if (newIndex < 0 || newIndex >= grdBeds.dataProvider.length) return;
226 if (newIndex != grdBeds.selectedIndex) {
227 reordering = true;
228 var changeEvent: ChangeBedSequenceEvent = new ChangeBedSequenceEvent(ChangeBedSequenceEvent.EVENT_CHANGE_BED_SEQUENCE);
229 changeEvent.newIndex = newIndex;
230 changeEvent.oldIndex = grdBeds.selectedIndex;
231 changeEvent.dispatch();
232 grdBeds.selectedIndex = -1;
233 }
234 }
235
236 private function selectNewIndex(newIndex: int): void
237 {
238 grdBeds.scrollToIndex(newIndex);
239 grdBeds.selectedIndex = newIndex;
240 }
241
242 private function refreshBedFilter(): void {
243 if (hideInactiveCheckBox.selected) {
244 model.config.beds.filterFunction = activeBedFilter;
245 } else {
246 model.config.beds.filterFunction = null;
247 }
248 model.config.beds.refresh();
249 }
250
251 private function activeBedFilter(item:Object): Boolean {
252 var roomBed : RoomBedVO = item as RoomBedVO;
253 return !roomBed.inactive;
254 }
255
256 private function keyDownHadler(event:KeyboardEvent): void {
257 if (event.keyCode == Keyboard.ESCAPE) {
258 update();
259 }
260 }
261
262 private function update():void {
263 if (btnSave.enabled)
264 btnSave.setFocus();
265 else
266 grdBeds.setFocus();
267 grdBeds.selectedIndex = -1;
268 }
269
270 private function doDragDrop(event:DragEvent):void {
271 reordering = true;
272 }
273
274 ]]>
275 </mx:Script>
276
277 <mx:VBox height="100%" width="100%">
278 <mx:HBox width="100%" verticalAlign="middle">
279 <mx:Button
280 label="Add Room/Area"
281 id="addRoomBtn"
282 click="addBed()"
283 tabIndex="1100"/>
284 <mx:Spacer width="100%"/>
285 <mx:Label
286 text="Rooms / Areas"
287 styleName="controlLabel"/>
288 <mx:Spacer width="100%"/>
289 <mx:CheckBox
290 id="hideInactiveCheckBox"
291 label="Hide Inactive"
292 click="refreshBedFilter()" visible="false"
293 tabIndex="1101"/>
294 </mx:HBox>
295
296 <mx:HBox width="100%" height="100%">
297 <mx:DataGrid
298 id="grdBeds"
299 accessibilityProperties="{bedGridAcc}"
300 width="100%" height="100%"
301 keyDown="keyDownHadler(event)"
302 change="selectedItemChanged()"
303 resizeEffect="{resizeEffect}"
304 editable="false"
305 sortableColumns="false"
306 dragEnabled="true"
307 dragMoveEnabled="true"
308 dropEnabled="true"
309 dragDrop="doDragDrop(event)"
310 dataProvider="{model.config.beds}"
311 tabIndex="1102">
312 <mx:columns>
313 <mx:DataGridColumn
314 width="100"
315 headerText="Name"
316 dataField="name"/>
317 <mx:DataGridColumn
318 width="72"
319 headerText="Display Name"
320 dataField="displayName"/>
321 <mx:DataGridColumn
322 width="72"
323 headerText="Display When"
324 dataField="displayWhen"
325 itemRenderer="gov.va.med.edp.widget.WhenRenderer"
326 visible="{currentState != 'editing'}"/>
327 <mx:DataGridColumn
328 width="90"
329 headerText="Default Status"
330 dataField="defaultStatus"
331 itemRenderer="gov.va.med.edp.widget.StatusRenderer"
332 visible="{currentState != 'editing'}"/>
333 <mx:DataGridColumn
334 width="40"
335 headerText="Inactive?"
336 dataField="inactive"
337 itemRenderer="gov.va.med.edp.widget.CenteredEmbedImage"
338 labelFunction="inactiveImgFunction"/>
339 <mx:DataGridColumn
340 width="80"
341 headerText="Category"
342 dataField="category"
343 itemRenderer="gov.va.med.edp.widget.RoomCategoryRenderer"
344 visible="{currentState != 'editing'}"/>
345 <mx:DataGridColumn
346 width="50"
347 headerText="Shared"
348 dataField="sharedName"
349 visible="{currentState != 'editing'}"/>
350 <mx:DataGridColumn
351 width="50"
352 headerText="Board"
353 dataField="boardName"
354 visible="{currentState != 'editing'}"/>
355 <mx:DataGridColumn
356 width="60"
357 headerText="Color"
358 dataField="color"
359 itemRenderer="gov.va.med.edp.widget.ColorSampleRenderer"/>
360 </mx:columns>
361 </mx:DataGrid>
362 </mx:HBox>
363
364 <mx:HBox width="100%" horizontalAlign="center" verticalAlign="middle">
365 <mx:Button
366 id="btnSave"
367 label="Save Room / Area Changes"
368 enabled="{(model.config.bedMods &amp;&amp; model.config.bedLoaded)}"
369 click="saveBeds()" tabIndex="1900"/>
370 </mx:HBox>
371 </mx:VBox>
372 <mx:states>
373 <mx:State name="editing">
374 <mx:AddChild relativeTo="{grdBeds}" position="after">
375 <mx:VBox id="roomBedForm">
376 <mx:Form>
377 <mx:FormHeading label="Room / Area Details"/>
378 <mx:FormItem label="Name">
379 <mx:TextInput id="nameInput" text="{selectedBed.name}" styleName="formField"
380 change="markChanged(event)" tabIndex="1200"/>
381 </mx:FormItem>
382 <mx:FormItem label="Display Name">
383 <mx:TextInput id="displayNameInput" text="{selectedBed.displayName}" styleName="formField"
384 change="markChanged(event)" tabIndex="1201"/>
385 </mx:FormItem>
386 <mx:FormItem label="Display When">
387 <mx:ComboBox id="whenChooser" dataProvider="{model.config.whenList}"
388 selectedIndex="{Vista.locateIndex(model.config.whenList, selectedBed.displayWhen)}"
389 styleName="formField" change="markChanged(event)" tabIndex="1202"/>
390 </mx:FormItem>
391 <mx:FormItem label="Default Status">
392 <mx:ComboBox id="statusChooser" dataProvider="{model.config.statusList}"
393 selectedIndex="{Vista.locateIndex(model.config.statusList, selectedBed.defaultStatus)}"
394 styleName="formField" change="markChanged(event)" tabIndex="1203"/>
395 </mx:FormItem>
396 <mx:FormItem label="Inactive?">
397 <mx:CheckBox id="inactiveCheckBox" selected="{selectedBed.inactive}" styleName="formField"
398 change="markChanged(event)" tabIndex="1204"/>
399 </mx:FormItem>
400 <mx:FormItem label="Category">
401 <mx:ComboBox id="roomCategoryChooser" dataProvider="{model.config.roomCategoryList}"
402 selectedIndex="{Vista.locateIndex(model.config.roomCategoryList, selectedBed.category)}"
403 styleName="formField" change="markChanged(event)" tabIndex="1205"/>
404 </mx:FormItem>
405 <mx:FormItem label="Shared Name">
406 <mx:TextInput id="sharedInput" text="{selectedBed.sharedName}" styleName="formField"
407 change="markChanged(event)" tabIndex="1206"/>
408 </mx:FormItem>
409 <mx:FormItem label="Use Board">
410 <mx:TextInput id="boardInput" text="{selectedBed.boardName}" styleName="formField"
411 change="markChanged(event)" tabIndex="1207"/>
412 </mx:FormItem>
413 <mx:FormItem label="Color">
414 <widget:ColorSelector id="colorSelector" styleName="formField" tabIndex="1208"
415 color="{selectedBed.color}" colorChange="markChanged(event)"/>
416 </mx:FormItem>
417 <mx:FormItem label="List Order" visible="{AccessibilityTools.isAccessibilityActive()}">
418 <mx:TextInput id="listOrderInput" styleName="formField" tabIndex="1220"
419 text="{model.config.beds.getItemIndex(selectedBed) + 1}"
420 change="listOrderTextChanged(event)"/>
421 </mx:FormItem>
422 </mx:Form>
423 <mx:Button id="updateBedButton" label="All Columns >>" click="update()"
424 tabIndex="1300"/>
425 </mx:VBox>
426 </mx:AddChild>
427 </mx:State>
428 </mx:states>
429
430 <mx:Resize id="resizeEffect" duration="200"/>
431
432 <config:DuplicateNameValidator id="roomBedNameValidator"
433 field="name"
434 beds="{model.config.beds}"
435 selectedBed="{selectedBed}"
436 source="{nameInput}"
437 property="text"/>
438 <config:DuplicateNameValidator id="roomBedDisplayNameValidator"
439 field="displayName"
440 beds="{model.config.beds}"
441 selectedBed="{selectedBed}"
442 source="{displayNameInput}"
443 property="text"/>
444 <mx:NumberValidator id="listOrderValidator" minValue="1" maxValue="{model.config.beds.length}"
445 source="{listOrderInput}" property="text"/>
446
447 <acc:AccessibilityProperties name="Up" id="upButtonAcc"/>
448 <acc:AccessibilityProperties name="Down" id="downButtonAcc"/>
449 <acc:AccessibilityProperties id="bedGridAcc" name="Rooms / Areas"/>
450
451 <mx:Binding source="RoomBedVO(grdBeds.selectedItem)" destination="selectedBed"/>
452</mx:HBox>
Note: See TracBrowser for help on using the repository browser.