pypsyc/pypsyc/GUI/Qt/Gui.py

168 lines
6.0 KiB
Python
Raw Blame History

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()