Index: sansguiframe/src/sans/guiframe/data_processor.py
===================================================================
--- sansguiframe/src/sans/guiframe/data_processor.py	(revision 25b7bf991baf63ce716d7ca9ee669e144434febd)
+++ sansguiframe/src/sans/guiframe/data_processor.py	(revision 4e0dfe47b4c06508c32fbb8e6485a25249f6c98f)
@@ -151,8 +151,9 @@
         """
         flag = event.CmdDown() or event.ControlDown()
+        flag_shift =  event.ShiftDown()
         row, col = event.GetRow(), event.GetCol()
         cell = (row, col)
         event.Skip()
-        if not flag:
+        if not flag and not flag_shift:
             self.selected_cols = []
             self.selected_rows = []
@@ -169,17 +170,48 @@
             self.axis_label = self.GetCellValue(label_row, col)
             self.selected_cols.append(col)
-        if cell not in self.selected_cells:
-            if row > 0:
-                self.selected_cells.append(cell)
-                self.selected_rows.append(row)
+        if flag_shift:
+            if not self.selected_rows:
+                min_r = 1
+            else:
+                min_r = min(self.selected_rows)
+            for row_s in range(min_r, row+1):
+                cel = (row_s, col)
+                if cel not in self.selected_cells:
+                    if row > 0:
+                        self.selected_cells.append(cel)
+                        self.selected_rows.append(row) 
+            for row_s in self.selected_rows: 
+                cel = (row_s, col)
+                if row_s > row:
+                    try:
+                        self.selected_cells.remove(cel)
+                    except:
+                        pass
+                    try:
+                        self.selected_rows.remove(row_s)
+                    except:
+                        pass
+        elif flag:
+            if cell not in self.selected_cells:
+                if row > 0 :
+                    self.selected_cells.append(cell)
+                    self.selected_rows.append(row)
+            else:
+                try:
+                    self.selected_cells.remove(cell)
+                except:
+                    pass
+                try:
+                    self.selected_rows.remove(row)
+                except:
+                    pass
         else:
-            if flag:
-                self.selected_cells.remove(cell)
+            self.selected_cells.append(cell)
+            self.selected_rows.append(row)
         self.axis_value = []
         for cell_row, cell_col in self.selected_cells:
             if cell_row > 0 and cell_row < self.max_row_touse:
                 self.axis_value.append(self.GetCellValue(cell_row, cell_col))
-
-                
+     
     def on_left_click(self, event):
         """
@@ -188,7 +220,8 @@
         event.Skip()
         flag = event.CmdDown() or event.ControlDown()
+        
         col = event.GetCol()
         row = event.GetRow()
-        if not flag:
+        if not (flag):
             self.selected_cols = []
             self.selected_rows = []
@@ -217,5 +250,7 @@
             self.axis_value = []
             for cell_row, cell_col in self.selected_cells:
-                self.axis_value.append(self.GetCellValue(cell_row, cell_col))
+                val = self.GetCellValue(cell_row, cell_col)
+                if not val:
+                    self.axis_value.append(self.GetCellValue(cell_row, cell_col))
             self.axis_label = self.GetCellValue(0, col)
             if not self.axis_label:
@@ -549,4 +584,5 @@
         pos = self.GetSelection()
         grid = self.GetPage(pos)
+        #grid.selected_cols = [grid.GetSelectedRows()]#
         if len(grid.selected_cols) >= 1:
             col = grid.selected_cols[0]
@@ -599,5 +635,5 @@
             """
             """
-            result = ""
+            result = " "
             if row_min is not  None or row_max is not None:
                 if row_min is None:
@@ -633,15 +669,28 @@
                             if index -1 >= 0:
                                 new_row, _ = temp_list[index-1]
-                                label += create_label(col_name, None, new_row +1)
+                                if not new_row==None and new_row!=' ' :
+                                    label += create_label(col_name, None, int(new_row) +1)
+                                else:
+                                    label += "]"
                                 label += ","
                             if index + 1 < len(temp_list):
                                 new_row, _ = temp_list[index + 1]
-                                label += create_label(col_name, new_row+1, None)
-                    if index == 0:
-                        label += create_label(col_name,  row_min+1, None)
-                    elif index == len(temp_list)-1:
-                        label += create_label(col_name, None, row_max+1)
+                                if not new_row==None:
+                                    label += create_label(col_name, int(new_row)+1, None)
+                    if row_min != None and row_max != None:
+                        if index == 0:
+                            label += create_label(col_name,  int(row_min)+1, None)
+                        elif index == len(temp_list)-1:
+                            label += create_label(col_name, None, int(row_max)+1)
                     index += 1
-                return label, col_title
+                # clean up the list
+                label_out = ''
+                for item in label.split(','):
+                    if item.split(":")[1]=="]":
+                        continue
+                    else:
+                        label_out += item + ","
+
+                return label_out, col_title
     
     def on_close_page(self, event):
@@ -858,5 +907,5 @@
                                 if len(grid.selected_cells) != 1:
                                     msg = "2D View: Please select one data set"
-                                    msg += " at a time for View Results."
+                                    msg += " at a time for View Fit Results."
                                     wx.PostEvent(self.parent.parent, 
                                                  StatusEvent(status=msg,
@@ -874,5 +923,5 @@
                                                 group_id=str(new_plot.group_id),
                                                 title=title))  
-                        msg = "Plotting the View Results  completed!"
+                        msg = "Plotting the View Fit Results  completed!"
                         wx.PostEvent( self.parent.parent, 
                                       StatusEvent(status=msg))  
@@ -993,5 +1042,5 @@
         self.x_axis_unit = wx.TextCtrl(self, -1)
         self.y_axis_unit = wx.TextCtrl(self, -1)
-        self.view_button = wx.Button(self, -1, "View Results")
+        self.view_button = wx.Button(self, -1, "View Fits")
         view_tip = "Highlight the data set or the Chi2 column first."
         self.view_button.SetToolTipString(view_tip)
