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