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

org.noos.xing.mydoggy.mydoggyset.MyDoggySet Maven / Gradle / Ivy

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

import info.clearthought.layout.TableLayout;
import org.jdesktop.swingx.JXMonthView;
import org.noos.common.Question;
import org.noos.common.context.Context;
import org.noos.common.object.ObjectCreator;
import org.noos.xing.mydoggy.*;
import org.noos.xing.mydoggy.mydoggyset.action.*;
import org.noos.xing.mydoggy.mydoggyset.context.MyDoggySetContext;
import org.noos.xing.mydoggy.mydoggyset.ui.*;
import org.noos.xing.mydoggy.plaf.MyDoggyToolWindowManager;
import org.noos.xing.mydoggy.plaf.ui.CustomDockableDescriptor;
import org.noos.xing.mydoggy.plaf.ui.DockableDescriptor;
import org.noos.xing.mydoggy.plaf.ui.ResourceManager;
import org.noos.xing.mydoggy.plaf.ui.cmp.ExtendedTableLayout;
import org.noos.xing.mydoggy.plaf.ui.look.MyDoggyResourceManager;
import org.noos.xing.mydoggy.plaf.ui.util.ParentOfQuestion;
import org.noos.xing.mydoggy.plaf.ui.util.StringUtil;
import org.noos.xing.mydoggy.plaf.ui.util.SwingUtil;
import org.noos.xing.yasaf.plaf.action.ViewContextAction;
import org.noos.xing.yasaf.view.ViewContext;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

/**
 * @author Angelo De Caro ([email protected])
 */
public class MyDoggySet {

    protected JFrame frame;

    protected ToolWindowManager toolWindowManager;
    protected ViewContext myDoggySetContext;
    protected DockableDescriptor memoryMonitorDescriptor;
                                      

    public void setUp() {
        initComponents();
        initToolWindows();
    }

    public void start(final Runnable runnable) {
        myDoggySetContext.put(MyDoggySet.class, null);

        SwingUtil.centrePositionOnScreen(frame);

        frame.setVisible(true);

        memoryMonitorDescriptor.setAvailable(true);
        memoryMonitorDescriptor.setAnchor(ToolWindowAnchor.BOTTOM, 0);
        memoryMonitorDescriptor.setAnchorPositionLocked(true);

        if (runnable != null) {
            Thread t = new Thread(runnable);
            t.start();
        }
    }

