All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.noos.xing.mydoggy.mydoggyset.view.manager.ManagerView Maven / Gradle / Ivy

There is a newer version: 1.6.0
Show newest version
package org.noos.xing.mydoggy.mydoggyset.view.manager;

import org.noos.xing.mydoggy.*;
import org.noos.xing.mydoggy.plaf.ui.cmp.ExtendedTableLayout;
import org.noos.xing.yasaf.plaf.action.ChangeListenerAction;
import org.noos.xing.yasaf.plaf.action.DynamicAction;
import org.noos.xing.yasaf.plaf.action.ViewContextAction;
import org.noos.xing.yasaf.plaf.action.ViewContextSource;
import org.noos.xing.yasaf.plaf.bean.ChecBoxSelectionSource;
import org.noos.xing.yasaf.plaf.bean.SpinnerValueSource;
import org.noos.xing.yasaf.plaf.component.MatrixPanel;
import org.noos.xing.yasaf.plaf.view.ComponentView;
import org.noos.xing.yasaf.plaf.view.MapViewContext;
import org.noos.xing.yasaf.plaf.view.listener.ContextPutItemListener;
import org.noos.xing.yasaf.view.View;
import org.noos.xing.yasaf.view.ViewContext;
import org.noos.xing.yasaf.view.ViewContextChangeListener;
import org.noos.xing.yasaf.view.event.ViewContextChangeEvent;

import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

/**
 * @author Angelo De Caro ([email protected])
 */
public class ManagerView implements View {
    protected ToolWindowManager toolWindowManager;

    protected enum ToolBarKey {
        LEFT_TOOLBAR,
        RIGHT_TOOLBAR,
        TOP_TOOLBAR,
        BOTTOM_TOOLBAR
    }


    public ManagerView(ToolWindowManager toolWindowManager) {
        this.toolWindowManager = toolWindowManager;
    }


    public Component getComponent() {
        ViewContext viewContext = new MapViewContext();
        viewContext.put(ToolWindowManager.class, toolWindowManager);
        viewContext.put(ToolBarKey.BOTTOM_TOOLBAR, toolWindowManager.getToolWindowBar(ToolWindowAnchor.BOTTOM));
        viewContext.put(ToolBarKey.LEFT_TOOLBAR, toolWindowManager.getToolWindowBar(ToolWindowAnchor.LEFT));
        viewContext.put(ToolBarKey.RIGHT_TOOLBAR, toolWindowManager.getToolWindowBar(ToolWindowAnchor.RIGHT));
        viewContext.put(ToolBarKey.TOP_TOOLBAR, toolWindowManager.getToolWindowBar(ToolWindowAnchor.TOP));

        JPanel panel = new JPanel();
        panel.setLayout(new ExtendedTableLayout(new double[][]{{-1}, {100, 3, 150, 3, -1}}));
        panel.add(new ToolWindowManagerDescriptorView(viewContext).getComponent(), "0,0,FULL,FULL");
        panel.add(new ToolWindowBarsView(toolWindowManager).getComponent(), "0,2,FULL,FULL");
        panel.add(new PersistenceDelegateView(viewContext).getComponent(), "0,4,FULL,FULL");

        viewContext.put(ToolWindowManagerDescriptor.class, toolWindowManager.getToolWindowManagerDescriptor());

        return panel;
    }


    public class ToolWindowManagerDescriptorView extends ComponentView implements ViewContextChangeListener {
        private JCheckBox numberingEnabled, previewEnabled, showUnavailableTools;
        private JComboBox pushAwayMode;


        public ToolWindowManagerDescriptorView(ViewContext viewContext) {
            super(viewContext);
        }


