1
0
Fork 0
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:
psyc://psyced.org/~lynX 2010-02-24 09:50:45 +01:00
commit 0f02e9cd76
128 changed files with 9224 additions and 0 deletions

66
gtkpypsyc/client.py Normal file
View file

@ -0,0 +1,66 @@
import gtk
import ConfigParser
import os, sys
import encodings.iso8859_1, encodings.ascii, encodings.cp1250, encodings.utf_8, encodings.utf_16
from pypsyc.center import Client
from tabs.place import PlaceTab
from tabs.user import UserTab
from tabs.rss import RSSTab
class GTKClient(Client):
def __init__(self, config):
Client.__init__(self, config)
self.places_window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.places_window.connect('delete_event',
lambda w, e: gtk.main_quit())
self.notebook = gtk.Notebook()
self.notebook.set_tab_pos(gtk.POS_BOTTOM)
self.places_window.add(self.notebook)
#self.places_window.show_all()
def show(self):
self.places_window.show_all()
return gtk.FALSE
def create_place(self, netname):
place = PlaceTab(netname, self)
self.notebook.append_page(place, gtk.Label(netname))
self.notebook.show_all()
return place
def poll():
import asyncore
asyncore.poll(timeout = 0.0)
gtk.timeout_add(250, poll) # 0.25 secs
if __name__ == '__main__':
import sys
config = ConfigParser.ConfigParser()
if sys.platform == 'win32':
os.environ['PATH'] += ';lib;'
config.read('.pypsycrc')
else:
config.read(os.getenv('HOME') + '/.pypsycrc')
center = GTKClient(config)
splash = gtk.Window()
splash.set_decorated(gtk.FALSE)
img = gtk.Image()
img.set_from_file(config.get('interface',
'splashscreen'))
splash.add(img)
img.show()
splash.show()
gtk.timeout_add(3500, splash.hide)
gtk.timeout_add(4000, center.show)
rsstab = RSSTab('psyc://adamantine.aquarium/@heise', center)
center.notebook.append_page(rsstab, gtk.Label('heise rss'))
usertab = UserTab('psyc://adamantine.aquarium/~fool', center)
center.notebook.append_page(usertab, gtk.Label('user dialog'))
center.online()
poll()
gtk.main()

67
gtkpypsyc/demo.py Normal file
View file

@ -0,0 +1,67 @@
#!/usr/bin/envv python
import gtk
import gobject
class UI:
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.netobjects = {}
self.model = gtk.TreeStore(gtk.gdk.Pixbuf,
gobject.TYPE_STRING,
gobject.TYPE_BOOLEAN)
self.view = gtk.TreeView(self.model)
self.view.set_headers_visible(gtk.FALSE)
pxrenderer = gtk.CellRendererPixbuf()
renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn()
column.pack_start(pxrenderer, gtk.FALSE)
column.pack_end(renderer, gtk.TRUE)
column.set_attributes(pxrenderer, pixbuf=0, visible=2)
column.set_attributes(renderer, text=1)
self.view.append_column(column)
self.view.show()
vbox = gtk.VBox()
vbox.show()
vbox.pack_start(self.view)
combo = gtk.Combo()
# TODO: disable editing of current entry, even cursor
combo.set_popdown_strings(['Offline', 'Online'])
combo.entry.set_editable(gtk.FALSE)
combo.show()
vbox.pack_end(combo, gtk.FALSE)
self.friendstree = self.model.insert(None, 0, [None, 'Friends', False])
self.placetree = self.model.insert(None, 1, [None, 'Places', False])
self.append_person('fippo')
self.append_place('PSYC')
gtk.timeout_add(1000, self.change_icon, 1)
gtk.timeout_add(3000, self.change_icon, 2)
gtk.timeout_add(5000, self.change_icon, 3)
self.view.expand_all()
self.window.add(vbox)
self.window.show()
self.window.connect('delete_event', lambda e, w: gtk.main_quit())
def append_person(self, name):
self.model.insert(self.friendstree, -1, [None, name, True])
def append_place(self, name):
image = gtk.Image()
image.set_from_file('./pix/place/icon_f01.png')
pxbuf = image.get_pixbuf()
self.netobjects[name] = self.model.insert(self.placetree, -1, [pxbuf, name, True])
def change_icon(self, image):
print 'change', image
return gtk.FALSE # call only once
u = UI()
gtk.mainloop()

71
gtkpypsyc/list.py Normal file
View file

