Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.swing / org.gvsig.tools.swing.impl / src / main / java / org / gvsig / tools / swing / impl / DefaultToolsSwingManager.java @ 2260

History | View | Annotate | Download (24.8 KB)

1
package org.gvsig.tools.swing.impl;
2

    
3
import org.gvsig.tools.swing.api.FilteredListModel;
4
import java.awt.BorderLayout;
5
import java.awt.Color;
6
import java.awt.Cursor;
7
import java.awt.Dimension;
8
import java.awt.event.ActionEvent;
9
import java.awt.event.ActionListener;
10
import java.awt.image.BufferedImage;
11
import java.awt.image.WritableRaster;
12
import java.beans.PropertyChangeEvent;
13
import java.io.File;
14
import java.lang.reflect.InvocationTargetException;
15
import java.lang.reflect.Method;
16
import javax.swing.AbstractAction;
17
import javax.swing.AbstractButton;
18
import javax.swing.Action;
19
import javax.swing.ComboBoxModel;
20
import javax.swing.Icon;
21
import javax.swing.ImageIcon;
22
import javax.swing.JButton;
23
import javax.swing.JComboBox;
24
import javax.swing.JComponent;
25
import javax.swing.JLabel;
26
import javax.swing.JList;
27
import javax.swing.JMenuItem;
28
import javax.swing.JPopupMenu;
29
import javax.swing.JScrollPane;
30
import javax.swing.JSlider;
31
import javax.swing.JTabbedPane;
32
import javax.swing.JTable;
33
import javax.swing.JTree;
34
import javax.swing.JViewport;
35
import javax.swing.border.TitledBorder;
36
import javax.swing.table.TableModel;
37
import javax.swing.text.DefaultEditorKit;
38
import javax.swing.text.JTextComponent;
39
import javax.swing.tree.TreeModel;
40
import org.apache.commons.lang3.StringUtils;
41
import org.gvsig.tools.ToolsLocator;
42
import org.gvsig.tools.bookmarksandhistory.Bookmarks;
43
import org.gvsig.tools.bookmarksandhistory.History;
44
import org.gvsig.tools.i18n.I18nManager;
45
import org.gvsig.tools.swing.api.ActionListenerSupport;
46
import org.gvsig.tools.swing.api.ChangeListenerHelper;
47
import org.gvsig.tools.swing.api.ColorChooserController;
48
import org.gvsig.tools.swing.api.CompoundIcon;
49
import org.gvsig.tools.swing.api.DropDown;
50
import org.gvsig.tools.swing.api.FilteredListController;
51
import org.gvsig.tools.swing.api.FilteredTableModel;
52
import org.gvsig.tools.swing.api.FilteredTreeController;
53
import org.gvsig.tools.swing.api.FilteredTreeModel;
54
import org.gvsig.tools.swing.api.JListWithCheckbox;
55
import org.gvsig.tools.swing.api.JWebBrowser;
56
import org.gvsig.tools.swing.api.JWebBrowserFactory;
57
import org.gvsig.tools.swing.api.MessageBarController;
58
import org.gvsig.tools.swing.api.SimpleImage;
59
import org.gvsig.tools.swing.api.TableColumnAdjuster;
60
import org.gvsig.tools.swing.api.ToolsSwingLocator;
61
import org.gvsig.tools.swing.api.ToolsSwingManager;
62
import org.gvsig.tools.swing.api.pickercontroller.ColorPickerController;
63
import org.gvsig.tools.swing.api.pickercontroller.DatePickerController;
64
import org.gvsig.tools.swing.api.pickercontroller.FilePickerController;
65
import org.gvsig.tools.swing.api.pickercontroller.FolderPickerController;
66
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
67
import org.gvsig.tools.swing.icontheme.IconTheme;
68
import org.gvsig.tools.swing.icontheme.IconThemeManager;
69
import org.gvsig.tools.swing.impl.bufferedImage.VirtualBufferedImageHelper;
70
import org.gvsig.tools.swing.impl.bufferedImage.VirtualBufferedImageHelper.VirtualDataBuffer;
71
import org.gvsig.tools.swing.impl.pickercontroller.BytearrayPickerControllerImpl;
72
import org.gvsig.tools.swing.impl.pickercontroller.ColorPickerControllerImpl;
73
import org.gvsig.tools.swing.impl.pickercontroller.DatePickerControllerImpl;
74
import org.gvsig.tools.swing.impl.pickercontroller.FilePickerControllerImpl;
75
import org.gvsig.tools.swing.impl.pickercontroller.FolderPickerControllerImpl;
76
import org.gvsig.tools.swing.api.bookmarkshistory.BookmarksController;
77
import org.gvsig.tools.swing.api.bookmarkshistory.HistoryController;
78
import org.gvsig.tools.swing.api.pickercontroller.DataTypePickerController;
79
import org.gvsig.tools.swing.impl.bookmarkshistory.DefaultBookmarksController;
80
import org.gvsig.tools.swing.impl.bookmarkshistory.DefaultHistoryController;
81
import org.gvsig.tools.swing.impl.pickercontroller.DataTypePickerControllerImpl;
82

    
83
public class DefaultToolsSwingManager implements ToolsSwingManager {
84

    
85
    private Dimension maxPhysicalSizeOfBufferedImage;
86
    private JWebBrowserFactory webBrowserfactory;
87

    
88
    @Override
89
    public ActionListenerSupport createActionListenerSupport() {
90
        return new DefaultActionListenerSupport();
91
    }
92

    
93
    @Override
94
    public JListWithCheckbox createJListWithCheckbox(JList wrappedList) {
95
        return new DefaultJListWithCheckbox(wrappedList);
96
    }
97

    
98
    @Override
99
    public void setTreeModel(JComboBox comboBox, TreeModel aTreeModel) {
100
        TreeComboUtils.setTreeModel(comboBox, aTreeModel);
101
    }
102

    
103
    @Override
104
    public ComboBoxModel createComboBoxModel(TreeModel treeModel) {
105
        return TreeComboUtils.createComboBoxModel(treeModel);
106
    }
107

    
108
    @Override
109
    public BufferedImage createBufferedImage(int w, int h, int type) {
110
        if (getMaxPhysicalSizeOfBufferedImage().getWidth() < w || getMaxPhysicalSizeOfBufferedImage().getHeight() < h) {
111
            return createVirtualBufferedImage(w, h, type);
112
        }
113
        return new BufferedImage(w, h, type);
114
    }
115

    
116
    @Override
117
    public BufferedImage createVirtualBufferedImage(int w, int h, int type) {
118
        return VirtualBufferedImageHelper.createVirtualBufferedImage(w, h, type);
119
    }
120

    
121
    @Override
122
    public BufferedImage copyBufferedImage(BufferedImage img) {
123
        WritableRaster sourceRaster = img.getRaster();
124

    
125
        BufferedImage newImage;
126
        if (sourceRaster.getDataBuffer() instanceof VirtualDataBuffer) {
127
            newImage = VirtualBufferedImageHelper.createVirtualBufferedImage(
128
                    img.getWidth(),
129
                    img.getHeight(),
130
                    img.getSampleModel(),
131
                    img.getColorModel()
132
            );
133
        } else {
134
            newImage = createBufferedImage(img.getWidth(), img.getHeight(), img.getType());
135
        }
136

    
137
        WritableRaster raster = newImage.getRaster();
138
        img.copyData(raster);
139
        return newImage;
140
    }
141

    
142
    @Override
143
    public void setMaxPhysicalSizeOfBufferedImage(Dimension dimension) {
144
        this.maxPhysicalSizeOfBufferedImage = dimension;
145
    }
146

    
147
    @Override
148
    public Dimension getMaxPhysicalSizeOfBufferedImage() {
149
        if (this.maxPhysicalSizeOfBufferedImage == null) {
150
            this.maxPhysicalSizeOfBufferedImage = new Dimension(2000, 2000);
151
        }
152
        return this.maxPhysicalSizeOfBufferedImage;
153
    }
154

    
155
    @Override
156
    public ColorChooserController createColorChooserController(JTextComponent txtLabel, JButton btnShowDialog, JSlider sldAlpha, boolean allowNull) {
157
        return new DefaultColorChooserController(txtLabel, btnShowDialog, sldAlpha, allowNull);
158
    }
159

    
160
    @Override
161
    public ColorChooserController createColorChooserController(JTextComponent txtLabel, JButton btnShowDialog) {
162
        return new DefaultColorChooserController(txtLabel, btnShowDialog);
163
    }
164

    
165
    @Override
166
    public ColorChooserController createColorChooserController(JTextComponent txtLabel, JButton btnShowDialog, JSlider sldAlpha) {
167
        return new DefaultColorChooserController(txtLabel, btnShowDialog, sldAlpha);
168
    }
169

    
170
    @Override
171
    public Color alphaBlendingWithOpaqueBackground(Color bgColor, Color fgColor) {
172
        // https://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending
173
        Color src = fgColor;
174
        Color dst = bgColor;
175

    
176
        // double outa = 1;
177
        double srca = src.getAlpha() / 255.0;
178
        double srca_1 = (1 - srca);
179

    
180
        Color color = new Color(
181
                (int) (src.getRed() * srca + dst.getRed() * srca_1) & 0xff,
182
                (int) (src.getGreen() * srca + dst.getGreen() * srca_1) & 0xff,
183
                (int) (src.getBlue() * srca + dst.getBlue() * srca_1) & 0xff
184
        );
185
        return color;
186
    }
187

    
188
    @Override
189
    public Color opaqueColor(Color src) {
190
        // https://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending
191
        double srca = src.getAlpha() / 255.0;
192
        double srca_1 = (1 - srca);
193

    
194
        Color color = new Color(
195
                (int) (src.getRed() * srca + 255 * srca_1) & 0xff,
196
                (int) (src.getGreen() * srca + 255 * srca_1) & 0xff,
197
                (int) (src.getBlue() * srca + 255 * srca_1) & 0xff
198
        );
199
        return color;
200
    }
201

    
202
    private Object call(Object obj, String name, Object... params) {
203
        Class[] types = null;
204
        if (params != null) {
205
            types = new Class[params.length];
206
            for (int i = 0; i < params.length; i++) {
207
                types[i] = params[i].getClass();
208
            }
209
        }
210
        Method method;
211
        try {
212
            method = obj.getClass().getMethod(name, types);
213
            Object r = method.invoke(obj, params);
214
            return r;
215
        } catch (NoSuchMethodException
216
                | SecurityException
217
                | IllegalAccessException
218
                | IllegalArgumentException
219
                | InvocationTargetException ex) {
220
        }
221
        return null;
222
    }
223

    
224
    @Override
225
    public void translate(JComponent component) {
226
        I18nManager i18n = ToolsLocator.getI18nManager();
227
        String text = (String) call(component, "getText", (Object[]) null);
228
        if (!StringUtils.isEmpty(text)) {
229
            call(component, "setText", i18n.getTranslation(text));
230
        }
231
        text = (String) call(component, "getToolTipText", (Object[]) null);
232
        if (!StringUtils.isEmpty(text)) {
233
            text = i18n.getTranslation(text);
234
            call(component, "setToolTipText", toHTML(text));
235
        }
236
    }
237

    
238
    @Override
239
    public void translate(AbstractButton component) {
240
        I18nManager i18n = ToolsLocator.getI18nManager();
241
        String text=  component.getText();
242
        if (!StringUtils.isEmpty(text)) {
243
            component.setText(i18n.getTranslation(text));
244
        }
245
        text = component.getToolTipText();
246
        if (!StringUtils.isEmpty(text)) {
247
            text = i18n.getTranslation(text);
248
            component.setToolTipText(toHTML(text));
249
        }
250
    }
251

    
252
    @Override
253
    public void translate(JLabel component) {
254
        I18nManager i18n = ToolsLocator.getI18nManager();
255
        String text = component.getText();
256
        if (!StringUtils.isEmpty(text)) {
257
            component.setText(i18n.getTranslation(text));
258
        }
259
        text = component.getToolTipText();
260
        if (!StringUtils.isEmpty(text)) {
261
            text = i18n.getTranslation(text);
262
            component.setToolTipText(toHTML(text));
263
        }
264
    }
265

    
266
    @Override
267
    public void translate(JTabbedPane component) {
268
        I18nManager i18n = ToolsLocator.getI18nManager();
269

    
270
        for (int i = 0; i < component.getTabCount(); i++) {
271
            String text = component.getTitleAt(i);
272
            if (!StringUtils.isEmpty(text)) {
273
                component.setTitleAt(i, i18n.getTranslation(text));
274
            }
275
            text = component.getToolTipTextAt(i);
276
            if (!StringUtils.isEmpty(text)) {
277
                text = i18n.getTranslation(text);
278
                component.setToolTipTextAt(i, toHTML(text));
279
            }
280
        }
281
    }
282

    
283
    private String toHTML(String s) {
284
      s = StringUtils.replace(s, "\n", "<br>");
285
      s = StringUtils.replace(s, "<html>", "");
286
      s = StringUtils.replace(s, "</html>", "");
287
      s = "<html>"+s+"</html>";
288
      return s;
289
    }
290
    
291
    @Override
292
    public void setDefaultPopupMenu(final JTextComponent component) {
293
        this.setDefaultPopupMenu(component, null);
294
    }
295

    
296
    @Override
297
    public void setDefaultPopupMenu(final JTextComponent component, String title) {
298
        JPopupMenu popupMenu = new JPopupMenu();
299
        I18nManager i18nManager = ToolsLocator.getI18nManager();
300

    
301
        Action copyAction = component.getActionMap().get(DefaultEditorKit.copyAction);
302
        Action cutAction = component.getActionMap().get(DefaultEditorKit.cutAction);
303
        Action pasteAction = component.getActionMap().get(DefaultEditorKit.pasteAction);
304
        Action selectAllAction = component.getActionMap().get(DefaultEditorKit.selectAllAction);
305

    
306
        if (copyAction == null
307
                && cutAction == null
308
                && pasteAction == null
309
                && selectAllAction == null) {
310
            copyAction = component.getActionMap().get(i18nManager.getTranslation("copy"));
311
            cutAction = component.getActionMap().get(i18nManager.getTranslation("cut"));
312
            pasteAction = component.getActionMap().get(i18nManager.getTranslation("paste"));
313
            selectAllAction = component.getActionMap().get(i18nManager.getTranslation("SelectAll"));
314
        } else {
315
            copyAction.putValue(Action.NAME, i18nManager.getTranslation("copy"));
316
            cutAction.putValue(Action.NAME, i18nManager.getTranslation("cut"));
317
            pasteAction.putValue(Action.NAME, i18nManager.getTranslation("paste"));
318
            selectAllAction.putValue(Action.NAME, i18nManager.getTranslation("SelectAll"));
319
        }
320

    
321
        final String title2;
322
        if (title == null) {
323
            title2 = i18nManager.getTranslation("text_editor");
324
        } else {
325
            title2 = title;
326
        }
327
        Action textEditorAction = new AbstractAction(i18nManager.getTranslation("text_editor")) {
328
            @Override
329
            public void actionPerformed(ActionEvent e) {
330
                DefaultZoomDialog dialog = new DefaultZoomDialog(component, title2, component.getText());
331
                dialog.setEditable(component.isEditable());
332
                dialog.setAlwaysOnTop(true);
333
                dialog.setVisible(true);
334
                if (component.isEditable() && component.isEnabled()) {
335
                    component.setText(dialog.getText());
336
                }
337
            }
338
        };
339
        final JMenuItem menuCut = new JMenuItem(cutAction);
340
        final JMenuItem menuPaste = new JMenuItem(pasteAction);
341

    
342
        popupMenu.add(textEditorAction);
343
        popupMenu.addSeparator();
344

    
345
        popupMenu.add(menuCut);
346
        popupMenu.add(copyAction);
347
        popupMenu.add(menuPaste);
348
        popupMenu.add(selectAllAction);
349

    
350
        if (component.isEnabled() && component.isEditable()) {
351
            menuCut.setEnabled(true);
352
            menuPaste.setEnabled(true);
353
        } else {
354
            menuCut.setEnabled(false);
355
            menuPaste.setEnabled(false);
356
        }
357
        component.addPropertyChangeListener((PropertyChangeEvent evt) -> {
358
          if (evt == null) {
359
            return;
360
          }
361
          if (evt.getPropertyName().equalsIgnoreCase("enabled")) {
362
            boolean enabled = component.isEnabled();
363
            menuCut.setEnabled(enabled);
364
            menuPaste.setEnabled(enabled);
365
          } else if (evt.getPropertyName().equalsIgnoreCase("editable")) {
366
            boolean editable = component.isEditable();
367
            menuCut.setEnabled(editable);
368
            menuPaste.setEnabled(editable);
369
          }
370
        });
371
        component.setComponentPopupMenu(popupMenu);
372
    }
373

    
374
    @Override
375
    public void setDefaultPopupMenu(JComboBox component) {
376
        this.setDefaultPopupMenu((JTextComponent) component.getEditor().getEditorComponent(), null);
377
    }
378

    
379
    @Override
380
    public void setDefaultPopupMenu(JComboBox component, String title) {
381
        this.setDefaultPopupMenu((JTextComponent) component.getEditor().getEditorComponent(), title);
382
    }
383

    
384
    @Override
385
    public ChangeListenerHelper createChangeListenerHelper() {
386
        DefaultChangeListenerHelper x = new DefaultChangeListenerHelper();
387
        return x;
388
    }
389

    
390
    @Override
391
    public ColorPickerController createColorPickerController(JTextComponent txtLabel, JButton btnShowDialog, JSlider sldAlpha, boolean allowNull) {
392
        return new ColorPickerControllerImpl(txtLabel, btnShowDialog, sldAlpha, allowNull);
393
    }
394

    
395
    @Override
396
    public ColorPickerController createColorPickerController(JTextComponent txtLabel, JButton btnShowDialog) {
397
        return new ColorPickerControllerImpl(txtLabel, btnShowDialog);
398
    }
399

    
400
    @Override
401
    public ColorPickerController createColorPickerController(JTextComponent txtLabel, JButton btnShowDialog, JSlider sldAlpha) {
402
        return new ColorPickerControllerImpl(txtLabel, btnShowDialog, sldAlpha);
403
    }
404

    
405
    @Override
406
    public DatePickerController createDatePickerController(JTextComponent txtDate, JButton btnDate) {
407
        return new DatePickerControllerImpl(txtDate, btnDate);
408
    }
409

    
410
    @Override
411
    public FilePickerController createFilePickerController(JTextComponent txtFile, JButton btnFile, String dialogTitle, String fileChooserID, File initialPath, boolean seticon) {
412
        return new FilePickerControllerImpl(txtFile, btnFile, dialogTitle, fileChooserID, initialPath, seticon);
413
    }
414

    
415
    @Override
416
    public FilePickerController createFilePickerController(JTextComponent txtFile, JButton btnFile) {
417
        return new FilePickerControllerImpl(txtFile, btnFile);
418
    }
419

    
420
    @Override
421
    public PickerController<byte[]> createByteArrayPickerController(JTextComponent txtText, JButton btnUpload, JButton btnDownload, String fileChooserID, File initialPath) {
422
        return new BytearrayPickerControllerImpl(txtText, btnUpload, btnDownload, fileChooserID, initialPath);
423
    }
424

    
425
    @Override
426
    public PickerController<byte[]> createByteArrayPickerController(JTextComponent txtText, JButton btnUpload, JButton btnDownload) {
427
        return new BytearrayPickerControllerImpl(txtText, btnUpload, btnDownload, null, null);
428
    }
429

    
430
    @Override
431
    public FilePickerController createFilePickerController(JTextComponent txtFile, JButton btnFile, String dialogTitle) {
432
        return new FilePickerControllerImpl(txtFile, btnFile, dialogTitle);
433
    }
434

    
435
    @Override
436
    public FolderPickerController createFolderPickerController(JTextComponent txtFile, JButton btnFile, String dialogTitle, String fileChooserID, File initialPath, boolean seticon) {
437
        return new FolderPickerControllerImpl(txtFile, btnFile, dialogTitle, fileChooserID, initialPath, seticon);
438
    }
439

    
440
    @Override
441
    public FolderPickerController createFolderPickerController(JTextComponent txtFile, JButton btnFile) {
442
        return new FolderPickerControllerImpl(txtFile, btnFile);
443
    }
444

    
445
    @Override
446
    public FolderPickerController createFolderPickerController(JTextComponent txtFile, JButton btnFile, String dialogTitle) {
447
        return new FolderPickerControllerImpl(txtFile, btnFile, dialogTitle);
448
    }
449

    
450
    @Override
451
    public void removeBorder(JComponent component) {
452
        try {
453
            component.setBorder(null);
454
            JComponent p1 = (JComponent) component.getParent();
455
            if (p1 instanceof JViewport) {
456
                p1 = (JComponent) component.getParent();
457
            }
458
            if (p1 instanceof JScrollPane) {
459
                JScrollPane scrollPanel = (JScrollPane) component.getParent();
460
                scrollPanel.setBorder(null);
461
            }
462
        } catch (Exception ex) {
463

    
464
        }
465
    }
466

    
467
    protected ImageIcon getIcon(String name) {
468
        IconThemeManager iconThemeManager = ToolsSwingLocator.getIconThemeManager();
469
        IconTheme theme = iconThemeManager.getCurrent();
470
        ImageIcon icon = theme.get(name);
471
        return icon;
472
    }
473

    
474
    @Override
475
    public void addClearButton(JTextComponent text) {
476
        this.addClearButton(text, null);
477
    }
478

    
479
    @Override
480
    public void addClearButton(JComboBox combo) {
481
        try {
482
            JTextComponent text = (JTextComponent) combo.getEditor().getEditorComponent();
483
            this.addClearButton(text, null);
484
        } catch (Throwable th) {
485
            // Si no puede a?adir el boton no hace nada.
486
        }
487
    }
488

    
489
    @Override
490
    public void addClearButton(final JTextComponent text, final ActionListener action) {
491
        final JButton btnClear = new JButton(getIcon("picker-cleartext"));
492
        btnClear.setBorderPainted(false);
493
        btnClear.setFocusPainted(false);
494
        btnClear.setContentAreaFilled(false);
495
        btnClear.setOpaque(false);
496
        btnClear.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
497
        if (action == null) {
498
            btnClear.addActionListener((ActionEvent e) -> {
499
              text.setText("");
500
            });
501
        } else {
502
            btnClear.addActionListener(action);
503
        }
504
        text.setLayout(new BorderLayout());
505
        text.add(btnClear, BorderLayout.EAST);
506
        text.addPropertyChangeListener((PropertyChangeEvent evt) -> {
507
          if (evt == null) {
508
            return;
509
          }
510
          if (evt.getPropertyName().equalsIgnoreCase("enabled")) {
511
            boolean enabled = text.isEnabled();
512
            btnClear.setEnabled(enabled);
513
          } else if (evt.getPropertyName().equalsIgnoreCase("editable")) {
514
            boolean editable = text.isEditable();
515
            btnClear.setEnabled(editable);
516
          }
517
        });
518
    }
519

    
520
    @Override
521
    public SimpleImage createSimpleImage() {
522
        SimpleImage x = new DefaultSimpleImage();
523
        return x;
524
    }
525

    
526
    @Override
527
    public SimpleImage createSimpleImage(Object source) {
528
        SimpleImage x = new DefaultSimpleImage(source);
529
        return x;
530
    }
531

    
532
    @Override
533
    public DropDown createDropDown(JComboBox combo) {
534
        DropDown c = new DropDownComboBox(combo);
535
        return c;
536
    }
537

    
538
    @Override
539
    public DropDown createDropDown(JLabel label) {
540
        DropDown c = new DropDownLabel(label);
541
        return c;
542
    }
543

    
544
    @Override
545
    public DropDown createDropDown(AbstractButton button) {
546
        DropDown c = new DropDownButton(button);
547
        return c;
548
    }
549

    
550
    @Override
551
    public DropDown createDropDown(JComponent component) {
552
        DropDown c = new DropDownLabel(component);
553
        return c;
554
    }
555

    
556
    @Override
557
    public CompoundIcon createCompoundIcon(Icon... icons) {
558
        DefaultCompoundIcon i = new DefaultCompoundIcon(icons);
559
        return i;
560
    }
561

    
562
    @Override
563
    public CompoundIcon createCompoundIcon(int orientation, Icon... icons) {
564
        DefaultCompoundIcon i = new DefaultCompoundIcon(orientation, icons);
565
        return i;
566
    }
567

    
568
    @Override
569
    public CompoundIcon createCompoundIcon(int orientation, int gap, Icon... icons) {
570
        DefaultCompoundIcon i = new DefaultCompoundIcon(orientation, gap, icons);
571
        return i;
572
    }
573

    
574
    @Override
575
    public CompoundIcon createCompoundIcon(int orientation, int gap, int alignmentX, int alignmentY, Icon... icons) {
576
        DefaultCompoundIcon i = new DefaultCompoundIcon(orientation, gap, alignmentX, alignmentY, icons);
577
        return i;
578
    }
579

    
580
    @Override
581
    public BookmarksController createBookmarksController(Bookmarks bookmarks, JButton button) {
582
        BookmarksController controller;
583
        controller = new DefaultBookmarksController(bookmarks, button);
584
        return controller;
585
    }
586

    
587
    @Override
588
    public HistoryController createHistoryController(History history, JButton button) {
589
        DefaultHistoryController controller;
590
        controller = new DefaultHistoryController(history, button);
591
        return controller;
592
    }
593

    
594
    @Override
595
    public FilteredTableModel createFilteredTableModel(TableModel tableModel, int filterColumn) {
596
        FilteredTableModelImpl model = new FilteredTableModelImpl(tableModel, filterColumn);
597
        return model;
598
    }
599

    
600
    @Override
601
    public JLabel createTitledSeparator(String title, int height, int titlePosition, int titleJustification) {
602
        TitledSeparator c = new TitledSeparator(title, height, titlePosition, titleJustification);
603
        return c;
604
    }
605

    
606
    @Override
607
    public JLabel createTitledSeparator(String title) {
608
        TitledSeparator c = new TitledSeparator(
609
                title,
610
                2,
611
                TitledBorder.DEFAULT_POSITION,
612
                TitledBorder.DEFAULT_JUSTIFICATION
613
        );
614
        return c;
615
    }
616

    
617
    @Override
618
    public FilteredListModel createFilteredListModel() {
619
        FilteredListModel model = new FilteredListModelImpl(null);
620
        return model;
621
    }
622

    
623
    @Override
624
    public FilteredTreeModel createFilteredTreeModel(JTree tree) {
625
        FilteredTreeModel model = new FilteredTreeModelImpl(tree.getModel());
626
        return model;
627
    }
628

    
629
    @Override
630
    public FilteredListController createFilteredListController(JList list, JTextComponent text, JButton button) {
631
        FilteredListController flc = new DefaultFilteredListController(list, text, button);
632
        return flc;
633
    }
634

    
635
    @Override
636
    public FilteredTreeController createFilteredTreeController(JTree list, JTextComponent text, JButton button) {
637
        FilteredTreeController ftc = new DefaultFilteredTreeController(list, text, button);
638
        return ftc;
639
    }
640

    
641
    @Override
642
    public JWebBrowser createJWebBrowser() {
643
        return this.webBrowserfactory.create();
644
    }
645

    
646
    @Override
647
    public void registerJWebBrowserFactory(JWebBrowserFactory factory) {
648
        this.webBrowserfactory = factory;
649
    }
650

    
651
    public JWebBrowserFactory getJWebBrowserFactory() {
652
        return this.webBrowserfactory;
653
    }
654

    
655
    @Override
656
    public DataTypePickerController createDataTypePickerController(JComboBox cboDataType, JButton btnDataType, boolean allowNull) {
657
        return new DataTypePickerControllerImpl(cboDataType, btnDataType, allowNull);
658
    }
659

    
660
  @Override
661
  public TableColumnAdjuster createTableColumnAdjuster(JTable table) {
662
    return TableColumnAdjusterImpl.install(table);
663
  }
664

    
665
    @Override
666
    public MessageBarController createMessageBarController(JLabel txtLabel, int timeDuration) {
667
       return new MessageBarControllerImpl(txtLabel, timeDuration);
668
    }
669

    
670
    
671
}