summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarko Živković <[email protected]>2014-06-12 23:50:29 +0000
committerMarko Živković <[email protected]>2014-06-12 23:50:29 +0000
commite8d19c46aefb7378be44c704d93d3e408b443d2e (patch)
tree096b24e6a53f23f212c69fcf77e52ca235b11e6c
parenta576088a6e9567fbffd13ce23a32a460a785832d (diff)
Refactored WelcomeScreen and WorkspaceSettings to extend and reuse functionality of X4SFrame
git-svn-id: https://svn.code.sf.net/p/xlogo4schools/svn/trunk@5 3b0d7934-f7ef-4143-9606-b51f2e2281fd
-rw-r--r--logo/src/xlogo/Logo.java7
-rw-r--r--logo/src/xlogo/gui/components/X4SFrame.java48
-rw-r--r--logo/src/xlogo/gui/welcome/WelcomeScreen.java346
-rw-r--r--logo/src/xlogo/gui/welcome/WorkspaceSettings.java33
4 files changed, 220 insertions, 214 deletions
diff --git a/logo/src/xlogo/Logo.java b/logo/src/xlogo/Logo.java
index 86406af..4e495df 100644
--- a/logo/src/xlogo/Logo.java
+++ b/logo/src/xlogo/Logo.java
@@ -129,12 +129,13 @@ public class Logo {
public void actionPerformed(ActionEvent e) {
enterApplication();
}
- });
+ });
+ welcomeScreen.showFrame();
}
});
//UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel());
} catch(Exception e){
- System.out.println("here " + e.toString()); //TODO error m
+ e.printStackTrace(); //TODO error m
}
}
@@ -145,7 +146,7 @@ public class Logo {
public void enterApplication(){
WorkspaceConfig wc = WSManager.getInstance().getWorkspaceConfigInstance();
- welcomeScreen.dispose();
+ welcomeScreen.closeFrame();
generateLanguage(wc.getLanguage());
// Initialize frame
diff --git a/logo/src/xlogo/gui/components/X4SFrame.java b/logo/src/xlogo/gui/components/X4SFrame.java
index 92296bb..1d06c8c 100644
--- a/logo/src/xlogo/gui/components/X4SFrame.java
+++ b/logo/src/xlogo/gui/components/X4SFrame.java
@@ -27,8 +27,16 @@
package xlogo.gui.components;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowStateListener;
+
import javax.swing.JFrame;
+import xlogo.messages.async.AsyncMediumAdapter;
+import xlogo.messages.async.AsyncMessage;
+import xlogo.messages.async.AsyncMessenger;
+import xlogo.messages.async.dialog.DialogMessenger;
+
public abstract class X4SFrame extends X4SGui{
public X4SFrame() {
@@ -36,5 +44,45 @@ public abstract class X4SFrame extends X4SGui{
}
public abstract JFrame getFrame();
+
+ public void showFrame()
+ {
+ setMessageManagerParent();
+ getFrame().setVisible(true);
+ }
+
+ public void closeFrame()
+ {
+ getFrame().dispose();
+ }
+
+ /**
+ * Make this frame the parent for popups and dialogs
+ */
+ protected void setMessageManagerParent()
+ {
+ DialogMessenger.getInstance().setMedium(new AsyncMediumAdapter<AsyncMessage<JFrame>, JFrame>(){
+ public boolean isReady()
+ {
+ return getFrame().isDisplayable();
+ }
+ public JFrame getMedium()
+ {
+ return getFrame();
+ }
+ public void addMediumReadyListener(final AsyncMessenger messenger)
+ {
+ getFrame().addWindowStateListener(new WindowStateListener(){
+
+ @Override
+ public void windowStateChanged(WindowEvent e)
+ {
+ if (getFrame().isDisplayable())
+ messenger.onMediumReady();
+ }
+ });
+ }
+ });
+ }
}
diff --git a/logo/src/xlogo/gui/welcome/WelcomeScreen.java b/logo/src/xlogo/gui/welcome/WelcomeScreen.java
index 011081e..baf9b85 100644
--- a/logo/src/xlogo/gui/welcome/WelcomeScreen.java
+++ b/logo/src/xlogo/gui/welcome/WelcomeScreen.java
@@ -36,10 +36,8 @@ import javax.swing.text.JTextComponent;
import java.awt.*;
import java.io.IOException;
+import xlogo.gui.components.X4SFrame;
import xlogo.messages.MessageKeys;
-import xlogo.messages.async.AsyncMediumAdapter;
-import xlogo.messages.async.AsyncMessage;
-import xlogo.messages.async.AsyncMessenger;
import xlogo.messages.async.dialog.DialogMessenger;
import xlogo.storage.Storable;
import xlogo.storage.WSManager;
@@ -48,7 +46,6 @@ import xlogo.storage.workspace.WorkspaceConfig;
import xlogo.utils.Utils;
import xlogo.utils.WebPage;
import xlogo.Application;
-import xlogo.Logo;
/**
* This was initially called {@code Selection_Langue} and it was only displayed when the Application was opened for the very first time.
@@ -57,24 +54,25 @@ import xlogo.Logo;
* <li> Storage Location (master password required) </li>
* @author Marko
*/
-public class WelcomeScreen extends JFrame {
- private static final long serialVersionUID = 1L;
+public class WelcomeScreen extends X4SFrame {
+ JFrame frame;
+
private JLabel label;
- private JLabel workspace = new JLabel("Workspace");
- private JLabel username = new JLabel("User");
+ private JLabel workspace;
+ private JLabel username;
- private JComboBox workspaceSelection = new JComboBox();
- private JComboBox userSelection = new JComboBox();
+ private JComboBox workspaceSelection;
+ private JComboBox userSelection;
- private JButton openWorkspaceSettingsBtn = new JButton("Settings");
- private JButton enterButton = new JButton("Enter");
+ private JButton openWorkspaceSettingsBtn;
+ private JButton enterButton;
- private JButton infoButton = new JButton();
- private JButton gplButton = new JButton();
+ private JButton infoButton;
+ private JButton gplButton;
- private JPanel panel = new JPanel();
+ private JPanel panel;
private GroupLayout groupLayout;
private ActionListener onApplicationEnterListener;
@@ -87,20 +85,150 @@ public class WelcomeScreen extends JFrame {
*/
public WelcomeScreen(ActionListener onApplicationEnterListener){
this.onApplicationEnterListener = onApplicationEnterListener;
+ }
+
+ @Override
+ public JFrame getFrame()
+ {
+ return frame;
+ }
+
+ @Override
+ protected void initComponent()
+ {
+ frame = new JFrame(){
+
+ private static final long serialVersionUID = -6730403281163492211L;
+
+ @Override
+ public void dispose()
+ {
+ try {
+ WSManager.getInstance().getGlobalConfigInstance().store();
+ } catch (IOException e) {
+ DialogMessenger.getInstance().dispatchMessage(
+ translate("ws.error.title"),
+ translate("storage.could.not.store.gc"));
+ }
+
+ System.gc();
+ super.dispose();
+ }
+ };
// Window
- super.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
- setIconImage(Toolkit.getDefaultToolkit().createImage(Utils.class.getResource("Icon_x4s.png")));
- setTitle("XLogo4Schools");
+ frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+ frame.setIconImage(Toolkit.getDefaultToolkit().createImage(Utils.class.getResource("Icon_x4s.png")));
+ frame.setTitle("XLogo4Schools");
+
+
+ workspace = new JLabel("Workspace");
+ username = new JLabel("User");
+
+ workspaceSelection = new JComboBox();
+ userSelection = new JComboBox();
+
+ openWorkspaceSettingsBtn = new JButton("Settings");
+ enterButton = new JButton("Enter");
+
+ infoButton = new JButton();
+ gplButton = new JButton();
+
+ panel = new JPanel();
// The XLogo4Schools logo
//ImageIcon logo = Utils.dimensionne_image("Logo_xlogo4schools.png", this);
-
infoButton.setIcon(createImageIcon("info_icon.png", "Info", 40, 40));
gplButton.setIcon(createImageIcon("gnu_gpl.png", "GPL", 40, 40));
label = new JLabel(createImageIcon("Logo_xlogo4schools.png", "XLogo4Schools", 250, 40));
- // Select workspace combo box
initWorkspaceListModel();
+ populateUserList();
+
+ workspaceSettings = new WorkspaceSettings(new ActionListener() {
+ public void actionPerformed(ActionEvent arg0) {
+ // When the window is closed, repopulate workspace and user lists, update language, enable this window again.
+ setMessageManagerParent();
+ setText();
+ populateWorkspaceList();
+ populateUserList();
+ frame.setEnabled(true);
+ }
+ });
+ }
+
+ @Override
+ protected void layoutComponent()
+ {
+ frame.getContentPane().add(panel);
+
+ frame.setResizable(false);
+ infoButton.setBorder(null);
+ gplButton.setBorder(null);
+
+ infoButton.setOpaque(false);
+ gplButton.setOpaque(false);
+
+ panel.add(workspace);
+ panel.add(username);
+ panel.add(workspaceSelection);
+ panel.add(userSelection);
+ panel.add(openWorkspaceSettingsBtn);
+ panel.add(enterButton);
+ panel.add(infoButton);
+ panel.add(gplButton);
+
+ workspaceSelection.setMinimumSize(new Dimension(200, 25));
+ userSelection.setMinimumSize(new Dimension(200, 25));
+ workspaceSelection.setMaximumSize(new Dimension(200, 25));
+ userSelection.setMaximumSize(new Dimension(200, 25));
+
+ groupLayout = new GroupLayout(panel);
+ panel.setLayout(groupLayout);
+
+ groupLayout.setAutoCreateGaps(true);
+ groupLayout.setAutoCreateContainerGaps(true);
+
+ groupLayout.setVerticalGroup(
+ groupLayout.createSequentialGroup()
+ .addGroup(groupLayout.createParallelGroup()
+ .addComponent(gplButton)
+ .addComponent(infoButton)
+ .addComponent(label))
+ .addGroup(groupLayout.createParallelGroup()
+ .addComponent(workspace)
+ .addComponent(workspaceSelection)
+ .addComponent(openWorkspaceSettingsBtn))
+ .addGroup(groupLayout.createParallelGroup()
+ .addComponent(username)
+ .addComponent(userSelection)
+ .addComponent(enterButton))
+ );
+
+ groupLayout.setHorizontalGroup(
+ groupLayout.createParallelGroup()
+ .addGroup(
+ groupLayout.createSequentialGroup()
+ .addComponent(label)
+ .addComponent(gplButton)
+ .addComponent(infoButton))
+ .addGroup(
+ groupLayout.createSequentialGroup()
+ .addGroup(groupLayout.createParallelGroup()
+ .addComponent(workspace)
+ .addComponent(username))
+ .addGroup(groupLayout.createParallelGroup()
+ .addComponent(workspaceSelection)
+ .addComponent(userSelection))
+ .addGroup(groupLayout.createParallelGroup()
+ .addComponent(openWorkspaceSettingsBtn)
+ .addComponent(enterButton))
+ )
+ );
+ }
+
+ @Override
+ protected void initEventListeners()
+ {
workspaceSelection.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
String workspace = (String) workspaceSelection.getSelectedItem();
@@ -115,7 +243,6 @@ public class WelcomeScreen extends JFrame {
});
// Select user combo box
- populateUserList();
final JTextComponent tc = (JTextComponent) userSelection.getEditor().getEditorComponent();
tc.getDocument().addDocumentListener(new DocumentListener() {
public void removeUpdate(DocumentEvent arg0) { enableOrDisableEnter(); }
@@ -155,29 +282,6 @@ public class WelcomeScreen extends JFrame {
showInfo();
}
});
-
- // Add all
- initLayout();
- getContentPane().add(panel);
- setText();
- pack();
- setVisible(true);
-
- /*
- * Make this component the parent for popups and dialogs.
- */
- setMessageManagerParent();
-
- workspaceSettings = new WorkspaceSettings(new ActionListener() {
- public void actionPerformed(ActionEvent arg0) {
- // When the window is closed, repopulate workspace and user lists, update language, enable this window again.
- setMessageManagerParent();
- setText();
- populateWorkspaceList();
- populateUserList();
- setEnabled(true);
- }
- });
}
private void initWorkspaceListModel()
@@ -226,81 +330,11 @@ public class WelcomeScreen extends JFrame {
populateUserList();
} catch (IOException e) {
DialogMessenger.getInstance().dispatchMessage(
- Logo.messages.getString("ws.error.title"),
- Logo.messages.getString("ws.settings.could.not.enter.wp") + "\n\n" + e.toString());
+ translate("ws.error.title"),
+ translate("ws.settings.could.not.enter.wp") + "\n\n" + e.toString());
}
}
-
- private void initLayout()
- {
- setResizable(false);
- infoButton.setBorder(null);
- gplButton.setBorder(null);
-
- infoButton.setOpaque(false);
- gplButton.setOpaque(false);
-
- panel.add(workspace);
- panel.add(username);
- panel.add(workspaceSelection);
- panel.add(userSelection);
- panel.add(openWorkspaceSettingsBtn);
- panel.add(enterButton);
- panel.add(infoButton);
- panel.add(gplButton);
-
- workspaceSelection.setMinimumSize(new Dimension(200, 25));
- userSelection.setMinimumSize(new Dimension(200, 25));
- workspaceSelection.setMaximumSize(new Dimension(200, 25));
- userSelection.setMaximumSize(new Dimension(200, 25));
-
- groupLayout = new GroupLayout(panel);
- panel.setLayout(groupLayout);
-
- groupLayout.setAutoCreateGaps(true);
- groupLayout.setAutoCreateContainerGaps(true);
-
- groupLayout.setVerticalGroup(
- groupLayout.createSequentialGroup()
- .addGroup(groupLayout.createParallelGroup()
- .addComponent(gplButton)
- .addComponent(infoButton)
- .addComponent(label))
- .addGroup(groupLayout.createParallelGroup()
- .addComponent(workspace)
- .addComponent(workspaceSelection)
- .addComponent(openWorkspaceSettingsBtn))
- .addGroup(groupLayout.createParallelGroup()
- .addComponent(username)
- .addComponent(userSelection)
- .addComponent(enterButton))
- );
-
- groupLayout.setHorizontalGroup(
- groupLayout.createParallelGroup()
- .addGroup(
- groupLayout.createSequentialGroup()
- .addComponent(label)
- .addComponent(gplButton)
- .addComponent(infoButton))
- .addGroup(
- groupLayout.createSequentialGroup()
- .addGroup(groupLayout.createParallelGroup()
- .addComponent(workspace)
- .addComponent(username))
- .addGroup(groupLayout.createParallelGroup()
- .addComponent(workspaceSelection)
- .addComponent(userSelection))
- .addGroup(groupLayout.createParallelGroup()
- .addComponent(openWorkspaceSettingsBtn)
- .addComponent(enterButton))
- )
- );
- }
- /**
- * Display {@link xlogo.gui.welcome.WelcomeScreen} when starting the application.
- */
private synchronized void showWorkspaceSettings()
{
Runnable runnable = new Runnable() {
@@ -317,13 +351,13 @@ public class WelcomeScreen extends JFrame {
{
// Could not authenticate => cancel
DialogMessenger.getInstance().dispatchMessage(
- Logo.messages.getString("i.am.sorry"),
- Logo.messages.getString("welcome.wrong.pw"));
+ translate("i.am.sorry"),
+ translate("welcome.wrong.pw"));
return;
}
}
- setEnabled(false);
+ frame.setEnabled(false);
workspaceSettings.showFrame(authentification);
}
};
@@ -331,41 +365,9 @@ public class WelcomeScreen extends JFrame {
new Thread(runnable).start();
}
- private void setMessageManagerParent()
- {
- DialogMessenger.getInstance().setMedium(new AsyncMediumAdapter<AsyncMessage<JFrame>, JFrame>(){
- public boolean isReady()
- {
- return getThis().isDisplayable();
- }
- public JFrame getMedium()
- {
- return getThis();
- }
- public void addMediumReadyListener(final AsyncMessenger messenger)
- {
- getThis().addWindowStateListener(new WindowStateListener(){
-
- @Override
- public void windowStateChanged(WindowEvent e)
- {
- if (getThis().isDisplayable())
- messenger.onMediumReady();
- }
- });
- }
- });
- }
-
- private JFrame getThis()
- {
- return this;
- }
-
-
protected String showPasswordPopup() {
JPasswordField passwordField = new JPasswordField();
- int option = JOptionPane.showConfirmDialog(this, passwordField, Logo.messages.getString("welcome.enter.pw"),
+ int option = JOptionPane.showConfirmDialog(frame, passwordField, translate("welcome.enter.pw"),
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if (option == JOptionPane.OK_OPTION) {
@@ -384,8 +386,8 @@ public class WelcomeScreen extends JFrame {
if(!Storable.checkLegalName(username))
{
DialogMessenger.getInstance().dispatchError(
- Logo.messages.getString(MessageKeys.NAME_ERROR_TITLE),
- Logo.messages.getString(MessageKeys.ILLEGAL_NAME));
+ translate(MessageKeys.NAME_ERROR_TITLE),
+ translate(MessageKeys.ILLEGAL_NAME));
return;
}
@@ -398,38 +400,24 @@ public class WelcomeScreen extends JFrame {
WSManager.getInstance().enterUserSpace(username);
} catch (IOException e) {
DialogMessenger.getInstance().dispatchMessage(
- Logo.messages.getString("ws.error.title"),
- Logo.messages.getString("welcome.could.not.enter.user") + e.toString());
+ translate("ws.error.title"),
+ translate("welcome.could.not.enter.user") + e.toString());
return;
}
+
workspaceSettings.stopEventListeners();
onApplicationEnterListener.actionPerformed(new ActionEvent(this, 0, null));
System.gc();
}
- @Override
- public void dispose()
- {
- try {
- WSManager.getInstance().getGlobalConfigInstance().store();
- } catch (IOException e) {
- DialogMessenger.getInstance().dispatchMessage(
- Logo.messages.getString("ws.error.title"),
- Logo.messages.getString("storage.could.not.store.gc"));
- }
-
- System.gc();
- super.dispose();
- }
-
public void setText()
{
- workspace.setText(Logo.messages.getString("welcome.workspace"));
- username.setText(Logo.messages.getString("welcome.username"));
- openWorkspaceSettingsBtn.setText(Logo.messages.getString("welcome.settings"));
- enterButton.setText(Logo.messages.getString("welcome.enter"));
- setTitle(Logo.messages.getString("welcome.title"));
- pack();
+ workspace.setText(translate("welcome.workspace"));
+ username.setText(translate("welcome.username"));
+ openWorkspaceSettingsBtn.setText(translate("welcome.settings"));
+ enterButton.setText(translate("welcome.enter"));
+ frame.setTitle(translate("welcome.title"));
+ frame.pack();
}
/**
@@ -438,7 +426,7 @@ public class WelcomeScreen extends JFrame {
*/
private void showGPL()
{
- JFrame frame = new JFrame(Logo.messages.getString("menu.help.licence"));
+ JFrame frame = new JFrame(translate("menu.help.licence"));
frame.setIconImage(Toolkit.getDefaultToolkit().createImage(WebPage.class.getResource("Logo_xlogo4schools.png")));
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.setSize(500, 500);
@@ -477,7 +465,7 @@ public class WelcomeScreen extends JFrame {
private void showInfo()
{
- JFrame frame = new JFrame(Logo.messages.getString("menu.help.licence"));
+ JFrame frame = new JFrame(translate("menu.help.licence"));
frame.setIconImage(Toolkit.getDefaultToolkit().createImage(WebPage.class.getResource("Icon_x4s.png")));
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.setSize(500, 500);
diff --git a/logo/src/xlogo/gui/welcome/WorkspaceSettings.java b/logo/src/xlogo/gui/welcome/WorkspaceSettings.java
index e82acef..e924809 100644
--- a/logo/src/xlogo/gui/welcome/WorkspaceSettings.java
+++ b/logo/src/xlogo/gui/welcome/WorkspaceSettings.java
@@ -29,8 +29,6 @@ package xlogo.gui.welcome;
import java.awt.Toolkit;
import java.awt.event.ActionListener;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowStateListener;
import java.io.IOException;
import javax.swing.JFrame;
@@ -41,9 +39,6 @@ import xlogo.gui.welcome.settings.tabs.SyntaxHighlightingTab;
import xlogo.gui.welcome.settings.tabs.ContestTab;
import xlogo.gui.welcome.settings.tabs.GlobalTab;
import xlogo.gui.welcome.settings.tabs.WorkspaceTab;
-import xlogo.messages.async.AsyncMediumAdapter;
-import xlogo.messages.async.AsyncMessage;
-import xlogo.messages.async.AsyncMessenger;
import xlogo.messages.async.dialog.DialogMessenger;
import xlogo.storage.WSManager;
import xlogo.utils.Utils;
@@ -157,31 +152,5 @@ public class WorkspaceSettings extends X4SFrame {
appearanceTab.stopEventListeners();
contestTab.stopEventListeners();
}
-
- private void setMessageManagerParent()
- {
- DialogMessenger.getInstance().setMedium(new AsyncMediumAdapter<AsyncMessage<JFrame>, JFrame>(){
- public boolean isReady()
- {
- return frame.isDisplayable();
- }
- public JFrame getMedium()
- {
- return frame;
- }
- public void addMediumReadyListener(final AsyncMessenger messenger)
- {
- frame.addWindowStateListener(new WindowStateListener(){
-
- @Override
- public void windowStateChanged(WindowEvent e)
- {
- if (frame.isDisplayable())
- messenger.onMediumReady();
- }
- });
- }
- });
- }
-
+
}