toxygen/toxygen/mainscreen_widgets.py

515 lines
20 KiB
Python
Raw Normal View History

2017-04-11 20:10:03 +02:00
from PyQt5 import QtCore, QtGui, QtWidgets
from widgets import RubberBand, create_menu, QRightClickButton, CenteredWidget, LineEdit
2016-07-06 15:25:04 +02:00
from profile import Profile
2016-06-14 20:47:03 +02:00
import smileys
import util
2016-06-13 23:32:45 +02:00
2017-04-11 20:10:03 +02:00
class MessageArea(QtWidgets.QPlainTextEdit):
2016-06-15 20:02:59 +02:00
"""User types messages here"""
2016-06-13 23:32:45 +02:00
def __init__(self, parent, form):
super(MessageArea, self).__init__(parent)
self.parent = form
self.setAcceptDrops(True)
self.timer = QtCore.QTimer(self)
self.timer.timeout.connect(lambda: self.parent.profile.send_typing(False))
def keyPressEvent(self, event):
if event.matches(QtGui.QKeySequence.Paste):
2017-04-11 20:10:03 +02:00
mimeData = QtWidgets.QApplication.clipboard().mimeData()
2016-07-19 19:18:29 +02:00
if mimeData.hasUrls():
for url in mimeData.urls():
self.pasteEvent(url.toString())
else:
self.pasteEvent()
2016-06-13 23:32:45 +02:00
elif event.key() in (QtCore.Qt.Key_Return, QtCore.Qt.Key_Enter):
modifiers = event.modifiers()
if modifiers & QtCore.Qt.ControlModifier or modifiers & QtCore.Qt.ShiftModifier:
self.insertPlainText('\n')
else:
if self.timer.isActive():
self.timer.stop()
self.parent.profile.send_typing(False)
self.parent.send_message()
elif event.key() == QtCore.Qt.Key_Up and not self.toPlainText():
self.appendPlainText(Profile.get_instance().get_last_message())
else:
self.parent.profile.send_typing(True)
if self.timer.isActive():
self.timer.stop()
self.timer.start(5000)
super(MessageArea, self).keyPressEvent(event)
def contextMenuEvent(self, event):
menu = create_menu(self.createStandardContextMenu())
menu.exec_(event.globalPos())
del menu
def dragEnterEvent(self, e):
e.accept()
def dragMoveEvent(self, e):
e.accept()
def dropEvent(self, e):
2016-07-19 19:18:29 +02:00
if e.mimeData().hasFormat('text/plain') or e.mimeData().hasFormat('text/html'):
2016-06-13 23:32:45 +02:00
e.accept()
self.pasteEvent(e.mimeData().text())
2016-07-19 19:18:29 +02:00
elif e.mimeData().hasUrls():
for url in e.mimeData().urls():
self.pasteEvent(url.toString())
e.accept()
2016-06-13 23:32:45 +02:00
else:
e.ignore()
def pasteEvent(self, text=None):
2017-04-11 20:10:03 +02:00
text = text or QtWidgets.QApplication.clipboard().text()
2016-06-13 23:32:45 +02:00
if text.startswith('file://'):
self.parent.profile.send_file(text[7:])
else:
self.insertPlainText(text)
2017-04-11 20:10:03 +02:00
class ScreenShotWindow(QtWidgets.QWidget):
2016-06-13 23:32:45 +02:00
def __init__(self, parent):
super(ScreenShotWindow, self).__init__()
self.parent = parent
self.setMouseTracking(True)
self.setWindowFlags(self.windowFlags() | QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
self.showFullScreen()
self.setWindowOpacity(0.5)
self.rubberband = RubberBand()
2017-04-16 21:56:31 +02:00
self.rubberband.setWindowFlags(self.rubberband.windowFlags() | QtCore.Qt.FramelessWindowHint)
self.rubberband.setAttribute(QtCore.Qt.WA_TranslucentBackground)
2016-06-13 23:32:45 +02:00
def closeEvent(self, *args):
if self.parent.isHidden():
self.parent.show()
def mousePressEvent(self, event):
self.origin = event.pos()
self.rubberband.setGeometry(QtCore.QRect(self.origin, QtCore.QSize()))
self.rubberband.show()
2017-04-11 20:10:03 +02:00
QtWidgets.QWidget.mousePressEvent(self, event)
2016-06-13 23:32:45 +02:00
def mouseMoveEvent(self, event):
if self.rubberband.isVisible():
self.rubberband.setGeometry(QtCore.QRect(self.origin, event.pos()).normalized())
left = QtGui.QRegion(QtCore.QRect(0, 0, self.rubberband.x(), self.height()))
right = QtGui.QRegion(QtCore.QRect(self.rubberband.x() + self.rubberband.width(), 0, self.width(), self.height()))
top = QtGui.QRegion(0, 0, self.width(), self.rubberband.y())
bottom = QtGui.QRegion(0, self.rubberband.y() + self.rubberband.height(), self.width(), self.height())
self.setMask(left + right + top + bottom)
def mouseReleaseEvent(self, event):
if self.rubberband.isVisible():
self.rubberband.hide()
rect = self.rubberband.geometry()
if rect.width() and rect.height():
2017-04-13 18:22:46 +02:00
screen = QtWidgets.QApplication.primaryScreen()
p = screen.grabWindow(0,
rect.x() + 4,
rect.y() + 4,
rect.width() - 8,
rect.height() - 8)
2016-06-13 23:32:45 +02:00
byte_array = QtCore.QByteArray()
buffer = QtCore.QBuffer(byte_array)
buffer.open(QtCore.QIODevice.WriteOnly)
p.save(buffer, 'PNG')
2016-06-22 10:48:00 +02:00
Profile.get_instance().send_screenshot(bytes(byte_array.data()))
2016-06-13 23:32:45 +02:00
self.close()
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Escape:
self.rubberband.setHidden(True)
self.close()
else:
super(ScreenShotWindow, self).keyPressEvent(event)
2016-06-14 20:47:03 +02:00
2017-04-11 20:10:03 +02:00
class SmileyWindow(QtWidgets.QWidget):
2016-06-15 20:02:59 +02:00
"""
Smiley selection window
"""
2016-06-14 20:47:03 +02:00
def __init__(self, parent):
super(SmileyWindow, self).__init__()
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
inst = smileys.SmileyLoader.get_instance()
self.data = inst.get_smileys()
count = len(self.data)
2016-06-27 18:28:43 +02:00
if not count:
self.close()
2016-06-15 20:02:59 +02:00
self.page_size = int(pow(count / 8, 0.5) + 1) * 8 # smileys per page
2016-06-14 20:47:03 +02:00
if count % self.page_size == 0:
2016-06-23 10:18:18 +02:00
self.page_count = count // self.page_size
2016-06-14 20:47:03 +02:00
else:
2016-06-27 18:28:43 +02:00
self.page_count = round(count / self.page_size + 0.5)
2016-06-23 10:18:18 +02:00
self.page = -1
2016-06-14 20:47:03 +02:00
self.radio = []
self.parent = parent
2016-06-15 20:02:59 +02:00
for i in range(self.page_count): # buttons with smileys
2017-04-11 20:10:03 +02:00
elem = QtWidgets.QRadioButton(self)
2016-06-14 20:47:03 +02:00
elem.setGeometry(QtCore.QRect(i * 20 + 5, 180, 20, 20))
elem.clicked.connect(lambda i=i: self.checked(i))
self.radio.append(elem)
width = max(self.page_count * 20 + 30, (self.page_size + 5) * 8 // 10)
2016-06-14 20:47:03 +02:00
self.setMaximumSize(width, 200)
self.setMinimumSize(width, 200)
self.buttons = []
2016-06-15 20:02:59 +02:00
for i in range(self.page_size): # pages - radio buttons
2017-04-11 20:10:03 +02:00
b = QtWidgets.QPushButton(self)
b.setGeometry(QtCore.QRect((i // 8) * 20 + 5, (i % 8) * 20, 20, 20))
2016-06-14 20:47:03 +02:00
b.clicked.connect(lambda i=i: self.clicked(i))
self.buttons.append(b)
self.checked(0)
2016-06-15 20:02:59 +02:00
def checked(self, pos): # new page opened
2016-06-14 20:47:03 +02:00
self.radio[self.page].setChecked(False)
self.radio[pos].setChecked(True)
self.page = pos
start = self.page * self.page_size
for i in range(self.page_size):
try:
self.buttons[i].setVisible(True)
pixmap = QtGui.QPixmap(self.data[start + i][1])
icon = QtGui.QIcon(pixmap)
self.buttons[i].setIcon(icon)
except:
self.buttons[i].setVisible(False)
2016-06-15 20:02:59 +02:00
def clicked(self, pos): # smiley selected
2016-06-14 20:47:03 +02:00
pos += self.page * self.page_size
smiley = self.data[pos][0]
self.parent.messageEdit.insertPlainText(smiley)
self.close()
2016-06-15 20:02:59 +02:00
def leaveEvent(self, event):
self.close()
2016-06-14 20:47:03 +02:00
2017-04-11 20:10:03 +02:00
class MenuButton(QtWidgets.QPushButton):
2016-06-14 20:47:03 +02:00
def __init__(self, parent, enter):
super(MenuButton, self).__init__(parent)
self.enter = enter
def enterEvent(self, event):
self.enter()
super(MenuButton, self).enterEvent(event)
2017-04-11 20:10:03 +02:00
class DropdownMenu(QtWidgets.QWidget):
2016-06-14 20:47:03 +02:00
def __init__(self, parent):
super(DropdownMenu, self).__init__(parent)
self.installEventFilter(self)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
2016-07-02 21:19:04 +02:00
self.setMaximumSize(180, 120)
self.setMinimumSize(180, 120)
2016-06-14 20:47:03 +02:00
self.screenshotButton = QRightClickButton(self)
2016-07-02 21:19:04 +02:00
self.screenshotButton.setGeometry(QtCore.QRect(0, 60, 60, 60))
2016-06-14 20:47:03 +02:00
self.screenshotButton.setObjectName("screenshotButton")
2017-04-11 20:10:03 +02:00
self.fileTransferButton = QtWidgets.QPushButton(self)
2016-07-02 21:19:04 +02:00
self.fileTransferButton.setGeometry(QtCore.QRect(60, 60, 60, 60))
2016-06-14 20:47:03 +02:00
self.fileTransferButton.setObjectName("fileTransferButton")
2017-04-11 20:10:03 +02:00
self.audioMessageButton = QtWidgets.QPushButton(self)
2016-07-02 21:19:04 +02:00
self.audioMessageButton.setGeometry(QtCore.QRect(120, 60, 60, 60))
2016-06-14 20:47:03 +02:00
2017-04-11 20:10:03 +02:00
self.smileyButton = QtWidgets.QPushButton(self)
2016-07-02 21:19:04 +02:00
self.smileyButton.setGeometry(QtCore.QRect(0, 0, 60, 60))
2016-06-14 20:47:03 +02:00
2017-04-11 20:10:03 +02:00
self.videoMessageButton = QtWidgets.QPushButton(self)
2016-07-02 21:19:04 +02:00
self.videoMessageButton.setGeometry(QtCore.QRect(120, 0, 60, 60))
2016-06-14 20:47:03 +02:00
2017-04-11 20:10:03 +02:00
self.stickerButton = QtWidgets.QPushButton(self)
2016-07-02 21:19:04 +02:00
self.stickerButton.setGeometry(QtCore.QRect(60, 0, 60, 60))
2016-06-14 20:47:03 +02:00
pixmap = QtGui.QPixmap(util.curr_directory() + '/images/file.png')
icon = QtGui.QIcon(pixmap)
self.fileTransferButton.setIcon(icon)
2016-07-02 21:19:04 +02:00
self.fileTransferButton.setIconSize(QtCore.QSize(50, 50))
2016-06-14 20:47:03 +02:00
pixmap = QtGui.QPixmap(util.curr_directory() + '/images/screenshot.png')
icon = QtGui.QIcon(pixmap)
self.screenshotButton.setIcon(icon)
2016-07-02 21:19:04 +02:00
self.screenshotButton.setIconSize(QtCore.QSize(50, 60))
2016-06-14 20:47:03 +02:00
pixmap = QtGui.QPixmap(util.curr_directory() + '/images/audio_message.png')
icon = QtGui.QIcon(pixmap)
self.audioMessageButton.setIcon(icon)
2016-07-02 21:19:04 +02:00
self.audioMessageButton.setIconSize(QtCore.QSize(50, 50))
2016-06-14 20:47:03 +02:00
pixmap = QtGui.QPixmap(util.curr_directory() + '/images/smiley.png')
icon = QtGui.QIcon(pixmap)
self.smileyButton.setIcon(icon)
2016-07-02 21:19:04 +02:00
self.smileyButton.setIconSize(QtCore.QSize(50, 50))
2016-06-14 20:47:03 +02:00
pixmap = QtGui.QPixmap(util.curr_directory() + '/images/video_message.png')
icon = QtGui.QIcon(pixmap)
self.videoMessageButton.setIcon(icon)
2016-07-02 21:19:04 +02:00
self.videoMessageButton.setIconSize(QtCore.QSize(55, 55))
2016-06-14 20:47:03 +02:00
pixmap = QtGui.QPixmap(util.curr_directory() + '/images/sticker.png')
icon = QtGui.QIcon(pixmap)
self.stickerButton.setIcon(icon)
2016-07-02 21:19:04 +02:00
self.stickerButton.setIconSize(QtCore.QSize(55, 55))
2016-06-14 20:47:03 +02:00
2017-04-11 20:10:03 +02:00
self.screenshotButton.setToolTip(QtWidgets.QApplication.translate("MenuWindow", "Send screenshot"))
self.fileTransferButton.setToolTip(QtWidgets.QApplication.translate("MenuWindow", "Send file"))
self.audioMessageButton.setToolTip(QtWidgets.QApplication.translate("MenuWindow", "Send audio message"))
self.videoMessageButton.setToolTip(QtWidgets.QApplication.translate("MenuWindow", "Send video message"))
self.smileyButton.setToolTip(QtWidgets.QApplication.translate("MenuWindow", "Add smiley"))
self.stickerButton.setToolTip(QtWidgets.QApplication.translate("MenuWindow", "Send sticker"))
2016-06-14 20:47:03 +02:00
self.fileTransferButton.clicked.connect(parent.send_file)
self.screenshotButton.clicked.connect(parent.send_screenshot)
2017-04-13 18:22:46 +02:00
self.screenshotButton.rightClicked.connect(lambda: parent.send_screenshot(True))
2016-06-14 20:47:03 +02:00
self.smileyButton.clicked.connect(parent.send_smiley)
2016-06-14 22:55:41 +02:00
self.stickerButton.clicked.connect(parent.send_sticker)
2016-06-14 20:47:03 +02:00
def leaveEvent(self, event):
self.close()
def eventFilter(self, object, event):
if event.type() == QtCore.QEvent.WindowDeactivate:
self.close()
return False
2016-06-14 22:55:41 +02:00
2017-04-11 20:10:03 +02:00
class StickerItem(QtWidgets.QWidget):
2016-06-14 22:55:41 +02:00
def __init__(self, fl):
super(StickerItem, self).__init__()
2017-04-11 20:10:03 +02:00
self._image_label = QtWidgets.QLabel(self)
2016-06-14 22:55:41 +02:00
self.path = fl
self.pixmap = QtGui.QPixmap()
self.pixmap.load(fl)
2016-06-15 20:02:59 +02:00
if self.pixmap.width() > 150:
self.pixmap = self.pixmap.scaled(150, 200, QtCore.Qt.KeepAspectRatio)
2016-06-14 22:55:41 +02:00
self.setFixedSize(150, self.pixmap.height())
self._image_label.setPixmap(self.pixmap)
2017-04-11 20:10:03 +02:00
class StickerWindow(QtWidgets.QWidget):
2016-06-15 20:02:59 +02:00
"""Sticker selection window"""
2016-06-14 22:55:41 +02:00
def __init__(self, parent):
super(StickerWindow, self).__init__()
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setMaximumSize(250, 200)
self.setMinimumSize(250, 200)
2017-04-11 20:10:03 +02:00
self.list = QtWidgets.QListWidget(self)
self.list.setGeometry(QtCore.QRect(0, 0, 250, 200))
2016-06-14 22:55:41 +02:00
self.arr = smileys.sticker_loader()
for sticker in self.arr:
item = StickerItem(sticker)
2017-04-11 20:10:03 +02:00
elem = QtWidgets.QListWidgetItem()
elem.setSizeHint(QtCore.QSize(250, item.height()))
2016-06-14 22:55:41 +02:00
self.list.addItem(elem)
self.list.setItemWidget(elem, item)
2017-04-11 20:10:03 +02:00
self.list.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
self.list.setSpacing(3)
2016-06-14 22:55:41 +02:00
self.list.clicked.connect(self.click)
self.parent = parent
def click(self, index):
num = index.row()
self.parent.profile.send_sticker(self.arr[num])
self.close()
2016-06-15 20:02:59 +02:00
def leaveEvent(self, event):
self.close()
2016-06-14 22:55:41 +02:00
2016-07-04 22:30:45 +02:00
class WelcomeScreen(CenteredWidget):
def __init__(self):
super().__init__()
self.setMaximumSize(250, 200)
self.setMinimumSize(250, 200)
self.center()
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
2017-04-11 20:10:03 +02:00
self.text = QtWidgets.QTextBrowser(self)
2016-07-04 22:30:45 +02:00
self.text.setGeometry(QtCore.QRect(0, 0, 250, 170))
self.text.setOpenExternalLinks(True)
2017-04-11 20:10:03 +02:00
self.checkbox = QtWidgets.QCheckBox(self)
2016-07-04 22:30:45 +02:00
self.checkbox.setGeometry(QtCore.QRect(5, 170, 240, 30))
self.checkbox.setText(QtWidgets.QApplication.translate('WelcomeScreen', "Don't show again"))
self.setWindowTitle(QtWidgets.QApplication.translate('WelcomeScreen', 'Tip of the day'))
2016-07-04 22:30:45 +02:00
import random
2016-07-14 11:32:21 +02:00
num = random.randint(0, 10)
2016-07-04 22:30:45 +02:00
if num == 0:
text = QtWidgets.QApplication.translate('WelcomeScreen', 'Press Esc if you want hide app to tray.')
2016-07-04 22:30:45 +02:00
elif num == 1:
2017-04-11 20:10:03 +02:00
text = QtWidgets.QApplication.translate('WelcomeScreen',
'Right click on screenshot button hides app to tray during screenshot.')
2016-07-04 22:30:45 +02:00
elif num == 2:
2017-04-11 20:10:03 +02:00
text = QtWidgets.QApplication.translate('WelcomeScreen',
'You can use Tox over Tor. For more info read <a href="https://wiki.tox.chat/users/tox_over_tor_tot">this post</a>')
2016-07-04 22:30:45 +02:00
elif num == 3:
2017-04-11 20:10:03 +02:00
text = QtWidgets.QApplication.translate('WelcomeScreen',
'Use Settings -> Interface to customize interface.')
2016-07-04 22:30:45 +02:00
elif num == 4:
2017-04-11 20:10:03 +02:00
text = QtWidgets.QApplication.translate('WelcomeScreen',
'Set profile password via Profile -> Settings. Password allows Toxygen encrypt your history and settings.')
2016-07-04 22:30:45 +02:00
elif num == 5:
2017-04-11 20:10:03 +02:00
text = QtWidgets.QApplication.translate('WelcomeScreen',
'Since v0.1.3 Toxygen supports plugins. <a href="https://github.com/xveduk/toxygen/blob/master/docs/plugins.md">Read more</a>')
2017-02-20 21:47:55 +01:00
elif num in (6, 7):
2017-04-11 20:10:03 +02:00
text = QtWidgets.QApplication.translate('WelcomeScreen',
'Toxygen supports faux offline messages and file transfers. Send message or file to offline friend and he will get it later.')
2016-07-14 11:32:21 +02:00
elif num == 8:
2017-04-11 20:10:03 +02:00
text = QtWidgets.QApplication.translate('WelcomeScreen',
'Delete single message in chat: make right click on spinner or message time and choose "Delete" in menu')
2016-07-14 11:32:21 +02:00
elif num == 9:
2017-04-11 20:10:03 +02:00
text = QtWidgets.QApplication.translate('WelcomeScreen',
'Use right click on inline image to save it')
2016-07-04 22:30:45 +02:00
else:
2017-04-11 20:10:03 +02:00
text = QtWidgets.QApplication.translate('WelcomeScreen',
'Set new NoSpam to avoid spam friend requests: Profile -> Settings -> Set new NoSpam.')
2016-07-04 22:30:45 +02:00
self.text.setHtml(text)
self.checkbox.stateChanged.connect(self.not_show)
QtCore.QTimer.singleShot(1000, self.show)
def not_show(self):
import settings
s = settings.Settings.get_instance()
s['show_welcome_screen'] = False
s.save()
2016-11-05 11:03:47 +01:00
2017-04-11 20:10:03 +02:00
class MainMenuButton(QtWidgets.QPushButton):
2016-11-05 11:03:47 +01:00
def __init__(self, *args):
super().__init__(*args)
self.setObjectName("mainmenubutton")
def setText(self, text):
metrics = QtGui.QFontMetrics(self.font())
self.setFixedWidth(metrics.size(QtCore.Qt.TextSingleLine, text).width() + 20)
super().setText(text)
2017-04-11 20:10:03 +02:00
class ClickableLabel(QtWidgets.QLabel):
2017-04-16 21:56:31 +02:00
clicked = QtCore.pyqtSignal()
def __init__(self, *args):
super().__init__(*args)
def mouseReleaseEvent(self, ev):
2017-04-16 21:56:31 +02:00
self.clicked.emit()
2017-04-11 20:10:03 +02:00
class SearchScreen(QtWidgets.QWidget):
def __init__(self, messages, width, *args):
super().__init__(*args)
self.setMaximumSize(width, 40)
self.setMinimumSize(width, 40)
self._messages = messages
self.search_text = LineEdit(self)
2017-02-12 17:46:53 +01:00
self.search_text.setGeometry(0, 0, width - 160, 40)
self.search_button = ClickableLabel(self)
2017-02-12 17:46:53 +01:00
self.search_button.setGeometry(width - 160, 0, 40, 40)
pixmap = QtGui.QPixmap()
pixmap.load(util.curr_directory() + '/images/search.png')
self.search_button.setScaledContents(False)
self.search_button.setAlignment(QtCore.Qt.AlignCenter)
self.search_button.setPixmap(pixmap)
2017-04-13 18:22:46 +02:00
self.search_button.clicked.connect(self.search)
2017-02-12 17:46:53 +01:00
font = QtGui.QFont()
font.setPointSize(32)
font.setBold(True)
2017-04-11 20:10:03 +02:00
self.prev_button = QtWidgets.QPushButton(self)
2017-02-12 17:46:53 +01:00
self.prev_button.setGeometry(width - 120, 0, 40, 40)
self.prev_button.clicked.connect(self.prev)
self.prev_button.setText('\u25B2')
2017-04-11 20:10:03 +02:00
self.next_button = QtWidgets.QPushButton(self)
2017-02-12 17:46:53 +01:00
self.next_button.setGeometry(width - 80, 0, 40, 40)
self.next_button.clicked.connect(self.next)
self.next_button.setText('\u25BC')
2017-04-11 20:10:03 +02:00
self.close_button = QtWidgets.QPushButton(self)
self.close_button.setGeometry(width - 40, 0, 40, 40)
self.close_button.clicked.connect(self.close)
self.close_button.setText('×')
self.close_button.setFont(font)
2017-02-12 17:46:53 +01:00
font.setPointSize(18)
self.next_button.setFont(font)
self.prev_button.setFont(font)
self.retranslateUi()
def retranslateUi(self):
self.search_text.setPlaceholderText(QtWidgets.QApplication.translate("MainWindow", "Search"))
2017-02-12 17:46:53 +01:00
def show(self):
super().show()
self.search_text.setFocus()
def search(self):
2017-02-12 17:27:38 +01:00
Profile.get_instance().update()
text = self.search_text.text()
friend = Profile.get_instance().get_curr_friend()
2017-02-12 21:15:33 +01:00
if text and friend and util.is_re_valid(text):
index = friend.search_string(text)
self.load_messages(index)
def prev(self):
friend = Profile.get_instance().get_curr_friend()
if friend is not None:
index = friend.search_prev()
self.load_messages(index)
def next(self):
friend = Profile.get_instance().get_curr_friend()
2017-02-12 22:00:41 +01:00
text = self.search_text.text()
if friend is not None:
index = friend.search_next()
if index is not None:
count = self._messages.count()
index += count
item = self._messages.item(index)
self._messages.scrollToItem(item)
self._messages.itemWidget(item).select_text(text)
2017-02-12 22:00:41 +01:00
else:
self.not_found(text)
def load_messages(self, index):
2017-02-12 22:00:41 +01:00
text = self.search_text.text()
if index is not None:
profile = Profile.get_instance()
count = self._messages.count()
while count + index < 0:
profile.load_history()
count = self._messages.count()
index += count
item = self._messages.item(index)
self._messages.scrollToItem(item)
self._messages.itemWidget(item).select_text(text)
2017-02-12 22:00:41 +01:00
else:
self.not_found(text)
def closeEvent(self, *args):
2017-02-12 17:27:38 +01:00
Profile.get_instance().update()
self._messages.setGeometry(0, 0, self._messages.width(), self._messages.height() + 40)
super().closeEvent(*args)
2017-02-12 22:00:41 +01:00
@staticmethod
def not_found(text):
2017-04-11 20:10:03 +02:00
mbox = QtWidgets.QMessageBox()
mbox_text = QtWidgets.QApplication.translate("MainWindow",
2017-04-16 21:56:31 +02:00
'Text "{}" was not found')
mbox.setText(mbox_text.format(text))
2017-04-11 20:10:03 +02:00
mbox.setWindowTitle(QtWidgets.QApplication.translate("MainWindow",
2017-04-16 21:56:31 +02:00
'Not found'))
2017-02-12 22:00:41 +01:00
mbox.exec_()