/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
* Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
* This file is available and licensed under the following license:
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of Oracle Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package tweeter.view;
import javafx.lang.FX;
import javafx.scene.CustomNode;
import javafx.scene.Group;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.Node;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import tweeter.Theme;
import tweeter.view.AbstractView;
import tweeter.view.ControlPanel;
import tweeter.view.FriendsView;
import tweeter.view.ImageButton;
import tweeter.view.LoginView;
import tweeter.view.MessageView;
import tweeter.view.PublicView;
import tweeter.view.TweeterView;
public var theme:Theme = Theme { };
public var width = 240;
public var height = 320;
public class TweeterView extends CustomNode {
def _cPanelLayoutY = 320 - 38;
def _cPanelLayoutX = 2;
def _closePadding = 19;
def _bgImagePadding = 10;
def _bgImgLayoutXY = 5;
def _bgRectXY = 2;
def _bgRectPadding = 4;
public var selectedView:AbstractView;
var bgRect = Rectangle {
x: _bgRectXY
y: _bgRectXY
width: bind width - _bgRectPadding
height: bind height - _bgRectPadding
strokeWidth: 1.5
stroke: bind Color.web("#{theme.linkColor}")
fill: Color.WHITE
arcWidth: 15
arcHeight: 15
};
var bgImageURL = bind TweeterView.theme.backgroundImageURL;
var bgImage = ImageView {
layoutX: _bgImgLayoutXY
layoutY: _bgImgLayoutXY
image: bind getBackgroundImage(bgImageURL)
fitWidth: bind (width - _bgImagePadding)
fitHeight: bind (height - _bgImagePadding)
};
var closeButton = ImageButton {
normalImage: theme.closeImage
layoutX: bind width - _closePadding
layoutY: 5
visible: ("{__PROFILE__}" != "browser")
onMousePressed:function(e) {
FX.exit();
}
};
function getBackgroundImage(url:String):Image {
Image {
url: url
backgroundLoading: true
}
}
var messageView:MessageView = MessageView {
show: false
onButtonClick: onMessageViewButtonClick
};
var loginView:LoginView = LoginView {
onLogin: onLogin
};
var friendsView = FriendsView {
onException: onException
};
var publicView = PublicView {
onException: onException
};
var controlPanel = ControlPanel {
layoutX: _cPanelLayoutX
layoutY: _cPanelLayoutY
onFriendsClick: onFriendsClick
onPublicClick: onPublicClick
onLogoutClick: onLogoutClick
};
function onMessageViewButtonClick():Void {
friendsView.loggedIn = false;
selectedView.show = false;
selectedView = loginView;
loginView.show = true;
}
function onException(message:String):Void {
selectedView.show = false;
messageView.text = message;
selectedView = messageView;
messageView.show = true;
}
public function onFriendsClick():Void {
if(friendsView.loggedIn) {
selectedView.show = false;
selectedView = friendsView;
friendsView.show = true;
} else {
selectedView.show = false;
selectedView = loginView;
loginView.show = true;
}
}
public function onPublicClick():Void {
selectedView.show = false;
selectedView = publicView;
publicView.show = true;
}
function onLogoutClick():Void {
friendsView.logout();
selectedView.show = false;
selectedView = loginView;
loginView.show = true;
}
public function onLogin(user:String, passwd:String):Void {
friendsView.show = true;
friendsView.user = user;
friendsView.passwd = passwd;
friendsView.start();
selectedView = friendsView;
}
override function create():Node {
selectedView = publicView;
publicView.show = true;
var view = Group {
content: bind selectedView
};
Group { content: [ bgRect, bgImage, controlPanel, view, closeButton ] };
}
public function start():Void {
publicView.start();
}
}