home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 February / maximum-cd-2011-02.iso / DiscContents / digsby_setup85.exe / lib / gui / animation.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-11-24  |  3.5 KB  |  117 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. from time import time
  5. from wx import PyTimer as timer
  6.  
  7. class Listenable(object):
  8.     __slots__ = ('listeners',)
  9.     
  10.     def __init__(self):
  11.         self.listeners = []
  12.  
  13.     
  14.     def add_listener(self, listener):
  15.         self.listeners.append(listener)
  16.  
  17.     
  18.     def remove_listener(self, listener):
  19.         self.listeners.remove(listener)
  20.  
  21.     
  22.     def _notify_listeners(self):
  23.         for listener in self.listeners:
  24.             listener()
  25.         
  26.  
  27.  
  28.  
  29. class Animation(Listenable):
  30.     __slots__ = ('frames', 'frame_delays', 'timer', 'index', 'started')
  31.     
  32.     def __init__(self, frames = None, frame_delays = None):
  33.         Listenable.__init__(self)
  34.         if frames is None:
  35.             frames = []
  36.         
  37.         if frame_delays is None:
  38.             frame_delays = []
  39.         
  40.         self.frames = frames
  41.         self.frame_delays = frame_delays
  42.         self.index = 0
  43.         self.timer = timer(self._on_timer)
  44.  
  45.     
  46.     def set_frames(self, frames, delays):
  47.         if self.frames:
  48.             frame = self.current_frame
  49.             delay = self.current_frame_delay
  50.         else:
  51.             (frame, delay) = (None, None)
  52.         old_frame_len = len(self.frames)
  53.         self.frames = frames[:]
  54.         self.frame_delays = delays[:]
  55.         self.update_frame()
  56.         if frame != self.current_frame:
  57.             self._notify_listeners()
  58.         
  59.         if old_frame_len == 1 or len(frames) > 1 or delay != self.current_frame_delay:
  60.             if frame is None or old_frame_len == 1:
  61.                 self.start()
  62.             else:
  63.                 diff = self.current_frame_delay - delay
  64.                 self.start(delay - abs(diff))
  65.         
  66.         if len(self.frames) == 1:
  67.             self.stop()
  68.         
  69.  
  70.     
  71.     def start(self, delay = None):
  72.         if delay is None:
  73.             delay = self.current_frame_delay
  74.         
  75.         self.started = time()
  76.         self.timer.Start(delay, True)
  77.  
  78.     
  79.     def stop(self):
  80.         self.timer.Stop()
  81.  
  82.     
  83.     def increment_frame(self):
  84.         self.index += 1
  85.         self.update_frame()
  86.  
  87.     
  88.     def update_frame(self):
  89.         if self.index > len(self.frames) - 1:
  90.             self.index = 0
  91.         
  92.  
  93.     
  94.     def current_frame_delay(self):
  95.         return self.frame_delays[self.index]
  96.  
  97.     current_frame_delay = property(current_frame_delay)
  98.     
  99.     def current_frame(self):
  100.         return self.frames[self.index]
  101.  
  102.     current_frame = property(current_frame)
  103.     
  104.     def set_frame(self, i, frame):
  105.         self.frames[i] = frame
  106.         if self.index == i:
  107.             self._notify_listeners()
  108.         
  109.  
  110.     
  111.     def _on_timer(self):
  112.         self.increment_frame()
  113.         self._notify_listeners()
  114.         self.start()
  115.  
  116.  
  117.