
Реализация классов
На рисунке 1 представлена диаграмма классов разрабатываемой информационной системы.
Рисунок 5 – Диаграмма классов
Мною были реализованы следующие 2 класса – Book, BookExample.
Класс Book
package gadgets.book
{
import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.geom.*;
import flash.text.*;
/**
* генерируется, когда страница перевернута и прибыла на место
* @eventType book.events.BookEvent
*/
[Event(name = "flip", type = "silin.book.events.BookEvent")]
/**
* генерируется при смене страницы(разворота)
* @eventType book.events.BookEvent
*/
[Event(name = "changePage", type = "silin.book.events.BookEvent")]
/**
* имитация листания страниц <br/>
* листается только за нижнию часть страниц<br/>
*/
public class Book extends Sprite
{
/**
* режим переворачивания сразу на заданную страницу
*/
public static const JUMP:String = "jump";
/**
* режим постраничного переворачивания до заданной страницы
*/
public static const LEAF:String = "leaf";
/**
* режим переворачивания: <br/>
* LEAF-перелистывание по одной;<br/>
* JUMP-сразу пачкой.
*/
public var mode:String = JUMP;
/**
* класс диплейОбжекта для прелоадера контента страниц
*/
public var preloaderIcon:Class;
/**
* класс диплейОбжекта для для отображения облома загрузки
*/
public var errorIcon:Class;
//приваты сеттеров
private var _paper:BitmapData;
private var _wheelLeaf:Boolean = true;
private var _mouseLeaf:Boolean = true;
private var _contentLeaf:Boolean = false;
private var _turnSpeed:Number = 6;
private var _leftPage:PageTemplet = new PageTemplet();
private var _rightPage:PageTemplet = new PageTemplet();
private var _backSide:PageTemplet = new PageTemplet();
private var _nextSide:PageTemplet = new PageTemplet();
private var _backMask:PageMask=new PageMask();
private var _nextMask:PageMask=new PageMask();
private var _rightMask:PageMask = new PageMask();
private var _shadow:Shape=new Shape();
private var _pageW:Number;
private var _pageH:Number;
private var _pageD:Number;
private var _bookW:Number;
private var _targetPoint:Point = new Point();
private var _cornerPoint:Point = new Point();
private var _autoPoint:Point = new Point();
private var _bottomPoint:Point = new Point();
private var _mouseDownPoint:Point;
private var _pagePoints:Array;
private var _flipTarget:int = -1;//-1 нет вертелки
private var _dir:Boolean;
private var _drag:Boolean=false;
private var _changed:Boolean = false;//страница сменилась во время манипуляций
static private const SHADOW:DropShadowFilter = new DropShadowFilter(3, 140, 0x666666, 0.3, 16, 16);
static private const GLOW:GlowFilter = new GlowFilter(0x666666, 0.5, 5, 5, 2, 3);
static private const BLUR:BlurFilter = new BlurFilter(16, 16);
private var _currentPage:int=-1;
private var _dataProvider:Array/*PageContent*/=[];
private var _queueArr:Array;
/**
* constructor
*/
public function Book(width:Number=0, height:Number=0)
{
_leftPage.filters = [GLOW];
_rightPage.mask = _rightMask;
_rightPage.filters = [GLOW];
_nextSide.mask = _nextMask;
_backSide.mask = _backMask;
_backSide.filters = [SHADOW];
_shadow.filters = [BLUR];
addChild(_leftPage);
addChild(_rightPage);
addChild(_shadow);
addChild(_nextSide);
addChild(_backSide);
addChild(_rightMask);
addChild(_nextMask);
addChild(_backMask);
if (width && height)
{
setSize(width, height);
}
addEventListener(Event.ADDED_TO_STAGE, onStage);
}
/**
* установка размеров
* @param pageWidth
* @param pageHeight
*/
public function setSize(pageWidth:Number, pageHeight:Number):void
{
_pageW = pageWidth;
_pageH = pageHeight;
_pageD = Math.sqrt(_pageW * _pageW + _pageH * _pageH);
_bookW = 2 * _pageW;
_rightPage.x = _pageW;
_nextSide.x = _pageW;
_targetPoint = new Point(_bookW, _pageH);
_cornerPoint = new Point(_bookW, _pageH);
_autoPoint = null;
_leftPage.y = _pageH;
_rightPage.y = _pageH;
_backSide.y = _pageH;
_nextSide.y = _pageH;
_rightPage.setSize(_pageW, _pageH);
_leftPage.setSize(_pageW, _pageH);
_backSide.setSize(_pageW, _pageH);
_nextSide.setSize(_pageW, _pageH);
}
/**
* добавляет страницу(экземпляр PageContent) в конец
* @param data
*/
public function addPage(data:PageContent):void
{
_dataProvider.push(data);
startRender();
//добавляем индекс в очередь загрузки
_queueArr.push(_dataProvider.length - 1 );
//если очередь была пуста (загрузка закончилась уже), то стартуем загрузку
if (_queueArr.length == 1)
{
loadCurrent();
}
}
/**
* переход на страницу num
* @param num
*/
public function gotoPage(num:int):void
{
mode == JUMP ? jumpToPage(num) : leafToPage(num);
}
/**
* переход на следующую
*/
public function nextPage():void
{
jumpToPage(currentPage + 2);
}
/**
* переход на предыдущую
*/
public function prevPage():void
{
jumpToPage(currentPage-2);
}
/**
* переход последнюю страницу
*/
public function lastPage():void
{
gotoPage(length - 1);
}
/**
* переход на первую страницу
*/
public function firstPage():void
{
gotoPage(0);
}
//инициализация листенеров при добавлении на сцену
private function onStage(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onStage);
if(_wheelLeaf) addEventListener(MouseEvent.MOUSE_WHEEL, omMouseWheel);
if(_mouseLeaf) addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onStageMouseUp);
}
//глобальный MouseUp
private function onStageMouseUp(e:MouseEvent):void
{
removeEventListener(MouseEvent.MOUSE_MOVE, onMouseDrag);
var rightSide:Boolean = (mouseX > _pageW);
if (!_drag) return;//если отпускаем не по делу
_drag = false;
_targetPoint = new Point( rightSide ? 2 * _pageW : 0, _pageH);
// меняем разворот, если отпустили на другой стороне
if (_dir != rightSide) {
_currentPage += rightSide ? -2 : 2;
dispatchEvent(new BookEvent(BookEvent.CHANGE_PAGE, _currentPage));
_changed = true;
}else {
_dir = !_dir;
}
}
//обработчик колеса мыши
private function omMouseWheel(evnt:MouseEvent):void
{
evnt.delta < 0 ? nextPage() : prevPage();
}
//локальный MouseDown самой книги
private function onMouseDown(e:MouseEvent):void
{
//ситуация: не ворочаем за кконтент и клик приходится на кого-то из детей
if (!_contentLeaf && e.target != this) return;
//стартуем переворачивание только если потянули, а иначе пусть будет клик или что там еще надо
addEventListener(MouseEvent.MOUSE_MOVE, onMouseDrag);
}
//обработчик движения мыши в нажатом состоянии
private function onMouseDrag(evnt:MouseEvent):void
{
removeEventListener(MouseEvent.MOUSE_MOVE, onMouseDrag);
_dir = mouseX > _pageW;
//некуда крутить
if (_dir && currentPage > length - 3 || !_dir && currentPage == 0) return;
_flipTarget = -1;
_drag=true;
_targetPoint=new Point(_dir ? 0 : _bookW, _pageH);
_cornerPoint = new Point(_dir ? _bookW : 0, _pageH);
//расставляем контент
if (_dir)
{
setContent(currentPage+3, currentPage+2, currentPage, currentPage+1);
}else{
setContent(currentPage+1, currentPage, currentPage-2, currentPage-1);
}
startRender();// _needRender = true;
render();
}
//расставляет битмапы по местам
private function setContent(next:int, back:int, left:int, right:int):void
{
if (next > length-1) next = -1;
if (back > length-1) back = -1;
if (left > length-1) left = -1;
if (right > length-1) right = -1;
_nextSide.setContent(next);
_backSide.setContent(back);
_leftPage.setContent(left);
_rightPage.setContent(right);
}
//переворот на заданную
private function jumpToPage(page:int):void
{
if (running) return; //игнор во время переворота
var dn:int = page - (page % 2) - currentPage;//на сколько вертеть (с учетом нечета)
var valid:Boolean = dn != 0 && page >= 0 && page < length;
if (!valid) return;//не надо ничего
_dir = dn > 0;
_autoPoint = new Point(0.25 * _pageW, _pageH / 2);
_cornerPoint = new Point(_dir ? 2 * _pageW:0, _pageH);
_targetPoint = new Point(_dir ? 0 : 2 * _pageW, _pageH);
var oldPage:int = currentPage;
currentPage += dn;
if (_dir )
{
setContent(currentPage + 1, currentPage, oldPage, oldPage + 1);
}else{
setContent(oldPage + 1, oldPage, currentPage, currentPage + 1);
}
dispatchEvent(new BookEvent(BookEvent.CHANGE_PAGE, _currentPage));
_changed = true;
startRender();// _needRender = true;
_flipTarget = -1;//прекращаем последовательное перелистывание
}
// старт перелистывания
private function leafToPage(page:int):void
{
_flipTarget = 2 * Math.floor(page / 2);// совместимость с currentPage
nextFlip();
}
//следующий шаг, если включена листалка
private function nextFlip():void
{
if (_flipTarget == currentPage)
{
_flipTarget = -1;
return;
}
var tmpTarget:int = _flipTarget;//jumpToPage обнуляет _flipTarget, а здесь этого не надо
currentPage > _flipTarget ? prevPage() : nextPage();
_flipTarget = tmpTarget;
}
private function startRender():void
{
addEventListener(Event.ENTER_FRAME, render);
}
private function stopRender():void
{
removeEventListener(Event.ENTER_FRAME, render);
}
private function render(e:Event=null):void
{
var mtrx:Matrix;
var gr:Graphics;
if(_drag) {
_targetPoint = _autoPoint || new Point(Math.max(0, Math.min(mouseX, _bookW - 8)), mouseY);
}
var pos:Number = _cornerPoint.x / _bookW;
var easy:Number = 1 + (_dir ? 1.25 * pos : 1 - pos) * _turnSpeed;
if(_autoPoint){
_autoPoint.x += (_targetPoint.x - _autoPoint.x) / easy;
_autoPoint.y += (_targetPoint.y - _autoPoint.y) / easy;
}
var targ:Point = _autoPoint || _targetPoint;
_cornerPoint.x += (targ.x - _cornerPoint.x) / easy;
_cornerPoint.y += (targ.y - _cornerPoint.y) / easy;
_bottomPoint = new Point(Math.max((_bookW + _cornerPoint.x)/2,_pageW),_pageH);// нельзя оторвать нижний переплет
////центральный угол
setDist(_cornerPoint, _bottomPoint, _bookW - _bottomPoint.x);//не дальше ширины..
setDist(_cornerPoint, new Point(_pageW, 0), _pageD);//не дальще диагонали от верхнего переплета
//разворачиваем-ставим
_backSide.rotation = Math.max( -40, 180 / Math.PI * angle(_bottomPoint, _cornerPoint));
_backSide.x = _cornerPoint.x;
_backSide.y = _cornerPoint.y;
var dPoint:Point = _backSide.pointToParent(new Point(_pageW, -_pageH));
var corrX:Number = _pageW - dPoint.x;
if(corrX>0){
_backSide.x = _cornerPoint.x += corrX;
_backSide.y = _cornerPoint.y -= dPoint.y;
_bottomPoint.x += corrX;
}
_pagePoints = [new Point(0, 0), new Point(0, -_pageH), new Point(_pageW, -_pageH), new Point(_pageW, 0)];
for (var i:int = 0; i < 4; i++)
{
_pagePoints[i] = _backSide.pointToParent(_pagePoints[i]);
}
var xR:Point = getRightCross();
var xT:Point = getTopCross();
//nextPage mask
var nextMaskArr:Array = [_bottomPoint, new Point(_bookW, _pageH)];
if(xR){
nextMaskArr.push(xR);
}else{
nextMaskArr.push(new Point(_bookW, 0));
nextMaskArr.push(xT);
}
_nextMask.drawPoly(nextMaskArr);
//_backSide mask
var backMaskArr:Array = [_cornerPoint, _bottomPoint];
if(xR){
backMaskArr.push(xR);
}else{
backMaskArr.push(xT);
backMaskArr.push(_pagePoints[1]);
}
_backMask.drawPoly(backMaskArr);
//_rightPage mask
var backCover:Boolean = _backSide.page == length - 1;
var rightMaskArr:Array = [new Point(_pageW, 0), new Point(_pageW, _pageH)];
if (backCover)
{
rightMaskArr.push(_bottomPoint);
if (xR) rightMaskArr.push(xR,new Point(_bookW, 0));
rightMaskArr.push(xT);
}else
{
rightMaskArr.push(new Point(_bookW, _pageH), new Point(_bookW, 0));
}
_rightMask.drawPoly(rightMaskArr);
var kAdabt:Number = _cornerPoint.x < _pageW ? _cornerPoint.x / _pageW : 1;
var sw:Number = Point.distance(_cornerPoint, _bottomPoint);
var sw1:Number = xR ? 0 : Point.distance(xT, _pagePoints[1]);
sw *= kAdabt;
sw1 *= kAdabt;
var sh:Number = Point.distance(_bottomPoint, xR || xT);
_shadow.rotation = 270 + 180 / Math.PI * angle(_bottomPoint, xR || xT);
var fi:Number = -Math.PI / 180 * _shadow.rotation;
mtrx= new Matrix();
mtrx.createGradientBox(sw, sh, fi, 0, 0);
gr = _shadow.graphics;
gr.clear();
gr.beginGradientFill(GradientType.LINEAR, [0, 0], [0.1, 0], [0x00, 0xCC], mtrx);
gr.lineTo(sw, 0);
gr.lineTo(sw1, -sh);
gr.lineTo(0, -sh);
gr.lineTo(0, 0);
gr.endFill();
_shadow.x = _bottomPoint.x;
_shadow.y = _bottomPoint.y;
var maxAlpha:Number=_cornerPoint.x/_pageW;//макс. альфа
var tp:Point=backMaskArr[3]||backMaskArr[2];
fi= Math.atan2(backMaskArr[2].x+tp.x-_bottomPoint.x-_cornerPoint.x,backMaskArr[2].y+tp.y-_bottomPoint.y-_cornerPoint.y);
sw=Math.max(Point.distance(_bottomPoint,_cornerPoint),Point.distance(_pagePoints[1],xT))+10;
sh = _pageH;
gr = _backSide.shade.graphics;
gr.clear();
mtrx = new Matrix();
mtrx.createGradientBox(sw, sh, fi, 0, 0);
gr.beginGradientFill(GradientType.LINEAR, [0, 0xFFFFFF, 0], [0.05, 0.25 * kAdabt, 0.05], [0, 0x66, 0xff], mtrx );
gr.moveTo( -5, 0);
gr.lineTo(sw, 0);
gr.lineTo(sw, sh);
gr.lineTo( -5, sh);
gr.lineTo( -5, 0);
gr.endFill();
gr.endFill();
if (!_drag && Point.distance(_cornerPoint, _targetPoint) < 1 && _shadow.rotation >= 0)
{
currentPage = _currentPage;
_autoPoint = null;
_shadow.graphics.clear();
if (_changed) {
dispatchEvent(new BookEvent(BookEvent.FLIP, currentPage));
_changed = false;
}
if (_flipTarget >= 0) //если включена последовательная листалка, запускаем следующий переворот
{
nextFlip();
_backMask.clear();
_nextMask.clear();
render();
}else//или останавливаем все
{
setContent( -1, -1, _currentPage, _currentPage + 1);
stopRender();
}
}
}
//пересечение с верхней кромкой
private function getTopCross():Point
{
var p3:Point = _pagePoints[1];
var p4:Point = _pagePoints[2];
var x:Number;
if(Math.abs(p4.y-p3.y)<30) {
x = _bottomPoint.x + (_pagePoints[1].x - _pagePoints[0].x) / 2;
}else{
var b:Number = (p4.y - p3.y) / (p4.x - p3.x);
var a:Number = p3.y - b * p3.x;
x = -a / b;
}
if(x<_pageW)x=_pageW;
return new Point(x,0);
}
//пересечение с правой кромкой
private function getRightCross():Point
{
var p3:Point = _pagePoints[0];
var p4:Point = _pagePoints[1];
if (p4.x == p3.x) return p4.x == 2 * _pageW ? new Point(_bookW, 0) : null;
var b:Number = (p4.y - p3.y) / (p4.x - p3.x);
var p:Point = new Point(2 * _pageW, p3.y + b * (2 * _pageW - p3.x));
if (p.y<0 || p.y>_pageH) return null;
return p;
}
//создает очередь загрузки и запускает, если есть чего
private function createQueue():void
{
_queueArr = [];
var data:PageContent;
for (var i:int = 0; i < _dataProvider.length; i++)
{
data = _dataProvider[i];
//если есть урл, пихаем в очередь
if (data && data.url)_queueArr.push(i);
}
if (_queueArr.length)
{
_queueArr.sort(sortFunction);
loadCurrent();
}
}
//грузит первую из очереди
private function loadCurrent():void
{
var content:PageContent = _dataProvider[_queueArr.shift()];
content.addEventListener(Event.COMPLETE, shiftQueue);
content.addEventListener(IOErrorEvent.IO_ERROR, shiftQueue);
content.load();
}
//обработчик зпгрузки/ошибки
private function shiftQueue(evnt:Event):void
{
evnt.target.removeEventListener(Event.COMPLETE, shiftQueue);
evnt.target.removeEventListener(IOErrorEvent.IO_ERROR, shiftQueue);
PageContent(evnt.target).centerLoaderContent(pageWidth, pageHeight);
if (_queueArr.length)
{
_queueArr.sort(sortFunction);
loadCurrent();
}
}
//по удаленности от текущей
private function sortFunction(a:int, b:int):Number
{
return Math.abs(currentPage - a) < Math.abs(currentPage - b) ? -1 : 1;
}
/**
* ширина листа
*/
public function get pageWidth():Number { return _pageW; }
/**
* высота листа
*/
public function get pageHeight():Number { return _pageH; }
/**
* текущая левая страница (0,2,4..)
*/
public function get currentPage():int { return _currentPage; }
public function set currentPage(value:int):void
{
//отсчет всегда по левой четной
value = value - value % 2;
if (value != _currentPage)
{
_currentPage = value;
setContent( -1, -1, _currentPage, _currentPage + 1);
//render();
dispatchEvent(new BookEvent(BookEvent.CHANGE_PAGE, _currentPage));
}
}
/**
* общее число страниц (включая отсутствующие - нулевую, например )
*/
public function get length():int { return _dataProvider.length; }
/**
* массив PageContent
*/
public function get dataProvider():Array/*PageContent*/ { return _dataProvider; }
public function set dataProvider(value:Array/*PageContent*/):void
{
_dataProvider = value;
//спускаем ссылку темплетам
_leftPage.dataProvider = value;
_rightPage.dataProvider = value;
_backSide.dataProvider = value;
_nextSide.dataProvider = value;
//определяем мувики прелоадера и ошибки загрузки, если есть
var preloader:DisplayObject;
var error:DisplayObject;
for (var i:int = 0; i < _dataProvider.length; i++)
{
var pageContent:PageContent = _dataProvider[i];
if (pageContent && pageContent.url) {
if (preloaderIcon)
{
preloader = new preloaderIcon();
preloader.x = pageWidth / 2;
preloader.y = pageHeight / 2;
pageContent.preloaderIcon = preloader;
}
if (errorIcon)
{
error = new errorIcon();
error.x = pageWidth / 2;
error.y = pageHeight / 2;
pageContent.errorIcon = error;
}
}
}
//запускаем загрузку
createQueue();
//включаем обсчет
startRender();
}
/**
* темп переворачивания в диапазоне 0...10 (default 5); <br/>
* 0 - без анимации.
*/
public function get speed():Number { return 11 - _turnSpeed; }
public function set speed(value:Number):void
{
_turnSpeed = 11 - value;
if (_turnSpeed < 0 || _turnSpeed >= 11)
{
_turnSpeed = 0;
}
}
public function get paper():BitmapData { return _paper; }
public function set paper(value:BitmapData):void
{
_paper = value;
_leftPage.paper = value;
_rightPage.paper = value;
_backSide.paper = value;
_nextSide.paper = value;
}
/**
* надо ли листать колесом мыши
*/
public function get wheelLeaf():Boolean { return _wheelLeaf; }
public function set wheelLeaf(value:Boolean):void
{
_wheelLeaf = value;
_wheelLeaf ? addEventListener(MouseEvent.MOUSE_WHEEL, omMouseWheel) : removeEventListener(MouseEvent.MOUSE_WHEEL, omMouseWheel);
}
/**
* надо ли листать мышкой
*/
public function get mouseLeaf():Boolean { return _mouseLeaf; }
public function set mouseLeaf(value:Boolean):void
{
_mouseLeaf = value;
_mouseLeaf ? addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown) : removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
/**
* надо ли листать при клике-драге по активному (mouseEnabled=true) коненту страниц
*/
public function get contentLeaf():Boolean { return _contentLeaf; }
public function set contentLeaf(value:Boolean):void
{
_contentLeaf = value;
}
}
}
Класс BookExample
package
{
import com.bit101.components.*;
import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.text.*;
import gadgets.book.*;
import gadgets.Preloader;
import flash.text.TextFieldType;
import flash.text.TextField;
import flash.display.Loader;
import flash.display.SimpleButton;
import flash.ui.Mouse;
import flash.geom.Rectangle;
public class BookExample extends Sprite
{
private var _book:Book;
private var _tablo:Label;
var t:TextField = new TextField();
var t2:TextField = new TextField();
var eg:TextField = new TextField();
var ts:TextField = new TextField();
var Ts:TextField = new TextField();
var gs:TextField = new TextField();
var p:TextField = new TextField();
var p2:TextField = new TextField();
var n:TextField = new TextField();
var n2:TextField = new TextField();
var t1:TextField = new TextField();
var B:TextField = new TextField();
var t21:TextField = new TextField();
var eg1:TextField = new TextField();
var ts1:TextField = new TextField();
var Ts1:TextField = new TextField();
var gs1:TextField = new TextField();
var p1:TextField = new TextField();
var p21:TextField = new TextField();
var n1:TextField = new TextField();
var n21:TextField = new TextField();
var t11:TextField = new TextField();
var B1:TextField = new TextField();
var btn:CheckBox = new CheckBox;
public function BookExample():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
stage.displayState = StageDisplayState.FULL_SCREEN;
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
ToolTip.init(stage, {textalign: 'center', opacity: 50, defaultdelay: 500});
_book = new Book(610, 700);
_book.x = 30;
_book.y = 30;
//иконка загрузки
_book.preloaderIcon = Preloader;
//иконка для обозначения ошибки/невозможности загрузки
_book.errorIcon = errorMc;
//поля для таблицы в расчетах
t.type = "input";
t.width = 50;
t.height = 50;
t.x = 85;
t.y = 95;
t.text = " 0.00";
t.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
t2.type = "input";
t2.width = 50;
t2.x = 85;
t2.y = 138;
t2.text = " 0.00";
t2.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
n.type = "input";
n.width = 40;
n.x = 148;
n.y = 95;
n.text = " 00";
n.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
n2.type = "input";
n2.width = 40;
n2.x = 148;
n2.y = 138;
n2.text = " 00";
n2.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
p.type = "input";
p.width = 40;
p.x = 200;
p.y = 95;
p.text = " 000";
p.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
p2.type = "input";
p2.width = 40;
p2.x = 200;
p2.y = 138;
p2.text = " 000";
p2.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
ts.type = "input";
ts.width = 50;
ts.x = 275;
ts.y = 119;
ts.text = " 000";
ts.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
Ts.type = "input";
Ts.width = 50;
Ts.x = 358;
Ts.y = 119;
Ts.text = " 000";
Ts.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
gs.type = "input";
gs.width = 50;
gs.x = 442;
gs.y = 119;
gs.text = " 0.00";
gs.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
eg.type = "input";
eg.width = 80;
eg.x = 245;
eg.y = 310;
eg.text = " 0000";
eg.setTextFormat(new TextFormat("Monotype Corsiva", 19, 0x990099, false, false));
B.type = "input";
B.width = 370;
B.height = 180;
B.x = 90;
B.y = 483;
B.multiline = true;
B.text = " ";//"Напишите вывод о проделанной работе!!!";
B.setTextFormat(new TextFormat("Monotype Corsiva", 19, 0x990099, false, false));
// создаем кнопку на листе "расчеты" для сохранения их в отчете
addChild(btn);
ToolTip.attach(btn,'<b>Подтвердите перенос в отчет\nрезультатов опытов и вывода\nо проделанной работы</b>');
btn.buttonMode = true;
btn.move(545, 610);
btn.width = 120;
btn.addEventListener(MouseEvent.CLICK, onMouseClick);
//поля для отображения в отчете
t1.width = 50;
t1.height = 50;
t1.x = 85;
t1.y = 95;
t1.text = " 0.00";
t1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
t21.width = 50;
t21.x = 85;
t21.y = 138;
t21.text = " 0.00";
t21.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
n1.width = 40;
n1.x = 148;
n1.y = 95;
n1.text = " 00";
n1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
n21.width = 40;
n21.x = 148;
n21.y = 138;
n21.text = " 00";
n21.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
p1.width = 40;
p1.x = 200;
p1.y = 95;
p1.text = " 000";
p1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
p21.width = 40;
p21.x = 200;
p21.y = 138;
p21.text = " 000";
p21.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
ts1.type = "input";
ts1.width = 50;
ts1.x = 275;
ts1.y = 119;
ts1.text = " 000";
ts1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
Ts1.width = 50;
Ts1.x = 358;
Ts1.y = 119;
Ts1.text = " 000";
Ts1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
gs1.width = 50;
gs1.x = 442;
gs1.y = 119;
gs1.text = "0.00";
gs1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
eg1.width = 100;
eg1.x = 136;
eg1.y = 214;
eg1.text = "0000";
eg1.setTextFormat(new TextFormat("Monotype Corsiva", 19, 0x990099, false, false));
B1.width = 370;
B1.height = 180;
B1.x = 90;
B1.y = 252;
B1.multiline = true;
B1.text = " ";
B1.setTextFormat(new TextFormat("Monotype Corsiva", 19, 0x990099, false, false));
//заготовки для контента страниц
var g:MovieClip = new globe();
g.x = 150;
g.y = 80;
var comment:TextField = new TextField();
comment.autoSize = TextFieldAutoSize.CENTER;
comment.x = 100;
comment.y = 210;
comment.text = "картинка с диска,\n мувик из библиотеки\n плюс собственнно этот текст";
comment.setTextFormat(new TextFormat("Monotype Corsiva", 19, 0x990099, false, false));
comment.selectable = true;
comment.mouseEnabled = true;
//создание(определение) страниц книжки
//датапровайдеру передаем массив объектов PageContent, инициализирующих загрузку
//или создающих контент, если переданы готовые дисплейОбжекты
_book.dataProvider = [
null,//нет листа, для имитации обложки
new PageContent("обложка.swf"),
new PageContent("теория1.swf"),
new PageContent("теория2.swf"),
new PageContent("работа.swf"),
new PageContent("расчеты.swf",t,t2,n,n2,p,p2,ts,Ts,gs,eg,B,btn),
new PageContent("отчет1.swf"),
new PageContent("отчет2.swf",t1,t21,n1,n21,p1,p21,ts1,Ts1,gs1,eg1,B1),
new PageContent("теория1_конд.swf"),
new PageContent("теория2_конд.swf"),
new PageContent("кон_работа.swf"),
new PageContent("расчеты_конд.swf"),
new PageContent("отчет_конд.swf"),
new PageContent("отчет2_конд.swf"),
new PageContent("теория1_кинематика.swf"),
new PageContent("теория2_кинематика.swf"),
new PageContent("радио_работа.swf"),
new PageContent("динамика_работа.swf"),
new PageContent("проводник_работа.swf"),
new PageContent("работа_кинематика.swf"),//несуществующая картинка
new PageContent("феерверк.swf")//пустая страница
];
createControls();
addChild(_book);
//слушаем событие смены страниц (здесь только ради теста)
//_book.addEventListener(BookEvent.CHANGE_PAGE, onPageChange);
}
function settextformat() {
t1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
t21.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
n1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
n21.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
p1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
p21.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
ts1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
Ts1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
gs1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));
eg1.setTextFormat(new TextFormat("Monotype Corsiva", 19, 0x990099, false, false));
B1.setTextFormat(new TextFormat("Monotype Corsiva", 19, 0x990099, false, false));
}
function onMouseClick(event:MouseEvent) {
t1.text = t.text;
t21.text = t2.text;
n1.text = n.text;
n21.text = n2.text;
p1.text = p.text;
p21.text = p2.text;
ts1.text = ts.text;
Ts1.text = Ts.text;
gs1.text = gs.text;
eg1.text = eg.text;
B1.text = B.text;
settextformat();
}
//элемемнты управления
private function createControls():void
{
_tablo = new Label(this, 50, 315, "0");
for (var i:int = 0; i < _book.length; i+=2)
{
var but:PushButton = new PushButton(this, 80 + 20 * i, 750, i + "-" + (i + 1), onPageButClick);
but.setSize(35, 20);
}
}
//обработчик радикнопок режима
private function onRadioClick(event:Event):void
{
var rb:RadioButton = event.currentTarget as RadioButton;
_book.mode = rb.label;
}
//обработчик слайдера скрости
private function onSliderChange(event:Event):void
{
_book.speed = HUISlider(event.currentTarget).value;
}
//обработчик кнопок страниц
private function onPageButClick(event:Event):void
{
var but:PushButton = event.currentTarget as PushButton;
var label:String = but.label;
var n_p:int = parseInt(label.substr(0, label.indexOf("-")));
_book.gotoPage(n_p);
}
}
}