You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2016/12/06 07:23:05 UTC
[1/3] cayenne git commit: New welcome screen design
Repository: cayenne
Updated Branches:
refs/heads/master 263ac1c9e -> 77c59c75e
New welcome screen design
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/77c59c75
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/77c59c75
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/77c59c75
Branch: refs/heads/master
Commit: 77c59c75e018715bbc7594a71e3dc22b936d978e
Parents: 32399f9
Author: Nikita Timofeev <st...@gmail.com>
Authored: Mon Dec 5 11:16:24 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Dec 6 10:22:46 2016 +0300
----------------------------------------------------------------------
.../modeler/dialog/welcome/WelcomeScreen.java | 37 +++++++++++++++++---
.../cayenne/modeler/pref/ComponentGeometry.java | 18 +++++-----
2 files changed, 42 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/77c59c75/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java
index 21793a6..b9598b7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java
@@ -19,7 +19,12 @@
package org.apache.cayenne.modeler.dialog.welcome;
+import java.awt.Color;
+import java.awt.GradientPaint;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
import java.awt.GridBagLayout;
+import java.awt.Paint;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.List;
@@ -30,6 +35,7 @@ import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JPanel;
+import javax.swing.JScrollPane;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.ModelerPreferences;
@@ -43,7 +49,17 @@ 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.
*/
-public class WelcomeScreen extends JPanel implements RecentFileListListener, RecentFileListRenderer.OnFileClickListener {
+public class WelcomeScreen extends JScrollPane implements RecentFileListListener, RecentFileListRenderer.OnFileClickListener {
+
+ /**
+ * 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
@@ -52,6 +68,8 @@ public class WelcomeScreen extends JPanel implements RecentFileListListener, Rec
private JPanel buttonsPanel;
+ private JPanel mainPanel;
+
public WelcomeScreen() {
initView();
}
@@ -60,9 +78,20 @@ public class WelcomeScreen extends JPanel implements RecentFileListListener, Rec
* Creates all necessary components
*/
protected void initView() {
- setLayout(new GridBagLayout());
+ mainPanel = new JPanel(new GridBagLayout()) {
+ @Override
+ public void paintComponent(Graphics g) {
+ // paint gradient background
+ Graphics2D g2 = (Graphics2D) g.create();
+ Paint paint = new GradientPaint(0, 0, TOP_GRADIENT, 0, getHeight(), BOTTOM_GRADIENT);
+ g2.setPaint(paint);
+ g2.fillRect(0, 0, getWidth(), getHeight());
+ g2.dispose();
+ }
+ };
initButtonsPane();
initFileListPane();
+ setViewportView(mainPanel);
}
private void initFileListPane() {
@@ -79,7 +108,7 @@ public class WelcomeScreen extends JPanel implements RecentFileListListener, Rec
recentProjectsList.setCellRenderer(new RecentFileListRenderer(recentProjectsList, this));
fileListPanel.add(recentProjectsList);
- add(fileListPanel);
+ mainPanel.add(fileListPanel);
}
private void initButtonsPane() {
@@ -92,7 +121,7 @@ public class WelcomeScreen extends JPanel implements RecentFileListListener, Rec
initButton("open", openButtonY, OpenProjectAction.class);
initButton("new", newButtonY, NewProjectAction.class);
- add(buttonsPanel);
+ mainPanel.add(buttonsPanel);
}
private void initButton(String name, int y, Class<? extends Action> actionClass) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/77c59c75/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/ComponentGeometry.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/ComponentGeometry.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/ComponentGeometry.java
index 0f24f16..78b1b5a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/ComponentGeometry.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/pref/ComponentGeometry.java
@@ -67,14 +67,14 @@ public class ComponentGeometry extends CayennePreference {
@Override
public void componentResized(ComponentEvent e) {
- setWidth(new Integer(window.getWidth()));
- setHeight(new Integer(window.getHeight()));
+ setWidth(window.getWidth());
+ setHeight(window.getHeight());
}
@Override
public void componentMoved(ComponentEvent e) {
- setX(new Integer(window.getX()));
- setY(new Integer(window.getY()));
+ setX(window.getX());
+ setY(window.getY());
}
});
}
@@ -90,8 +90,8 @@ public class ComponentGeometry extends CayennePreference {
@Override
public void componentResized(ComponentEvent e) {
- setWidth(new Integer(window.getWidth()));
- setHeight(new Integer(window.getHeight()));
+ setWidth(window.getWidth());
+ setHeight(window.getHeight());
}
});
}
@@ -119,7 +119,7 @@ public class ComponentGeometry extends CayennePreference {
void updateIntProperty(Component c, String property, int defaultValue) {
int i = getPreference().getInt(property, defaultValue);
try {
- PropertyUtils.setProperty(c, property, new Integer(i));
+ PropertyUtils.setProperty(c, property, i);
}
catch (Throwable th) {
throw new PreferenceException("Error setting property: " + property, th);
@@ -153,13 +153,13 @@ public class ComponentGeometry extends CayennePreference {
public void changeX(int xOffset) {
if (xOffset != 0) {
- setX(new Integer(getX(0) + xOffset));
+ setX(getX(0) + xOffset);
}
}
public void changeY(int yOffset) {
if (yOffset != 0) {
- setY(new Integer(getY(0) + yOffset));
+ setY(getY(0) + yOffset);
}
}
[3/3] cayenne git commit: New welcome screen design
Posted by aa...@apache.org.
New welcome screen design
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/0ce3fdfd
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/0ce3fdfd
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/0ce3fdfd
Branch: refs/heads/master
Commit: 0ce3fdfd8255166352550fa423f847f0e45a7953
Parents: 263ac1c
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Dec 2 18:02:58 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Dec 6 10:22:46 2016 +0300
----------------------------------------------------------------------
.../cayenne/modeler/CayenneModelerFrame.java | 1 +
.../apache/cayenne/modeler/WelcomeScreen.java | 335 -------------------
.../dialog/welcome/RecentFileListModel.java | 56 ++++
.../dialog/welcome/RecentFileListRenderer.java | 142 ++++++++
.../modeler/dialog/welcome/WelcomeScreen.java | 184 ++++++++++
.../modeler/util/path/CompoundPathTrimmer.java | 47 +++
.../modeler/util/path/DefaultPathTrimmer.java | 31 ++
.../util/path/DefaultResourceTrimmer.java | 40 +++
.../modeler/util/path/HomePathTrimmer.java | 38 +++
.../modeler/util/path/LongPathTrimmer.java | 66 ++++
.../modeler/util/path/MaxLengthTrimmer.java | 41 +++
.../cayenne/modeler/util/path/PathTrimmer.java | 26 ++
.../modeler/images/icon-welcome-new-over.png | Bin 5299 -> 0 bytes
.../cayenne/modeler/images/icon-welcome-new.png | Bin 4645 -> 0 bytes
.../modeler/images/icon-welcome-open-over.png | Bin 5611 -> 0 bytes
.../modeler/images/icon-welcome-open.png | Bin 4687 -> 0 bytes
.../apache/cayenne/modeler/images/welcome.jpg | Bin 55857 -> 0 bytes
.../images/welcome/welcome-screen-left-bg.jpg | Bin 0 -> 25184 bytes
.../welcome/welcome-screen-new-btn-hover.png | Bin 0 -> 20156 bytes
.../images/welcome/welcome-screen-new-btn.png | Bin 0 -> 19556 bytes
.../welcome/welcome-screen-open-btn-hover.png | Bin 0 -> 20202 bytes
.../images/welcome/welcome-screen-open-btn.png | Bin 0 -> 19609 bytes
.../images/welcome/welcome-screen-right-bg.jpg | Bin 0 -> 29888 bytes
23 files changed, 672 insertions(+), 335 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
index 0b78d9e..8a23ed9 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
@@ -83,6 +83,7 @@ import org.apache.cayenne.modeler.action.ShowLogConsoleAction;
import org.apache.cayenne.modeler.action.UndoAction;
import org.apache.cayenne.modeler.action.ValidateAction;
import org.apache.cayenne.modeler.dialog.LogConsole;
+import org.apache.cayenne.modeler.dialog.welcome.WelcomeScreen;
import org.apache.cayenne.modeler.editor.EditorView;
import org.apache.cayenne.modeler.event.DataMapDisplayEvent;
import org.apache.cayenne.modeler.event.DataMapDisplayListener;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/WelcomeScreen.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/WelcomeScreen.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/WelcomeScreen.java
deleted file mode 100644
index 466722d..0000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/WelcomeScreen.java
+++ /dev/null
@@ -1,335 +0,0 @@
-/*****************************************************************
- * 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.List;
-
-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.
- */
-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()
- .getActionManager()
- .getAction(NewProjectAction.class));
-
- JLabel newLabel = new JLabel(
- NewProjectAction.getActionName(),
- SwingConstants.CENTER);
-
- JButton openButton = createButton(openOutIcon, openOverIcon);
- openButton.addActionListener(Application
- .getInstance()
- .getActionManager()
- .getAction(OpenProjectAction.class));
-
- 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() {
-
- final List<String> arr = ModelerPreferences.getLastProjFiles();
-
- recentsList.setModel(new AbstractListModel() {
-
- public int getSize() {
- return arr.size();
- }
-
- public Object getElementAt(int i) {
- return arr.get(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 final 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(SwingConstants.LEADING);
- }
-
- @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);
- setToolTipText(getText());
- }
- 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().getActionManager().getAction(
- OpenProjectAction.class).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();
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListModel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListModel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListModel.java
new file mode 100644
index 0000000..dc68259
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListModel.java
@@ -0,0 +1,56 @@
+/*****************************************************************
+ * 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.dialog.welcome;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.swing.AbstractListModel;
+
+import org.apache.cayenne.modeler.util.path.DefaultPathTrimmer;
+import org.apache.cayenne.modeler.util.path.PathTrimmer;
+
+class RecentFileListModel extends AbstractListModel<String> {
+
+ private List<String> fileListFull;
+ private List<String> fileList;
+ private static PathTrimmer pathTrimmer = new DefaultPathTrimmer();
+
+ RecentFileListModel(List<String> fileList) {
+ this.fileListFull = fileList;
+ this.fileList = new ArrayList<>(fileList.size());
+ for(String next : fileList) {
+ this.fileList.add(pathTrimmer.trim(next));
+ }
+ }
+
+ @Override
+ public int getSize() {
+ return fileList.size();
+ }
+
+ @Override
+ public String getElementAt(int index) {
+ return fileList.get(index);
+ }
+
+ String getFullElementAt(int index) {
+ return fileListFull.get(index);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListRenderer.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListRenderer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListRenderer.java
new file mode 100644
index 0000000..9b6e1a1
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListRenderer.java
@@ -0,0 +1,142 @@
+/*****************************************************************
+ * 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.dialog.welcome;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Rectangle;
+import java.awt.event.MouseEvent;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.JList;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.border.EmptyBorder;
+import javax.swing.event.MouseInputListener;
+
+/**
+ * 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 {
+
+ interface OnFileClickListener {
+ void onFileSelect(String fileName);
+ }
+
+ /**
+ * Color for background of row mouse is over
+ */
+ private final Color ROLLOVER_BACKGROUND = new Color(223, 223, 223);
+
+ /**
+ * List which is rendered
+ */
+ private final JList<String> list;
+
+ /**
+ * Row mouse is over
+ */
+ private int rolloverRow;
+
+ private OnFileClickListener listener;
+
+ RecentFileListRenderer(JList<String> list, OnFileClickListener listener) {
+ if(listener == null) {
+ throw new NullPointerException("listener parameter is null");
+ }
+ list.addMouseListener(this);
+ list.addMouseMotionListener(this);
+
+ this.list = list;
+ this.listener = listener;
+ rolloverRow = -1;
+
+ setHorizontalTextPosition(SwingConstants.LEADING);
+ }
+
+ @Override
+ public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+ super.getListCellRendererComponent(list, value, index, false, false);
+ setMargin(8, 15, 8, 15);
+ if (rolloverRow == index) {
+ setOpaque(true);
+ setBackground(ROLLOVER_BACKGROUND);
+ setToolTipText(getFullText());
+ } else {
+ setOpaque(false);
+ }
+ return this;
+ }
+
+ public void setMargin(int top, int left, int bottom, int right) {
+ setBorder(new EmptyBorder(top, left, bottom, right));
+ }
+
+ 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) {
+ }
+
+ private String getFullText() {
+ if(rolloverRow == -1) {
+ return null;
+ }
+ return ((RecentFileListModel)list.getModel()).getFullElementAt(rolloverRow);
+ }
+
+ public void mouseReleased(MouseEvent e) {
+ if (!SwingUtilities.isLeftMouseButton(e) || rolloverRow == -1) {
+ return;
+ }
+ listener.onFileSelect(getFullText());
+ 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
+ Rectangle bounds = list.getCellBounds(0, list.getModel().getSize() - 1);
+ if (list.getModel().getSize() > 0 && !bounds.contains(e.getPoint())) {
+ newRow = -1;
+ } else {
+ newRow = list.locationToIndex(e.getPoint());
+ }
+
+ if (rolloverRow != newRow) {
+ rolloverRow = newRow;
+ list.repaint();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java
new file mode 100644
index 0000000..f51e3d4
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java
@@ -0,0 +1,184 @@
+/*****************************************************************
+ * 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.dialog.welcome;
+
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.util.List;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JList;
+import javax.swing.JPanel;
+
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.ModelerPreferences;
+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.
+ */
+public class WelcomeScreen extends JPanel implements RecentFileListListener, RecentFileListRenderer.OnFileClickListener {
+
+ /**
+ * List of recent projects
+ */
+ private JList<String> recentsList;
+
+ private JPanel buttonsPane;
+
+ private JPanel fileListPane;
+
+ public WelcomeScreen() {
+ initView();
+ }
+
+ /**
+ * Creates all neccesary components
+ */
+ protected void initView() {
+ setLayout(new GridBagLayout());
+ initButtonsPane();
+ initFileListPane();
+ }
+
+ private void initFileListPane() {
+ final ImageIcon rightPaneImg = ModelerUtil.buildIcon("welcome/welcome-screen-right-bg.jpg");
+ fileListPane = new JPanel(null) {
+ @Override
+ protected void paintComponent(Graphics g) {
+ super.paintComponent(g);
+ g.drawImage(rightPaneImg.getImage(), 0, 0, null);
+ }
+ };
+ fileListPane.setPreferredSize(new Dimension(902, 592));
+ fileListPane.setOpaque(false);
+
+ initRecentList();
+
+ add(fileListPane);
+ }
+
+ private void initButtonsPane() {
+ final ImageIcon leftPaneImg = ModelerUtil.buildIcon("welcome/welcome-screen-left-bg.jpg");
+ buttonsPane = new JPanel(null) {
+ @Override
+ protected void paintComponent(Graphics g) {
+ super.paintComponent(g);
+ g.drawImage(leftPaneImg.getImage(), 0, 0, null);
+ }
+ };
+ buttonsPane.setPreferredSize(new Dimension(198, 592));
+ buttonsPane.setOpaque(false);
+
+ initNewButton();
+ initOpenButton();
+
+ add(buttonsPane);
+ }
+
+
+ private void initNewButton() {
+ ImageIcon newIcon = ModelerUtil.buildIcon("welcome/welcome-screen-new-btn.png");
+ ImageIcon newHoverIcon = ModelerUtil.buildIcon("welcome/welcome-screen-new-btn-hover.png");
+ JButton newButton = createButton(newIcon, newHoverIcon);
+ newButton.setLocation(24, 488);
+ newButton.addActionListener(Application
+ .getInstance()
+ .getActionManager()
+ .getAction(NewProjectAction.class));
+ buttonsPane.add(newButton);
+ }
+
+ private void initOpenButton() {
+ ImageIcon newIcon = ModelerUtil.buildIcon("welcome/welcome-screen-open-btn.png");
+ ImageIcon newHoverIcon = ModelerUtil.buildIcon("welcome/welcome-screen-open-btn-hover.png");
+ JButton openButton = createButton(newIcon, newHoverIcon);
+ openButton.setLocation(24, 532);
+ openButton.addActionListener(Application
+ .getInstance()
+ .getActionManager()
+ .getAction(NewProjectAction.class));
+ buttonsPane.add(openButton);
+ }
+
+ private void initRecentList() {
+ recentsList = new JList<>();
+ recentsList.setOpaque(false);
+ int padding = 20;
+ recentsList.setLocation(padding, padding);
+ recentsList.setSize(902 - 2 * padding, 592 - 2 * padding);
+ Font fontOld = recentsList.getFont();
+ Font font = new Font(fontOld.getFontName(), Font.PLAIN, 12);
+ recentsList.setFont(font);
+// recentsList.setFixedCellHeight(24);
+ RecentFileListRenderer cellRenderer = new RecentFileListRenderer(recentsList, this);
+ recentsList.setCellRenderer(cellRenderer);
+ fileListPane.add(recentsList);
+ }
+
+ @Override
+ public void onFileSelect(String fileName) {
+ File file = new File(fileName);
+ ActionEvent event = new ActionEvent(file, 0, null);
+ // Fire an action with the file as source
+ Application.getInstance()
+ .getActionManager()
+ .getAction(OpenProjectAction.class)
+ .performAction(event);
+ }
+
+ /**
+ * 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;
+ }
+
+ @Override
+ public void recentFileListChanged() {
+ List<String> arr = ModelerPreferences.getLastProjFiles();
+ recentsList.setModel(new RecentFileListModel(arr));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/CompoundPathTrimmer.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/CompoundPathTrimmer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/CompoundPathTrimmer.java
new file mode 100644
index 0000000..6bb1bba
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/CompoundPathTrimmer.java
@@ -0,0 +1,47 @@
+/*****************************************************************
+ * 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.util.path;
+
+public class CompoundPathTrimmer implements PathTrimmer {
+
+ protected int maxLength;
+
+ private PathTrimmer[] decorators;
+
+ public CompoundPathTrimmer(int maxLength, PathTrimmer... decorators) {
+ this.maxLength = maxLength;
+ this.decorators = decorators;
+ }
+
+ public CompoundPathTrimmer(PathTrimmer... decorators) {
+ this(DEFAULT_MAX_LENGTH, decorators);
+ }
+
+ @Override
+ public String trim(String path) {
+ for(PathTrimmer decorator : decorators) {
+ path = decorator.trim(path);
+ if(path.length() <= maxLength) {
+ return path;
+ }
+ }
+ return path;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/DefaultPathTrimmer.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/DefaultPathTrimmer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/DefaultPathTrimmer.java
new file mode 100644
index 0000000..16df1262
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/DefaultPathTrimmer.java
@@ -0,0 +1,31 @@
+/*****************************************************************
+ * 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.util.path;
+
+public class DefaultPathTrimmer extends CompoundPathTrimmer {
+ public DefaultPathTrimmer() {
+ super(
+ new HomePathTrimmer(),
+// new DefaultResourceTrimmer(),
+// new LongPathTrimmer(),
+ new MaxLengthTrimmer(DEFAULT_MAX_LENGTH)
+ );
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/DefaultResourceTrimmer.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/DefaultResourceTrimmer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/DefaultResourceTrimmer.java
new file mode 100644
index 0000000..495c891
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/DefaultResourceTrimmer.java
@@ -0,0 +1,40 @@
+/*****************************************************************
+ * 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.util.path;
+
+import java.io.File;
+
+public class DefaultResourceTrimmer implements PathTrimmer {
+
+ private static String DEFAULT_RESOURCE_PATH;
+ private static String DEFAULT_TEST_RESOURCE_PATH;
+ static {
+ String separator = File.separator;
+ DEFAULT_RESOURCE_PATH = "src" + separator + "main" + separator + "resources";
+ DEFAULT_TEST_RESOURCE_PATH = "src" + separator + "test" + separator + "resources";
+ }
+
+ @Override
+ public String trim(String path) {
+ path = path.replace(DEFAULT_TEST_RESOURCE_PATH, "..test..");
+ path = path.replace(DEFAULT_RESOURCE_PATH, "..main..");
+ return path;
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/HomePathTrimmer.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/HomePathTrimmer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/HomePathTrimmer.java
new file mode 100644
index 0000000..04fb24c
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/HomePathTrimmer.java
@@ -0,0 +1,38 @@
+/*****************************************************************
+ * 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.util.path;
+
+import java.io.File;
+
+public class HomePathTrimmer implements PathTrimmer {
+
+ private static String homeDir = System.getProperty("user.home");
+ private static String replacement = "~";
+ static {
+ if(homeDir.endsWith(File.separator)) {
+ replacement = "~" + File.separator;
+ }
+ }
+
+ @Override
+ public String trim(String path) {
+ return path.replace(homeDir, replacement);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/LongPathTrimmer.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/LongPathTrimmer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/LongPathTrimmer.java
new file mode 100644
index 0000000..9d33d52
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/LongPathTrimmer.java
@@ -0,0 +1,66 @@
+/*****************************************************************
+ * 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.util.path;
+
+import java.io.File;
+
+public class LongPathTrimmer implements PathTrimmer {
+
+ private static final String PATH_SEPARATOR = File.separator;
+ private static final int PATH_LENGTH_THRESHOLD = 8;
+
+ private String[] splitPath(String path) {
+ return path.split(PATH_SEPARATOR);
+ }
+
+ private String joinPath(String[] components) {
+ if(components.length == 0) {
+ return "";
+ }
+ StringBuilder sb = new StringBuilder(components[0]);
+ for(int i=1; i<components.length; i++) {
+ sb.append(PATH_SEPARATOR);
+ sb.append(components[i]);
+ }
+ return sb.toString();
+ }
+
+ @Override
+ public String trim(String path) {
+ String[] components = splitPath(path);
+ if(components.length <= PATH_LENGTH_THRESHOLD + 1) {
+ return path;
+ }
+ String[] strippedComponents = new String[PATH_LENGTH_THRESHOLD + 1];
+ int half = PATH_LENGTH_THRESHOLD / 2;
+ int end = components.length - half;
+ int idx = 0;
+ boolean trimAdded = false;
+ for(int i=0; i<components.length; i++) {
+ if(i < half || i >= end) {
+ strippedComponents[idx++] = components[i];
+ } else if(!trimAdded) {
+ strippedComponents[idx++] = "...";
+ trimAdded = true;
+ }
+ }
+ return joinPath(strippedComponents);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/MaxLengthTrimmer.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/MaxLengthTrimmer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/MaxLengthTrimmer.java
new file mode 100644
index 0000000..e40e0fd
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/MaxLengthTrimmer.java
@@ -0,0 +1,41 @@
+/*****************************************************************
+ * 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.util.path;
+
+public class MaxLengthTrimmer implements PathTrimmer {
+
+ private int maxLength;
+
+ public MaxLengthTrimmer() {
+ this(DEFAULT_MAX_LENGTH);
+ }
+
+ public MaxLengthTrimmer(int maxLength) {
+ this.maxLength = maxLength;
+ }
+
+ @Override
+ public String trim(String path) {
+ if(path.length() <= maxLength) {
+ return path;
+ }
+ return "..." + path.substring(path.length() - maxLength);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/PathTrimmer.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/PathTrimmer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/PathTrimmer.java
new file mode 100644
index 0000000..bef6173
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/path/PathTrimmer.java
@@ -0,0 +1,26 @@
+/*****************************************************************
+ * 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.util.path;
+
+public interface PathTrimmer {
+ int DEFAULT_MAX_LENGTH = 120;
+
+ String trim(String path);
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new-over.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new-over.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new-over.png
deleted file mode 100755
index 35e9011..0000000
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new-over.png and /dev/null differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new.png
deleted file mode 100755
index b145ff4..0000000
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-new.png and /dev/null differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open-over.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open-over.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open-over.png
deleted file mode 100755
index 3324ca4..0000000
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open-over.png and /dev/null differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open.png
deleted file mode 100755
index 78761a1..0000000
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-welcome-open.png and /dev/null differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome.jpg
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome.jpg b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome.jpg
deleted file mode 100755
index b95fa72..0000000
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome.jpg and /dev/null differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-left-bg.jpg
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-left-bg.jpg b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-left-bg.jpg
new file mode 100755
index 0000000..d3f3152
Binary files /dev/null and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-left-bg.jpg differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-new-btn-hover.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-new-btn-hover.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-new-btn-hover.png
new file mode 100755
index 0000000..f987f62
Binary files /dev/null and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-new-btn-hover.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-new-btn.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-new-btn.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-new-btn.png
new file mode 100755
index 0000000..198afb3
Binary files /dev/null and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-new-btn.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-open-btn-hover.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-open-btn-hover.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-open-btn-hover.png
new file mode 100755
index 0000000..69bf1e9
Binary files /dev/null and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-open-btn-hover.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-open-btn.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-open-btn.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-open-btn.png
new file mode 100755
index 0000000..ab0e967
Binary files /dev/null and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-open-btn.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/0ce3fdfd/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-right-bg.jpg
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-right-bg.jpg b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-right-bg.jpg
new file mode 100755
index 0000000..a0d8402
Binary files /dev/null and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/welcome/welcome-screen-right-bg.jpg differ
[2/3] cayenne git commit: Modeler new Welcome screen
Posted by aa...@apache.org.
Modeler new Welcome screen
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/32399f9a
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/32399f9a
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/32399f9a
Branch: refs/heads/master
Commit: 32399f9a26ae46e8afcf7ae63fa4613f36578f84
Parents: 0ce3fdf
Author: stariy <st...@gmail.com>
Authored: Fri Dec 2 21:53:44 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Dec 6 10:22:46 2016 +0300
----------------------------------------------------------------------
.../modeler/CayenneModelerController.java | 2 +-
.../modeler/dialog/welcome/WelcomeScreen.java | 109 ++++++-------------
.../cayenne/modeler/util/BackgroundPanel.java | 47 ++++++++
3 files changed, 84 insertions(+), 74 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/32399f9a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
index 30fdebc..bda0504 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
@@ -137,7 +137,7 @@ public class CayenneModelerController extends CayenneController {
});
ComponentGeometry geometry = new ComponentGeometry(frame.getClass(), null);
- geometry.bind(frame, 650, 550, 0);
+ geometry.bind(frame, 1200, 720, 0);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/32399f9a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java
index f51e3d4..21793a6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java
@@ -19,14 +19,12 @@
package org.apache.cayenne.modeler.dialog.welcome;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Graphics;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.List;
+import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
@@ -38,6 +36,7 @@ import org.apache.cayenne.modeler.ModelerPreferences;
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.BackgroundPanel;
import org.apache.cayenne.modeler.util.ModelerUtil;
/**
@@ -49,18 +48,16 @@ public class WelcomeScreen extends JPanel implements RecentFileListListener, Rec
/**
* List of recent projects
*/
- private JList<String> recentsList;
+ private JList<String> recentProjectsList;
- private JPanel buttonsPane;
-
- private JPanel fileListPane;
+ private JPanel buttonsPanel;
public WelcomeScreen() {
initView();
}
/**
- * Creates all neccesary components
+ * Creates all necessary components
*/
protected void initView() {
setLayout(new GridBagLayout());
@@ -69,78 +66,45 @@ public class WelcomeScreen extends JPanel implements RecentFileListListener, Rec
}
private void initFileListPane() {
- final ImageIcon rightPaneImg = ModelerUtil.buildIcon("welcome/welcome-screen-right-bg.jpg");
- fileListPane = new JPanel(null) {
- @Override
- protected void paintComponent(Graphics g) {
- super.paintComponent(g);
- g.drawImage(rightPaneImg.getImage(), 0, 0, null);
- }
- };
- fileListPane.setPreferredSize(new Dimension(902, 592));
- fileListPane.setOpaque(false);
-
- initRecentList();
-
- add(fileListPane);
+ JPanel fileListPanel = new BackgroundPanel("welcome/welcome-screen-right-bg.jpg");
+
+ final int padding = 20;
+ recentProjectsList = new JList<>();
+ recentProjectsList.setOpaque(false);
+ recentProjectsList.setLocation(padding, padding);
+ recentProjectsList.setSize(
+ fileListPanel.getWidth() - 2 * padding,
+ fileListPanel.getHeight() - 2 * padding
+ );
+ recentProjectsList.setCellRenderer(new RecentFileListRenderer(recentProjectsList, this));
+
+ fileListPanel.add(recentProjectsList);
+ add(fileListPanel);
}
private void initButtonsPane() {
- final ImageIcon leftPaneImg = ModelerUtil.buildIcon("welcome/welcome-screen-left-bg.jpg");
- buttonsPane = new JPanel(null) {
- @Override
- protected void paintComponent(Graphics g) {
- super.paintComponent(g);
- g.drawImage(leftPaneImg.getImage(), 0, 0, null);
- }
- };
- buttonsPane.setPreferredSize(new Dimension(198, 592));
- buttonsPane.setOpaque(false);
-
- initNewButton();
- initOpenButton();
-
- add(buttonsPane);
- }
+ final int padding = 24; // bottom padding for buttons
+ final int buttonHeight = 36;
+ buttonsPanel = new BackgroundPanel("welcome/welcome-screen-left-bg.jpg");
+ int openButtonY = buttonsPanel.getHeight() - padding - buttonHeight; // buttons layout from bottom
+ int newButtonY = openButtonY - 10 - buttonHeight; // 10px - space between buttons
+ initButton("open", openButtonY, OpenProjectAction.class);
+ initButton("new", newButtonY, NewProjectAction.class);
- private void initNewButton() {
- ImageIcon newIcon = ModelerUtil.buildIcon("welcome/welcome-screen-new-btn.png");
- ImageIcon newHoverIcon = ModelerUtil.buildIcon("welcome/welcome-screen-new-btn-hover.png");
- JButton newButton = createButton(newIcon, newHoverIcon);
- newButton.setLocation(24, 488);
- newButton.addActionListener(Application
- .getInstance()
- .getActionManager()
- .getAction(NewProjectAction.class));
- buttonsPane.add(newButton);
+ add(buttonsPanel);
}
- private void initOpenButton() {
- ImageIcon newIcon = ModelerUtil.buildIcon("welcome/welcome-screen-open-btn.png");
- ImageIcon newHoverIcon = ModelerUtil.buildIcon("welcome/welcome-screen-open-btn-hover.png");
- JButton openButton = createButton(newIcon, newHoverIcon);
- openButton.setLocation(24, 532);
- openButton.addActionListener(Application
+ private void initButton(String name, int y, Class<? extends Action> actionClass) {
+ ImageIcon icon = ModelerUtil.buildIcon("welcome/welcome-screen-"+name+"-btn.png");
+ ImageIcon hoverIcon = ModelerUtil.buildIcon("welcome/welcome-screen-"+name+"-btn-hover.png");
+ JButton button = createButton(icon, hoverIcon);
+ button.setLocation(24, y); // 24px - button left & right padding
+ button.addActionListener(Application
.getInstance()
.getActionManager()
- .getAction(NewProjectAction.class));
- buttonsPane.add(openButton);
- }
-
- private void initRecentList() {
- recentsList = new JList<>();
- recentsList.setOpaque(false);
- int padding = 20;
- recentsList.setLocation(padding, padding);
- recentsList.setSize(902 - 2 * padding, 592 - 2 * padding);
- Font fontOld = recentsList.getFont();
- Font font = new Font(fontOld.getFontName(), Font.PLAIN, 12);
- recentsList.setFont(font);
-// recentsList.setFixedCellHeight(24);
- RecentFileListRenderer cellRenderer = new RecentFileListRenderer(recentsList, this);
- recentsList.setCellRenderer(cellRenderer);
- fileListPane.add(recentsList);
+ .getAction(actionClass));
+ buttonsPanel.add(button);
}
@Override
@@ -178,7 +142,6 @@ public class WelcomeScreen extends JPanel implements RecentFileListListener, Rec
@Override
public void recentFileListChanged() {
List<String> arr = ModelerPreferences.getLastProjFiles();
- recentsList.setModel(new RecentFileListModel(arr));
+ recentProjectsList.setModel(new RecentFileListModel(arr));
}
-
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/32399f9a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/BackgroundPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/BackgroundPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/BackgroundPanel.java
new file mode 100644
index 0000000..fe14b84
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/BackgroundPanel.java
@@ -0,0 +1,47 @@
+/*****************************************************************
+ * 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.util;
+
+import javax.swing.ImageIcon;
+import javax.swing.JPanel;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Image;
+
+public class BackgroundPanel extends JPanel {
+
+ private Image backgroundImage;
+
+ public BackgroundPanel(String imagePath) {
+ super(null);
+ ImageIcon imageIcon = ModelerUtil.buildIcon(imagePath);
+ backgroundImage = imageIcon.getImage();
+ Dimension dimension = new Dimension(imageIcon.getIconWidth(), imageIcon.getIconHeight());
+ setSize(dimension);
+ setPreferredSize(dimension);
+ setOpaque(false);
+ }
+
+ @Override
+ protected void paintComponent(Graphics g) {
+ super.paintComponent(g);
+ g.drawImage(backgroundImage, 0, 0, null);
+ }
+}