Изменения интерфейса

master3.3 3.2.0_alpha2
Mike khiretskiy 10 years ago
parent 128df10bcd
commit ae1a9dbc3e

@ -28,7 +28,6 @@ from tools import ToolsWidget
from conf_connection import FrameConnection
from LeftMenu import LeftMenu
from MainFrameResult import MainFrameRes
from ShortFrameResult import ShortFrameRes
from View_Process import ViewProc
from session_function import ViewSessionInfo
from CertificateClass import CertClass
@ -305,14 +304,9 @@ class MainWgt(QtGui.QMainWindow):
else:
self.delete_MainFrameWgt()
# TODO: remove short frame
if self.ClientObj.expert or meth_result.expert:
self.MainFrameWgt = MainFrameRes(self, self.ClientObj, \
method_name, meth_result)
else:
self.MainFrameWgt = ShortFrameRes(self, self.ClientObj, \
method_name, meth_result)
self.main_frame.setWidget (self.MainFrameWgt)
self.MainFrameWgt = MainFrameRes(self, self.ClientObj,
method_name, meth_result)
self.main_frame.setWidget(self.MainFrameWgt)
self.main_frame.setWidgetResizable(True)
self.left_frame.hide()
@ -326,13 +320,8 @@ class MainWgt(QtGui.QMainWindow):
def main_view_process(self, method_name, meth_result, pid):
self.delete_MainFrameWgt()
# TODO: remove shortframe
if self.ClientObj.expert:
self.MainFrameWgt = MainFrameRes(self, self.ClientObj, \
method_name, meth_result)
else:
self.MainFrameWgt = ShortFrameRes(self, self.ClientObj, \
method_name, meth_result)
self.MainFrameWgt = MainFrameRes(self, self.ClientObj,
method_name, meth_result)
self.main_frame.setWidget (self.MainFrameWgt)
self.main_frame.setWidgetResizable(True)

@ -288,6 +288,8 @@ class ControlButtonWgt(QtGui.QWidget):
self.clear_proc_cache_button.setDisabled(True)
sid = int(self.ClientObj.sid)
res = self.ClientObj.client.service.clear_pid_cache(sid, self.pid)
if str(self.pid) == str(self._parent.ClientObj._parent.sys_update_pid):
self._parent.ClientObj._parent.sys_update_pid = None
if res:
_print (_('Error closing the process'))
@ -313,9 +315,9 @@ class ControlButtonWgt(QtGui.QWidget):
while len(lerror)>0:
lerror.pop()
except Exception as e:
_print (e)
print e
from calculate.consolegui.application.ConnectionTabs \
import SelectedMethodWgt
import SelectedMethodWgt
if type(self.window()) == SelectedMethodWgt:
self.window().close()
else:

