Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.app / org.gvsig.app.mainplugin / src / main / java / org / gvsig / app / panelGroup / PanelGroupDialog.java @ 40558

History | View | Annotate | Download (16.1 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.app.panelGroup;
25

    
26
import java.awt.BorderLayout;
27
import java.awt.Dimension;
28
import java.io.Serializable;
29
import java.util.Hashtable;
30

    
31
import javax.swing.JOptionPane;
32

    
33
import org.gvsig.andami.PluginServices;
34
import org.gvsig.andami.messages.NotificationManager;
35
import org.gvsig.andami.ui.mdiManager.IWindow;
36
import org.gvsig.andami.ui.mdiManager.IWindowListener;
37
import org.gvsig.andami.ui.mdiManager.WindowInfo;
38
import org.gvsig.gui.beans.Messages;
39
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
40
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
41
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
42
import org.gvsig.gui.beans.buttonspanel.IButtonsPanel;
43
import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
44
import org.gvsig.gui.beans.panelGroup.AbstractPanelGroup;
45
import org.gvsig.gui.beans.panelGroup.IPanelGroup;
46
import org.gvsig.gui.beans.panelGroup.exceptions.EmptyPanelGroupException;
47
import org.gvsig.gui.beans.panelGroup.exceptions.EmptyPanelGroupGUIException;
48
import org.gvsig.gui.beans.panelGroup.exceptions.ListCouldntAddPanelException;
49
import org.gvsig.gui.beans.panelGroup.loaders.IPanelGroupLoader;
50
import org.gvsig.gui.beans.panelGroup.panels.IPanel;
51
import org.gvsig.tools.exception.BaseException;
52

    
53

    
54
/**
55
 * <p>Graphical component that is represented as an {@link IWindow IWindow}, and that has two immediate internal
56
 *  panels, the top is a {@link PanelGroup PanelGroup}, and the bottom is a {@link PanelGroupDialog PanelGroupDialog}
57
 *  of <code>PanelGroupDialog.BUTTONS_ACCEPTCANCELAPPLY</code> type.</p>
58
 *
59
 * @see DefaultButtonsPanel
60
 *
61
 * @version 15/10/2007
62
 * @author Pablo Piqueras Bartolom? (pablo.piqueras@iver.es)
63
 */
64
public class PanelGroupDialog extends DefaultButtonsPanel implements ButtonsPanelListener, IWindow, IWindowListener, IPanelGroup, IButtonsPanel, Serializable {
65
        private static final long serialVersionUID = 6267404338808012765L;
66

    
67
        /**
68
         * <p>Default width.</p>
69
         */
70
        protected static int defaultWidth = 530;
71

    
72
        /**
73
         * <p>Default height.</p>
74
         */
75
        protected static int defaultHeight = 432;
76

    
77
        /**
78
         * <p>This graphical component has a panel that allows work {@link IPanel IPanel}.</p>
79
         *
80
         * @see #getPanelGroup()
81
         */
82
        protected IPanelGroup panelGroup;
83

    
84
        /**
85
         * <p>Properties about the managing of this dialog by <i>Andami</i>.</p>
86
         */
87
        private WindowInfo windowInfo;
88

    
89
        /**
90
         * <p>Default constructor with two parameters, that creates a panel with an {@link AbstractPanelGroup AbstractPanelGroup}
91
         *  on top and another with <i>accept</i>, <i>apply</i>, and <i>cancel</i> buttons on bottom.</p>
92
         *
93
         * @param windowTitle title for this <code>IWindow</code>
94
         * @param PanelGroup kind of panel for work with this <code>IWindow</code>
95
         */
96
        public PanelGroupDialog(String windowTitle, IPanelGroup panelGroup) {
97
                super(ButtonsPanel.BUTTONS_ACCEPTCANCELAPPLY);
98

    
99
                windowInfo = new WindowInfo();
100
                windowInfo.setTitle(PluginServices.getText(this, windowTitle));
101
                windowInfo.setWidth(defaultWidth);
102
                windowInfo.setHeight(defaultHeight);
103

    
104
                this.panelGroup = panelGroup;
105

    
106
                initialize();
107
        }
108

    
109
        /**
110
         * <p>Default constructor with six parameters, that creates a panel with an {@link AbstractPanelGroup AbstractPanelGroup}
111
         *  on top and another with <i>accept</i>, <i>apply</i>, and <i>cancel</i> buttons on bottom.</p>
112
         * <p>Last parameter is the {@link PanelGroup PanelGroup} graphical component that
113
         *  this panel will have, and the previous are information to initialize this {@link IWindow IWindow}.</p>
114
         *
115
         * @param additionalInfo additional information about this <code>IWindow</code>
116
         * @param windowTitle title for this <code>IWindow</code>
117
         * @param width width for this component
118
         * @param height height for this component
119
         * @param windowInfoProperties properties about the managing of this dialog by <i>Andami</i>
120
         * @param PanelGroup kind of panel for work with this <code>IWindow</code>
121
         */
122
        public PanelGroupDialog(String additionalInfo, String windowTitle, int  width, int height, byte windowInfoProperties, IPanelGroup panelGroup) {
123
                super(ButtonsPanel.BUTTONS_ACCEPTCANCELAPPLY);
124

    
125
                windowInfo = new WindowInfo(windowInfoProperties);
126
                windowInfo.setAdditionalInfo(additionalInfo);
127
                windowInfo.setTitle(PluginServices.getText(this, windowTitle));
128
                windowInfo.setWidth(width);
129
                windowInfo.setHeight(height);
130

    
131
                this.panelGroup = panelGroup;
132

    
133
                initialize();
134
        }
135

    
136
        /**
137
         * <p>This method is used to execute initialization tasks of this graphical component.</p>
138
         */
139
        private void initialize() {
140
                setLayout(new BorderLayout());
141
                addButtonPressedListener(this);
142

    
143
                this.panelGroup.setParentPanelGroup(this);
144

    
145
                // Mask possible extra exceptions
146
                if (panelGroup != null) {
147
                        add((AbstractPanelGroup)panelGroup, BorderLayout.CENTER);
148

    
149
                        // Holds the preferred size
150
                        if ((windowInfo.getWidth() > getPreferredSize().width) || (windowInfo.getHeight() > getPreferredSize().height)) {
151
                                setPreferredSize(new Dimension(Math.max(windowInfo.getWidth(), getWidth()), Math.max(windowInfo.getHeight(), getHeight())));
152
                        }
153
                }
154
        }
155

    
156
        /**
157
         * <p>Determinates if this panel is resizable or not.</p>
158
         *
159
         * @return <code>true</code> if it's resizable; <code>false</code> otherwise.
160
         */
161
        public boolean isResizable() {
162
                return windowInfo.isResizable();
163
        }
164

    
165
        /**
166
         * <p>Closes this {@link IWindow IWindow}.</p>
167
         */
168
        public void close() {
169
                PluginServices.getMDIManager().closeWindow(this);
170
        }
171

    
172
        /*
173
         * (non-Javadoc)
174
         * @see com.iver.andami.ui.mdiManager.IWindow#getWindowInfo()
175
         */
176
        public WindowInfo getWindowInfo() {
177
                return windowInfo;
178
        }
179

    
180
        /*
181
         * (non-Javadoc)
182
         * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
183
         */
184
        public void actionButtonPressed(ButtonsPanelEvent e) {
185
                // Masks possible extra exceptions
186
                if (panelGroup != null) {
187
                        switch (e.getButton()) {
188
                        case ButtonsPanel.BUTTON_ACCEPT:
189
                                accept();
190
                                close();
191
                                break;
192
                        case ButtonsPanel.BUTTON_APPLY:
193
                                apply();
194
                                break;
195
                        case ButtonsPanel.BUTTON_CANCEL:
196
                                cancel();
197
                                close();
198
                                break;
199
                        }
200
                }
201
        }
202

    
203
        /*
204
         * (non-Javadoc)
205
         * @see com.iver.andami.ui.mdiManager.IWindowListener#windowActivated()
206
         */
207
        public void windowActivated() {}
208

    
209
        /*
210
         * (non-Javadoc)
211
         * @see com.iver.andami.ui.mdiManager.IWindowListener#windowClosed()
212
         */
213
        public void windowClosed() {
214
                // Masks possible extra exceptions
215
                if (panelGroup != null) {
216
                        if (!panelGroup.isAccepted()) {
217
                                panelGroup.cancel();
218
                        }
219
                }
220
        }
221

    
222
        /*
223
         * (non-Javadoc)
224
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#accept()
225
         */
226
        public void accept() {
227
                panelGroup.accept();
228
        }
229

    
230
        /*
231
         * (non-Javadoc)
232
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#addPanel(org.gvsig.gui.beans.panelGroup.panels.IPanel)
233
         */
234
        public void addPanel(IPanel panel) throws BaseException {
235
                panelGroup.addPanel(panel);
236
        }
237

    
238
        /*
239
         * (non-Javadoc)
240
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#apply()
241
         */
242
        public void apply() {
243
                panelGroup.apply();
244
        }
245

    
246
        /*
247
         * (non-Javadoc)
248
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#cancel()
249
         */
250
        public void cancel() {
251
                panelGroup.cancel();
252
        }
253

    
254
        /*
255
         * (non-Javadoc)
256
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getActivePanel()
257
         */
258
        public IPanel getActivePanel() {
259
                return panelGroup.getActivePanel();
260
        }
261

    
262
        /*
263
         * (non-Javadoc)
264
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getProperties()
265
         */
266
        public Hashtable getProperties() {
267
                return panelGroup.getProperties();
268
        }
269

    
270
        /*
271
         * (non-Javadoc)
272
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getReference()
273
         */
274
        public Object getReference() {
275
                return panelGroup.getReference();
276
        }
277

    
278
        /*
279
         * (non-Javadoc)
280
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#updateReference(java.lang.Object)
281
         */
282
        public void updateReference(Object reference) {
283
                panelGroup.updateReference(reference);
284
        }
285

    
286
        /*
287
         * (non-Javadoc)
288
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#isAccepted()
289
         */
290
        public boolean isAccepted() {
291
                return panelGroup.isAccepted();
292
        }
293

    
294
        /*
295
         * (non-Javadoc)
296
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#loadPanels(org.gvsig.gui.beans.panelGroup.loaders.IPanelGroupLoader)
297
         */
298
        public void loadPanels(IPanelGroupLoader loader) throws ListCouldntAddPanelException, EmptyPanelGroupException, EmptyPanelGroupGUIException {
299
                try {
300
                        panelGroup.loadPanels(loader);
301

    
302
                        if (panelGroup.getPanelInGUICount() == 0) {
303
                                close();
304
                        }
305
                }
306
                catch (BaseException be) {
307
                        be.setTranslator(new Messages());
308

    
309
                        JOptionPane.showMessageDialog(this, be.getLocalizedMessageStack());
310

    
311
                        // Don't show the dialog if there is no panels in the GUI
312
                        if (panelGroup.getPanelInGUICount() == 0) {
313
                                close();
314
                        }
315
                }
316
                catch (Exception e) {
317
                        NotificationManager.showMessageError(e.getMessage(), e);
318

    
319
                        // Don't show the dialog if there is no panels in the GUI
320
                        if (panelGroup.getPanelInGUICount() == 0) {
321
                                close();
322
                        }
323
                }
324
        }
325

    
326
        /*
327
         * (non-Javadoc)
328
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#removePanel(org.gvsig.gui.beans.panelGroup.panels.IPanel)
329
         */
330
        public void removePanel(IPanel panel) {
331
                panelGroup.removePanel(panel);
332
        }
333

    
334
        /*
335
         * (non-Javadoc)
336
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#isPanelInGUI(org.gvsig.gui.beans.panelGroup.panels.IPanel)
337
         */
338
        public boolean isPanelInGUI(IPanel panel) {
339
                return panelGroup.isPanelInGUI(panel);
340
        }
341

    
342
        /*
343
         * (non-Javadoc)
344
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#setPanelInGUI(org.gvsig.gui.beans.panelGroup.panels.IPanel, boolean)
345
         */
346
        public void setPanelInGUI(IPanel panel, boolean b) {
347
                panelGroup.setPanelInGUI(panel, b);
348
        }
349

    
350
        /*
351
         * (non-Javadoc)
352
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getPanelCount()
353
         */
354
        public int getPanelCount() {
355
                return panelGroup.getPanelCount();
356
        }
357

    
358
        /*
359
         * (non-Javadoc)
360
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getPanelInGUICount()
361
         */
362
        public int getPanelInGUICount() {
363
                return panelGroup.getPanelInGUICount();
364
        }
365

    
366
        /*
367
         * (non-Javadoc)
368
         * @see javax.swing.JComponent#setPreferredSize(java.awt.Dimension)
369
         */
370
        public void setPreferredSize(Dimension preferredSize) {
371
                super.setPreferredSize(preferredSize);
372

    
373
                windowInfo.setWidth(preferredSize.width);
374
                windowInfo.setHeight(preferredSize.height);
375
        }
376

    
377
        /*
378
         * (non-Javadoc)
379
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#setParentPanelGroup(org.gvsig.gui.beans.panelGroup.IPanelGroup)
380
         */
381
        public void setParentPanelGroup(IPanelGroup parent) {
382
                panelGroup.setParentPanelGroup(parent);
383

    
384
//                this.addComponentListener(new ComponentAdapter())
385
        }
386

    
387
        ///// BEGIN: Buttons Enable/Disable functionality /////
388

    
389
        /*
390
         * (non-Javadoc)
391
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledAcceptButton()
392
         */
393
        public boolean isEnabledAcceptButton() {
394
                return getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT).isEnabled();
395
        }
396

    
397
        /*
398
         * (non-Javadoc)
399
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledApplyButton()
400
         */
401
        public boolean isEnabledApplyButton() {
402
                return getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY).isEnabled();
403
        }
