- Huge improvements on zooming stuff, we now have nice buttons.
This commit is contained in:
		
							parent
							
								
									6b5f83f762
								
							
						
					
					
						commit
						83f2b55f0c
					
				@ -26,9 +26,6 @@ class AttackDisplay(wx.ScrolledWindow):
 | 
			
		||||
        self.attack = attack
 | 
			
		||||
 | 
			
		||||
        wx.ScrolledWindow.__init__(self,parent,id=-1)
 | 
			
		||||
        # Wait for the attack to be computed
 | 
			
		||||
        while not attack.file:
 | 
			
		||||
            time.sleep(1)
 | 
			
		||||
 | 
			
		||||
        self.Bind(wx.EVT_SIZE, self.OnSize)
 | 
			
		||||
        self.Image = wx.StaticBitmap(self, -1, wx.EmptyBitmap(1,1))
 | 
			
		||||
@ -47,8 +44,6 @@ class AttackDisplay(wx.ScrolledWindow):
 | 
			
		||||
        else:
 | 
			
		||||
            print "Unknown file type %s." % (self.filetype)
 | 
			
		||||
 | 
			
		||||
        self.update()
 | 
			
		||||
 | 
			
		||||
        # TODO self.Bind(wxSizeEvent
 | 
			
		||||
 | 
			
		||||
    def OnSize(self,event):
 | 
			
		||||
@ -58,7 +53,7 @@ class AttackDisplay(wx.ScrolledWindow):
 | 
			
		||||
    def update(self):
 | 
			
		||||
 | 
			
		||||
        self.SetScrollbars(0,0,0,0,0,0)
 | 
			
		||||
        (sw,sh) = self.win.GetClientSizeTuple()
 | 
			
		||||
        (sw,sh) = self.GetClientSizeTuple()
 | 
			
		||||
        (W,H) = (sw,sh)
 | 
			
		||||
 | 
			
		||||
        def makefit(W,H):
 | 
			
		||||
@ -114,14 +109,24 @@ class AttackDisplay(wx.ScrolledWindow):
 | 
			
		||||
 | 
			
		||||
        self.Refresh()
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class AttackWindow(wx.Frame):
 | 
			
		||||
    def __init__(self,cl):
 | 
			
		||||
        global usePIL
 | 
			
		||||
 | 
			
		||||
        super(AttackWindow, self).__init__(None, size=(400,800))
 | 
			
		||||
        self.claim = cl
 | 
			
		||||
        self.fit = False
 | 
			
		||||
 | 
			
		||||
        # TODO maybe fitting defaults should come from Preferences.
 | 
			
		||||
        # Now, it is default yes if it looks nice (i.e. we are using
 | 
			
		||||
        # PIL)
 | 
			
		||||
        if usePIL:
 | 
			
		||||
            self.fit = True
 | 
			
		||||
        else:
 | 
			
		||||
            self.fit = False
 | 
			
		||||
 | 
			
		||||
        self.CreateInteriorWindowComponents()
 | 
			
		||||
        self.CreateExteriorWindowComponents()
 | 
			
		||||
 | 
			
		||||
        Icon.ScytherIcon(self)
 | 
			
		||||
        self.SetTitle()
 | 
			
		||||
