Add confirm, choice, pre feature

master3.3
parent 8e1ff6a590
commit ca7f1277f3

@ -351,7 +351,7 @@ class MainWgt(QtGui.QMainWindow):
pass
def setScrollBarVal(self):
self.main_frame.verticalScrollBar().setValue \
self.main_frame.verticalScrollBar().setSliderPosition \
(self.main_frame.verticalScrollBar().maximum())
def signaling_slot(self, sid, reply):

@ -110,7 +110,7 @@ class ApiClient(QtGui.QWidget):
self.lang = gettext.locale.getdefaultlocale()[0][:2]
lang = gettext.translation('cl_consolegui3', \
languages=[self.lang])
except IOError:
except (TypeError,IOError) as e:
self.lang = 'en'
lang = gettext.translation('cl_consolegui3',fallback=True)

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

@ -22,13 +22,7 @@ from calculate.core.client.function import switch
from more import get_sid, ClientServiceThread, show_msg, ErrorWgt, ResultLayout
from more import LabelWordWrap as Label
class LabelWordWrap(Label):
def __init__(self, name, parent = None):
Label.__init__(self, name, parent)
# set text selectable
self.setTextInteractionFlags(self.textInteractionFlags() | \
QtCore.Qt.TextSelectableByMouse)
from MainFrameResult import LabelWordWrap,ChoiceDialog
class TaskWidget(QtGui.QWidget):
def __init__(self, taskNumber = 1, parent = None):
@ -143,15 +137,16 @@ class ShortFrameRes(QtGui.QWidget):
def show_view(self, view):
pass
def show_normal(self, message):
def show_normal(self, message, mono=False):
# add normal message label
if hasattr (self, 'taskWidget'):
if hasattr (self, 'taskWidget') and not mono:
self.taskWidget.setText(message)
else:
if message:
# add normal message label
lbl_temp = LabelWordWrap(message, self)
lbl_temp = LabelWordWrap(message, self, mono=mono)
lbl_temp.setMinimumHeight(lbl_temp.sizeHint().height())
lbl_temp.setMaximumHeight(lbl_temp.sizeHint().height())
self.work_layout._addWidget(lbl_temp)
self.initUI()
@ -162,6 +157,7 @@ class ShortFrameRes(QtGui.QWidget):
lbl_temp = ErrorWgt(message, self)
lbl_temp.set_error()
lbl_temp.setMinimumHeight(lbl_temp.sizeHint().height())
lbl_temp.setMaximumHeight(lbl_temp.sizeHint().height())
self.work_layout._addWidget(lbl_temp)
if hasattr (self, 'taskWidget'):
self.taskWidget.set_error()
@ -171,6 +167,8 @@ class ShortFrameRes(QtGui.QWidget):
# add warning message label
lbl_temp = ErrorWgt(item.message, self)
lbl_temp.set_warning()
lbl_temp.setMinimumHeight(lbl_temp.sizeHint().height())
lbl_temp.setMaximumHeight(lbl_temp.sizeHint().height())
self.work_layout._addWidget(lbl_temp)
self.initUI()
@ -295,10 +293,18 @@ class ShortFrameRes(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.message)
return 1
if case('plain'):
self.show_normal(item.message)
return 1
if case('pre'):
self.show_normal(item.message,mono=True)
return 1
if case('progress'):
self.get_Progress(sid, pid, item.id)
return 1
@ -320,6 +326,12 @@ class ShortFrameRes(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
@ -536,6 +548,16 @@ class ShortFrameRes(QtGui.QWidget):
self.ClientObj.app.processEvents()
self.initUI()
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)
@ -567,6 +589,10 @@ class ShortFrameRes(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):
@ -643,3 +669,63 @@ 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()