@ -0,0 +1,71 @@
#!/usr/bin/envv python
import gtk
import gobject
class ListWindow:
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.netobjects = {}
self.model = gtk.TreeStore(gtk.gdk.Pixbuf,
str, # _nick_place
str, # _source/target/context
gobject.TYPE_BOOLEAN)
self.view = gtk.TreeView(self.model)
self.view.set_headers_visible(gtk.FALSE)
pxrenderer = gtk.CellRendererPixbuf()
renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn()
column.pack_start(pxrenderer, gtk.FALSE)
column.pack_end(renderer, gtk.TRUE)
column.set_attributes(pxrenderer, pixbuf=0, visible=3)
column.set_attributes(renderer, text=1)
self.view.append_column(column)
self.view.show()
vbox = gtk.VBox()
vbox.show()
vbox.pack_start(self.view)
combo = gtk.Combo()
# TODO: disable editing of current entry, even cursor
# combobox may be false
combo.set_popdown_strings(['Offline', 'Online'])
combo.entry.set_editable(gtk.FALSE)
combo.show()
vbox.pack_end(combo, gtk.FALSE)
self.friendstree = self.model.insert(None, 0, [None, 'Friends', '', False])
self.placetree = self.model.insert(None, 1, [None, 'Places', '', False])
#gtk.timeout_add(1000, self.change_icon, 1)
self.view.expand_all()
self.window.add(vbox)
self.window.show()
#self.window.connect('delete_event', lambda e, w: gtk.main_quit())
# def change_icon(self, image):
# return gtk.FALSE # call only once
def msg(self, vars, mc, data, caller):
if mc.startswith('_notice_place_enter'):
# only if source == self!
image = gtk.Image()
image.set_from_file('./pix/place/icon_f01.png')
self.netobjects[vars['_context']] = self.model.insert(self.placetree, -1,
[image.get_pixbuf(),
vars['_nick_place'],
vars['_context'], True])
return
if mc.startswith('_notice_friend_present'):
image = gtk.Image()
image.set_from_file('./pix/friend/present.png')
self.netobjects[vars['_source']] = self.model.insert(self.friendstree, -1,
[image.get_pixbuf(),
vars['_nick'],
vars['_source'], True])
return

6
gtkpypsyc/rcfile Normal file
View file

@ -0,0 +1,6 @@
[main]
uni: psyc://your.host/~yournick
password: yourpass
[interface]
splashscreen: pix/symlynX.gif

View file

92
gtkpypsyc/tabs/place.py Normal file
View file

@ -0,0 +1,92 @@
import gtk
from pypsyc.objects import PSYCObject
class PlaceTab(gtk.Frame, PSYCObject):
def __init__(self, netname, center):
gtk.Frame.__init__(self, label = netname)
PSYCObject.__init__(self, netname, center)
vbox = gtk.VBox()
self.add(vbox)
self.textview = gtk.TextView()
self.textview.set_cursor_visible(gtk.FALSE)
self.textview.set_wrap_mode(gtk.WRAP_WORD)
self.textview.set_editable(gtk.FALSE)
self.textbuf = self.textview.get_buffer()
hbox = gtk.HPaned()
hbox.pack1(self.textview)
vbox.pack_start(hbox)
# uni, nick
self.nicklist = gtk.ListStore(str, str)
self.nicklist.set_sort_column_id(1, gtk.SORT_ASCENDING)
nickview = gtk.TreeView()
nickview.set_model(self.nicklist)
nickview.set_headers_visible(gtk.FALSE)
col = gtk.TreeViewColumn('Nick', gtk.CellRendererText(), text = 1)
col.set_resizable(gtk.FALSE)
nickview.append_column(col)
hbox.pack2(nickview, shrink=gtk.FALSE, resize=gtk.FALSE)
self.entry = gtk.Entry()
self.entry.set_text('')
self.entry.connect('activate', self.onEntry)
vbox.pack_end(self.entry, gtk.FALSE)
self.show_all()
def append_text(self, text):
iter = self.textbuf.get_end_iter()
text = text.encode('utf-8') + '\n'
self.textbuf.insert(iter, text)
iter = self.textbuf.get_end_iter()
self.textbuf.place_cursor(iter)
mark = self.textbuf.get_insert()
self.textview.scroll_mark_onscreen(mark)
def onEntry(self, widget):
text = self.entry.get_text()
#print self.netname, '>>', text
self.entry.set_text('')
# handle a command... yes this should not be done that way
if text and text[0] == '/':
cmd = text[1:].upper()
if cmd == 'PART':
self.sendmsg({'_target' : self.netname},
{},
'_request_leave',
'')
return
self.sendmsg({'_target' : self.netname},
{},
'_message_public',
text)
def msg(self, vars, mc, data, caller):
if mc == '_message_public':
self.append_text('%s: %s'%(vars['_nick'], data))
return
if mc == '_message_public_question':
self.append_text('%s %s: %s'%(vars['_nick'],
'fragt',
data))
return
if mc == '_message_public_text_action':
self.append_text('%s %s: %s'%(vars['_nick'],
vars['_action'],
data))
return
if mc == '_status_place_members':
# _list_members, _list_members_nicks
for i in range(0, len(vars['_list_members'])):
self.nicklist.append((vars['_list_members'][i],
vars['_list_members_nicks'][i]))
return
if mc.startswith('_notice_place_leave'):
return
if mc.startswith('_notice_place_enter'):
self.nicklist.append((vars['_source'], vars['_nick']))
return
PSYCObject.msg(self, vars, mc, data, caller)

