Statistics
| Revision:

root / branches / v2_0_0_prep / applications / appgvSIG / src / org / gvsig / app / panelGroup / PanelGroupDialog.java @ 29598

History | View | Annotate | Download (16 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 */
19

    
20
package org.gvsig.app.panelGroup;
21

    
22
import java.awt.BorderLayout;
23
import java.awt.Dimension;
24
import java.io.Serializable;
25
import java.util.Hashtable;
26

    
27
import javax.swing.JOptionPane;
28

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

    
49

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

    
63
        /**
64
         * <p>Default width.</p>
65
         */
66
        protected static int defaultWidth = 530;
67

    
68
        /**
69
         * <p>Default height.</p>
70
         */
71
        protected static int defaultHeight = 432;
72

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

    
80
        /**
81
         * <p>Properties about the managing of this dialog by <i>Andami</i>.</p>
82
         */
83
        private WindowInfo windowInfo;
84

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

    
95
                windowInfo = new WindowInfo();
96
                windowInfo.setTitle(PluginServices.getText(this, windowTitle));
97
                windowInfo.setWidth(defaultWidth);
98
                windowInfo.setHeight(defaultHeight);
99

    
100
                this.panelGroup = panelGroup;
101

    
102
                initialize();
103
        }
104

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

    
121
                windowInfo = new WindowInfo(windowInfoProperties);
122
                windowInfo.setAdditionalInfo(additionalInfo);
123
                windowInfo.setTitle(PluginServices.getText(this, windowTitle));
124
                windowInfo.setWidth(width);
125
                windowInfo.setHeight(height);
126

    
127
                this.panelGroup = panelGroup;
128

    
129
                initialize();
130
        }
131

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

    
139
                this.panelGroup.setParentPanelGroup(this);
140

    
141
                // Mask possible extra exceptions
142
                if (panelGroup != null) {
143
                        add((AbstractPanelGroup)panelGroup, BorderLayout.CENTER);
144

    
145
                        // Holds the preferred size
146
                        if ((windowInfo.getWidth() > getPreferredSize().width) || (windowInfo.getHeight() > getPreferredSize().height)) {
147
                                setPreferredSize(new Dimension(Math.max(windowInfo.getWidth(), getWidth()), Math.max(windowInfo.getHeight(), getHeight())));
148
                        }
149
                }
150
        }
151

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

    
161
        /**
162
         * <p>Closes this {@link IWindow IWindow}.</p>
163
         */
164
        public void close() {
165
                PluginServices.getMDIManager().closeWindow(this);
166
        }
167

    
168
        /*
169
         * (non-Javadoc)
170
         * @see com.iver.andami.ui.mdiManager.IWindow#getWindowInfo()
171
         */
172
        public WindowInfo getWindowInfo() {
173
                return windowInfo;
174
        }
175

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

    
199
        /*
200
         * (non-Javadoc)
201
         * @see com.iver.andami.ui.mdiManager.IWindowListener#windowActivated()
202
         */
203
        public void windowActivated() {}
204

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

    
218
        /*
219
         * (non-Javadoc)
220
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#accept()
221
         */
222
        public void accept() {
223
                panelGroup.accept();
224
        }
225

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

    
234
        /*
235
         * (non-Javadoc)
236
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#apply()
237
         */
238
        public void apply() {
239
                panelGroup.apply();
240
        }
241

    
242
        /*
243
         * (non-Javadoc)
244
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#cancel()
245
         */
246
        public void cancel() {
247
                panelGroup.cancel();
248
        }
249

    
250
        /*
251
         * (non-Javadoc)
252
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getActivePanel()
253
         */
254
        public IPanel getActivePanel() {
255
                return panelGroup.getActivePanel();
256
        }
257

    
258
        /*
259
         * (non-Javadoc)
260
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getProperties()
261
         */
262
        public Hashtable getProperties() {
263
                return panelGroup.getProperties();
264
        }
265

    
266
        /*
267
         * (non-Javadoc)
268
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getReference()
269
         */
270
        public Object getReference() {
271
                return panelGroup.getReference();
272
        }
273

    
274
        /*
275
         * (non-Javadoc)
276
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#updateReference(java.lang.Object)
277
         */
278
        public void updateReference(Object reference) {
279
                panelGroup.updateReference(reference);
280
        }
281

    
282
        /*
283
         * (non-Javadoc)
284
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#isAccepted()
285
         */
286
        public boolean isAccepted() {
287
                return panelGroup.isAccepted();
288
        }
289

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

    
298
                        if (panelGroup.getPanelInGUICount() == 0) {
299
                                close();
300
                        }
301
                }
302
                catch (BaseException be) {
303
                        be.setTranslator(new Messages());
304

    
305
                        JOptionPane.showMessageDialog(this, be.getLocalizedMessageStack());
306

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

    
315
                        // Don't show the dialog if there is no panels in the GUI
316
                        if (panelGroup.getPanelInGUICount() == 0) {
317
                                close();
318
                        }
319
                }
320
        }
321

    
322
        /*
323
         * (non-Javadoc)
324
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#removePanel(org.gvsig.gui.beans.panelGroup.panels.IPanel)
325
         */
326
        public void removePanel(IPanel panel) {
327
                panelGroup.removePanel(panel);
328
        }
329

    
330
        /*
331
         * (non-Javadoc)
332
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#isPanelInGUI(org.gvsig.gui.beans.panelGroup.panels.IPanel)
333
         */
334
        public boolean isPanelInGUI(IPanel panel) {
335
                return panelGroup.isPanelInGUI(panel);
336
        }
