mirror of
git://git.psyced.org/git/pypsyc
synced 2024-08-15 03:20:04 +00:00
last state we had in cvs
This commit is contained in:
commit
0f02e9cd76
128 changed files with 9224 additions and 0 deletions
1
in-silico/gui/__init__.py
Normal file
1
in-silico/gui/__init__.py
Normal file
|
@ -0,0 +1 @@
|
|||
|
248
in-silico/gui/displays.py
Normal file
248
in-silico/gui/displays.py
Normal file
|
@ -0,0 +1,248 @@
|
|||
# -*- coding: latin-1 -*-
|
||||
#from wxPython.wx import *
|
||||
import wx
|
||||
# XXX Please feel free to modify and vershclimmbesser this piece of code
|
||||
# especially the bits marked with XXX
|
||||
##from pypsyc.objects.PSYCObject import
|
||||
from pypsyc.objects.client import ClientUser, ClientPlace, PSYCClient
|
||||
from pypsyc.objects import PSYCObject
|
||||
from pypsyc.center import ClientCenter
|
||||
|
||||
from pypsyc import netLocation, parsetext
|
||||
#from psycObjects import PUser, PPlace, PClient, PServer
|
||||
|
||||
import extras
|
||||
import asyncore, sys, os
|
||||
|
||||
ID_ABOUT = 1002
|
||||
ID_CONNECT = 1001
|
||||
ID_DISCONNECT = 10011
|
||||
ID_SAY = 3300
|
||||
ID_NOTEBOOK = 3301
|
||||
ID_STATUS = 9901
|
||||
ID_MENU = 9902
|
||||
ID_BUDDY_LIST = 9903
|
||||
ID_BUDDY_LIST_DK = 990301
|
||||
ID_EXIT = 1099
|
||||
ID_CLOSECHATNOTEBOOK = 2099
|
||||
ID_CLOSECHATNOTE = 2098
|
||||
|
||||
|
||||
class wxObject:
|
||||
def __init__(self, parent, psyc_parent = None):
|
||||
""" basic display object """
|
||||
if not psyc_parent: print 'WARNING: no psyc_parent set, this could be a problem'
|
||||
self.netname = self.psyc_parent.netname
|
||||
def append1(self, text):
|
||||
""" use this to append multi/single line text"""
|
||||
pass
|
||||
|
||||
|
||||
class wxPTab(wx.Panel):
|
||||
def __init__(self, parent, psyc_parent = None):
|
||||
""" all das ausehen usw """
|
||||
wx.Panel.__init__(self, parent, -1, style=wx.NO_BORDER)
|
||||
# we use logic_parent to call the functions pypsyc provides
|
||||
# gui stuff in the wx.Blah objects, psyc stuff in the PBlah objects
|
||||
if not psyc_parent: print 'WARNING: no psyc_parent set, this could be a problem'
|
||||
self.psyc_parent = psyc_parent
|
||||
config = self.psyc_parent.center.config
|
||||
self.prompt = config['prompt']
|
||||
self.lock = 0
|
||||
self.counter = 0
|
||||
self.buffer = ''
|
||||
self.text_box = wx.TextCtrl(self, -1, style=wx.NO_BORDER|wx.TE_MULTILINE|wx.TE_RICH2|wx.TE_READONLY, size=wx.DefaultSize)
|
||||
self.entry_box = wx.TextCtrl(self, ID_SAY, style=wx.NO_BORDER|wx.TE_PROCESS_ENTER|wx.TE_RICH2|wx.TE_PROCESS_TAB, size=wx.DefaultSize)
|
||||
|
||||
fontcolour = wx.Colour(config['fontcolour'][0], config['fontcolour'][1], config['fontcolour'][2])
|
||||
bgcolour = wx.Colour(config['bgcolour'][0], config['bgcolour'][1], config['bgcolour'][2])
|
||||
points = self.text_box.GetFont().GetPointSize() # get the current size
|
||||
f = wx.Font(points, wx.MODERN, wx.NORMAL, wx.BOLD, False)
|
||||
if os.name == 'nt':
|
||||
self.text_box.SetDefaultStyle(wx.TextAttr(fontcolour, bgcolour, f))
|
||||
self.entry_box.SetDefaultStyle(wx.TextAttr(fontcolour, bgcolour, f))
|
||||
self.entry_box.SetBackgroundColour(bgcolour)
|
||||
self.text_box.SetBackgroundColour(bgcolour)
|
||||
self.SetBackgroundColour(bgcolour)
|
||||
if os.name == 'posix':
|
||||
self.text_box.SetDefaultStyle(wx.TextAttr(wx.NullColour, wx.NullColour, f))
|
||||
self.entry_box.SetDefaultStyle(wx.TextAttr(wx.NullColour, wx.NullColour, f))
|
||||
|
||||
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||
sizer.Add(self.text_box, 1, wx.EXPAND)
|
||||
sizer.Add(self.entry_box, 0, wx.EXPAND)
|
||||
self.SetSizer(sizer)
|
||||
|
||||
#print 'wx.PTab: ' + str(dir(self))
|
||||
wx.EVT_TEXT_ENTER(self, ID_SAY, self.input)
|
||||
|
||||
def input(self, event):
|
||||
text = event.GetString()
|
||||
text = text.lstrip() # only strip whites from the beginning
|
||||
mc = ''
|
||||
vars = {}
|
||||
data = ''
|
||||
vars['_target'] = self.psyc_parent.netname # eigentlich is target immer netname
|
||||
if text != '' and text[0] == '/':
|
||||
# houston we have a command
|
||||
if text.startswith("/join"): # and text.__len__() > 16:
|
||||
mc = '_request_enter'
|
||||
vars['_target'] = text[6:]
|
||||
#elif text.startswith("/part"):
|
||||
# mc = '_request_leave'
|
||||
# vars['_target'] = text[6:]
|
||||
elif text.startswith('/password'):
|
||||
mc = '_set_password'
|
||||
t = text.split('/password')
|
||||
if t[1] != '' and t[1] != ' ':
|
||||
vars['_password'] = t[1]
|
||||
vars['_target'] = self.psyc_parent.center.config['uni']
|
||||
else:
|
||||
self.append1('Usage: /password <secret>')
|
||||
return
|
||||
elif text.startswith('/connect'):
|
||||
self.psyc_parent.center.connect(text[9:])
|
||||
self.append1('connecting to: ' + text[9:])
|
||||
self.entry_box.SetValue('')
|
||||
return
|
||||
elif text.startswith('/retrieve'):
|
||||
mc = '_request_retrieve'
|
||||
vars['_target'] = self.psyc_parent.center.config['uni']
|
||||
elif text.startswith('/store'):
|
||||
mc = '_request_store'
|
||||
vars['_target'] = self.psyc_parent.center.config['uni']
|
||||
vars['_storic'] = text[7:]
|
||||
data = text[7:]
|
||||
else:
|
||||
vars['_target'] = self.psyc_parent.center.config['uni']
|
||||
#vars['_source']
|
||||
mc = '_request_execute'
|
||||
data = text
|
||||
|
||||
elif text!= '' and text.startswith('##debug'):
|
||||
self.entry_box.SetValue('')
|
||||
self.append1(str(getattr(self.psyc_parent.center, text[8:])))
|
||||
return
|
||||
|
||||
elif text != '' and text[0] == '#':
|
||||
self.append1(text)
|
||||
self.entry_box.SetValue('')
|
||||
return
|
||||
|
||||
else:
|
||||
mc = '_message_public'
|
||||
try:
|
||||
text2 = text.decode('iso-8859-15')
|
||||
except:
|
||||
text2 = text
|
||||
print 'unicode'
|
||||
data1 = text2.encode('iso-8859-1')
|
||||
data = data1
|
||||
# am ende einfach wegschicken das fertige paket
|
||||
self.entry_box.SetValue('')
|
||||
#print_psyc(mmp, psyc, mc, data, 'place sending')
|
||||
self.psyc_parent.sendmsg(vars, mc, data)
|
||||
|
||||
def append1(self, line):
|
||||
""" use this to append multi/single line text"""
|
||||
if type(line) == type(u'öäü'):
|
||||
try:
|
||||
line = line.encode('iso-8859-1')
|
||||
except:
|
||||
print 'waahh'
|
||||
if os.name == 'posix':
|
||||
if self.lock == 0:
|
||||
self.lock = 1
|
||||
if self.buffer != '':
|
||||
self.text_box.AppendText('buffered: ' + self.buffer)
|
||||
self.buffer = ''
|
||||
for linex in line.split('\n'):
|
||||
self.text_box.AppendText(self.prompt.encode('iso-8859-15') + linex)
|
||||
self.text_box.AppendText('\n')
|
||||
self.psyc_parent.center.Yield()
|
||||
self.lock = 0
|
||||
else:
|
||||
self.buffer += line + '\n'
|
||||
elif os.name == 'nt':
|
||||
# AppendText() doesn't seem to do the right thing in windows
|
||||
for linex in line.split('\n'):
|
||||
self.text_box.WriteText(self.prompt.encode('iso-8859-15') + linex)
|
||||
self.text_box.WriteText('\n')
|
||||
# we should find out how many 'lines' we write and scroll the right
|
||||
# amount instead of scrolling 10000 at once XXX
|
||||
self.text_box.ScrollLines(10000)
|
||||
self.psyc_parent.center.Yield()
|
||||
|
||||
def append(self, text):
|
||||
""" use this for more then one line USE append1() this is obsolete!! """
|
||||
# is this broken? do we have to do the same as in append1()?
|
||||
lines = text.split('\n')
|
||||
for line in lines:
|
||||
self.text_box.AppendText(self.prompt + line + '\n')
|
||||
#print self.netname + ': ' + str(text)
|
||||
|
||||
|
||||
class wxPFrame(wx.Frame):
|
||||
def __init__(self, parent = None, psyc_parent = None, title = 'pypsyc-frame', pos = wx.DefaultPosition, size = wx.Size(920, 570), style = wx.DEFAULT_FRAME_STYLE):
|
||||
wx.Frame.__init__(self, None, -1, title, size=size)
|
||||
# do we need it here? wx.Frame is only supposed to be a container
|
||||
# and shouldn't do that much -> only here to be flexible
|
||||
# we use logic_parent to call the functions pypsyc provides
|
||||
# gui stuff in the wx.Blah objects, psyc stuff in the PBlah objects
|
||||
if not psyc_parent: print 'WARNING: no psyc_parent set, this could be a problem'
|
||||
self.psyc_parent = psyc_parent
|
||||
self.notebook = wx.Notebook(self, -1, style=0)
|
||||
self.CreateStatusBar()
|
||||
self.SetStatusText("welcome to pypsyc")
|
||||
self.Show()
|
||||
|
||||
def addTab(self, tab):
|
||||
tab.create_display(parent=self.notebook)
|
||||
self.notebook.AddPage(tab.display['default'], str(tab.netname), 1)
|
||||
|
||||
|
||||
class wxPPlace(wxPTab):
|
||||
def __init__(self, parent, psyc_parent = None):
|
||||
wxPTab.__init__(self, parent=parent, psyc_parent=psyc_parent)
|
||||
self.netname = self.psyc_parent.netname
|
||||
|
||||
|
||||
class wxPUser(wxPTab):
|
||||
def __init__(self, parent, psyc_parent = None):
|
||||
wxPTab.__init__(self, parent=parent, psyc_parent=psyc_parent)
|
||||
self.netname = self.psyc_parent.netname
|
||||
|
||||
|
||||
class wxPClient(wx.Frame):
|
||||
def __init__(self, parent = None, title = 'pypsyc', psyc_parent = None, pos = wx.DefaultPosition, size = wx.Size(100, 400), style = wx.DEFAULT_FRAME_STYLE):
|
||||
wx.Frame.__init__(self, None, -1, title, size=size)
|
||||
if not psyc_parent: print 'WARNING: no psyc_parent set, this could be a problem'
|
||||
self.psyc_parent = psyc_parent
|
||||
|
||||
self.CreateStatusBar()
|
||||
self.SetStatusText("welcome to pypsyc")
|
||||
self.BuddyList = wx.ListCtrl(self, 2222, style=wx.LC_REPORT|wx.LC_SINGLE_SEL|wx.SUNKEN_BORDER)
|
||||
self.BuddyList.InsertColumn(0, "ST")
|
||||
self.BuddyList.InsertColumn(1, "Nick")# , wx.LIST_FORMAT_RIGHT)
|
||||
self.BuddyList.SetColumnWidth(0, 20)
|
||||
|
||||
self.status = wx.ComboBox(self, ID_STATUS, "", choices=["Offline", "Online", "Away"], size=(150,-1), style=wx.CB_DROPDOWN)
|
||||
self.menu_button = wx.Button( self, ID_MENU, 'pypsyc')
|
||||
self.exit_button = wx.Button( self, ID_EXIT, 'exit')
|
||||
self.con_menu = wx.BoxSizer(wx.HORIZONTAL)
|
||||
self.con_menu.Add(self.menu_button, 1, wx.ALIGN_BOTTOM)
|
||||
self.con_menu.Add(self.exit_button, 1, wx.ALIGN_BOTTOM)
|
||||
|
||||
sizer = wx.FlexGridSizer(3, 0 , 0,0)
|
||||
sizer.Add(self.BuddyList, 1, wx.GROW)
|
||||
sizer.Add(self.con_menu, 1,wx.GROW)
|
||||
sizer.Add(self.status, 1,wx.GROW)
|
||||
sizer.AddGrowableRow(0)
|
||||
sizer.AddGrowableCol(0)
|
||||
# do something so that the buttons don't vanish in a too small window
|
||||
# this is h4x0r-style but does the job at the moment
|
||||
sizer.SetItemMinSize(self.BuddyList, 30, 10)
|
||||
sizer.SetMinSize(wx.Size(200,280))
|
||||
self.SetSizer(sizer)
|
||||
self.SetAutoLayout(True)
|
||||
self.Show()
|
66
in-silico/gui/extras.py
Normal file
66
in-silico/gui/extras.py
Normal file
|
@ -0,0 +1,66 @@
|
|||
# -*- coding: latin-1 -*-
|
||||
|
||||
def print_psyc(vars, mc, data, caller = ''):
|
||||
print '------ ' + str(caller)
|
||||
print '-- mc:'
|
||||
print mc
|
||||
print '-- vars:'
|
||||
print str(vars.items())
|
||||
print '-- data:'
|
||||
print str([data])
|
||||
print '------'
|
||||
|
||||
|
||||
class Context:
|
||||
class __impl:
|
||||
#from extras import Config
|
||||
#def __init__(self):
|
||||
# self.config = Config()
|
||||
# self.hust = 'hallo garrit'
|
||||
hust = 'hallo garrit'
|
||||
def spam(self):
|
||||
return id(self)
|
||||
__instance = __impl()
|
||||
|
||||
def __getattr__(self, attr):
|
||||
return getattr(self.__instance, attr)
|
||||
|
||||
def __setattr__(self, attr, value):
|
||||
return setattr(self.__instance, attr, value)
|
||||
|
||||
|
||||
class DevNull:
|
||||
def __init__(self):
|
||||
pass
|
||||
def write(self, text):
|
||||
pass
|
||||
|
||||
class Config(dict):
|
||||
def __init__(self, file = None):
|
||||
self[u'uni'] = u'psyc://ve.symlynx.com/~betatim'
|
||||
self[u'password'] = u'tim0914'
|
||||
self[u'action'] = u'brabbel'
|
||||
self[u'bgcolour'] = (255, 236, 191)
|
||||
self[u'fontcolour'] = (34, 63, 92)
|
||||
self[u'fontsize'] = 8
|
||||
self[u'prompt'] = u'* '
|
||||
|
||||
|
||||
class Display(dict):
|
||||
""" this dict like object organises multiple displays """
|
||||
def __init__(self, display = None):
|
||||
if display:
|
||||
self['default'] = display
|
||||
|
||||
def append1(self, text):
|
||||
self['default'].append1(text)
|
||||
|
||||
t = """def __setitem__(key = None, item = None):
|
||||
if key and item:
|
||||
dict.__setitem__(key, item)
|
||||
elif item:
|
||||
if self['default']:
|
||||
print 'Overwrite default display explicitly'
|
||||
else:
|
||||
self['default'] = item"""
|
||||
|
297
in-silico/gui/psycObjects.py
Normal file
297
in-silico/gui/psycObjects.py
Normal file
|
@ -0,0 +1,297 @@
|
|||
# -*- coding: latin-1 -*-
|
||||
|
||||
#from wxPython.wx import *
|
||||
import wx
|
||||
# XXX Please feel free to modify and vershclimmbesser this piece of code
|
||||
# especially the bits marked with XXX
|
||||
##from pypsyc.objects.PSYCObject import
|
||||
from pypsyc.objects.client import ClientUser, ClientPlace, PSYCClient
|
||||
from pypsyc.objects import PSYCObject
|
||||
from pypsyc.center import ClientCenter
|
||||
|
||||
from pypsyc import netLocation, parsetext, UNL2Location
|
||||
from displays import wxPFrame, wxPTab, wxPPlace, wxPUser, wxPClient
|
||||
import asyncore, sys, os
|
||||
import extras
|
||||
|
||||
class PObject(PSYCObject):
|
||||
def __init___(self, netname, center):
|
||||
PSYCObject.__init__(self, netname, center)
|
||||
self.context = extras.Context()
|
||||
self.display = extras.Display()
|
||||
self.queue = [] # a place to store pakets
|
||||
|
||||
def create_display(self, display=None, parent=None, name = 'default'):
|
||||
""" create a new display for this object """
|
||||
# display := display object
|
||||
# parent := if we don't have a display object we need to create one
|
||||
# and perhaps need a parent
|
||||
# name := the display needs a name so we can access it later
|
||||
if name == 'default':
|
||||
if self.display['default']:
|
||||
print 'there is already a default display, \
|
||||
if you want a new display give it a unique name'
|
||||
return
|
||||
else:
|
||||
if display:
|
||||
# a display has to have some basic functionality
|
||||
self.display[name] = display
|
||||
else:
|
||||
# we're a bit confused now because we can't know what sort of
|
||||
# display to create, but perhas someone comes up with a idea later
|
||||
print 'HELP!'
|
||||
|
||||
def msg(self, vars, mc, data, caller):
|
||||
PSYCObject.msg(self, vars, mc, data, caller)
|
||||
# store things until we know what do with them
|
||||
f = (vars, mc, data, caller)
|
||||
self.queue.append(f)
|
||||
|
||||
|
||||
class wxCenter(wx.App, ClientCenter):
|
||||
def __init__(self): #vllt noch cmd line args uebergeben or so
|
||||
wx.App.__init__(self, 0)
|
||||
#self.run()
|
||||
|
||||
def OnInit(self):
|
||||
ClientCenter.__init__(self)
|
||||
self.context = extras.Context()
|
||||
self.context.config = extras.Config()
|
||||
self.config = self.context.config
|
||||
|
||||
self.frame = wxPFrame(psyc_parent=self) # nen frame um die tabs aufzuheben
|
||||
self.timer = wx.PyTimer(self.socket_check)
|
||||
self.timer.Start(100) # alle 100 ms
|
||||
return True
|
||||
|
||||
def socket_check(self):
|
||||
asyncore.poll(timeout=0.0) # das sollte vllt klappen
|
||||
|
||||
def run(self):
|
||||
puni = UNL2Location(self.config['uni'])
|
||||
self.client = PClient(puni, self)
|
||||
self.create_server_place(netLocation(self.config['uni']))
|
||||
# XXX extremly buggy here!!
|
||||
#self.create_server_place('psyc://adamantine.fippo.int')
|
||||
|
||||
self.default_connection = netLocation(self.config['uni'])
|
||||
self.client.online()
|
||||
self.client.create_display(self)
|
||||
self.SetTopWindow(self.client.display['default'])
|
||||
self.client.display['default'].Show()
|
||||
|
||||
self.MainLoop()
|
||||
|
||||
def sendmsg(self, vars, mc, data, caller = None):
|
||||
extras.print_psyc(vars, mc, data, 'center sending')
|
||||
ClientCenter.sendmsg(self, vars, mc, data, caller)
|
||||
|
||||
def set_default_connection(self, uni):
|
||||
#netLocation(self.uni)
|
||||
print 'set_default_connect: ' + netLocation(uni)
|
||||
self.default_connection = netLocation(uni)
|
||||
|
||||
def msg(self, vars, mc, data, caller):
|
||||
source = vars['_context'] or vars['_source']
|
||||
if not ClientCenter.msg(self, vars, mc, data, caller):
|
||||
# create a psyc object of unknown type
|
||||
#self.create_psyc_object(source)
|
||||
#print '\n\n !!WE ARE IN TROUBLE!!\n\n\n'
|
||||
print ''
|
||||
|
||||
def create_psyc_object(self, netname):
|
||||
# this could do some better guessing about the type
|
||||
self.create_server_place(netname)
|
||||
# XXX
|
||||
|
||||
def create_user(self, netname):
|
||||
t = PUser(netname, self)
|
||||
#print 'i am a USER and my name is: ' + netname + ' / ' + netLocation(netname)
|
||||
self.frame.addTab(t)
|
||||
return t
|
||||
|
||||
def create_place(self, netname):
|
||||
t = PPlace(netname, self)
|
||||
#print 'i am a PLACE and my name is: ' + netname + ' / ' + netLocation(netname)
|
||||
self.frame.addTab(t)
|
||||
return t
|
||||
|
||||
def create_server_place(self, netname):
|
||||
t = PServer(netname, self)
|
||||
#print 'i am a SERVER and my name is: ' + netname + ' / ' + netLocation(netname)
|
||||
self.frame.addTab(t)
|
||||
self.client.create_display(name='server', display=t.display['default'])
|
||||
#sys.stdout = extras.DevNull()
|
||||
return t
|
||||
|
||||
class PPlace(ClientPlace):
|
||||
def __init__(self, netname, center):
|
||||
ClientPlace.__init__(self, netname, center)
|
||||
self.display = extras.Display()
|
||||
print 'i am a PLACE and my name is: ' + self.netname + ' / ' + netLocation(self.netname)
|
||||
|
||||
def create_display(self, parent = None, name = 'default', display = None):
|
||||
if name == 'default':
|
||||
self.display['default'] = wxPPlace(parent=parent, psyc_parent=self)
|
||||
else:
|
||||
self.display[name] = display
|
||||
|
||||
def msg(self, vars, mc, data, caller = None):
|
||||
extras.print_psyc(vars, mc, data, 'place')
|
||||
#print 'ddd' + str(type(data))
|
||||
parsedtext = parsetext(vars, mc, data)
|
||||
#print dir(parsedtext) , type(parsedtext)
|
||||
#parsedtext = parsedtext.encode('iso-8859-15')
|
||||
#print type(parsedtext)
|
||||
if mc == '_message_public':
|
||||
line = u''
|
||||
if vars['_nick']:
|
||||
line += vars['_nick']
|
||||
else:
|
||||
line += vars['_source']
|
||||
|
||||
if vars['_action']: line += ' ' + vars['_action'] + '>'
|
||||
else: line += '>'
|
||||
try:
|
||||
line += ' ' + parsedtext.decode('iso-8859-15')
|
||||
except:
|
||||
line += ' ' + parsedtext
|
||||
self.display.append1(line)
|
||||
elif mc == '_message_public_question':
|
||||
line = u''
|
||||
line += vars['_nick']
|
||||
if vars['_action']: line += ' ' + vars['_action'] + '>'
|
||||
else: line += ' fragt>'
|
||||
try:
|
||||
line += ' ' + parsedtext.decode('iso-8859-15')
|
||||
except:
|
||||
line += ' ' + parsedtext
|
||||
self.display.append1(line)
|
||||
elif mc.startswith('_status_place_topic'):
|
||||
self.display.append1('TOPIC: ' + parsedtext)
|
||||
else:
|
||||
self.display.append1(parsedtext)
|
||||
|
||||
|
||||
class PUser(ClientUser):
|
||||
def __init__(self, netname, center):
|
||||
ClientUser.__init__(self, netname, center)
|
||||
self.display = extras.Display()
|
||||
print 'i am a USER and my name is: ' + self.netname + ' / ' + netLocation(self.netname)
|
||||
|
||||
def create_display(self, parent = None, name = 'default', display = None):
|
||||
if name == 'default':
|
||||
self.display['default'] = wxPUser(parent=parent, psyc_parent=self)
|
||||
else:
|
||||
self.display[name] = display
|
||||
|
||||
def msg(self, vars, mc, data, caller = None):
|
||||
extras.print_psyc(vars, mc, data, caller)
|
||||
parsedtext = parsetext(vars, mc,data)
|
||||
#parsedtext = parsedtext.encode('iso-8859-15')
|
||||
if mc == '_message_private':
|
||||
self.display.append1(parsedtext)
|
||||
else:
|
||||
self.display.append1(parsedtext)
|
||||
|
||||
|
||||
class PServer(PSYCObject):
|
||||
def __init__(self, netname, center):
|
||||
PSYCObject.__init__(self, netname, center)
|
||||
print 'registered server'
|
||||
#print 'PServer: ' + str(dir(self))
|
||||
self.display = extras.Display()
|
||||
print 'i am a SERVER and my name is: ' + self.netname + ' / ' + netLocation(self.netname)
|
||||
|
||||
def create_display(self, parent = None, name = 'default', display = None):
|
||||
if name == 'default':
|
||||
self.display['default'] = wxPPlace(parent=parent, psyc_parent=self)
|
||||
else:
|
||||
self.display[name] = display
|
||||
|
||||
def msg(self, vars, mc, data, caller = None):
|
||||
extras.print_psyc(vars, mc, data, 'server')
|
||||
parsedtext = parsetext(vars, mc,data)
|
||||
#parsedtext = parsedtext.encode('iso-8859-15')
|
||||
#self.center.Yield()
|
||||
if mc == '_notice_circuit_established' and vars['_source'] == netLocation(self.center.config['uni']):
|
||||
mc = '_request_link'
|
||||
vars = {}
|
||||
data =''
|
||||
vars['_target'] = self.center.config['uni']
|
||||
self.sendmsg(vars, mc, data)
|
||||
self.display.append1(parsedtext)
|
||||
else:
|
||||
self.display.append1(parsedtext)
|
||||
|
||||
def write(self, text):
|
||||
""" redirected stdout """
|
||||
# we have problems if text contains \n and with print adding an extra \n
|
||||
lines = text.split('\n')
|
||||
for line in lines:
|
||||
if line == '':
|
||||
return
|
||||
else:
|
||||
self.display.append1('printed: ' + line)
|
||||
|
||||
def sendmsg(self, vars, mc, data, caller = None):
|
||||
extras.print_psyc(vars, mc, data, 'server sending...')
|
||||
PSYCObject.sendmsg(self, vars, mc, data, caller)
|
||||
|
||||
|
||||
class PClient(PSYCClient):
|
||||
def __init__(self, netname, center):
|
||||
PSYCClient.__init__(self, netname, center)
|
||||
self.display = extras.Display()
|
||||
#self.extra_display = {} # XXX
|
||||
#self.create_display(parent=None)
|
||||
print 'default_conmnect is --> ' + self.center.default_connection
|
||||
print 'i am a CLIENT and my name is: ' + self.netname + ' / ' + netLocation(self.netname)
|
||||
|
||||
def create_display(self, parent = None, name = 'default', display = None):
|
||||
if name == 'default':
|
||||
self.display[name] = wxPClient(parent=parent, psyc_parent=self)
|
||||
else:
|
||||
if self.display.has_key(name):
|
||||
# XXX tempory hack for multi server connect
|
||||
print 'HACKING GOING ON!'
|
||||
return
|
||||
else:
|
||||
self.display[name] = display
|
||||
|
||||
def set_display(self, which, display):
|
||||
self.display[which] = display
|
||||
|
||||
def msg(self, vars, mc, data, caller = None):
|
||||
extras.print_psyc(vars, mc, data, 'client')
|
||||
parsedtext = parsetext(vars, mc,data)
|
||||
#parsedtext = parsedtext.encode('iso-8859-15')
|
||||
if mc == '_query_password':
|
||||
if self.center.config['password'] != '':
|
||||
mc = '_set_password'
|
||||
vars = {'_password' : self.center.config['password']}
|
||||
vars['_target'] = self.netname
|
||||
data =''
|
||||
self.sendmsg(vars, mc, data)
|
||||
else:
|
||||
self.display['server'].append1("Please enter your password or choose a different nick if you don't know the password")
|
||||
self.display['server'].entry_box.SetValue('/password ')
|
||||
elif mc == '_status_friends':
|
||||
self.display['server'].append1(parsedtext)
|
||||
|
||||
elif mc == '_error_invalid_password':
|
||||
self.display['server'].append1(parsedtext)
|
||||
self.display['server'].append1("Please enter your password or choose a different nick if you don't know the password")
|
||||
self.display['server'].entry_box.SetValue('/password ')
|
||||
else:
|
||||
self.display['server'].append1(parsedtext)
|
||||
|
||||
def online(self):
|
||||
self.center.connect(self.center.default_connection)
|
||||
#mc = '_request_link'
|
||||
#mmp = {}
|
||||
#psyc = {}
|
||||
#data =''
|
||||
#mmp['_target'] = self.netname
|
||||
|
||||
#self.sendmsg(mmp, psyc, mc, data)
|
450
in-silico/gui/wx.py
Normal file
450
in-silico/gui/wx.py
Normal file
|
@ -0,0 +1,450 @@
|
|||
# -*- coding: latin-1 -*-
|
||||
from wxPython.wx import *
|
||||
|
||||
# XXX Please feel free to modify and vershclimmbesser this piece of code
|
||||
# especially the bits marked with XXX
|
||||
##from pypsyc.objects.PSYCObject import
|
||||
from pypsyc.objects.PSYCObject import ClientUser, ClientPlace, PSYCClient, PSYCObject
|
||||
from pypsyc.center import ClientCenter
|
||||
|
||||
from pypsyc import netLocation, parsetext
|
||||
|
||||
import asyncore, sys, os
|
||||
|
||||
# ich glaub ich weiss jetzt wofuer die hier toll sind
|
||||
# !!!
|
||||
# this list isn't up-to-date anymore, stolen from the old gui code
|
||||
# !!!
|
||||
ID_ABOUT = 1002
|
||||
ID_CONNECT = 1001
|
||||
ID_DISCONNECT = 10011
|
||||
ID_SAY = 3300
|
||||
ID_NOTEBOOK = 3301
|
||||
ID_STATUS = 9901
|
||||
ID_MENU = 9902
|
||||
ID_BUDDY_LIST = 9903
|
||||
ID_BUDDY_LIST_DK = 990301
|
||||
ID_EXIT = 1099
|
||||
ID_CLOSECHATNOTEBOOK = 2099
|
||||
ID_CLOSECHATNOTE = 2098
|
||||
|
||||
def opj(path):
|
||||
"""Convert paths to the platform-specific separator"""
|
||||
return apply(os.path.join, tuple(path.split('/')))
|
||||
|
||||
def print_psyc(vars, mc, data, caller = ''):
|
||||
print '------ ' + str(caller)
|
||||
print '-- mc:'
|
||||
print mc
|
||||
print '-- vars:'
|
||||
print str(vars.items())
|
||||
print '-- data:'
|
||||
print str([data])
|
||||
print '------'
|
||||
|
||||
|
||||
class DevNull:
|
||||
def write(self, text):
|
||||
return
|
||||
|
||||
class wxCenter(wxApp, ClientCenter):
|
||||
def __init__(self): #vllt noch cmd line args uebergeben or so
|
||||
wxApp.__init__(self, 0)
|
||||
self.run()
|
||||
|
||||
def OnInit(self):
|
||||
ClientCenter.__init__(self)
|
||||
self.config = {} # = { 'uin' : 'psyc://blah/~user', 'foo': 'bar'}
|
||||
self.config[u'uni'] = u'psyc://ve.symlynx.com/~betatim3'
|
||||
self.config[u'password'] = u'tim'
|
||||
self.config[u'action'] = u'brabbel'
|
||||
self.config[u'bgcolour'] = (255, 236, 191)
|
||||
self.config[u'fontcolour'] = (34, 63, 92)
|
||||
self.config[u'fontsize'] = 8
|
||||
self.config[u'prompt'] = u'* '
|
||||
print sys.getdefaultencoding()
|
||||
print os.name
|
||||
|
||||
#print self.config
|
||||
self.frame = wxPFrame(logic_parent=self) # nen frame um die tabs aufzuheben
|
||||
self.client = PClient(self.config['uni'], self)
|
||||
self.create_server_place(netLocation(self.config['uni'])) # eignetlich is es kein place aber naja
|
||||
|
||||
self.default_connection = netLocation(self.config['uni'])
|
||||
self.client.online()
|
||||
self.client.create_display(self)
|
||||
self.SetTopWindow(self.client.display)
|
||||
self.client.display.Show()
|
||||
|
||||
self.timer = wxPyTimer(self.socket_check)
|
||||
self.timer.Start(100) # alle 100 ms
|
||||
return True
|
||||
|
||||
def input(self, event):
|
||||
print event.GetString()
|
||||
event.Skip()
|
||||
|
||||
def socket_check(self):
|
||||
asyncore.poll(timeout=0.0) # das sollte vllt klappen
|
||||
|
||||
def run(self):
|
||||
self.MainLoop()
|
||||
|
||||
def sendmsg(self, vars, mc, data, caller = None):
|
||||
print_psyc(vars, mc, data, 'center sending')
|
||||
ClientCenter.sendmsg(self, vars, mc, data, caller)
|
||||
|
||||
def set_default_connection(self, uni):
|
||||
#netLocation(self.uni)
|
||||
print 'set_default_connect: ' + netLocation(uni)
|
||||
self.default_connection = netLocation(uni)
|
||||
|
||||
def create_user(self, netname):
|
||||
#print "this should create a user"
|
||||
t = PUser(netname, self)
|
||||
# nicht tab.display damit wir netname haben ,]]
|
||||
# auch wenn es extrem strange ist wir uebergeben
|
||||
self.frame.addTab(t)
|
||||
return t
|
||||
|
||||
def create_place(self, netname):
|
||||
#print "this should create a room"
|
||||
t = PPlace(netname, self)
|
||||
self.frame.addTab(t) # same here
|
||||
return t
|
||||
|
||||
def create_server_place(self, netname):
|
||||
t = PServer(netname, self)
|
||||
self.frame.addTab(t, extra_display='server') # same here
|
||||
sys.stdout = t
|
||||
return t
|
||||
|
||||
|
||||
class wxPTab(wxPanel):
|
||||
def __init__(self, parent, logic_parent = None):
|
||||
""" all das ausehen usw """
|
||||
wxPanel.__init__(self, parent, -1, style=0)
|
||||
# we use logic_parent to call the functions pypsyc provides
|
||||
# gui stuff in the wxBlah objects, psyc stuff in the PBlah objects
|
||||
if not logic_parent: print 'WARNING: no logic_parent set, this could be a problem'
|
||||
self.logic_parent = logic_parent
|
||||
config = self.logic_parent.center.config
|
||||
self.prompt = config['prompt']
|
||||
self.lock = 0
|
||||
self.counter = 0
|
||||
self.buffer = ''
|
||||
self.text_box = wxTextCtrl(self, -1, style=wxTE_MULTILINE|wxTE_RICH2|wxTE_READONLY, size=wxDefaultSize)
|
||||
self.entry_box = wxTextCtrl(self, ID_SAY, style=wxTE_PROCESS_ENTER|wxTE_RICH2|wxTE_PROCESS_TAB, size=wxDefaultSize)
|
||||
|
||||
fontcolour = wxColour(config['fontcolour'][0], config['fontcolour'][1], config['fontcolour'][2])
|
||||
bgcolour = wxColour(config['bgcolour'][0], config['bgcolour'][1], config['bgcolour'][2])
|
||||
self.entry_box.SetBackgroundColour(bgcolour)
|
||||
self.text_box.SetBackgroundColour(bgcolour)
|
||||
points = self.text_box.GetFont().GetPointSize() # get the current size
|
||||
f = wxFont(points, wxMODERN, wxNORMAL, wxBOLD, False)
|
||||
self.text_box.SetDefaultStyle(wxTextAttr(fontcolour, bgcolour, f))
|
||||
self.entry_box.SetDefaultStyle(wxTextAttr(fontcolour, bgcolour, f))
|
||||
self.SetBackgroundColour(bgcolour)
|
||||
|
||||
sizer = wxBoxSizer(wxVERTICAL)
|
||||
sizer.Add(self.text_box, 1, wxEXPAND)
|
||||
sizer.Add(self.entry_box, 0, wxEXPAND)
|
||||
self.SetSizer(sizer)
|
||||
|
||||
#print 'wxPTab: ' + str(dir(self))
|
||||
EVT_TEXT_ENTER(self, ID_SAY, self.input)
|
||||
|
||||
def input(self, event):
|
||||
text = event.GetString()
|
||||
text = text.lstrip() # only strip whites from the beginning
|
||||
mc = ''
|
||||
vars = {}
|
||||
data = ''
|
||||
vars['_target'] = self.logic_parent.netname # eigentlich is target immer netname
|
||||
if text != '' and text[0] == '/':
|
||||
# houston we have a command
|
||||
if text.startswith("/join"): # and text.__len__() > 16:
|
||||
mc = '_request_enter'
|
||||
vars['_target'] = text[6:]
|
||||
elif text.startswith("/part"):
|
||||
mc = '_request_leave'
|
||||
vars['_target'] = text[6:]
|
||||
elif text.startswith('/password'):
|
||||
mc = '_set_password'
|
||||
t = text.split('/password')
|
||||
if t[1] != '' and t[1] != ' ':
|
||||
vars['_password'] = t[1]
|
||||
vars['_target'] = self.logic_parent.center.config['uni']
|
||||
else:
|
||||
self.append1('Usage: /password <secret>')
|
||||
return
|
||||
elif text.startswith('/retrieve'):
|
||||
mc = '_request_retrieve'
|
||||
vars['_target'] = self.logic_parent.center.config['uni']
|
||||
else:
|
||||
mc = '_request_execute'
|
||||
data = text
|
||||
|
||||
elif text != '' and text[0] == '#':
|
||||
self.append1(text)
|
||||
self.entry_box.SetValue('')
|
||||
return
|
||||
|
||||
else:
|
||||
mc = '_message_public'
|
||||
try:
|
||||
text2 = text.decode('iso-8859-15')
|
||||
except:
|
||||
text2 = text
|
||||
print 'unicode'
|
||||
data1 = text2.encode('iso-8859-1')
|
||||
data = data1
|
||||
# am ende einfach wegschicken das fertige paket
|
||||
self.entry_box.SetValue('')
|
||||
#print_psyc(mmp, psyc, mc, data, 'place sending')
|
||||
self.logic_parent.sendmsg(vars, mc, data)
|
||||
|
||||
def append1(self, line):
|
||||
""" use this to append multi/single line text"""
|
||||
if type(line) == type(u'öäü'):
|
||||
line = line.encode('iso-8859-15')
|
||||
if os.name == 'posix':
|
||||
if self.lock == 0:
|
||||
self.lock = 1
|
||||
if self.buffer != '':
|
||||
self.text_box.AppendText('buffered: ' + self.buffer)
|
||||
self.buffer = ''
|
||||
for linex in line.split('\n'):
|
||||
self.text_box.AppendText(self.prompt.encode('iso-8859-15') + linex)
|
||||
self.text_box.AppendText('\n')
|
||||
self.logic_parent.center.Yield()
|
||||
self.lock = 0
|
||||
else:
|
||||
self.buffer += line + '\n'
|
||||
elif os.name == 'nt':
|
||||
# AppendText() doesn't seem to do the right thing in windows
|
||||
for linex in line.split('\n'):
|
||||
self.text_box.WriteText(self.prompt.encode('iso-8859-15') + linex)
|
||||
self.text_box.WriteText('\n')
|
||||
# we should find out how many 'lines' we write and scroll the right
|
||||
# amount instead of scrolling 10000 at once XXX
|
||||
self.text_box.ScrollLines(10000)
|
||||
self.logic_parent.center.Yield()
|
||||
|
||||
def append(self, text):
|
||||
""" use this for more then one line USE append1() this is obsolete!! """
|
||||
# is this broken? do we have to do the same as in append1()?
|
||||
lines = text.split('\n')
|
||||
for line in lines:
|
||||
self.text_box.AppendText(self.prompt + line + '\n')
|
||||
#print self.netname + ': ' + str(text)
|
||||
|
||||
|
||||
class wxPFrame(wxFrame):
|
||||
def __init__(self, parent = None, logic_parent = None, title = 'pypsyc-frame', pos = wxDefaultPosition, size = wxSize(920, 570), style = wxDEFAULT_FRAME_STYLE):
|
||||
wxFrame.__init__(self, None, -1, title, size=size)
|
||||
# do we need it here? wxFrame is only supposed to be a container
|
||||
# and shouldn't do that much -> only here to be flexible
|
||||
# we use logic_parent to call the functions pypsyc provides
|
||||
# gui stuff in the wxBlah objects, psyc stuff in the PBlah objects
|
||||
if not logic_parent: print 'WARNING: no logic_parent set, this could be a problem'
|
||||
self.logic_parent = logic_parent
|
||||
self.notebook = wxNotebook(self, -1, style=0)
|
||||
self.CreateStatusBar()
|
||||
self.SetStatusText("welcome to pypsyc")
|
||||
self.Show()
|
||||
|
||||
def addTab(self, tab,extra_display = None):
|
||||
tab.create_display(self.notebook)
|
||||
if extra_display:
|
||||
self.logic_parent.client.set_display(extra_display, tab.display)
|
||||
self.notebook.AddPage(tab.display, str(tab.netname), 1)
|
||||
|
||||
|
||||
class wxPPlace(wxPTab):
|
||||
def __init__(self, parent, logic_parent = None):
|
||||
wxPTab.__init__(self, parent=parent, logic_parent=logic_parent)
|
||||
self.netname = self.logic_parent.netname
|
||||
|
||||
|
||||
class wxPUser(wxPTab):
|
||||
def __init__(self, parent, logic_parent = None):
|
||||
wxPTab.__init__(self, parent=parent, logic_parent=logic_parent)
|
||||
self.netname = self.logic_parent.netname
|
||||
|
||||
|
||||
class wxPClient(wxFrame):
|
||||
def __init__(self, parent = None, title = 'pypsyc', logic_parent = None, pos = wxDefaultPosition, size = wxSize(100, 400), style = wxDEFAULT_FRAME_STYLE):
|
||||
wxFrame.__init__(self, None, -1, title, size=size)
|
||||
# we use logic_parent to call the functions pypsyc provides
|
||||
# gui stuff in the wxBlah objects, psyc stuff in the PBlah objects
|
||||
if not logic_parent: print 'WARNING: no logic_parent set, this could be a problem'
|
||||
self.logic_parent = logic_parent
|
||||
|
||||
self.CreateStatusBar()
|
||||
self.SetStatusText("welcome to pypsyc")
|
||||
self.BuddyList = wxListCtrl(self, 2222, style=wxLC_REPORT|wxLC_SINGLE_SEL|wxSUNKEN_BORDER)
|
||||
self.BuddyList.InsertColumn(0, "ST")
|
||||
self.BuddyList.InsertColumn(1, "Nick")# , wxLIST_FORMAT_RIGHT)
|
||||
self.BuddyList.SetColumnWidth(0, 20)
|
||||
|
||||
self.status = wxComboBox(self, ID_STATUS, "", choices=["Offline", "Online", "Away"], size=(150,-1), style=wxCB_DROPDOWN)
|
||||
self.menu_button = wxButton( self, ID_MENU, 'pypsyc')
|
||||
self.exit_button = wxButton( self, ID_EXIT, 'exit')
|
||||
self.con_menu = wxBoxSizer(wxHORIZONTAL)
|
||||
self.con_menu.Add(self.menu_button, 1, wxALIGN_BOTTOM)
|
||||
self.con_menu.Add(self.exit_button, 1, wxALIGN_BOTTOM)
|
||||
|
||||
sizer = wxFlexGridSizer(3, 0 , 0,0)
|
||||
sizer.Add(self.BuddyList, 1, wxGROW)
|
||||
sizer.Add(self.con_menu, 1,wxGROW)
|
||||
sizer.Add(self.status, 1,wxGROW)
|
||||
sizer.AddGrowableRow(0)
|
||||
sizer.AddGrowableCol(0)
|
||||
# do something so that the buttons don't vanish in a too small window
|
||||
# this is h4x0r-style but does the job at the moment
|
||||
sizer.SetItemMinSize(self.BuddyList, 30, 10)
|
||||
sizer.SetMinSize(wxSize(200,280))
|
||||
self.SetSizer(sizer)
|
||||
self.SetAutoLayout(true)
|
||||
self.Show()
|
||||
|
||||
|
||||
class PPlace(ClientPlace):
|
||||
def __init__(self, netname, center):
|
||||
ClientPlace.__init__(self, netname, center)
|
||||
self.display = None
|
||||
|
||||
def create_display(self, parent):
|
||||
self.display = wxPPlace(parent=parent, logic_parent=self)
|
||||
|
||||
def msg(self, vars, mc, data, caller = None):
|
||||
print_psyc(vars, mc, data, 'place')
|
||||
#print 'ddd' + str(type(data))
|
||||
parsedtext = parsetext(vars, mc, data)
|
||||
#print dir(parsedtext) , type(parsedtext)
|
||||
#parsedtext = parsedtext.encode('iso-8859-15')
|
||||
#print type(parsedtext)
|
||||
if mc == '_message_public':
|
||||
line = u''
|
||||
line += vars['_nick']
|
||||
if vars['_action']: line += ' ' + vars['_action'] + '>'
|
||||
else: line += '>'
|
||||
try:
|
||||
line += ' ' + parsedtext.decode('iso-8859-15')
|
||||
except:
|
||||
line += ' ' + parsedtext
|
||||
self.display.append1(line)
|
||||
elif mc.startswith('_status_place_topic'):
|
||||
self.display.append1('TOPIC: ' + parsedtext)
|
||||
else:
|
||||
self.display.append1(parsedtext)
|
||||
|
||||
|
||||
class PUser(ClientUser):
|
||||
def __init__(self, netname, center):
|
||||
ClientUser.__init__(self, netname, center)
|
||||
self.display = None
|
||||
|
||||
def create_display(self, parent):
|
||||
self.display = wxPUser(parent=parent, logic_parent=self)
|
||||
|
||||
def msg(self, vars, mc, data, caller = None):
|
||||
print_psyc(vars, mc, data, caller)
|
||||
parsedtext = parsetext(vars, mc,data)
|
||||
#parsedtext = parsedtext.encode('iso-8859-15')
|
||||
if mc == '_message_public':
|
||||
self.display.append1(parsedtext)
|
||||
else:
|
||||
self.display.append1(parsedtext)
|
||||
|
||||
|
||||
class PServer(PSYCObject):
|
||||
def __init__(self, netname, center):
|
||||
PSYCObject.__init__(self, netname, center)
|
||||
print 'registered server'
|
||||
#print 'PServer: ' + str(dir(self))
|
||||
self.display = None
|
||||
|
||||
def create_display(self, parent):
|
||||
self.display = wxPPlace(parent=parent, logic_parent=self)
|
||||
|
||||
def msg(self, vars, mc, data, caller = None):
|
||||
print_psyc(vars, mc, data, 'server')
|
||||
parsedtext = parsetext(vars, mc,data)
|
||||
#parsedtext = parsedtext.encode('iso-8859-15')
|
||||
#self.center.Yield()
|
||||
if mc == '_notice_circuit_established':
|
||||
mc = '_request_link'
|
||||
vars = {}
|
||||
data =''
|
||||
vars['_target'] = self.center.config['uni']
|
||||
self.sendmsg(vars, mc, data)
|
||||
self.display.append1(parsedtext)
|
||||
else:
|
||||
self.display.append1(parsedtext)
|
||||
|
||||
def write(self, text):
|
||||
""" redirected stdout """
|
||||
# we have problems if text contains \n and with print adding an extra \n
|
||||
lines = text.split('\n')
|
||||
for line in lines:
|
||||
if line == '':
|
||||
return
|
||||
else:
|
||||
self.display.append1('printed: ' + line)
|
||||
|
||||
def sendmsg(self, vars, mc, data, caller = None):
|
||||
print_psyc(vars, mc, data, 'server sending...')
|
||||
PSYCObject.sendmsg(self, vars, mc, data, caller)
|
||||
|
||||
|
||||
class PClient(PSYCClient):
|
||||
def __init__(self, netname, center):
|
||||
PSYCClient.__init__(self, netname, center)
|
||||
self.display = None
|
||||
self.extra_display = {} # XXX
|
||||
#self.create_display(parent=None)
|
||||
print 'default_conmnect is --> ' + self.center.default_connection
|
||||
|
||||
def create_display(self, parent):
|
||||
self.display = wxPClient(parent=parent)
|
||||
def set_display(self, which, display):
|
||||
self.extra_display[which] = display
|
||||
|
||||
|
||||
def msg(self, vars, mc, data, caller = None):
|
||||
print_psyc(vars, mc, data, 'client')
|
||||
parsedtext = parsetext(vars, mc,data)
|
||||
#parsedtext = parsedtext.encode('iso-8859-15')
|
||||
if mc == '_query_password':
|
||||
if self.center.config['password'] != '':
|
||||
mc = '_set_password'
|
||||
vars = {'_password' : self.center.config['password']}
|
||||
vars['_target'] = self.netname
|
||||
data =''
|
||||
self.sendmsg(vars, mc, data)
|
||||
else:
|
||||
self.extra_display['server'].append1("Please enter your password or choose a different nick if you don't know the password")
|
||||
self.extra_display['server'].entry_box.SetValue('/password ')
|
||||
elif mc == '_status_friends':
|
||||
self.extra_display['server'].append1(parsedtext)
|
||||
|
||||
elif mc == '_error_invalid_password':
|
||||
self.extra_display['server'].append1(parsedtext)
|
||||
self.extra_display['server'].append1("Please enter your password or choose a different nick if you don't know the password")
|
||||
self.extra_display['server'].entry_box.SetValue('/password ')
|
||||
else:
|
||||
self.extra_display['server'].append1(parsedtext)
|
||||
|
||||
def online(self):
|
||||
self.center.connect(self.center.default_connection)
|
||||
#mc = '_request_link'
|
||||
#mmp = {}
|
||||
#psyc = {}
|
||||
#data =''
|
||||
#mmp['_target'] = self.netname
|
||||
|
||||
#self.sendmsg(mmp, psyc, mc, data)
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue