Revision 1194

View differences:

org.gvsig.raster.tools/trunk/org.gvsig.raster.tools/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.basic/src/main/java/org/gvsig/raster/tools/app/basic/tool/infobypoint/MainInfoByPointDialog.java
47 47
public class MainInfoByPointDialog extends JPanel implements IWindow, ActionListener {
48 48
	private static final long               serialVersionUID   = 1L;
49 49
	private MainInfoByPointPanel            mainPanel          = null;
50
	private boolean                         extended           = false;
51 50
	
52
	public MainInfoByPointDialog(boolean extended) {
53
		this.extended = extended;
51
	public MainInfoByPointDialog() {
54 52
		setLayout(new BorderLayout());
55 53
		add((Component)getMainPanel(), BorderLayout.CENTER);
56 54
	}
......
77 75
			icons.put("forward-icon", IconThemeHelper.getImageIcon("forward-icon"));
78 76
			icons.put("backward-icon", IconThemeHelper.getImageIcon("backward-icon"));
79 77
			mainPanel = RasterSwingLocator.getSwingManager().createInfoByPointPanel(
80
					translations, icons, extended);
78
					translations, icons, null);
81 79
			mainPanel.addListenerExtendedButton(this);
82 80
		}
83 81
		return mainPanel;
......
90 88
	public WindowInfo getWindowInfo() {
91 89
		WindowInfo m_viewinfo = new WindowInfo(WindowInfo.MODELESSDIALOG);
92 90
		m_viewinfo.setTitle(PluginServices.getText(this, "InfoByPoint"));
93
		if(!extended)
94
			m_viewinfo.setHeight(380);
95
		else
96
			m_viewinfo.setHeight(404);
91
		m_viewinfo.setHeight(380);
97 92
		m_viewinfo.setWidth(250);
98 93
		return m_viewinfo;
99 94
	}
org.gvsig.raster.tools/trunk/org.gvsig.raster.tools/org.gvsig.raster.tools.app/org.gvsig.raster.tools.app.basic/src/main/java/org/gvsig/raster/tools/app/basic/tool/infobypoint/InfoByRasterPointExtension.java
79 79
					return;
80 80
				}
81 81
			}
82
			MainInfoByPointDialog dialog = new MainInfoByPointDialog(false);
82
			MainInfoByPointDialog dialog = new MainInfoByPointDialog();
83 83
			InfoByPointDataModel model = dialog.getInfoByPointDataModel();
84 84
			((Observable)model).addObserver((Observer)dialog.getMainPanel());
85 85
			
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.api/src/main/java/org/gvsig/raster/swing/infobypoint/MainInfoByPointPanel.java
27 27
import org.gvsig.raster.swing.pixelinspector.PixelInspector;
28 28

  
29 29

  
30

  
31

  
32 30
/**
33 31
 * Main panel for the information by point
34 32
 * @author Nacho Brodin (nachobrodin@gmail.com)
35 33
 *
36 34
 */
37 35
public interface MainInfoByPointPanel extends Observer {
36
	/**
37
	 * Gets the data model
38
	 * @return
39
	 */
38 40
	public InfoByPointDataModel getInfoByPointDataModel();
41
	
42
	/**
43
	 * Gets the pixel inspector panel
44
	 * @return
45
	 */
39 46
	public PixelInspector getPixelInspectorPanel();
40 47
	
48
	/**
49
	 * Adds a listener to the extended button
50
	 * @param listener
51
	 */
41 52
	public void addListenerExtendedButton(ActionListener listener);
42 53
}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.api/src/main/java/org/gvsig/raster/swing/RasterSwingManager.java
112 112
    public MainInfoByPointPanel createInfoByPointPanel(
113 113
    		HashMap<String, String> translations, 
114 114
    		HashMap<String, ImageIcon> icons, 
115
    		boolean extended);
115
    		JPanel extended);