65
gtkpypsyc/tabs/rss.py Normal file
View file

@ -0,0 +1,65 @@
import gtk
from pypsyc.objects import PSYCObject
class RSSTab(gtk.Frame, PSYCObject):
def __init__(self, netname, center):
import gobject
gtk.Frame.__init__(self, label = netname)
PSYCObject.__init__(self, netname, center)
vbox = gtk.VPaned()
self.add(vbox)
self.label = gtk.Label()
self.model = gtk.ListStore(str, str, str)
self.tree = gtk.TreeView(self.model)
# demos
self.model.append(['Handy-Flatrate von DoCoMo in Japan'.encode('utf-8'),
'http://heise.de/newsticker/meldung/44883',
'Ab Sommer 2004 will auch DoCoMo den Japanern für umgerechnet 31 Euro im Monat eine mobile Flatrate anbieten. mehr...' ])
renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn("Headline", renderer, text=0)
self.tree.append_column(column)
self.tree.connect('row-activated', self.preview)
s1 = gtk.ScrolledWindow()
s1.add(self.tree)
s1.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
vbox.pack1(s1, gtk.TRUE)
self.textview = gtk.TextView()
self.textview.set_cursor_visible(gtk.FALSE)
self.textview.set_wrap_mode(gtk.WRAP_WORD)
self.textview.set_editable(gtk.FALSE)
self.textbuf = self.textview.get_buffer()
s2 = gtk.ScrolledWindow()
s2.add(self.textview)
s2.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
vbox.pack2(s2)
#vbox.pack_end(self.textview, gtk.FALSE)
self.show_all()
def msg(self, vars, mc, data, caller):
if mc == '_status_place_description_news_rss':
self.label.set_label(data)
self.show_all()
return
if mc == '_notice_news_headline_rss':
renderer = gtk.CellRendererText()
text = vars.get('_news_headline').encode('utf-8')
column = gtk.TreeViewColumn(vars.get('_news_headline'), renderer, text=1)
self.tree.append_column(column)
self.show_all()
return
PSYCObject.msg(self, vars, mc, data, caller)
def preview(self, widget, path, column):
model, iter = self.tree.get_selection().get_selected()
self.set_text(model.get_value(iter, 1) + '\n' + model.get_value(iter, 2))
def set_text(self, text):
text = text.encode('utf-8')
self.textbuf.set_text(text)

30
gtkpypsyc/tabs/user.py Normal file
View file

@ -0,0 +1,30 @@
import gtk
from pypsyc.objects import PSYCObject
class UserTab(gtk.Frame):
def __init__(self, netname, center):
gtk.Frame.__init__(self, label = netname)
self.textview = gtk.TextView()
self.textview.set_cursor_visible(gtk.FALSE)
self.textview.set_wrap_mode(gtk.WRAP_WORD)
self.textview.set_editable(gtk.FALSE)
self.textbuf = self.textview.get_buffer()
s = gtk.ScrolledWindow()
s.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
s.add(self.textview)
pane = gtk.VPaned()
#pane.pack1(s)
h = gtk.VBox()
pane.pack2(h, shrink=gtk.FALSE, resize = gtk.FALSE)
pane.pack1(s)
box = gtk.HBox()
box.pack_start(gtk.Button(label='spacing'), expand=gtk.FALSE)
h.pack_start(box, expand=gtk.FALSE)
self.entryfield = gtk.Entry()
h.pack_start(self.entryfield, expand=gtk.FALSE)
self.add(pane)
self.show_all()