|
|
|
@ -26,8 +26,8 @@ from more import LabelWordWrap as Label
|
|
|
|
|
from SelectTable import SelectedTableWidget
|
|
|
|
|
|
|
|
|
|
class LabelWordWrap(Label):
|
|
|
|
|
def __init__(self, name, parent = None):
|
|
|
|
|
Label.__init__(self, name, parent)
|
|
|
|
|
def __init__(self, name, parent = None, mono=False):
|
|
|
|
|
Label.__init__(self, name, parent,mono)
|
|
|
|
|
# set text selectable
|
|
|
|
|
self.setTextInteractionFlags(self.textInteractionFlags() | \
|
|
|
|
|
QtCore.Qt.TextSelectableByMouse)
|
|
|
|
@ -106,9 +106,11 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
"{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;}")
|
|
|
|
|
|
|
|
|
|
def initUI(self):
|
|
|
|
|
#self.setSizePolicy(QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Minimum)
|
|
|
|
|
self.updateGeometry()
|
|
|
|
|
|
|
|
|
|
################# API FUNCTION ###############################
|
|
|
|
@ -263,16 +265,19 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
change_offset = True)
|
|
|
|
|
return wrapper
|
|
|
|
|
|
|
|
|
|
def show_normal(self, item):
|
|
|
|
|
def show_normal(self, item, mono=False):
|
|
|
|
|
if not hasattr (item, 'message'):
|
|
|
|
|
return
|
|
|
|
|
if item.message:
|
|
|
|
|
# add normal message label
|
|
|
|
|
lbl_temp = LabelWordWrap(item.message, self)
|
|
|
|
|
lbl_temp = LabelWordWrap(item.message, self, mono=mono)
|
|
|
|
|
|
|
|
|
|
lbl_temp.setMinimumHeight(lbl_temp.sizeHint().height())
|
|
|
|
|
lbl_temp.setMinimumHeight(lbl_temp.minimumSizeHint().height())
|
|
|
|
|
lbl_temp.setMaximumHeight(lbl_temp.minimumSizeHint().height())
|
|
|
|
|
self.work_layout._addWidget(lbl_temp)
|
|
|
|
|
self.initUI()
|
|
|
|
|
#self._parent.main_frame.verticalScrollBar().setSliderPosition \
|
|
|
|
|
# (self._parent.main_frame.verticalScrollBar().maximum())
|
|
|
|
|
|
|
|
|
|
def show_error(self, message):
|
|
|
|
|
# add error message label
|
|
|
|
@ -282,7 +287,9 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
if message:
|
|
|
|
|
lbl_temp = ErrorWgt(message, self)
|
|
|
|
|
lbl_temp.set_error()
|
|
|
|
|
lbl_temp.setMinimumHeight(lbl_temp.sizeHint().height())
|
|
|
|
|
lbl_temp.setMinimumHeight(lbl_temp.minimumSizeHint().height())
|
|
|
|
|
lbl_temp.setMaximumHeight(lbl_temp.minimumSizeHint().height())
|
|
|
|
|
#lbl_temp.setMinimumHeight(lbl_temp.sizeHint().height())
|
|
|
|
|
self.work_layout._addWidget(lbl_temp)
|
|
|
|
|
|
|
|
|
|
self.initUI()
|
|
|
|
@ -292,6 +299,8 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
if item.message:
|
|
|
|
|
lbl_temp = ErrorWgt(item.message, self)
|
|
|
|
|
lbl_temp.set_warning()
|
|
|
|
|
lbl_temp.setMinimumHeight(lbl_temp.minimumSizeHint().height())
|
|
|
|
|
lbl_temp.setMaximumHeight(lbl_temp.minimumSizeHint().height())
|
|
|
|
|
self.work_layout._addWidget(lbl_temp)
|
|
|
|
|
self.initUI()
|
|
|
|
|
|
|
|
|
@ -417,6 +426,7 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
# for mess in meth_result:
|
|
|
|
|
self.ClientObj.app.processEvents()
|
|
|
|
|
mess = meth_result
|
|
|
|
|
print mess.type
|
|
|
|
|
if mess.type == 'pid':
|
|
|
|
|
self.get_messages(self.ClientObj.sid, mess.message)
|
|
|
|
|
if mess.type == 'error':
|
|
|
|
@ -437,16 +447,21 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
except:
|
|
|
|
|
return 1
|
|
|
|
|
""" get one message by its type """
|
|
|
|
|
if not hasattr(item,"type"):
|
|
|
|
|
return 1
|
|
|
|
|
for case in switch(item.type):
|
|
|
|
|
if case('normal'):
|
|
|
|
|
self.show_normal(item)
|
|
|
|
|
return 1
|
|
|
|
|
self.show_normal(item)
|
|
|
|
|
return 1
|
|
|
|
|
if case('pre'):
|
|
|
|
|
self.show_normal(item,mono=True)
|
|
|
|
|
return 1
|
|
|
|
|
if case('plain'):
|
|
|
|
|
self.show_normal(item)
|
|
|
|
|
return 1
|
|
|
|
|
self.show_normal(item)
|
|
|
|
|
return 1
|
|
|
|
|
if case('progress'):
|
|
|
|
|
self.get_Progress(sid, pid, item.id)
|
|
|
|
|
return 1
|
|
|
|
|
self.get_Progress(sid, pid, item.id)
|
|
|
|
|
return 1
|
|
|
|
|
if case('error'):
|
|
|
|
|
# for i in range(20):
|
|
|
|
|
self.show_error(item.message)
|
|
|
|
@ -466,6 +481,12 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
if case('question'):
|
|
|
|
|
self.send_Message(sid, pid, item)
|
|
|
|
|
return 1
|
|
|
|
|
if case('confirm'):
|
|
|
|
|
self.send_Confirm(sid, pid, item)
|
|
|
|
|
return 1
|
|
|
|
|
if case('choice'):
|
|
|
|
|
self.send_Choice(sid, pid, item)
|
|
|
|
|
return 1
|
|
|
|
|
if case('password'):
|
|
|
|
|
self.send_Password(sid, pid, item)
|
|
|
|
|
return 1
|
|
|
|
@ -498,8 +519,9 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
|
|
|
|
|
def get_messages(self, sid, pid):
|
|
|
|
|
""" get frame in a separate thread """
|
|
|
|
|
#thread_messages = threading.Thread(target=get_Frame,\
|
|
|
|
|
#args = (client, sid, pid))
|
|
|
|
|
#import threading
|
|
|
|
|
#thread_messages = threading.Thread(target=self.get_Frame,\
|
|
|
|
|
# args = (sid, pid))
|
|
|
|
|
#thread_messages.start()
|
|
|
|
|
self.get_Frame(sid, pid)
|
|
|
|
|
|
|
|
|
@ -540,7 +562,7 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
self.get_Frame_thread.wait()
|
|
|
|
|
self.get_Frame_thread = ClientServiceThread(self.ClientObj,\
|
|
|
|
|
'get_frame', sid, pid, return_except = True, \
|
|
|
|
|
sleeptime = int(self.ClientObj.client.frame_period),\
|
|
|
|
|
sleeptime = 0, #int(self.ClientObj.client.frame_period),\
|
|
|
|
|
through_object = (sid, pid))
|
|
|
|
|
self.get_Frame_thread.signal_extended.connect(self.get_Frame_cycle)
|
|
|
|
|
self.get_Frame_thread.start()
|
|
|
|
@ -581,7 +603,6 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
return 0
|
|
|
|
|
pid = list_pid[0][0]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Call server method
|
|
|
|
|
if hasattr (self, 'get_Frame_thread'):
|
|
|
|
|
if self.get_Frame_thread.isRunning():
|
|
|
|
@ -731,6 +752,16 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
h += self.mytable.rowHeight(row_in_table)
|
|
|
|
|
self.mytable.setFixedHeight(h)
|
|
|
|
|
|
|
|
|
|
def send_Confirm(self, sid, pid, item):
|
|
|
|
|
""" send answer to the question """
|
|
|
|
|
self.message = ConfirmDialog(self, item, sid, pid)
|
|
|
|
|
self.message.show()
|
|
|
|
|
|
|
|
|
|
def send_Choice(self, sid, pid, item):
|
|
|
|
|
""" send answer to the question """
|
|
|
|
|
self.message = ChoiceDialog(self, item, sid, pid)
|
|
|
|
|
self.message.show()
|
|
|
|
|
|
|
|
|
|
def send_Message(self, sid, pid, item):
|
|
|
|
|
""" send answer to the question """
|
|
|
|
|
self.message = MessageDialog(self, item, sid, pid)
|
|
|
|
@ -762,6 +793,10 @@ class MainFrameRes(QtGui.QWidget):
|
|
|
|
|
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()
|
|
|
|
|
event.accept()
|
|
|
|
|
|
|
|
|
|
class MessageDialog(QtGui.QWidget):
|
|
|
|
@ -840,3 +875,121 @@ class MessageDialog(QtGui.QWidget):
|
|
|
|
|
self.send_button.setDisabled(True)
|
|
|
|
|
else:
|
|
|
|
|
self.send_button.setEnabled(True)
|
|
|
|
|
|
|
|
|
|
class ConfirmDialog(QtGui.QWidget):
|
|
|
|
|
# answer to the server question
|
|
|
|
|
def __init__(self, parent, item, sid, pid):
|
|
|
|
|
super(ConfirmDialog, self).__init__()
|
|
|
|
|
self._parent = parent
|
|
|
|
|
# self.item = item
|
|
|
|
|
self.sid = sid
|
|
|
|
|
self.pid = pid
|
|
|
|
|
self.layout = QtGui.QGridLayout(self)
|
|
|
|
|
|
|
|
|
|
self.label = LabelWordWrap(item.message, self)
|
|
|
|
|
|
|
|
|
|
self.layout.addWidget(self.label,0,0,1,2)
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
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):
|
|
|
|
|
# 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 sendNo(self):
|
|
|
|
|
self.send("no")
|
|
|
|
|
|
|
|
|
|
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 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.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()
|
|
|
|
|