Package net.sourceforge.squirrel_sql.client.gui.db

Source Code of net.sourceforge.squirrel_sql.client.gui.db.BaseList

package net.sourceforge.squirrel_sql.client.gui.db;

import net.sourceforge.squirrel_sql.fw.gui.SortedListModel;
import net.sourceforge.squirrel_sql.client.ApplicationListener;
import net.sourceforge.squirrel_sql.client.IApplication;

import javax.swing.*;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import java.awt.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.prefs.Preferences;

public abstract class BaseList implements IBaseList
{


   private ArrayList<ListDataListener> _listeners = new ArrayList<ListDataListener>();
   private JList _list = new JList()
   {
      public String getToolTipText(MouseEvent event)
      {
         return BaseList.this.getToolTipText(event);
      }
   };
   private JScrollPane _comp = new JScrollPane(_list);


   public BaseList(SortedListModel sortedListModel, IApplication app)
   {
      _list.setModel(sortedListModel);
      getList().getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

      // Add listener to listen for items added/removed from list.
      _list.getModel().addListDataListener(new ListDataListener()
      {
         public void intervalAdded(ListDataEvent evt)
         {
            onIntervalAdded(evt);
         }
         public void intervalRemoved(ListDataEvent evt)
         {
            onIntervalRemoved(evt);
         }
         public void contentsChanged(ListDataEvent evt)
         {
            onContentsChanged(evt);
         }
      });

      _comp.setPreferredSize(new Dimension(100, 100));

      app.addApplicationListener(new ApplicationListener()
      {
         public void saveApplicationState()
         {
            onSaveApplicationState();
         }
      });


      setSelIxFromPrefs();
   }

   private void setSelIxFromPrefs()
   {
      int selIx = Preferences.userRoot().getInt(getSelIndexPrefKey(), 0);
      if(selIx >= 0 && selIx < _list.getModel().getSize())
      {
         _list.setSelectedIndex(selIx);
      }
   }

   private void onSaveApplicationState()
   {
      Preferences.userRoot().putInt(getSelIndexPrefKey(), getList().getSelectedIndex());
   }

   protected JList getList()
   {
      return _list;
   }

   protected abstract String getToolTipText(MouseEvent event);


   private void onContentsChanged(ListDataEvent evt)
   {
      for (ListDataListener listener : _listeners.toArray(new ListDataListener[0]))
      {
         listener.contentsChanged(evt);
      }
   }

   private void onIntervalRemoved(ListDataEvent evt)
   {
      int nextIdx = evt.getIndex0();
      int lastIdx = _list.getModel().getSize() - 1;
      if (nextIdx > lastIdx)
      {
         nextIdx = lastIdx;
      }
      _list.setSelectedIndex(nextIdx);


      for (ListDataListener listener : _listeners.toArray(new ListDataListener[0]))
      {
         listener.intervalRemoved(evt);
      }
   }

   private void onIntervalAdded(ListDataEvent evt)
   {
      _list.setSelectedIndex(evt.getIndex0()); // select the one just added.

      for (ListDataListener listener : _listeners.toArray(new ListDataListener[0]))
      {
         listener.intervalAdded(evt);
      }

   }

   public JComponent getComponent()
   {
      return _comp;
   }


   public void selectListEntryAtPoint(Point point)
   {
      int selectEventListIndex = _list.locationToIndex(point);
      if (_list.getSelectionMode() == ListSelectionModel.SINGLE_SELECTION)
      {
         // Only a single selection can be made at a time.
         int selectedIndex = _list.getSelectedIndex();
         if (selectedIndex != selectEventListIndex)
         {
            _list.setSelectedIndex(selectEventListIndex);
         }
      }
      else
      {
         // More than one selection is allowed - check to see if we should change the selection
         int[] selectedIndices = _list.getSelectedIndices();
         boolean alreadySelected = false;
         for (int selectedIndex : selectedIndices)
         {
            if (selectedIndex == selectEventListIndex)
            {
               alreadySelected = true;
            }
         }
         if (!alreadySelected)
         {
            _list.setSelectedIndex(selectEventListIndex);
         }
      }
   }

   public void addMouseListener(MouseListener mouseListener)
   {
      _list.addMouseListener(mouseListener);
   }

   public void removeMouseListener(MouseListener mouseListener)
   {
      _list.removeMouseListener(mouseListener);
   }

   public abstract String getSelIndexPrefKey();
}
TOP

Related Classes of net.sourceforge.squirrel_sql.client.gui.db.BaseList

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.