Changeset d3d67f0 in sasview


Ignore:
Timestamp:
Jul 10, 2015 6:27:04 PM (9 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
a7aa5c7
Parents:
098f3d2
Message:

fix toolbar on bumps/tools graphs

Location:
src/sas/plottools
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/sas/plottools/PlotPanel.py

    r098f3d2 rd3d67f0  
    2222 
    2323from plottables import Graph 
    24 from plottables import Text 
    2524from TextDialog import TextDialog 
    2625from LabelDialog import LabelDialog 
     
    3332import numpy 
    3433 
    35 from sas.guiframe.events import StatusEvent 
     34from ..guiframe.events import StatusEvent 
     35from .toolbar import NavigationToolBar, PlotPrintout, bind 
    3636 
    3737def show_tree(obj, d=0): 
     
    8989            lo, hi = math.pow(10., lo), math.pow(10., hi) 
    9090    return (lo, hi) 
    91  
    92  
    93 def CopyImage(canvas): 
    94     """ 
    95     0: matplotlib plot 
    96     1: wx.lib.plot 
    97     2: other 
    98     """ 
    99     bmp = wx.BitmapDataObject() 
    100     bmp.SetBitmap(canvas.bitmap) 
    101  
    102     wx.TheClipboard.Open() 
    103     wx.TheClipboard.SetData(bmp) 
    104     wx.TheClipboard.Close() 
    10591 
    10692 
     
    334320        """ 
    335321        self.enable_toolbar = True 
    336         from toolbar import NavigationToolBar 
    337322        self.toolbar = NavigationToolBar(parent=self, canvas=self.canvas) 
     323        bind(self.toolbar, wx.EVT_TOOL, self.onResetGraph, id=self.toolbar._NTB2_RESET) 
     324        bind(self.toolbar, wx.EVT_TOOL, self.onContextMenu, id=self.toolbar._NTB2_HOME) 
    338325        self.toolbar.Realize() 
    339326        ## The 'SetToolBar()' is not working on MAC: JHC 
     
    19661953        self.toolbar.update() 
    19671954 
     1955    def onPrint(self, event=None): 
     1956        self.toolbar.print_figure(event) 
     1957 
    19681958    def onPrinterSetup(self, event=None): 
    19691959        """ 
     
    19881978 
    19891979            #now create the printpeview object 
    1990             _preview = wx.PrintPreview(PlotPrintout(self,'test'), 
    1991                                        PlotPrintout(self,'test')) 
     1980            _preview = wx.PrintPreview(PlotPrintout(self.canvas), 
     1981                                       PlotPrintout(self.canvas)) 
    19921982            #and tie it to a printpreview frame then show it 
    19931983            _frame = wx.PreviewFrame(_preview, _plot, "Print Preview", wx.Point(100, 100), wx.Size(600, 650)) 
     
    19991989            pass 
    20001990 
    2001     def onPrint(self, event=None): 
    2002         """ 
    2003         Matplotlib canvas can no longer print itself so using wx.Printer.   
    2004         Need therefore to also define a Printout object. 
     1991    def OnCopyFigureMenu(self, evt): 
     1992        """ 
     1993        Copy the current figure to clipboard 
    20051994        """ 
    20061995        try: 
    2007             _printer = wx.Printer() 
    2008             _printer.Print(self.canvas, PlotPrintout(self,'test'), True) 
    2009         except: 
    2010             traceback.print_exc() 
    2011             pass 
    2012  
    2013     def OnCopyFigureMenu(self, evt): 
    2014         """ 
    2015         Copy the current figure to clipboard 
    2016         """ 
    2017         try: 
    2018             CopyImage(self.canvas) 
     1996            self.toolbar.copy_figure() 
    20191997        except: 
    20201998            print "Error in copy Image" 
     
    20462024            self._drawn += 1 
    20472025        self.gui_repaint(drawDC=wx.PaintDC(self)) 
    2048  
    2049 class PlotPrintout(wx.Printout): 
    2050     """ 
    2051     Create the wx.Printout object for matplotlib figure from the PlotPanel. 
    2052     Provides the required OnPrintPage and HasPage overrides.  Other methods 
    2053     may be added/overriden in the future. 
    2054     :TODO: this needs LOTS of TLC .. but fixes immediate problem 
    2055     """ 
    2056     def __init__(self, figure, title, size=None, dpi=None, **kwargs): 
    2057         """ 
    2058         Initialize wx.Printout and get passed figure object 
    2059         """ 
    2060         wx.Printout.__init__(self) 
    2061         self.figure = figure 
    2062  
    2063     def OnPrintPage(self, page): 
    2064         """ 
    2065         Most rudimentry OnPrintPage overide.  instatiates a dc object, gets 
    2066         its size, gets the size of the figure object, scales it to the dc 
    2067         canvas size keeping the aspect ratio intact, then prints as bitmap 
    2068         """ 
    2069         _dc = self.GetDC() 
    2070         (_dcX, _dcY) = _dc.GetSizeTuple() 
    2071         (_bmpX,_bmpY) = self.figure.canvas.GetSize() 
    2072         _scale = min(_dcX/_bmpX, _dcY/_bmpY) 
    2073         _dc.SetUserScale(_scale, _scale) 
    2074         _dc.DrawBitmap(self.figure.canvas.bitmap, 0, 0, False,) 
    2075         return True 
    2076  
    2077     def GetPageInfo(self): 
    2078         """ 
    2079         just sets the page to 1 - no flexibility for now 
    2080         """ 
    2081         return (1, 1, 1, 1) 
  • src/sas/plottools/config.py

    r79492222 rd3d67f0  
    5858matplotlib.rcParams[param] = 0.05 
    5959matplotlib.rcParams['legend.numpoints'] = 1 
     60 
     61# this should happen after initial matplotlib configuration 
     62from .toolbar import NavigationToolBar 
     63from matplotlib.backends import backend_wxagg 
     64backend_wxagg.NavigationToolbar2WxAgg = NavigationToolBar 
     65 
     66# CRUFT: bumps 0.7.5.6 and older uses wrong toolbar 
     67backend_wxagg.NavigationToolbar2Wx = NavigationToolBar 
  • src/sas/plottools/toolbar.py

    r1170492 rd3d67f0  
    3131    def _init_toolbar(self): 
    3232        self._parent = self.canvas.GetParent() 
    33         _NTB2_HOME = wx.NewId() 
     33        self._NTB2_HOME = wx.NewId() 
    3434        self._NTB2_BACK = wx.NewId() 
    3535        self._NTB2_FORWARD = wx.NewId() 
    3636        self._NTB2_PAN = wx.NewId() 
    3737        self._NTB2_ZOOM = wx.NewId() 
    38         _NTB2_SAVE = wx.NewId() 
    39         _NTB2_PRINT = wx.NewId() 
    40         _NTB2_RESET = wx.NewId() 
     38        self._NTB2_SAVE = wx.NewId() 
     39        self._NTB2_PRINT = wx.NewId() 
     40        self._NTB2_RESET = wx.NewId() 
    4141 
    4242        # for mpl 1.2+ compatibility 
     
    5353        context_tip += '    right-click the data symbols.' 
    5454        context = wx.ArtProvider.GetBitmap(wx.ART_LIST_VIEW, wx.ART_TOOLBAR) 
    55         self.AddSimpleTool(_NTB2_HOME, context, context_tip, context_tip) 
     55        self.AddSimpleTool(self._NTB2_HOME, context, context_tip, context_tip) 
    5656 
    5757        self.InsertSeparator(1) 
     
    6969 
    7070        self.AddSeparator() 
    71         self.AddSimpleTool(_NTB2_SAVE, _load_bitmap('filesave.png'), 
     71        self.AddSimpleTool(self._NTB2_SAVE, _load_bitmap('filesave.png'), 
    7272                           'Save', 'Save plot contents to file') 
    7373 
    7474        print_bmp = wx.ArtProvider.GetBitmap(wx.ART_PRINT, wx.ART_TOOLBAR) 
    75         self.AddSimpleTool(_NTB2_PRINT, print_bmp, 'Print', 'Print plot') 
     75        self.AddSimpleTool(self._NTB2_PRINT, print_bmp, 'Print', 'Print plot') 
    7676 
    7777        reset_bmp = wx.ArtProvider.GetBitmap(wx.ART_GO_HOME, wx.ART_TOOLBAR) 
    78         self.AddSimpleTool(_NTB2_RESET, reset_bmp, 'Reset', 'Reset graph range') 
     78        self.AddSimpleTool(self._NTB2_RESET, reset_bmp, 'Reset', 'Reset graph range') 
    7979 
    80         bind(self, wx.EVT_TOOL, self.on_menu, id=_NTB2_HOME) 
     80        bind(self, wx.EVT_TOOL, self.context_menu, id=self._NTB2_HOME) 
    8181        bind(self, wx.EVT_TOOL, self.forward, id=self._NTB2_FORWARD) 
    8282        bind(self, wx.EVT_TOOL, self.back, id=self._NTB2_BACK) 
    8383        bind(self, wx.EVT_TOOL, self.zoom, id=self._NTB2_ZOOM) 
    8484        bind(self, wx.EVT_TOOL, self.pan, id=self._NTB2_PAN) 
    85         bind(self, wx.EVT_TOOL, self.save_figure, id=_NTB2_SAVE) 
    86         bind(self, wx.EVT_TOOL, self.on_print, id=_NTB2_PRINT) 
    87         bind(self, wx.EVT_TOOL, self.on_reset, id=_NTB2_RESET) 
     85        bind(self, wx.EVT_TOOL, self.save_figure, id=self._NTB2_SAVE) 
     86        bind(self, wx.EVT_TOOL, self.print_figure, id=self._NTB2_PRINT) 
     87        bind(self, wx.EVT_TOOL, self.home, id=self._NTB2_RESET) 
    8888 
    8989        self.Realize() 
    9090 
    9191    def on_menu(self, event): 
    92         """ 
    93             Plot menu 
    94         """ 
    9592        try: 
    9693            self._parent.onToolContextMenu(event=event) 
     
    9895            logging.error("Plot toolbar could not show menu") 
    9996 
    100     def on_reset(self, event): 
     97    def context_menu(self, event): 
    10198        """ 
    102             Reset plot 
     99        Default context menu for a plot panel 
     100 
    103101        """ 
     102        # Slicer plot popup menu 
     103        wx_id = wx.NewId() 
     104        popup = wx.Menu() 
     105        popup.Append(wx_id, '&Save image', 'Save image as PNG') 
     106        wx.EVT_MENU(self, wx_id, self.save_figure) 
     107 
     108        wx_id = wx.NewId() 
     109        popup.Append(wx_id, '&Print image', 'Print image ') 
     110        wx.EVT_MENU(self, wx_id, self.print_figure) 
     111 
     112        wx_id = wx.NewId() 
     113        popup.Append(wx_id, '&Copy to Clipboard', 'Copy image to the clipboard') 
     114        wx.EVT_MENU(self, wx_id, self.copy_figure) 
     115 
     116        # Show the popup menu relative to the location of the toolbar 
     117        self.PopupMenu(popup, (0,0)) 
     118 
     119 
     120    def print_figure(self, event): 
    104121        try: 
    105             self._parent.onResetGraph(event=event) 
     122            _printer = wx.Printer() 
     123            _printer.Print(self.canvas, PlotPrintout(self.canvas), True) 
    106124        except: 
    107             logging.error("Plot toolbar could not reset plot") 
     125            import traceback 
     126            logging.error(traceback.format_exc()) 
    108127 
    109     def on_print(self, event): 
     128    def copy_figure(self, event): 
     129        copy_image_to_clipboard(self.canvas) 
     130 
     131class PlotPrintout(wx.Printout): 
     132    """ 
     133    Create the wx.Printout object for matplotlib figure from the PlotPanel. 
     134    Provides the required OnPrintPage and HasPage overrides.  Other methods 
     135    may be added/overriden in the future. 
     136    :TODO: this needs LOTS of TLC .. but fixes immediate problem 
     137    """ 
     138    def __init__(self, canvas): 
    110139        """ 
    111             Print 
     140        Initialize wx.Printout and get passed figure object 
    112141        """ 
    113         try: 
    114             self._parent.onPrint(event=event) 
    115         except: 
    116             logging.error("Plot toolbar could not print") 
     142        wx.Printout.__init__(self) 
     143        self.canvas = canvas 
     144 
     145    def OnPrintPage(self, page): 
     146        """ 
     147        Most rudimentry OnPrintPage overide.  instatiates a dc object, gets 
     148        its size, gets the size of the figure object, scales it to the dc 
     149        canvas size keeping the aspect ratio intact, then prints as bitmap 
     150        """ 
     151        _dc = self.GetDC() 
     152        (_dcX, _dcY) = _dc.GetSizeTuple() 
     153        (_bmpX,_bmpY) = self.canvas.GetSize() 
     154        _scale = min(_dcX/_bmpX, _dcY/_bmpY) 
     155        _dc.SetUserScale(_scale, _scale) 
     156        _dc.DrawBitmap(self.canvas.bitmap, 0, 0, False,) 
     157        return True 
     158 
     159    def GetPageInfo(self): 
     160        """ 
     161        just sets the page to 1 - no flexibility for now 
     162        """ 
     163        return (1, 1, 1, 1) 
     164 
     165 
     166def copy_image_to_clipboard(canvas): 
     167    bmp = wx.BitmapDataObject() 
     168    bmp.SetBitmap(canvas.bitmap) 
     169 
     170    wx.TheClipboard.Open() 
     171    wx.TheClipboard.SetData(bmp) 
     172    wx.TheClipboard.Close() 
     173 
     174 
Note: See TracChangeset for help on using the changeset viewer.