@ -272,7 +272,7 @@ class MainFrame(QtGui.QWidget):
# call_button = QtGui.QPushButton(self)
if c == 1:
self.group_name_label.hide()
self.call_server_method()
self.call_server_method(change_offset = True)
return
# Show Control Buttons widget
@ -381,14 +381,14 @@ class MainFrame(QtGui.QWidget):
self.ClientObj.MainWidget.main_frame_view(view, \
self.method_name, step_change = True)
def call_server_method(self, collect_flag = True):
def call_server_method(self, collect_flag = True, change_offset=False):
call_method = CallMethod(self)
if collect_flag:
call_method.collect_sig.connect(self.collect_object(False))
else:
self.param_object = None
call_method.call_meth_sig.connect(self.calling(True, \
change_offset = True))
change_offset = change_offset))
call_method.start()
def add_image(self):

@ -338,6 +338,8 @@ class ErrorLabel (QtGui.QWidget):
self._parent.ClientObj.MainWidget.bugWidget.set_message_text\
(self.text_lbl.text())
ERROR_ICON_SIZE=16
class ErrorWgt(QtGui.QWidget):
def __init__(self, text = '', parent = None):
QtGui.QWidget.__init__(self)
@ -346,7 +348,7 @@ class ErrorWgt(QtGui.QWidget):
self.image_but = QtGui.QPushButton(self)
self.image_but.setFlat(True)
self.image_but.setFixedSize(32,32)
self.image_but.setFixedSize(ERROR_ICON_SIZE,ERROR_ICON_SIZE)
self.image_but.setStyleSheet('''QPushButton:pressed {border: none;}
QPushButton::hover {border: none;}''')
layout.addWidget(self.image_but, 0, QtCore.Qt.AlignmentFlag.AlignTop)
@ -366,15 +368,15 @@ class ErrorWgt(QtGui.QWidget):
def set_warning(self):
icon = QtGui.QIcon.fromTheme('dialog-warning')
icon.actualSize(QtCore.QSize(32,32))
icon.actualSize(QtCore.QSize(ERROR_ICON_SIZE,ERROR_ICON_SIZE))
self.image_but.setIcon(icon)
self.image_but.setIconSize(QtCore.QSize(32,32))
self.image_but.setIconSize(QtCore.QSize(ERROR_ICON_SIZE,ERROR_ICON_SIZE))
def set_error(self):
icon = QtGui.QIcon.fromTheme('dialog-error')
icon.actualSize(QtCore.QSize(32,32))
icon.actualSize(QtCore.QSize(ERROR_ICON_SIZE,ERROR_ICON_SIZE))
self.image_but.setIcon(icon)
self.image_but.setIconSize(QtCore.QSize(32,32))
self.image_but.setIconSize(QtCore.QSize(ERROR_ICON_SIZE,ERROR_ICON_SIZE))
def add_menu(self):
if not hasattr(self, 'menu'):
@ -414,14 +416,23 @@ class ErrorWgt(QtGui.QWidget):
# self.setFixedHeight(self.text.height() + 24)
class LabelWordWrap(QtGui.QLabel):
def __init__(self, name, parent = None):
def __init__(self, name, parent = None, mono=False):
if not name:
name = ''
try:
name = name.decode('utf-8')
name = name.decode('utf-8').replace(" "," ")
leftMargin = len(name)-len(name.lstrip(' '))
name = name[leftMargin:]
except (UnicodeDecodeError, UnicodeEncodeError):
pass
QtGui.QLabel.__init__(self, name, parent)
if mono:
self.setStyleSheet('font-family: Droid Sans Mono;'
'background-color:white;'
'margin:3px;')
else:
self.setStyleSheet('margin-left:%dpx;'%(leftMargin*5))
minimum = QtGui.QSizePolicy.Policy.Minimum
exp = QtGui.QSizePolicy.Policy.Expanding
self.setSizePolicy(exp, minimum)
@ -2223,6 +2234,10 @@ class ResultLayout(QtGui.QVBoxLayout):
self.kill_process_button = QtGui.QPushButton(_('Break the process'))
self.kill_process_button.setFixedWidth(144)
self.kill_process_button.setContentsMargins(0,10,0,0)
self.kill_process_button.setMinimumHeight(
self.kill_process_button.minimumSizeHint().height())
self.kill_process_button.setMaximumHeight(
self.kill_process_button.minimumSizeHint().height())
self.addWidget(self.kill_process_button)
def _addWidget(self, widget):

Loading…
Cancel
Save