de.tor.tribes.ui.views.DSWorkbenchMarkerFrame.java Source code

Java tutorial

Introduction

Here is the source code for de.tor.tribes.ui.views.DSWorkbenchMarkerFrame.java

Source

/* 
 * Copyright 2015 Torridity.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package de.tor.tribes.ui.views;

import de.tor.tribes.control.GenericManagerListener;
import de.tor.tribes.types.ext.Village;
import de.tor.tribes.ui.panels.GenericTestPanel;
import de.tor.tribes.ui.panels.MarkerTableTab;
import de.tor.tribes.ui.windows.AbstractDSWorkbenchFrame;
import de.tor.tribes.util.Constants;
import de.tor.tribes.util.GlobalOptions;
import de.tor.tribes.util.JOptionPaneHelper;
import de.tor.tribes.util.PropertyHelper;
import de.tor.tribes.util.mark.MarkerManager;
import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.apache.commons.configuration2.Configuration;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jdesktop.swingx.JXButton;
import org.jdesktop.swingx.JXTaskPane;

/**
 * @author  Charon
 */
public class DSWorkbenchMarkerFrame extends AbstractDSWorkbenchFrame
        implements GenericManagerListener, ActionListener {

    private static Logger logger = LogManager.getLogger("MarkerView");
    private static DSWorkbenchMarkerFrame SINGLETON = null;
    private GenericTestPanel centerPanel = null;

    @Override
    public void actionPerformed(ActionEvent e) {
        MarkerTableTab activeTab = getActiveTab();
        if (e.getActionCommand() != null && activeTab != null) {
            switch (e.getActionCommand()) {
            case "BBCopy":
                activeTab.transferSelection(MarkerTableTab.TRANSFER_TYPE.CLIPBOARD_BB);
                break;
            case "Cut":
                activeTab.transferSelection(MarkerTableTab.TRANSFER_TYPE.CUT_TO_INTERNAL_CLIPBOARD);
                break;
            case "Copy":
                activeTab.transferSelection(MarkerTableTab.TRANSFER_TYPE.COPY_TO_INTERNAL_CLIPBOARD);
                break;
            case "Paste":
                activeTab.transferSelection(MarkerTableTab.TRANSFER_TYPE.FROM_INTERNAL_CLIPBOARD);
                break;
            case "Delete":
                activeTab.deleteSelection(true);
                break;
            default:
                break;
            }
        }
    }

    @Override
    public void dataChangedEvent() {
        generateMarkerTabs();
    }

    @Override
    public void dataChangedEvent(String pGroup) {
        MarkerTableTab tab = getActiveTab();
        if (tab != null) {
            tab.updateSet();
        }
    }

    /** Creates new form DSWorkbenchMarkerFrame */
    DSWorkbenchMarkerFrame() {
        initComponents();
        if (!GlobalOptions.isMinimal()) {
            centerPanel = new GenericTestPanel(true);
        } else {
            centerPanel = new GenericTestPanel(false);
        }
        jMarkersPanel.add(centerPanel, BorderLayout.CENTER);
        centerPanel.setChildComponent(jXMarkerPanel);
        if (!GlobalOptions.isMinimal()) {
            buildMenu();
        }
        capabilityInfoPanel1.addActionListener(this);

        jMarkerTabPane.getModel().addChangeListener(new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent e) {
                MarkerTableTab activeTab = getActiveTab();
                if (activeTab != null) {
                    activeTab.updateSet();
                }
            }
        });

        // <editor-fold defaultstate="collapsed" desc=" Init HelpSystem ">
        if (!Constants.DEBUG) {
            GlobalOptions.getHelpBroker().enableHelpKey(getRootPane(), "pages.markers_view",
                    GlobalOptions.getHelpBroker().getHelpSet());
        }
        // </editor-fold>
        pack();
    }

    private void buildMenu() {
        JXTaskPane editPane = new JXTaskPane();
        editPane.setTitle("Bearbeiten");
        JXButton showButton = new JXButton(
                new ImageIcon(DSWorkbenchTagFrame.class.getResource("/res/ui/eye_large.png")));

        showButton.setToolTipText("Blendet gewhlten Markierungen auf der Hauptkarte und der Minimap ein");
        showButton.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseReleased(MouseEvent e) {
                MarkerTableTab tab = getActiveTab();
                if (tab != null) {
                    tab.changeVisibility(true);
                }
            }
        });
        editPane.getContentPane().add(showButton);
        JXButton hideButton = new JXButton(
                new ImageIcon(DSWorkbenchTagFrame.class.getResource("/res/ui/eye_forbidden_large.png")));

        hideButton.setToolTipText("Blendet gewhlten Markierungen auf der Hauptkarte und der Minimap aus");
        hideButton.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseReleased(MouseEvent e) {
                MarkerTableTab tab = getActiveTab();
                if (tab != null) {
                    tab.changeVisibility(false);
                }
            }
        });
        editPane.getContentPane().add(hideButton);

        centerPanel.setupTaskPane(editPane);
    }

    @Override
    public void toBack() {
        jMarkerFrameAlwaysOnTop.setSelected(false);
        fireMarkerFrameOnTopEvent(null);
        super.toBack();
    }

    @Override
    public void storeCustomProperties(Configuration pConfig) {
        pConfig.setProperty(getPropertyPrefix() + ".menu.visible", centerPanel.isMenuVisible());
        pConfig.setProperty(getPropertyPrefix() + ".alwaysOnTop", jMarkerFrameAlwaysOnTop.isSelected());

        int selectedIndex = jMarkerTabPane.getModel().getSelectedIndex();
        if (selectedIndex >= 0) {
            pConfig.setProperty(getPropertyPrefix() + ".tab.selection", selectedIndex);
        }

        MarkerTableTab tab = ((MarkerTableTab) jMarkerTabPane.getComponentAt(0));
        PropertyHelper.storeTableProperties(tab.getMarkerTable(), pConfig, getPropertyPrefix());
    }

    @Override
    public void restoreCustomProperties(Configuration pConfig) {
        centerPanel.setMenuVisible(pConfig.getBoolean(getPropertyPrefix() + ".menu.visible", true));
        try {
            jMarkerTabPane.setSelectedIndex(pConfig.getInteger(getPropertyPrefix() + ".tab.selection", 0));
        } catch (Exception ignored) {
        }
        try {
            jMarkerFrameAlwaysOnTop.setSelected(pConfig.getBoolean(getPropertyPrefix() + ".alwaysOnTop"));
        } catch (Exception ignored) {
        }

        setAlwaysOnTop(jMarkerFrameAlwaysOnTop.isSelected());

        MarkerTableTab tab = ((MarkerTableTab) jMarkerTabPane.getComponentAt(0));
        PropertyHelper.restoreTableProperties(tab.getMarkerTable(), pConfig, getPropertyPrefix());
    }

    @Override
    public String getPropertyPrefix() {
        return "marker.view";
    }

    public static synchronized DSWorkbenchMarkerFrame getSingleton() {
        if (SINGLETON == null) {
            SINGLETON = new DSWorkbenchMarkerFrame();
        }
        return SINGLETON;
    }

    /**Get the currently selected tab*/
    private MarkerTableTab getActiveTab() {
        try {
            if (jMarkerTabPane.getModel().getSelectedIndex() < 0) {
                return null;
            }
            return ((MarkerTableTab) jMarkerTabPane.getComponentAt(jMarkerTabPane.getModel().getSelectedIndex()));
        } catch (ClassCastException cce) {
            return null;
        }
    }

    /**Initialize and add one tab for each marker set to jTabbedPane1*/
    public void generateMarkerTabs() {
        while (jMarkerTabPane.getTabCount() > 0) {
            MarkerTableTab tab = (MarkerTableTab) jMarkerTabPane.getComponentAt(0);
            tab.deregister();
            jMarkerTabPane.removeTabAt(0);
        }

        LabelUIResource lr = new LabelUIResource();
        lr.setLayout(new BorderLayout());
        lr.add(jNewPlanPanel, BorderLayout.CENTER);
        String[] plans = MarkerManager.getSingleton().getGroups();

        //insert default tab to first place
        for (String plan : plans) {
            MarkerTableTab tab = new MarkerTableTab(plan, this);
            jMarkerTabPane.addTab(plan, tab);
        }

        jMarkerTabPane.setSelectedIndex(0);
        MarkerTableTab tab = getActiveTab();
        if (tab != null) {
            tab.updateSet();
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        jXMarkerPanel = new org.jdesktop.swingx.JXPanel();
        jMarkerTabPane = new javax.swing.JTabbedPane();
        jNewPlanPanel = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        jMarkerFrameAlwaysOnTop = new javax.swing.JCheckBox();
        jMarkersPanel = new javax.swing.JPanel();
        capabilityInfoPanel1 = new de.tor.tribes.ui.components.CapabilityInfoPanel();

        jXMarkerPanel.setLayout(new java.awt.BorderLayout());
        jXMarkerPanel.add(jMarkerTabPane, java.awt.BorderLayout.CENTER);

        jNewPlanPanel.setOpaque(false);
        jNewPlanPanel.setLayout(new java.awt.BorderLayout());

        jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/ui/document_new_24x24.png"))); // NOI18N
        jLabel3.setToolTipText("Leeres Markierungsset erstellen");
        jLabel3.setEnabled(false);
        jLabel3.setMaximumSize(new java.awt.Dimension(40, 40));
        jLabel3.setMinimumSize(new java.awt.Dimension(40, 40));
        jLabel3.setPreferredSize(new java.awt.Dimension(40, 40));
        jLabel3.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                fireEnterEvent(evt);
            }

            public void mouseExited(java.awt.event.MouseEvent evt) {
                fireMouseExitEvent(evt);
            }

            public void mouseReleased(java.awt.event.MouseEvent evt) {
                fireCreateMarkerSetEvent(evt);
            }
        });
        jNewPlanPanel.add(jLabel3, java.awt.BorderLayout.CENTER);

        setTitle("Markierungen");
        setMinimumSize(new java.awt.Dimension(400, 300));
        getContentPane().setLayout(new java.awt.GridBagLayout());

        jMarkerFrameAlwaysOnTop.setText("Immer im Vordergrund");
        jMarkerFrameAlwaysOnTop.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                fireMarkerFrameOnTopEvent(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
        getContentPane().add(jMarkerFrameAlwaysOnTop, gridBagConstraints);

        jMarkersPanel.setBackground(new java.awt.Color(239, 235, 223));
        jMarkersPanel.setLayout(new java.awt.BorderLayout());
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        getContentPane().add(jMarkersPanel, gridBagConstraints);

        capabilityInfoPanel1.setSearchable(false);
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
        getContentPane().add(capabilityInfoPanel1, gridBagConstraints);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void fireMarkerFrameOnTopEvent(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_fireMarkerFrameOnTopEvent
        setAlwaysOnTop(!isAlwaysOnTop());
    }//GEN-LAST:event_fireMarkerFrameOnTopEvent

    private void fireEnterEvent(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_fireEnterEvent
        jLabel3.setEnabled(true);
    }//GEN-LAST:event_fireEnterEvent

    private void fireMouseExitEvent(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_fireMouseExitEvent
        jLabel3.setEnabled(false);
    }//GEN-LAST:event_fireMouseExitEvent

    private void fireCreateMarkerSetEvent(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_fireCreateMarkerSetEvent
        int unusedId = 1;
        while (unusedId < 1000) {
            if (MarkerManager.getSingleton().addGroup("Neues Set " + unusedId)) {
                break;
            }
            unusedId++;
        }
        if (unusedId == 1000) {
            JOptionPaneHelper.showErrorBox(DSWorkbenchMarkerFrame.this,
                    "Du hast mehr als 1000 Markierungssets. Bitte lsche zuerst ein paar bevor du Neue erstellst.",
                    "Fehler");
        }
    }//GEN-LAST:event_fireCreateMarkerSetEvent

    /**Setup marker panel*/
    @Override
    public void resetView() {
        MarkerManager.getSingleton().addManagerListener(this);
        generateMarkerTabs();
    }

    @Override
    public void fireVillagesDraggedEvent(List<Village> pVillages, Point pDropLocation) {
    }

    // <editor-fold defaultstate="collapsed" desc="Gesture handling">

    @Override
    public void fireNextPageGestureEvent() {
        int current = jMarkerTabPane.getSelectedIndex();
        int size = jMarkerTabPane.getTabCount();
        if (current + 1 > size - 1) {
            current = 0;
        } else {
            current += 1;
        }
        jMarkerTabPane.setSelectedIndex(current);
    }

    @Override
    public void firePreviousPageGestureEvent() {
        int current = jMarkerTabPane.getSelectedIndex();
        int size = jMarkerTabPane.getTabCount();
        if (current - 1 < 0) {
            current = size - 1;
        } else {
            current -= 1;
        }
        jMarkerTabPane.setSelectedIndex(current);
    }

    @Override
    public void fireRenameGestureEvent() {
        int idx = jMarkerTabPane.getSelectedIndex();
        if (idx != 0) {
            jMarkerTabPane.setSelectedIndex(idx);
        }
    }

    // </editor-fold>
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private de.tor.tribes.ui.components.CapabilityInfoPanel capabilityInfoPanel1;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JCheckBox jMarkerFrameAlwaysOnTop;
    private javax.swing.JTabbedPane jMarkerTabPane;
    private javax.swing.JPanel jMarkersPanel;
    private javax.swing.JPanel jNewPlanPanel;
    private org.jdesktop.swingx.JXPanel jXMarkerPanel;
    // End of variables declaration//GEN-END:variables
}