You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
calculate-utils-3-console-gui/pym/consolegui/application/ControlButton.py

360 lines
15 KiB

#-*- 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
from more import LabelWordWrap, _print
class MethodNameWgt(QtGui.QWidget):
def __init__(self, parent, ClientObj):
QtGui.QWidget.__init__(self, parent)
self._parent = parent
self.ClientObj = ClientObj
# Set style
self.setAttribute(QtCore.Qt.WA_StyledBackground)
self.setObjectName('ControlButton')
self.setStyleSheet("QWidget#ControlButton "
"{background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,"
"stop: 0 #111111, stop: 0.95 #777777, stop: 1 #666666);}")
self.hlayout = QtGui.QHBoxLayout(self)
self.hlayout.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
self.hlayout.setContentsMargins(28,0,0,0)
self.hlayout.setSpacing(0)
self.meth_name = QtGui.QLabel('Method Name', self)
# self.meth_name.setAlignment(QtCore.Qt.AlignLeft)
self.meth_name.setStyleSheet("font-size: 16px;"
"font: bold;"
"color: white;");
# "background-color: rgb(220,220,220);}"
self.button_hover_style = "QPushButton:hover {"\
"background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,"\
"stop: 0 #333333, stop: 1 #A0A0A9);}"
# "stop: 0 #404040, stop: 1 #A8A8B2);}"
self.button_pressed_style = "QPushButton:pressed {"\
"background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,"\
"stop: 0 #222222, stop: 1 #9797A0);}"
self.hlayout.addWidget(self.meth_name)
self.setLayout(self.hlayout)
self.setFixedHeight(40)
self.hide()
def setMethodName(self, method_name):
for method_info in self.ClientObj.methods_list:
if method_info.name == method_name:
self.meth_name.setText(method_info.title)
return
self.meth_name.setText(method_name)
def _hide(self):
if hasattr (self, 'button_widget'):
self.hlayout.removeWidget(self.button_widget)
self.button_widget.close()
self.hide()
# def set_button_style(self):
# if hasattr (self, 'next_button'):
# self.next_button.setStyleSheet("QPushButton {"
# "color: white; margin 0px;"
# "padding-left: 8px; padding-right: 8px;"
# "border-left: 1px solid black; border-right: 1px solid black;"
# "border-radius: 0px;"
# "background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.95,"
# "stop: 0 #222222, stop: 1 #9797A0);}" + \
# self.button_hover_style + self.button_pressed_style)
# if hasattr (self, 'prev_button'):
# self.prev_button.setStyleSheet("QPushButton {"
# "color: white; margin 0px;"
# "padding-left: 8px; padding-right: 8px;"
# "border-left: 1px solid black;"
# "border-radius: 0px;"
# "background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.95,"
# "stop: 0 #222222, stop: 1 #9797A0);}" + \
# self.button_hover_style + self.button_pressed_style)
class ControlButtonWgt(QtGui.QWidget):
def __init__(self, parent, ClientObj):
QtGui.QWidget.__init__(self, parent)
self._parent = parent
self.ClientObj = ClientObj
# Set style
self.setAttribute(QtCore.Qt.WA_StyledBackground)
self.setObjectName('ControlButton')
self.setStyleSheet("QWidget#ControlButton "
# "{background-color: #FF0000;}")
"{background-color: #FFFFFF;}")
self.main_layout = QtGui.QVBoxLayout(self)
self.main_layout.setContentsMargins(28,8,0,28)
self.question_label = LabelWordWrap("")
#self.question_label.hide()
self.main_layout.addWidget(self.question_label)
self.hlayout = QtGui.QHBoxLayout()
self.hlayout.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
self.hlayout.setContentsMargins(0,0,28,0)
self.hlayout.setSpacing(0)
self.main_layout.addItem(QtGui.QSpacerItem( 0, 0, \
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding ))
self.main_layout.addLayout(self.hlayout)
#self.setLayout(self.hlayout)
self.setFixedHeight(90)
self.hide()
self.confirmWgt = None
self.break_button = None
def set_confirm_question(self, message):
self.question_label.setText(message)
self.question_label.show()
def set_confirmation(self, wgt):
if self.confirmWgt:
self.hlayout.removeWidget(self.confirmWgt)
self.confirmWgt = wgt
self.hlayout.insertWidget(0,wgt)
def close_confirmation(self):
self.question_label.hide()
if self.confirmWgt:
self.hlayout.removeWidget(self.confirmWgt)
self.confirmWgt.close()
self.confirmWgt = None
def set_break_button(self, wgt):
if self.break_button:
self.break_button.close()
self.break_button = wgt
self.hlayout.addWidget(wgt)
def close_break_button(self):
if self.break_button:
self.break_button.close()
self.break_button = None
def _hide(self):
if hasattr (self, 'button_widget'):
self.hlayout.removeWidget(self.button_widget)
self.button_widget.close()
self.hide()
def add_standart_button(self, Group, x, y, brief = False, \
next_button_text = None):
self.del_button()
main_frame = self._parent.MainFrameWgt
# add 1 (or 2) button ok (next) [and previous]
self.button_widget = QtGui.QWidget(self)
end_layout = QtGui.QHBoxLayout(self.button_widget)
end_layout.setContentsMargins(0,0,0,0)
end_layout.setSpacing(10)
end_layout.addItem(QtGui.QSpacerItem( 0, 0, \
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Maximum ))
if self.ClientObj.param_objects[main_frame.method_name]['step'] != 0:
self.prev_button = QtGui.QPushButton(self)
try:
pass
# self.prev_button.setIcon(QtGui.QIcon.fromTheme("go-previous"))
finally:
if Group.prevlabel:
self.prev_button.setText(Group.prevlabel)
else:
self.prev_button.setText(_('Previous'))
self.prev_button.clicked.connect(self.button_disabled)
self.prev_button.clicked.connect(main_frame.button_call_view (-1))
# self.prev_button.clicked.connect(self.button_enabled)
self.prev_button.setMinimumWidth(62)
self.prev_button.setFixedHeight(32)
if hasattr (self, 'button_widget'):
end_layout.addWidget(self.prev_button)
# self.grid.addWidget(self.prev_button, x, y)
else:
self.prev_button = QtGui.QPushButton(self)
self.prev_button.setText(_('Cancel').decode('utf-8'))
self.prev_button.clicked.connect(self.button_disabled)
self.prev_button.clicked.connect(self.clear_method_cache)
self.prev_button.setMinimumWidth(62)
self.prev_button.setFixedHeight(32)
if hasattr (self, 'button_widget'):
end_layout.addWidget(self.prev_button)
if main_frame.view.groups.GroupField[-1].last and not \
main_frame.isBrief(self.ClientObj.param_objects\
[main_frame.method_name]['step']+1) or brief:
self.next_button = QtGui.QPushButton(self)
try:
pass
# ok_icon = QtGui.QIcon.fromTheme("dialog-ok-apply")
# if ok_icon.isNull():
# ok_icon = ok_icon.fromTheme("go-next")
# self.next_button.setIcon(ok_icon)
finally:
if Group.nextlabel:
self.next_button.setText(Group.nextlabel)
else:
self.next_button.setText(_('Ok'))
if next_button_text and brief:
self.next_button.setText(next_button_text)
self.next_button.clicked.connect(self.button_disabled)
if not brief:
self.next_button.clicked.connect(main_frame.collect_object \
(False))
self.next_button.clicked.connect(main_frame.calling(False))
if hasattr (self, 'button_widget'):
end_layout.addWidget(self.next_button)
else:
self.next_button = QtGui.QPushButton(self)
try:
pass
# self.next_button.setIcon(QtGui.QIcon.fromTheme("go-next"))
finally:
if Group.nextlabel:
self.next_button.setText(Group.nextlabel)
else:
self.next_button.setText(_('Next'))
self.next_button.clicked.connect(self.button_disabled)
if not brief:
self.next_button.clicked.connect(main_frame.collect_object \
(False))
self.next_button.clicked.connect(main_frame.calling(True))
self.next_button.clicked.connect(main_frame.button_call_view(+1))
if hasattr (self, 'button_widget'):
end_layout.addWidget(self.next_button)
self.next_button.setMinimumWidth(64)
self.next_button.setFixedHeight(32)
self.next_button.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Return))
self.next_button.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Enter))
# self.next_button.setMaximumHeight(38)
# self.set_button_style()
self.hlayout.addWidget(self.button_widget)
x += 1
return x
def del_button(self):
if hasattr (self, 'button_widget'):
self.hlayout.removeWidget(self.button_widget)
self.button_widget.close()
if hasattr (self, 'prev_button'):
self.prev_button.close()
if hasattr (self, 'next_button'):
self.next_button.close()
def pre_add_button(self):
self.del_button()
# add 1 (or 2) button ok (next) [and previous]
self.button_widget = QtGui.QWidget(self)
end_layout = QtGui.QHBoxLayout(self.button_widget)
end_layout.setContentsMargins(0,0,0,0)
end_layout.setSpacing(0)
end_layout.addItem(QtGui.QSpacerItem( 0, 0, \
QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Maximum))
return end_layout
def add_clear_cache_button(self, pid = None):
end_layout = self.pre_add_button()
self.clear_proc_cache_button = QtGui.QPushButton(_('Close'), self)
self.ClientObj._parent.user_changed_flag = False
if pid:
self.pid = pid
self.clear_proc_cache_button.clicked.connect(self.clear_pid_cache)
else:
self.clear_proc_cache_button.clicked.connect(self._parent.back)
self.clear_proc_cache_button.setMinimumWidth(64)
self.clear_proc_cache_button.setFixedHeight(32)
end_layout.addWidget(self.clear_proc_cache_button)
self.hlayout.addWidget(self.button_widget)
def clear_pid_cache(self):
self.button_disabled()
self.clear_proc_cache_button.setDisabled(True)
sid = int(self.ClientObj.sid)
res = self.ClientObj.client.service.clear_pid_cache(sid, self.pid)
if (hasattr(self._parent.ClientObj,"sys_update_pid") and
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'))
from calculate.consolegui.application.ConnectionTabs \
import SelectedMethodWgt
if type(self.window()) == SelectedMethodWgt:
self.window().close()
else:
self.del_button()
self.hide()
self._parent.back()
def clear_method_cache(self):
self.button_disabled()
sid = int(self.ClientObj.sid)
if hasattr (self._parent.MainFrameWgt, 'method_name'):
method = self._parent.MainFrameWgt.method_name
try:
res = self.ClientObj.client.service.clear_method_cache \
(sid, method)
lerror = self.ClientObj.param_objects[method]['error']
while len(lerror)>0:
lerror.pop()
except Exception as e:
print e
from calculate.consolegui.application.ConnectionTabs \
import SelectedMethodWgt
if type(self.window()) == SelectedMethodWgt:
self.window().close()
else:
self.del_button()
self.hide()
self._parent.back()
def button_disabled(self):
if hasattr(self, 'next_button'):
self.next_button.setDisabled(True)
if hasattr(self, 'prev_button'):
self.prev_button.setDisabled(True)
if hasattr(self, 'clear_proc_cache_button'):
self.clear_proc_cache_button.setDisabled(True)
self.ClientObj.app.processEvents()
def button_enabled(self):
if hasattr(self, 'next_button'):
self.next_button.setEnabled(True)
if hasattr(self, 'prev_button'):
self.prev_button.setEnabled(True)
if hasattr(self, 'clear_proc_cache_button'):
self.clear_proc_cache_button.setEnabled(True)
self.ClientObj.app.processEvents()
def keyPressEvent(self, e):
if e.key() == QtCore.Qt.Key_Return:
if hasattr (self, 'next_button'):
self.next_button.click()
else:
QtGui.QWidget.keyPressEvent(self, e)