337

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

    
346
        /*
347
         * (non-Javadoc)
348
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getPanelCount()
349
         */
350
        public int getPanelCount() {
351
                return panelGroup.getPanelCount();
352
        }
353

    
354
        /*
355
         * (non-Javadoc)
356
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#getPanelInGUICount()
357
         */
358
        public int getPanelInGUICount() {
359
                return panelGroup.getPanelInGUICount();
360
        }
361

    
362
        /*
363
         * (non-Javadoc)
364
         * @see javax.swing.JComponent#setPreferredSize(java.awt.Dimension)
365
         */
366
        public void setPreferredSize(Dimension preferredSize) {
367
                super.setPreferredSize(preferredSize);
368

    
369
                windowInfo.setWidth(preferredSize.width);
370
                windowInfo.setHeight(preferredSize.height);
371
        }
372

    
373
        /*
374
         * (non-Javadoc)
375
         * @see org.gvsig.gui.beans.panelGroup.IPanelGroup#setParentPanelGroup(org.gvsig.gui.beans.panelGroup.IPanelGroup)
376
         */
377
        public void setParentPanelGroup(IPanelGroup parent) {
378
                panelGroup.setParentPanelGroup(parent);
379

    
380
//                this.addComponentListener(new ComponentAdapter())
381
        }
382

    
383
        ///// BEGIN: Buttons Enable/Disable functionality /////
384

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

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

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

    
409
        /*
410
         * (non-Javadoc)
411
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledCloseButton()
412
         */
413
        public boolean isEnabledCloseButton() {
414
                /* Unimplemented */
415
                return false;
416
        }
417

    
418
        /*
419
         * (non-Javadoc)
420
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledExitButton()
421
         */
422
        public boolean isEnabledExitButton() {
423
                /* Unimplemented */
424
                return false;
425
        }
426

    
427
        /*
428
         * (non-Javadoc)
429
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledHideDetailsButton()
430
         */
431
        public boolean isEnabledHideDetailsButton() {
432
                /* Unimplemented */
433
                return false;
434
        }
435

    
436
        /*
437
         * (non-Javadoc)
438
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledNoButton()
439
         */
440
        public boolean isEnabledNoButton() {
441
                /* Unimplemented */
442
                return false;
443
        }
444

    
445
        /*
446
         * (non-Javadoc)
447
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledPauseButton()
448
         */
449
        public boolean isEnabledPauseButton() {
450
                /* Unimplemented */
451
                return false;
452
        }
453

    
454
        /*
455
         * (non-Javadoc)
456
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledRestartButton()
457
         */
458
        public boolean isEnabledRestartButton() {
459
                /* Unimplemented */
460
                return false;
461
        }
462

    
463
        /*
464
         * (non-Javadoc)
465
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledSaveButton()
466
         */
467
        public boolean isEnabledSaveButton() {
468
                /* Unimplemented */
469
                return false;
470
        }
471

    
472
        /*
473
         * (non-Javadoc)
474
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledSeeDetailsButton()
475
         */
476
        public boolean isEnabledSeeDetailsButton() {
477
                /* Unimplemented */
478
                return false;
479
        }
480

    
481
        /*
482
         * (non-Javadoc)
483
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#isEnabledYesButton()
484
         */
485
        public boolean isEnabledYesButton() {
486
                /* Unimplemented */
487
                return false;
488
        }
489

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

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

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

    
514
        /*
515
         * (non-Javadoc)
516
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledCloseButton(boolean)
517
         */
518
        public void setEnabledCloseButton(boolean b) {
519
                /* Unimplemented */
520
        }
521

    
522
        /*
523
         * (non-Javadoc)
524
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledExitButton(boolean)
525
         */
526
        public void setEnabledExitButton(boolean b) {
527
                /* Unimplemented */
528
        }
529

    
530
        /*
531
         * (non-Javadoc)
532
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledHideDetailsButton(boolean)
533
         */
534
        public void setEnabledHideDetailsButton(boolean b) {
535
                /* Unimplemented */
536
        }
537

    
538
        /*
539
         * (non-Javadoc)
540
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledNoButton(boolean)
541
         */
542
        public void setEnabledNoButton(boolean b) {
543
                /* Unimplemented */
544
        }
545

    
546
        /*
547
         * (non-Javadoc)
548
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledPauseButton(boolean)
549
         */
550
        public void setEnabledPauseButton(boolean b) {
551
                /* Unimplemented */
552
        }
553

    
554
        /*
555
         * (non-Javadoc)
556
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledRestartButton(boolean)
557
         */
558
        public void setEnabledRestartButton(boolean b) {
559
                /* Unimplemented */
560
        }
561

    
562
        /*
563
         * (non-Javadoc)
564
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledSaveButton(boolean)
565
         */
566
        public void setEnabledSaveButton(boolean b) {
567
                /* Unimplemented */
568
        }
569

    
570
        /*
571
         * (non-Javadoc)
572
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledSeeDetailsButton(boolean)
573
         */
574
        public void setEnabledSeeDetailsButton(boolean b) {
575
                /* Unimplemented */
576
        }
577

    
578
        /*
579
         * (non-Javadoc)
580
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledYesButton(boolean)
581
         */
582
        public void setEnabledYesButton(boolean b) {
583
                /* Unimplemented */
584
        }
585

    
586
        public Object getWindowProfile() {
587
                return WindowInfo.PROPERTIES_PROFILE;
588
        }
589
        ///// END: Buttons Enable/Disable functionality /////
590
}