|
|
|
@ -16,8 +16,13 @@
|
|
|
|
|
|
|
|
|
|
from PySide import QtGui, QtCore
|
|
|
|
|
import urllib2, sudsds
|
|
|
|
|
import re
|
|
|
|
|
|
|
|
|
|
from calculate.core.client.function import switch, create_obj
|
|
|
|
|
from calculate.lib.utils.colortext.converter import XmlConverter
|
|
|
|
|
from calculate.lib.utils.colortext.output import SpanCssOutput
|
|
|
|
|
from calculate.lib.utils.tools import imap_regexp
|
|
|
|
|
from more import WorkPalette
|
|
|
|
|
|
|
|
|
|
from more import get_sid, ClientServiceThread, show_msg, TaskWidget, ErrorWgt,\
|
|
|
|
|
ResultLayout, get_view_params
|
|
|
|
@ -25,8 +30,8 @@ from more import LabelWordWrap as Label
|
|
|
|
|
from SelectTable import SelectedTableWidget
|
|
|
|
|
|
|
|
|
|
class LabelWordWrap(Label):
|
|
|
|
|
def __init__(self, name, parent = None, mono=False):
|
|
|
|
|
Label.__init__(self, name, parent,mono)
|
|
|
|
|
def __init__(self, name, parent=None, mono=False, margin_top=0):
|
|
|
|
|
Label.__init__(self, name, parent, mono, margin_top)
|
|
|
|
|
# set text selectable
|
|
|
|
|
self.setTextInteractionFlags(self.textInteractionFlags() | \
|
|
|
|
|
QtCore.Qt.TextSelectableByMouse)
|
|
|
|
@ -59,18 +64,17 @@ class PlusButton(QtGui.QPushButton):
|
|
|
|
|
|
|
|
|
|
def after_call(self, view):
|
|
|
|
|
if self.ClientObj.method_names.has_key(self.method):
|
|
|
|
|
view_method = self._parent.ClientObj.method_names \
|
|
|
|
|
[self.method]
|
|
|
|
|
view_method = self._parent.ClientObj.method_names[self.method]
|
|
|
|
|
else:
|
|
|
|
|
view_method = self.method
|
|
|
|
|
self._parent.ClientObj._parent.setWindowTitle(view_method + \
|
|
|
|
|
self._parent.ClientObj._parent.setWindowTitle(view_method +
|
|
|
|
|
' - ' + self.ClientObj.Name)
|
|
|
|
|
self._parent._parent.main_frame_view(view, self.method)
|
|
|
|
|
|
|
|
|
|
class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
valSignal = QtCore.Signal()
|
|
|
|
|
def __init__(self, parent, ClientObj, method_name, meth_result, \
|
|
|
|
|
change_offset = False):
|
|
|
|
|
def __init__(self, parent, ClientObj, method_name, meth_result,
|
|
|
|
|
change_offset=False):
|
|
|
|
|
# super(MainFrameRes, self).__init__(self, parent)
|
|
|
|
|
QtGui.QWidget.__init__(self, parent)
|
|
|
|
|
self._parent = parent
|
|
|
|
@ -80,6 +84,8 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
self.client = ClientObj.client
|
|
|
|
|
self.cur_pid = 0
|
|
|
|
|
self.change_offset = change_offset
|
|
|
|
|
self.show_last = True
|
|
|
|
|
self.max_val = None
|
|
|
|
|
|
|
|
|
|
if self.meth_result.type == "pid":
|
|
|
|
|
self.cur_pid = self.meth_result.message
|
|
|
|
@ -87,7 +93,6 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
self.work_layout = ResultLayout(self)
|
|
|
|
|
self.work_layout.kill_process_button.clicked.connect \
|
|
|
|
|
(self.kill_process(self.cur_pid))
|
|
|
|
|
self.valSignal.connect(ClientObj.MainWidget.setScrollBarVal)
|
|
|
|
|
|
|
|
|
|
self.progress_list = []
|
|
|
|
|
self.task_list = []
|
|
|
|
@ -102,16 +107,39 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
self._parent.methodname_wgt.setMethodName(method_name)
|
|
|
|
|
parent.main_frame.viewport().setObjectName('main_frame')
|
|
|
|
|
parent.main_frame.viewport().setStyleSheet("#main_frame "
|
|
|
|
|
"{background-color: #E4E1E0;}")
|
|
|
|
|
self.setObjectName('Frame_Res')
|
|
|
|
|
"{background-color: #FFFFFF;}")
|
|
|
|
|
#"{background-color: #E4E1E0;}")
|
|
|
|
|
self.setObjectName("Frame_Res")
|
|
|
|
|
self.setStyleSheet("#Frame_Res {background-color: transparent;}")
|
|
|
|
|
#self.setStyleSheet("#Frame_Res {background-color: green;}")
|
|
|
|
|
# "QWidget {border: 1px solid red;}")
|
|
|
|
|
|
|
|
|
|
self.timer = QtCore.QTimer(self)
|
|
|
|
|
self.connect(self.timer, QtCore.SIGNAL("timeout()"), self.show_bottom)
|
|
|
|
|
self.timer.start(100)
|
|
|
|
|
self.valSignal.connect(self.show_bottom)
|
|
|
|
|
|
|
|
|
|
def initUI(self):
|
|
|
|
|
#self.setSizePolicy(QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Minimum)
|
|
|
|
|
self.updateGeometry()
|
|
|
|
|
|
|
|
|
|
def show_bottom(self):
|
|
|
|
|
max_val = self._parent.main_frame.verticalScrollBar().maximum()
|
|
|
|
|
current_val = \
|
|
|
|
|
self._parent.main_frame.verticalScrollBar().sliderPosition()
|
|
|
|
|
|
|
|
|
|
if self.show_last:
|
|
|
|
|
if current_val != max_val:
|
|
|
|
|
if self.max_val != max_val:
|
|
|
|
|
self._parent.main_frame.verticalScrollBar(
|
|
|
|
|
).setSliderPosition(max_val)
|
|
|
|
|
else:
|
|
|
|
|
self.show_last = False
|
|
|
|
|
else:
|
|
|
|
|
if current_val == max_val:
|
|
|
|
|
self.show_last = True
|
|
|
|
|
self.max_val = max_val
|
|
|
|
|
|
|
|
|
|
################# API FUNCTION ###############################
|
|
|
|
|
def show_view(self, view):
|
|
|
|
|
pass
|
|
|
|
@ -261,27 +289,30 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
self._parent.ClientObj._parent.setWindowTitle(view_method + \
|
|
|
|
|
' - ' + self.ClientObj.Name)
|
|
|
|
|
self._parent.main_frame_view(view, view_method, \
|
|
|
|
|
change_offset = True)
|
|
|
|
|
change_offset=True)
|
|
|
|
|
return wrapper
|
|
|
|
|
|
|
|
|
|
def show_message(self, message, mono=False, space=0):
|
|
|
|
|
message = self.processTags(message)
|
|
|
|
|
# add normal message label
|
|
|
|
|
lbl_temp = LabelWordWrap(message, self, mono=mono, margin_top=space)
|
|
|
|
|
if mono:
|
|
|
|
|
lbl_temp.setMinimumHeight(lbl_temp.minimumSizeHint().height())
|
|
|
|
|
lbl_temp.setMaximumHeight(lbl_temp.sizeHint().height())
|
|
|
|
|
else:
|
|
|
|
|
lbl_temp.setMinimumHeight(lbl_temp.minimumSizeHint().height())
|
|
|
|
|
lbl_temp.setMaximumHeight(lbl_temp.sizeHint().height())
|
|
|
|
|
self.work_layout._addWidget(lbl_temp)
|
|
|
|
|
self.initUI()
|
|
|
|
|
return lbl_temp
|
|
|
|
|
#self._parent.main_frame.verticalScrollBar().setSliderPosition \
|
|
|
|
|
# (self._parent.main_frame.verticalScrollBar().maximum())
|
|
|
|
|
|
|
|
|
|
def show_normal(self, item, mono=False):
|
|
|
|
|
if not hasattr (item, 'message'):
|
|
|
|
|
if not hasattr(item, 'message'):
|
|
|
|
|
return
|
|
|
|
|
if item.message:
|
|
|
|
|
# add normal message label
|
|
|
|
|
lbl_temp = LabelWordWrap(item.message, self, mono=mono)
|
|
|
|
|
|
|
|
|
|
if mono:
|
|
|
|
|
lbl_temp.setMinimumHeight(lbl_temp.minimumSizeHint().height())
|
|
|
|
|
lbl_temp.setMaximumHeight(lbl_temp.sizeHint().height())
|
|
|
|
|
else:
|
|
|
|
|
lbl_temp.setMinimumHeight(lbl_temp.minimumSizeHint().height())
|
|
|
|
|
#lbl_temp.setMaximumHeight(lbl_temp.minimumSizeHint().height())
|
|
|
|
|
lbl_temp.setMaximumHeight(lbl_temp.sizeHint().height())
|
|
|
|
|
self.work_layout._addWidget(lbl_temp)
|
|
|
|
|
self.initUI()
|
|
|
|
|
self._parent.main_frame.verticalScrollBar().setSliderPosition \
|
|
|
|
|
(self._parent.main_frame.verticalScrollBar().maximum())
|
|
|
|
|
self.show_message(item.message, mono)
|
|
|
|
|
if not mono:
|
|
|
|
|
if self.progress_list:
|
|
|
|
|
self.progress_list[-1].hide()
|
|
|
|
@ -293,6 +324,7 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
if self.progress_list:
|
|
|
|
|
self.progress_list[len(self.progress_list)-1].hide()
|
|
|
|
|
if message:
|
|
|
|
|
message = self.processTags(message)
|
|
|
|
|
lbl_temp = ErrorWgt(message, self)
|
|
|
|
|
lbl_temp.set_error()
|
|
|
|
|
lbl_temp.setMinimumHeight(lbl_temp.minimumSizeHint().height())
|
|
|
|
@ -305,6 +337,7 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
def show_warning(self, item):
|
|
|
|
|
# add warning message label
|
|
|
|
|
if item.message:
|
|
|
|
|
item.message = self.processTags(item.message)
|
|
|
|
|
lbl_temp = ErrorWgt(item.message, self)
|
|
|
|
|
lbl_temp.set_warning()
|
|
|
|
|
lbl_temp.setMinimumHeight(lbl_temp.minimumSizeHint().height())
|
|
|
|
@ -312,9 +345,9 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
self.work_layout._addWidget(lbl_temp)
|
|
|
|
|
self.initUI()
|
|
|
|
|
|
|
|
|
|
def show_group(self, item):
|
|
|
|
|
def show_group(self, item, *args):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def show_result(self, result):
|
|
|
|
|
# add normal message label
|
|
|
|
|
lbl_temp = LabelWordWrap(result.message, self)
|
|
|
|
@ -323,11 +356,20 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
self.work_layout._addWidget(lbl_temp)
|
|
|
|
|
|
|
|
|
|
self.initUI()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def processTags(self, s):
|
|
|
|
|
xc = XmlConverter(SpanCssOutput(palette=WorkPalette()))
|
|
|
|
|
return xc.transform(s)
|
|
|
|
|
|
|
|
|
|
def cleanTags(self, s):
|
|
|
|
|
xc = XmlConverter()
|
|
|
|
|
return xc.transform(s)
|
|
|
|
|
|
|
|
|
|
def startTask(self, item):
|
|
|
|
|
if self.progress_list:
|
|
|
|
|
self.progress_list[-1].hide()
|
|
|
|
|
task_widget = TaskWidget(item.message, self)
|
|
|
|
|
task_widget = TaskWidget(self.processTags(item.message),
|
|
|
|
|
self, clean_text=self.cleanTags(item.message))
|
|
|
|
|
|
|
|
|
|
self.task_list.append(task_widget)
|
|
|
|
|
self.work_layout._addWidget(task_widget)
|
|
|
|
@ -337,23 +379,28 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
def endTask(self, item, set_res = True):
|
|
|
|
|
if self.progress_list:
|
|
|
|
|
self.progress_list[-1].hide()
|
|
|
|
|
message = item.message if item.message else ''
|
|
|
|
|
if set_res:
|
|
|
|
|
if hasattr(item,"result") and not item.result is None:
|
|
|
|
|
if message == "skip":
|
|
|
|
|
self.set_result_task(skip=True)
|
|
|
|
|
elif hasattr(item,"result") and not item.result is None:
|
|
|
|
|
self.set_result_task(not item.result)
|
|
|
|
|
else:
|
|
|
|
|
self.set_result_task()
|
|
|
|
|
message = item.message if item.message else ''
|
|
|
|
|
if message:
|
|
|
|
|
if message and message != "skip":
|
|
|
|
|
message = self.processTags(message)
|
|
|
|
|
lbl_temp = LabelWordWrap(message, self)
|
|
|
|
|
|
|
|
|
|
lbl_temp.setMinimumHeight(lbl_temp.sizeHint().height())
|
|
|
|
|
self.work_layout._addWidget(lbl_temp)
|
|
|
|
|
self.initUI()
|
|
|
|
|
|
|
|
|
|
def set_result_task(self, error = False):
|
|
|
|
|
def set_result_task(self, error=False, skip=False):
|
|
|
|
|
if not len(self.task_list):
|
|
|
|
|
return
|
|
|
|
|
if error:
|
|
|
|
|
if skip:
|
|
|
|
|
self.task_list[len(self.task_list) - 1].set_skip()
|
|
|
|
|
elif error:
|
|
|
|
|
self.task_list[len(self.task_list) - 1].set_error()
|
|
|
|
|
else:
|
|
|
|
|
self.task_list[len(self.task_list) - 1].set_ok()
|
|
|
|
@ -368,6 +415,7 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
|
|
|
|
|
self.initUI()
|
|
|
|
|
self.work_layout.hide_kill_button()
|
|
|
|
|
self.closeDialogs()
|
|
|
|
|
self.close_all_thread()
|
|
|
|
|
if self.change_offset:
|
|
|
|
|
self._parent.delete_MainFrameWgt()
|
|
|
|
@ -397,7 +445,19 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
# self._parent.back()
|
|
|
|
|
|
|
|
|
|
def startGroup(self, item):
|
|
|
|
|
pass
|
|
|
|
|
if not hasattr(item, 'message'):
|
|
|
|
|
return
|
|
|
|
|
if item.message:
|
|
|
|
|
item.message = self.processTags(item.message)
|
|
|
|
|
# add normal message label
|
|
|
|
|
lbl_temp = LabelWordWrap("<b>%s</b>"%item.message, self)
|
|
|
|
|
lbl_temp.setMinimumHeight(lbl_temp.minimumSizeHint().height())
|
|
|
|
|
lbl_temp.setMaximumHeight(lbl_temp.sizeHint().height())
|
|
|
|
|
|
|
|
|
|
self.work_layout._addWidget(lbl_temp)
|
|
|
|
|
self.initUI()
|
|
|
|
|
#self._parent.main_frame.verticalScrollBar().setSliderPosition \
|
|
|
|
|
# (self._parent.main_frame.verticalScrollBar().maximum())
|
|
|
|
|
|
|
|
|
|
def endGroup(self, item):
|
|
|
|
|
pass
|
|
|
|
@ -406,6 +466,7 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
def wrapper():
|
|
|
|
|
sid = int(self.ClientObj.sid)
|
|
|
|
|
|
|
|
|
|
self.closeDialogs()
|
|
|
|
|
# Call server method
|
|
|
|
|
if hasattr (self, 'kill_process_thread'):
|
|
|
|
|
if self.kill_process_thread.isRunning():
|
|
|
|
@ -486,7 +547,7 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
self.get_Table(sid, pid, item)
|
|
|
|
|
return 1
|
|
|
|
|
if case('group'):
|
|
|
|
|
self.show_group(sid, pid, item)
|
|
|
|
|
self.show_group(item)
|
|
|
|
|
return 1
|
|
|
|
|
if case('question'):
|
|
|
|
|
self.send_Message(sid, pid, item)
|
|
|
|
@ -579,20 +640,21 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
self.get_Frame_thread.start()
|
|
|
|
|
|
|
|
|
|
def get_Frame_after(self, current_frame, sid, pid):
|
|
|
|
|
for item in range(len(current_frame[0])):
|
|
|
|
|
self.not_end_frame = self.get_message(current_frame[0][item],
|
|
|
|
|
sid, pid)
|
|
|
|
|
try:
|
|
|
|
|
if self.cur_pid != pid:
|
|
|
|
|
return 1
|
|
|
|
|
except:
|
|
|
|
|
for item in range(len(current_frame[0])):
|
|
|
|
|
self.not_end_frame = self.get_message(current_frame[0][item],
|
|
|
|
|
sid, pid)
|
|
|
|
|
self.valSignal.emit()
|
|
|
|
|
try:
|
|
|
|
|
if self.cur_pid != pid:
|
|
|
|
|
return 1
|
|
|
|
|
if len (current_frame[0]) > 3:
|
|
|
|
|
if not item % 10:
|
|
|
|
|
self.ClientObj.app.processEvents()
|
|
|
|
|
else:
|
|
|
|
|
except:
|
|
|
|
|
return 1
|
|
|
|
|
if len (current_frame[0]) > 3:
|
|
|
|
|
if not item % 10:
|
|
|
|
|
self.ClientObj.app.processEvents()
|
|
|
|
|
self.valSignal.emit()
|
|
|
|
|
else:
|
|
|
|
|
self.ClientObj.app.processEvents()
|
|
|
|
|
self.valSignal.emit()
|
|
|
|
|
|
|
|
|
|
def get_entire_frame(self, pid = None):
|
|
|
|
|
""" get entire frame, from beginning (if client disconnected) """
|
|
|
|
@ -637,6 +699,7 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
# for i in range (10):
|
|
|
|
|
for item in range(len(current_frame[0])):
|
|
|
|
|
end_frame = self.get_message(current_frame[0][item], sid, pid)
|
|
|
|
|
self.valSignal.emit()
|
|
|
|
|
try:
|
|
|
|
|
if self.cur_pid != pid:
|
|
|
|
|
return 1
|
|
|
|
@ -780,12 +843,18 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
|
|
|
|
|
def send_Confirm(self, sid, pid, item):
|
|
|
|
|
""" send answer to the question """
|
|
|
|
|
if self.progress_list:
|
|
|
|
|
self.progress_list[-1].hide()
|
|
|
|
|
self.message = ConfirmDialog(self, item, sid, pid)
|
|
|
|
|
self.work_layout.control.insertWidget(0, self.message)
|
|
|
|
|
self.message.show()
|
|
|
|
|
|
|
|
|
|
def send_Choice(self, sid, pid, item):
|
|
|
|
|
""" send answer to the question """
|
|
|
|
|
if self.progress_list:
|
|
|
|
|
self.progress_list[-1].hide()
|
|
|
|
|
self.message = ChoiceDialog(self, item, sid, pid)
|
|
|
|
|
self.work_layout.control.insertWidget(0, self.message)
|
|
|
|
|
self.message.show()
|
|
|
|
|
|
|
|
|
|
def send_Message(self, sid, pid, item):
|
|
|
|
@ -814,15 +883,21 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
self.send_password_thread.close()
|
|
|
|
|
self.send_password_thread.wait()
|
|
|
|
|
|
|
|
|
|
def closeDialogs(self):
|
|
|
|
|
if hasattr(self,"message") and self.message:
|
|
|
|
|
self.message.close()
|
|
|
|
|
self.message = None
|
|
|
|
|
if hasattr(self,"passwd") and self.passwd:
|
|
|
|
|
self.passwd.close()
|
|
|
|
|
self.passwd = None
|
|
|
|
|
|
|
|
|
|
def closeEvent(self, event):
|
|
|
|
|
self.timer.stop()
|
|
|
|
|
self.cur_pid = 'no'
|
|
|
|
|
self.close_all_thread()
|
|
|
|
|
self._parent.methodname_wgt._hide()
|
|
|
|
|
self._parent.control_button._hide()
|
|
|
|
|
if hasattr(self,"message") and self.message:
|
|
|
|
|
self.message.close()
|
|
|
|
|
if hasattr(self,"passwd") and self.passwd:
|
|
|
|
|
self.passwd.close()
|
|
|
|
|
self.closeDialogs()
|
|
|
|
|
event.accept()
|
|
|
|
|
|
|
|
|
|
class MessageDialog(QtGui.QWidget):
|
|
|
|
@ -903,58 +978,59 @@ class MessageDialog(QtGui.QWidget):
|
|
|
|
|
else:
|
|
|
|
|
self.send_button.setEnabled(True)
|
|
|
|
|
|
|
|
|
|
class ConfirmDialog(QtGui.QWidget):
|
|
|
|
|
# answer to the server question
|
|
|
|
|
class ButtonDialog(QtGui.QWidget):
|
|
|
|
|
button_size = 144
|
|
|
|
|
|
|
|
|
|
def __init__(self, parent, item, sid, pid):
|
|
|
|
|
super(ConfirmDialog, self).__init__()
|
|
|
|
|
super(ButtonDialog, self).__init__()
|
|
|
|
|
self._parent = parent
|
|
|
|
|
# self.item = item
|
|
|
|
|
self.sid = sid
|
|
|
|
|
self.pid = pid
|
|
|
|
|
self.layout = QtGui.QGridLayout(self)
|
|
|
|
|
|
|
|
|
|
self.setWindowTitle(self._parent.ClientObj._parent.windowTitle())
|
|
|
|
|
self.label = LabelWordWrap(item.message, self)
|
|
|
|
|
self.layout = QtGui.QHBoxLayout(self)
|
|
|
|
|
self.layout.setContentsMargins(0, 0, 4, 0)
|
|
|
|
|
self.header_label = None
|
|
|
|
|
|
|
|
|
|
self.layout.addWidget(self.label,0,0,1,2)
|
|
|
|
|
minimum = QtGui.QSizePolicy.Fixed
|
|
|
|
|
self.setSizePolicy(minimum, minimum)
|
|
|
|
|
self.init(item)
|
|
|
|
|
|
|
|
|
|
self.yes_button = QtGui.QPushButton(_('Yes'), self)
|
|
|
|
|
self.yes_button.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Return))
|
|
|
|
|
self.yes_button.clicked.connect(self.sendYes)
|
|
|
|
|
|
|
|
|
|
self.layout.addWidget(self.yes_button,1,0)
|
|
|
|
|
def init(self, item):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
self.no_button = QtGui.QPushButton(_('No'), self)
|
|
|
|
|
self.no_button.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Escape))
|
|
|
|
|
self.no_button.clicked.connect(self.sendNo)
|
|
|
|
|
|
|
|
|
|
self.layout.addWidget(self.no_button,1,1)
|
|
|
|
|
|
|
|
|
|
self.move(parent.ClientObj._parent.geometry().x() + \
|
|
|
|
|
parent.ClientObj._parent.geometry().width() / 2 \
|
|
|
|
|
- self.sizeHint().width() / 2, \
|
|
|
|
|
parent.ClientObj._parent.geometry().y() + \
|
|
|
|
|
parent.ClientObj._parent.geometry().height() / 2 \
|
|
|
|
|
- self.sizeHint().height() / 2)
|
|
|
|
|
self.setWindowFlags (QtCore.Qt.WindowMinimizeButtonHint)
|
|
|
|
|
# self.setAttribute(QtCore.Qt.WA_ShowModal)
|
|
|
|
|
|
|
|
|
|
def send(self,answer):
|
|
|
|
|
def createButton(self, label, answer, shortcut=None):
|
|
|
|
|
"""
|
|
|
|
|
Создать кнопку в диалоге
|
|
|
|
|
"""
|
|
|
|
|
button = QtGui.QPushButton(label, self)
|
|
|
|
|
if type(shortcut) in (list, tuple):
|
|
|
|
|
action = QtGui.QAction(self)
|
|
|
|
|
action.setShortcuts(map(QtGui.QKeySequence,
|
|
|
|
|
shortcut))
|
|
|
|
|
action.triggered.connect(button.animateClick)
|
|
|
|
|
button.addAction(action)
|
|
|
|
|
elif shortcut:
|
|
|
|
|
button.setShortcut(QtGui.QKeySequence(shortcut))
|
|
|
|
|
button.clicked.connect(self.send(answer, label))
|
|
|
|
|
button.setFixedWidth(self.button_size)
|
|
|
|
|
self.layout.addWidget(button)
|
|
|
|
|
|
|
|
|
|
def send(self, answer, human_answer=None):
|
|
|
|
|
# Call server method
|
|
|
|
|
if hasattr (self, 'send_password_thread'):
|
|
|
|
|
if self.send_password_thread.isRunning():
|
|
|
|
|
return 1
|
|
|
|
|
self.send_password_thread = ClientServiceThread(\
|
|
|
|
|
self._parent.ClientObj, 'send_message', self.sid, \
|
|
|
|
|
self.pid, answer, return_except = True)
|
|
|
|
|
self.send_password_thread.signal.connect(self.send_after)
|
|
|
|
|
self.send_password_thread.start()
|
|
|
|
|
|
|
|
|
|
def sendYes(self):
|
|
|
|
|
self.send("yes")
|
|
|
|
|
def wrapper():
|
|
|
|
|
if human_answer and self.header_label:
|
|
|
|
|
self.header_label.setText(
|
|
|
|
|
self.header_label.text() + " " +
|
|
|
|
|
human_answer)
|
|
|
|
|
if hasattr(self, 'send_password_thread'):
|
|
|
|
|
if self.send_password_thread.isRunning():
|
|
|
|
|
return 1
|
|
|
|
|
self.send_password_thread = ClientServiceThread( \
|
|
|
|
|
self._parent.ClientObj, 'send_message', self.sid, \
|
|
|
|
|
self.pid, answer, return_except=True)
|
|
|
|
|
self.send_password_thread.signal.connect(self.send_after)
|
|
|
|
|
self.send_password_thread.start()
|
|
|
|
|
|
|
|
|
|
def sendNo(self):
|
|
|
|
|
self.send("no")
|
|
|
|
|
return wrapper
|
|
|
|
|
|
|
|
|
|
def send_after(self, result):
|
|
|
|
|
if type(result) == Exception:
|
|
|
|
@ -964,61 +1040,30 @@ class ConfirmDialog(QtGui.QWidget):
|
|
|
|
|
self._parent.show_result(result)
|
|
|
|
|
self.close()
|
|
|
|
|
|
|
|
|
|
class ChoiceDialog(QtGui.QWidget):
|
|
|
|
|
# answer to the server question
|
|
|
|
|
def __init__(self, parent, item, sid, pid):
|
|
|
|
|
super(ChoiceDialog, self).__init__()
|
|
|
|
|
self._parent = parent
|
|
|
|
|
# self.item = item
|
|
|
|
|
self.sid = sid
|
|
|
|
|
self.pid = pid
|
|
|
|
|
self.setWindowTitle(self._parent.ClientObj._parent.windowTitle())
|
|
|
|
|
self.layout = QtGui.QGridLayout(self)
|
|
|
|
|
self.message,self.answers = item.message.split('|')
|
|
|
|
|
self.answers = map(lambda x:(x[0],x[1].strip(')')),
|
|
|
|
|
map(lambda x:x.split('('),
|
|
|
|
|
self.answers.split(',')))
|
|
|
|
|
|
|
|
|
|
self.label = LabelWordWrap(self.message, self)
|
|
|
|
|
|
|
|
|
|
self.layout.addWidget(self.label,0,0,1,len(self.answers))
|
|
|
|
|
|
|
|
|
|
self.buttons = []
|
|
|
|
|
for i,answer in enumerate(self.answers):
|
|
|
|
|
button = QtGui.QPushButton(answer[1], self)
|
|
|
|
|
self.buttons.append(button)
|
|
|
|
|
button.answer = answer
|
|
|
|
|
button.parentDialog = self
|
|
|
|
|
button.clickFunc = (lambda self:self.parentDialog.send(self.answer[0])).__get__(button)
|
|
|
|
|
button.clicked.connect(button.clickFunc)
|
|
|
|
|
#self.yes_button.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Return))
|
|
|
|
|
#self.no_button.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Escape))
|
|
|
|
|
self.layout.addWidget(button,1,i)
|
|
|
|
|
|
|
|
|
|
self.move(parent.ClientObj._parent.geometry().x() + \
|
|
|
|
|
parent.ClientObj._parent.geometry().width() / 2 \
|
|
|
|
|
- self.sizeHint().width() / 2, \
|
|
|
|
|
parent.ClientObj._parent.geometry().y() + \
|
|
|
|
|
parent.ClientObj._parent.geometry().height() / 2 \
|
|
|
|
|
- self.sizeHint().height() / 2)
|
|
|
|
|
self.setWindowFlags (QtCore.Qt.WindowMinimizeButtonHint)
|
|
|
|
|
# self.setAttribute(QtCore.Qt.WA_ShowModal)
|
|
|
|
|
|
|
|
|
|
def send(self,answer):
|
|
|
|
|
# Call server method
|
|
|
|
|
if hasattr (self, 'send_password_thread'):
|
|
|
|
|
if self.send_password_thread.isRunning():
|
|
|
|
|
return 1
|
|
|
|
|
self.send_password_thread = ClientServiceThread(\
|
|
|
|
|
self._parent.ClientObj, 'send_message', self.sid, \
|
|
|
|
|
self.pid, answer, return_except = True)
|
|
|
|
|
self.send_password_thread.signal.connect(self.send_after)
|
|
|
|
|
self.send_password_thread.start()
|
|
|
|
|
|
|
|
|
|
def send_after(self, result):
|
|
|
|
|
if type(result) == Exception:
|
|
|
|
|
show_msg(_('Failed to send the message (password) to the server'))
|
|
|
|
|
self.close()
|
|
|
|
|
return 1
|
|
|
|
|
self._parent.show_result(result)
|
|
|
|
|
self.close()
|
|
|
|
|
class ConfirmDialog(ButtonDialog):
|
|
|
|
|
"""
|
|
|
|
|
Диалог подтверждения действия
|
|
|
|
|
"""
|
|
|
|
|
def init(self, item):
|
|
|
|
|
self.header_label = \
|
|
|
|
|
self._parent.show_message("<b>%s</b>" % item.message, space=20)
|
|
|
|
|
self.createButton(_("Yes"), "yes", [QtCore.Qt.Key_Enter,
|
|
|
|
|
QtCore.Qt.Key_Return])
|
|
|
|
|
self.createButton(_("No"), "no", QtCore.Qt.Key_Escape)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ChoiceDialog(ButtonDialog):
|
|
|
|
|
"""
|
|
|
|
|
Диалог выбора ответа из нескольких
|
|
|
|
|
"""
|
|
|
|
|
def init(self, item):
|
|
|
|
|
message, answers = item.message.split('|')
|
|
|
|
|
|
|
|
|
|
self.header_label = \
|
|
|
|
|
self._parent.show_message("<b>%s</b>" % message, space=20)
|
|
|
|
|
|
|
|
|
|
reAnswer = re.compile("^(.*)\((.*)\)$")
|
|
|
|
|
answers = imap_regexp(reAnswer, answers.split(','))
|
|
|
|
|
|
|
|
|
|
for answer, label in answers:
|
|
|
|
|
self.createButton(label, answer)
|
|
|
|
|