        protected Component initComponent() {
            MatrixPanel panel = new MatrixPanel(2, 2);
            panel.setBorder(new TitledBorder("ToolWindowManager#getToolWindowManagerDescriptor()"));

            // Column 0
            panel.addEntry(0, 0, "numberingEnabled : ", numberingEnabled = new JCheckBox());
            numberingEnabled.setAction(new DynamicAction(ToolWindowManagerDescriptor.class,
                    "numberingEnabled",
                    new ViewContextSource(viewContext, ToolWindowManagerDescriptor.class),
                    new ChecBoxSelectionSource(numberingEnabled)));

            panel.addEntry(1, 0, "previewEnabled : ", previewEnabled = new JCheckBox());
            previewEnabled.setAction(new DynamicAction(ToolWindowManagerDescriptor.class,
                    "previewEnabled",
                    new ViewContextSource(viewContext, ToolWindowManagerDescriptor.class),
                    new ChecBoxSelectionSource(previewEnabled)));


            // Column 1

            pushAwayMode = new JComboBox(new Object[]{
                    PushAwayMode.ANTICLOCKWISE,
                    PushAwayMode.HORIZONTAL,
                    PushAwayMode.VERTICAL,
                    PushAwayMode.MOST_RECENT
            });
            pushAwayMode.addItemListener(new ItemListener() {
                public void itemStateChanged(ItemEvent e) {
                    viewContext.put(PushAwayMode.class, e.getItem());
                }
            });
            panel.addEntry(0, 1, "pushAwayMode : ", pushAwayMode);

            panel.addEntry(1, 1, "showUnavailableTools : ", showUnavailableTools = new JCheckBox());
            showUnavailableTools.setAction(new DynamicAction(ToolWindowManagerDescriptor.class,
                    "showUnavailableTools",
                    new ViewContextSource(viewContext, ToolWindowManagerDescriptor.class),
                    new ChecBoxSelectionSource(showUnavailableTools)));


            return panel;
        }

        protected void initListeners() {
            viewContext.addViewContextChangeListener(PushAwayMode.class, new ViewContextChangeListener() {
                public void contextChange(ViewContextChangeEvent evt) {
                    ToolWindowManagerDescriptor managerDescriptor = viewContext.get(ToolWindowManagerDescriptor.class);
                    managerDescriptor.setPushAwayMode((PushAwayMode) evt.getNewValue());
                }
            });
            viewContext.addViewContextChangeListener(ToolWindowManagerDescriptor.class, this);
        }


        public void contextChange(ViewContextChangeEvent evt) {
            ToolWindowManagerDescriptor managerDescriptor = (ToolWindowManagerDescriptor) evt.getNewValue();

            numberingEnabled.setSelected(managerDescriptor.isNumberingEnabled());
            previewEnabled.setSelected(managerDescriptor.isPreviewEnabled());
            showUnavailableTools.setSelected(managerDescriptor.isShowUnavailableTools());
            pushAwayMode.setSelectedItem(managerDescriptor.getPushAwayMode());
        }
    }

    public class ToolWindowBarsView extends ComponentView {
        protected JPanel mainPanel;

        public ToolWindowBarsView(ToolWindowManager toolWindowManager) {
            super();
            viewContext.put(ToolWindowManager.class, toolWindowManager);
        }


        protected Component initComponent() {
            mainPanel = new JPanel(new ExtendedTableLayout(new double[][]{{-1}, {20, 3, -1}}));
            mainPanel.setBorder(new TitledBorder("ToolWindowManager#getToolWindowBar(ToolWindowAnchor)"));

            mainPanel.add(new ToolWindowBarView(viewContext).getComponent(), "0,2,FULL,FULL");
            mainPanel.add(new ToolWindowAnchorSelectorView(viewContext).getComponent(), "0,0,FULL,FULL");

            return mainPanel;
        }


        protected class ToolWindowBarView extends ComponentView implements ViewContextChangeListener {
            protected ToolWindowBar toolWindowBar;

            protected JCheckBox visible, aggregateMode;
            private JSpinner dividerSize, length;


            public ToolWindowBarView(ViewContext viewContext) {
                super(viewContext);
            }

            protected Component initComponent() {
                MatrixPanel panel = new MatrixPanel(4, 2);
                panel.setBorder(new TitledBorder("Properties"));

                // Left
                panel.addEntry(0, 0, "visible : ", visible = new JCheckBox());
                visible.setAction(new DynamicAction(ToolWindowBar.class,
                        "visible",
                        new ViewContextSource(viewContext, ToolWindowBar.class),
                        new ChecBoxSelectionSource(visible)));

                panel.addEntry(1, 0, "aggregateMode : ", aggregateMode = new JCheckBox());
                aggregateMode.setAction(new DynamicAction(ToolWindowBar.class,
                        "aggregateMode",
                        new ViewContextSource(viewContext, ToolWindowBar.class),
                        new ChecBoxSelectionSource(aggregateMode)));

                // Right

                panel.addEntry(0, 1, "dividerSize : ", dividerSize = new JSpinner(new SpinnerNumberModel(5, 0, 50, 1)));
                dividerSize.addChangeListener(new ChangeListenerAction(ToolWindowBar.class,
                        "dividerSize",
                        new ViewContextSource(viewContext, ToolWindowBar.class),
                        new SpinnerValueSource(dividerSize)
                )
                );

                panel.addEntry(1, 1, "length : ", length = new JSpinner(new SpinnerNumberModel(5, 0, 50, 1)));
                length.addChangeListener(new ChangeListenerAction(ToolWindowBar.class,
                        "length",
                        new ViewContextSource(viewContext, ToolWindowBar.class),
                        new SpinnerValueSource(length)
                )
                );

                return panel;
            }