@ -1,747 +0,0 @@
#-*- coding: utf-8 -*-
# Copyright 2012-2013 Calculate Ltd. http://www.calculate-linux.org
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from PySide import QtGui, QtCore
import urllib2
from calculate.core.client.function import switch
from more import get_sid, ClientServiceThread, show_msg, ErrorWgt, ResultLayout
from MainFrameResult import LabelWordWrap,ChoiceDialog
from calculate.lib.utils.colortext.converter import XmlConverter
from calculate.lib.utils.colortext.output import SpanCssOutput
from calculate.lib.utils.colortext.palette import WhitePalette
class TaskWidget(QtGui.QWidget):
def __init__(self, taskNumber = 1, parent = None):
QtGui.QWidget.__init__(self)
layout = QtGui.QGridLayout(self)
self.text_lbl = LabelWordWrap('', self)
layout.addWidget(self.text_lbl, 0, 0)
layout.setContentsMargins(0,4,0,4)
layout.setSpacing(10)
self.image_lbl = QtGui.QLabel(self)
self.image_lbl.setFixedSize(16,16)
layout.addWidget(self.image_lbl, 0, 1)
self.progressbar = QtGui.QProgressBar(self)
layout.addWidget(self.progressbar, 1, 0, 1, 2)
self.set_status = False
self.task_number = taskNumber
self.coef_for_one_part = 1 / float(taskNumber)
self.coef_perc = 1
self.completed_parts = 0
self.completed_perc = 0
self.part_current_task = 1
def set_ok(self):
if not self.set_status:
i_path = '/usr/share/icons/Calculate/16x16/client-gui/console_ok'
icon = QtGui.QIcon(i_path)
self.image_lbl.setPixmap(icon.pixmap(16))
self.set_status = True
def set_error(self):
if not self.set_status:
i_path = '/usr/share/icons/Calculate/16x16/client-gui/'\
'console_cancel'
icon = QtGui.QIcon(i_path)
self.image_lbl.setPixmap(icon.pixmap(16))
self.set_status = True
def setText(self, text):
self.text_lbl.setText(text)
def setProgress(self, perc):
if perc > 100:
perc = 100
elif perc < 0:
perc = 0 - perc
cur_perc = self.completed_perc + self.coef_perc * perc
self.progressbar.setValue(cur_perc)
def endCurrentTask(self):
self.completed_parts += self.part_current_task
self.completed_perc = 100*self.completed_parts/float(self.task_number)
if self.completed_parts >= self.task_number:
self.progressbar.hide()
self.set_ok()
def setCurrentCount(self, count):
if count > (self.task_number - self.completed_parts):
count = self.task_number - self.completed_parts
self.part_current_task = count
# calculate coef for this task
self.coef_perc = count * self.coef_for_one_part
class ShortFrameRes(QtGui.QWidget):
valSignal = QtCore.Signal()
def __init__(self, parent, ClientObj, method_name, meth_result):
# super(ShortFrameRes, self).__init__(self, parent)
QtGui.QWidget.__init__(self, parent)
self._parent = parent
self.ClientObj = ClientObj
self.method_name = method_name
self.meth_result = meth_result
self.client = ClientObj.client
self.cur_pid = 0
if self.meth_result.type == "pid":
self.cur_pid = self.meth_result.message
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 = []
self._parent.methodname_wgt.show()
self._parent.control_button.show()
self._parent.control_button.del_button()
if self.ClientObj.method_names.has_key(self.method_name):
self._parent.methodname_wgt.setMethodName \
(self.ClientObj.method_names[self.method_name])
else:
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')
self.setStyleSheet("#Frame_Res {background-color: transparent;}")
def initUI(self):
self.updateGeometry()
def processTags(self, s):
xc = XmlConverter(SpanCssOutput(palette=WhitePalette()))
return xc.transform(s)
def cleanTags(self, s):
xc = XmlConverter()
return xc.transform(s)
################# API FUNCTION ###############################
def show_view(self, view):
pass
def show_normal(self, message, mono=False):
# add normal message label
if message:
message = self.processTags(message)
if hasattr (self, 'taskWidget') and not mono:
self.taskWidget.setText(message)
else:
if message:
# add normal message label
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()
def show_error(self, message):
# add error message label
# 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.sizeHint().height())
lbl_temp.setMaximumHeight(lbl_temp.sizeHint().height())
self.work_layout._addWidget(lbl_temp)
if hasattr (self, 'taskWidget'):
self.taskWidget.set_error()
self.initUI()
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.sizeHint().height())
lbl_temp.setMaximumHeight(lbl_temp.sizeHint().height())
self.work_layout._addWidget(lbl_temp)
self.initUI()
def show_group(self, item):
pass
def show_result(self, result):
# add normal message label
if result.message:
result.message = self.processTags(result.message)
lbl_temp = LabelWordWrap(result.message, self)
lbl_temp.setMinimumHeight(lbl_temp.sizeHint().height())
self.work_layout._addWidget(lbl_temp)
self.initUI()
def startTask(self, item):
if not hasattr (self, 'taskWidget'):
self.taskWidget = TaskWidget(1, self)
self.work_layout._addWidget(self.taskWidget)
if item.message:
item.message = self.processTags(item.message)
self.taskWidget.setText(item.message)
self.taskWidget.setCurrentCount(item.id)
self.initUI()
def setTaskNumber(self, number):
self.taskWidget = TaskWidget(int(number), self)
self.work_layout._addWidget(self.taskWidget)
self.initUI()
def endTask(self, item):
if hasattr (self, 'get_Progress_thread'):
if self.get_Progress_thread.isRunning():
self.get_Progress_thread.close()
self.get_Progress_thread.wait()
if hasattr(self,"taskWidget"):
self.taskWidget.endCurrentTask()
if item.message:
item.message = self.processTags(item.message)
self.taskWidget.setText(item.message)
self.initUI()
def beginFrame(self, item):
pass
def endFrame(self, item):
self.work_layout.hide_kill_button()
self.close_all_thread()
if hasattr (self, 'taskWidget'):
self.taskWidget.endCurrentTask()
if item.message:
self.taskWidget.setText(item.message)
self._parent.control_button.add_clear_cache_button(self.cur_pid)
self.initUI()
# def clear_pid_cache(self):
# self.clear_proc_cache_button.setDisabled(True)
# sid = int(self.ClientObj.sid)
# res = self.client.service.clear_pid_cache(sid, self.cur_pid)
# if res:
# show_msg (_('Error clear process cache on server'))
# else:
# self._parent.back()
def startGroup(self, item):
pass
def endGroup(self, item):
pass
def kill_process(self, pid):
def wrapper():
sid = int(self.ClientObj.sid)
# Call server method
if hasattr (self, 'kill_process_thread'):
if self.kill_process_thread.isRunning():
return 1
self.kill_process_thread = ClientServiceThread(self.ClientObj,\
'pid_kill', pid, sid)
self.kill_process_thread.signal.connect(self.kill_process_after)
self.kill_process_thread.start()
return wrapper
def kill_process_after(self, result):
if result in [0,2]:
return 0
elif result == -1:
msg = _("Certificate not found in the server!")
elif result == -2:
msg = _("Session not matching your certificate!")
elif result == 1:
msg = _("Failed to kill the process!")
else:
msg = 'error'
show_msg(msg)
###############################################################################
def analysis(self, meth_result):
""" analysis of the bounced message method """
# for mess in meth_result:
self.ClientObj.app.processEvents()
mess = meth_result
if mess.type == 'pid':
self.get_messages(self.ClientObj.sid, mess.message)
if mess.type == 'error':
try:
self.show_error(self, mess.message)
except:
pass
if mess.type == 'warning':
try:
self.show_warning(self, mess)
except:
pass
def get_message(self, item, sid, pid):
try:
if self.cur_pid != pid:
return 1
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
if case('error'):
# for i in range(20):
self.show_error(item.message)
if item.message == "403 Forbidden":
# show_msg(item.message, 'Access Denied')
return 0
return 1
if case('warning'):
self.show_warning(item)
return 1
if case('table'):
return 1
if case('group'):
self.show_group(sid, pid, item)
return 1
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
if case('startTask'):
self.startTask(item)
return 1
if case('taskNumber'):
self.setTaskNumber(item.message)
return 1
if case('endTask'):
self.endTask(item)
return 1
if case('beginFrame'):
self.beginFrame(item)
return 1
if case('endFrame'):
self.endFrame(item)
return 0
if case('startGroup'):
self.startGroup(item)
return 1
if case('endGroup'):
self.endGroup(item)
return 1
if case(): # default, could also just omit condition or 'if True'
return 1
def get_messages(self, sid, pid):
""" get frame in a separate thread """
self.get_Frame(sid, pid)
def get_Frame(self, sid, pid, def_end_frame = 1):
""" get all messages, until type is not endFrame (or Error) """
self.not_end_frame = def_end_frame
if self.not_end_frame:
# Call server method
if hasattr (self, 'get_Frame_thread'):
if self.get_Frame_thread.isRunning():
self.get_Frame_thread.wait()
self.get_Frame_thread = ClientServiceThread(self.ClientObj,\
'get_frame', sid, pid, "gui", return_except = True, \
through_object = (sid, pid))
self.get_Frame_thread.signal_extended.connect(self.get_Frame_cycle)
self.get_Frame_thread.start()
def get_Frame_cycle(self, current_frame, through_object):
if type(current_frame) == Exception:
_print (_("Failed to get a frame from the server."))
show_msg(_("Failed to get a frame from the server.") +'\n'+ \
_('Try resfeshing this page later.'),'get frame error')
return 1
sid, pid = through_object
if current_frame in [None, [], ""]:
try:
if self.cur_pid != pid:
return 1
except:
return 1
else:
self.get_Frame_after(current_frame, sid, pid)
if self.not_end_frame:
# Call server method
if hasattr (self, 'get_Frame_thread'):
if self.get_Frame_thread.isRunning():
self.get_Frame_thread.wait()
self.get_Frame_thread = ClientServiceThread(self.ClientObj,\
'get_frame', sid, pid, "gui", return_except = True, \
sleeptime = 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()
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:
return 1
if len (current_frame[0]) > 3:
if not item % 10:
self.ClientObj.app.processEvents()
else:
self.ClientObj.app.processEvents()
self.valSignal.emit()
def get_entire_frame(self, pid = None):
""" get entire frame, from beginning (if client disconnected) """
self.ClientObj.app.processEvents()
sid = get_sid(self.ClientObj.client)
if not pid:
try:
list_pid = self.ClientObj.client.service.list_pid(sid = sid)
except urllib2.URLError, e:
show_msg (e, _("Not connected!"))
return 1
else:
list_pid = {}
list_pid[0] = [pid]
if list_pid[0] == [0]:
return 0
pid = list_pid[0][0]
# Call server method
if hasattr (self, 'get_Frame_thread'):
if self.get_Frame_thread.isRunning():
self.get_Frame_thread.wait()
self.get_Frame_thread = ClientServiceThread(self.ClientObj,\
'get_entire_frame', sid, pid, return_except = True, \
through_object = (sid, pid))
self.get_Frame_thread.signal_extended.connect \
(self.get_entire_frame_after)
self.get_Frame_thread.start()
def get_entire_frame_after(self, current_frame, through_object):
if type(current_frame) == Exception:
_print (_('Failed to get the complete frame from the server.'))
show_msg(_("Failed to get a frame from the server.") +'\n'+ \
_('Try resfeshing this page later.'),'get frame error')
return 1
sid, pid = through_object
end_frame = 1
if not current_frame in [None, [], ""]:
# for i in range (10):
for item in range(len(current_frame[0])):
end_frame = self.get_message(current_frame[0][item], sid, pid)
try:
if self.cur_pid != pid:
return 1
except:
return 1
if len (current_frame[0]) > 3:
if not item % 10:
self.ClientObj.app.processEvents()
else:
self.ClientObj.app.processEvents()
self.get_Frame(sid, pid, def_end_frame = end_frame)
def get_Progress(self, sid, pid, id):
if not hasattr (self, 'taskWidget'):
self.taskWidget = TaskWidget(1, self)
self.work_layout._addWidget(self.taskWidget)
self.initUI()
""" get progress for the current job """
temp_progress = -1
# Call server method
if hasattr (self, 'get_Progress_thread'):
if self.get_Progress_thread.isRunning():
self.get_Progress_thread.wait()
self.get_Progress_thread = ClientServiceThread(self.ClientObj,\
'get_progress', sid, pid, id, return_except = True, \
through_object = (sid, pid, id, temp_progress))
self.get_Progress_thread.signal_extended.connect(self.get_Progress_cycle)
self.get_Progress_thread.start()
def get_Progress_cycle(self, returnProgr, through_object):
if type(returnProgr) == Exception:
_print (_('Failed to get the progress status from the server'))
show_msg(_('Failed to get the progress status from the server')+\
'\n'+_('Try resfeshing this page later.'),'get progress error')
return 1
sid, pid, id, temp_progress = through_object
########################################
percent = returnProgr.percent
if percent <= 100 and percent >= 0:
if temp_progress != percent:
if percent:
# progressBar.setProperty("value", 100)
if not hasattr (self, 'taskWidget'):
return 1
self.taskWidget.setProgress(percent)
if returnProgr.long_message:
self.show_normal(returnProgr.long_message)
elif returnProgr.short_message:
self.show_normal(returnProgr.short_message)
if percent == 100:
return 0
self.initUI()
temp_progress = percent
try:
if self.cur_pid != pid:
return 1
except:
return 1
# Call server method
if hasattr (self, 'get_Progress_thread'):
if self.get_Progress_thread.isRunning():
self.get_Progress_thread.wait()
self.get_Progress_thread = ClientServiceThread(self.ClientObj,\
'get_progress', sid, pid, id, return_except = True,\
sleeptime = 1, through_object = \
(sid, pid, id, temp_progress))
self.get_Progress_thread.signal_extended.connect \
(self.get_Progress_cycle)
self.get_Progress_thread.start()
if percent < 0:
returnProgr.percent = 0 - percent
if not hasattr (self, 'taskWidget'):
return 1
self.taskWidget.setProgress(percent)
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)
self.message.show()
def send_Password(self, sid, pid, item):
""" send password """
self.passwd = MessageDialog(self, item, sid, pid, True)
self.passwd.show()
def close_all_thread(self):
if hasattr (self, 'get_Frame_thread'):
if self.get_Frame_thread.isRunning():
self.get_Frame_thread.close()
self.get_Frame_thread.wait()
if hasattr (self, 'get_Progress_thread'):
if self.get_Progress_thread.isRunning():
self.get_Progress_thread.close()
self.get_Progress_thread.wait()
if hasattr (self, 'send_password_thread'):
if self.send_password_thread.isRunning():
self.send_password_thread.close()
self.send_password_thread.wait()
def closeEvent(self, event):
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()
event.accept()
class MessageDialog(QtGui.QWidget):
# answer to the server question
def __init__(self, parent, item, sid, pid, isPassword = False):
super(MessageDialog, 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.pass_edit = QtGui.QLineEdit(self)
self.layout.addWidget(self.label,0,0)
self.layout.addWidget(self.pass_edit,0,1)
x = 1
if isPassword:
self.pass_edit.setEchoMode(self.pass_edit.Password)
if item.id == 2:
self.pass_edit2 = QtGui.QLineEdit(self)
self.pass_edit2.setEchoMode(self.pass_edit2.Password)
self.layout.addWidget(LabelWordWrap(_('Repeat'), self), x, 0)
self.layout.addWidget(self.pass_edit2, x, 1)
x += 1
self.pass_edit.textChanged.connect(self.check_passwd)
self.pass_edit2.textChanged.connect(self.check_passwd)
self.send_button = QtGui.QPushButton(_('Send'), self)
self.send_button.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Return))
self.send_button.clicked.connect(self.send_password)
self.layout.addWidget(self.send_button,x,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_password(self):
answer = self.pass_edit.text()
if answer == self.pass_edit2.text():
# 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_password_after)
self.send_password_thread.start()
else:
self.send_button.setDisabled(True)
def send_password_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()
def check_passwd(self):
if self.pass_edit.text() != self.pass_edit2.text():
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()

@ -16,9 +16,11 @@
from PySide import QtGui, QtCore
import time, urllib2
from calculate.core.client.function import create_obj
import dbus
from ReturnMessage import ReturnedMessage
from calculate.consolegui.application.pid_information import client_pid_info
from more import show_msg, get_sid
#class MySignal(QtCore.QObject):
@ -42,10 +44,14 @@ class TrayUpdateSystem(QtCore.QThread):
return 1
sid = get_sid(self._parent.localhost_ClientObj.client)
try:
meth_result_temp = self._parent.localhost_ClientObj.client.service.\
system_update_tray(sid)
param_object = create_obj(self._parent.localhost_ClientObj.client,
"update")
param_object.cl_update_precheck_set = True
meth_result_temp = \
self._parent.localhost_ClientObj.client.service.update(
sid, param_object)
except Exception, e:
msg = e.message
if type (e.message) == tuple:
@ -100,7 +106,7 @@ class TrayUpdateSystem(QtCore.QThread):
while end_frame:
while current_frame in [None, [], ""]:
for i in range (5):
time.sleep(1.0)
time.sleep(0.1)
if self.close_flag:
self.mes_sig.emit('', _('Update aborted'))
return 0
@ -117,7 +123,7 @@ class TrayUpdateSystem(QtCore.QThread):
current_frame[0][item].message)
end_frame = False
return 1
elif current_frame[0][item].type == 'endTask':
elif current_frame[0][item].type == 'endFrame':
if current_frame[0][item].message:
message = current_frame[0][item].message
else: message = ''
@ -129,23 +135,86 @@ class TrayUpdateSystem(QtCore.QThread):
def close(self):
self.close_flag = True
class TrayIcon (QtGui.QSystemTrayIcon):
default_theme_name = 'Tango'
def __init__(self, parent):
super(TrayIcon, self).__init__(parent)
self._parent = parent
self.actions = []
self.setIcon(QtGui.QIcon \
('/usr/share/pixmaps/calculate-console-offline.png'))
self.setIcon(QtGui.QIcon(
'/usr/share/pixmaps/calculate-console-offline.png'))
self.right_menu = RightButtonMenu(self, parent)
self.left_menu = LeftButtonMenu(self, parent)
self.generation_actions()
self.right_menu = self.create_menu('help', 'bug_report', None, 'tools',
'update_system', None, 'exit')
self.left_menu = self.create_menu('show_hide', 'update_system', None,
'exit')
self.activated.connect(self.activ)
self.setToolTip('cl-console-gui - '+ _('System control'))
self.setContextMenu(self.right_menu)
# self.update_thread = TrayUpdateSystem(parent)
# self.update_thread.mes_sig.connect(self.showMessage)
self.update_thread = TrayUpdateSystem(parent)
self.update_thread.mes_sig.connect(self.showMessage)
def select_icon(self, icons):
old_theme_name = QtGui.QIcon.themeName()
try:
for theme_name in (old_theme_name, self.default_theme_name):
QtGui.QIcon.setThemeName(theme_name)
for image in icons:
if QtGui.QIcon.hasThemeIcon(image):
return QtGui.QIcon.fromTheme(image)
return QtGui.QIcon()
finally:
QtGui.QIcon.setThemeName(old_theme_name)
def generation_actions(self):
self.actions = {
'help': {
'icons': ['help-about', 'help-browser'],
'label': "About",
'trigger': self.help},
'bug_report': {
'icons': ['tools-report-bug', 'system-help',
'help-browser'],
'label': "Report a Bug",
'trigger': self.bug_report},
'tools': {
'icons': ['preferences-other', 'preferences-system'],
'label': "Program settings",
'trigger': self.tools},
'update_system': {
'icons': ['system-software-update'],
'label': "Update System",
'trigger': self.start_update_system},
'exit': {
'icons': ["application-exit", "system-log-out"],
'label': "Exit Program",
'trigger': self.exit},
'show_hide': {
'icons': ['preferences-system-windows'],
'label': "Show/Hide Window",
'trigger': self.windowVisible}
}
for action_name, action_data in self.actions.items():
setattr(self, '%s_action' % action_name,
QtGui.QAction(self.select_icon(action_data['icons']),
_(action_data['label']), self,
triggered=action_data['trigger']))
def create_menu(self, *actions):
menu = QtGui.QMenu()
for action in actions:
if action:
menu.addAction(getattr(self, "%s_action" % action))
else:
menu.addSeparator()
return menu
def set_icon(self, online):
if online:
@ -156,18 +225,10 @@ class TrayIcon (QtGui.QSystemTrayIcon):
('/usr/share/pixmaps/calculate-console-offline.png'))
def translate(self):
# Translate left click menu
self.left_menu.windowVisible.setText(_('Show/Hide Window'))
# self.left_menu.sys_update.setText(_('Update system'))
self.left_menu.exit_action.setText(_('Exit Program'))
# Translate right click menu
self.right_menu.about_action.setText(_('About'))
self.right_menu.bug_action.setText(_("Report a Bug"))
self.right_menu.tools_action.setText(_('Program settings'))
# self.right_menu.sys_update.setText(_('Update system'))
self.right_menu.exit_action.setText(_('Exit Program'))
for action_name, action_data in self.actions.items():
getattr(self, '%s_action' % action_name).setText(
_(action_data['label']))
def help(self):
self._parent.currentWidget().help()
@ -177,18 +238,35 @@ class TrayIcon (QtGui.QSystemTrayIcon):
def tools(self):
self._parent.currentWidget().tools()
def show_update(self):
pid = str(self._parent.sys_update_pid)
client_obj = self._parent.localhost_ClientObj
if self._parent.localhost_ClientObj:
if pid and pid in client_obj.process_dict:
client_pid_info(client_obj, client_obj.client, 0)
client_obj._parent.setWindowTitle \
("Calculate console" + ' - ' + _('System Update'))
result = client_obj.process_dict[pid]['result']
client_obj.MainWidget.main_view_process('update', result, pid)
client_obj.app.processEvents()
client_obj.MainWidget.main_frame.verticalScrollBar() \
.setValue(client_obj.MainWidget. \
main_frame.verticalScrollBar().maximum())
self._parent.show()
def exit(self):
# if self.update_thread.isRunning():
# text = _('The system is updated')
# informative_text = _('Stop updating and exit?')
# reply = show_question(self._parent, text, informative_text)
#
# if reply == QtGui.QMessageBox.No:
# return 0
#
# elif reply == QtGui.QMessageBox.Yes:
# self.update_thread.close()
# self.update_thread.wait()
#if self.update_thread.isRunning():
# text = _('The system is updated')
# informative_text = _('Stop updating and exit?')
# reply = show_question(self._parent, text, informative_text)
# if reply == QtGui.QMessageBox.No:
# return 0
# elif reply == QtGui.QMessageBox.Yes:
# self.update_thread.close()
# self.update_thread.wait()
self._parent._closeEvent()
def activ(self, reason):
@ -217,12 +295,12 @@ class TrayIcon (QtGui.QSystemTrayIcon):
interface.Notify('cl-console-gui', 1, icon, title, message, [], {}, -1)
## KDE KNotify
# KDE KNotify
#bus = dbus.SessionBus()
#knotify = bus.get_object('org.kde.knotify', '/Notify')
#
#knotify.event("warning", "kde", [], 'title', 'text', [], [], 0, 0,\
#dbus_interface="org.kde.KNotify")
#knotify.event("warning", "kde", [], 'title', 'text', [], [], 0, 0,
# dbus_interface="org.kde.KNotify")
def windowVisible(self):
if self._parent.isVisible():
@ -233,172 +311,11 @@ class TrayIcon (QtGui.QSystemTrayIcon):
self._parent.move(self._parent.cur_pos)
def start_update_system(self):
if not self.update_thread.isRunning():
self.update_thread.start()
print "DEBUG",self._parent.sys_update_pid
if self._parent.sys_update_pid:
self.show_update()
else:
show_msg(_('An update is already running'))
class LeftButtonMenu(QtGui.QMenu):
def __init__(self, parent, MainWgt):
QtGui.QMenu.__init__(self)
# Add Show/Hide Window action
themeName = QtGui.QIcon.themeName()
window_icons = ['preferences-system-windows']
window_icon = QtGui.QIcon()
for image in window_icons:
window_icon.setThemeName(themeName)
window_icon = window_icon.fromTheme(image)
if not window_icon.isNull():
break
window_icon.setThemeName('Tango')
window_icon = window_icon.fromTheme(image)
if not window_icon.isNull():
break
self.windowVisible = QtGui.QAction(window_icon, _("Show/Hide Window"),\
self, triggered=parent.windowVisible)
self.addAction(self.windowVisible)
# # Add Update system action
# update_icons = ['system-software-update']
# update_icon = QtGui.QIcon()
# for image in update_icons:
# update_icon.setThemeName(themeName)
# update_icon = update_icon.fromTheme(image)
# if not update_icon.isNull():
# break
# update_icon.setThemeName('Tango')
# update_icon = update_icon.fromTheme(image)
# if not update_icon.isNull():
# break
#
# self.sys_update = QtGui.QAction(update_icon, _("Update system"), \
# self, triggered=parent.start_update_system)
# self.addAction(self.sys_update)
#
# self.addSeparator()
# Add exit action
exit_icons = ['application-exit', 'system-log-out']
exit_icon = QtGui.QIcon()
for image in exit_icons:
exit_icon.setThemeName(themeName)
exit_icon = exit_icon.fromTheme(image)
if not exit_icon.isNull():
break
exit_icon.setThemeName('Tango')
exit_icon = exit_icon.fromTheme(image)
if not exit_icon.isNull():
break
self.exit_action = QtGui.QAction(exit_icon, _('Exit Program'), \
self, triggered=parent.exit)
self.addAction(self.exit_action)
# self.setWindowOpacity(0.6)
# bg_color_alpha = 'rgba(0,0,0,150)'
# self.setStyleSheet( self.styleSheet() + \
# 'QMenu {'\
# 'color: white;'\
# 'background-color: %s;' %bg_color_alpha +\
# '}'\
# 'QMenu::separator{background: %s;' %bg_color_alpha +\
# 'width: 20px; height: 1px;}' \
# 'QMenu::icon {background-color: transparent;'\
# 'background: transparent}' \
# )
class RightButtonMenu(QtGui.QMenu):
def __init__(self, parent, MainWgt):
QtGui.QMenu.__init__(self)
# Add about program
About_icon = (QtGui.QIcon \
('/usr/share/pixmaps/calculate-console-online.png'))
themeName = QtGui.QIcon.themeName()
if About_icon.isNull():
about_icons = ['help-about','help-browser']
About_icon = QtGui.QIcon()
for image in about_icons:
About_icon.setThemeName(themeName)
About_icon = About_icon.fromTheme(image)
if not About_icon.isNull():
break
About_icon.setThemeName('Tango')
About_icon = About_icon.fromTheme(image)
if not About_icon.isNull():
break
self.about_action = QtGui.QAction(About_icon, _("About"),
self, triggered=parent.help)
self.addAction(self.about_action)
# Add Bug report
bug_icons = ['tools-report-bug','system-help','help-browser']
bug_icon = QtGui.QIcon()
for image in bug_icons:
bug_icon.setThemeName(themeName)
bug_icon = bug_icon.fromTheme(image)
if not bug_icon.isNull():
break
bug_icon.setThemeName('Tango')
bug_icon = bug_icon.fromTheme(image)
if not bug_icon.isNull():
break
self.bug_action = QtGui.QAction(bug_icon, _("Report a Bug"), self, \
triggered=parent.bug_report)
self.addAction(self.bug_action)
self.addSeparator()
# Add tools
tools_icons = ['preferences-other', 'preferences-system']
tools_icon = QtGui.QIcon()
for image in tools_icons:
tools_icon.setThemeName(themeName)
tools_icon = tools_icon.fromTheme(image)
if not tools_icon.isNull():
break
tools_icon.setThemeName('Tango')
tools_icon = tools_icon.fromTheme(image)
if not tools_icon.isNull():
break
self.tools_action = QtGui.QAction(tools_icon, _('Program settings'), \
self, triggered=parent.tools)
self.addAction(self.tools_action)
# update_icons = ['system-software-update']
# update_icon = QtGui.QIcon()
# for image in update_icons:
# update_icon.setThemeName(themeName)
# update_icon = update_icon.fromTheme(image)
# if not update_icon.isNull():
# break
# update_icon.setThemeName('Tango')
# update_icon = update_icon.fromTheme(image)
# if not update_icon.isNull():
# break
#
# self.sys_update = QtGui.QAction(update_icon, _("Update system"), \
# self, triggered=parent.start_update_system)
# self.addAction(self.sys_update)
self.addSeparator()
exit_icons = ['application-exit', 'system-log-out']
exit_icon = QtGui.QIcon()
for image in exit_icons:
exit_icon.setThemeName(themeName)
exit_icon = exit_icon.fromTheme(image)
if not exit_icon.isNull():
break
exit_icon.setThemeName('Tango')
exit_icon = exit_icon.fromTheme(image)
if not exit_icon.isNull():
break
self.exit_action = QtGui.QAction(exit_icon, _("Exit Program"), \
self, triggered=parent.exit)
self.addAction(self.exit_action)
if not self.update_thread.isRunning():
self.update_thread.start()
else:
show_msg(_('An update is already running'))

