Index: sansguiframe/src/sans/guiframe/data_panel.py
===================================================================
--- sansguiframe/src/sans/guiframe/data_panel.py	(revision 9ea4577efb4907c634b18e0cb2a4454cd6772967)
+++ sansguiframe/src/sans/guiframe/data_panel.py	(revision 0aca693ae9af1757acabafd65f4011981950220b)
@@ -435,4 +435,14 @@
                                 dimension=dimension, id=wx.NewId())
         panel.ShowModal()    
+    
+    def on_data_info(self, event):
+        """
+        Data Info panel
+        """
+        data = self._get_data_selection(event)
+        if data.__class__.__name__ == "Data2D":
+            self.parent.show_data2d(data, data.name)
+        else:
+            self.parent.show_data1d(data, data.name)
         
     def on_save_as(self, event):
@@ -465,4 +475,10 @@
         ## Create context menu for page
         self.data_menu = wx.Menu()
+        id = wx.NewId()
+        name = "Data Info"
+        msg = "Show Data Info"
+        self.data_menu.Append(id, name, msg)
+        wx.EVT_MENU(self, id, self.on_data_info)
+        
         id = wx.NewId()
         name = "Save As"
Index: sansguiframe/src/sans/guiframe/gui_manager.py
===================================================================
--- sansguiframe/src/sans/guiframe/gui_manager.py	(revision 7954acd9e8f04aee30c38088458534251d6f38b3)
+++ sansguiframe/src/sans/guiframe/gui_manager.py	(revision 0aca693ae9af1757acabafd65f4011981950220b)
@@ -326,11 +326,17 @@
         list_children = self.GetChildren() 
         for frame in list_children:
