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 @ 2203

History | View | Annotate | Download (24.6 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.SimpleImage;
58
import org.gvsig.tools.swing.api.TableColumnAdjuster;
59
import org.gvsig.tools.swing.api.ToolsSwingLocator;
60
import org.gvsig.tools.swing.api.ToolsSwingManager;
61
import org.gvsig.tools.swing.api.pickercontroller.ColorPickerController;
62
import org.gvsig.tools.swing.api.pickercontroller.DatePickerController;
63
import org.gvsig.tools.swing.api.pickercontroller.FilePickerController;
64
import org.gvsig.tools.swing.api.pickercontroller.FolderPickerController;
65
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
66
import org.gvsig.tools.swing.icontheme.IconTheme;
67
import org.gvsig.tools.swing.icontheme.IconThemeManager;
68
import org.gvsig.tools.swing.impl.bufferedImage.VirtualBufferedImageHelper;
69
import org.gvsig.tools.swing.impl.bufferedImage.VirtualBufferedImageHelper.VirtualDataBuffer;
70
import org.gvsig.tools.swing.impl.pickercontroller.BytearrayPickerControllerImpl;
71
import org.gvsig.tools.swing.impl.pickercontroller.ColorPickerControllerImpl;
72
import org.gvsig.tools.swing.impl.pickercontroller.DatePickerControllerImpl;
73
import org.gvsig.tools.swing.impl.pickercontroller.FilePickerControllerImpl;
74
import org.gvsig.tools.swing.impl.pickercontroller.FolderPickerControllerImpl;
75
import org.gvsig.tools.swing.api.bookmarkshistory.BookmarksController;
76
import org.gvsig.tools.swing.api.bookmarkshistory.HistoryController;
77
import org.gvsig.tools.swing.api.pickercontroller.DataTypePickerController;
78
import org.gvsig.tools.swing.impl.bookmarkshistory.DefaultBookmarksController;
79
import org.gvsig.tools.swing.impl.bookmarkshistory.DefaultHistoryController;
80
import org.gvsig.tools.swing.impl.pickercontroller.DataTypePickerControllerImpl;
81

    
82
public class DefaultToolsSwingManager implements ToolsSwingManager {
83

    
84
    private Dimension maxPhysicalSizeOfBufferedImage;
85
    private JWebBrowserFactory webBrowserfactory;
86

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
463
        }
464
    }
465

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
664
    
665
}