You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by am...@apache.org on 2008/08/10 04:47:44 UTC

svn commit: r684399 - in /cayenne/main/trunk/framework/cayenne-modeler/src/main: java/org/apache/cayenne/modeler/ java/org/apache/cayenne/modeler/event/ java/org/apache/cayenne/modeler/util/ resources/org/apache/cayenne/modeler/images/

Author: amaniatis
Date: Sat Aug  9 19:47:44 2008
New Revision: 684399

URL: http://svn.apache.org/viewvc?rev=684399&view=rev
Log:
CAY-894 Patch from Andrey Razumovsky

Create Welcome screen on Cayenne modeler with recently opened files history.


Added:
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/WelcomeScreen.java   (with props)
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/RecentFileListListener.java   (with props)
    cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new-over.png   (with props)
    cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new.png   (with props)
    cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open-over.png   (with props)
    cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open.png   (with props)
    cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome.jpg   (with props)
Modified:
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java?rev=684399&r1=684398&r2=684399&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java Sat Aug  9 19:47:44 2008
@@ -43,7 +43,6 @@
 import org.apache.cayenne.modeler.pref.ComponentGeometry;
 import org.apache.cayenne.modeler.pref.FSPath;
 import org.apache.cayenne.modeler.util.CayenneController;
-import org.apache.cayenne.modeler.util.RecentFileMenu;
 import org.apache.cayenne.pref.Domain;
 import org.apache.cayenne.project.Project;
 import org.apache.cayenne.project.validator.Validator;
@@ -220,9 +219,7 @@
         // update preferences
         if (!project.isLocationUndefined()) {
             getLastDirectory().setDirectory(project.getProjectDirectory());
-            RecentFileMenu recentFileMenu = frame.getRecentFileMenu();
-            recentFileMenu.rebuildFromPreferences();
-            recentFileMenu.setEnabled(recentFileMenu.getMenuComponentCount() > 0);
+            frame.fireRecentFileListChanged();
         }
 
         // --- check for load errors

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java?rev=684399&r1=684398&r2=684399&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java Sat Aug  9 19:47:44 2008
@@ -20,21 +20,81 @@
 
 package org.apache.cayenne.modeler;
 
-import org.apache.cayenne.modeler.action.*;
+import java.awt.AWTEvent;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.Toolkit;
+import java.awt.event.AWTEventListener;
+import java.awt.event.KeyEvent;
+import java.util.List;
+import java.util.Vector;
+
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+import javax.swing.JTextField;
+import javax.swing.JToolBar;
+
+import org.apache.cayenne.modeler.action.AboutAction;
+import org.apache.cayenne.modeler.action.ConfigurePreferencesAction;
+import org.apache.cayenne.modeler.action.CreateDataMapAction;
+import org.apache.cayenne.modeler.action.CreateDbEntityAction;
+import org.apache.cayenne.modeler.action.CreateDomainAction;
+import org.apache.cayenne.modeler.action.CreateNodeAction;
+import org.apache.cayenne.modeler.action.CreateObjEntityAction;
+import org.apache.cayenne.modeler.action.CreateProcedureAction;
+import org.apache.cayenne.modeler.action.CreateQueryAction;
+import org.apache.cayenne.modeler.action.DocumentationAction;
+import org.apache.cayenne.modeler.action.ExitAction;
+import org.apache.cayenne.modeler.action.FindAction;
+import org.apache.cayenne.modeler.action.GenerateCodeAction;
+import org.apache.cayenne.modeler.action.GenerateDBAction;
+import org.apache.cayenne.modeler.action.ImportDBAction;
+import org.apache.cayenne.modeler.action.ImportDataMapAction;
+import org.apache.cayenne.modeler.action.ImportEOModelAction;
+import org.apache.cayenne.modeler.action.MigrateAction;
+import org.apache.cayenne.modeler.action.NavigateBackwardAction;
+import org.apache.cayenne.modeler.action.NavigateForwardAction;
+import org.apache.cayenne.modeler.action.NewProjectAction;
+import org.apache.cayenne.modeler.action.ObjEntitySyncAction;
+import org.apache.cayenne.modeler.action.OpenProjectAction;
+import org.apache.cayenne.modeler.action.ProjectAction;
+import org.apache.cayenne.modeler.action.RemoveAction;
+import org.apache.cayenne.modeler.action.RevertAction;
+import org.apache.cayenne.modeler.action.SaveAction;
+import org.apache.cayenne.modeler.action.SaveAsAction;
+import org.apache.cayenne.modeler.action.ShowLogConsoleAction;
+import org.apache.cayenne.modeler.action.ValidateAction;
 import org.apache.cayenne.modeler.dialog.LogConsole;
 import org.apache.cayenne.modeler.editor.EditorView;
