source: trunk/python/customgui_qt4agg.py @ 2172

Last change on this file since 2172 was 2172, checked in by Kana Sugimoto, 13 years ago

New Development: No

JIRA Issue: Yes (CAS-2963/ATNF-240)

Ready for Test: Yes

Interface Changes: No

What Interface Changed:

Test Programs: comare statistic result of interactive operation with command line none

Put in Release Notes: No

Module(s): asapplotter, sdplot

Description:

statistic mode in ASAP plotter now prints statistics (max, min, median, mean, sum, std dev) of
spectra only in the selected subplot.


File size: 33.4 KB
Line 
1import os
2import matplotlib, numpy
3from asap.logging import asaplog, asaplog_post_dec
4from matplotlib.patches import Rectangle
5from asap.parameters import rcParams
6from asap._asap import stmath
7from asap.customgui_base import *
8
9import PyQt4 as qt
10
11######################################
12##    Add CASA custom toolbar       ##
13######################################
14class CustomToolbarQT4Agg(CustomToolbarCommon,  qt.QtGui.QToolBar):
15    def __init__(self,parent):
16        from asap.asapplotter import asapplotter
17        if not isinstance(parent,asapplotter):
18            return False
19        if not parent._plotter:
20            return False
21        self._p = parent._plotter
22        self.figmgr = self._p.figmgr
23        self.canvas = self.figmgr.canvas
24        self.mode = ''
25        self.button = True
26        self.pagecount = None
27        CustomToolbarCommon.__init__(self,parent)
28        self.notewin = NotationWindowQT4Agg(master=self.canvas)
29        self._add_custom_toolbar()
30
31    def _add_custom_toolbar(self):
32        qt.QtGui.QToolBar.__init__(self,parent=self.figmgr.window)
33        self.figmgr.window.addToolBar(qt.QtCore.Qt.BottomToolBarArea,self)
34        self.bNote = self._NewButton(master=self,
35                                     text='notation',
36                                     command=self.modify_note,
37                                     balloon="add note on plot")
38        self.bNote.setCheckable(True)
39
40        self.bStat = self._NewButton(master=self,
41                                     text='statistics',
42                                     command=self.stat_cal,
43                                     balloon="calculate statistics")
44        self.bStat.setCheckable(True)
45
46        # page change oparations
47        frPage = qt.QtGui.QWidget(parent=self,flags=qt.QtCore.Qt.Tool)
48        loPage = qt.QtGui.QHBoxLayout(self)
49        loPage.addStretch(1)
50        self.lPagetitle = qt.QtGui.QLabel('Page:',parent=frPage)
51        self.lPagetitle.setMargin(5)
52        loPage.addWidget(self.lPagetitle)
53        self.pagecount = qt.QtGui.QLabel(parent=frPage)
54        self.pagecount.setStyleSheet("background-color: white")
55        self.pagecount.setMargin(3)
56        self.pagecount.setText('   1')
57        loPage.addWidget(self.pagecount)
58       
59        self.bNext = self._NewButton(master=frPage,
60                                     text=' + ',
61                                     command=self.next_page,
62                                     addit=False,
63                                     balloon="plot next page")
64        loPage.addWidget(self.bNext)
65        self.bPrev = self._NewButton(master=frPage,
66                                     text=' - ',
67                                     command=self.prev_page,addit=False,
68                                     balloon="plot previous page")
69        loPage.addWidget(self.bPrev)
70        frPage.setLayout(loPage)
71        self.addWidget(frPage)
72
73        self.bQuit = self._NewButton(master=self,
74                                     text='Quit',
75                                     command=self.quit,
76                                     balloon="Close window")
77
78        self.pagecount.setText(' '*4)
79
80        self.disable_button()
81        return
82
83    def _NewButton(self, master, text, command, balloon=None,addit=True):
84        b = qt.QtGui.QPushButton(text,parent=master)
85        if balloon: b.setToolTip(balloon)
86        if addit: master.addWidget(b)
87        master.connect(b,qt.QtCore.SIGNAL('clicked()'),command)
88        return b
89
90    def show_pagenum(self,pagenum,formatstr):
91        self.pagecount.setText(formatstr % (pagenum))
92
93    def spec_show(self):
94        if not self.figmgr.toolbar.mode == '' or not self.button: return
95        self.figmgr.toolbar.set_message('spec value: drag on a spec')
96        if self.mode == 'spec': return
97        self.mode = 'spec'
98        self.notewin.close_widgets()
99        self.__disconnect_event()
100        self._p.register('button_press',self._select_spectrum)
101
102    def stat_cal(self):
103        if not self.figmgr.toolbar.mode == '' or not self.button:
104            # Get back button status BEFORE clicked
105            self.bStat.setChecked(not self.bStat.isChecked())
106            return
107        if self.mode == 'stat':
108            # go back to spec mode
109            self.bStat.setChecked(False)
110            self.bStat.setToolTip("calculate statistics")
111            self.spec_show()
112            return
113        self.figmgr.toolbar.set_message('statistics: select a region')
114        self.bStat.setChecked(True)
115        self.bStat.setToolTip("Back to spec value mode")
116        self.bNote.setChecked(False)
117        self.bNote.setToolTip("add note on plot")
118        self.mode = 'stat'
119        self.notewin.close_widgets()
120        self.__disconnect_event()
121        self._p.register('button_press',self._single_mask)
122
123    def modify_note(self):
124        if not self.figmgr.toolbar.mode == '':
125            # Get back button status BEFORE clicked
126            self.bNote.setChecked(not self.bNote.isChecked())
127            return
128        self.figmgr.toolbar.set_message('text: select a position/text')
129        if self.mode == 'note':
130            self.bNote.setChecked(False)
131            self.bNote.setToolTip("add note on plot")
132            self.mode = 'none'
133            self.spec_show()
134            return
135        self.bStat.setChecked(False)
136        self.bStat.setToolTip("calculate statistics")
137        self.bNote.setChecked(True)
138        self.bNote.setToolTip("Back to spec value mode")
139        self.mode = 'note'
140        self.__disconnect_event()
141        self._p.register('button_press',self._mod_note)
142
143    def quit(self):
144        self.__disconnect_event()
145        self.disable_button()
146        self._p.quit()
147
148    def enable_button(self):
149        if self.button: return
150        self.bStat.setEnabled(True)
151        self.button = True
152        self.spec_show()
153
154    def disable_button(self):
155        if not self.button: return
156        self.bStat.setChecked(False)
157        self.bStat.setDisabled(True)
158        self.button = False
159        self.mode = ''
160        self.__disconnect_event()
161
162    def enable_next(self):
163        self.bNext.setEnabled(True)
164
165    def disable_next(self):
166        self.bNext.setDisabled(True)
167
168    def enable_prev(self):
169        self.bPrev.setEnabled(True)
170
171    def disable_prev(self):
172        self.bPrev.setDisabled(True)
173
174    # pause buttons for slow operations
175    def _pause_buttons(self,operation="end",msg=""):
176        buttons = ["bStat","bNote","bQuit"]
177        if operation == "start":
178            enable = False
179        else:
180            enable = True
181        for btn in buttons:
182            getattr(self,btn).setEnabled(enable)
183        self.figmgr.toolbar.set_message(msg)
184
185    def delete_bar(self):
186        self.__disconnect_event()
187        self.destroy()
188
189    def __disconnect_event(self):
190        self._p.register('button_press',None)
191        self._p.register('button_release',None)
192
193    def _draw_span(self,axes,x0,x1,**kwargs):
194        height = self._p.figure.bbox.height
195        y1 = height - axes.bbox.y1
196        h = axes.bbox.height
197        w = abs(x1 - x0)
198        rect = [ int(val) for val in min(x0,x1), y1, w, h ]
199        self._p.canvas.drawRectangle( rect )
200        # nothing is returned by drawRectangle
201        return None
202
203    def _remove_span(self,span):
204        # Nothing to do with remove. just refresh (call only for)
205        self.canvas.draw()
206
207
208
209######################################
210##    Notation box window           ##
211######################################
212class NotationWindowQT4Agg(NotationWindowCommon):
213    """
214    Backend based class to create widgets to add, modify, or delete
215    note on the plot.
216
217    Note:
218    Press LEFT-mouse button on the plot to ADD a note on the canvas.
219    A notation window will be loaded for specifying note string and
220    anchor. The note will be anchored on a position in whether figure-
221    (0-1 relative in a figure), panel- (0-1 relative in a plot axes),
222    or data-coordinate (data value in a plot axes).
223    Press RIGHT-mouse button on a note to MODIFY/DELETE it. A cascade
224    menu will be displayed and you can select an operation.
225    """
226    def __init__(self,master=None):
227        self.parent = master
228        NotationWindowCommon.__init__(self,master=master)
229        self.anchval = None
230        self.textwin = self._create_textwindow(master=None)
231        self.menu = self._create_modmenu(master=self.parent)
232
233    ### Notation window widget
234    def _create_textwindow(self,master=None):
235        """Create notation window widget and iconfy it"""
236        #twin = qt.QtGui.QWidget(parent=master, flags=qt.QtCore.Qt.Popup)
237        twin = qt.QtGui.QWidget(parent=master, flags=qt.QtCore.Qt.Dialog)
238        twin.setWindowTitle("Notation")
239        self.textbox = self._NotationBox(parent=twin)
240        radiobox = self._AnchorRadio(parent=twin)
241        self.actionbs = self._ActionButtons(parent=twin)
242        vbox = qt.QtGui.QVBoxLayout(twin)
243        vbox.addWidget(self.textbox)
244        vbox.addWidget(radiobox)
245        vbox.addLayout(self.actionbs)
246        twin.setLayout(vbox)
247        #twin.setCentralWidget(self.textbox)
248        twin.hide()
249        return twin
250
251    def _NotationBox(self,parent=None):
252        textbox = qt.QtGui.QPlainTextEdit(parent=parent)
253        textbox.setStyleSheet("background-color: white")
254        fmetric = qt.QtGui.QFontMetrics(textbox.currentCharFormat().font())
255        textbox.resize(fmetric.width("A")*20+fmetric.leading()*2,
256                       fmetric.height()*2+fmetric.ascent()+fmetric.descent())
257        del fmetric
258        textbox.setMinimumSize(textbox.size())
259        textbox.setUndoRedoEnabled(True)
260        textbox.setMidLineWidth(3)
261        textbox.setFrameShadow(qt.QtGui.QFrame.Sunken)
262        textbox.setCursor(qt.QtCore.Qt.IBeamCursor)
263        textbox.setFocus()
264        return textbox
265
266    def _AnchorRadio(self,parent=None):
267        # Returns a QGoupBox object which includes radio butons to
268        # select an anchor
269        anchbox = qt.QtGui.QGroupBox("anchor",parent=parent)
270        self.radio = qt.QtGui.QButtonGroup(parent=anchbox)
271        self.rFig = self._NewRadioButton(anchbox,"figure",\
272                                         bgr=self.radio,value=0,\
273                                         balloon="a fixed position in figure")
274        self.rAxis = self._NewRadioButton(anchbox,"panel",\
275                                          bgr=self.radio,value=1,\
276                                          balloon="a fixed realtive position in subplot")
277        self.rData = self._NewRadioButton(anchbox,"data",\
278                                          bgr=self.radio,value=2,\
279                                          balloon="a fixed data position in subplot")
280        hbox = qt.QtGui.QHBoxLayout(anchbox)
281        hbox.addWidget(self.rFig)
282        hbox.addWidget(self.rAxis)
283        hbox.addWidget(self.rData)
284        anchbox.setLayout(hbox)
285        # set initial selection "figure"
286        self.rFig.setChecked(True)
287        self.radio.setExclusive(True)
288        self.anchval = self.radio.checkedId()
289        return anchbox
290
291    def _NewRadioButton(self,parent,text,balloon=None,bgr=None,value=None):
292        rb= qt.QtGui.QRadioButton(text,parent=parent)
293        if bgr:
294            if value is not None:
295                bgr.addButton(rb,value)
296            else:
297                bgr.addButton(rb)
298        if balloon: rb.setToolTip(balloon)
299        return rb
300
301    def _enable_radio(self):
302        """Enable 'panel' and 'data' radio button"""
303        self.rAxis.setEnabled(True)
304        self.rData.setEnabled(True)
305        # select Figure as the default value
306        self.rFig.setChecked(True)
307        self.anchval = self.radio.checkedId()
308
309    def _reset_radio(self):
310        """Disable 'panel' and 'data' radio button"""
311        self.rAxis.setDisabled(True)
312        self.rData.setDisabled(True)
313        self.rFig.setEnabled(True)
314        # select Figure as the default value
315        self.rFig.setChecked(True)
316        self.anchval = self.radio.checkedId()
317
318    def _select_radio(self,selection):
319        """Select a specified radio button"""
320        if not selection in self.anchors:
321            return
322        if selection == "data":
323            self.rData.setChecked(True)
324        elif selection == "axes":
325            self.rAxis.setChecked(True)
326        else:
327            self.rFig.setChecked(True)
328        self.anchval = self.radio.checkedId()
329
330    def _get_anchval(self):
331        """Returns a integer of a selected radio button"""
332        self.anchval = self.radio.checkedId()
333        return self.anchval
334
335    def _get_note(self):
336        """Returns a note string specified in the text box"""
337        return str(self.textbox.toPlainText())
338
339    def _clear_textbox(self):
340        """Clear the text box"""
341        self.textbox.clear()
342
343    def _set_note(self,note=None):
344        """Set a note string to the text box"""
345        self._clear_textbox()
346        if len(note) >0:
347            self.textbox.setPlainText(note)
348
349    def _ActionButtons(self,parent=None):
350        # Returns a layout object which includes "cancel" and "print" buttons
351        actbuts = qt.QtGui.QHBoxLayout()
352        bCancel = self._NewButton(parent,"cancel",self._cancel_text,\
353                                  addit=False,\
354                                  balloon="cancel printing/modifying")
355        bPrint = self._NewButton(parent,"print", self._print_text,\
356                                 addit=False,\
357                                 balloon="print text on plot")
358        actbuts.addWidget(bCancel)
359        actbuts.addWidget(bPrint)
360        return actbuts
361
362    def _NewButton(self, parent, text, command, balloon=None, addit=True):
363        b = qt.QtGui.QPushButton(text,parent=parent)
364        if balloon: b.setToolTip(balloon)
365        if addit: parent.addWidget(b)
366        parent.connect(b,qt.QtCore.SIGNAL('clicked()'),command)
367        return b
368
369    def _cancel_text(self):
370        """
371        Cancel adding/modifying a note and close notaion window.
372        called when 'cancel' is selected.
373        """
374        self.close_textwindow()
375
376    def _print_text(self):
377        """
378        Add/Modify a note. Called when 'print' is selected on the
379        notation window.
380        """
381        self.print_text()
382        self.close_textwindow()
383
384    def load_textwindow(self,event):
385        """
386        Load text window at a event position to add a note on a plot.
387        Parameter:
388            event:   an even object to specify the position to load
389                     text window.
390        """
391        self.close_modmenu()
392        if event.canvas != self.parent:
393            raise RuntimeError, "Got invalid event!"
394
395        self.event = event
396        is_ax = (event.inaxes != None)
397        (xpix, ypix) = self._disppix2screen(event.x, event.y)
398        offset = 5
399        self.show_textwindow(xpix+offset,ypix+offset,enableaxes=is_ax)
400
401    def show_textwindow(self,xpix,ypix,basetext=None,enableaxes=False):
402        """
403        Load text window at a position of screen to add a note on a plot.
404        Parameters:
405            xpix, ypix:   a pixel position from Upper-left corner
406                          of the screen.
407            basetext:     None (default) or any string.
408                          A string to be printed on text box when loaded.
409            enableaxes:   False (default) or True.
410                          If True, 'panel' & 'data' radio button is enabled.
411        """
412        if not self.textwin: return
413        self._reset_radio()
414        if enableaxes:
415            self._enable_radio()
416        self.textwin.activateWindow()
417        h = self.textwin.minimumHeight()
418        w = self.textwin.minimumWidth()
419        self.textwin.resize(w,h)
420        self.textwin.move(xpix,ypix)
421        self.textbox.setFocus()
422        self.textwin.raise_()
423        self.textwin.show()
424        if w*h <= 1: # Initial load
425            self.textwin.setMinimumSize(self.textwin.size())
426
427    def close_textwindow(self):
428        """Close text window."""
429        self.seltext = {}
430        self._reset_radio()
431        self._clear_textbox()
432        self.textwin.hide()
433
434
435    ### Modify/Delete menu widget
436    def _create_modmenu(self,master=None):
437        """Create modify/delete menu widget"""
438        if master:
439            self.parent = master
440        if not self.parent:
441            return False
442        menu = qt.QtGui.QMenu(parent=self.parent)
443        menu.setTearOffEnabled(False)
444        menu.addAction("Modify",self._modify_note)
445        menu.addAction("Delete",self._delnote_dialog)
446        return menu
447
448    def load_modmenu(self,event):
449        """
450        Load cascade menu at a event position to modify or delete
451        selected text.
452        Parameter:
453            event:  an even object to specify the position to load
454                    text window.
455        """
456        self.close_textwindow()
457        self.seltext = self._get_selected_text(event)
458        if len(self.seltext) == 3:
459            canvas = event.canvas
460            corig = canvas.mapToGlobal(qt.QtCore.QPoint(0,0))
461            xpixs = corig.x() + int(event.x)
462            ypixs = corig.y() + canvas.height() - int(event.y)
463            self.menu.activateWindow()
464            self.menu.move(xpixs,ypixs)
465            self.menu.show()
466
467    def close_modmenu(self):
468        """Close cascade menu."""
469        self.seltext = {}
470        self.menu.hide()
471
472    ### load text window for modification
473    def _modify_note(self):
474        """helper function to load text window to modify selected note"""
475        textobj = self.seltext['textobj']
476        (xtx, ytx) = textobj._get_xy_display()
477        is_ax = (self.seltext['anchor'] != 'figure')
478        if not is_ax:
479            # previous anchor is figure
480            pos = textobj.get_position()
481            is_ax = (self._get_axes_from_pos(pos,self.canvas) != None)
482
483        (xpix, ypix) = self._disppix2screen(xtx,ytx)
484        offset = int(textobj.get_size())*2
485        self.show_textwindow(xpix,ypix+offset,basetext=textobj.get_text(),\
486                             enableaxes=is_ax)
487        self._select_radio(self.seltext['anchor'])
488        self._set_note(textobj.get_text())
489
490    ### close all widgets
491    def close_widgets(self):
492        """Close note window and menu"""
493        self.close_textwindow()
494        self.close_modmenu()
495
496    ### dialog to confirm deleting note
497    def _delnote_dialog(self):
498        """Load dialog to confirm deletion of the text"""
499        remind = "Delete text?\n '"+self.seltext['textobj'].get_text()+"'"
500        from PyQt4.QtGui import QMessageBox as mbox
501        answer = mbox.question(self.parent,"Delete?",remind,
502                               buttons = mbox.Ok | mbox.Cancel,
503                               defaultButton=mbox.Cancel)
504        if answer == mbox.Ok:
505            self.delete_note()
506        else:
507            self.cancel_delete()
508
509    ### helper functions
510    def _disppix2screen(self,xpixd,ypixd):
511        """
512        helper function to calculate a pixel position form Upper-left
513        corner of the SCREEN from a pixel position (xpixd, ypixd)
514        from Lower-left of the CANVAS (which, e.g., event.x/y returns)
515
516        Returns:
517            (x, y):  pixel position from Upper-left corner of the SCREEN.
518        """
519        corig = self.parent.mapToGlobal(qt.QtCore.QPoint(0,0))
520        xpixs = corig.x() + xpixd
521        ypixs = corig.y() + self.parent.height() - ypixd
522        return (int(xpixs), int(ypixs))
523       
524
525
526
527
528
529###########################################
530##    Add CASA custom Flag toolbar       ##
531###########################################
532# class CustomFlagToolbarQT4Agg(CustomFlagToolbarCommon,  qt.QtGui.QToolBar):
533#     def __init__(self,parent):
534#         from asap.asapplotter import asapplotter
535#         if not isinstance(parent,asapplotter):
536#             return False
537#         if not parent._plotter:
538#             return False
539#         self._p = parent._plotter
540#         self.figmgr = self._p.figmgr
541#         self.canvas = self.figmgr.canvas
542#         self.mode = ''
543#         self.button = True
544#         self.pagecount = None
545#         CustomFlagToolbarCommon.__init__(self,parent)
546#         self.notewin=NotationWindowQT4Agg(master=self.canvas)
547#         self._add_custom_toolbar()
548
549#     def _add_custom_toolbar(self):
550#         qt.QtGui.QToolBar.__init__(self,parent=self.figmgr.window)
551#         self.figmgr.window.addToolBar(qt.QtCore.Qt.BottomToolBarArea,self)
552# #         Tk.Frame.__init__(self,master=self.figmgr.window)
553#         self.bRegion = self._NewButton(master=self,
554#                                        text='region',
555#                                        command=self.select_region,
556#                                        balloon="select channel regions")
557#         self.bRegion.setCheckable(True)
558       
559#         self.bPanel = self._NewButton(master=self,
560#                                       text='panel',
561#                                       command=self.select_panel,
562#                                       balloon="select subplots")
563#         self.bPanel.setCheckable(True)
564
565#         self.bClear = self._NewButton(master=self,
566#                                       text='clear',
567#                                       command=self.cancel_select,
568#                                       balloon="clear selections")
569
570#         self.bFlag = self._NewButton(master=self,
571#                                      text='flag',
572#                                      command=self.flag,
573#                                      balloon="flag selections")
574
575#         self.bUnflag = self._NewButton(master=self,
576#                                        text='unflag',
577#                                        command=self.unflag,
578#                                        balloon="unflag selections")
579
580#         self.bStat = self._NewButton(master=self,
581#                                      text='statistics',
582#                                      command=self.stat_cal,
583#                                      balloon="print statistics of selections")
584
585#         self.bNote = self._NewButton(master=self,
586#                                      text='notation',
587#                                      command=self.modify_note,
588#                                      balloon="add note on plot")
589#         self.bNote.setCheckable(True)
590
591#         # page change oparations
592#         frPage = qt.QtGui.QWidget(parent=self,flags=qt.QtCore.Qt.Tool)
593#         loPage = qt.QtGui.QHBoxLayout(self)
594#         loPage.addStretch(1)
595#         self.lPagetitle = qt.QtGui.QLabel('Page:',parent=frPage)
596#         self.lPagetitle.setMargin(5)
597#         loPage.addWidget(self.lPagetitle)
598#         self.pagecount = qt.QtGui.QLabel(parent=frPage)
599#         self.pagecount.setStyleSheet("background-color: white")
600#         self.pagecount.setMargin(3)
601#         self.pagecount.setText('   1')
602#         loPage.addWidget(self.pagecount)
603# #         frPage = Tk.Frame(master=self,borderwidth=2,relief=Tk.GROOVE)
604# #         frPage.pack(ipadx=2,padx=10,side=Tk.RIGHT)
605# #         self.lPagetitle = Tk.Label(master=frPage,text='Page:',padx=5)
606# #                                    #width=8,anchor=Tk.E,padx=5)
607# #         self.lPagetitle.pack(side=Tk.LEFT)
608# #         self.pagecount = Tk.StringVar(master=frPage)
609# #         self.lPagecount = Tk.Label(master=frPage,
610# #                                    textvariable=self.pagecount,
611# #                                    padx=5,bg='white')
612# #         self.lPagecount.pack(side=Tk.LEFT,padx=3)
613
614#         self.bNext = self._NewButton(master=frPage,
615#                                      text='+',
616#                                      command=self.next_page,
617#                                      addit=False,
618#                                      balloon="plot next page")
619#         loPage.addWidget(self.bNext)
620#         self.bPrev = self._NewButton(master=frPage,
621#                                      text='-',
622#                                      command=self.prev_page,
623#                                      addit=False,
624#                                      balloon="plot previous page")
625#         loPage.addWidget(self.bPrev)
626#         frPage.setLayout(loPage)
627#         self.addWidget(frPage)
628
629# #         self.bNext=self._NewButton(master=frPage,
630# #                                    text=' + ',
631# #                                    #imagename="hand.ppm",
632# #                                    command=self.next_page)
633# #         self.bPrev=self._NewButton(master=frPage,
634# #                                    text=' - ',
635# #                                    command=self.prev_page)
636
637#         self.bQuit = self._NewButton(master=self,
638#                                      text='Quit',
639#                                      #imagename="stock_close.ppm",
640#                                      command=self.quit,
641#                                      balloon="Close window")
642
643# #         if os.uname()[0] != 'Darwin':
644# #             self.bPrev.config(padx=5)
645# #             self.bNext.config(padx=5)
646
647#         self.pagecount.setText(' '*4)
648# #         self.pack(side=Tk.BOTTOM,fill=Tk.BOTH)
649# #         self.pagecount.set(' '*4)
650
651#         self.disable_button()
652#         return
653
654#     def _NewButton(self, master, text, command, balloon=None,addit=True,imagename=None):
655# #     def _NewButton(self, master, text, command, side=Tk.LEFT,imagename=None):
656#         img = None
657#         if imagename:
658#             imagename = os.path.join(matplotlib.rcParams['datapath'], 'images', imagename)
659# #             img = Tk.PhotoImage(master=master, file=imagename)
660
661#         b = qt.QtGui.QPushButton(text,parent=master)
662#         if balloon: b.setToolTip(balloon)
663#         if addit: master.addWidget(b)
664#         master.connect(b,qt.QtCore.SIGNAL('clicked()'),command)
665# #         if os.uname()[0] == 'Darwin':
666# #             b = Tk.Button(master=master, text=text, image=img,
667# #                           command=command)
668# #             if img: b.image = img
669# #         else:
670# #             b = Tk.Button(master=master, text=text, image=img, padx=2, pady=2,
671# #                           command=command)
672# #             if img: b.image = img
673# #         b.pack(side=side)
674#         return b
675
676#     def show_pagenum(self,pagenum,formatstr):
677#         self.pagecount.setText(formatstr % (pagenum))
678# #         self.pagecount.set(formatstr % (pagenum))
679
680#     def spec_show(self):
681#         if not self.figmgr.toolbar.mode == '' or not self.button: return
682#         self.figmgr.toolbar.set_message('spec value: drag on a spec')
683#         if self.mode == 'spec': return
684#         self.mode = 'spec'
685#         self.notewin.close_widgets()
686#         self.__disconnect_event()
687#         self._p.register('button_press',self._select_spectrum)
688
689#     def modify_note(self):
690#         if not self.figmgr.toolbar.mode == '':
691#             # Get back button status BEFORE clicked
692#             self.bNote.setChecked(not self.bNote.isChecked())
693#             return
694#         self.figmgr.toolbar.set_message('text: select a position/text')
695#         if self.mode == 'note':
696#             self.bNote.setChecked(False)
697#             self.bNote.setToolTip("add note on plot")
698# #             self.bNote.config(relief='raised')
699#             self.mode = 'none'
700#             self.spec_show()
701#             return
702#         self.bNote.setChecked(True)
703#         self.bNote.setToolTip("Back to spec value mode")
704#         self.bRegion.setChecked(False)
705#         self.bRegion.setToolTip("select channel regions")
706#         self.bPanel.setChecked(False)
707#         self.bPanel.setToolTip("select subplots")
708# #         self.bNote.config(relief='sunken')
709# #         self.bRegion.config(relief='raised')
710# #         self.bPanel.config(relief='raised')
711#         self.mode = 'note'
712#         self.__disconnect_event()
713#         self._p.register('button_press',self._mod_note)
714
715#     def select_region(self):
716#         if not self.figmgr.toolbar.mode == '' or not self.button:
717#             # Get back button status BEFORE clicked
718#             self.bRegion.setChecked(not self.bRegion.isChecked())
719#         self.figmgr.toolbar.set_message('select regions: click at start and end channels')
720#         if self.mode == 'region':
721#             self.bRegion.setChecked(False)
722#             self.bRegion.setToolTip("select channel regions")
723# #             self.bRegion.config(relief='raised')
724#             self.mode = 'none'
725#             self.spec_show()
726#             return
727#         self.bNote.setChecked(False)
728#         self.bNote.setToolTip("add note on plot")
729#         self.bRegion.setChecked(True)
730#         self.bRegion.setToolTip("Back to spec value mode")
731#         self.bPanel.setChecked(False)
732#         self.bPanel.setToolTip("select subplots")
733# #         self.bNote.config(relief='raised')
734# #         self.bRegion.config(relief='sunken')
735# #         self.bPanel.config(relief='raised')
736#         self.mode = 'region'
737#         self.notewin.close_widgets()
738#         self.__disconnect_event()
739#         self._p.register('button_press',self._add_region)
740
741#     def select_panel(self):
742#         if not self.figmgr.toolbar.mode == '' or not self.button:
743#             # Get back button status BEFORE clicked
744#             self.bPanel.setChecked(not self.bPanel.isChecked())
745#             return
746#         self.figmgr.toolbar.set_message('select spectra: click on subplots')
747#         if self.mode == 'panel':
748#             self.bPanel.setChecked(False)
749#             self.bPanel.setToolTip("select subplots")
750# #             self.bPanel.config(relief='raised')
751#             self.mode = 'none'
752#             self.spec_show()
753#             return
754#         self.bNote.setChecked(False)
755#         self.bNote.setToolTip("add note on plot")
756#         self.bRegion.setChecked(False)
757#         self.bRegion.setToolTip("select channel regions")
758#         self.bPanel.setChecked(True)
759#         self.bPanel.setToolTip("Back to spec value mode")
760# #         self.bNote.config(relief='raised')
761# #         self.bRegion.config(relief='raised')
762# #         self.bPanel.config(relief='sunken')
763#         self.mode = 'panel'
764#         self.notewin.close_widgets()
765#         self.__disconnect_event()
766#         self._p.register('button_press',self._add_panel)
767
768#     def quit(self):
769#         self.__disconnect_event()
770#         self.disable_button()
771#         self._p.unmap()
772# #         self.figmgr.window.wm_withdraw()
773
774#     def enable_button(self):
775#         if self.button: return
776#         self.bRegion.setEnabled(True)
777#         self.bPanel.setEnabled(True)
778#         self.bClear.setEnabled(True)
779#         self.bFlag.setEnabled(True)
780#         self.bUnflag.setEnabled(True)
781#         self.bStat.setEnabled(True)
782# #         self.bRegion.config(state=Tk.NORMAL)
783# #         self.bPanel.config(state=Tk.NORMAL)
784# #         self.bClear.config(state=Tk.NORMAL)
785# #         self.bFlag.config(state=Tk.NORMAL)
786# #         self.bUnflag.config(state=Tk.NORMAL)
787# #         self.bStat.config(state=Tk.NORMAL)
788#         self.button = True
789#         self.spec_show()
790
791#     def disable_button(self):
792#         ## disable buttons which don't work for plottp
793#         if not self.button: return
794#         self.bRegion.setChecked(False)
795#         self.bRegion.setToolTip("select channel regions")
796#         self.bPanel.setChecked(False)
797#         self.bPanel.setToolTip("select subplots")
798# #         self.bRegion.config(relief='raised')
799# #         self.bPanel.config(relief='raised')
800#         self.bRegion.setDisabled(True)
801#         self.bPanel.setDisabled(True)
802#         self.bClear.setDisabled(True)
803#         self.bFlag.setDisabled(True)
804#         self.bUnflag.setDisabled(True)
805#         self.bStat.setDisabled(True)
806#         self.bNext.setDisabled(True)
807#         self.bPrev.setDisabled(True)
808# #         self.bRegion.config(state=Tk.DISABLED)
809# #         self.bPanel.config(state=Tk.DISABLED)
810# #         self.bClear.config(state=Tk.DISABLED)
811# #         self.bFlag.config(state=Tk.DISABLED)
812# #         self.bUnflag.config(state=Tk.DISABLED)
813# #         self.bStat.config(state=Tk.DISABLED)
814# #         self.bNext.config(state=Tk.DISABLED)
815# #         self.bPrev.config(state=Tk.DISABLED)
816#         self.button = False
817#         self.mode = ''
818#         self.notewin.close_widgets()
819#         self.__disconnect_event()
820
821#     def enable_next(self):
822#         self.bNext.setEnabled(True)
823# #         self.bNext.config(state=Tk.NORMAL)
824
825#     def disable_next(self):
826#         self.bNext.setDisabled(True)
827# #         self.bNext.config(state=Tk.DISABLED)
828
829#     def enable_prev(self):
830#         self.bPrev.setEnabled(True)
831# #         self.bPrev.config(state=Tk.NORMAL)
832
833#     def disable_prev(self):
834#         self.bPrev.setDisabled(True)
835# #         self.bPrev.config(state=Tk.DISABLED)
836
837#     # pause buttons for slow operations
838#     def _pause_buttons(self,operation="end",msg=""):
839#         buttons = ["bRegion","bPanel","bClear","bFlag","bUnflag","bStat",
840#                    "bNote","bQuit"]
841#         if operation == "start":
842#             enable = False
843# #             state=Tk.DISABLED
844#         else:
845#             enable = True
846# #             state=Tk.NORMAL
847#         for btn in buttons:
848#             getattr(self,btn).setEnabled(enable)
849# #             getattr(self,btn).config(state=state)
850#         self.figmgr.toolbar.set_message(msg)
851
852#     def delete_bar(self):
853#         self.__disconnect_event()
854#         self.destroy()
855
856#     def __disconnect_event(self):
857#         self._p.register('button_press',None)
858#         self._p.register('button_release',None)
859
860#     def _draw_span(self,axes,x0,x1,**kwargs):
861#         height = self._p.figure.bbox.height
862#         y1 = height - axes.bbox.y1
863#         h = axes.bbox.height
864#         w = abs(x1 - x0)
865#         rect = [ int(val) for val in min(x0,x1), y1, w, h ]
866#         self._p.canvas.drawRectangle( rect )
867#         # nothing is returned by drawRectangle
868#         return None
869# #         return self._p.canvas._tkcanvas.create_rectangle(x0,y0,x1,y1,**kwargs)
870
871#     def _remove_span(self,span):
872#         # Nothing to do with remove
873#         pass
874# #         self._p.canvas._tkcanvas.delete(span)
Note: See TracBrowser for help on using the repository browser.