            protected void initListeners() {
                viewContext.addViewContextChangeListener(ToolWindowAnchor.class, this);
            }

            public void contextChange(ViewContextChangeEvent evt) {
                if (ToolWindowAnchor.class.equals(evt.getProperty())) {
                    toolWindowBar = viewContext.get(ToolWindowManager.class).getToolWindowBar((ToolWindowAnchor) evt.getNewValue());
                    viewContext.put(ToolWindowBar.class, toolWindowBar);

                    visible.setSelected(toolWindowBar.isVisible());
                    aggregateMode.setSelected(toolWindowBar.isAggregateMode());
                    dividerSize.setValue(toolWindowBar.getDividerSize());
                    length.setValue(toolWindowBar.getLength());
                }
            }

        }

        protected class ToolWindowAnchorSelectorView extends ComponentView {
            protected JComboBox anchors;


            public ToolWindowAnchorSelectorView(ViewContext viewContext) {
                super(viewContext);
            }


            protected Component initComponent() {
                JPanel panel = new JPanel(new ExtendedTableLayout(new double[][]{{3, 150, 3, -1, 3}, {-1}}));

                anchors = new JComboBox(new Object[]{
                        ToolWindowAnchor.LEFT,
                        ToolWindowAnchor.RIGHT,
                        ToolWindowAnchor.TOP,
                        ToolWindowAnchor.BOTTOM,
                });
                anchors.addItemListener(new ContextPutItemListener(viewContext, ToolWindowAnchor.class));

                panel.add(new JLabel("ToolWindowAnchor : "), "1,0,r,FULL");
                panel.add(anchors, "3,0,FULL,FULL");

                return panel;
            }

            @Override
            protected void onFirstVisible() {
                anchors.setSelectedIndex(1);
                anchors.setSelectedIndex(0);
            }
        }
    }

    public class PersistenceDelegateView extends ComponentView {
        protected JEditorPane editorPane;


        public PersistenceDelegateView(ViewContext viewContext) {
            super(viewContext);
        }


        protected Component initComponent() {
            JPanel panel = new JPanel(new ExtendedTableLayout(new double[][]{{3, 100, 3, -1, 3}, {3, 20, 3, 20, 3, 20, 3, -1, 3}}));
            panel.setBorder(new TitledBorder("ToolWindowManager#getPersistenceDelegate()"));

            JButton save = new JButton("Save ->");
            save.addActionListener(new ViewContextAction(viewContext, "save"));
            panel.add(save, "1,1,FULL,FULL");

            JButton load = new JButton("<- Load");
            load.addActionListener(new ViewContextAction(viewContext, "load"));
            panel.add(load, "1,3,FULL,FULL");

            JButton clear = new JButton("Clear");
            clear.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    viewContext.put("output", "");
                }
            });
            panel.add(clear, "1,5,FULL,FULL");

            editorPane = new JEditorPane();
            panel.add(new JScrollPane(editorPane), "3,1,3,7");

            return panel;
        }

        protected void initListeners() {
            viewContext.addViewContextChangeListener("save", new ViewContextChangeListener() {
                public void contextChange(ViewContextChangeEvent evt) {
                    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                    viewContext.get(ToolWindowManager.class).getPersistenceDelegate().save(outputStream);
                    viewContext.put("output", outputStream.toString());
                }
            });
            viewContext.addViewContextChangeListener("load", new ViewContextChangeListener() {
                public void contextChange(ViewContextChangeEvent evt) {
                    ByteArrayInputStream inputStream = new ByteArrayInputStream(editorPane.getText().getBytes());
                    viewContext.get(ToolWindowManager.class).getPersistenceDelegate().apply(inputStream);
                }
            });
            viewContext.addViewContextChangeListener("output", new ViewContextChangeListener() {
                public void contextChange(ViewContextChangeEvent evt) {
                    editorPane.setText((String) viewContext.get("output"));
                }
            });
        }

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy