diff --git a/frontends/primitivus/contact_list.py b/frontends/primitivus/contact_list.py
index f2604418..21257b33 100644
--- a/frontends/primitivus/contact_list.py
+++ b/frontends/primitivus/contact_list.py
@@ -150,9 +150,10 @@ class ContactList(urwid.WidgetWrap, QuickContactList):
"""mark a contact disconnected"""
self.remove(jid.short)
- def remove(self, jid):
+ def remove(self, param_jid):
"""remove a contact from the list"""
groups_to_remove = []
+ jid = JID(param_jid)
for group in self.groups:
contacts = self.groups[group][1]
if jid.short in contacts:
diff --git a/frontends/primitivus/custom_widgets.py b/frontends/primitivus/custom_widgets.py
index 762d76be..2d18a712 100644
--- a/frontends/primitivus/custom_widgets.py
+++ b/frontends/primitivus/custom_widgets.py
@@ -23,6 +23,7 @@ import urwid
from urwid.escape import utf8decode
class Password(urwid.Edit):
+ toto=0
"""Edit box which doesn't show what is entered (show '*' or other char instead)"""
def __init__(self, *args, **kwargs):
@@ -41,6 +42,18 @@ class Password(urwid.Edit):
def get_edit_text(self):
return self.__real_text
+ def insert_text(self, text):
+ self._edit_text = self.__real_text
+ super(Password,self).insert_text(text)
+
+ def render(self, size, focus=False):
+ Password.toto+=1
+ if Password.toto==30:
+ import os,pdb
+ os.system('reset')
+ pdb.set_trace()
+ return super(Password, self).render(size, focus)
+
class AdvancedEdit(urwid.Edit):
"""Edit box with some custom improvments
new chars:
@@ -327,6 +340,49 @@ class List(urwid.FlowWidget):
height = min(list_size,self.max_height) or 1
return urwid.BoxAdapter(self.genericList, height)
+## MISC ##
+
+class Menu(urwid.FlowWidget):
+
+ def __init__(self):
+ super(Menu, self).__init__()
+ self.menu_keys = ['test']
+ self.menu = {'test':[('top',None)]}
+ self.shortcuts = {} #keyboard shortcuts
+
+ def checkShortcuts(self, key):
+ for shortcut in self.shortcuts.keys():
+ if key == shortcut:
+ category, item, callback = self.shortcuts[shortcuts]
+ callback((category, item))
+ return key
+
+ def addMenu(self, category, item, callback, shortcut=None):
+ """Add a menu item, create the category if new
+ @param category: category of the menu (e.g. File/Edit)
+ @param item: menu item (e.g. new/close/about)
+ @callback: method to call when item is selected"""
+ if not category in self.menu.keys():
+ self.menu_keys.append(category)
+ self.menu[category] = []
+ self.menu[category].append[(item, callback)]
+ if shortcut:
+ assert(shortcut not in self.shortcuts.keys())
+ self.shortcuts[shortcut] = (category, item, callback)
+
+ def rows(self,size,focus=False):
+ return self.display_widget(size, focus).rows(size, focus)
+
+ def render(self, size, focus=False):
+ return self.display_widget(size, focus).render(size, focus)
+
+ def display_widget(self, size, focus):
+ render_txt = []
+ for menu in self.menu_keys:
+ render_txt.append('[ %s ] ' % menu)
+ return urwid.AttrMap(urwid.Text(render_txt), 'menubar')
+
+
## DIALOGS ##
class GenericDialog(urwid.WidgetWrap):
diff --git a/frontends/primitivus/primitivus b/frontends/primitivus/primitivus
index 9d3fda82..29852c8f 100755
--- a/frontends/primitivus/primitivus
+++ b/frontends/primitivus/primitivus
@@ -28,7 +28,7 @@ import urwid
from profile_manager import ProfileManager
from contact_list import ContactList
from chat import Chat
-from custom_widgets import AdvancedEdit,FocusFrame,InputDialog,Alert
+import custom_widgets
import pdb
"""from window import Window
from editbox import EditBox
@@ -65,6 +65,7 @@ const_PALETTE = [('title', 'black', 'light gray', 'standout,underline'),
('date', 'light gray', 'default'),
('my_nick', 'dark red,bold', 'default'),
('other_nick', 'dark cyan,bold', 'default'),
+ ('menubar', 'light gray,bold', 'dark red'),
]
class ChatList(QuickChatList):
@@ -118,10 +119,18 @@ class PrimitivusApp(QuickApp):
def keyHandler(self, input):
if input in ('q', 'Q') or input == 'ctrl x':
raise urwid.ExitMainLoop()
+ elif input == 'meta m':
+ try:
+ if self.main_widget.header == None:
+ self.main_widget.header = self.menu
+ else:
+ self.main_widget.header = None
+ except AttributeError:
+ pass
elif input == 'ctrl d' and 'D' in self.bridge.getVersion(): #Debug only for dev versions
self.debug()
elif input == 'meta j': #user wants to join a room
- pop_up_widget = InputDialog(_("Entering a MUC room"), _("Please enter MUC's JID"), default_txt = 'test@conference.necton2.int', cancel_cb=self.removePopUp, ok_cb=self.onJoinRoom)
+ pop_up_widget = custom_widgets.InputDialog(_("Entering a MUC room"), _("Please enter MUC's JID"), default_txt = 'test@conference.necton2.int', cancel_cb=self.removePopUp, ok_cb=self.onJoinRoom)
self.showPopUp(pop_up_widget)
elif input == 'f2': #user wants to (un)hide the contact_list
try:
@@ -136,14 +145,19 @@ class PrimitivusApp(QuickApp):
except AttributeError:
#The main widget is not built (probably in Profile Manager)
pass
+ try:
+ return self.menu.checkShortcuts(input)
+ except AttributeError:
+ return input
def __buildMainWidget(self):
self.contactList = ContactList(self, self.CM, on_click = self.contactSelected, on_change=lambda w: self.redraw())
#self.center_part = urwid.Columns([('weight',2,self.contactList),('weight',8,Chat('',self))])
self.center_part = urwid.Columns([('weight',2,self.contactList), ('weight',8,urwid.Filler(urwid.Text('')))])
- editBar = AdvancedEdit('> ')
+ editBar = custom_widgets.AdvancedEdit('> ')
urwid.connect_signal(editBar,'click',self.onTextEntered)
- self.main_widget = FocusFrame(self.center_part, footer=editBar, focus_part='footer')
+ self.menu = custom_widgets.Menu()
+ self.main_widget = custom_widgets.FocusFrame(self.center_part, header=self.menu, footer=editBar, focus_part='footer')
return self.main_widget
def plug_profile(self, profile_key='@DEFAULT@'):
@@ -192,7 +206,7 @@ class PrimitivusApp(QuickApp):
else:
message = _("'%s' is an invalid JID !") % room_jid
error (message)
- Alert(_("Error"), message, ok_cb=self.removePopUp)
+ custom_widgets.Alert(_("Error"), message, ok_cb=self.removePopUp)
sat = PrimitivusApp()
sat.start()
diff --git a/frontends/primitivus/profile_manager.py b/frontends/primitivus/profile_manager.py
index e6f12d7a..dd52257e 100644
--- a/frontends/primitivus/profile_manager.py
+++ b/frontends/primitivus/profile_manager.py
@@ -21,6 +21,7 @@ along with this program. If not, see .
import urwid
from custom_widgets import Password,List,InputDialog,ConfirmDialog,Alert,FocusFrame
+from tools.jid import JID
class ProfileManager(urwid.WidgetWrap):
diff --git a/sat_bridge/DBus.py b/sat_bridge/DBus.py
index d84d1aab..c093c799 100755
--- a/sat_bridge/DBus.py
+++ b/sat_bridge/DBus.py
@@ -196,7 +196,7 @@ class DbusObject(dbus.service.Object):
@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
in_signature='ssss', out_signature='')
def setParam(self, name, value, category, profile_key='@DEFAULT@'):
- self.cb["setParam"](str(name), str(value), str(category), profile_key)
+ self.cb["setParam"](unicode(name), unicode(value), unicode(category), profile_key)
@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
in_signature='sss', out_signature='s')
diff --git a/tools/jid.py b/tools/jid.py
index a82ee971..c10658b5 100644
--- a/tools/jid.py
+++ b/tools/jid.py
@@ -21,11 +21,11 @@ along with this program. If not, see .
-class JID(str):
+class JID(unicode):
"""This class help manage JID (Node@Domaine/Resource)"""
def __new__(cls, jid):
- self = str.__new__(cls, jid)
+ self = unicode.__new__(cls, jid)
self.__parse()
return self