diff --git a/03f2-code-behind/CodeBehindDisplay.mxml b/03f2-code-behind/CodeBehindDisplay.mxml new file mode 100644 index 0000000..1de0f37 --- /dev/null +++ b/03f2-code-behind/CodeBehindDisplay.mxml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/03f2-code-behind/CodeExample.mxml b/03f2-code-behind/CodeExample.mxml new file mode 100644 index 0000000..2809b01 --- /dev/null +++ b/03f2-code-behind/CodeExample.mxml @@ -0,0 +1,10 @@ + + + + + + diff --git a/03f2-code-behind/as_components/ComboBoxCodeBehind.as b/03f2-code-behind/as_components/ComboBoxCodeBehind.as new file mode 100644 index 0000000..01e3f51 --- /dev/null +++ b/03f2-code-behind/as_components/ComboBoxCodeBehind.as @@ -0,0 +1,105 @@ +package as_components +{ + import mx.containers.HBox; + import mx.controls.ComboBox; + import mx.events.FlexEvent; + import mx.events.ListEvent; + import mx.formatters.DateFormatter; + + [Bindable] + public class ComboBoxCodeBehind extends HBox + { + public var months:Array = new Array(); + public var dateformatter:DateFormatter = new DateFormatter(); + public var selectedIndex:int; + public var days:Array; + public var years:Array = new Array(); + public var monthsCB:ComboBox; + public var daysCB:ComboBox; + public var yearsCB:ComboBox; + public var selectedIndexYear:int; + public var selectedIndexMonth:int; + public var selectedIndexDay:int; + public var thisYear:int; + + + public function ComboBoxCodeBehind() + { + super(); + init(); + this.addEventListener(FlexEvent.CREATION_COMPLETE, creationCompleteHandler); + } + + private function init():void{ + var i:int; + var now:Date = new Date(); + + var currentMonth:int = now.getMonth(); + var currentYear:int = now.getFullYear(); + var currentDay:int = now.getDate(); + + thisYear = currentYear; + dateformatter.formatString = "MMMM"; + + for (i=0; i<12; i++){ + now.setMonth(i); + months[i] = dateformatter.format(now); + } + + setYears(currentYear); + setDays(currentMonth); + + selectedIndexMonth = currentMonth; + selectedIndexYear = years.indexOf(currentYear); + selectedIndexDay = days.indexOf(currentDay); + } + + private function creationCompleteHandler(event:FlexEvent):void{ + monthsCB.addEventListener(ListEvent.CHANGE,monthsHandler); + yearsCB.addEventListener(ListEvent.CHANGE, yearsHandler); + } + + + private function setDays(month:int):void{ + days = new Array(); + var i:int; + + if (month == 0 || month == 2 || month == 4 || month == 6 || month == 7 || month == 9 || month == 11){ + for(i=1; i<=31; i++) + days.push(i); + }else if (month == 3 || month == 5 || month == 8 || month == 10){ + for(i=1; i<=30; i++) + days.push(i); + }else if (month == 1){ + if (thisYear % 4 == 0){ + for(i=1; i<=29; i++) + days.push(i); + }else{ + for(i=1; i<=28; i++) + days.push(i); + } + } + } + + private function setYears(year:int):void{ + var j:int; + for(j=1950; j<=year; j++){ + years.push(j); + } + } + + private function monthsHandler(event:ListEvent):void{ + setDays(event.currentTarget.selectedIndex); + selectedIndexDay = 0; + } + + private function yearsHandler(event:ListEvent):void{ + if (monthsCB.selectedIndex == 1){ + var selectedDay:int = daysCB.selectedIndex; + thisYear = event.currentTarget.selectedItem as int; + setDays(monthsCB.selectedIndex); + selectedIndexDay = selectedDay; + } + } + } +} diff --git a/mktargets.py b/mktargets.py index 7b24179..69ef13d 100755 --- a/mktargets.py +++ b/mktargets.py @@ -5,15 +5,16 @@ import os import re import sys import glob +from fnmatch import fnmatch from os.path import join as pathjoin, relpath, dirname, \ - abspath, basename, splitext + abspath, basename, splitext HERE = dirname(abspath(__file__)) AUTOGEN_WARNING = ('# ******** AUTOGENERATED by {0} ' + ('*' * 20)).format(basename(sys.argv[0])) PATTERN_RULE_MXMLC = \ - '$(MXMLC) {firstdep} -warnings -l+={parent_dir} -output {target}' + '$(MXMLC) {primary_dep} -warnings -l+={parent_dir} -output {target}' def main(sysargs=sys.argv[:]): @@ -53,22 +54,52 @@ class TargetMaker(object): basedir = dirname(rel_mxml) for dirpath, dirnames, filenames in os.walk(basedir): for filename in filenames: - if splitext(filename)[-1] in self._source_fileexts: + if ext(filename) in self._source_fileexts: rel_source = relpath(pathjoin(dirpath, filename), HERE) self.targets[as_swf].add(rel_source) def _write_out_targets(self): print(AUTOGEN_WARNING, file=self.outstream) for target in sorted(self.targets.iterkeys()): - deps = list(reversed(sorted(list(self.targets[target]), - key=lambda d: splitext(d)[-1]))) + deps = self._get_deps_for_target(target) + primary_dep = self._get_primary_dep(target, deps) + pattern_rule_kwargs = \ + self._get_pattern_rule_kwargs(primary_dep, target) + print('{target}: {deps}'.format(target=target, deps=' '.join(deps)), file=self.outstream) - print('\t' + - PATTERN_RULE_MXMLC.format(firstdep=deps[0], - parent_dir=dirname(deps[0]), - target=target) + - '\n\n', file=self.outstream) + print('\t' + PATTERN_RULE_MXMLC.format(**pattern_rule_kwargs) + + '\n\n', file=self.outstream) + + def _get_deps_for_target(self, target): + deps = [] + for dep in reversed(sorted(list(self.targets[target]), key=ext)): + deps.append(dep) + return deps + + def _get_primary_dep(self, target, deps): + primary_dep = deps[0] + + for dependency in deps: + if fnmatch(target, namebase(dependency) + '.*'): + primary_dep = dependency + + return primary_dep + + def _get_pattern_rule_kwargs(self, primary_dep, target): + ret = dict( + primary_dep=primary_dep, + parent_dir=dirname(primary_dep), + target=target + ) + return ret + +def ext(filename): + return splitext(filename)[-1] + + +def namebase(filename): + return splitext(filename)[0] if __name__ == '__main__': diff --git a/targets.mk b/targets.mk index 9927802..48f5446 100644 --- a/targets.mk +++ b/targets.mk @@ -1,6 +1,6 @@ # ******** AUTOGENERATED by mktargets.py ******************** 01-flickr/FlickrRIA.swf: 01-flickr/FlickrThumbnail.mxml 01-flickr/FlickrRIA.mxml - $(MXMLC) 01-flickr/FlickrThumbnail.mxml -warnings -l+=01-flickr -output 01-flickr/FlickrRIA.swf + $(MXMLC) 01-flickr/FlickrRIA.mxml -warnings -l+=01-flickr -output 01-flickr/FlickrRIA.swf 01-flickr/FlickrThumbnail.swf: 01-flickr/FlickrThumbnail.mxml 01-flickr/FlickrRIA.mxml @@ -32,7 +32,7 @@ 03a5-local-connections/TaskSender.swf: 03a5-local-connections/BasicTaskReceiver.mxml 03a5-local-connections/TaskSender.mxml - $(MXMLC) 03a5-local-connections/BasicTaskReceiver.mxml -warnings -l+=03a5-local-connections -output 03a5-local-connections/TaskSender.swf + $(MXMLC) 03a5-local-connections/TaskSender.mxml -warnings -l+=03a5-local-connections -output 03a5-local-connections/TaskSender.swf 03a6-shared-objects/SharedObjectExample.swf: 03a6-shared-objects/SharedObjectExample.mxml @@ -60,7 +60,7 @@ 03b3-simple-ui-event/Example2.swf: 03b3-simple-ui-event/Example1.mxml 03b3-simple-ui-event/Example2.mxml - $(MXMLC) 03b3-simple-ui-event/Example1.mxml -warnings -l+=03b3-simple-ui-event -output 03b3-simple-ui-event/Example2.swf + $(MXMLC) 03b3-simple-ui-event/Example2.mxml -warnings -l+=03b3-simple-ui-event -output 03b3-simple-ui-event/Example2.swf 03c1-application-container/Demo.swf: 03c1-application-container/Demo.mxml @@ -68,7 +68,7 @@ 03c2-box-model/HBoxExample.swf: 03c2-box-model/VBoxExample.mxml 03c2-box-model/VBoxHBoxCombo.mxml 03c2-box-model/HBoxExample.mxml - $(MXMLC) 03c2-box-model/VBoxExample.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/HBoxExample.swf + $(MXMLC) 03c2-box-model/HBoxExample.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/HBoxExample.swf 03c2-box-model/VBoxExample.swf: 03c2-box-model/VBoxExample.mxml 03c2-box-model/VBoxHBoxCombo.mxml 03c2-box-model/HBoxExample.mxml @@ -76,7 +76,7 @@ 03c2-box-model/VBoxHBoxCombo.swf: 03c2-box-model/VBoxExample.mxml 03c2-box-model/VBoxHBoxCombo.mxml 03c2-box-model/HBoxExample.mxml - $(MXMLC) 03c2-box-model/VBoxExample.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/VBoxHBoxCombo.swf + $(MXMLC) 03c2-box-model/VBoxHBoxCombo.mxml -warnings -l+=03c2-box-model -output 03c2-box-model/VBoxHBoxCombo.swf 03c3-canvas-absolute/Example.swf: 03c3-canvas-absolute/Example.mxml @@ -116,11 +116,11 @@ 03d2-item-renderers/WeatherDisplay.swf: 03d2-item-renderers/HBoxWeatherDisplay.mxml 03d2-item-renderers/WeatherDisplay.mxml - $(MXMLC) 03d2-item-renderers/HBoxWeatherDisplay.mxml -warnings -l+=03d2-item-renderers -output 03d2-item-renderers/WeatherDisplay.swf + $(MXMLC) 03d2-item-renderers/WeatherDisplay.mxml -warnings -l+=03d2-item-renderers -output 03d2-item-renderers/WeatherDisplay.swf 03d3-lists/HorizontalListControl.swf: 03d3-lists/ListControl.mxml 03d3-lists/HorizontalListControl.mxml - $(MXMLC) 03d3-lists/ListControl.mxml -warnings -l+=03d3-lists -output 03d3-lists/HorizontalListControl.swf + $(MXMLC) 03d3-lists/HorizontalListControl.mxml -warnings -l+=03d3-lists -output 03d3-lists/HorizontalListControl.swf 03d3-lists/ListControl.swf: 03d3-lists/ListControl.mxml 03d3-lists/HorizontalListControl.mxml @@ -140,7 +140,7 @@ 03e2-tabbar-linkbar/TabBarDemo.swf: 03e2-tabbar-linkbar/LinkBar.mxml 03e2-tabbar-linkbar/TabBarDemo.mxml - $(MXMLC) 03e2-tabbar-linkbar/LinkBar.mxml -warnings -l+=03e2-tabbar-linkbar -output 03e2-tabbar-linkbar/TabBarDemo.swf + $(MXMLC) 03e2-tabbar-linkbar/TabBarDemo.mxml -warnings -l+=03e2-tabbar-linkbar -output 03e2-tabbar-linkbar/TabBarDemo.swf 03e3-tabnavigator/Shopping.swf: 03e3-tabnavigator/Shopping.mxml @@ -155,6 +155,14 @@ $(MXMLC) 03f1-custom-components/MainForm.mxml -warnings -l+=03f1-custom-components -output 03f1-custom-components/MainForm.swf +03f2-code-behind/CodeBehindDisplay.swf: 03f2-code-behind/CodeBehindDisplay.mxml 03f2-code-behind/CodeExample.mxml 03f2-code-behind/as_components/ComboBoxCodeBehind.as + $(MXMLC) 03f2-code-behind/CodeBehindDisplay.mxml -warnings -l+=03f2-code-behind -output 03f2-code-behind/CodeBehindDisplay.swf + + +03f2-code-behind/CodeExample.swf: 03f2-code-behind/CodeBehindDisplay.mxml 03f2-code-behind/CodeExample.mxml 03f2-code-behind/as_components/ComboBoxCodeBehind.as + $(MXMLC) 03f2-code-behind/CodeExample.mxml -warnings -l+=03f2-code-behind -output 03f2-code-behind/CodeExample.swf + + custom-03d1-datagrid/Snarf.swf: custom-03d1-datagrid/Snarf.mxml custom-03d1-datagrid/CustomApp.as $(MXMLC) custom-03d1-datagrid/Snarf.mxml -warnings -l+=custom-03d1-datagrid -output custom-03d1-datagrid/Snarf.swf @@ -164,7 +172,7 @@ custom-03d2-item-renderers/HBoxWeatherDisplay.swf: custom-03d2-item-renderers/HB custom-03d2-item-renderers/WeatherDisplay.swf: custom-03d2-item-renderers/HBoxWeatherDisplay.mxml custom-03d2-item-renderers/WeatherDisplay.mxml custom-03d2-item-renderers/WeatherApp.as - $(MXMLC) custom-03d2-item-renderers/HBoxWeatherDisplay.mxml -warnings -l+=custom-03d2-item-renderers -output custom-03d2-item-renderers/WeatherDisplay.swf + $(MXMLC) custom-03d2-item-renderers/WeatherDisplay.mxml -warnings -l+=custom-03d2-item-renderers -output custom-03d2-item-renderers/WeatherDisplay.swf custom-03d3-lists/ListControl.swf: custom-03d3-lists/ListControl.mxml custom-03d3-lists/listapp.css custom-03d3-lists/ListApp.as