404

    
405
        /*
406
         * (non-Javadoc)
407
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledCancelButton()
408
         */
409
        public boolean isEnabledCancelButton() {
410
                return getButtonsPanel().getButton(ButtonsPanel.BUTTON_CANCEL).isEnabled();
411
        }
412

    
413
        /*
414
         * (non-Javadoc)
415
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledCloseButton()
416
         */
417
        public boolean isEnabledCloseButton() {
418
                /* Unimplemented */
419
                return false;
420
        }
421

    
422
        /*
423
         * (non-Javadoc)
424
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledExitButton()
425
         */
426
        public boolean isEnabledExitButton() {
427
                /* Unimplemented */
428
                return false;
429
        }
430

    
431
        /*
432
         * (non-Javadoc)
433
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledHideDetailsButton()
434
         */
435
        public boolean isEnabledHideDetailsButton() {
436
                /* Unimplemented */
437
                return false;
438
        }
439

    
440
        /*
441
         * (non-Javadoc)
442
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledNoButton()
443
         */
444
        public boolean isEnabledNoButton() {
445
                /* Unimplemented */
446
                return false;
447
        }
448

    
449
        /*
450
         * (non-Javadoc)
451
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledPauseButton()
452
         */
453
        public boolean isEnabledPauseButton() {
454
                /* Unimplemented */
455
                return false;
456
        }
