Package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale

Source Code of net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.DataScaleTablePopupHandler

package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;

import net.sourceforge.squirrel_sql.fw.gui.SortableTableModel;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;


/**
* This class only exists because the regular right mouse menu handling does not work
* for the buttons that a DataScalePanel consists of.
*
* The right mouse menu works for those Buttons only if a button was clicked and then the previous navigation button was used
* to return to the table where the button was klicked. In this case the tabel's right mouse menu doesn't work anymore.
* That is why we implement both ways.
*
* Quite a bit comlicated just to bring up a right mouse menu, isn't it.
*
*/
public class DataScaleTablePopupHandler
{
   private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(DataScaleTablePopupHandler.class);

   private DataScaleTable _dataScaleTable;
   private JButton _buttonPopupWasOpenedAt;
   private DataScale _dataScalePopupWasOpenedAt;

   DataScaleTablePopupHandler(final DataScaleTable dataScaleTable)
   {
      _dataScaleTable = dataScaleTable;
     
      attachListenersToTable(dataScaleTable);

      attachListenersToButtons(dataScaleTable);

   }

   private void attachListenersToButtons(DataScaleTable dataScaleTable)
   {
      final JPopupMenu popup = createPopupMenu();

      for (int i = 0; i < dataScaleTable.getDataScaleTableModel().getRowCount(); i++)
      {
         final DataScale dataScale = dataScaleTable.getDataScaleTableModel().getDataScaleAt(i);

         // This initialzing call is needed to make ths scale to create the buttons.
         dataScale.getPanel();

         JButton[] buttons = dataScale.getButtons();

         for (final JButton button : buttons)
         {
            button.addMouseListener(new MouseAdapter()
            {
               @Override
               public void mousePressed(MouseEvent evt)
               {
                  maybeShowPopUpOnButton(evt, dataScale, button, popup);
               }

               @Override
               public void mouseReleased(MouseEvent evt)
               {
                  maybeShowPopUpOnButton(evt, dataScale, button, popup);
               }
            });


         }
      }
   }

   private void maybeShowPopUpOnButton(MouseEvent evt, DataScale dataScale, JButton button, JPopupMenu popup)
   {
      if (evt.isPopupTrigger())
      {
         _dataScalePopupWasOpenedAt = dataScale;
         _buttonPopupWasOpenedAt = button;
         popup.show(evt.getComponent(), evt.getX(), evt.getY());
      }
   }

   private void attachListenersToTable(DataScaleTable dataScaleTable)
   {
      final JPopupMenu popup = createPopupMenu();

      dataScaleTable.addMouseListener(new MouseAdapter()
      {
         @Override
         public void mousePressed(MouseEvent evt)
         {
            maybeShowPopUpOnTable(evt, popup);
         }

         @Override
         public void mouseReleased(MouseEvent evt)
         {
            maybeShowPopUpOnTable(evt, popup);
         }
      });
   }

   private JPopupMenu createPopupMenu()
   {
      final JPopupMenu popup = new JPopupMenu();

      JMenuItem mnuInTable = new JMenuItem(s_stringMgr.getString("DataScaleTablePopupHandler.showInTable"));
      mnuInTable.addActionListener(new ActionListener()
      {
         public void actionPerformed(ActionEvent e)
         {
            _dataScalePopupWasOpenedAt.showInTableSelected(_buttonPopupWasOpenedAt);
         }
      });
      popup.add(mnuInTable);

      JMenuItem mnuInTableWin = new JMenuItem(s_stringMgr.getString("DataScaleTablePopupHandler.showTableInWin"));
      mnuInTableWin.addActionListener(new ActionListener()
      {
         public void actionPerformed(ActionEvent e)
         {
            _dataScalePopupWasOpenedAt.showInTableWin(_buttonPopupWasOpenedAt);
         }
      });
      popup.add(mnuInTableWin);

      return popup;
   }

   private void maybeShowPopUpOnTable(MouseEvent evt, JPopupMenu popup)
   {
      if (evt.isPopupTrigger())
      {
         Point point = new Point(evt.getX(), evt.getY());

         int colIx = _dataScaleTable.columnAtPoint(point);

         String headerValue = (String) _dataScaleTable.getColumnModel().getColumn(colIx).getHeaderValue();
         if(DataScaleTableModel.COL_NAME_DATA.equals(headerValue))
         {
            int rowIx = _dataScaleTable.rowAtPoint(point);

            DataScaleTableModel model = _dataScaleTable.getDataScaleTableModel();

            SortableTableModel sortableTableModel = (SortableTableModel) _dataScaleTable.getModel();
            int transformedRow = sortableTableModel.transfromToModelRow(rowIx);
            _dataScalePopupWasOpenedAt = model.getDataScaleAt(transformedRow);


            Rectangle rect = _dataScaleTable.getCellRect(rowIx, colIx, false);

//            System.out.println("cell rect x = " + rect.x);
//            System.out.println("cell rect y = " + rect.y);
//
//            System.out.println("point x = " + point.x);
//            System.out.println("point y = " + point.y);
//
            int xInScalePanel = point.x - rect.x;
            int yInScalePanel = point.y - rect.y;
//
//            System.out.println("point in panel x = " + xInScalePanel);
//            System.out.println("point in panel y = " + yInScalePanel);

            _buttonPopupWasOpenedAt = _dataScalePopupWasOpenedAt.getPanel().getButtonAt(xInScalePanel);

//            System.out.println("btn = " + _buttonPopupWasOpenedAt.getText());

            if (null != _dataScalePopupWasOpenedAt && null != _buttonPopupWasOpenedAt)
            {
               popup.show(evt.getComponent(), evt.getX(), evt.getY());
            }

         }
      }
   }
}
TOP

Related Classes of net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.DataScaleTablePopupHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.