Revision: 4190
Author: janne.t.harkonen
Date: Wed Sep 29 23:52:28 2010
Log: clean up the ui code, status is now again in a label
http://code.google.com/p/robotframework/source/detail?r=4190
Modified:
/trunk/proto/atdd-tutorial-berlin-2010/src/vacalc/ui.py
=======================================
--- /trunk/proto/atdd-tutorial-berlin-2010/src/vacalc/ui.py Wed Sep 29
15:37:24 2010
+++ /trunk/proto/atdd-tutorial-berlin-2010/src/vacalc/ui.py Wed Sep 29
23:52:28 2010
@@ -1,7 +1,7 @@
-from javax.swing import JFrame, JList, JPanel, JLabel, JTextField,
JButton, Box, JTextArea
+from javax.swing import JFrame, JList, JPanel, JLabel, JTextField,
JButton, Box, JTextArea, BoxLayout
from javax.swing.event import ListSelectionListener
from java.awt.event import ActionListener
-from java.awt import FlowLayout, GridLayout, BorderLayout
+from java.awt import FlowLayout, BorderLayout, Dimension, Font, Color
class VacalcFrame(object):
@@ -9,21 +9,39 @@
def __init__(self, employees):
self._frame = JFrame('Vacation Calculator',
defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
- self._create_ui(employees)
+ self._frame.setContentPane(self._create_ui(employees))
self._frame.pack()
def _create_ui(self, employees):
panel = JPanel(layout=FlowLayout())
- detais_panel = JPanel(layout=BorderLayout())
+ self._overview = EmployeeOverview(employees, self)
+ self._details = EmployeeDetails(employees)
+ panel.add(self._overview)
+ panel.add(self._details)
+ return panel
+
+ def show(self):
+ self._frame.setVisible(True)
+
+ def employees_changed(self):
+ self._overview.refresh()
+
+ def employee_selected(self, employee):
+ self._details.show_employee(employee)
+
+ def edit_new_employee(self):
+ self._details.edit_new_employee()
+
+
+class EmployeeOverview(JPanel):
+
+ def __init__(self, employees, overview_listener):
+ JPanel.__init__(self, layout=BorderLayout())
+ self._listener = overview_listener
self._employee_list = self._create_employee_list(employees)
- detais_panel.add(self._employee_list.widget,
BorderLayout.PAGE_START)
- self._details = EmployeeDetailsPanel(employees)
- btn = JButton('New Employee')
- btn.addActionListener(ListenerFactory(ActionListener,
self._new_employee))
- detais_panel.add(btn, BorderLayout.PAGE_END)
- panel.add(detais_panel)
- panel.add(self._details.widget)
- self._frame.setContentPane(panel)
+ new_emp_btn = self._create_new_employee_button()
+ self.add(self._employee_list.widget, BorderLayout.PAGE_START)
+ self.add(new_emp_btn, BorderLayout.PAGE_END)
def _create_employee_list(self, employees):
list = EmployeeList(employees)
@@ -31,16 +49,18 @@
self._list_item_selected))
return list
+ def _create_new_employee_button(self):
+ btn = JButton('New Employee')
+ btn.addActionListener(ListenerFactory(ActionListener,
self._new_employee))
+ return btn
+
def _list_item_selected(self, event):
-
self._details.show_employee(self._employee_list.selected_employee())
+
self._listener.employee_selected(self._employee_list.selected_employee())
def _new_employee(self, event):
- self._details.edit_new_employee()
-
- def show(self):
- self._frame.setVisible(True)
-
- def employees_changed(self):
+ self._listener.edit_new_employee()
+
+ def refresh(self):
self._employee_list.refresh()
@@ -79,30 +99,40 @@
return self._list
-class EmployeeDetailsPanel(object):
+class EmployeeDetails(JPanel):
def __init__(self, employees):
+ JPanel.__init__(self, preferredSize=(300, 200))
+ layout = BoxLayout(self, BoxLayout.Y_AXIS)
+ self.setLayout(layout)
self._employees = employees
employees.add_change_listener(self)
- self._panel = JPanel(layout=BorderLayout(), preferredSize=(300,
200))
- itempanel = JPanel(layout=GridLayout(4,2))
- itempanel.add(JLabel(text='Name'))
- self._name_editor = JTextField(name='name_input')
- itempanel.add(self._name_editor)
- itempanel.add(JLabel(text='Start'))
- self._start_date_editor = JTextField(name='start_input')
- itempanel.add(self._start_date_editor)
+ self._create_status_label()
+ self._create_name_editor()
+ self._create_start_date_editor()
+ self._create_save_button()
+
+ def _create_status_label(self):
+ self._status_label = JLabel(name='status_label',
+ font=Font(Font.SERIF, Font.PLAIN, 9))
+ self.add(self._status_label)
+ self.add(Box.createRigidArea(Dimension(0,5)))
+
+ def _create_name_editor(self):
+ self.add(JLabel(text='Name'))
+ self._name_editor = FixedHeightTextField('name_input')
+ self.add(self._name_editor)
+
+ def _create_start_date_editor(self):
+ self.add(JLabel(text='Start Date (YYYY-MM-DD)'))
+ self._start_date_editor = FixedHeightTextField('start_input')
+ self.add(self._start_date_editor)
+
+ def _create_save_button(self):
button = JButton('Save', name='save_button')
button.addActionListener(ListenerFactory(ActionListener,
self._save_button_pushed))
- itempanel.add(Box.createHorizontalStrut(1))
- btnpanel = Box.createHorizontalBox()
- btnpanel.add(btnpanel.createHorizontalStrut(80))
- btnpanel.add(button)
- itempanel.add(btnpanel)
- self._panel.add(itempanel, BorderLayout.PAGE_START)
- self._status_label = JTextArea(editable=False,
name='status_label', visible=False)
- self._panel.add(self._status_label, BorderLayout.PAGE_END)
+ self.add(button)
def show_employee(self, employee):
self._name_editor.setText(employee.name)
@@ -112,20 +142,26 @@
self._name_editor.setText('')
self._start_date_editor.setText('')
- @property
- def widget(self):
- return self._panel
-
def _save_button_pushed(self, event):
self._employees.add(self._name_editor.getText(),
self._start_date_editor.getText())
def employee_added(self, employee):
+ self._status_label.setForeground(Color.BLACK)
self._status_label.setText("Employee '%s' was added
successfully." % employee.name)
def adding_employee_failed(self, reason):
+ self._status_label.setForeground(Color.RED)
self._status_label.setText(reason)
- self._status_label.setVisible(True)
+
+
+class FixedHeightTextField(JTextField):
+
+ def __init__(self, name):
+ JTextField.__init__(self, name=name)
+ prefsize = self.preferredSize
+ maxsize = self.maximumSize
+ self.setMaximumSize(Dimension(maxsize.width, prefsize.height))
def ListenerFactory(interface, func):