    public void run(final Runnable runnable) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                setUp();
                start(runnable);
            }
        });
    }


    public ToolWindowManager getToolWindowManager() {
        return toolWindowManager;
    }

    public ViewContext getMyDoggySetContext() {
        return myDoggySetContext;
    }


    protected void initComponents() {
        // Init the frame
        this.frame = new JFrame("MyDoggy-Set 1.5.0 ...");
        this.frame.setSize(800, 600);
        this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.frame.getContentPane().setLayout(new ExtendedTableLayout(new double[][]{{0, -1, 0}, {0, -1, 0}}));

        // Init ToolWindowManager
        long start = System.currentTimeMillis();
        final MyDoggyToolWindowManager myDoggyToolWindowManager = new MyDoggyToolWindowManager();
        long end = System.currentTimeMillis();
        System.out.println("> Time (millis) too load the manager : " + (end - start));

        this.toolWindowManager = myDoggyToolWindowManager;

        // Add MyDoggyToolWindowManager to frame
        this.frame.getContentPane().add(myDoggyToolWindowManager, "1,1,");

        // Init additional dockable
        this.memoryMonitorDescriptor = new MemoryMonitorDockableDescriptor((MyDoggyToolWindowManager) toolWindowManager, ToolWindowAnchor.BOTTOM);

        // Apply now all customization if necessary
        customize();

        // Init the context
        this.myDoggySetContext = new MyDoggySetContext(toolWindowManager, frame);

        // Load Menu Bar
        initMenuBar();
    }

    protected void initMenuBar() {
        JMenuBar menuBar = new JMenuBar();

        // File Menu
        JMenu fileMenu = new JMenu("File");
        fileMenu.add(new LoadWorkspaceAction(myDoggySetContext, frame, toolWindowManager));
        fileMenu.add(new StoreWorkspaceAction(frame, toolWindowManager));
        fileMenu.addSeparator();
        fileMenu.add(new FrameshotAction(frame));
        fileMenu.add(new FramePieceshotAction(frame));
        fileMenu.add(new MagnifierAction(frame));
        fileMenu.addSeparator();
        fileMenu.add(new ExitAction(frame));

        // Content Menu
        JMenu contentMenu = new JMenu("Content");
        contentMenu.add(new ContentManagerEnabledAction(toolWindowManager));
        contentMenu.addSeparator();
        contentMenu.add(new ViewContextAction("Welcome", myDoggySetContext, MyDoggySet.class));
        contentMenu.add(new ViewContextAction("Manager", myDoggySetContext, ToolWindowManager.class));
        contentMenu.add(new ViewContextAction("Tools", myDoggySetContext, ToolWindow.class));
        contentMenu.add(new ViewContextAction("Contents", myDoggySetContext, Content.class));
        contentMenu.add(new ViewContextAction("Groups", myDoggySetContext, ToolWindowGroup.class));
        contentMenu.add(new ViewContextAction("Customize", myDoggySetContext, ResourceManager.class));

        // L&F Menu
        JMenu lafMenu = new JMenu("Looks");

        String currentLaF = UIManager.getLookAndFeel().getName();

        UIManager.LookAndFeelInfo[] lafInfo = UIManager.getInstalledLookAndFeels();
        for (UIManager.LookAndFeelInfo aLafInfo : lafInfo) {
            JMenuItem menuItem = new LookAndFeelMenuItem(myDoggySetContext, aLafInfo.getName(), aLafInfo.getClassName());
            lafMenu.add(menuItem);

            if (currentLaF.equals(aLafInfo.getName()))
                menuItem.setSelected(true);
        }

        menuBar.add(fileMenu);
        menuBar.add(contentMenu);
        menuBar.add(lafMenu);

        this.frame.setJMenuBar(menuBar);
    }

    protected void initToolWindows() {
        // Register tools
        Random random = new Random();
        for (int i = 1; i < 11; i++) {
            toolWindowManager.registerToolWindow("Tool " + i, "Title " + i, null, new JButton("Hello World " + i), ToolWindowAnchor.values()[random.nextInt(4)]);
        }


        toolWindowManager.registerToolWindow("Navigation Panel", "Navigation Panel", null, new NavigationPanel(), ToolWindowAnchor.values()[random.nextInt(4)]);
        toolWindowManager.registerToolWindow("Date Picker", "Date Picker", null, new DatePicker(), ToolWindowAnchor.values()[random.nextInt(4)]);
        toolWindowManager.registerToolWindow("Monitor Panel", "Monitor Panel", null, new MonitorPanel(new RuntimeMemoryMonitorSource()).start(), ToolWindowAnchor.values()[random.nextInt(4)]);
        toolWindowManager.registerToolWindow("Doggy Table", "Doggy Table", null, new JScrollPane(new DoggyTable()), ToolWindowAnchor.values()[random.nextInt(4)]);

        // Make all tools available
        for (ToolWindow window : toolWindowManager.getToolWindows()) {
            window.setAvailable(true);
        }


    }

    protected void customize() {
        MyDoggyToolWindowManager myDoggyToolWindowManager = (MyDoggyToolWindowManager) toolWindowManager;
        ResourceManager resourceManager = myDoggyToolWindowManager.getResourceManager();
        ((MyDoggyResourceManager) resourceManager).putInstanceCreator(ParentOfQuestion.class, new ObjectCreator() {
            public Object create(Context context) {
                return new DatePickerParentOfSupport(context.get(Component.class), context.get(ToolWindow.class));
            }
        });
    }


    public static void main(String[] args) {
        final MyDoggySet test = new MyDoggySet();
        test.run(null);
    }


    public static class DatePickerParentOfSupport implements Question {
        protected Component parent;
        protected ToolWindow toolWindow;

        public DatePickerParentOfSupport(Component parent, ToolWindow toolWindow) {
            this.parent = parent;
            this.toolWindow = toolWindow;
        }

        public Boolean getAnswer(Component param) {
            if (param == null)
                return false;

            Component cursor = param;
            try {
                while (cursor != null) {
                    if ((cursor instanceof JXMonthView && toolWindow.isActive()) || cursor == parent)
                        return true;
                    cursor = cursor.getParent();
                }
                return false;
            } finally {
            }
        }

    }

    public class MemoryMonitorDockableDescriptor extends CustomDockableDescriptor {

        public MemoryMonitorDockableDescriptor(MyDoggyToolWindowManager manager, ToolWindowAnchor anchor) {
            super(manager, anchor);
        }

        public void updateRepresentativeAnchor() {
        }

        public JComponent getRepresentativeAnchor(Component parent) {
            if (representativeAnchor == null) {
                representativeAnchor = new MemoryMonitorPanel(anchor);
            }
            return representativeAnchor;
        }

        public boolean isAvailableCountable() {
            return false;
        }

        public class MemoryMonitorPanel extends JPanel {
            int sleepTime;

            public MemoryMonitorPanel(ToolWindowAnchor anchor) {
                sleepTime = 1000;

                final JProgressBar memoryUsage = new JProgressBar();
                memoryUsage.setStringPainted(true);

                JButton gc = new JButton(SwingUtil.loadIcon("org/noos/xing/mydoggy/mydoggyset/icons/gc.png"));
                gc.setBorderPainted(true);
                gc.setFocusable(false);
                gc.setBorder(BorderFactory.createLineBorder(Color.GRAY));
                gc.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        System.gc();
                        
//                        JDialog dialog = new FloatingDialog(manager, frame, true);
//                        dialog.setTitle("Hello World!!!");
//                        dialog.setSize(320,200);
//                        dialog.setLocation(100,100);
//                        dialog.setModal(true);
//                        dialog.setVisible(true);
                    }
                });

                Thread memoryThread = new Thread(new Runnable() {
                    public void run() {
                        while (true) {
                            String grabbed = StringUtil.bytes2MBytes(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory());
                            String total = StringUtil.bytes2MBytes(Runtime.getRuntime().totalMemory());

                            memoryUsage.setMaximum(Integer.parseInt(total));
                            memoryUsage.setValue(Integer.parseInt(grabbed));

                            memoryUsage.setString(grabbed + " MB of " + total + " MB");
                            try {
                                Thread.sleep(sleepTime);
                            } catch (InterruptedException e) {
                            }
                        }
                    }
                });
                memoryThread.setDaemon(true);
                memoryThread.setPriority(Thread.MIN_PRIORITY);
                memoryThread.start();

                switch (anchor) {
                    case BOTTOM:
                    case TOP:
                        memoryUsage.setOrientation(SwingConstants.HORIZONTAL);
                        setLayout(new TableLayout(new double[][]{{120, 1, 17}, {-1}}));
                        add(memoryUsage, "0,0,FULL,FULL");
                        add(gc, "2,0,FULL,FULL");
                        break;
                    case LEFT:
                        memoryUsage.setOrientation(SwingConstants.VERTICAL);
                        setLayout(new TableLayout(new double[][]{{-1}, {120, 1, 17}}));
                        add(memoryUsage, "0,0,FULL,FULL");
                        add(gc, "0,2,FULL,FULL");
                        break;
                    case RIGHT:
                        memoryUsage.setOrientation(SwingConstants.VERTICAL);
                        setLayout(new TableLayout(new double[][]{{-1}, {17, 1, 120}}));
                        add(gc, "0,0,FULL,FULL");
                        add(memoryUsage, "0,2,FULL,FULL");
                        break;
                }

                registerDragListener(memoryUsage);
                registerDragListener(gc);
                registerDragListener(this);
            }

            public void setSleepTime(int sleepTime) {
                this.sleepTime = sleepTime;
            }

        }

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy