mirror of git://git.psyced.org/git/pypsyc
168 lines
6.0 KiB
Python
168 lines
6.0 KiB
Python
import sys
|
||
import qt
|
||
from qt import SIGNAL, SLOT
|
||
import asyncore
|
||
|
||
import pypsyc.GUI.Abstract.Gui as AbstractGui
|
||
|
||
class MainDebugWidget(qt.QWidget):
|
||
def __init__(self, parent = None, name = None, fl=0):
|
||
qt.QWidget.__init__(self,parent,name,fl)
|
||
|
||
self.textField = qt.QTextBrowser(self)
|
||
self.textField.setGeometry(10, 5, 580, 350)
|
||
|
||
self.inputField = qt.QMultiLineEdit(self)
|
||
self.inputField.setGeometry(10, 360, 580 , 100)
|
||
|
||
qt.QObject.connect(self.inputField, SIGNAL('returnPressed()'),
|
||
self.inputText)
|
||
|
||
self.resize(qt.QSize(600,480).expandedTo(self.minimumSizeHint()))
|
||
sys.stdout = self
|
||
|
||
def inputText(self):
|
||
if self.inputField.text().findRev('\n.\n') - self.inputField.text().length() == -3:
|
||
data = self.inputField.text()
|
||
print "packet entered"
|
||
self.inputField.setText('')
|
||
def write(self, string):
|
||
self.textField.append(string)
|
||
|
||
|
||
class RoomWidget(qt.QWidget):
|
||
def __init__(self, parent = None, name = None, fl = 0):
|
||
qt.QWidget.__init__(self, parent, name, fl)
|
||
self.name = name
|
||
|
||
self.textField = qt.QTextBrowser(self)
|
||
self.textField.setGeometry(qt.QRect(10, 35, 470, 350))
|
||
|
||
self.topicField = qt.QLineEdit(self)
|
||
self.topicField.setGeometry(qt.QRect(10, 5, 580, 25))
|
||
|
||
self.nicklist = qt.QListBox(self)
|
||
self.nicklist.setGeometry(qt.QRect(490, 35, 100, 350))
|
||
|
||
self.inputField = qt.QLineEdit(self)
|
||
self.inputField.setGeometry(qt.QRect(10, 390, 470, 20))
|
||
|
||
qt.QObject.connect(self.inputField, SIGNAL('returnPressed()'),
|
||
self.inputText)
|
||
qt.QObject.connect(self.topicField, SIGNAL('returnPressed()'),
|
||
self.inputTopic)
|
||
|
||
self.resize(qt.QSize(600,550).expandedTo(self.minimumSizeHint()))
|
||
|
||
def inputText(self):
|
||
print self.name + " input: " + self.inputField.text().stripWhiteSpace().latin1()
|
||
self.inputField.setText('')
|
||
|
||
def inputTopic(self):
|
||
print self.name + " topic: " + self.topicField.text().stripWhiteSpace().latin1()
|
||
|
||
def append(self, text): self.textField.append(text.strip() + '\n')
|
||
def set_topic(self, text): self.topicField.setText(text)
|
||
def inputNickCurrent(self):
|
||
print self.name + " current nick:" + self.nickField.text().stripWhiteSpace().latin1()
|
||
|
||
|
||
from pypsyc.PSYC import parsetext
|
||
class RoomGui(qt.QMainWindow, AbstractGui.RoomGui):
|
||
"""qt frontend for pyPSYC"""
|
||
# better inherit from widget made with designer?
|
||
def __init__(self):
|
||
qt.QMainWindow.__init__(self)
|
||
#AbstractGui.RoomGui.__init__(self) # attribute error?
|
||
self.model = None
|
||
|
||
self.rooms = {}
|
||
self.topics = {}
|
||
self.setCaption("Qt pyPSYC Frontend")
|
||
self.menuBar = qt.QMenuBar(self)
|
||
|
||
self.workspace = qt.QVBox(self)
|
||
|
||
self.roombar = qt.QTabWidget(self.workspace)
|
||
|
||
# only in debug mode
|
||
self.roombar.addTab(MainDebugWidget(self.workspace), 'main')
|
||
|
||
self.workspace.show()
|
||
self.setCentralWidget(self.workspace)
|
||
self.resize(qt.QSize(600, 500)) # fixed size is bad
|
||
|
||
|
||
fileMenu = [("Exit the program", "Quit", 0, "quit")
|
||
]
|
||
connectionMenu = [("Link to your UNL", "Connect", 0, "connect")
|
||
]
|
||
self.menus = [("&File", fileMenu),
|
||
("&Connection", connectionMenu)]
|
||
self.menuActions = {}
|
||
for menu in self.menus:
|
||
popupMenu = qt.QPopupMenu(self)
|
||
for entry in menu[1]:
|
||
if entry:
|
||
helptxt, menutxt, accel, callbackName = entry
|
||
action = qt.QAction(helptxt, qt.QIconSet(qt.QPixmap("./green.gif")),
|
||
menutxt, accel, self)
|
||
action.addTo(popupMenu)
|
||
self.menuActions[callbackName] = action
|
||
callback = getattr(self, callbackName, None)
|
||
if callback:
|
||
qt.QObject.connect(action, SIGNAL("activated()"),
|
||
callback)
|
||
else:
|
||
popupMenu.insertSeparator()
|
||
self.menuBar.insertItem(menu[0], popupMenu)
|
||
|
||
self.show()
|
||
|
||
def update(self, mc, mmp, psyc):
|
||
context = mmp._query("_context")
|
||
if mc.startswith("_notice_place_enter"):
|
||
## if _source == ME eigentlich...
|
||
if not self.rooms.has_key(context):
|
||
self.add_room(context)
|
||
self.rooms[context].append(parsetext(mmp, psyc))
|
||
|
||
# elif mc == "_status_place_topic":
|
||
# self.topics[context] = parsetext(mmp, psyc)
|
||
elif mc == '_message_public':
|
||
self.rooms[context].append(psyc._query("_nick") + ": " +
|
||
parsetext(mmp, psyc))
|
||
|
||
def add_room(self, room):
|
||
if not self.rooms.has_key(room):
|
||
self.rooms[room] = RoomWidget(self.workspace, room)
|
||
short = room[room.rfind("@"):] # kurzform f<>r raum... nicht ideal?
|
||
self.roombar.addTab(self.rooms[room], short)
|
||
|
||
def quit(self):
|
||
self.app.quit()
|
||
|
||
def connect(self, host = ''):
|
||
self.model.center.connect(host)
|
||
|
||
class UserGui(qt.QMainWindow, AbstractGui.UserGui):
|
||
pass
|
||
|
||
class MainGui(qt.QApplication, AbstractGui.MainGui):
|
||
def __init__(self, argv, center):
|
||
qt.QApplication.__init__(self, argv)
|
||
AbstractGui.MainGui.__init__(self, argv)
|
||
|
||
qt.QObject.connect(self, SIGNAL('lastWindowClosed()'),
|
||
self, SLOT('quit()'))
|
||
self.timer = qt.QTimer()
|
||
qt.QObject.connect(self.timer, SIGNAL("timeout()"),
|
||
self.socket_check)
|
||
|
||
def socket_check(self):
|
||
asyncore.poll(timeout=0.0)
|
||
|
||
def run(self):
|
||
self.timer.start(100)
|
||
self.exec_loop()
|