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

History | View | Annotate | Download (24 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.beans.PropertyChangeListener;
14
import java.io.File;
15
import java.lang.reflect.InvocationTargetException;
16
import java.lang.reflect.Method;
17
import javax.swing.AbstractAction;
18
import javax.swing.AbstractButton;
19
import javax.swing.Action;
20
import javax.swing.ComboBoxModel;
21
import javax.swing.Icon;
22
import javax.swing.ImageIcon;
23
import javax.swing.JButton;
24
import javax.swing.JComboBox;
25
import javax.swing.JComponent;
26
import javax.swing.JLabel;
27
import javax.swing.JList;
28
import javax.swing.JMenuItem;
29
import javax.swing.JPopupMenu;
30
import javax.swing.JScrollPane;
31
import javax.swing.JSlider;
32
import javax.swing.JTabbedPane;
33
import javax.swing.JTextField;
34
import javax.swing.JTree;
35
import javax.swing.JViewport;
36
import javax.swing.border.TitledBorder;
37
import javax.swing.table.TableModel;
38
import javax.swing.text.DefaultEditorKit;
39
import javax.swing.text.JTextComponent;
40
import javax.swing.tree.TreeModel;
41
import org.apache.commons.lang3.StringUtils;
42
import org.gvsig.tools.ToolsLocator;
43
import org.gvsig.tools.bookmarksandhistory.Bookmarks;
44
import org.gvsig.tools.bookmarksandhistory.History;
45
import org.gvsig.tools.i18n.I18nManager;
46
import org.gvsig.tools.swing.api.ActionListenerSupport;
47
import org.gvsig.tools.swing.api.ChangeListenerHelper;
48
import org.gvsig.tools.swing.api.ColorChooserController;
49
import org.gvsig.tools.swing.api.CompoundIcon;
50
import org.gvsig.tools.swing.api.DropDown;
51
import org.gvsig.tools.swing.api.FilteredListController;
52
import org.gvsig.tools.swing.api.FilteredTableModel;
53
import org.gvsig.tools.swing.api.FilteredTreeController;
54
import org.gvsig.tools.swing.api.FilteredTreeModel;
55
import org.gvsig.tools.swing.api.JListWithCheckbox;
56
import org.gvsig.tools.swing.api.JWebBrowser;
57
import org.gvsig.tools.swing.api.JWebBrowserFactory;
58
import org.gvsig.tools.swing.api.SimpleImage;
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.impl.bookmarkshistory.DefaultBookmarksController;
78
import org.gvsig.tools.swing.impl.bookmarkshistory.DefaultHistoryController;
79

    
80
public class DefaultToolsSwingManager implements ToolsSwingManager {
81

    
82
    private Dimension maxPhysicalSizeOfBufferedImage;
83
    private JWebBrowserFactory webBrowserfactory;
84

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

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

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

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

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

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

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

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

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

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

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

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

    
157
    @Override
158
    public ColorChooserController createColorChooserController(JTextField txtLabel, JButton btnShowDialog) {
159
        return new DefaultColorChooserController(txtLabel, btnShowDialog);
160
    }
161

    
162
    @Override
163
    public ColorChooserController createColorChooserController(JTextField txtLabel, JButton btnShowDialog, JSlider sldAlpha) {
164
        return new DefaultColorChooserController(txtLabel, btnShowDialog, sldAlpha);
165
    }
166

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
327
        popupMenu.add(textEditorAction);
328
        popupMenu.addSeparator();
329

    
330
        popupMenu.add(menuCut);
331
        popupMenu.add(copyAction);
332
        popupMenu.add(menuPaste);
333
        popupMenu.add(selectAllAction);
334

    
335
        if (component.isEnabled() && component.isEditable()) {
336
            menuCut.setEnabled(true);
337
            menuPaste.setEnabled(true);
338
        } else {
339
            menuCut.setEnabled(false);
340
            menuPaste.setEnabled(false);
341
        }
342
        component.addPropertyChangeListener(new PropertyChangeListener() {
343
            @Override
344
            public void propertyChange(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
        });
359
        component.setComponentPopupMenu(popupMenu);
360
    }
361

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
452
        }
453
    }
454

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

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

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

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

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

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

    
526
    @Override
527
    public DropDown createDropDown(JComboBox combo) {
528
        DropDown c = new DropDownComboBox(combo);
529
        return c;
530
    }
531

    
532
    @Override
533
    public DropDown createDropDown(JLabel label) {
534
        DropDown c = new DropDownLabel(label);
535
        return c;
536
    }
537

    
538
    @Override
539
    public DropDown createDropDown(AbstractButton button) {
540
        DropDown c = new DropDownButton(button);
541
        return c;
542
    }
543

    
544
    @Override
545
    public DropDown createDropDown(JComponent component) {
546
        DropDown c = new DropDownLabel(component);
547
        return c;
548
    }
549

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

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

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

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

    
574
    @Override
575
    public BookmarksController createBookmarksController(Bookmarks bookmarks, JButton button) {
576
        BookmarksController controller;
577
        controller = new DefaultBookmarksController(bookmarks, button);
578
        return controller;
579
    }
580

    
581
    @Override
582
    public HistoryController createHistoryController(History history, JButton button) {
583
        DefaultHistoryController controller;
584
        controller = new DefaultHistoryController(history, button);
585
        return controller;
586
    }
587

    
588
    @Override
589
    public FilteredTableModel createFilteredTableModel(TableModel tableModel, int filterColumn) {
590
        FilteredTableModelImpl model = new FilteredTableModelImpl(tableModel, filterColumn);
591
        return model;
592
    }
593

    
594
    @Override
595
    public JLabel createTitledSeparator(String title, int height, int titlePosition, int titleJustification) {
596
        TitledSeparator c = new TitledSeparator(title, height, titlePosition, titleJustification);
597
        return c;
598
    }
599

    
600
    @Override
601
    public JLabel createTitledSeparator(String title) {
602
        TitledSeparator c = new TitledSeparator(
603
                title,
604
                2,
605
                TitledBorder.DEFAULT_POSITION,
606
                TitledBorder.DEFAULT_JUSTIFICATION
607
        );
608
        return c;
609
    }
610

    
611
    @Override
612
    public FilteredListModel createFilteredListModel() {
613
        FilteredListModel model = new FilteredListModelImpl();
614
        return model;
615
    }
616

    
617
    @Override
618
    public FilteredTreeModel createFilteredTreeModel(JTree tree) {
619
        FilteredTreeModel model = new FilteredTreeModelImpl(tree.getModel());
620
        return model;
621
    }
622

    
623
    @Override
624
    public FilteredListController createFilteredListController(JList list, JTextComponent text, JButton button) {
625
        FilteredListController flc = new DefaultFilteredListController(list, text, button);
626
        return flc;
627
    }
628

    
629
    public FilteredTreeController createFilteredTreeController(JTree list, JTextComponent text, JButton button) {
630
        FilteredTreeController ftc = new DefaultFilteredTreeController(list, text, button);
631
        return ftc;
632
    }
633

    
634
    @Override
635
    public JWebBrowser createJWebBrowser() {
636
        return this.webBrowserfactory.create();
637
    }
638

    
639
    @Override
640
    public void registerJWebBrowserFactory(JWebBrowserFactory factory) {
641
        this.webBrowserfactory = factory;
642
    }
643

    
644
    public JWebBrowserFactory getJWebBrowserFactory() {
645
        return this.webBrowserfactory;
646
    }
647

    
648
}