branches/kde/user-manager/corporate2 - header support was added to plistview
Mehmet Özdemir
uludag-commits at pardus.org.tr
9 Mar 2011 Çar 16:51:39 EET
Author: mehmet.ozdemir
Date: Wed Mar 9 16:51:39 2011
New Revision: 36400
Modified:
branches/kde/user-manager/corporate2/um_list.py
branches/kde/user-manager/corporate2/useredit.py
Log:
* header support was added to plistview
---
um_list.py | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
useredit.py | 8 ++-
2 files changed, 159 insertions(+), 7 deletions(-)
Modified: branches/kde/user-manager/corporate2/um_list.py
=================================================================
--- branches/kde/user-manager/corporate2/um_list.py (original)
+++ branches/kde/user-manager/corporate2/um_list.py Wed Mar 9 16:51:39 2011
@@ -38,6 +38,8 @@
self.selectedItem = None
self.hoverItem = None
+ self.header = None
+
"""self.layout = QBoxLayout(self.viewport(), 0, 0)
self.layout.setDirection(QVBoxLayout.TopToBottom)
self.layout.setSpacing(0)
@@ -67,11 +69,18 @@
def viewportResizeEvent(self, e):
for x in self.visibleitems:
x.resize(self.width(), self.itemHeight)
+ if self.header:
+ if self.verticalScrollBar().isVisible():
+ width = self.verticalScrollBar().pos().x()-2
+ else:
+ width = self.width()-4
+ #self.header.resize(width-4, self.header.headerHeight)
+ self.header.setGeometry(2,2,width, self.header.headerHeight)
def myResize(self, width):
mw = 0
th = 0
- th = len(self.visibleitems)*self.itemHeight
+ th = (len(self.visibleitems)*self.itemHeight)+self.getHeaderHeight()
#for i in self.visibleitems:
#h = i.sizeHint().height()
#mw = max(mw, i.sizeHint().width())
@@ -107,7 +116,7 @@
self.items.remove(item)
if item in self.visibleitems:
self.visibleitems.remove(item)
- self.moveChild(item, 0, 0)
+ #self.moveChild(item, 0, 0)
del item
"""if not self.findAnItemWhoHasAChild(item):
self.setSiblingHasChild(item, False)"""
@@ -133,10 +142,16 @@
previous = it
it = it.nextItem
+ def getHeaderHeight(self):
+ headerHeight = 0
+ if self.header and self.header.isVisible:
+ headerHeight = PListViewHeader.headerHeight
+ return headerHeight
+
def shiftLowerItems(self, item):
for i in range(self.visibleitems.index(item), len(self.visibleitems)):
shiftItem = self.visibleitems[i]
- self.moveChild(shiftItem, 0, self.visibleitems.index(shiftItem)*self.itemHeight)
+ self.moveChild(shiftItem, 0, (self.visibleitems.index(shiftItem)*self.itemHeight)+self.getHeaderHeight())
#print self.visibleitems.index(item)*self.itemHeight
#print self.visibleitems[i].name
@@ -163,7 +178,7 @@
self.visibleitems.insert(self.visibleitems.index(lastChild)+1, item)
else:
self.visibleitems.insert(self.visibleitems.index(item.parentItem)+1, item)
- self.addChild(item, 0, self.visibleitems.index(item)*self.itemHeight)
+ self.addChild(item, 0, (self.visibleitems.index(item)*self.itemHeight)+self.getHeaderHeight())
self.shiftLowerItems(item)
item.resize(item.parentItem.width(), self.itemHeight)
self.setSiblingHasChild(item.parentItem, True)
@@ -171,7 +186,7 @@
else:
self.items.insert(len(self.items), item) # en sona ekle
self.visibleitems.insert(len(self.visibleitems), item) # parentı yoksa mutlaka visible olur
- self.addChild(item, 0, self.visibleitems.index(item)*self.itemHeight)
+ self.addChild(item, 0, (self.visibleitems.index(item)*self.itemHeight)+self.getHeaderHeight())
if not self.firstItem:
self.firstItem = item
else:
@@ -180,6 +195,24 @@
#if item.parentItem:
# item.hide()
+ def showHeader(self):
+ self.header.isVisible = True
+ self.addChild(self.header, 0, 0)
+ if len(self.visibleitems):
+ self.shiftLowerItems(self.visibleitems[0])
+
+ def hideHeader(self):
+ self.header.isVisible = False
+ self.removeChild(item)
+ if len(self.visibleitems):
+ self.shiftLowerItems(self.visibleitems[0])
+
+ def addHeader(self, header):
+ self.header = header
+ self.items.insert(0, header)
+ if len(self.visibleitems):
+ self.shiftLowerItems(self.visibleitems[0])
+
def setSiblingHasChild(self, item, hasChild):
if item.parentItem:
it = item.parentItem.firstChild
@@ -206,6 +239,8 @@
self.selectedItem.repaint()
self.selectedItem = None
for i in self.items:
+ if isinstance(i, PListViewHeader):
+ return
for w in i.widgets:
if isinstance(w, PLVButtonGroup):
w.setExclusive(False)
@@ -821,3 +856,116 @@
paint.end()
+
+class PListViewHeader(QWidget):
+
+ headerHeight = 24
+
+ def __init__(self, parent=None, name=None, textMain="main-text", iconMain=None, textWidgets="text-widgets", iconWidgets=None):
+ QWidget.__init__(self, parent, name)
+ self.parent = parent
+ self.textMain = textMain
+ self.iconMain = iconMain
+ self.textWidgets = textWidgets
+ self.iconWidgets = iconWidgets
+
+ self.isVisible = True
+
+ self.setMaximumHeight(self.headerHeight)
+ self.setMinimumHeight(self.headerHeight)
+
+ self.parent.addHeader(self)
+ self.show()
+
+ def setWidgetsGeometry(self, width, height):
+ return
+ excess = 4
+ if self.parent.verticalScrollBar().isVisible():
+ excess += 12
+ for w in self.widgets:
+ excess += w.width() + self.widgetSpacing
+ mid = (height - w.height()) / 2
+ w.setGeometry(width - excess, mid, w.width(), w.height())
+ self.textLength = self.width() - self.parent.iconSize - self.parent.arrowSize - self.threeDotLength - 10 - 2 - (self.parent.depthSize*self.depth) - excess
+ self.calculateTextOut()
+
+ def calculateTextOut(self):
+ if not self.isVisible():
+ return
+ self.textOut = self.text
+ width = self.fontMetrics().width(self.textOut)
+ if width < self.textLength:
+ return
+ wi = self.decrementTextOutToHalf()
+ ctrl = False
+ while True:
+ if wi <= 0:
+ break
+ if wi < self.textLength:
+ ctrl = True
+ wi = self.incrementTextOutByHalf()
+ break
+ else:
+ wi = self.decrementTextOutToHalf()
+ if ctrl:
+ break
+ self.textOut += "..."
+
+ def decrementTextOutToHalf(self):
+ total = len(self.textOut)/2
+ self.textOut = self.textOut[:total]
+ return self.fontMetrics().width(self.textOut)
+
+ def incrementTextOutByHalf(self):
+ total = (len(self.textOut)*3)/2
+ self.textOut = self.text[:total]
+ return self.fontMetrics().width(self.textOut)
+
+ def paintEvent(self, event):
+
+ paint = QPainter(self)
+ if not paint.isActive():
+ paint.begin(self)
+
+ #self.setPaletteBackgroundColor(self.parent.baseColor)
+ paint.fillRect(0, 0, self.width(), self.height(), QBrush(0))
+
+ iconMainWidth = 0
+ if self.iconMain:
+ dip = (self.height() - self.iconMain.height()) / 2
+ paint.drawPixmap (2, dip, self.iconMain)
+ iconMainWidth = self.iconMain.width() + 2
+ #else:
+ # dip = (self.height() - self.parent.iconSize) / 2
+
+
+ font = paint.font()
+ fm = QFontMetrics(font)
+ ascent = fm.ascent()
+ mid = (self.height()+8) / 2
+ #font.setStyleStrategy(QFont.NoAntialias)
+ font.setBold(True)
+ paint.setFont(font)
+
+ dx = 2 + iconMainWidth + 4
+ paint.drawText(dx, mid, unicode(self.textMain))
+ #paint.drawText(0, 12, unicode("mana mana duub dubudb u"))
+
+ paint.end()
+
+ def resizeEvent(self, event):
+ w = event.size().width()
+ h = event.size().height()
+ self.setWidgetsGeometry(w, h)
+ #self.buffer = QPixmap(w,h)
+ """self.handleItemText()"""
+ return QWidget.resizeEvent(self, event)
+
+ def sizeHint(self):
+ f = QFont(self.font())
+ fm = QFontMetrics(f)
+
+ w = 1
+ h = max(fm.height(), PListViewHeader.headerHeight)
+ return QSize(w, h)
+
Modified: branches/kde/user-manager/corporate2/useredit.py
=================================================================
--- branches/kde/user-manager/corporate2/useredit.py (original)
+++ branches/kde/user-manager/corporate2/useredit.py Wed Mar 9 16:51:39 2011
@@ -19,6 +19,7 @@
from um_utility import *
from um_list import PListView
+from um_list import PListViewHeader
from um_list import PListViewItem
import polkit
@@ -784,6 +785,7 @@
def __init__(self, parent, mainwidget, stack, uid, edit):
QVBox.__init__(self, parent)
self.policylist = PListView(self, "um-policylist")
+ PListViewHeader(self.policylist, textMain="Actions", iconMain=getIcon("apply"))
"""self.policyview = KListView(self)
self.policyview.setRootIsDecorated(True)
self.policyview.setResizeMode(KListView.LastColumn)
@@ -976,6 +978,8 @@
self.mainwidget.link.User.Manager["baselayout"].listUserAuthorizations(int(self.uid.text()), async=listUserAuthorizations)
def reset(self):
+ if not self.policylist.firstItem:
+ return
self.policylist.firstItem.expand()
it = self.policylist.firstItem.firstChild
while it:
@@ -1230,8 +1234,8 @@
def fill(package, exception, auths):
if exception:
self.handleGivePolicyToAllFailed(item)
- if item.isExpanded:
- item.collapse()
+ #if item.isExpanded:
+ # item.collapse()
return
self.handleGivePolicyToAllSucceeded()
Uludag-commits mesaj listesiyle ilgili
daha fazla bilgi