/* * main.as * demonstration of Flash application connecting to Drupal * * by joe turgeon (http://arithmetric.com) */ package { import flash.display.*; import flash.text.*; import flash.events.Event; import flash.net.Responder; import drupal.Drupal; public class main extends MovieClip { private var drupal:Drupal; private var gatewayUrl:String = "http://localhost/services/amfphp/gateway.php"; private var apiKey:String = ""; private var style:StyleSheet; private var menu:Menu; public function main() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.quality = StageQuality.BEST; setStyles(); menu = new Menu(stage.stageWidth/4, style); menu.x = 16; menu.y = 16; addChild(menu); // initialize drupal object and begin session drupal = new Drupal(); drupal.gatewayUrl = gatewayUrl; drupal.apiKey = apiKey; drupal.connect(cbConnect); } private function setStyles() { style = new StyleSheet(); var s1:Object = new Object(); s1.fontFamily = "sans-serif"; style.setStyle("BODY", s1); style.setStyle("LI", s1); var s2:Object = new Object(); s2.color = "#aa0000"; style.setStyle("A", s2); } private function cbConnect():void { // send request drupal.service(cbArticles, onFault, "views.getView", "articles"); } private function cbArticles(result:Object):void { for (var i = 0; i < result.length; i++) { menu.addItem(result[i].nid, result[i].title, result[i].body); } } private function onFault(error:Object):void { trace('error: drupal services'); for each (var item in error) { trace(item); } } } } import flash.display.*; import flash.text.*; import flash.events.MouseEvent; import flash.geom.Point; import caurina.transitions.Tweener; class Menu extends Sprite { private var mTitle:Array; private var mBody:Array; private var mItem:Array; private var mNum:Number; private var mWidth:Number; private var mStyle:StyleSheet; private var body:Sprite; private var bText:TextField; private var bScroll:Scroller; public function Menu(w:Number, style:StyleSheet) { mTitle = new Array(); mBody = new Array(); mItem = new Array(); mNum = 0; mWidth = w; mStyle = style; // body = new Sprite(); bText = new TextField(); bText.multiline = true; bText.wordWrap = true; bText.selectable = false; bText.styleSheet = style; body.addChild(bText); } public function addItem(id:Number, title:String, body:String) { mTitle[id] = title; mBody[id] = body; var obj:MenuItem = new MenuItem(id, title, mWidth, mStyle); obj.x = 0; obj.y = mNum * obj.previewHeight; obj.addEventListener(MouseEvent.CLICK, onclick); obj.addEventListener(MouseEvent.ROLL_OVER, onrollover); obj.addEventListener(MouseEvent.ROLL_OUT, onrollout); obj.buttonMode = true; addChild(obj); mItem[id] = obj; mNum++; } private function onclick(ev:MouseEvent) { var obj = getmenuitem(ev.target); body.x = obj.x + obj.previewWidth + 16; body.y = 0; bText.width = stage.stageWidth - body.x - 48; bText.height = stage.stageHeight - body.y - 32; bText.htmlText = '' + mTitle[obj.id] + '
' + mBody[obj.id] + ''; if (bScroll && body.contains(bScroll)) { body.removeChild(bScroll); } if (bText.textHeight > bText.height) { bScroll = new Scroller(bText, 12, bText.height); bScroll.x = bText.x + bText.width + 8; bScroll.y = bText.y; body.addChild(bScroll); } addChild(body); } private function onrollover(ev:MouseEvent) { var obj = getmenuitem(ev.target); graphics.clear(); graphics.lineStyle(1, 0, 1); graphics.drawRect(obj.x, obj.y, obj.previewWidth, obj.previewHeight); } private function onrollout(ev:MouseEvent) { graphics.clear(); } private function getmenuitem(obj) { while (obj is DisplayObject) { if (obj is MenuItem) { break; } obj = obj.parent; } return obj; } } class MenuItem extends Sprite { public var id:Number; private var txt:TextField; private var smask:Sprite; public var previewWidth:Number; public var previewHeight:Number; public function MenuItem(idx:Number, title:String, w:Number, style:StyleSheet) { // id = idx; // txt = new TextField(); txt.styleSheet = style; txt.htmlText = '' + title + ''; txt.y = txt.textHeight / 4; txt.width = w; txt.selectable = false; addChild(txt); // previewWidth = w; previewHeight = txt.textHeight * 3/2; // smask = new Sprite(); smask.graphics.beginFill(0xffffff, 1); smask.graphics.drawRect(0, 0, previewWidth, previewHeight); smask.graphics.endFill(); addChild(smask); mask = smask; } } class Scroller extends Sprite { private var pos:Number = 0; private var spr:Sprite; private var w:Number; private var h:Number; private var offx:Number; private var offy:Number; private var buttonh:Number; private var txt:TextField; public function Scroller(tf:TextField, wx:Number, hx:Number) { // txt = tf; w = wx; h = hx; // var per:Number = txt.height / txt.textHeight; if (per > 1) { per = 1; } buttonh = per * h; spr = new Sprite(); spr.graphics.beginFill(0, .7); spr.graphics.drawRect(w/4, 0, w/2, buttonh); spr.graphics.endFill(); spr.buttonMode = true; addChild(spr); spr.addEventListener(MouseEvent.MOUSE_DOWN, onmousedown); spr.addEventListener(MouseEvent.MOUSE_UP, onmouseup); // update(); } public function set value(val:Number) { if (val > 0 && val < 100) { pos = val; update(); } } public function get value() { return pos; } private function update() { graphics.clear(); graphics.lineStyle(1, 0, 1); graphics.moveTo(w/2, 0); graphics.lineTo(w/2, h); } private function onmousedown(Event:MouseEvent) { offx = Event.localX; offy = Event.localY; stage.addEventListener(MouseEvent.MOUSE_MOVE, onmousemove); stage.addEventListener(MouseEvent.MOUSE_UP, onmouseup); Event.stopPropagation(); } private function onmousemove(Event:MouseEvent) { var p:Point = new Point(Event.stageX, Event.stageY); p = globalToLocal(p); spr.x = p.x - offx; spr.y = p.y - offy; if (spr.x != 0) { spr.x = 0; } if (spr.y < 0) { spr.y = 0; } if (spr.y + buttonh > h) { spr.y = h - buttonh; } // pos = Math.ceil(spr.y / (h - buttonh) * 100); // var newV:Number = pos / 100 * txt.maxScrollV; Tweener.addTween(txt, {scrollV: newV, time:0.2, transition:"easeInOutCubic"}); // Event.stopPropagation(); } private function onmouseup(e:MouseEvent) { // stage.removeEventListener(MouseEvent.MOUSE_MOVE, onmousemove); stage.removeEventListener(MouseEvent.MOUSE_UP, onmouseup); } }