134 lines
4.6 KiB
Java
134 lines
4.6 KiB
Java
/*
|
|
* Copyright (c) 2005,2009 Declarative Engineering LLC.
|
|
* All rights reserved. This program and the accompanying materials
|
|
* are made available under the terms of the Declarative Engineering LLC
|
|
* verson 1 which accompanies this distribution, and is available at
|
|
* http://declarativeengineering.com/legal/DE_Developer_License_v1.txt
|
|
*/
|
|
package com.foundation.tcv.swt.server;
|
|
|
|
import com.foundation.controller.RemoteViewController;
|
|
import com.foundation.tcv.swt.IPanelViewer;
|
|
import com.foundation.view.ResourceAssociation;
|
|
import com.foundation.view.SingleAssociationContainer;
|
|
import com.foundation.view.SingleResourceAssociation;
|
|
|
|
public class PanelViewer extends Container implements IPanelViewer {
|
|
/** The association that provides a view controller whose view will be displayed in this panel. */
|
|
private SingleResourceAssociation controllerAssociation = new SingleResourceAssociation(this, this, getViewContext(), ResourceAssociation.TYPE_OBJECT, false, null);
|
|
/** The view controller whose view is currently displayed. */
|
|
private RemoteViewController viewController = null;
|
|
/** Whether the panel viewer should allow the focus to change when the viewed contents change. */
|
|
private boolean changeFocus = true;
|
|
/**
|
|
* PanelViewer constructor.
|
|
* @param parent A composite control which will be the parent of the new instance (cannot be null).
|
|
* @param name The unique component name.
|
|
* @param style The style of control to construct.
|
|
* @see #STYLE_ARROW
|
|
* @see #STYLE_CHECK
|
|
* @see #STYLE_PUSH
|
|
* @see #STYLE_RADIO
|
|
* @see #STYLE_TOGGLE
|
|
* @see #STYLE_FLAT
|
|
* @see #STYLE_LEFT
|
|
* @see #STYLE_RIGHT
|
|
* @see #STYLE_CENTER
|
|
* @see #STYLE_UP
|
|
* @see #STYLE_DOWN
|
|
*/
|
|
public PanelViewer(Container parent, String name, int style) {
|
|
super(parent, name, style);
|
|
|
|
sendMessage(MESSAGE_INITIALIZE, null, null, parent.getNumber(), style);
|
|
}//PanelViewer()//
|
|
/**
|
|
* Sets the association container used to access the controller.
|
|
* @param container The controller association metadata.
|
|
*/
|
|
public void setControllerAssociation(SingleAssociationContainer container) {
|
|
controllerAssociation.setAssociations(container);
|
|
}//setControllerAssociation()//
|
|
/**
|
|
* Sets whether the focus should be allowed to change to the viewer's component when the contents of the viewer changes.
|
|
* @param changeFocus Whether focus changes should be allowed when changing the viewer contents.
|
|
*/
|
|
public void setChangeFocus(boolean changeFocus) {
|
|
if(this.changeFocus != changeFocus) {
|
|
this.changeFocus = changeFocus;
|
|
sendMessage(MESSAGE_SET_CHANGE_FOCUS, changeFocus ? Boolean.TRUE : Boolean.FALSE);
|
|
}//if//
|
|
}//setChangeFocus()//
|
|
/* (non-Javadoc)
|
|
* @see com.foundation.tcv.swt.server.Container#internalViewInitialize()
|
|
*/
|
|
protected void internalViewInitialize() {
|
|
super.internalViewInitialize();
|
|
|
|
controllerAssociation.initialize();
|
|
}//internalViewInitialize()//
|
|
/* (non-Javadoc)
|
|
* @see com.foundation.tcv.swt.server.Container#internalViewRefresh()
|
|
*/
|
|
protected void internalViewRefresh() {
|
|
super.internalViewRefresh();
|
|
|
|
internalViewRefreshController();
|
|
}//internalViewRefresh()//
|
|
/* (non-Javadoc)
|
|
* @see com.foundation.tcv.swt.server.Container#internalViewRelease()
|
|
*/
|
|
protected void internalViewRelease() {
|
|
super.internalViewRelease();
|
|
|
|
controllerAssociation.release();
|
|
}//internalViewRelease()//
|
|
/**
|
|
* Refreshes the controller association.
|
|
*/
|
|
protected void internalViewRefreshController() {
|
|
if(controllerAssociation.refresh()) {
|
|
Object value = controllerAssociation.getValue();
|
|
|
|
addMessageHold();
|
|
|
|
try {
|
|
sendMessage(MESSAGE_BEGIN_CHANGE_CONTENTS, null);
|
|
|
|
//Close the previous view.//
|
|
if(viewController != null) {
|
|
viewController.close();
|
|
viewController = null;
|
|
}//if//
|
|
|
|
//Open the new view.//
|
|
if(value instanceof RemoteViewController) {
|
|
viewController = (RemoteViewController) value;
|
|
viewController.openPartial(this, getViewContext());
|
|
}//if//
|
|
|
|
sendMessage(MESSAGE_END_CHANGE_CONTENTS, null);
|
|
}//try//
|
|
finally {
|
|
removeMessageHold();
|
|
}//finally//
|
|
}//if//
|
|
}//internalViewRefreshController()//
|
|
/* (non-Javadoc)
|
|
* @see com.foundation.tcv.swt.server.AbstractComponent#internalOnValueChanged(com.foundation.view.SingleResourceAssociation)
|
|
*/
|
|
protected void internalOnValueChanged(SingleResourceAssociation resourceAssociation, int flags) {
|
|
if(resourceAssociation == controllerAssociation) {
|
|
internalViewRefreshController();
|
|
}//if//
|
|
else {
|
|
super.internalOnValueChanged(resourceAssociation, flags);
|
|
}//else//
|
|
}//internalOnValueChanged()//
|
|
/* (non-Javadoc)
|
|
* @see com.foundation.tcv.swt.server.AbstractComponent#getClientClassName()
|
|
*/
|
|
protected String getClientClassName() {
|
|
return "com.foundation.tcv.swt.client.PanelViewer";
|
|
}//getClientClassName()//
|
|
}//PanelViewer// |