-import org.apache.cayenne.modeler.event.*;
+import org.apache.cayenne.modeler.event.DataMapDisplayEvent;
+import org.apache.cayenne.modeler.event.DataMapDisplayListener;
+import org.apache.cayenne.modeler.event.DataNodeDisplayEvent;
+import org.apache.cayenne.modeler.event.DataNodeDisplayListener;
+import org.apache.cayenne.modeler.event.DbEntityDisplayListener;
+import org.apache.cayenne.modeler.event.EntityDisplayEvent;
+import org.apache.cayenne.modeler.event.MultipleObjectsDisplayEvent;
+import org.apache.cayenne.modeler.event.MultipleObjectsDisplayListener;
+import org.apache.cayenne.modeler.event.ObjEntityDisplayListener;
+import org.apache.cayenne.modeler.event.ProcedureDisplayEvent;
+import org.apache.cayenne.modeler.event.ProcedureDisplayListener;
+import org.apache.cayenne.modeler.event.QueryDisplayEvent;
+import org.apache.cayenne.modeler.event.QueryDisplayListener;
+import org.apache.cayenne.modeler.event.RecentFileListListener;
 import org.apache.cayenne.modeler.pref.ComponentGeometry;
 import org.apache.cayenne.modeler.util.CayenneAction;
 import org.apache.cayenne.modeler.util.OperatingSystem;
 import org.apache.cayenne.modeler.util.RecentFileMenu;
 import org.apache.cayenne.pref.Domain;
 
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.AWTEventListener;
-import java.awt.event.KeyEvent;
-
 /**
  * Main frame of CayenneModeler. Responsibilities include coordination of
  * enabling/disabling of menu and toolbar.
@@ -64,13 +124,28 @@
      */
     protected Component dockComponent;
     
+    /**
+     * Listeners for changes in recent file menu
+     */
+    protected List<RecentFileListListener> recentFileListeners;
+    
+    /**
+     * Welcome screen, shown when no project is open
+     */
+    protected WelcomeScreen welcomeScreen;
+    
     public CayenneModelerFrame(ActionManager actionManager) {
         super(ModelerConstants.TITLE);
         this.actionManager = actionManager;
+        
+        recentFileListeners = new Vector<RecentFileListListener>();
 
         initMenus();
         initToolbar();
         initStatusBar();
+        initWelcome();
+        
+        fireRecentFileListChanged(); //start filling list in welcome screen and in menu
         
         setView(null);
     }
@@ -108,8 +183,7 @@
         fileMenu.addSeparator();
 
         recentFileMenu = new RecentFileMenu("Recent Projects");
-        recentFileMenu.rebuildFromPreferences();
-        recentFileMenu.setEnabled(recentFileMenu.getMenuComponentCount() > 0);
+        addRecentFileListListener(recentFileMenu);
         fileMenu.add(recentFileMenu);
 
         // Mac OS X doesn't use File->Exit, it uses CayenneModeler->Quit (command-Q)
@@ -206,6 +280,14 @@
     }
     
     /**
+     * Initializes welcome screen
+     */
+    protected void initWelcome() {
+        welcomeScreen = new WelcomeScreen();
+        addRecentFileListListener(welcomeScreen);
+    }
+    
+    /**
      * Plugs a component in the frame, between main area and status bar
      */
     public void setDockComponent(Component c) {
@@ -349,10 +431,26 @@
             splitPane.setTopComponent(view);
         }
         else {
-            splitPane.setTopComponent(new JPanel());
+            splitPane.setTopComponent(welcomeScreen);
         }
 
         validate();
         splitPane.setDividerLocation(oldLocation);
     }