116 116

  
117 117
}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/test/java/TestInfoByPointPanel.java
1 1

  
2 2

  
3
import java.awt.event.ActionEvent;
4
import java.awt.event.ActionListener;
3 5
import java.util.ArrayList;
4 6
import java.util.List;
5 7

  
6 8
import javax.swing.JFrame;
9
import javax.swing.JPanel;
7 10

  
8 11
import org.gvsig.raster.swing.impl.infobypoint.DefaultInfoByPointDataModel;
9 12
import org.gvsig.raster.swing.impl.infobypoint.MainInfoByPointPanelImpl;
10 13

  
11
public class TestInfoByPointPanel {
12
		private int                          w        = 280;
14
public class TestInfoByPointPanel implements ActionListener {
15
		private int                          w        = 270;
13 16
		private int                          h        = 434;
14 17
		private JFrame                       frame    = new JFrame();
15 18
		private MainInfoByPointPanelImpl     desc     = null;
16 19

  
17 20
		public TestInfoByPointPanel() {
18
			desc = new MainInfoByPointPanelImpl(null, null, false);
21
			desc = new MainInfoByPointPanelImpl(null, null, new JPanel());
19 22
			DefaultInfoByPointDataModel model = (DefaultInfoByPointDataModel)desc.getInfoByPointDataModel();
20 23
			model.addObserver(desc);
21 24
			model.setARGB(255, 125, 110);
......
31 34
			list.add("Esta_es_la_capa_segunda_de_la_lista_de_capas_del_info_by_point.jpg");
32 35
			model.setLayerList(list);
33 36
			model.notifyObservers();
37
			
38
			desc.addListenerExtendedButton(this);
34 39
			frame.getContentPane().add(desc);
35 40
			frame.setSize(w, h);
36 41
			frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
......
41 46
			new TestInfoByPointPanel();
42 47
		}
43 48

  
49
		private boolean doubleSize = false;
50
		public void actionPerformed(ActionEvent e) {
51
			if(!doubleSize)
52
				frame.setSize(w * 2, h);
53
			else
54
				frame.setSize(w, h);
55
			doubleSize = !doubleSize;
56
		}
57

  
44 58
//		public void stateChanged(ChangeEvent e) {
45 59
//			if(e.getSource() == desc.getTabs()) {
46 60
//				if(desc.getTabs().getSelectedIndex() == 2) {
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/main/java/org/gvsig/raster/swing/impl/infobypoint/ButtonsPanel.java
56 56
	private void init() {
57 57
		FlowLayout ly = new FlowLayout();
58 58
		setLayout(ly);
59
		//ly.setHgap(2);
60
		ly.setVgap(2);
59
		ly.setHgap(0);
60
		ly.setVgap(0);
61 61
		ly.setAlignment(FlowLayout.RIGHT);
62
		setBorder(BorderFactory.createLineBorder(Color.blue));
62
		//setBorder(BorderFactory.createLineBorder(Color.blue));
63 63
		add(getExtendedButton());
64
		/*setLayout(new GridBagLayout());
65
		GridBagConstraints gbc = new GridBagConstraints();
66
		gbc.gridx = 0;
67
		gbc.weightx = 1;
68
		gbc.fill = GridBagConstraints.HORIZONTAL;
69
		gbc.insets = new java.awt.Insets(1, 1, 1, 4);
70
		add(new JPanel(), gbc);
71
		
72
		gbc.gridx = 1;
73
		gbc.anchor = GridBagConstraints.EAST;
74
		gbc.fill = GridBagConstraints.NONE;
75
		gbc.weightx = 0;
76
		add(getExtendedButton(), gbc);*/
77 64
	}
78 65
	
79 66
	public JButton getExtendedButton() {
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/main/java/org/gvsig/raster/swing/impl/infobypoint/InfoByPointPanel.java
119 119
			jPanelBands.setLayout(new BorderLayout());
120 120
			jPanelBands.add(getJLabelNumberOfBands(), BorderLayout.NORTH);
121 121
			JScrollPane listScroller = new JScrollPane(getJListValues());
122
			listScroller.setPreferredSize(new Dimension(0, 35));
122
			//listScroller.setMinimumSize(new Dimension(0, 35));
123
			//listScroller.setMaximumSize(new Dimension(0, 35));
124
			//listScroller.setPreferredSize(new Dimension(0, 35));
123 125
			jPanelBands.add(listScroller, BorderLayout.CENTER);
124 126
		}
125 127
		return jPanelBands;
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/main/java/org/gvsig/raster/swing/impl/infobypoint/MainInfoByPointPanelImpl.java
21 21
*/
22 22
package org.gvsig.raster.swing.impl.infobypoint;
23 23

  
24
import java.awt.Color;
25 24
import java.awt.Component;
26
import java.awt.Dimension;
27 25
import java.awt.GridBagConstraints;
28 26
import java.awt.GridBagLayout;
29 27
import java.awt.event.ActionListener;
30 28
import java.util.HashMap;
31 29
import java.util.Observable;
32 30

  
33
import javax.swing.BorderFactory;
34 31
import javax.swing.ImageIcon;
35 32
import javax.swing.JPanel;
36 33

  
......
49 46
	private PixelInspectorPanel         pixelInspectorPanel     = null;
50 47
	private InfoByPointPanel            infoByPointPanel        = null;
51 48
	private ButtonsPanel                buttonsPanel            = null;
52
	private boolean                     extended                = false;
49
	private JPanel                      extended                = null;
53 50
	
54 51
	public MainInfoByPointPanelImpl(
55 52
			HashMap<String, String> translations, 
56 53
			HashMap<String, ImageIcon> icons,
57
			boolean extended) {
54
			JPanel extended) {
58 55
		tr = translations;
59 56
		if(tr == null || tr.get("layer_list") == null) {
60 57
			tr = new HashMap<String, String>();
......
82 79
	private void init() {
83 80
		setLayout(new GridBagLayout());
84 81
		GridBagConstraints gbc = new GridBagConstraints();
85
		gbc.gridx = 0;
86
		gbc.gridy = 0;
87
		gbc.gridwidth = 1;
88
		gbc.gridheight = 1;
89
		if(!extended) {
82

  
83
		if(extended == null) {
90 84
			gbc.fill = GridBagConstraints.BOTH;
91 85
			gbc.weightx = 1;
92 86
			gbc.weighty = 1;
93 87
		} else {
94
			gbc.anchor = GridBagConstraints.WEST;
88
			//gbc.anchor = GridBagConstraints.WEST;
95 89
			gbc.fill = GridBagConstraints.VERTICAL;
96 90
			gbc.weighty = 1;
97 91
		}
98 92
		gbc.insets = new java.awt.Insets(2, 2, 2, 2);
99 93
		add((Component)getPixelInspectorPanel(), gbc);
100 94

  
101
		if(!extended) {
95
		if(extended == null) {
102 96
			gbc.fill = GridBagConstraints.HORIZONTAL;
103 97
			gbc.weightx = 1;
104 98
			gbc.weighty = 0;
......
107 101
			gbc.weighty = 0;
108 102
		}
109 103
		
110
		gbc.gridx = 0;
111 104
		gbc.gridy = 1;
112 105
		add(getinfoByPointPanel(), gbc);
113 106
		
114
		if(extended) {
115
			gbc.fill = GridBagConstraints.HORIZONTAL;
116
			gbc.gridx = 0;
107
		if(extended != null) {
108
			gbc.insets = new java.awt.Insets(0, 6, 0, 6);
117 109
			gbc.gridy = 2;
110
			gbc.fill = GridBagConstraints.HORIZONTAL;
118 111
			add(getButtonsPanel(), gbc);
119 112
			
120 113
			gbc.gridx = 1;
121 114
			gbc.gridy = 0;
122 115
			gbc.gridheight = 3;
116
			gbc.insets = new java.awt.Insets(0, 0, 0, 0);
123 117
			gbc.fill = GridBagConstraints.BOTH;
124 118
			gbc.weightx = 1;
125 119
			gbc.weighty = 1;
126
			JPanel p = new JPanel();
127
			p.setPreferredSize(new Dimension(500, 400));
128
			p.setBorder(BorderFactory.createLineBorder(Color.red));
129
			add(p, gbc);
120
			//extended.setBorder(BorderFactory.createLineBorder(Color.red));
121
			add(extended, gbc);
130 122
		}
131 123
	}
132 124
	
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/main/java/org/gvsig/raster/swing/impl/DefaultRasterSwingManager.java
132 132
    public MainInfoByPointPanel createInfoByPointPanel(
133 133
    		HashMap<String, String> translations, 
134 134
    		HashMap<String, ImageIcon> icons,
135
    		boolean extended) {
135
    		JPanel extended) {
136 136
    	return new MainInfoByPointPanelImpl(translations, icons, extended);
137 137
    }
138 138
}
org.gvsig.raster.wms/trunk/org.gvsig.raster.wms/org.gvsig.raster.wms.app/org.gvsig.raster.wms.app.wmsclient/src/main/java/org/gvsig/raster/wms/app/wmsclient/layer/DynObjectSetWMSInfo.java
46 46
	public static final int             TYPE_TEXT = 0;
47 47
	public static final int             TYPE_HTML = 1;
48 48
	public static final int             TYPE_XML  = 2;
49
	private DynObjectIteratorWMSInfo   ite = null;
49
	private DynObjectIteratorWMSInfo    ite       = null;
50
	private DynObject                   dynObject = null;
50 51
	
51 52
	public static void registerDynClass() {
52 53
		DynObjectManager manager = ToolsLocator.getDynObjectManager();
......
61 62
     */
62 63
    public DynObjectSetWMSInfo(String txt, int type) {
63 64
    	DynObjectManager manager = ToolsLocator.getDynObjectManager();
64
    	DynObject dynObject = manager.createDynObject("WMSInfoByPoint");
65
    	dynObject = manager.createDynObject("WMSInfoByPoint");
65 66
    	dynObject.setDynValue("info", txt);
66 67
    	ite = new DynObjectIteratorWMSInfo(dynObject);
67 68
    }
68 69

  
70
    public String getInfoElement() {
71
    	return (String)dynObject.getDynValue("info");
72
    }
73
    
69 74
    public void dispose() {
70 75

  
71 76
    }
org.gvsig.raster.wms/trunk/org.gvsig.raster.wms/org.gvsig.raster.wms.app/org.gvsig.raster.wms.app.wmsclient/src/main/java/org/gvsig/raster/wms/app/wmsclient/infobypoint/InfoByWMSPointExtension.java
52 52
 * Plugin for the information by point of a raster layer
53 53
 * @author Nacho Brodin (nachobrodin@gmail.com)
54 54
 */
55
public class InfoByWMSPointExtension extends Extension {
55
public class InfoByWMSPointExtension extends Extension  {
56 56
	private InfoByPixelPointViewTool     lastTool      = null;
57 57
	public static Behavior               oldBehavior   = null;
58
	
59 58
	/*
60 59
	 * (non-Javadoc)
61 60
	 * @see org.gvsig.andami.plugins.IExtension#execute(java.lang.String)
......
80 79
					return;
81 80
				}
82 81
			}
83
			MainInfoByPointDialog dialog = new MainInfoByPointDialog(false);
82
			MainInfoByPointDialog dialog = new MainInfoByPointDialog();
84 83
			InfoByPointDataModel model = dialog.getInfoByPointDataModel();
85 84
			((Observable)model).addObserver((Observer)dialog.getMainPanel());
86 85
			
87
			lastTool = new InfoByPixelPointViewTool(mapCtrl, model);
86
			lastTool = new InfoByPixelPointViewTool(mapCtrl, model, dialog);
88 87
			mapCtrl.addBehavior("infoByRasterPoint", 
89 88
					new Behavior[]{new PointBehavior(lastTool),
90 89
					new MouseMovementBehavior(sbl)});
org.gvsig.raster.wms/trunk/org.gvsig.raster.wms/org.gvsig.raster.wms.app/org.gvsig.raster.wms.app.wmsclient/src/main/java/org/gvsig/raster/wms/app/wmsclient/infobypoint/MainInfoByPointDialog.java
23 23

  
24 24
import java.awt.BorderLayout;
25 25
import java.awt.Component;
26
import java.awt.event.ActionEvent;
27
import java.awt.event.ActionListener;
26
import java.awt.Dimension;
28 27
import java.util.HashMap;
29 28

  
30 29
import javax.swing.ImageIcon;
30
import javax.swing.JEditorPane;
31 31
import javax.swing.JPanel;
32
import javax.swing.JScrollPane;
32 33

  
33 34
import org.gvsig.andami.IconThemeHelper;
34 35
import org.gvsig.andami.PluginServices;
......
44 45
 * Dialog for the information by point of a raster layer
45 46
 * @author Nacho Brodin (nachobrodin@gmail.com)
46 47
 */
47
public class MainInfoByPointDialog extends JPanel implements IWindow, ActionListener {
48
public class MainInfoByPointDialog extends JPanel implements IWindow {
48 49
	private static final long               serialVersionUID   = 1L;
49 50
	private MainInfoByPointPanel            mainPanel          = null;
50
	private boolean                         extended           = false;
51
	private JScrollPane                     scroll             = null;
52
	private JPanel                          wmsInfo            = null;
53
	private JEditorPane                     jeditor            = null;
51 54
	
52
	public MainInfoByPointDialog(boolean extended) {
53
		this.extended = extended;
55
	public MainInfoByPointDialog() {
54 56
		setLayout(new BorderLayout());
55
		add((Component)getMainPanel(), BorderLayout.CENTER);
57
		add((Component)getMainPanel(), BorderLayout.WEST);
58
		add((Component)getWMSInfoPanel(), BorderLayout.CENTER);
56 59
	}
57 60
	
58 61
	public MainInfoByPointPanel getMainPanel() {
......
77 80
			icons.put("forward-icon", IconThemeHelper.getImageIcon("forward-icon"));
78 81
			icons.put("backward-icon", IconThemeHelper.getImageIcon("backward-icon"));
79 82
			mainPanel = RasterSwingLocator.getSwingManager().createInfoByPointPanel(
80
					translations, icons, extended);
81
			mainPanel.addListenerExtendedButton(this);
83
					translations, icons, null);
84
			((JPanel)mainPanel).setPreferredSize(new Dimension(230, 0));
82 85
		}
83 86
		return mainPanel;
84 87
	}
85 88

  
89
	private JPanel getWMSInfoPanel() {
90
		if(wmsInfo == null) {
91
			wmsInfo = new JPanel();
92
			wmsInfo.setLayout(new BorderLayout());
93
			jeditor = new JEditorPane();
94
			scroll = new JScrollPane(jeditor);
95
			wmsInfo.add(scroll, BorderLayout.CENTER);
96
		}
97
		return wmsInfo;
98
	}
99

  
100
	public void setWMSInfoText(String text, String type) {
101
		jeditor.setContentType(type);
102
		jeditor.setText(text);
103
	}
104
	
86 105
	/*
87 106
	 * (non-Javadoc)
88 107
	 * @see com.iver.andami.ui.mdiManager.IWindow#getWindowInfo()
89 108
	 */
90 109
	public WindowInfo getWindowInfo() {
91
		WindowInfo m_viewinfo = new WindowInfo(WindowInfo.MODELESSDIALOG);
110
		WindowInfo m_viewinfo = new WindowInfo(WindowInfo.MODELESSDIALOG | WindowInfo.RESIZABLE);
92 111
		m_viewinfo.setTitle(PluginServices.getText(this, "WMS InfoByPoint"));
93 112
		m_viewinfo.setHeight(380);
94
		m_viewinfo.setWidth(250);
113
		m_viewinfo.setWidth(500);
95 114
		return m_viewinfo;
96 115
	}
97 116
	
......
114 133
	public PixelInspector getPixelInspector() {
115 134
		return getMainPanel().getPixelInspectorPanel();
116 135
	}
117

  
118
	public void actionPerformed(ActionEvent e) {
119
	}
120
}
136
}
org.gvsig.raster.wms/trunk/org.gvsig.raster.wms/org.gvsig.raster.wms.app/org.gvsig.raster.wms.app.wmsclient/src/main/java/org/gvsig/raster/wms/app/wmsclient/infobypoint/viewtool/InfoByPixelPointViewTool.java
22 22
package org.gvsig.raster.wms.app.wmsclient.infobypoint.viewtool;
23 23

  
24 24
import java.awt.Image;
25
import java.awt.Point;
25 26
import java.awt.geom.Point2D;
26 27
import java.awt.image.BufferedImage;
27 28
import java.util.ArrayList;
......
33 34
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
34 35
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
35 36
import org.gvsig.fmap.dal.coverage.util.ColorConversion;
37
import org.gvsig.fmap.dal.exception.DataException;
36 38
import org.gvsig.fmap.mapcontext.ViewPort;
39
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
37 40
import org.gvsig.fmap.mapcontext.layers.FLayer;
38 41
import org.gvsig.fmap.mapcontext.layers.FLayers;
39 42
import org.gvsig.fmap.mapcontrol.MapControl;
40 43
import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
41 44
import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
42 45
import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
43
import org.gvsig.raster.fmap.layers.FLyrRaster;
44 46
import org.gvsig.raster.swing.infobypoint.InfoByPointDataModel;
47
import org.gvsig.raster.wms.app.wmsclient.infobypoint.MainInfoByPointDialog;
48
import org.gvsig.raster.wms.app.wmsclient.layer.DynObjectSetWMSInfo;
49
import org.gvsig.raster.wms.app.wmsclient.layer.FLyrWMS;
45 50

  
46 51
/**
47 52
 * Extensi?n de la clase SelectImageListenerImple de FMap. Esta clase permite
......
57 62
	private ViewPort                 viewPort            = null;
58 63
	private FLayers                  layers              = null;
59 64
	private List<String>             list                = null;
65
	private MainInfoByPointDialog    dialog              = null;
66
	
60 67
	/**
61 68
	 * Reference to the <code>MapControl</code> object that uses.
62 69
	 */
......
71 78
	 * Contructor
72 79
	 * @param mapCtrl
73 80
	 */
74
	public InfoByPixelPointViewTool(MapControl mapCtrl, InfoByPointDataModel model) {
81
	public InfoByPixelPointViewTool(
82
			MapControl mapCtrl, 
83
			InfoByPointDataModel model,
84
			MainInfoByPointDialog dialog) {
75 85
		this.mapCtrl = mapCtrl;
76 86
		this.model = model;
87
		this.dialog = dialog;
77 88
		conv = rManager.getColorConversion();
78 89
		viewPort = mapCtrl.getViewPort();
79 90
		layers = mapCtrl.getMapContext().getLayers();
......
111 122
		//Raster dependent
112 123
		
113 124
		list.clear();
114
		FLyrRaster selected = null;
125
		FLyrWMS selected = null;
115 126
		for (int i = layers.getLayersCount() - 1; i >= 0; i--) {
116 127
			FLayer lyr = layers.getLayer(i);
117
			if(lyr instanceof FLyrRaster) {
118
				FLyrRaster raster = (FLyrRaster)lyr;
128
			if(lyr instanceof FLyrWMS) {
129
				FLyrWMS raster = (FLyrWMS)lyr;
119 130
				if(raster.isInside(mapPoint)) {
120 131
					list.add(raster.getName());
121 132
					if(raster.isActive())
......
138 149
		}
139 150
		model.setLayerList(list);
140 151
		
152
		Point p = new Point();
153
		p.setLocation(mapPoint.getX(), mapPoint.getY());
154
		try {
155
			DynObjectSetWMSInfo dos = (DynObjectSetWMSInfo)selected.getInfo(p, 0D, null, true);
156
			String txt = dos.getInfoElement();
157
			dialog.setWMSInfoText(txt, "text/html");
158
		} catch (LoadLayerException e) {
159
			e.printStackTrace();
160
		} catch (DataException e) {
161
			e.printStackTrace();
162
		}
141 163
		model.notifyObservers();
142 164
	}
143 165
	

Also available in: Unified diff