more memo work
This commit is contained in:
parent
79e4de5710
commit
3bafa1e48a
21 changed files with 219 additions and 83 deletions
88
convo.py
88
convo.py
|
@ -7,12 +7,10 @@ from generic import PesterIcon
|
|||
from parsetools import escapeBrackets, convertTags
|
||||
|
||||
class PesterTabWindow(QtGui.QFrame):
|
||||
def __init__(self, mainwindow, parent=None):
|
||||
def __init__(self, mainwindow, parent=None, convo="convo"):
|
||||
QtGui.QFrame.__init__(self, parent)
|
||||
self.setFocusPolicy(QtCore.Qt.ClickFocus)
|
||||
self.mainwindow = mainwindow
|
||||
self.resize(*self.mainwindow.theme["convo/size"])
|
||||
self.setStyleSheet(self.mainwindow.theme["convo/style"])
|
||||
|
||||
self.tabs = QtGui.QTabBar(self)
|
||||
self.tabs.setTabsClosable(True)
|
||||
|
@ -20,9 +18,8 @@ class PesterTabWindow(QtGui.QFrame):
|
|||
self, QtCore.SLOT('changeTab(int)'))
|
||||
self.connect(self.tabs, QtCore.SIGNAL('tabCloseRequested(int)'),
|
||||
self, QtCore.SLOT('tabClose(int)'))
|
||||
self.tabs.setShape(self.mainwindow.theme["convo/tabs/tabstyle"])
|
||||
self.tabs.setStyleSheet("QTabBar::tab{ %s } QTabBar::tab:selected { %s }" % (self.mainwindow.theme["convo/tabs/style"], self.mainwindow.theme["convo/tabs/selectedstyle"]))
|
||||
|
||||
self.initTheme(self.mainwindow.theme[convo])
|
||||
self.layout = QtGui.QVBoxLayout()
|
||||
self.layout.setContentsMargins(0,0,0,0)
|
||||
self.layout.addWidget(self.tabs)
|
||||
|
@ -33,8 +30,11 @@ class PesterTabWindow(QtGui.QFrame):
|
|||
self.changedTab = False
|
||||
self.softclose = False
|
||||
|
||||
self.type = convo
|
||||
|
||||
# get default tab color i guess
|
||||
self.defaultTabTextColor = self.getTabTextColor()
|
||||
|
||||
def getTabTextColor(self):
|
||||
# ugly, ugly hack
|
||||
self.changedTab = True
|
||||
|
@ -44,12 +44,12 @@ class PesterTabWindow(QtGui.QFrame):
|
|||
self.changedTab = False
|
||||
return c
|
||||
def addChat(self, convo):
|
||||
self.convos[convo.chum.handle] = convo
|
||||
self.convos[convo.title()] = convo
|
||||
# either addTab or setCurrentIndex will trigger changed()
|
||||
newindex = self.tabs.addTab(convo.chum.handle)
|
||||
self.tabIndices[convo.chum.handle] = newindex
|
||||
newindex = self.tabs.addTab(convo.title())
|
||||
self.tabIndices[convo.title()] = newindex
|
||||
self.tabs.setCurrentIndex(newindex)
|
||||
self.tabs.setTabIcon(newindex, convo.chum.mood.icon(self.mainwindow.theme))
|
||||
self.tabs.setTabIcon(newindex, convo.icon())
|
||||
def showChat(self, handle):
|
||||
tabi = self.tabIndices[handle]
|
||||
if self.tabs.currentIndex() == tabi:
|
||||
|
@ -61,7 +61,7 @@ class PesterTabWindow(QtGui.QFrame):
|
|||
|
||||
def convoHasFocus(self, convo):
|
||||
if ((self.hasFocus() or self.tabs.hasFocus()) and
|
||||
self.tabs.tabText(self.tabs.currentIndex()) == convo.chum.handle):
|
||||
self.tabs.tabText(self.tabs.currentIndex()) == convo.title()):
|
||||
return True
|
||||
|
||||
def keyPressEvent(self, event):
|
||||
|
@ -69,7 +69,7 @@ class PesterTabWindow(QtGui.QFrame):
|
|||
mods = event.modifiers()
|
||||
if ((mods & QtCore.Qt.ControlModifier) and
|
||||
keypress == QtCore.Qt.Key_Tab):
|
||||
nexti = (self.tabIndices[self.currentConvo.chum.handle] + 1) % self.tabs.count()
|
||||
nexti = (self.tabIndices[self.currentConvo.title()] + 1) % self.tabs.count()
|
||||
self.tabs.setCurrentIndex(nexti)
|
||||
|
||||
def closeSoft(self):
|
||||
|
@ -112,7 +112,7 @@ class PesterTabWindow(QtGui.QFrame):
|
|||
|
||||
def notifyNewMessage(self, handle):
|
||||
i = self.tabIndices[handle]
|
||||
self.tabs.setTabTextColor(i, QtGui.QColor(self.mainwindow.theme["convo/tabs/newmsgcolor"]))
|
||||
self.tabs.setTabTextColor(i, QtGui.QColor(self.mainwindow.theme["%s/tabs/newmsgcolor" % (self.type)]))
|
||||
convo = self.convos[handle]
|
||||
def func():
|
||||
convo.showChat()
|
||||
|
@ -125,11 +125,14 @@ class PesterTabWindow(QtGui.QFrame):
|
|||
except KeyError:
|
||||
pass
|
||||
self.mainwindow.waitingMessages.messageAnswered(handle)
|
||||
def initTheme(self, convo):
|
||||
self.resize(*convo["size"])
|
||||
self.setStyleSheet(convo["style"])
|
||||
self.tabs.setShape(convo["tabs"]["tabstyle"])
|
||||
self.tabs.setStyleSheet("QTabBar::tab{ %s } QTabBar::tab:selected { %s }" % (convo["tabs"]["style"], convo["tabs"]["selectedstyle"]))
|
||||
|
||||
def changeTheme(self, theme):
|
||||
self.resize(*theme["convo/size"])
|
||||
self.setStyleSheet(theme["convo/style"])
|
||||
self.tabs.setShape(theme["convo/tabs/tabstyle"])
|
||||
self.tabs.setStyleSheet("QTabBar::tabs{ %s }" % (theme["convo/tabs/style"]))
|
||||
self.initTheme(theme["convo"])
|
||||
for c in self.convos.values():
|
||||
tabi = self.tabIndices[c.chum.handle]
|
||||
self.tabs.setTabIcon(tabi, c.chum.mood.icon(theme))
|
||||
|
@ -174,8 +177,8 @@ class PesterTabWindow(QtGui.QFrame):
|
|||
self.layout.removeWidget(self.currentConvo)
|
||||
self.currentConvo = convo
|
||||
self.layout.addWidget(convo)
|
||||
self.setWindowIcon(convo.chum.mood.icon(self.mainwindow.theme))
|
||||
self.setWindowTitle(convo.chum.handle)
|
||||
self.setWindowIcon(convo.icon())
|
||||
self.setWindowTitle(convo.title())
|
||||
self.activateWindow()
|
||||
self.raise_()
|
||||
convo.raiseChat()
|
||||
|
@ -281,8 +284,8 @@ class PesterConvo(QtGui.QFrame):
|
|||
convo = self.mainwindow.theme["convo"]
|
||||
self.resize(*convo["size"])
|
||||
self.setStyleSheet(convo["style"])
|
||||
self.setWindowIcon(chum.mood.icon(self.mainwindow.theme))
|
||||
self.setWindowTitle(chum.handle)
|
||||
self.setWindowIcon(self.icon())
|
||||
self.setWindowTitle(self.title())
|
||||
|
||||
t = Template(self.mainwindow.theme["convo/chumlabel/text"])
|
||||
|
||||
|
@ -318,17 +321,22 @@ class PesterConvo(QtGui.QFrame):
|
|||
msg = self.mainwindow.profile().pestermsg(self.chum, QtGui.QColor(self.mainwindow.theme["convo/systemMsgColor"]), self.mainwindow.theme["convo/text/beganpester"])
|
||||
self.setChumOpen(True)
|
||||
self.textArea.append(convertTags(msg))
|
||||
self.mainwindow.chatlog.log(self.chum.handle, convertTags(msg, "bbcode"))
|
||||
self.mainwindow.chatlog.log(self.title(), convertTags(msg, "bbcode"))
|
||||
self.newmessage = False
|
||||
|
||||
def title(self):
|
||||
return self.chum.handle
|
||||
def icon(self):
|
||||
return self.chum.mood.icon(self.mainwindow.theme)
|
||||
|
||||
def updateMood(self, mood, unblocked=False):
|
||||
if mood.name() == "offline" and self.chumopen == True and not unblocked:
|
||||
msg = self.chum.pestermsg(self.mainwindow.profile(), QtGui.QColor(self.mainwindow.theme["convo/systemMsgColor"]), self.mainwindow.theme["convo/text/ceasepester"])
|
||||
self.textArea.append(convertTags(msg))
|
||||
self.mainwindow.chatlog.log(self.chum.handle, convertTags(msg, "bbcode"))
|
||||
self.mainwindow.chatlog.log(self.title(), convertTags(msg, "bbcode"))
|
||||
self.chumopen = False
|
||||
if self.parent():
|
||||
self.parent().updateMood(self.chum.handle, mood, unblocked)
|
||||
self.parent().updateMood(self.title(), mood, unblocked)
|
||||
else:
|
||||
if self.chum.blocked(self.mainwindow.config) and not unblocked:
|
||||
self.setWindowIcon(QtGui.QIcon(self.mainwindow.theme["main/chums/moods/blocked/icon"]))
|
||||
|
@ -337,7 +345,7 @@ class PesterConvo(QtGui.QFrame):
|
|||
# print mood update?
|
||||
def updateBlocked(self):
|
||||
if self.parent():
|
||||
self.parent().updateBlocked(self.chum.handle)
|
||||
self.parent().updateBlocked(self.title())
|
||||
else:
|
||||
self.setWindowIcon(QtGui.QIcon(self.mainwindow.theme["main/chums/moods/blocked/icon"]))
|
||||
def updateColor(self, color):
|
||||
|
@ -354,25 +362,25 @@ class PesterConvo(QtGui.QFrame):
|
|||
# first see if this conversation HASS the focus
|
||||
if not (self.hasFocus() or self.textArea.hasFocus() or
|
||||
self.textInput.hasFocus() or
|
||||
(self.parent() and self.parent().convoHasFocus(self.chum.handle))):
|
||||
(self.parent() and self.parent().convoHasFocus(self.title()))):
|
||||
# ok if it has a tabconvo parent, send that the notify.
|
||||
if self.parent():
|
||||
self.parent().notifyNewMessage(self.chum.handle)
|
||||
self.parent().notifyNewMessage(self.title())
|
||||
# if not change the window title and update system tray
|
||||
else:
|
||||
self.newmessage = True
|
||||
self.setWindowTitle(self.chum.handle+"*")
|
||||
self.setWindowTitle(self.title()+"*")
|
||||
def func():
|
||||
self.showChat()
|
||||
self.mainwindow.waitingMessages.addMessage(self.chum.handle, func)
|
||||
self.mainwindow.waitingMessages.addMessage(self.title(), func)
|
||||
|
||||
def clearNewMessage(self):
|
||||
if self.parent():
|
||||
self.parent().clearNewMessage(self.chum.handle)
|
||||
self.parent().clearNewMessage(self.title())
|
||||
elif self.newmessage:
|
||||
self.newmessage = False
|
||||
self.setWindowTitle(self.chum.handle)
|
||||
self.mainwindow.waitingMessages.messageAnswered(self.chum.handle)
|
||||
self.setWindowTitle(self.title())
|
||||
self.mainwindow.waitingMessages.messageAnswered(self.title())
|
||||
# reset system tray
|
||||
def focusInEvent(self, event):
|
||||
self.clearNewMessage()
|
||||
|
@ -384,12 +392,12 @@ class PesterConvo(QtGui.QFrame):
|
|||
|
||||
def showChat(self):
|
||||
if self.parent():
|
||||
self.parent().showChat(self.chum.handle)
|
||||
self.parent().showChat(self.title())
|
||||
self.raiseChat()
|
||||
|
||||
def closeEvent(self, event):
|
||||
self.mainwindow.waitingMessages.messageAnswered(self.chum.handle)
|
||||
self.windowClosed.emit(self.chum.handle)
|
||||
self.mainwindow.waitingMessages.messageAnswered(self.title())
|
||||
self.windowClosed.emit(self.title())
|
||||
def setChumOpen(self, o):
|
||||
self.chumopen = o
|
||||
def changeTheme(self, theme):
|
||||
|
@ -399,9 +407,9 @@ class PesterConvo(QtGui.QFrame):
|
|||
self.layout.setContentsMargins(margins["left"], margins["top"],
|
||||
margins["right"], margins["bottom"])
|
||||
|
||||
self.setWindowIcon(self.chum.mood.icon(theme))
|
||||
self.setWindowIcon(self.icon())
|
||||
t = Template(self.mainwindow.theme["convo/chumlabel/text"])
|
||||
self.chumLabel.setText(t.safe_substitute(handle=self.chum.handle))
|
||||
self.chumLabel.setText(t.safe_substitute(handle=self.title()))
|
||||
self.chumLabel.setStyleSheet(theme["convo/chumlabel/style"])
|
||||
self.chumLabel.setAlignment(self.aligndict["h"][self.mainwindow.theme["convo/chumlabel/align/h"]] | self.aligndict["v"][self.mainwindow.theme["convo/chumlabel/align/v"]])
|
||||
self.chumLabel.setMaximumHeight(self.mainwindow.theme["convo/chumlabel/maxheight"])
|
||||
|
@ -421,13 +429,13 @@ class PesterConvo(QtGui.QFrame):
|
|||
self.textInput.setText("")
|
||||
self.addMessage(text, True)
|
||||
# if ceased, rebegin
|
||||
if not self.chumopen:
|
||||
self.mainwindow.newConvoStarted.emit(QtCore.QString(self.chum.handle), True)
|
||||
if hasattr(self, 'chumopen') and not self.chumopen:
|
||||
self.mainwindow.newConvoStarted.emit(QtCore.QString(self.title()), True)
|
||||
# convert color tags
|
||||
text = convertTags(unicode(text), "ctag")
|
||||
self.messageSent.emit(text, self.chum)
|
||||
self.messageSent.emit(text, self.title())
|
||||
|
||||
messageSent = QtCore.pyqtSignal(QtCore.QString, PesterProfile)
|
||||
messageSent = QtCore.pyqtSignal(QtCore.QString, QtCore.QString)
|
||||
windowClosed = QtCore.pyqtSignal(QtCore.QString)
|
||||
|
||||
aligndict = {"h": {"center": QtCore.Qt.AlignHCenter,
|
||||
|
|
BIN
convo.pyc
BIN
convo.pyc
Binary file not shown.
BIN
dataobjs.pyc
BIN
dataobjs.pyc
Binary file not shown.
BIN
generic.pyc
BIN
generic.pyc
Binary file not shown.
58
memos.py
58
memos.py
|
@ -4,7 +4,24 @@ from PyQt4 import QtGui, QtCore
|
|||
|
||||
from dataobjs import PesterProfile, Mood
|
||||
from generic import PesterIcon
|
||||
from convo import PesterConvo, PesterInput, PesterText
|
||||
from convo import PesterConvo, PesterInput, PesterText, PesterTabWindow
|
||||
|
||||
class MemoTabWindow(PesterTabWindow):
|
||||
def __init__(self, mainwindow, parent=None):
|
||||
PesterTabWindow.__init__(self, mainwindow, parent, "memos")
|
||||
def addChat(self, convo):
|
||||
self.convos[convo.channel] = convo
|
||||
# either addTab or setCurrentIndex will trigger changed()
|
||||
newindex = self.tabs.addTab(convo.channel)
|
||||
self.tabIndices[convo.channel] = newindex
|
||||
self.tabs.setCurrentIndex(newindex)
|
||||
self.tabs.setTabIcon(newindex, PesterIcon(self.mainwindow.theme["memos/memoicon"]))
|
||||
def updateBlocked(self):
|
||||
pass
|
||||
def updateMood(self):
|
||||
pass
|
||||
|
||||
_ctag_begin = re.compile(r'<c=(.*?)>')
|
||||
|
||||
class MemoText(PesterText):
|
||||
def __init__(self, theme, parent=None):
|
||||
|
@ -13,7 +30,11 @@ class MemoText(PesterText):
|
|||
self.setReadOnly(True)
|
||||
self.setMouseTracking(True)
|
||||
def addMessage(self, text, chum):
|
||||
pass
|
||||
# get chum color from c tag
|
||||
mobj = _ctag_begin.match(text)
|
||||
# tinychum sends straight /me with no color. go to chumdb!
|
||||
systemColor = QtGui.QColor(self.parent().mainwindow.theme["memo/systemMsgColor"])
|
||||
|
||||
def changeTheme(self):
|
||||
pass
|
||||
|
||||
|
@ -46,6 +67,9 @@ class PesterMemo(PesterConvo):
|
|||
self.initTheme(self.mainwindow.theme)
|
||||
|
||||
# connect
|
||||
self.connect(self.textInput, QtCore.SIGNAL('returnPressed()'),
|
||||
self, QtCore.SLOT('sentMessage()'))
|
||||
|
||||
layout_0 = QtGui.QVBoxLayout()
|
||||
layout_0.addWidget(self.channelLabel)
|
||||
layout_0.addWidget(self.textArea)
|
||||
|
@ -66,22 +90,27 @@ class PesterMemo(PesterConvo):
|
|||
self.layout.setContentsMargins(margins["left"], margins["top"],
|
||||
margins["right"], margins["bottom"])
|
||||
|
||||
#if parent:
|
||||
# parent.addChat(self)
|
||||
if parent:
|
||||
parent.addChat(self)
|
||||
self.newmessage = False
|
||||
|
||||
def title(self):
|
||||
return self.channel
|
||||
def icon(self):
|
||||
return PesterIcon(self.mainwindow.theme["memos/memoicon"])
|
||||
|
||||
def updateMood(self):
|
||||
pass
|
||||
def updateBlocked(self):
|
||||
pass
|
||||
def updateColor(self):
|
||||
pass
|
||||
def addMessage(self):
|
||||
pass
|
||||
def notifyNewMessage(self):
|
||||
pass
|
||||
def clearNewMessage(self):
|
||||
pass
|
||||
def addMessage(self, text, handle):
|
||||
if type(handle) is bool:
|
||||
chum = self.mainwindow.profile()
|
||||
else:
|
||||
chum = PesterProfile(handle)
|
||||
self.textArea.addMessage(text, chum)
|
||||
|
||||
def initTheme(self, theme):
|
||||
memo = theme["memos"]
|
||||
|
@ -104,14 +133,19 @@ class PesterMemo(PesterConvo):
|
|||
slidercss = "QSlider { %s } QSlider::groove { %s } QSlider::handle { %s }" % (theme["memos/time/slider/style"], theme["memos/time/slider/groove"], theme["memos/time/slider/handle"])
|
||||
self.timeslider.setStyleSheet(slidercss)
|
||||
|
||||
|
||||
def changeTheme(self, theme):
|
||||
self.initTheme(theme)
|
||||
self.textArea.changeTheme(theme)
|
||||
self.textInput.changeTheme(theme)
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def sentMessage(self):
|
||||
pass
|
||||
text = self.textInput.text()
|
||||
if text == "":
|
||||
return
|
||||
text = "<c=%s>%s</c>" % (self.mainwindow.profile().colorcmd(), text)
|
||||
self.textInput.setText(text)
|
||||
PesterConvo.sentMessage(self)
|
||||
|
||||
def closeEvent(self, event):
|
||||
self.mainwindow.waitingMessages.messageAnswered(self.channel)
|
||||
|
|
BIN
memos.pyc
BIN
memos.pyc
Binary file not shown.
25
menus.py
25
menus.py
|
@ -2,7 +2,7 @@ from PyQt4 import QtGui, QtCore
|
|||
import re
|
||||
|
||||
from generic import RightClickList, MultiTextDialog
|
||||
from pesterdata import pesterQuirk, PesterProfile
|
||||
from dataobjs import pesterQuirk, PesterProfile
|
||||
|
||||
class PesterQuirkItem(QtGui.QListWidgetItem):
|
||||
def __init__(self, quirk, parent):
|
||||
|
@ -450,3 +450,26 @@ class PesterMemoList(QtGui.QDialog):
|
|||
def joinActivatedMemo(self, item):
|
||||
self.channelarea.setCurrentItem(item)
|
||||
self.accept()
|
||||
|
||||
|
||||
class LoadingScreen(QtGui.QDialog):
|
||||
def __init__(self, parent=None):
|
||||
QtGui.QDialog.__init__(self, parent, flags=(QtCore.Qt.CustomizeWindowHint |
|
||||
QtCore.Qt.FramelessWindowHint))
|
||||
self.mainwindow = parent
|
||||
self.setStyleSheet(self.mainwindow.theme["main/defaultwindow/style"])
|
||||
|
||||
self.loadinglabel = QtGui.QLabel("LO4D1NG")
|
||||
|
||||
self.layout = QtGui.QVBoxLayout()
|
||||
self.layout.addWidget(self.loadinglabel)
|
||||
self.setLayout(self.layout)
|
||||
QtCore.QTimer.singleShot(25000, self, QtCore.SLOT('connectTimeout()'))
|
||||
@QtCore.pyqtSlot()
|
||||
def connectTimeout(self):
|
||||
if hasattr(self, 'failed'):
|
||||
self.accept()
|
||||
else:
|
||||
self.failed = True
|
||||
self.loadinglabel.setText("F41L3D")
|
||||
QtCore.QTimer.singleShot(1000, self, QtCore.SLOT('connectTimeout()'))
|
||||
|
|
BIN
menus.pyc
BIN
menus.pyc
Binary file not shown.
Binary file not shown.
|
@ -170,7 +170,7 @@ class IRCClient:
|
|||
try:
|
||||
self.command_handler.run(command, prefix, *args)
|
||||
except CommandError:
|
||||
# error will of already been loggingged by the handler
|
||||
# error will have already been loggingged by the handler
|
||||
pass
|
||||
|
||||
yield True
|
||||
|
|
BIN
oyoyo/client.pyc
BIN
oyoyo/client.pyc
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
oyoyo/parse.pyc
BIN
oyoyo/parse.pyc
Binary file not shown.
|
@ -12,7 +12,7 @@ def convertTags(string, format="html"):
|
|||
color = matchobj.group(1)
|
||||
if _ctag_rgb.match(color) is not None:
|
||||
if format=='ctag':
|
||||
return "<c=%s,%s,%s>"
|
||||
return "<c=%s>" % (color)
|
||||
try:
|
||||
qc = QtGui.QColor(*[int(c) for c in color.split(",")])
|
||||
except ValueError:
|
||||
|
|
BIN
parsetools.pyc
BIN
parsetools.pyc
Binary file not shown.
|
@ -1 +1 @@
|
|||
{"tabs": false, "chums": ["aquaMarinist", "marineAquist", "unknownTraveler", "tentacleTherapist", "macruralAlchemist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "superGhost", "centaursTesticle", "arachnidsGrip", "fireSwallow", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr"], "defaultprofile": "testProfile", "block": []}
|
||||
{"tabs": false, "chums": ["aquaMarinist", "marineAquist", "unknownTraveler", "tentacleTherapist", "macruralAlchemist", "vaginalEngineer", "mechanicalSpectacle", "carcinoGeneticist", "schlagzeugGator", "gamblingGenocider", "gardenGnostic", "superGhost", "centaursTesticle", "arachnidsGrip", "fireSwallow", "grimAuxiliatrix", "remoteBloodbath", "nitroZealist", "greenZephyr", "arsenicCatnip", "adiosToreador"], "defaultprofile": "testProfile", "block": []}
|
116
pesterchum.py
116
pesterchum.py
|
@ -14,16 +14,16 @@ from PyQt4 import QtGui, QtCore
|
|||
import pygame
|
||||
|
||||
from menus import PesterChooseQuirks, PesterChooseTheme, \
|
||||
PesterChooseProfile, PesterOptions, PesterUserlist, PesterMemoList
|
||||
PesterChooseProfile, PesterOptions, PesterUserlist, PesterMemoList, \
|
||||
LoadingScreen
|
||||
from dataobjs import PesterProfile, Mood, pesterQuirk, pesterQuirks
|
||||
from generic import PesterIcon, RightClickList, MultiTextDialog
|
||||
from convo import PesterTabWindow, PesterText, PesterInput, PesterConvo
|
||||
from parsetools import convertTags
|
||||
from memos import PesterMemo
|
||||
from memos import PesterMemo, MemoTabWindow
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
|
||||
class waitingMessageHolder(object):
|
||||
def __init__(self, mainwindow, **msgfuncs):
|
||||
self.mainwindow = mainwindow
|
||||
|
@ -583,6 +583,7 @@ class PesterWindow(MovingWindow):
|
|||
self.convos = {}
|
||||
self.memos = {}
|
||||
self.tabconvo = None
|
||||
self.tabmemo = None
|
||||
|
||||
self.setObjectName("main")
|
||||
self.config = userConfig()
|
||||
|
@ -706,6 +707,7 @@ class PesterWindow(MovingWindow):
|
|||
|
||||
if not self.config.defaultprofile():
|
||||
self.changeProfile()
|
||||
self.loadingscreen = LoadingScreen(self)
|
||||
|
||||
def profile(self):
|
||||
return self.userprofile.chat
|
||||
|
@ -717,6 +719,12 @@ class PesterWindow(MovingWindow):
|
|||
else:
|
||||
for c in self.convos.values():
|
||||
c.close()
|
||||
if self.tabmemo:
|
||||
self.tabmemo.close()
|
||||
else:
|
||||
for m in self.memos.values():
|
||||
m.close()
|
||||
|
||||
def closeEvent(self, event):
|
||||
self.closeConversations()
|
||||
if hasattr(self, 'trollslum') and self.trollslum:
|
||||
|
@ -742,6 +750,12 @@ class PesterWindow(MovingWindow):
|
|||
convo.addMessage(msg, False)
|
||||
# play sound here
|
||||
self.alarm.play()
|
||||
def newMemoMsg(self, chan, handle, msg):
|
||||
if not self.memos.has_key(chan):
|
||||
# silently ignore in case we forgot to /part
|
||||
return
|
||||
memo = self.memos[chan]
|
||||
memo.addMessage(msg, handle)
|
||||
|
||||
def changeColor(self, handle, color):
|
||||
# pesterconvo and chumlist
|
||||
|
@ -767,33 +781,46 @@ class PesterWindow(MovingWindow):
|
|||
self.tabconvo.show()
|
||||
else:
|
||||
convoWindow = PesterConvo(chum, initiated, self)
|
||||
self.connect(convoWindow, QtCore.SIGNAL('messageSent(QString, PyQt_PyObject)'),
|
||||
self, QtCore.SIGNAL('sendMessage(QString, PyQt_PyObject)'))
|
||||
self.connect(convoWindow, QtCore.SIGNAL('messageSent(QString, QString)'),
|
||||
self, QtCore.SIGNAL('sendMessage(QString, QString)'))
|
||||
self.connect(convoWindow, QtCore.SIGNAL('windowClosed(QString)'),
|
||||
self, QtCore.SLOT('closeConvo(QString)'))
|
||||
self.convos[chum.handle] = convoWindow
|
||||
self.newConvoStarted.emit(QtCore.QString(chum.handle), initiated)
|
||||
convoWindow.show()
|
||||
|
||||
def createTabWindow(self):
|
||||
self.tabconvo = PesterTabWindow(self)
|
||||
self.connect(self.tabconvo, QtCore.SIGNAL('windowClosed()'),
|
||||
self, QtCore.SLOT('tabsClosed()'))
|
||||
|
||||
def createMemoTabWindow(self):
|
||||
self.tabmemo = MemoTabWindow(self)
|
||||
self.connect(self.tabmemo, QtCore.SIGNAL('windowClosed()'),
|
||||
self, QtCore.SLOT('memoTabsClosed()'))
|
||||
|
||||
def newMemo(self, channel):
|
||||
if channel == "#pesterchum":
|
||||
return
|
||||
if self.memos.has_key(channel):
|
||||
# load memo
|
||||
return
|
||||
# do slider dialog then set
|
||||
if self.config.tabs():
|
||||
if not self.tabmemo:
|
||||
self.createMemoTabWindow()
|
||||
memoWindow = PesterMemo(channel, self, self.tabmemo)
|
||||
self.tabmemo.show()
|
||||
else:
|
||||
# do slider dialog then set
|
||||
if self.config.tabs():
|
||||
# create new tabbed memo window
|
||||
pass
|
||||
else:
|
||||
self.memoWindow = PesterMemo(channel, self, None)
|
||||
memoWindow = PesterMemo(channel, self, None)
|
||||
# connect signals
|
||||
self.connect(memoWindow, QtCore.SIGNAL('messageSent(QString, QString)'),
|
||||
self, QtCore.SIGNAL('sendMessage(QString, QString)'))
|
||||
# self.connect(memoWindow, QtCore.SIGNAL('windowClosed(QString)'),
|
||||
# self, QtCore.SLOT('closeConvo(QString)'))
|
||||
# chat client send memo open
|
||||
self.memoWindow.show()
|
||||
self.memos[channel] = memoWindow
|
||||
self.joinChannel.emit(channel)
|
||||
memoWindow.show()
|
||||
|
||||
def addChum(self, chum):
|
||||
self.chumList.addChum(chum)
|
||||
|
@ -919,7 +946,11 @@ class PesterWindow(MovingWindow):
|
|||
else:
|
||||
self.waitingMessages.answerMessage()
|
||||
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def connected(self):
|
||||
if self.loadingscreen:
|
||||
self.loadingscreen.close()
|
||||
self.loadingscreen = None
|
||||
@QtCore.pyqtSlot()
|
||||
def blockSelectedChum(self):
|
||||
curChumListing = self.chumList.currentItem()
|
||||
|
@ -953,6 +984,10 @@ class PesterWindow(MovingWindow):
|
|||
def tabsClosed(self):
|
||||
del self.tabconvo
|
||||
self.tabconvo = None
|
||||
@QtCore.pyqtSlot()
|
||||
def memoTabsClosed(self):
|
||||
del self.tabmemo
|
||||
self.tabmemo = None
|
||||
|
||||
@QtCore.pyqtSlot(QtCore.QString, Mood)
|
||||
def updateMoodSlot(self, handle, mood):
|
||||
|
@ -969,6 +1004,10 @@ class PesterWindow(MovingWindow):
|
|||
h = unicode(handle)
|
||||
m = unicode(msg)
|
||||
self.newMessage(h, m)
|
||||
@QtCore.pyqtSlot(QtCore.QString, QtCore.QString, QtCore.QString)
|
||||
def deliverMemo(self, chan, handle, msg):
|
||||
(c, h, m) = (unicode(chan), unicode(handle), unicode(msg))
|
||||
self.newMemoMsg(c,h,m)
|
||||
|
||||
@QtCore.pyqtSlot(QtCore.QString, PesterList)
|
||||
def updateNames(self, channel, names):
|
||||
|
@ -1083,9 +1122,11 @@ class PesterWindow(MovingWindow):
|
|||
newmemo = self.memochooser.newmemoname()
|
||||
selectedmemo = self.memochooser.selectedmemo()
|
||||
if newmemo:
|
||||
self.newMemo('#'+newmemo)
|
||||
else:
|
||||
self.newMemo('#'+selectedmemo.text())
|
||||
channel = "#"+unicode(newmemo)
|
||||
self.newMemo(channel)
|
||||
elif selectedmemo:
|
||||
channel = "#"+unicode(selectedmemo.text())
|
||||
self.newMemo(channel)
|
||||
self.memochooser = None
|
||||
@QtCore.pyqtSlot()
|
||||
def memoChooserClose(self):
|
||||
|
@ -1310,7 +1351,7 @@ class PesterWindow(MovingWindow):
|
|||
pass
|
||||
|
||||
newConvoStarted = QtCore.pyqtSignal(QtCore.QString, bool, name="newConvoStarted")
|
||||
sendMessage = QtCore.pyqtSignal(QtCore.QString, PesterProfile)
|
||||
sendMessage = QtCore.pyqtSignal(QtCore.QString, QtCore.QString)
|
||||
convoClosed = QtCore.pyqtSignal(QtCore.QString)
|
||||
profileChanged = QtCore.pyqtSignal()
|
||||
moodRequest = QtCore.pyqtSignal(PesterProfile)
|
||||
|
@ -1324,6 +1365,7 @@ class PesterWindow(MovingWindow):
|
|||
trayIconSignal = QtCore.pyqtSignal(int)
|
||||
blockedChum = QtCore.pyqtSignal(QtCore.QString)
|
||||
unblockedChum = QtCore.pyqtSignal(QtCore.QString)
|
||||
joinChannel = QtCore.pyqtSignal(QtCore.QString)
|
||||
|
||||
class PesterIRC(QtCore.QObject):
|
||||
def __init__(self, window):
|
||||
|
@ -1342,10 +1384,10 @@ class PesterIRC(QtCore.QObject):
|
|||
def getMoods(self, chums):
|
||||
self.cli.command_handler.getMood(*chums)
|
||||
|
||||
@QtCore.pyqtSlot(QtCore.QString, PesterProfile)
|
||||
def sendMessage(self, text, chum):
|
||||
handle = chum.handle
|
||||
helpers.msg(self.cli, handle, text)
|
||||
@QtCore.pyqtSlot(QtCore.QString, QtCore.QString)
|
||||
def sendMessage(self, text, handle):
|
||||
h = unicode(handle)
|
||||
helpers.msg(self.cli, h, text)
|
||||
|
||||
@QtCore.pyqtSlot(QtCore.QString, bool)
|
||||
def startConvo(self, handle, initiated):
|
||||
|
@ -1387,16 +1429,21 @@ class PesterIRC(QtCore.QObject):
|
|||
@QtCore.pyqtSlot()
|
||||
def requestChannelList(self):
|
||||
helpers.channel_list(self.cli)
|
||||
|
||||
@QtCore.pyqtSlot(QtCore.QString)
|
||||
def joinChannel(self, channel):
|
||||
c = unicode(channel)
|
||||
helpers.join(self.cli, c)
|
||||
def updateIRC(self):
|
||||
self.conn.next()
|
||||
|
||||
moodUpdated = QtCore.pyqtSignal(QtCore.QString, Mood)
|
||||
colorUpdated = QtCore.pyqtSignal(QtCore.QString, QtGui.QColor)
|
||||
messageReceived = QtCore.pyqtSignal(QtCore.QString, QtCore.QString)
|
||||
memoReceived = QtCore.pyqtSignal(QtCore.QString, QtCore.QString, QtCore.QString)
|
||||
namesReceived = QtCore.pyqtSignal(QtCore.QString, PesterList)
|
||||
channelListReceived = QtCore.pyqtSignal(PesterList)
|
||||
nickCollision = QtCore.pyqtSignal(QtCore.QString, QtCore.QString)
|
||||
connected = QtCore.pyqtSignal()
|
||||
userPresentUpdate = QtCore.pyqtSignal(QtCore.QString, QtCore.QString,
|
||||
QtCore.QString)
|
||||
|
||||
|
@ -1422,7 +1469,12 @@ class PesterHandler(DefaultCommandHandler):
|
|||
if msg.find(mychumhandle, 8) != -1:
|
||||
helpers.msg(self.client, "#pesterchum",
|
||||
"MOOD >%d" % (mymood))
|
||||
|
||||
elif chan[0] == '#':
|
||||
if msg[0:16] == "PESTERCHUM:TIME>":
|
||||
# send time msg
|
||||
pass
|
||||
else:
|
||||
self.parent.memoReceived.emit(chan, handle, msg)
|
||||
else:
|
||||
# private message
|
||||
# silently ignore messages to yourself.
|
||||
|
@ -1441,6 +1493,7 @@ class PesterHandler(DefaultCommandHandler):
|
|||
|
||||
|
||||
def welcome(self, server, nick, msg):
|
||||
self.parent.connected.emit()
|
||||
helpers.join(self.client, "#pesterchum")
|
||||
mychumhandle = self.mainwindow.profile().handle
|
||||
mymood = self.mainwindow.profile().mood.value()
|
||||
|
@ -1561,8 +1614,8 @@ def main():
|
|||
|
||||
irc = PesterIRC(widget)
|
||||
irc.IRCConnect()
|
||||
irc.connect(widget, QtCore.SIGNAL('sendMessage(QString, PyQt_PyObject)'),
|
||||
irc, QtCore.SLOT('sendMessage(QString, PyQt_PyObject)'))
|
||||
irc.connect(widget, QtCore.SIGNAL('sendMessage(QString, QString)'),
|
||||
irc, QtCore.SLOT('sendMessage(QString, QString)'))
|
||||
irc.connect(widget,
|
||||
QtCore.SIGNAL('newConvoStarted(QString, bool)'),
|
||||
irc, QtCore.SLOT('startConvo(QString, bool)'))
|
||||
|
@ -1605,8 +1658,14 @@ def main():
|
|||
QtCore.SIGNAL('requestChannelList()'),
|
||||
irc,
|
||||
QtCore.SLOT('requestChannelList()'))
|
||||
irc.connect(widget,
|
||||
QtCore.SIGNAL('joinChannel(QString)'),
|
||||
irc,
|
||||
QtCore.SLOT('joinChannel(QString)'))
|
||||
|
||||
# IRC --> Main window
|
||||
irc.connect(irc, QtCore.SIGNAL('connected()'),
|
||||
widget, QtCore.SLOT('connected()'))
|
||||
irc.connect(irc,
|
||||
QtCore.SIGNAL('moodUpdated(QString, PyQt_PyObject)'),
|
||||
widget,
|
||||
|
@ -1619,6 +1678,10 @@ def main():
|
|||
QtCore.SIGNAL('messageReceived(QString, QString)'),
|
||||
widget,
|
||||
QtCore.SLOT('deliverMessage(QString, QString)'))
|
||||
irc.connect(irc,
|
||||
QtCore.SIGNAL('memoReceived(QString, QString, QString)'),
|
||||
widget,
|
||||
QtCore.SLOT('deliverMemo(QString, QString, QString)'))
|
||||
irc.connect(irc,
|
||||
QtCore.SIGNAL('nickCollision(QString, QString)'),
|
||||
widget,
|
||||
|
@ -1638,6 +1701,7 @@ def main():
|
|||
|
||||
ircapp = IRCThread(irc)
|
||||
ircapp.start()
|
||||
widget.loadingscreen.exec_()
|
||||
sys.exit(app.exec_())
|
||||
|
||||
main()
|
||||
|
|
|
@ -216,6 +216,12 @@
|
|||
{"memoicon": "$path/memo.png",
|
||||
"style": "background: #fdb302; font-family:'Courier';font:bold;selection-background-color:#919191; ",
|
||||
"size": [600,300],
|
||||
"tabs": {
|
||||
"style": "",
|
||||
"selectedstyle": "",
|
||||
"newmsgcolor": "#fdb302",
|
||||
"tabstyle": 0
|
||||
},
|
||||
"label": { "text": "$channel",
|
||||
"style": "background: rgb(196, 138, 0); color: white; border:0px;",
|
||||
"align": { "h": "center", "v": "center" },
|
||||
|
@ -230,6 +236,7 @@
|
|||
"slider": { "style": "",
|
||||
"groove": "",
|
||||
"handle": "" }
|
||||
}
|
||||
},
|
||||
"systemMsgColor": "#646464"
|
||||
}
|
||||
}
|
Binary file not shown.
Loading…
Reference in a new issue