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/api/gui/DisplayMethod.py

236 lines
9.1 KiB

# -*- coding: utf-8 -*-
from PySide import QtGui, QtCore
#from PySide.QtGui import QPushButton
#from PySide.QtCore import SIGNAL
from calculate.api.client.function import get_sid
from more import LabelWordWrap, ButtonMenu, icon_visible
class DisplayMethod(QtGui.QWidget):
def __init__(self, parent, ClientObj):
super(DisplayMethod, self).__init__(parent)
self.ClientObj = ClientObj
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
icon_visible(ClientObj.MainWidget, 'Display &Methods', False)
def initUI(self, results):
GROUP = 0 # Getting group name
METH = 1 # Getting method name
LABEL = 2 # Get translate label
IMAGE = 3 # Getting image path
self.lable_list = []
self.button_list = []
self.layout = QtGui.QVBoxLayout()
self.groupbox_dict = {}
self.layout_dict = {}
# self.setStyleSheet("QWidget { background-color: #f2f2f2 }")
self.setStyleSheet("QWidget { background-color: #f0f0f0 }")
# transform a list into the dictionary {'group': [methods], ...}
guiMethods = {}
if type(results) == int:
self.layout.addWidget(LabelWordWrap(' No Methods!',self))
self.setLayout(self.layout)
self.show()
return 1
for num in range (0, len(results)):
if not results[num].string[GROUP] in guiMethods.keys():
guiMethods[results[num].string[GROUP]] = []
guiMethods[results[num].string[GROUP]].append(results[num].string[METH])
guiMethods[results[num].string[GROUP]].append(results[num].string[LABEL])
guiMethods[results[num].string[GROUP]].append(results[num].string[IMAGE])
print guiMethods
# display all groups and methods
for group in guiMethods:
self.groupbox_dict[group] = QtGui.QGroupBox(group, self)
self.groupbox_dict[group].setAlignment(QtCore.Qt.AlignLeft)
# self.groupbox_dict[group].setTitle()
self.layout_dict[group] = FlowLayout(self.groupbox_dict[group])
# self.GroupBoxSend = QtGui.QGroupBox(_('Send certificate signing request'))
# self.GroupBoxSend.setLayout(self.sendlayout)
# group_lbl = QtGui.QLabel('<b>-- '+group+' --</b>', self)
# self.lable_list.append(group_lbl)
# self.layout_dict[group].addWidget(self.lable_list[len(self.lable_list) - 1])
for method_name in range (0, len(guiMethods[group]), 3):
Button = ButtonMenu(guiMethods[group][method_name],\
guiMethods[group][method_name + 1], \
guiMethods[group][method_name + 2], \
group, self)
Button.clicked.connect(self.onActivated)
self.button_list.append(Button)
self.layout_dict[group].addWidget(self.button_list[len(self.button_list) - 1])
for method_name in range (0, len(guiMethods[group]), 3):
Button = ButtonMenu(guiMethods[group][method_name],\
guiMethods[group][method_name + 1], \
guiMethods[group][method_name + 2], \
group, self)
Button.clicked.connect(self.onActivated)
self.button_list.append(Button)
self.layout_dict[group].addWidget(self.button_list[len(self.button_list) - 1])
self.layout_dict[group].setAlignment(QtCore.Qt.AlignLeft)
self.groupbox_dict[group].setLayout(self.layout_dict[group])
self.layout.addWidget(self.groupbox_dict[group])
self.layout.setAlignment(QtCore.Qt.AlignTop)
self.setLayout(self.layout)
self.resize(self.layout.sizeHint())
# print self.sizeHint()
# self.updateGeometry()
def refresh(self):
results = self.ClientObj.methods_list
self.initUI(results)
self.ClientObj.app.processEvents()
def onActivated(self):
method_name = self.sender().objectName()
step = 0
self.ClientObj.method_name = method_name
self.ClientObj.sid = get_sid(self.ClientObj.client.SID_FILE)
if self.ClientObj.param_objects.has_key(method_name):
step = self.ClientObj.param_objects[method_name]['step']
view = self.ClientObj.client.service[0][str(method_name + '_view')] \
(int(self.ClientObj.sid), step)
self.ClientObj.MainWidget.main_frame_view(view, method_name)
class DisplayMethodScroll (QtGui.QScrollArea):
def __init__(self, parent, ClientObj):
QtGui.QScrollArea.__init__(self, parent)
self.MainFrameWgt = DisplayMethod(self, ClientObj)
self.MainFrameWgt.refresh()
self.setWidget(self.MainFrameWgt)
# set resizable widget in ScrollArea
self.setWidgetResizable(True)
self.horizontalScrollBar().hide()
# def resizeEvent(self, resize_var):
# self.parent().set_wid (self.size().width())
#
# width_diff = 5 + self.verticalScrollBar().size().width() \
# if self.verticalScrollBar().isVisible() else 5
#
## import time
## time.sleep(5)
# for group in self.MainFrameWgt.groupbox_dict:
# print '\n\n'
# print self.MainFrameWgt.groupbox_dict[group].size()
# print self.MainFrameWgt.layout_dict[group].sizeHint()
# self.MainFrameWgt.groupbox_dict[group].resize \
# (self.MainFrameWgt.groupbox_dict[group].sizeHint())
#
# if self.size().width() > 30:
# if resize_var.size().height() > self.MainFrameWgt.sizeHint().height():
# print 11111111111, self.size()
#
## self.MainFrameWgt.resize(self.size().width()-width_diff, \
## self.size().height() - height_diff)
## self.MainFrameWgt.setFixedWidth(self.size().width()-width_diff)
# self.MainFrameWgt.setFixedHeight(self.size().height()-22)
## self.MainFrameWgt.setFixedHeight(self.MainFrameWgt.layout.sizeHint().height()-100)
## else:
## print 22222222222222, self.size()
## self.MainFrameWgt.setFixedWidth(self.size().width()-width_diff)
## self.MainFrameWgt.setFixedHeight(self.MainFrameWgt.layout.sizeHint().height()-100)
# self.MainFrameWgt.updateGeometry()
class FlowLayout(QtGui.QLayout):
def __init__(self, parent=None, margin=0, spacing=-1):
super(FlowLayout, self).__init__(parent)
self.setSpacing(spacing)
self.itemList = []
def __del__(self):
item = self.takeAt(0)
while item:
item = self.takeAt(0)
def addItem(self, item):
self.itemList.append(item)
def count(self):
return len(self.itemList)
def itemAt(self, index):
if index >= 0 and index < len(self.itemList):
return self.itemList[index]
return None
def takeAt(self, index):
if index >= 0 and index < len(self.itemList):
return self.itemList.pop(index)
return None
def expandingDirections(self):
return QtCore.Qt.Orientations(QtCore.Qt.Orientation(0))
def hasHeightForWidth(self):
return True
def heightForWidth(self, width):
height = self.doLayout(QtCore.QRect(0, 0, width, 0), True)
return height
def setGeometry(self, rect):
super(FlowLayout, self).setGeometry(rect)
self.doLayout(rect, False)
def sizeHint(self):
return self.minimumSize()
def minimumSize(self):
size = QtCore.QSize()
for item in self.itemList:
size = size.expandedTo(item.minimumSize())
# size += QtCore.QSize(2 * self.margin(), 2 * self.margin())
return size
def doLayout(self, rect, testOnly):
x = rect.x()
y = rect.y()
lineHeight = 0
for item in self.itemList:
wid = item.widget()
spaceX = self.spacing() + wid.style().layoutSpacing(QtGui.QSizePolicy.PushButton, QtGui.QSizePolicy.PushButton, QtCore.Qt.Horizontal)
spaceY = self.spacing() + wid.style().layoutSpacing(QtGui.QSizePolicy.PushButton, QtGui.QSizePolicy.PushButton, QtCore.Qt.Vertical)
nextX = x + item.sizeHint().width() + spaceX
if nextX - spaceX > rect.right() and lineHeight > 0:
x = rect.x()
y = y + lineHeight + spaceY
nextX = x + item.sizeHint().width() + spaceX
lineHeight = 0
if not testOnly:
item.setGeometry(QtCore.QRect(QtCore.QPoint(x, y), item.sizeHint()))
x = nextX
lineHeight = max(lineHeight, item.sizeHint().height())
return y + lineHeight - rect.y()