Index: calculatorview/src/sans/perspectives/calculator/data_operator.py
===================================================================
--- calculatorview/src/sans/perspectives/calculator/data_operator.py	(revision 19b9e43bd1d233ac27de0cdb2a6201c1bfdf2513)
+++ calculatorview/src/sans/perspectives/calculator/data_operator.py	(revision 33c671e802ad089123389f324eff5585c4851c06)
@@ -17,5 +17,5 @@
 #Control panel width 
 if sys.platform.count("win32") > 0:
-    PANEL_WIDTH = 780
+    PANEL_WIDTH = 790
     PANEL_HEIGTH = 370
     FONT_VARIANT = 0
@@ -24,5 +24,5 @@
 else:
     _BOX_WIDTH = 230
-    PANEL_WIDTH = 890
+    PANEL_WIDTH = 900
     PANEL_HEIGTH = 430
     FONT_VARIANT = 1
@@ -100,5 +100,5 @@
         self.data1_cbox = wx.ComboBox(self, -1, size=(_BOX_WIDTH, 25), 
                                       style=wx.CB_READONLY)
-        self.operator_cbox = wx.ComboBox(self, -1, size=(50, -1), 
+        self.operator_cbox = wx.ComboBox(self, -1, size=(70, 25), 
                                          style=wx.CB_READONLY)
         operation_tip = "Add: +, Subtract: -, "
@@ -117,5 +117,5 @@
                              style=wx.NO_BORDER)
         self.operator_pic = SmallPanel(self, -1, True, 
-                                       '+', size=(50, _BOX_WIDTH), 
+                                       '+', size=(70, _BOX_WIDTH), 
                                        style=wx.NO_BORDER)
         self.data2_pic = SmallPanel(self, -1, True, 
@@ -150,6 +150,6 @@
         self.data2_cbox.Show(True)
 
-        self.numberctr.Show(False)
-
+        self._show_numctrl(self.numberctr, False)
+        
         wx.EVT_TEXT_ENTER(self.data_namectr, -1, self.on_name)
         wx.EVT_TEXT_ENTER(self.numberctr, -1, self.on_number) 
@@ -157,5 +157,16 @@
         wx.EVT_COMBOBOX(self.operator_cbox, -1, self.on_select_operator) 
         wx.EVT_COMBOBOX(self.data2_cbox, -1, self.on_select_data2)
-        
+    
+    def _show_numctrl(self, ctrl, enable=True):  
+        """
+        Show/Hide on Win
+        Enable/Disable on MAC
+        """
+        if ON_MAC:
+            ctrl.Enable(enable)
+            ctrl.GetChildren()[0].SetBackGroundColor(self.GetBackGroundColor())
+        else:
+            ctrl.Show(enable)
+            
     def on_name(self, event=None):
         """
@@ -165,5 +176,8 @@
             event.Skip()
         item = event.GetEventObject()
-        item.SetBackgroundColour('white')
+        if item.IsEnabled():
+            self._set_textctrl_color(item, 'white')
+        else:
+            self._set_textctrl_color(item, self.GetBackgroundColour())
         text = item.GetLabel().strip()
         self._check_newname(text)
@@ -181,14 +195,24 @@
         state_list = self.get_datalist().values()
         if text in [str(state.data.name) for state in state_list]:
-            self.data_namectr.SetBackgroundColour('pink')
+            self._set_textctrl_color(self.data_namectr, 'pink')
             msg = "DataOperation: The name already exists."
         if len(text) == 0:
-            self.data_namectr.SetBackgroundColour('pink')
+            self._set_textctrl_color(self.data_namectr, 'pink')
             msg = "DataOperation: Type the data name first."
         if self._notes:
             self.send_warnings(msg, 'error')
+        
+        self.Refresh()
+    
+    def _set_textctrl_color(self, ctrl, color): 
+        """
+        Set TextCtrl color 
+        """
+        if ON_MAC:
+            ctrl.GetChildren()[0].SetBackgroundColour(color)  
+        else:
+            ctrl.SetBackgroundColour(color)  
         self.name_sizer.Layout()
-        self.Refresh()
-                
+                     
     def on_number(self, event=None):
         """
@@ -198,5 +222,9 @@
             event.Skip()
         self.send_warnings('')
-        self.numberctr.SetBackgroundColour('white')
+        if self.numberctr.IsEnabled():
+            self._set_textctrl_color(self.numberctr, 'white')
+        else:
+            self._set_textctrl_color(self.numberctr, self.GetBackgroundColour())
+
         item = event.GetEventObject()
         text = item.GetLabel().strip()
@@ -206,5 +234,5 @@
             self.data2_cbox.SetClientData(pos, val)
         except:
-            self.numberctr.SetBackgroundColour('pink')
+            self._set_textctrl_color(self.numberctr, 'pink')
             msg = "DataOperation: Number requires a float number."
             self.send_warnings(msg, 'error')
@@ -244,5 +272,5 @@
         self.send_warnings('')
         item = event.GetEventObject()
-        text = item.GetLabel().strip()
+        text = item.GetValue().strip()
         self.put_text_pic(self.operator_pic, content=text) 
         self.check_data_inputs()
@@ -260,10 +288,10 @@
         item = event.GetEventObject()
         text = item.GetLabel().strip().lower()
-        self.numberctr.Show(text=='number')
+        self._show_numctrl(self.numberctr, text=='number')
         
         pos = item.GetSelection()
         data = item.GetClientData(pos)
         content = "?"
-        if not self.numberctr.IsShown():
+        if not (self.numberctr.IsShown() and self.numberctr.IsEnabled()):
             if data == None:
                 content = "?"
@@ -278,4 +306,5 @@
                     data = content
                 except:
+                    self._set_textctrl_color(self.numberctr, 'pink')
                     content = "?"
                     data = None
@@ -300,6 +329,6 @@
         Check data1 and data2 whether or not they are ready for operation
         """
-        self.data1_cbox.SetBackgroundColour('white')
-        self.data2_cbox.SetBackgroundColour('white')
+        self._set_textctrl_color(self.data1_cbox, 'white')
+        self._set_textctrl_color(self.data2_cbox, 'white')
         flag = False
         pos1 = self.data1_cbox.GetCurrentSelection()
@@ -314,5 +343,9 @@
             return flag
         if self.numberctr.IsShown():
-            self.numberctr.SetBackgroundColour('white')
+            if self.numberctr.IsEnabled():
+                self._set_textctrl_color(self.numberctr, 'white')
+            else:
+                self._set_textctrl_color(self.numberctr, 
+                                         self.GetBackgroundColour())
             try:
                 float(data2)
@@ -321,5 +354,5 @@
                     msg += "a float number."
                     self.send_warnings(msg, 'error')
-                    self.numberctr.SetBackgroundColour('pink')
+                    self._set_textctrl_color(self.numberctr, 'pink')
                     self.output = None
                     return flag
@@ -327,10 +360,10 @@
                 msg = "DataOperation: Number requires a float number."
                 self.send_warnings(msg, 'error')
-                self.numberctr.SetBackgroundColour('pink')
+                self._set_textctrl_color(self.numberctr, 'pink')
                 self.output = None
                 return flag
         elif data1.__class__.__name__ != data2.__class__.__name__:
-            self.data1_cbox.SetBackgroundColour('pink')
-            self.data2_cbox.SetBackgroundColour('pink')
+            self._set_textctrl_color(self.data1_cbox, 'pink')
+            self._set_textctrl_color(self.data1_cbox, 'pink')
             msg = "DataOperation: Data types must be same."
             self.send_warnings(msg, 'error')
@@ -341,6 +374,6 @@
         except:
             self._check_newname()
-            self.data1_cbox.SetBackgroundColour('pink')
-            self.data2_cbox.SetBackgroundColour('pink')
+            self._set_textctrl_color(self.data1_cbox, 'pink')
+            self._set_textctrl_color(self.data2_cbox, 'pink')
             msg = "DataOperation: Data types must be same."
             self.send_warnings(msg, 'error')
@@ -450,5 +483,5 @@
             pos3 = self.data2_cbox.Append("Number")
             val = None
-            if self.numberctr.IsShown():
+            if (self.numberctr.IsShown() and self.numberctr.IsEnabled()):
                 try:
                     val = float(self.numberctr.GetValue())
@@ -465,5 +498,5 @@
         pos3 = self.data2_cbox.Append('Number')
         val = None
-        if self.numberctr.IsShown():
+        if (self.numberctr.IsShown() and self.numberctr.IsEnabled()):
             try:
                 val = float(self.numberctr.GetValue())
@@ -523,12 +556,12 @@
         self.data_namectr.SetBackgroundColour('white')
         state_list = self.get_datalist().values()
-        name = self.data_namectr.GetLabel().strip()
+        name = self.data_namectr.GetValue().strip()
         if name in [str(state.data.name) for state in state_list]:
-            self.data_namectr.SetBackgroundColour('pink')
+            self._set_textctrl_color(self.data_namectr, 'pink')
             msg = "The Output Data Name already exists...   "
             wx.MessageBox(msg, 'Error')
             return
         if name == '':
-            self.data_namectr.SetBackgroundColour('pink')
+            sself._set_textctrl_color(self.data_namectr, 'pink')
             msg = "Please type the output data name first...   "
             wx.MessageBox(msg, 'Error')