457

    
458
        /*
459
         * (non-Javadoc)
460
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledRestartButton()
461
         */
462
        public boolean isEnabledRestartButton() {
463
                /* Unimplemented */
464
                return false;
465
        }
466

    
467
        /*
468
         * (non-Javadoc)
469
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledSaveButton()
470
         */
471
        public boolean isEnabledSaveButton() {
472
                /* Unimplemented */
473
                return false;
474
        }
475

    
476
        /*
477
         * (non-Javadoc)
478
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledSeeDetailsButton()
479
         */
480
        public boolean isEnabledSeeDetailsButton() {
481
                /* Unimplemented */
482
                return false;
483
        }
484

    
485
        /*
486
         * (non-Javadoc)
487
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledYesButton()
488
         */
489
        public boolean isEnabledYesButton() {
490
                /* Unimplemented */
491
                return false;
492
        }
493

    
494
        /*
495
         * (non-Javadoc)
496
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledAcceptButton(boolean)
497
         */
498
        public void setEnabledAcceptButton(boolean b) {
499
                getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT).setEnabled(b);
500
        }
501

    
502
        /*
503
         * (non-Javadoc)
504
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledApplyButton(boolean)
505
         */
506
        public void setEnabledApplyButton(boolean b) {
507
                getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY).setEnabled(b);
