Package net.sourceforge.squirrel_sql.client.gui.session

Source Code of net.sourceforge.squirrel_sql.client.gui.session.ObjectTreeInternalFrame$CatalogsComboListener

package net.sourceforge.squirrel_sql.client.gui.session;
/*
* Copyright (C) 2001-2004 Colin Bell
* colbell@users.sourceforge.net
*
* Copyright (C) 2003-2004 Jason Height
* jmheight@users.sourceforge.net
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.sql.SQLException;

import javax.swing.Icon;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreePath;

import net.sourceforge.squirrel_sql.client.IApplication;
import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.SessionTabWidget;
import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.WidgetAdapter;
import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.WidgetEvent;
import net.sourceforge.squirrel_sql.client.action.ActionCollection;
import net.sourceforge.squirrel_sql.client.session.IObjectTreeAPI;
import net.sourceforge.squirrel_sql.client.session.IObjectTreeInternalFrame;
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.client.session.action.RefreshSchemaInfoAction;
import net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.ObjectTreeNode;
import net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.ObjectTreePanel;
import net.sourceforge.squirrel_sql.fw.gui.SQLCatalogsComboBox;
import net.sourceforge.squirrel_sql.fw.gui.ToolBar;
import net.sourceforge.squirrel_sql.fw.util.ExceptionFormatter;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;

/* Object Tree frame class*/
public class ObjectTreeInternalFrame extends SessionTabWidget
                    implements IObjectTreeInternalFrame
{
  /** Application API. */
  private final IApplication _app;

  private ObjectTreePanel _objTreePanel;

  /** Toolbar for window. */
  private ObjectTreeToolBar _toolBar;

  private boolean _hasBeenVisible = false;

    /** Internationalized strings for this class. */
    private static final StringManager s_stringMgr =
        StringManagerFactory.getStringManager(ObjectTreeInternalFrame.class);           
   
  public ObjectTreeInternalFrame(ISession session)
  {
    super(session.getTitle(), true, true, true, true, session);
    _app = session.getApplication();
    setVisible(false);
    createGUI(session);
  }

  public void addNotify()
  {
    super.addNotify();
    if (!_hasBeenVisible)
    {
      _hasBeenVisible = true;
      // Done this late so that plugins have time to register expanders
      // with the object tree prior to it being built.
      _objTreePanel.refreshTree();
    }
  }

  public ObjectTreePanel getObjectTreePanel()
  {
    return _objTreePanel;
  }

  public IObjectTreeAPI getObjectTreeAPI()
  {
    return _objTreePanel;
  }

  private void createGUI(ISession session)
  {
    setVisible(false);
    final IApplication app = session.getApplication();
    Icon icon = app.getResources().getIcon(getClass(), "frameIcon"); //i18n
    if (icon != null)
    {
      setFrameIcon(icon);
    }

    // This is to fix a problem with the JDK (up to version 1.3)
    // where focus events were not generated correctly. The sympton
    // is being unable to key into the text entry field unless you click
    // elsewhere after focus is gained by the internal frame.
    // See bug ID 4309079 on the JavaSoft bug parade (plus others).
    addWidgetListener(new WidgetAdapter()
    {
      public void widgetActivated(WidgetEvent evt)
      {
        Window window = SwingUtilities.windowForComponent(ObjectTreeInternalFrame.this.getObjectTreePanel());
        Component focusOwner = (window != null) ? window.getFocusOwner() : null;
        if (focusOwner != null)
        {
          FocusEvent lost = new FocusEvent(focusOwner, FocusEvent.FOCUS_LOST);
          FocusEvent gained = new FocusEvent(focusOwner, FocusEvent.FOCUS_GAINED);
          window.dispatchEvent(lost);
          window.dispatchEvent(gained);
          window.dispatchEvent(lost);
          focusOwner.requestFocus();
        }
      }
    });

    _objTreePanel = new ObjectTreePanel(getSession());
    _objTreePanel.addTreeSelectionListener(new ObjectTreeSelectionListener());
    _toolBar = new ObjectTreeToolBar(getSession(), _objTreePanel);
    JPanel contentPanel = new JPanel(new BorderLayout());
    contentPanel.add(_toolBar, BorderLayout.NORTH);
    contentPanel.add(_objTreePanel, BorderLayout.CENTER);
    setContentPane(contentPanel);
    validate();
  }

   public boolean hasSQLPanelAPI()
   {
      return false;
   }

   /** The class representing the toolbar at the top of a sql internal frame*/
  private class ObjectTreeToolBar extends ToolBar
  {
    /** Internationalized strings for this class. */
    private final StringManager s_stringMgr = StringManagerFactory.getStringManager(ObjectTreeToolBar.class);
    private ILogger s_log = LoggerController.createLogger(ObjectTreeToolBar.class);
      private CatalogsPanel _catalogsPanel;

      ObjectTreeToolBar(ISession session, ObjectTreePanel panel)
      {
         super();
         createGUI(session, panel);
      }

    private void createGUI(ISession session, ObjectTreePanel panel)
    {
         _catalogsPanel = new CatalogsPanel(session, this);
         _catalogsPanel.addActionListener(new CatalogsComboListener());
         add(_catalogsPanel);

         ActionCollection actions = session.getApplication()
          .getActionCollection();
      setUseRolloverButtons(true);
      setFloatable(false);
      add(actions.get(RefreshSchemaInfoAction.class));
    }
  }

  private final class CatalogsComboListener implements ActionListener
  {
    public void actionPerformed(ActionEvent evt)
    {
      Object src = evt.getSource();
      if (src instanceof SQLCatalogsComboBox)
      {
        SQLCatalogsComboBox cmb = (SQLCatalogsComboBox)src;
        String catalog = cmb.getSelectedCatalog();
        if (catalog != null)
        {
          try
          {
            getSession().getSQLConnection().setCatalog(catalog);
          }
          catch (SQLException ex)
          {
            getSession().showErrorMessage(ex);
          }
        }
      }
    }
  }

   /** JASON: this could be added to the objecttreepanel if the status bar was attached
    *  to the application
    */
   private final class ObjectTreeSelectionListener
         implements
            TreeSelectionListener
   {
      public void valueChanged(TreeSelectionEvent evt)
      {
         final TreePath selPath = evt.getNewLeadSelectionPath();
         if (selPath != null)
         {
            StringBuffer buf = new StringBuffer();
            Object[] fullPath = selPath.getPath();
            for (int i = 0; i < fullPath.length; ++i)
            {
               if (fullPath[i] instanceof ObjectTreeNode)
               {
                  ObjectTreeNode node = (ObjectTreeNode)fullPath[i];
                  buf.append('/').append(node.toString());
               }
            }
            //JASON: have a main application status bar setStatusBarMessage(buf.toString());
         }
      }
   }
}
TOP

Related Classes of net.sourceforge.squirrel_sql.client.gui.session.ObjectTreeInternalFrame$CatalogsComboListener

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.