+    
+    /**
+     * Adds listener for recent menu changes
+     */
+    public void addRecentFileListListener(RecentFileListListener listener) {
+        recentFileListeners.add(listener);
+    }
+    
+    /**
+     * Notifies all listeners that recent file list has changed
+     */
+    public void fireRecentFileListChanged() {
+        for (int i = 0; i < recentFileListeners.size(); i++) {
+            recentFileListeners.get(i).recentFileListChanged();
+        }
+    }
 }

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/WelcomeScreen.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/WelcomeScreen.java?rev=684399&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/WelcomeScreen.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/WelcomeScreen.java Sat Aug  9 19:47:44 2008
@@ -0,0 +1,313 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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 org.apache.cayenne.modeler;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GradientPaint;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.MouseEvent;
+import java.io.File;
+import java.util.Vector;
+
+import javax.swing.AbstractListModel;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.event.MouseInputListener;
+
+import org.apache.cayenne.modeler.action.NewProjectAction;
+import org.apache.cayenne.modeler.action.OpenProjectAction;
+import org.apache.cayenne.modeler.event.RecentFileListListener;
+import org.apache.cayenne.modeler.util.ModelerUtil;
+
+/**
+ * Welcome screen (CAY-894) is a panel shown when no project is open.
+ * User can quickly create new project or open an existing one.
+ * @author Andrey Razumovsky
+ */
+public class WelcomeScreen extends JPanel implements RecentFileListListener {
+
+    /**
+     * Top color of gradient background
+     */
+    private static final Color TOP_GRADIENT = new Color(153, 153, 153);
+
+    /**
+     * Bottom color of gradient background
+     */
+    private static final Color BOTTOM_GRADIENT = new Color(230, 230, 230);
+    
+    /**
+     * List of recent projects
+     */
+    private JList recentsList;
+
+    public WelcomeScreen() {
+        initView();
+    }
+
+    /**
+     * Creates all neccesary components
+     */
+    protected void initView() {
+        setLayout(new GridBagLayout());
+
+        ImageIcon welcome = ModelerUtil.buildIcon("welcome.jpg");
+        JLabel imageLabel = new JLabel(welcome);
+
+        ImageIcon newOutIcon = ModelerUtil.buildIcon("icon-welcome-new.png");
+        ImageIcon newOverIcon = ModelerUtil.buildIcon("icon-welcome-new-over.png");
+        ImageIcon openOutIcon = ModelerUtil.buildIcon("icon-welcome-open.png");
+        ImageIcon openOverIcon = ModelerUtil.buildIcon("icon-welcome-open-over.png");
+
+        JPanel buttonsPane = new JPanel(null);
+        buttonsPane.setPreferredSize(new Dimension(300, 30));
+
+        buttonsPane.setOpaque(false);
+
+        JButton newButton = createButton(newOutIcon, newOverIcon);
+        newButton.addActionListener(Application.getInstance().getAction(NewProjectAction.getActionName()));
+        
+        JLabel newLabel = new JLabel(NewProjectAction.getActionName(), SwingConstants.CENTER);
+
+        JButton openButton = createButton(openOutIcon, openOverIcon);
+        openButton.addActionListener(Application.getInstance().getAction(OpenProjectAction.getActionName()));
+        
+        JLabel openLabel = new JLabel(OpenProjectAction.getActionName(), SwingConstants.CENTER);
+
+        imageLabel.setLayout(new BorderLayout());
+
+        newButton.setLocation(10, 130);
+        buttonsPane.add(newButton);
+
+        newLabel.setLocation(newButton.getX()
+                + newButton.getWidth() / 2 - newLabel.getPreferredSize().width / 2, 
+                newButton.getY() + newButton.getHeight());
+        newLabel.setSize(newLabel.getPreferredSize());
+        buttonsPane.add(newLabel);
+
+        openButton.setLocation(120, newButton.getY());
+        buttonsPane.add(openButton);
+
+        openLabel.setLocation(openButton.getX()
+                + openButton.getWidth() / 2 - openLabel.getPreferredSize().width / 2, 
+                openButton.getY() + openButton.getHeight());
+        openLabel.setSize(openLabel.getPreferredSize());
+        buttonsPane.add(openLabel);
+        
+        JLabel recents = new JLabel("Recent Projects:");
+        recents.setLocation(207, newButton.getY());
+        recents.setSize(recents.getPreferredSize());
+        recents.setHorizontalTextPosition(10);
+        
+        buttonsPane.add(recents);
+        
+        recentsList = new JList();
+        recentsList.setOpaque(false);
+        
+        recentsList.setLocation(recents.getX(), recents.getY() + 2 * recents.getHeight());
+        recentsList.setSize(welcome.getIconWidth() - recentsList.getX() - 1, 
+                welcome.getIconHeight() - recentsList.getY());
+        
+        recentsList.setCellRenderer(new RecentFileListRenderer(recentsList));
+        
+        buttonsPane.add(recentsList);
+
+        imageLabel.add(buttonsPane);
+
+        add(imageLabel);
+    }
+
+    /**
+     * Creates welcome screen-specific button
+     */
+    private JButton createButton(Icon outIcon, Icon overIcon) {
+        JButton button = new JButton();
+
+        button.setFocusPainted(false);
+        button.setFocusable(false);
+        button.setBorderPainted(false);
+        button.setOpaque(false);
+        button.setContentAreaFilled(false);
+
+        button.setPressedIcon(overIcon);
+        button.setRolloverIcon(overIcon);
+        button.setIcon(outIcon);
+
+        button.setSize(outIcon.getIconWidth(), outIcon.getIconHeight());
+
+        return button;
+    }
+
+    /**
+     * Paints gradient background
+     */
+    @Override
+    public void paintComponent(Graphics g) {
+        Graphics2D g2 = (Graphics2D) g.create();
+        g2.setPaint(new GradientPaint(
+                        0,
+                        0,
+                        TOP_GRADIENT,
+                        0,
+                        getHeight(),
+                        BOTTOM_GRADIENT));
+        g2.fillRect(0, 0, getWidth(), getHeight());
+
+        g2.dispose();
+    }
+    
+    public void recentFileListChanged() {
+        ModelerPreferences pref = ModelerPreferences.getPreferences();
+        final Vector<?> arr = pref.getVector(ModelerPreferences.LAST_PROJ_FILES);
+        
+        recentsList.setModel(
+            new AbstractListModel() {
+                public int getSize() { return arr.size(); }
+                public Object getElementAt(int i) { return arr.elementAt(i); }
+            });
+    }
+    
+    /**
+     * Renderer for the list of last files. Ignores the selection, instead paints
+     * with ROLLOVER_BACKGROUND (currently red) the row mouse is hovering over
+     */
+    class RecentFileListRenderer extends DefaultListCellRenderer implements MouseInputListener {
+        /**
+         * Color for background of row mouse is over
+         */
+        final Color ROLLOVER_BACKGROUND = Color.RED;
+        
+        /**
+         * Color for foreground of row mouse is over
+         */
+        final Color ROLLOVER_FOREGROUND = Color.WHITE;
+        
+        /**
+         * List which is rendered
+         */
+        private JList list;
+        
+        /**
+         * Row mouse is over
+         */
+        private int rolloverRow;
+        
+        public RecentFileListRenderer(JList list) {
+            list.addMouseListener(this);
+            list.addMouseMotionListener(this);
+            
+            this.list = list;
+            rolloverRow = -1;
+            
+            setHorizontalTextPosition(10);
+        }
+        
+        @Override
+        public Component getListCellRendererComponent(
+                JList list,
+                Object value,
+                int index,
+                boolean isSelected,
+                boolean cellHasFocus) {
+            //selection is ignored
+            super.getListCellRendererComponent(list, value, index, false, false);
+            
+            if (rolloverRow == index) {
+                setOpaque(true);
+                setForeground(ROLLOVER_FOREGROUND);
+                setBackground(ROLLOVER_BACKGROUND);
+            }
+            else {
+                setOpaque(false);
+            }
+            
+            return this;
+        }
+
+        public void mouseClicked(MouseEvent e) {
+        }
+
+        public void mouseEntered(MouseEvent e) {
+            mouseMoved(e);
+        }
+
+        public void mouseExited(MouseEvent e) {
+            rolloverRow = -1;
+            list.repaint();
+        }
+
+        public void mousePressed(MouseEvent e) {
+        }
+
+        public void mouseReleased(MouseEvent e) {
+            if (SwingUtilities.isLeftMouseButton(e) && rolloverRow != -1) {
+                File file = new File((String) list.getModel().getElementAt(rolloverRow));
+                
+                /**
+                 * Fire an action with the file as source
+                 */
+                Application.getInstance().getAction(OpenProjectAction.getActionName()).performAction(
+                        new ActionEvent(file, 0, null));
+                
+                rolloverRow = -1; //clear selection
+            }
+        }
+
+        public void mouseDragged(MouseEvent e) {
+        }
+
+        public void mouseMoved(MouseEvent e) {
+            int newRow;
+            
+            /**
+             * Check that a row boundary contains the mouse point, so that rolloverRow would
+             * be -1 if we are below last row
+             */
+            if (list.getModel().getSize() > 0 && 
+                    !list.getCellBounds(0, list.getModel().getSize() - 1).contains(e.getPoint())) {
+                newRow = -1;
+            }
+            else {
+                newRow = list.locationToIndex(e.getPoint()); 
+            }
+            
+            if (rolloverRow != newRow) {
+                rolloverRow = newRow;
+                list.repaint();
+            }
+            
+            
+        }
+        
+    }
+}
\ No newline at end of file

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/WelcomeScreen.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/RecentFileListListener.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/RecentFileListListener.java?rev=684399&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/RecentFileListListener.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/RecentFileListListener.java Sat Aug  9 19:47:44 2008
@@ -0,0 +1,32 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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 org.apache.cayenne.modeler.event;
+
+/**
+ * Listens to changes in recent file list 
+ * @author Andrey Razumovsky
+ */
+public interface RecentFileListListener {
+    /**
+     * Invoked when recent files list changed (for instance, a new project was opened
+     * and so must be added to recent files menu
+     */
+    public void recentFileListChanged();
+}
\ No newline at end of file

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/RecentFileListListener.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java?rev=684399&r1=684398&r2=684399&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java Sat Aug  9 19:47:44 2008
@@ -29,6 +29,7 @@
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ModelerPreferences;
 import org.apache.cayenne.modeler.action.OpenProjectAction;
