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

History | View | Annotate | Download (24.2 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 s = (String) call(component, "getText", (Object[]) null);
227
        if (!StringUtils.isEmpty(s)) {
228
            call(component, "setText", i18n.getTranslation(s));
229
        }
230
        s = (String) call(component, "getToolTipText", (Object[]) null);
231
        if (!StringUtils.isEmpty(s)) {
232
            call(component, "setToolTipText", i18n.getTranslation(s));
233
        }
234
    }
235

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

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

    
262
    @Override
263
    public void translate(JTabbedPane component) {
264
        I18nManager i18n = ToolsLocator.getI18nManager();
265

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

    
278
    @Override
279
    public void setDefaultPopupMenu(final JTextComponent component) {
280
        this.setDefaultPopupMenu(component, null);
281
    }
282

    
283
    @Override
284
    public void setDefaultPopupMenu(final JTextComponent component, String title) {
285
        JPopupMenu popupMenu = new JPopupMenu();
286
        I18nManager i18nManager = ToolsLocator.getI18nManager();
287

    
288
        Action copyAction = component.getActionMap().get(DefaultEditorKit.copyAction);
289
        Action cutAction = component.getActionMap().get(DefaultEditorKit.cutAction);
290
        Action pasteAction = component.getActionMap().get(DefaultEditorKit.pasteAction);
291
        Action selectAllAction = component.getActionMap().get(DefaultEditorKit.selectAllAction);
292

    
293
        if (copyAction == null
294
                && cutAction == null
295
                && pasteAction == null
296
                && selectAllAction == null) {
297
            copyAction = component.getActionMap().get(i18nManager.getTranslation("copy"));
298
            cutAction = component.getActionMap().get(i18nManager.getTranslation("cut"));
299
            pasteAction = component.getActionMap().get(i18nManager.getTranslation("paste"));
300
            selectAllAction = component.getActionMap().get(i18nManager.getTranslation("SelectAll"));
301
        } else {
302
            copyAction.putValue(Action.NAME, i18nManager.getTranslation("copy"));
303
            cutAction.putValue(Action.NAME, i18nManager.getTranslation("cut"));
304
            pasteAction.putValue(Action.NAME, i18nManager.getTranslation("paste"));
305
            selectAllAction.putValue(Action.NAME, i18nManager.getTranslation("SelectAll"));
306
        }
307

    
308
        final String title2;
309
        if (title == null) {
310
            title2 = i18nManager.getTranslation("text_editor");
311
        } else {
312
            title2 = title;
313
        }
314
        Action textEditorAction = new AbstractAction(i18nManager.getTranslation("text_editor")) {
315
            @Override
316
            public void actionPerformed(ActionEvent e) {
317
                DefaultZoomDialog dialog = new DefaultZoomDialog(component, title2, component.getText());
318
                dialog.setEditable(component.isEditable());
319
                dialog.setAlwaysOnTop(true);
320
                dialog.setVisible(true);
321
                if (component.isEditable() && component.isEnabled()) {
322
                    component.setText(dialog.getText());
323
                }
324
            }
325
        };
326
        final JMenuItem menuCut = new JMenuItem(cutAction);
327
        final JMenuItem menuPaste = new JMenuItem(pasteAction);
328

    
329
        popupMenu.add(textEditorAction);
330
        popupMenu.addSeparator();
331

    
332
        popupMenu.add(menuCut);
333
        popupMenu.add(copyAction);
334
        popupMenu.add(menuPaste);
335
        popupMenu.add(selectAllAction);
336

    
337
        if (component.isEnabled() && component.isEditable()) {
338
            menuCut.setEnabled(true);
339
            menuPaste.setEnabled(true);
340
        } else {
341
            menuCut.setEnabled(false);
342
            menuPaste.setEnabled(false);
343
        }
344
        component.addPropertyChangeListener((PropertyChangeEvent evt) -> {
345
          if (evt == null) {
346
            return;
347
          }
348
          if (evt.getPropertyName().equalsIgnoreCase("enabled")) {
349
            boolean enabled = component.isEnabled();
350
            menuCut.setEnabled(enabled);
351
            menuPaste.setEnabled(enabled);
352
          } else if (evt.getPropertyName().equalsIgnoreCase("editable")) {
353
            boolean editable = component.isEditable();
354
            menuCut.setEnabled(editable);
355
            menuPaste.setEnabled(editable);
356
          }
357
        });
358
        component.setComponentPopupMenu(popupMenu);
359
    }
360

    
361
    @Override
362
    public void setDefaultPopupMenu(JComboBox component) {
363
        this.setDefaultPopupMenu((JTextComponent) component.getEditor().getEditorComponent(), null);
364
    }
365

    
366
    @Override
367
    public void setDefaultPopupMenu(JComboBox component, String title) {
368
        this.setDefaultPopupMenu((JTextComponent) component.getEditor().getEditorComponent(), title);
369
    }
370

    
371
    @Override
372
    public ChangeListenerHelper createChangeListenerHelper() {
373
        DefaultChangeListenerHelper x = new DefaultChangeListenerHelper();
374
        return x;
375
    }
376

    
377
    @Override
378
    public ColorPickerController createColorPickerController(JTextComponent txtLabel, JButton btnShowDialog, JSlider sldAlpha, boolean allowNull) {
379
        return new ColorPickerControllerImpl(txtLabel, btnShowDialog, sldAlpha, allowNull);
380
    }
381

    
382
    @Override
383
    public ColorPickerController createColorPickerController(JTextComponent txtLabel, JButton btnShowDialog) {
384
        return new ColorPickerControllerImpl(txtLabel, btnShowDialog);
385
    }
386

    
387
    @Override
388
    public ColorPickerController createColorPickerController(JTextComponent txtLabel, JButton btnShowDialog, JSlider sldAlpha) {
389
        return new ColorPickerControllerImpl(txtLabel, btnShowDialog, sldAlpha);
390
    }
391

    
392
    @Override
393
    public DatePickerController createDatePickerController(JTextComponent txtDate, JButton btnDate) {
394
        return new DatePickerControllerImpl(txtDate, btnDate);
395
    }
396

    
397
    @Override
398
    public FilePickerController createFilePickerController(JTextComponent txtFile, JButton btnFile, String dialogTitle, String fileChooserID, File initialPath, boolean seticon) {
399
        return new FilePickerControllerImpl(txtFile, btnFile, dialogTitle, fileChooserID, initialPath, seticon);
400
    }
401

    
402
    @Override
403
    public FilePickerController createFilePickerController(JTextComponent txtFile, JButton btnFile) {
404
        return new FilePickerControllerImpl(txtFile, btnFile);
405
    }
406

    
407
    @Override
408
    public PickerController<byte[]> createByteArrayPickerController(JTextComponent txtText, JButton btnUpload, JButton btnDownload, String fileChooserID, File initialPath) {
409
        return new BytearrayPickerControllerImpl(txtText, btnUpload, btnDownload, fileChooserID, initialPath);
410
    }
411

    
412
    @Override
413
    public PickerController<byte[]> createByteArrayPickerController(JTextComponent txtText, JButton btnUpload, JButton btnDownload) {
414
        return new BytearrayPickerControllerImpl(txtText, btnUpload, btnDownload, null, null);
415
    }
416

    
417
    @Override
418
    public FilePickerController createFilePickerController(JTextComponent txtFile, JButton btnFile, String dialogTitle) {
419
        return new FilePickerControllerImpl(txtFile, btnFile, dialogTitle);
420
    }
421

    
422
    @Override
423
    public FolderPickerController createFolderPickerController(JTextComponent txtFile, JButton btnFile, String dialogTitle, String fileChooserID, File initialPath, boolean seticon) {
424
        return new FolderPickerControllerImpl(txtFile, btnFile, dialogTitle, fileChooserID, initialPath, seticon);
425
    }
426

    
427
    @Override
428
    public FolderPickerController createFolderPickerController(JTextComponent txtFile, JButton btnFile) {
429
        return new FolderPickerControllerImpl(txtFile, btnFile);
430
    }
431

    
432
    @Override
433
    public FolderPickerController createFolderPickerController(JTextComponent txtFile, JButton btnFile, String dialogTitle) {
434
        return new FolderPickerControllerImpl(txtFile, btnFile, dialogTitle);
435
    }
436

    
437
    @Override
438
    public void removeBorder(JComponent component) {
439
        try {
440
            component.setBorder(null);
441
            JComponent p1 = (JComponent) component.getParent();
442
            if (p1 instanceof JViewport) {
443
                p1 = (JComponent) component.getParent();
444
            }
445
            if (p1 instanceof JScrollPane) {
446
                JScrollPane scrollPanel = (JScrollPane) component.getParent();
447
                scrollPanel.setBorder(null);
448
            }
449
        } catch (Exception ex) {
450

    
451
        }
452
    }
453

    
454
    protected ImageIcon getIcon(String name) {
455
        IconThemeManager iconThemeManager = ToolsSwingLocator.getIconThemeManager();
456
        IconTheme theme = iconThemeManager.getCurrent();
457
        ImageIcon icon = theme.get(name);
458
        return icon;
459
    }
460

    
461
    @Override
462
    public void addClearButton(JTextComponent text) {
463
        this.addClearButton(text, null);
464
    }
465

    
466
    @Override
467
    public void addClearButton(JComboBox combo) {
468
        try {
469
            JTextComponent text = (JTextComponent) combo.getEditor().getEditorComponent();
470
            this.addClearButton(text, null);
471
        } catch (Throwable th) {
472
            // Si no puede a?adir el boton no hace nada.
473
        }
474
    }
475

    
476
    @Override
477
    public void addClearButton(final JTextComponent text, final ActionListener action) {
478
        final JButton btnClear = new JButton(getIcon("picker-cleartext"));
479
        btnClear.setBorderPainted(false);
480
        btnClear.setFocusPainted(false);
481
        btnClear.setContentAreaFilled(false);
482
        btnClear.setOpaque(false);
483
        btnClear.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
484
        if (action == null) {
485
            btnClear.addActionListener((ActionEvent e) -> {
486
              text.setText("");
487
            });
488
        } else {
489
            btnClear.addActionListener(action);
490
        }
491
        text.setLayout(new BorderLayout());
492
        text.add(btnClear, BorderLayout.EAST);
493
        text.addPropertyChangeListener((PropertyChangeEvent evt) -> {
494
          if (evt == null) {
495
            return;
496
          }
497
          if (evt.getPropertyName().equalsIgnoreCase("enabled")) {
498
            boolean enabled = text.isEnabled();
499
            btnClear.setEnabled(enabled);
500
          } else if (evt.getPropertyName().equalsIgnoreCase("editable")) {
501
            boolean editable = text.isEditable();
502
            btnClear.setEnabled(editable);
503
          }
504
        });
505
    }
506

    
507
    @Override
508
    public SimpleImage createSimpleImage() {
509
        SimpleImage x = new DefaultSimpleImage();
510
        return x;
511
    }
512

    
513
    @Override
514
    public SimpleImage createSimpleImage(Object source) {
515
        SimpleImage x = new DefaultSimpleImage(source);
516
        return x;
517
    }
518

    
519
    @Override
520
    public DropDown createDropDown(JComboBox combo) {
521
        DropDown c = new DropDownComboBox(combo);
522
        return c;
523
    }
524

    
525
    @Override
526
    public DropDown createDropDown(JLabel label) {
527
        DropDown c = new DropDownLabel(label);
528
        return c;
529
    }
530

    
531
    @Override
532
    public DropDown createDropDown(AbstractButton button) {
533
        DropDown c = new DropDownButton(button);
534
        return c;
535
    }
536

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

    
543
    @Override
544
    public CompoundIcon createCompoundIcon(Icon... icons) {
545
        DefaultCompoundIcon i = new DefaultCompoundIcon(icons);
546
        return i;
547
    }
548

    
549
    @Override
550
    public CompoundIcon createCompoundIcon(int orientation, Icon... icons) {
551
        DefaultCompoundIcon i = new DefaultCompoundIcon(orientation, icons);
552
        return i;
553
    }
554

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

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

    
567
    @Override
568
    public BookmarksController createBookmarksController(Bookmarks bookmarks, JButton button) {
569
        BookmarksController controller;
570
        controller = new DefaultBookmarksController(bookmarks, button);
571
        return controller;
572
    }
573

    
574
    @Override
575
    public HistoryController createHistoryController(History history, JButton button) {
576
        DefaultHistoryController controller;
577
        controller = new DefaultHistoryController(history, button);
578
        return controller;
579
    }
580

    
581
    @Override
582
    public FilteredTableModel createFilteredTableModel(TableModel tableModel, int filterColumn) {
583
        FilteredTableModelImpl model = new FilteredTableModelImpl(tableModel, filterColumn);
584
        return model;
585
    }
586

    
587
    @Override
588
    public JLabel createTitledSeparator(String title, int height, int titlePosition, int titleJustification) {
589
        TitledSeparator c = new TitledSeparator(title, height, titlePosition, titleJustification);
590
        return c;
591
    }
592

    
593
    @Override
594
    public JLabel createTitledSeparator(String title) {
595
        TitledSeparator c = new TitledSeparator(
596
                title,
597
                2,
598
                TitledBorder.DEFAULT_POSITION,
599
                TitledBorder.DEFAULT_JUSTIFICATION
600
        );
601
        return c;
602
    }
603

    
604
    @Override
605
    public FilteredListModel createFilteredListModel() {
606
        FilteredListModel model = new FilteredListModelImpl();
607
        return model;
608
    }
609

    
610
    @Override
611
    public FilteredTreeModel createFilteredTreeModel(JTree tree) {
612
        FilteredTreeModel model = new FilteredTreeModelImpl(tree.getModel());
613
        return model;
614
    }
615

    
616
    @Override
617
    public FilteredListController createFilteredListController(JList list, JTextComponent text, JButton button) {
618
        FilteredListController flc = new DefaultFilteredListController(list, text, button);
619
        return flc;
620
    }
621

    
622
    @Override
623
    public FilteredTreeController createFilteredTreeController(JTree list, JTextComponent text, JButton button) {
624
        FilteredTreeController ftc = new DefaultFilteredTreeController(list, text, button);
625
        return ftc;
626
    }
627

    
628
    @Override
629
    public JWebBrowser createJWebBrowser() {
630
        return this.webBrowserfactory.create();
631
    }
632

    
633
    @Override
634
    public void registerJWebBrowserFactory(JWebBrowserFactory factory) {
635
        this.webBrowserfactory = factory;
636
    }
637

    
638
    public JWebBrowserFactory getJWebBrowserFactory() {
639
        return this.webBrowserfactory;
640
    }
641

    
642
    @Override
643
    public DataTypePickerController createDataTypePickerController(JComboBox cboDataType, JButton btnDataType, boolean allowNull) {
644
        return new DataTypePickerControllerImpl(cboDataType, btnDataType, allowNull);
645
    }
646

    
647
  @Override
648
  public TableColumnAdjuster createTableColumnAdjuster(JTable table) {
649
    return TableColumnAdjusterImpl.install(table);
650
  }
651

    
652
    
653
}