Package libxyz :: Package ui :: Module shortcut
[hide private]
[frames] | no frames]

Source Code for Module libxyz.ui.shortcut

  1  #-*- coding: utf8 -* 
  2  # 
  3  # Max E. Kuznecov ~syhpoon <mek@mek.uz.ua> 2008-2009 
  4  # 
  5  # This file is part of XYZCommander. 
  6  # XYZCommander is free software: you can redistribute it and/or modify 
  7  # it under the terms of the GNU Lesser Public License as published by 
  8  # the Free Software Foundation, either version 3 of the License, or 
  9  # (at your option) any later version. 
 10  # XYZCommander is distributed in the hope that it will be useful, 
 11  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 12  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
 13  # GNU Lesser Public License for more details. 
 14  # You should have received a copy of the GNU Lesser Public License 
 15  # along with XYZCommander. If not, see <http://www.gnu.org/licenses/>. 
 16   
 17  from libxyz.core.utils import ustring 
 18  from libxyz.exceptions import XYZValueError 
 19   
 20  from libxyz.ui import Keys 
 21   
22 -class Shortcut(object):
23 """ 24 Shortcut abstraction 25 """ 26
27 - def __init__(self, sc=None, raw=None):
28 if (sc is raw is sc is None) or ((sc, raw) == (None, None)): 29 raise XYZValueError( 30 _(u"Only one of the arguments must be provided")) 31 32 self._keys = Keys() 33 34 if sc: 35 self.sc = sc 36 self.raw = self._parse_sc(sc) 37 elif raw: 38 self.raw = raw 39 self.sc = self._parse_raw(raw)
40 41 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 42
43 - def __hash__(self):
44 return self._hash(self)
45 46 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 47
48 - def __eq__(self, other):
49 return self._hash(self) == self._hash(other)
50 51 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 52
53 - def __str__(self):
54 return "<Shortcut: %s>" % str(self.sc)
55 56 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 57 58 __repr__ = __str__ 59 60 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 61
62 - def _hash(self, obj):
63 return hash(tuple(obj.raw))
64 65 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 66
67 - def _parse_sc(self, sc):
68 """ 69 Parse shortcut into raw form 70 @param sc: List of shortcuts as read from config file 71 """ 72 73 _shortcut = [] 74 75 for s in sc: 76 _tmp = [] 77 78 for _key in s.split("-"): 79 try: 80 _tmp.append(getattr(self._keys, _key)) 81 except AttributeError: 82 _tmp.append(_key) 83 84 _shortcut.append(u" ".join([ustring(x) for x in _tmp])) 85 86 return _shortcut
87 88 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 89
90 - def _parse_raw(self, raw):
91 """ 92 Make shortcut from raw keys received 93 """ 94 95 _raw = [] 96 97 for el in raw: 98 el = ustring(el) 99 _data = el 100 101 if el in (u"page up", u"page down"): 102 _data = self._keys.get_key(raw) 103 elif len(el) > 1: # Shortcut 104 _data = u"-".join([self._keys.get_key(x) or x 105 for x in el.split(u" ")]) 106 107 _raw.append(_data) 108 109 return _raw
110