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

History | View | Annotate | Download (23.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.JTree;
33
import javax.swing.JViewport;
34
import javax.swing.border.TitledBorder;
35
import javax.swing.table.TableModel;
36
import javax.swing.text.DefaultEditorKit;
37
import javax.swing.text.JTextComponent;
38
import javax.swing.tree.TreeModel;
39
import org.apache.commons.lang3.StringUtils;
40
import org.gvsig.tools.ToolsLocator;
41
import org.gvsig.tools.bookmarksandhistory.Bookmarks;
42
import org.gvsig.tools.bookmarksandhistory.History;
43
import org.gvsig.tools.i18n.I18nManager;
44
import org.gvsig.tools.swing.api.ActionListenerSupport;
45
import org.gvsig.tools.swing.api.ChangeListenerHelper;
46
import org.gvsig.tools.swing.api.ColorChooserController;
47
import org.gvsig.tools.swing.api.CompoundIcon;
48
import org.gvsig.tools.swing.api.DropDown;
49
import org.gvsig.tools.swing.api.FilteredListController;
50
import org.gvsig.tools.swing.api.FilteredTableModel;
51
import org.gvsig.tools.swing.api.FilteredTreeController;
52
import org.gvsig.tools.swing.api.FilteredTreeModel;
53
import org.gvsig.tools.swing.api.JListWithCheckbox;
54
import org.gvsig.tools.swing.api.JWebBrowser;
55
import org.gvsig.tools.swing.api.JWebBrowserFactory;
56
import org.gvsig.tools.swing.api.SimpleImage;
57
import org.gvsig.tools.swing.api.ToolsSwingLocator;
58
import org.gvsig.tools.swing.api.ToolsSwingManager;
59
import org.gvsig.tools.swing.api.pickercontroller.ColorPickerController;
60
import org.gvsig.tools.swing.api.pickercontroller.DatePickerController;
61
import org.gvsig.tools.swing.api.pickercontroller.FilePickerController;
62
import org.gvsig.tools.swing.api.pickercontroller.FolderPickerController;
63
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
64
import org.gvsig.tools.swing.icontheme.IconTheme;
65
import org.gvsig.tools.swing.icontheme.IconThemeManager;
66
import org.gvsig.tools.swing.impl.bufferedImage.VirtualBufferedImageHelper;
67
import org.gvsig.tools.swing.impl.bufferedImage.VirtualBufferedImageHelper.VirtualDataBuffer;
68
import org.gvsig.tools.swing.impl.pickercontroller.BytearrayPickerControllerImpl;
69
import org.gvsig.tools.swing.impl.pickercontroller.ColorPickerControllerImpl;
70
import org.gvsig.tools.swing.impl.pickercontroller.DatePickerControllerImpl;
71
import org.gvsig.tools.swing.impl.pickercontroller.FilePickerControllerImpl;
72
import org.gvsig.tools.swing.impl.pickercontroller.FolderPickerControllerImpl;
73
import org.gvsig.tools.swing.api.bookmarkshistory.BookmarksController;
74
import org.gvsig.tools.swing.api.bookmarkshistory.HistoryController;
75
import org.gvsig.tools.swing.impl.bookmarkshistory.DefaultBookmarksController;
76
import org.gvsig.tools.swing.impl.bookmarkshistory.DefaultHistoryController;
77

    
78
public class DefaultToolsSwingManager implements ToolsSwingManager {
79

    
80
    private Dimension maxPhysicalSizeOfBufferedImage;
81
    private JWebBrowserFactory webBrowserfactory;
82

    
83
    @Override
84
    public ActionListenerSupport createActionListenerSupport() {
85
        return new DefaultActionListenerSupport();
86
    }
87

    
88
    @Override
89
    public JListWithCheckbox createJListWithCheckbox(JList wrappedList) {
90
        return new DefaultJListWithCheckbox(wrappedList);
91
    }
92

    
93
    @Override
94
    public void setTreeModel(JComboBox comboBox, TreeModel aTreeModel) {
95
        TreeComboUtils.setTreeModel(comboBox, aTreeModel);
96
    }
97

    
98
    @Override
99
    public ComboBoxModel createComboBoxModel(TreeModel treeModel) {
100
        return TreeComboUtils.createComboBoxModel(treeModel);
101
    }
102

    
103
    @Override
104
    public BufferedImage createBufferedImage(int w, int h, int type) {
105
        if (getMaxPhysicalSizeOfBufferedImage().getWidth() < w || getMaxPhysicalSizeOfBufferedImage().getHeight() < h) {
106
            return createVirtualBufferedImage(w, h, type);
107
        }
108
        return new BufferedImage(w, h, type);
109
    }
110

    
111
    @Override
112
    public BufferedImage createVirtualBufferedImage(int w, int h, int type) {
113
        return VirtualBufferedImageHelper.createVirtualBufferedImage(w, h, type);
114
    }
115

    
116
    @Override
117
    public BufferedImage copyBufferedImage(BufferedImage img) {
118
        WritableRaster sourceRaster = img.getRaster();
119

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

    
132
        WritableRaster raster = newImage.getRaster();
133
        img.copyData(raster);
134
        return newImage;
135
    }
136

    
137
    @Override
138
    public void setMaxPhysicalSizeOfBufferedImage(Dimension dimension) {
139
        this.maxPhysicalSizeOfBufferedImage = dimension;
140
    }
141

    
142
    @Override
143
    public Dimension getMaxPhysicalSizeOfBufferedImage() {
144
        if (this.maxPhysicalSizeOfBufferedImage == null) {
145
            this.maxPhysicalSizeOfBufferedImage = new Dimension(2000, 2000);
146
        }
147
        return this.maxPhysicalSizeOfBufferedImage;
148
    }
149

    
150
    @Override
151
    public ColorChooserController createColorChooserController(JTextComponent txtLabel, JButton btnShowDialog, JSlider sldAlpha, boolean allowNull) {
152
        return new DefaultColorChooserController(txtLabel, btnShowDialog, sldAlpha, allowNull);
153
    }
154

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

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

    
165
    @Override
166
    public Color alphaBlendingWithOpaqueBackground(Color bgColor, Color fgColor) {
167
        // https://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending
168
        Color src = fgColor;
169
        Color dst = bgColor;
170

    
171
        // double outa = 1;
172
        double srca = src.getAlpha() / 255.0;
173
        double srca_1 = (1 - srca);
174

    
175
        Color color = new Color(
176
                (int) (src.getRed() * srca + dst.getRed() * srca_1) & 0xff,
177
                (int) (src.getGreen() * srca + dst.getGreen() * srca_1) & 0xff,
178
                (int) (src.getBlue() * srca + dst.getBlue() * srca_1) & 0xff
179
        );
180
        return color;
181
    }
182

    
183
    @Override
184
    public Color opaqueColor(Color src) {
185
        // https://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending
186
        double srca = src.getAlpha() / 255.0;
187
        double srca_1 = (1 - srca);
188

    
189
        Color color = new Color(
190
                (int) (src.getRed() * srca + 255 * srca_1) & 0xff,
191
                (int) (src.getGreen() * srca + 255 * srca_1) & 0xff,
192
                (int) (src.getBlue() * srca + 255 * srca_1) & 0xff
193
        );
194
        return color;
195
    }
196

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

    
219
    @Override
220
    public void translate(JComponent component) {
221
        I18nManager i18n = ToolsLocator.getI18nManager();
222
        String s = (String) call(component, "getText", (Object[]) null);
223
        if (!StringUtils.isEmpty(s)) {
224
            call(component, "setText", i18n.getTranslation(s));
225
        }
226
        s = (String) call(component, "getToolTipText", (Object[]) null);
227
        if (!StringUtils.isEmpty(s)) {
228
            call(component, "setToolTipText", i18n.getTranslation(s));
229
        }
230
    }
231

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

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

    
258
    @Override
259
    public void translate(JTabbedPane component) {
260
        I18nManager i18n = ToolsLocator.getI18nManager();
261

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

    
274
    @Override
275
    public void setDefaultPopupMenu(final JTextComponent component) {
276
        this.setDefaultPopupMenu(component, null);
277
    }
278

    
279
    @Override
280
    public void setDefaultPopupMenu(final JTextComponent component, String title) {
281
        JPopupMenu popupMenu = new JPopupMenu();
282
        I18nManager i18nManager = ToolsLocator.getI18nManager();
283

    
284
        Action copyAction = component.getActionMap().get(DefaultEditorKit.copyAction);
285
        Action cutAction = component.getActionMap().get(DefaultEditorKit.cutAction);
286
        Action pasteAction = component.getActionMap().get(DefaultEditorKit.pasteAction);
287
        Action selectAllAction = component.getActionMap().get(DefaultEditorKit.selectAllAction);
288

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

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

    
325
        popupMenu.add(textEditorAction);
326
        popupMenu.addSeparator();
327

    
328
        popupMenu.add(menuCut);
329
        popupMenu.add(copyAction);
330
        popupMenu.add(menuPaste);
331
        popupMenu.add(selectAllAction);
332

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

    
357
    @Override
358
    public void setDefaultPopupMenu(JComboBox component) {
359
        this.setDefaultPopupMenu((JTextComponent) component.getEditor().getEditorComponent(), null);
360
    }
361

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

    
367
    @Override
368
    public ChangeListenerHelper createChangeListenerHelper() {
369
        DefaultChangeListenerHelper x = new DefaultChangeListenerHelper();
370
        return x;
371
    }
372

    
373
    @Override
374
    public ColorPickerController createColorPickerController(JTextComponent txtLabel, JButton btnShowDialog, JSlider sldAlpha, boolean allowNull) {
375
        return new ColorPickerControllerImpl(txtLabel, btnShowDialog, sldAlpha, allowNull);
376
    }
377

    
378
    @Override
379
    public ColorPickerController createColorPickerController(JTextComponent txtLabel, JButton btnShowDialog) {
380
        return new ColorPickerControllerImpl(txtLabel, btnShowDialog);
381
    }
382

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

    
388
    @Override
389
    public DatePickerController createDatePickerController(JTextComponent txtDate, JButton btnDate) {
390
        return new DatePickerControllerImpl(txtDate, btnDate);
391
    }
392

    
393
    @Override
394
    public FilePickerController createFilePickerController(JTextComponent txtFile, JButton btnFile, String dialogTitle, String fileChooserID, File initialPath, boolean seticon) {
395
        return new FilePickerControllerImpl(txtFile, btnFile, dialogTitle, fileChooserID, initialPath, seticon);
396
    }
397

    
398
    @Override
399
    public FilePickerController createFilePickerController(JTextComponent txtFile, JButton btnFile) {
400
        return new FilePickerControllerImpl(txtFile, btnFile);
401
    }
402

    
403
    @Override
404
    public PickerController<byte[]> createByteArrayPickerController(JTextComponent txtText, JButton btnUpload, JButton btnDownload, String fileChooserID, File initialPath) {
405
        return new BytearrayPickerControllerImpl(txtText, btnUpload, btnDownload, fileChooserID, initialPath);
406
    }
407

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

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

    
418
    @Override
419
    public FolderPickerController createFolderPickerController(JTextComponent txtFile, JButton btnFile, String dialogTitle, String fileChooserID, File initialPath, boolean seticon) {
420
        return new FolderPickerControllerImpl(txtFile, btnFile, dialogTitle, fileChooserID, initialPath, seticon);
421
    }
422

    
423
    @Override
424
    public FolderPickerController createFolderPickerController(JTextComponent txtFile, JButton btnFile) {
425
        return new FolderPickerControllerImpl(txtFile, btnFile);
426
    }
427

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

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

    
447
        }
448
    }
449

    
450
    protected ImageIcon getIcon(String name) {
451
        IconThemeManager iconThemeManager = ToolsSwingLocator.getIconThemeManager();
452
        IconTheme theme = iconThemeManager.getCurrent();
453
        ImageIcon icon = theme.get(name);
454
        return icon;
455
    }
456

    
457
    @Override
458
    public void addClearButton(JTextComponent text) {
459
        this.addClearButton(text, null);
460
    }
461

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

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

    
503
    @Override
504
    public SimpleImage createSimpleImage() {
505
        SimpleImage x = new DefaultSimpleImage();
506
        return x;
507
    }
508

    
509
    @Override
510
    public SimpleImage createSimpleImage(Object source) {
511
        SimpleImage x = new DefaultSimpleImage(source);
512
        return x;
513
    }
514

    
515
    @Override
516
    public DropDown createDropDown(JComboBox combo) {
517
        DropDown c = new DropDownComboBox(combo);
518
        return c;
519
    }
520

    
521
    @Override
522
    public DropDown createDropDown(JLabel label) {
523
        DropDown c = new DropDownLabel(label);
524
        return c;
525
    }
526

    
527
    @Override
528
    public DropDown createDropDown(AbstractButton button) {
529
        DropDown c = new DropDownButton(button);
530
        return c;
531
    }
532

    
533
    @Override
534
    public DropDown createDropDown(JComponent component) {
535
        DropDown c = new DropDownLabel(component);
536
        return c;
537
    }
538

    
539
    @Override
540
    public CompoundIcon createCompoundIcon(Icon... icons) {
541
        DefaultCompoundIcon i = new DefaultCompoundIcon(icons);
542
        return i;
543
    }
544

    
545
    @Override
546
    public CompoundIcon createCompoundIcon(int orientation, Icon... icons) {
547
        DefaultCompoundIcon i = new DefaultCompoundIcon(orientation, icons);
548
        return i;
549
    }
550

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

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

    
563
    @Override
564
    public BookmarksController createBookmarksController(Bookmarks bookmarks, JButton button) {
565
        BookmarksController controller;
566
        controller = new DefaultBookmarksController(bookmarks, button);
567
        return controller;
568
    }
569

    
570
    @Override
571
    public HistoryController createHistoryController(History history, JButton button) {
572
        DefaultHistoryController controller;
573
        controller = new DefaultHistoryController(history, button);
574
        return controller;
575
    }
576

    
577
    @Override
578
    public FilteredTableModel createFilteredTableModel(TableModel tableModel, int filterColumn) {
579
        FilteredTableModelImpl model = new FilteredTableModelImpl(tableModel, filterColumn);
580
        return model;
581
    }
582

    
583
    @Override
584
    public JLabel createTitledSeparator(String title, int height, int titlePosition, int titleJustification) {
585
        TitledSeparator c = new TitledSeparator(title, height, titlePosition, titleJustification);
586
        return c;
587
    }
588

    
589
    @Override
590
    public JLabel createTitledSeparator(String title) {
591
        TitledSeparator c = new TitledSeparator(
592
                title,
593
                2,
594
                TitledBorder.DEFAULT_POSITION,
595
                TitledBorder.DEFAULT_JUSTIFICATION
596
        );
597
        return c;
598
    }
599

    
600
    @Override
601
    public FilteredListModel createFilteredListModel() {
602
        FilteredListModel model = new FilteredListModelImpl();
603
        return model;
604
    }
605

    
606
    @Override
607
    public FilteredTreeModel createFilteredTreeModel(JTree tree) {
608
        FilteredTreeModel model = new FilteredTreeModelImpl(tree.getModel());
609
        return model;
610
    }
611

    
612
    @Override
613
    public FilteredListController createFilteredListController(JList list, JTextComponent text, JButton button) {
614
        FilteredListController flc = new DefaultFilteredListController(list, text, button);
615
        return flc;
616
    }
617

    
618
    @Override
619
    public FilteredTreeController createFilteredTreeController(JTree list, JTextComponent text, JButton button) {
620
        FilteredTreeController ftc = new DefaultFilteredTreeController(list, text, button);
621
        return ftc;
622
    }
623

    
624
    @Override
625
    public JWebBrowser createJWebBrowser() {
626
        return this.webBrowserfactory.create();
627
    }
628

    
629
    @Override
630
    public void registerJWebBrowserFactory(JWebBrowserFactory factory) {
631
        this.webBrowserfactory = factory;
632
    }
633

    
634
    public JWebBrowserFactory getJWebBrowserFactory() {
635
        return this.webBrowserfactory;
636
    }
637

    
638
}