001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041: package org.netbeans.modules.vmd.game.integration.components;
042:
043: import org.netbeans.modules.vmd.api.model.DesignComponent;
044: import org.netbeans.modules.vmd.api.model.DesignDocument;
045: import org.netbeans.modules.vmd.api.model.PropertyValue;
046:
047: import javax.swing.undo.AbstractUndoableEdit;
048: import javax.swing.undo.CannotUndoException;
049: import javax.swing.undo.CannotRedoException;
050: import org.netbeans.modules.vmd.game.model.SpriteCD;
051: import org.netbeans.modules.vmd.game.model.TiledLayerCD;
052:
053: /**
054: * @author David Kaspar
055: */
056: public class GameDocumentSupport {
057:
058: //this class must listen for changes in my model and add items to designer2 model
059: //i.e GameDocumentSupport implements SceneListener
060:
061: public static DesignComponent addSprite(DesignDocument document) {
062: DesignComponent rootComponent = document.getRootComponent();
063: DesignComponent sprite = document
064: .createComponent(SpriteCD.TYPEID);
065: rootComponent.addComponent(sprite);
066:
067: // TODO - initialize sprite
068:
069: return sprite;
070: }
071:
072: // public static DesignComponent addSpriteSequence(DesignComponent sprite) {
073: // DesignDocument document = sprite.getDocument();
074: // DesignComponent spriteSequenceComponent = document.createComponent(SpriteSequenceCD.TYPEID);
075: // sprite.addComponent(spriteSequenceComponent);
076: // spriteSequenceComponent.writeProperty(SpriteSequenceCD.PROP_SPRITE, PropertyValue.createComponentReference(sprite));
077: // // TODO - initialize sprite sequence
078: // return spriteSequenceComponent;
079: // }
080: //
081: // public static void removeSpriteSequnce(DesignComponent spriteSequence) {
082: // DesignComponent spriteComponent = spriteSequence.getParentComponent();
083: // spriteComponent.writeProperty(SpriteSequenceCD.PROP_SPRITE, PropertyValue.createNull());
084: // spriteComponent.addComponent(spriteSequence);
085: // }
086:
087: public static DesignComponent addTiledLayer(DesignDocument document) {
088: //HINT -- here show a dialog to select an image
089: DesignComponent rootComponent = document.getRootComponent();
090: DesignComponent tiledLayer = document
091: .createComponent(TiledLayerCD.TYPEID);
092: rootComponent.addComponent(tiledLayer);
093:
094: // TODO - initialize tiled layer
095:
096: return tiledLayer;
097: }
098:
099: // TODO - replace by TiledLayer.ROWS property
100: public static int getRowCount(PropertyValue tilesPropertyValue) {
101: if (tilesPropertyValue == null)
102: return 0;
103: return GameTypes.getTiles(tilesPropertyValue).length;
104: }
105:
106: // TODO - replace by TiledLayer.COLUMNS property
107: public static int getColumnCount(PropertyValue tilesPropertyValue) {
108: if (tilesPropertyValue == null)
109: return 0;
110: int[][] tiles = GameTypes.getTiles(tilesPropertyValue);
111: if (tiles.length < 1)
112: return 0;
113: return tiles[0].length;
114: }
115:
116: public static void setSingleTile(DesignComponent tiledLayer, int y,
117: int x, int newValue) {
118: PropertyValue tilesPropertyValue = tiledLayer
119: .readProperty(TiledLayerCD.PROPERTY_TILES);
120: int[][] tiles = GameTypes.getTiles(tilesPropertyValue);
121: int oldValue = tiles[y][x]; // TODO - check for boundaries
122: tiles[y][x] = newValue;
123: TilesChangeUndoableEdit undoableEdit = new TilesChangeUndoableEdit(
124: tiledLayer, y, x, oldValue, newValue);
125: tiledLayer.getDocument().getTransactionManager()
126: .undoableEditHappened(undoableEdit);
127: // HINT - notify designer that internal structure was changed
128: tiledLayer.writeProperty(TiledLayerCD.PROPERTY_TILES, GameTypes
129: .createTilesProperty(tiles));
130: }
131:
132: private static class TilesChangeUndoableEdit extends
133: AbstractUndoableEdit {
134:
135: private DesignComponent tiledLayer;
136: private int y;
137: private int x;
138: private int oldValue;
139: private int newValue;
140:
141: public TilesChangeUndoableEdit(DesignComponent tiledLayer,
142: int y, int x, int oldValue, int newValue) {
143: this .tiledLayer = tiledLayer;
144: this .y = y;
145: this .x = x;
146: this .oldValue = oldValue;
147: this .newValue = newValue;
148: }
149:
150: public void undo() throws CannotUndoException {
151: super .undo();
152: PropertyValue tilesPropertyValue = tiledLayer
153: .readProperty(TiledLayerCD.PROPERTY_TILES);
154: int[][] tiles = GameTypes.getTiles(tilesPropertyValue);
155: tiles[y][x] = oldValue;
156: // TODO - invoke repaint of particular area at TiledLayerEditor
157: }
158:
159: public void redo() throws CannotRedoException {
160: super .redo();
161: PropertyValue tilesPropertyValue = tiledLayer
162: .readProperty(TiledLayerCD.PROPERTY_TILES);
163: int[][] tiles = GameTypes.getTiles(tilesPropertyValue);
164: tiles[y][x] = newValue;
165: // TODO - invoke repaint of particular area at TiledLayerEditor
166: }
167:
168: public boolean isSignificant() {
169: return false;
170: }
171:
172: }
173:
174: }
|