@ -136,52 +141,37 @@ class AttackWindow(wx.Frame):
 | 
			
		||||
        ''' Create "interior" window components. In this case it is the
 | 
			
		||||
        attack picture. '''
 | 
			
		||||
 | 
			
		||||
        # Make zoom buttons
 | 
			
		||||
        sizer = wx.BoxSizer(wx.VERTICAL)
 | 
			
		||||
        buttons = wx.BoxSizer(wx.HORIZONTAL)
 | 
			
		||||
        bt = wx.Button(self,wx.ID_ZOOM_100)
 | 
			
		||||
        buttons.Add(bt,0)
 | 
			
		||||
        self.Bind(wx.EVT_BUTTON, self.OnZoom100, bt)
 | 
			
		||||
        bt = wx.Button(self,wx.ID_ZOOM_FIT)
 | 
			
		||||
        buttons.Add(bt,0)
 | 
			
		||||
        self.Bind(wx.EVT_BUTTON, self.OnZoomFit, bt)
 | 
			
		||||
        sizer.Add(buttons, 0, wx.ALIGN_LEFT)
 | 
			
		||||
        
 | 
			
		||||
        # Add attacks (possible with tabs)
 | 
			
		||||
        self.displays=[]
 | 
			
		||||
        attacks = self.claim.attacks
 | 
			
		||||
        n = len(attacks)
 | 
			
		||||
        if n <= 1:
 | 
			
		||||
            # Just a single window
 | 
			
		||||
            self.tabs = None
 | 
			
		||||
            self.displays.append(AttackDisplay(self,self,attacks[0]))
 | 
			
		||||
            dp = AttackDisplay(self, self, attacks[0])
 | 
			
		||||
            self.displays.append(dp)
 | 
			
		||||
        else:
 | 
			
		||||
            # Multiple tabs
 | 
			
		||||
            self.tabs = wx.Notebook(self,-1)
 | 
			
		||||
            dp = wx.Notebook(self,-1)
 | 
			
		||||
            for i in range(0,n):
 | 
			
		||||
                disp = AttackDisplay(self,self.tabs,attacks[i])
 | 
			
		||||
                disp = AttackDisplay(self,dp,attacks[i])
 | 
			
		||||
                classname = "%s %i" % (self.claim.stateName(),(i+1))
 | 
			
		||||
                self.tabs.AddPage(disp, classname)
 | 
			
		||||
                dp.AddPage(disp, classname)
 | 
			
		||||
                self.displays.append(disp)
 | 
			
		||||
 | 
			
		||||
        self.Show(1)
 | 
			
		||||
        sizer.Add(dp, 1, wx.EXPAND,1)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def CreateExteriorWindowComponents(self):
 | 
			
		||||
        ''' Create "exterior" window components, such as menu and status
 | 
			
		||||
        bars '''
 | 
			
		||||
        self.SetupToolBar()
 | 
			
		||||
 | 
			
		||||
    def SetupToolBar(self):
 | 
			
		||||
 | 
			
		||||
        tb = self.CreateToolBar(wx.TB_HORIZONTAL
 | 
			
		||||
                | wx.NO_BORDER
 | 
			
		||||
                | wx.TB_FLAT
 | 
			
		||||
                | wx.TB_TEXT
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
        # Add fit button
 | 
			
		||||
        bmp = wx.ArtProvider_GetBitmap(wx.ART_MISSING_IMAGE,wx.ART_TOOLBAR,(20,20))
 | 
			
		||||
        if not bmp.Ok():
 | 
			
		||||
            bmp = wx.EmptyBitmap(32,32)
 | 
			
		||||
        tb.AddCheckTool(wx.ID_ZOOM_FIT, bmp, bmp, 'Toggle zoom', 'Toggle zoom level')
 | 
			
		||||
        self.Bind(wx.EVT_TOOL, self.OnFit, id=wx.ID_ZOOM_FIT)
 | 
			
		||||
 | 
			
		||||
        tb.Realize()
 | 
			
		||||
 | 
			
		||||
        # And shortcut
 | 
			
		||||
        aTable = wx.AcceleratorTable([
 | 
			
		||||
                                      (wx.ACCEL_NORMAL, ord('Z'), wx.ID_ZOOM_FIT)
 | 
			
		||||
                                      ])
 | 
			
		||||
        self.SetAcceleratorTable(aTable)
 | 
			
		||||
        self.SetSizer(sizer)
 | 
			
		||||
 | 
			
		||||
    def update(self):
 | 
			
		||||
        for t in self.displays:
 | 
			
		||||
@ -200,3 +190,15 @@ class AttackWindow(wx.Frame):
 | 
			
		||||
        self.fit = False
 | 
			
		||||
        self.update()
 | 
			
		||||
 | 
			
		||||
    def OnSize(self):
 | 
			
		||||
        self.Refresh()
 | 
			
		||||
 | 
			
		||||
    def OnZoom100(self,evt):
 | 
			
		||||
        self.fit = False
 | 
			
		||||
        self.update()
 | 
			
		||||
 | 
			
		||||
    def OnZoomFit(self,evt):
 | 
			
		||||
        self.fit = True
 | 
			
		||||
        self.update()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user