508
        }
509

    
510
        /*
511
         * (non-Javadoc)
512
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledCancelButton(boolean)
513
         */
514
        public void setEnabledCancelButton(boolean b) {
515
                getButtonsPanel().getButton(ButtonsPanel.BUTTON_CANCEL).setEnabled(b);
516
        }
517

    
518
        /*
519
         * (non-Javadoc)
520
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledCloseButton(boolean)
521
         */
522
        public void setEnabledCloseButton(boolean b) {
523
                /* Unimplemented */
524
        }
525

    
526
        /*
527
         * (non-Javadoc)
528
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledExitButton(boolean)
529
         */
530
        public void setEnabledExitButton(boolean b) {
531
                /* Unimplemented */
532
        }
533

    
534
        /*
535
         * (non-Javadoc)
536
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledHideDetailsButton(boolean)
537
         */
538
        public void setEnabledHideDetailsButton(boolean b) {
539
                /* Unimplemented */
540
        }
541

    
542
        /*
543
         * (non-Javadoc)
544
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledNoButton(boolean)
545
         */
546
        public void setEnabledNoButton(boolean b) {
547
                /* Unimplemented */
548
        }
549

    
550
        /*
551
         * (non-Javadoc)
552
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledPauseButton(boolean)
553
         */
554
        public void setEnabledPauseButton(boolean b) {
555
                /* Unimplemented */
556
        }
557

    
558
        /*
559
         * (non-Javadoc)
560
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledRestartButton(boolean)
561
         */
562
        public void setEnabledRestartButton(boolean b) {
563
                /* Unimplemented */
564
        }
565

    
566
        /*
567
         * (non-Javadoc)
568
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledSaveButton(boolean)
569
         */
570
        public void setEnabledSaveButton(boolean b) {
571
                /* Unimplemented */
572
        }
573

    
574
        /*
575
         * (non-Javadoc)
576
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledSeeDetailsButton(boolean)
577
         */
578
        public void setEnabledSeeDetailsButton(boolean b) {
579
                /* Unimplemented */
580
        }
581

    
582
        /*
583
         * (non-Javadoc)
584
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledYesButton(boolean)
585
         */
586
        public void setEnabledYesButton(boolean b) {
587
                /* Unimplemented */
588
        }
589

    
590
        public Object getWindowProfile() {
591
                return WindowInfo.PROPERTIES_PROFILE;
592
        }
593
        ///// END: Buttons Enable/Disable functionality /////
594
}