Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.raster.tools / org.gvsig.raster.tools.app / org.gvsig.raster.tools.app.mainplugin / src / main / java / org / gvsig / raster / tools / app / mainplugin / ViewClipExtension.java @ 6796

History | View | Annotate | Download (5.84 KB)

1
package org.gvsig.raster.tools.app.mainplugin;
2

    
3
import java.awt.Dimension;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6

    
7
import javax.swing.JOptionPane;
8

    
9
import org.apache.commons.lang3.StringUtils;
10
import org.slf4j.Logger;
11
import org.slf4j.LoggerFactory;
12

    
13
import org.gvsig.andami.IconThemeHelper;
14
import org.gvsig.andami.plugins.Extension;
15
import org.gvsig.app.ApplicationLocator;
16
import org.gvsig.app.ApplicationManager;
17
import org.gvsig.app.project.documents.view.ViewDocument;
18
import org.gvsig.app.project.documents.view.gui.IView;
19
import org.gvsig.fmap.mapcontrol.MapControl;
20
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
21
import org.gvsig.raster.swing.buffer.RasterSwingBufferLocator;
22
import org.gvsig.raster.swing.buffer.RasterSwingBufferManager;
23
import org.gvsig.raster.swing.buffer.save.SaveBufferDialog;
24
import org.gvsig.raster.tools.lib.api.exceptions.RasterToolException;
25
import org.gvsig.raster.tools.swing.api.RasterToolsSwingLocator;
26
import org.gvsig.raster.tools.swing.api.RasterToolsSwingManager;
27
import org.gvsig.raster.tools.swing.api.viewclip.ViewClipPanel;
28
import org.gvsig.tools.ToolsLocator;
29
import org.gvsig.tools.i18n.I18nManager;
30
import org.gvsig.tools.swing.api.ToolsSwingLocator;
31
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
32
import org.gvsig.tools.swing.api.windowmanager.Dialog;
33
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
34
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
35

    
36
/**
37
 *
38
 * @author fdiaz
39
 *
40
 */
41
public class ViewClipExtension extends Extension {
42

    
43
    private static final Logger logger = LoggerFactory.getLogger(ViewClipExtension.class);
44

    
45
//    public static final String VIEW_CLIP_TOOL_NAME = "view-clip-tool";
46

    
47

    
48
    @Override
49
    public void initialize() {
50
        IconThemeHelper.registerIcon("action", "view-clip-icon", this);
51
        IconThemeHelper.registerIcon("clip", "downright", this);
52
        IconThemeHelper.registerIcon("clip", "upleft", this);
53
    }
54

    
55
    @Override
56
    public void execute(String actionCommand) {
57

    
58
        if (StringUtils.equalsIgnoreCase(actionCommand, "view-clip")) {
59
            IView view = getActiveView();
60
            MapControl mapControl = view.getMapControl();
61

    
62
            final WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
63
            final RasterToolsSwingManager manager = RasterToolsSwingLocator.getSwingManager();
64
            final I18nManager i18nManager = ToolsLocator.getI18nManager();
65

    
66
            final ViewClipPanel panel;
67
            try {
68
                panel = manager.createViewClipPanel();
69
                panel.asJComponent().setPreferredSize(new Dimension(500, 250));
70
                panel.set(mapControl);
71
            } catch (RasterToolException e2) {
72
                logger.error("Error creating panel", e2);
73
                JOptionPane.showMessageDialog(
74
                    null,
75
                    new StringBuilder().append(i18nManager.getTranslation("error_creating_panel")).append(":")
76
                        .append(e2.getLocalizedMessage()), i18nManager.getTranslation("error"),
77
                    JOptionPane.ERROR_MESSAGE);
78
                return;
79
            }
80

    
81
            final Dialog dialog =
82
                winManager.createDialog(panel.asJComponent(), i18nManager.getTranslation("view_clip"), null,
83
                    WindowManager_v2.BUTTONS_APPLY_OK_CANCEL);
84

    
85
            dialog.addActionListener(new ActionListener() {
86

    
87
                @Override
88
                public void actionPerformed(ActionEvent e) {
89
                    switch (dialog.getAction()) {
90
                    case WindowManager_v2.BUTTON_APPLY:
91
                        doClip(panel);
92
                        break;
93

    
94
                    case WindowManager_v2.BUTTON_OK:
95
                        if (doClip(panel)) {
96
                            panel.asJComponent().setVisible(false);
97
                        }
98
                        break;
99

    
100
                    case WindowManager_v2.BUTTON_CANCEL:
101
                        panel.asJComponent().setVisible(false);
102
                        break;
103
                    }
104

    
105
                }
106

    
107
            });
108
            dialog.show(WindowManager.MODE.WINDOW);
109
        }
110
    }
111

    
112
    private boolean doClip(ViewClipPanel panel) {
113
        ThreadSafeDialogsManager dlgManager = ToolsSwingLocator.getThreadSafeDialogsManager();
114

    
115
        RasterSwingBufferManager rasterSwingBufferManager = RasterSwingBufferLocator.getSwingManager();
116
        SaveBufferDialog saveBufferDialog = rasterSwingBufferManager.createSaveBufferDialog();
117

    
118
        try {
119
            panel.fetch(saveBufferDialog);
120
        } catch (BufferException e) {
121
            logger.warn("Can't create raster clip.", e);
122

    
123
            String message = "_cant_create_raster_clip";
124
            String title = "_error_creating_clip";
125
            dlgManager.messageDialog(message, title, JOptionPane.WARNING_MESSAGE);
126
            return false;
127
        }
128

    
129
        saveBufferDialog.showDialog(null);
130
        return true;
131
    }
132

    
133
    @Override
134
    public boolean isEnabled() {
135
        IView view = getActiveView();
136
        if (view!=null){
137
            MapControl mapControl = view.getMapControl();
138
            if(mapControl.hasTool(ViewClipPanel.VIEW_CLIP_TOOL_NAME)){
139
                return false;
140
            }
141
            ViewDocument viewDocument = view.getViewDocument();
142
            return viewDocument.getMapContext().hasLayers();
143
        }
144
        return false;
145
    }
146

    
147
    @Override
148
    public boolean isVisible() {
149
        IView view = getActiveView();
150
        if (view!=null){
151
            ViewDocument viewDocument = view.getViewDocument();
152
            return viewDocument!=null;
153
        }
154
        return false;
155
    }
156

    
157
    private IView getActiveView() {
158
        ApplicationManager application = ApplicationLocator.getManager();
159
        IView view = (IView) application.getActiveComponent(ViewDocument.class);
160
        return view;
161
    }
162

    
163
}