-            if hasattr(frame, "IsIconized"):
-                if not frame.IsIconized():
-                    try:
-                        icon = self.GetIcon()
-                        frame.SetIcon(icon)
-                    except:
-                        pass
+            self.put_icon(frame)
+        
+    def put_icon(self, frame): 
+        """
+        Put icon on the tap of a panel
+        """
+        if hasattr(frame, "IsIconized"):
+            if not frame.IsIconized():
+                try:
+                    icon = self.GetIcon()
+                    frame.SetIcon(icon)
+                except:
+                    pass  
         
     def on_set_batch_result(self, data_outputs, data_inputs=None,
@@ -2182,11 +2188,6 @@
                     
                     dialog = PDFFrame(None, -1, "Tutorial", path)
-                    if hasattr(dialog, "IsIconized"):
-                        if not dialog.IsIconized():
-                            try:
-                                icon = self.GetIcon()
-                                dialog.SetIcon(icon)
-                            except:
-                                pass   
+                    # put icon
+                    self.put_icon(frame)  
                     #self.SetTopWindow(dialog)
                     dialog.Show(True) 
@@ -2565,5 +2566,46 @@
                     out.write("%g  %g\n" % (data.x[i], 
                                             data.y[i]))
-            out.close()                   
+            out.close()  
+                             
+    def show_data1d(self, data, name):
+        """
+        Show data dialog
+        """   
+        text = data.__str__() 
+        text += 'Data Min Max:\n'
+        text += 'X_min = %s:  X_max = %s\n'% (min(data.x), max(data.x))
+        text += 'Y_min = %s:  Y_max = %s\n'% (min(data.y), max(data.y))
+        if data.dy != None:
+            text += 'dY_min = %s:  dY_max = %s\n'% (min(data.dy), max(data.dy))
+        text += '\nData Points:\n'
+        x_st = "X"
+        for index in range(len(data.x)):
+            if data.dy != None:
+                dy_val = data.dy[index]
+            else:
+                dy_val = 0.0
+            if data.dx != None:
+                dx_val = data.dx[index]
+            else:
+                dx_val = 0.0
+            if data.dxl != None:
+                if index == 0: x_st = "Xl"
+                dx_val = data.dxl[index]
+            elif data.dxw != None:
+                if index == 0: x_st = "Xw"
+                dx_val = data.dxw[index]
+            
+            if index == 0:
+                text += "<index> \t<X> \t<Y> \t<dY> \t<d%s>\n"% x_st
+            text += "%s \t%s \t%s \t%s \t%s\n" % (index,
+                                            data.x[index], 
+                                            data.y[index],
+                                            dy_val,
+                                            dx_val)
+        from pdfview import TextFrame
+        frame = TextFrame(None, -1, "Data Info: %s"% data.name, text) 
+        # put icon
+        self.put_icon(frame) 
+        frame.Show(True) 
             
     def save_data2d(self, data, fname):    
@@ -2609,5 +2651,54 @@
                 pass    
         dlg.Destroy() 
-                     
+                             
+    def show_data2d(self, data, name):
+        """
+        Show data dialog
+        """   
+
+        wx.PostEvent(self, StatusEvent(status = "Gathering Data2D Info.", 
+                                       type = 'start' ))
+        text = data.__str__() 
+        text += 'Data Min Max:\n'
+        text += 'I_min = %s\n'% min(data.data)
+        text += 'I_max = %s\n\n'% max(data.data)
+        text += 'Data (First 2501) Points:\n'
+        text += 'Data columns include err(I).\n'
+        text += 'ASCII data starts here.\n'
+        text += "<index> \t<Qx> \t<Qy> \t<I> \t<dI> \t<dQparal> \t<dQperp>\n"
+        di_val = 0.0
+        dx_val = 0.0
+        dy_val = 0.0
+        #mask_val = True
+        len_data = len(data.qx_data)
+        for index in xrange(0, len_data):
+            x_val = data.qx_data[index]
+            y_val = data.qy_data[index]
+            i_val = data.data[index]
+            if data.err_data != None: di_val = data.err_data[index]
+            if data.dqx_data != None: dx_val = data.dqx_data[index]
+            if data.dqy_data != None: dy_val = data.dqy_data[index]
+            #if data.mask != None: mask_val = data.mask[index] 
+  
+            text += "%s \t%s \t%s \t%s \t%s \t%s \t%s\n" % (index,
+                                            x_val, 
+                                            y_val,
+                                            i_val,
+                                            di_val,
+                                            dx_val,
+                                            dy_val)
+            # Takes too long time for typical data2d: Break here
+            if index >= 2500:
+                text += ".............\n"
+                break
+
+        from pdfview import TextFrame
+        frame = TextFrame(None, -1, "Data Info: %s"% data.name, text) 
+        # put icon
+        self.put_icon(frame)
+        frame.Show(True) 
+        wx.PostEvent(self, StatusEvent(status = "Data2D Info Displayed", 
+                                       type = 'stop' ))
+                                  
     def set_current_perspective(self, perspective):
         """
Index: sansguiframe/src/sans/guiframe/local_perspectives/plotting/Plotter1D.py
===================================================================
--- sansguiframe/src/sans/guiframe/local_perspectives/plotting/Plotter1D.py	(revision 4a9bce1b29ab3e2ca3c5b47242af0d3902048e28)
+++ sansguiframe/src/sans/guiframe/local_perspectives/plotting/Plotter1D.py	(revision 0aca693ae9af1757acabafd65f4011981950220b)
@@ -410,5 +410,8 @@
                         pass
                 plot_menu.AppendSeparator()
-    
+                
+            id = wx.NewId()
+            plot_menu.Append(id, "&DataInfo", name)
+            wx.EVT_MENU(self, id, self. _onDataShow)
             id = wx.NewId()
             plot_menu.Append(id, "&Save Points as a File", name)
@@ -657,4 +660,23 @@
             self.parent.save_data1d(data, default_name)
 
+                       
+    def _onDataShow(self, evt):
+        """
+        Show the data set in text
+        
+        :param evt: Menu event
+        
+        """
+        menu = evt.GetEventObject()
+        id = evt.GetId()
+        self.set_selected_from_menu(menu, id)
+        data = self.plots[self.graph.selected_plottable]
+        default_name = data.label
+        if default_name.count('.') > 0:
+            default_name = default_name.split('.')[0]
+        #default_name += "_out"
+        if self.parent != None:
+            self.parent.show_data1d(data, default_name)
+            
     def _add_more_tool(self):
         """
Index: sansguiframe/src/sans/guiframe/local_perspectives/plotting/Plotter2D.py
===================================================================
--- sansguiframe/src/sans/guiframe/local_perspectives/plotting/Plotter2D.py	(revision 2a0923667227c87ac2bb5e650e0e0ed0ca5fb50c)
+++ sansguiframe/src/sans/guiframe/local_perspectives/plotting/Plotter2D.py	(revision 0aca693ae9af1757acabafd65f4011981950220b)
@@ -316,4 +316,9 @@
         # saving data
         plot = self.data2D
+        id = wx.NewId()
+        name = plot.name
+        slicerpop.Append(id, "&Data Info" )
+        wx.EVT_MENU(self, id, self._onDataShow)
+
         id = wx.NewId()
         name = plot.name
@@ -761,3 +766,21 @@
             path = None
             self.parent.save_data2d(self.data2D, default_name)
-        
+            
+    def _onDataShow(self, evt):
+        """
+        Show the data set in text
+        
+        :param evt: Menu event
+        
+        """
+        menu = evt.GetEventObject()
+        id = evt.GetId()
+        self.set_selected_from_menu(menu, id)
+        data = self.plots[self.graph.selected_plottable]
+        default_name = data.label
+        if default_name.count('.') > 0:
+            default_name = default_name.split('.')[0]
+        #default_name += "_out"
+        if self.parent != None:
+            self.parent.show_data2d(data, default_name)
+        
Index: sansguiframe/src/sans/guiframe/pdfview.py
===================================================================
--- sansguiframe/src/sans/guiframe/pdfview.py	(revision 03a8b16bda7a7687a36b36ee87d1a39e1b481d5c)
+++ sansguiframe/src/sans/guiframe/pdfview.py	(revision 0aca693ae9af1757acabafd65f4011981950220b)
@@ -7,4 +7,50 @@
     from wx.lib.pdfwin import PDFWindow
 
+from wx.lib.scrolledpanel import ScrolledPanel
+STYLE = wx.TE_MULTILINE|wx.TE_READONLY|wx.SUNKEN_BORDER|wx.HSCROLL
+
+class TextPanel(ScrolledPanel):
+    """
+    Panel that contains the text
+    """
+    def __init__(self, parent, text=None):
+        """
+        """
+        ScrolledPanel.__init__(self, parent, id=-1)
+        self.SetupScrolling()
+        self.parent = parent
+        self.text = text
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        self.textctl = wx.TextCtrl(self, -1, size=(-1, -1), style=STYLE)
+        self.textctl.SetValue(self.text)
+        sizer.Add(self.textctl, proportion=1, flag=wx.EXPAND)
+        self.SetSizer(sizer)
+        self.SetAutoLayout(True)
+        wx.EVT_CLOSE(self.parent, self.OnClose)
+                
+    def OnClose(self, event):
+        """
+        Close panel
+        """
+        self.parent.Destroy()
+        
+class TextFrame(wx.Frame):
+    """
+    Frame for PDF panel
+    """
+    def __init__(self, parent, id, title, text):
+        """
+        Init
+        
+        :param parent: parent panel/container
+        :param path: full path of the pdf file 
+        """
+        # Initialize the Frame object
+        wx.Frame.__init__(self, parent, id, title,
+                          wx.DefaultPosition, wx.Size(600, 830))
+        # make an instance of the class
+        TextPanel(self, text) 
+        self.SetFocus()
+        
 class PDFPanel(wx.Panel):
     """