+import org.apache.cayenne.modeler.event.RecentFileListListener;
 import org.apache.cayenne.swing.control.FileMenuItem;
 
 /**
@@ -37,7 +38,7 @@
  * 
  * @author Andrus Adamchik
  */
-public class RecentFileMenu extends JMenu {
+public class RecentFileMenu extends JMenu implements RecentFileListListener {
     /**
      * Constructor for RecentFileMenu.
      */
@@ -93,4 +94,9 @@
     protected Action findAction() {
         return Application.getInstance().getAction(OpenProjectAction.getActionName());
     }
+
+    public void recentFileListChanged() {
+        rebuildFromPreferences();
+        setEnabled(getMenuComponentCount() > 0);
+    }
 }

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new-over.png
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new-over.png?rev=684399&view=auto
==============================================================================
Binary file - no diff available.

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new-over.png
------------------------------------------------------------------------------
    svn:executable = *

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new-over.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new.png
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new.png?rev=684399&view=auto
==============================================================================
Binary file - no diff available.

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new.png
------------------------------------------------------------------------------
    svn:executable = *

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open-over.png
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open-over.png?rev=684399&view=auto
==============================================================================
Binary file - no diff available.

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open-over.png
------------------------------------------------------------------------------
    svn:executable = *

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open-over.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open.png
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open.png?rev=684399&view=auto
==============================================================================
Binary file - no diff available.

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open.png
------------------------------------------------------------------------------
    svn:executable = *

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome.jpg
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome.jpg?rev=684399&view=auto
==============================================================================
Binary file - no diff available.

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome.jpg
------------------------------------------------------------------------------
    svn:executable = *

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream