/src/org/mt4j/components/visibleComponents/widgets/MTOverlayContainer.java
http://mt4j.googlecode.com/ · Java · 133 lines · 54 code · 17 blank · 62 comment · 8 complexity · 37c515d658e87798b0d6cd428ba33073 MD5 · raw file
- /***********************************************************************
- * mt4j Copyright (c) 2008 - 2010 Christopher Ruff, Fraunhofer-Gesellschaft All rights reserved.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- ***********************************************************************/
- package org.mt4j.components.visibleComponents.widgets;
-
- import org.mt4j.MTApplication;
- import org.mt4j.components.MTComponent;
- import org.mt4j.components.StateChange;
- import org.mt4j.components.StateChangeEvent;
- import org.mt4j.components.StateChangeListener;
- import org.mt4j.components.interfaces.IMTController;
- import org.mt4j.util.camera.MTCamera;
-
- /**
- * This is a component that will try to always stay on top and will stay in place even
- * if the scene's camera is moved.
- * <br>Thus it can be used as a container for a GUI or a HUD (head up display).
- *
- * @author Christopher Ruff
- */
- public class MTOverlayContainer extends MTComponent {
-
- /** The app. */
- private MTApplication app;
-
- //TODO overlay layer priorites / layer numbers to sort them by priority
-
- /**
- * Instantiates a new mT overlay container.
- *
- * @param applet the applet
- */
- public MTOverlayContainer(MTApplication applet) {
- this(applet, "unnamed overlay container");
- }
-
- /**
- * Instantiates a new mT overlay container.
- *
- * @param app the app
- * @param name the name
- */
- public MTOverlayContainer(MTApplication app, String name) {
- super(app, name, new MTCamera(app));
- this.app = app;
-
- this.setDepthBufferDisabled(true);
-
- //Send overlay group to front again if it isnt - check each frame if its on front!
- this.setController(new IMTController() {
- public void update(long timeDelta) {
- putLastInParentList();
- }
- });
-
- //Always put last in parents children list if added to a parent,
- //so the chance is higher that this is really drawn ontop of other stuff
- this.addStateChangeListener(StateChange.ADDED_TO_PARENT, new StateChangeListener() {
- public void stateChanged(StateChangeEvent evt) {
- putLastInParentList();
- }
- });
- }
-
-
- private void putLastInParentList(){
- MTComponent parent = getParent();
- if (parent != null){
- int childCount = parent.getChildCount();
-
- if ( childCount > 0
- && !parent.getChildByIndex(childCount-1).equals(MTOverlayContainer.this)
- ){
- MTComponent lastChild = parent.getChildByIndex(childCount-1);
- if ( !(lastChild instanceof MTOverlayContainer)
- && !(lastChild.getName().equalsIgnoreCase("Cursor Trace group"))
- ){
- //last component in canvas child list is not a overlay container:
- MTOverlayContainer.this.app.invokeLater(new Runnable() {
- public void run(){
- MTComponent parent = getParent();
- if (parent != null){
- parent.removeChild(MTOverlayContainer.this);
- parent.addChild(MTOverlayContainer.this);
- }
- }
- });
- }else{
- //last component in canvas already is a different overlay container:
- // int insertionIndex = getInsertionIndex(parent);
-
- }
- }
- }
- }
-
- /*
- private int getInsertionIndex(MTComponent parent){
- int count = parent.getChildCount();
- for (int i = 1; i <= count; i++) {
- // int index = -i;
- int checkIndex = count-i;
- MTComponent child = parent.getChildByIndex(checkIndex);
- System.out.println("Check at: " + checkIndex + " ->" + child);
-
- if (child instanceof MTOverlayContainer){
-
- }else{
- System.out.println("Found insertion place for : " + this + " at: " + checkIndex);
- return checkIndex;
- }
- }
- return 0;
- }
- */
-
-
-
- }