home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / pycentral / deskbar-applet / site-packages / deskbar / Match.py < prev    next >
Encoding:
Python Source  |  2006-08-29  |  3.6 KB  |  140 lines

  1. import deskbar.Utils
  2.  
  3. """
  4. Represents a match returned by handlers
  5. """
  6.  
  7. class Match:
  8.     def __init__(self, handler, **args):
  9.         self._priority = 0
  10.         self._handler = handler
  11.         self._icon = None
  12.         
  13.         self.name = None
  14.         self.icon = None
  15.         if "name" in args:
  16.             self.name = args["name"]
  17.         if "icon" in args:
  18.             self.icon = args["icon"]
  19.     
  20.     def get_handler(self):
  21.         """
  22.         Returns the handler owning this match.
  23.         """
  24.         return self._handler
  25.         
  26.     def get_name(self, text=None):
  27.         """
  28.         Returns a dictionary whose entries will be used in the Action
  29.         string returned by get_verb.
  30.         
  31.         The passed string is the complete query string.
  32.         
  33.         The resulting action text will be
  34.         match.get_verb() % match.get_name(query)
  35.         
  36.         Remember to escape pango markup if needed.
  37.         """
  38.         return {"name": self.name}
  39.         
  40.     def get_verb(self):
  41.         """
  42.         Returns the action string associated to this handler.
  43.         
  44.         The string must contain one or more "%(name)s" that will
  45.         be replaced by the match get_name().
  46.         
  47.         The %(text)s will be replaced by the typed text.
  48.         By default the %(name)s will be replaced by the self._name
  49.         
  50.         The string can also contain pango markup.
  51.         
  52.         Examples:
  53.          Send mail to %(address)s
  54.          Search <b>%s</b> for %(text)s
  55.          Execute %(prog)s
  56.         """
  57.         raise NotImplementedError
  58.         
  59.     def get_priority(self):
  60.         """
  61.         Returns the priority of the given match as a tuple (int,int).
  62.         This number can be used to compare the match from the
  63.         same handler.
  64.         The first number in the tuple is the match's handler prio, the second
  65.         is the prio relative to other matces from the hander
  66.         """
  67.         return (self._handler.get_priority(), self._priority)
  68.     
  69.     def get_hash(self, text=None):
  70.         """
  71.         Returns a hash used to verify if a query has one or more duplicates.
  72.         Matches that have same hash will be selected based on the handler priority.
  73.         text is the entered query string.
  74.         By default, if the handler does not override this, it will return None.
  75.         Returning None means no duplication check will be performed.
  76.         """
  77.         return None
  78.         
  79.     def get_icon(self):
  80.         """
  81.         Returns a GdkPixbuf hat represents this match.
  82.         Returns None if there is no associated icon.
  83.         """
  84.         if self._icon == None:
  85.             if self.icon != None:
  86.                 self._icon = deskbar.Utils.load_icon(self.icon)
  87.             if self._icon == None:
  88.                 self._icon = False
  89.         
  90.         if self._icon == False:
  91.             return self.get_handler().get_icon()
  92.         else:
  93.             return self._icon
  94.     
  95.     def get_category(self):
  96.         """
  97.         Returns a string corresponding to a key in the Categories.py file, indicating
  98.         in which category this match should be put in.
  99.         
  100.         Returning None, uses the default category
  101.         """
  102.         return None
  103.         
  104.     def action(self, text=None):
  105.         """
  106.         Tell the match to do the associated action.
  107.         This method should not block.
  108.         The optional text is the additional argument entered in the entry
  109.         """
  110.         raise NotImplementedError
  111.     
  112.     def is_valid(self, text=None):
  113.         """
  114.         Tests wether the match is still valid, by default it's True.
  115.         For example if a file has moved, the file match is invalid
  116.         The optional text is the additional argument entered in the entry
  117.         """
  118.         return True
  119.         
  120.     def serialize(self):
  121.         serialized = {}
  122.         for prop, val in [(prop, getattr(self, prop)) for prop in dir(self)
  123.                                 if not prop.startswith("_") and
  124.                                 not callable(getattr(self, prop))]:
  125.             serialized[prop] = val
  126.         
  127.         return serialized
  128.     
  129.     def skip_history(self):
  130.         """
  131.         Wether the match should appear or not in the history dropdown (and thus be saved as history is saved)
  132.         """
  133.         return False
  134.         
  135.     def copy(self):
  136.         try:
  137.             return self._handler.deserialize(str(self.__class__)[str(self.__class__).rfind(".")+1:], self.serialize())
  138.         except:
  139.             return None
  140.