@ -30,8 +30,8 @@ class ViewProc(QtGui.QWidget):
self.pid = 0
client_pid_info(ClientObj, ClientObj.client, 0)
list_pid = client_list_pid(self.ClientObj.client)
ClientObj._parent.setWindowTitle ( \
ClientObj._parent.setWindowTitle (
_('View information about the running processes')\
+ ' - ' + self.ClientObj.Name)
@ -47,8 +47,8 @@ class ViewProc(QtGui.QWidget):
list_pid = []
for num in range (0, len(list_pid)):
if list_pid[num] == ClientObj._parent.sys_update_pid:
continue
#if list_pid[num] == ClientObj._parent.sys_update_pid:
# continue
# add method name
if self.ClientObj.process_dict[str(list_pid[num])].has_key \
('method_name'):
@ -141,7 +141,7 @@ class ViewProc(QtGui.QWidget):
except (UnicodeEncodeError, UnicodeDecodeError):
pass
self.ClientObj._parent.setWindowTitle \
(self.ClientObj._parent.windowTitle() +\
(self.ClientObj._parent.windowTitle() +
' - ' + name)
# try:

@ -79,7 +79,7 @@ class FrameConnection(QtGui.QWidget):
grid.setContentsMargins(10, 10, 10, 10)
grid.setSpacing(4)
self.lbl_host = LabelWordWrap(_("T<span style='color:red;font-weight:bold;text-decoration:underline;'> test</span>"), self)
self.lbl_host = LabelWordWrap(_("Host"), self)
self.lbl_port = LabelWordWrap(_("Port"), self)
self.lbl_passwd = LabelWordWrap(_("Password"), self)
self.text_host = QtGui.QLineEdit(self.ClientObj.default_host, self)

@ -344,23 +344,17 @@ class ErrorLabel (QtGui.QWidget):
self._parent.ClientObj.MainWidget.bugWidget.set_message_text\
(self.text_lbl.text())
ERROR_ICON_SIZE=16
ERROR_ICON_SIZE = 16
class ErrorWgt(QtGui.QWidget):
def __init__(self, text = '', parent = None):
def __init__(self, text='', parent=None):
QtGui.QWidget.__init__(self)
self._parent = parent
layout = QtGui.QHBoxLayout(self)
self.image_but = QtGui.QPushButton(self)
self.image_but.setFlat(True)
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)
self.text = LabelWordWrap(text, self)
# self.text.setMinimumHeight(self.text.sizeHint().height())
self.text.setTextInteractionFlags (self.text.textInteractionFlags() \
| QtCore.Qt.TextSelectableByMouse)
layout.addWidget(self.text)
@ -372,17 +366,12 @@ class ErrorWgt(QtGui.QWidget):
self.add_menu()
self.resize(self.sizeHint())
def set_warning(self):
icon = QtGui.QIcon.fromTheme('dialog-warning')
icon.actualSize(QtCore.QSize(ERROR_ICON_SIZE,ERROR_ICON_SIZE))
self.image_but.setIcon(icon)
self.image_but.setIconSize(QtCore.QSize(ERROR_ICON_SIZE,ERROR_ICON_SIZE))
self.text.setStyleSheet("color:red;")
def set_error(self):
icon = QtGui.QIcon.fromTheme('dialog-error')
icon.actualSize(QtCore.QSize(ERROR_ICON_SIZE,ERROR_ICON_SIZE))
self.image_but.setIcon(icon)
self.image_but.setIconSize(QtCore.QSize(ERROR_ICON_SIZE,ERROR_ICON_SIZE))
self.text.setStyleSheet("font-weight:bold;color:red;")
def add_menu(self):
if not hasattr(self, 'menu'):

@ -217,16 +217,6 @@ class ToolGui(QtGui.QWidget):
self.grid.addWidget(self.h_image_lbl, 0, 0)
self.grid.addWidget(self.h_image_lineedit, 0, 1)
# add expers view result in grid
self.expert_lbl = LabelWordWrap(_('Expert view'), self)
self.expert_checkbox = QtGui.QCheckBox(self)
self.expert_checkbox.setChecked(ClientObj.expert)
self.expert_lbl.setToolTip(_('View results in expert mode'))
self.expert_checkbox.setToolTip(_('View results in expert mode'))
self.grid.addWidget(self.expert_lbl, 1, 0)
self.grid.addWidget(self.expert_checkbox, 1, 1, 1, 2)
# add count item in result table in grid
self.count_row_lbl = LabelWordWrap(_('Rows in Table'),self)
self.count_row_lbl.setMaximumWidth \
@ -245,7 +235,6 @@ class ToolGui(QtGui.QWidget):
# connect all with change value slot
self.h_image_lineedit.textChanged.connect(self.changed_val)
self.expert_checkbox.clicked.connect(self.changed_val)
self.count_row_lineedit.textChanged.connect(self.changed_val)
def changed_val(self):
@ -287,7 +276,6 @@ class ToolGui(QtGui.QWidget):
# bg_color_flag = False
count_row_flag = False
expert_flag = False
count_row_flag = False
h_image_flag = False
@ -301,13 +289,6 @@ class ToolGui(QtGui.QWidget):
if height_image < 0 or height_image > 512:
height_image = ClientObj.height_image
new_config.append('height_image = %d\n' %height_image)
elif line.startswith('expert '):
expert_flag = True
if self.expert_checkbox.isChecked():
expert = 1
else:
expert = 0
new_config.append('expert = %d\n' %expert)
elif line.startswith('count_row '):
count_row_flag = True
try:
@ -320,13 +301,6 @@ class ToolGui(QtGui.QWidget):
else:
new_config.append(line)
if self.expert_checkbox.isChecked():
expert = 1
else:
expert = 0
new_config = self.check_cfg (expert_flag, new_config, \
'[gui]', 'expert', expert)
try:
count_row = int(self.count_row_lineedit.text())
if count_row < 2:

Loading…
Cancel
Save