/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
* Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems 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 def width = 240;
public def height = 320;
public class TweeterView extends CustomNode {
var selectedView : AbstractView;
var bgRect = Rectangle {
x: 0
y: 0
width: width
height: height
fill: Color.ALICEBLUE
arcWidth: 5
arcHeight: 5
};
var borderRect = Rectangle {
x: 2
y: 2
width: width - 4
height: height - 4
strokeWidth: 1.5
stroke: bind Color.web("#{theme.linkColor}")
fill: Color.TRANSPARENT
arcWidth: 5
arcHeight: 5
};
var bgImageURL = bind TweeterView.theme.backgroundImageURL;
var bgImage = ImageView {
translateX: 5
translateY: 5
image: bind getBackgroundImage(bgImageURL)
fitWidth: (width - 10)
fitHeight: (height - 10)
};
var closeButton = ImageButton {
normalImage: theme.closeImage
translateX: width - 19
translateY: 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 {
translateX: 2
translateY: 320 - 38
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;
}
function onFriendsClick() : Void {
if(selectedView == friendsView) {
return;
}
if(friendsView.loggedIn) {
selectedView.show = false;
selectedView = friendsView;
friendsView.show = true;
} else {
selectedView.show = false;
selectedView = loginView;
loginView.show = true;
}
}
function onPublicClick() : Void {
if(selectedView == publicView) {
return;
}
selectedView.show = false;
selectedView = publicView;
publicView.show = true;
}
function onLogoutClick() : Void {
friendsView.logout();
selectedView.show = false;
selectedView = loginView;
loginView.show = true;
}
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, view, controlPanel, closeButton, borderRect ] };
}
public function start() : Void {
publicView.start();
}
}