Remove unused fields
[scilab.git] / scilab / modules / xcos / src / java / org / scilab / modules / xcos / graph / PaletteDiagram.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009 - DIGITEO - Antoine ELIAS
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 package org.scilab.modules.xcos.graph;
14
15 import java.io.File;
16
17 import org.scilab.modules.xcos.block.BasicBlock;
18 import org.scilab.modules.xcos.block.SplitBlock;
19 import org.scilab.modules.xcos.block.TextBlock;
20 import org.scilab.modules.xcos.link.BasicLink;
21 import org.scilab.modules.xcos.utils.BlockPositioning;
22 import org.scilab.modules.xcos.utils.ConfigXcosManager;
23 import org.scilab.modules.xcos.utils.XcosConstants;
24
25 import com.mxgraph.model.mxGeometry;
26
27
28 public class PaletteDiagram extends XcosDiagram {
29
30     private static int BLOCK_MAX_WIDTH  = (int) (XcosConstants.PALETTE_BLOCK_WIDTH * 0.8); //80% of the max size
31     private static int BLOCK_MAX_HEIGHT = (int) (XcosConstants.PALETTE_BLOCK_HEIGHT * 0.8); //80% of the max size
32     private String name;
33     private String fileName;
34     private double windowWidth = 0;
35
36     public PaletteDiagram() {
37         super();
38         
39         setCellsLocked(true);
40         setGridVisible(false);
41         setCellsDeletable(false);
42         setCellsEditable(false);
43         
44         getUndoManager().setEventsEnabled(false);
45     }
46
47     public boolean openDiagramAsPal(String diagramFileName) {
48         File theFile = new File(diagramFileName);
49
50         //int windowHeight = getAsComponent().getHeight();
51         
52         if (theFile.exists()) {
53             boolean loaded = transformAndLoadFile(theFile, true);
54             if(loaded == false) {
55                 return false;
56             }
57             setName(theFile.getName());
58             setFileName(theFile.getAbsolutePath());
59             getRubberBand().setEnabled(false);
60
61             /*change some diagram parameters*/
62             /*delete all links*/
63             for(int i = 0 ; i < getModel().getChildCount(getDefaultParent()) ; i++) {
64                 Object obj = getModel().getChildAt(getDefaultParent(), i); 
65                 if(obj instanceof BasicLink || obj instanceof SplitBlock || obj instanceof TextBlock) {
66                     getModel().remove(obj);
67                     i--;
68                 }
69             }
70             ConfigXcosManager.saveUserDefinedPalettes(diagramFileName);
71             return true;
72         }
73         return false;
74     }
75
76     public void updateDiagram(double newWidth) {
77         
78         if(newWidth == windowWidth) {
79             return;
80         }
81
82         int oldRowItem = (int) (newWidth / (XcosConstants.PALETTE_BLOCK_WIDTH + XcosConstants.PALETTE_HMARGIN));
83         int maxRowItem = (int) (windowWidth / (XcosConstants.PALETTE_BLOCK_WIDTH + XcosConstants.PALETTE_HMARGIN));
84         
85         //only compute for signifiant changes
86         if(oldRowItem == maxRowItem) {
87             return;
88         }
89
90         windowWidth = newWidth;
91         int blockCount = 0;
92
93         getModel().beginUpdate();
94         for(int i = 0 ; i < getModel().getChildCount(getDefaultParent()) ; i++) {
95             Object obj = getModel().getChildAt(getDefaultParent(), i); 
96             if(obj instanceof BasicBlock){
97                 BasicBlock block = (BasicBlock)obj;
98                 block.setGeometry(getNewBlockPosition(block.getGeometry(), blockCount));
99                 BlockPositioning.updateBlockView(block);
100                 blockCount++;
101             }
102         }
103         getModel().endUpdate();
104         refresh();
105         setModified(false);
106     }
107     
108     private mxGeometry getNewBlockPosition(mxGeometry geom, int blockCount) {
109         
110         int maxRowItem = (int) (windowWidth / (XcosConstants.PALETTE_BLOCK_WIDTH + XcosConstants.PALETTE_HMARGIN));
111         int row = blockCount % maxRowItem;
112         int col = blockCount / maxRowItem;
113         double x = geom.getX();
114         double y = geom.getY();
115         double w = geom.getWidth();
116         double h = geom.getHeight();
117         
118         if(geom.getWidth() > BLOCK_MAX_WIDTH || geom.getHeight() > BLOCK_MAX_HEIGHT) {
119             //update block size to fill "block area"
120             double ratio = Math.min(BLOCK_MAX_HEIGHT / h, BLOCK_MAX_WIDTH / w);
121             w *= ratio;
122             h *= ratio;
123         }
124         
125         x = row * (XcosConstants.PALETTE_BLOCK_WIDTH + XcosConstants.PALETTE_HMARGIN);
126         x += (XcosConstants.PALETTE_BLOCK_WIDTH - w) / 2;
127         y = col * (XcosConstants.PALETTE_BLOCK_HEIGHT + XcosConstants.PALETTE_VMARGIN);
128         y += (XcosConstants.PALETTE_BLOCK_HEIGHT - h) / 2;
129         
130         return new mxGeometry(x,y,w,h); 
131     }
132
133     public String getName() {
134         return name;
135     }
136
137     public void setName(String name) {
138         this.name = name;
139     }
140
141     public boolean isCellConnectable(Object cell) {
142         return false;
143     }
144
145     public void setFileName(String fileName) {
146         this.fileName = fileName;
147     }
148
149     public String getFileName() {
150         return fileName;
151     }
152
153 }