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):

Reply via email to