summaryrefslogtreecommitdiff
path: root/winMain.py
diff options
context:
space:
mode:
authorjerous <jerous@gmail.com>2008-05-29 17:39:41 +0200
committerjerous <jerous@gmail.com>2008-05-29 17:39:41 +0200
commitd1eb448c18812e62e7409e69921068d1ebbc0c43 (patch)
tree8c50781c6a79b662ea1575fd7194fadd7a99d5b6 /winMain.py
parent140839de0b93df0024b4ff67bf9e0be041edbc28 (diff)
autosize columns
Diffstat (limited to 'winMain.py')
-rw-r--r--winMain.py50
1 files changed, 41 insertions, 9 deletions
diff --git a/winMain.py b/winMain.py
index 216def5..22cb20f 100644
--- a/winMain.py
+++ b/winMain.py
@@ -18,6 +18,7 @@ class SongList(QtGui.QWidget):
lineHeight=20
margin=4
scrollbarWidth=15
+ minHeaderWidth=40
# alternating colors
colors=[QtGui.QColor(255,255,255), QtGui.QColor(230,230,255)]
clrHl=QtGui.QColor(127,127,127) # highlighted by mouse
@@ -45,6 +46,7 @@ class SongList(QtGui.QWidget):
clrID=None # do we have to color a row with certain ID? [ID, color]
scrollMult=1 # how many rows do we jump when scrolling by dragging
xOffset=0 # offset for drawing. Is changed by hScrollbar
+ resizeColumn=None # indicates this column should be recalculated
def __init__(self, parent, headers, onDoubleClick):
QtGui.QWidget.__init__(self, parent)
@@ -53,11 +55,12 @@ class SongList(QtGui.QWidget):
# we receive an array of strings; we convert that to an array of (header, width)
self.headers=map(lambda h: [h, 250, True], headers)
self.headers.insert(0, ['id', 30, True])
- songs=None
- numSongs=None
- fSongs=None
- fNumSongs=None
+ self.songs=None
+ self.numSongs=None
+ self.fSongs=None
+ self.fNumSongs=None
self.xOffset=0
+ self.resizeColumn=None
self.vScrollbar=QtGui.QScrollBar(QtCore.Qt.Vertical, self)
self.vScrollbar.setMinimum(0)
@@ -124,6 +127,12 @@ class SongList(QtGui.QWidget):
self.selRows=[[row,row]]
self.repaint()
+
+ def autoSizeColumn(self, column):
+ self.resizeColumn=column
+
+ self.repaint()
+
def onVScroll(self, value):
" 'if value<0' needed because minimum can be after init <0 at some point ..."
@@ -266,16 +275,28 @@ class SongList(QtGui.QWidget):
if hdr[2]:
prev+=hdr[1]
self.headers[self.resizeCol][1]=pos.x()-prev-self.xOffset
- if self.headers[self.resizeCol][1]<50:
- self.headers[self.resizeCol][1]=50
+ if self.headers[self.resizeCol][1]<self.minHeaderWidth:
+ self.headers[self.resizeCol][1]=self.minHeaderWidth
self.resizeEvent(None)
self.repaint()
def mouseDoubleClickEvent(self, event):
- row=self._pos2row(event.pos())
+ pos=event.pos()
+ row=self._pos2row(pos)
if row>=0:
self.onDoubleClick()
+ else:
+ # auto-size column
+ x=0+self.xOffset
+ i=0
+ for hdr in self.headers:
+ if hdr[2]:
+ x+=hdr[1]
+ if abs(x-pos.x())<4:
+ self.autoSizeColumn(i)
+ break
+ i+=1
def paintEvent(self, event):
@@ -292,6 +313,17 @@ class SongList(QtGui.QWidget):
if self.vScrollbar.isVisible():
width-=self.scrollbarWidth
+ if self.resizeColumn!=None:
+ hdr=self.headers[self.resizeColumn][0]
+ w=self.minHeaderWidth
+ for song in self.songs:
+ rect=p.boundingRect(10,10,1,1, QtCore.Qt.AlignLeft, str(song.getTag(hdr)))
+ w=max(rect.width(), w)
+ self.headers[self.resizeColumn][1]=w+2*margin
+ self.resizeColumn=None
+ self.resizeEvent(None)
+
+
# paint the headers!
p.fillRect(QtCore.QRect(0,0,width+self.scrollbarWidth,hdrHeight), QtGui.QBrush(QtCore.Qt.lightGray))
p.drawRect(QtCore.QRect(0,0,width+self.scrollbarWidth-1,hdrHeight-1))
@@ -532,8 +564,8 @@ class winMain(QtGui.QWidget):
try:
line[0]+={'play':'playing', 'stop':'not playing', 'pause':'paused'}[status['state']]
if status['state']!='stop':
- line[1]+="%s[%s] %s by %s [%s]"% (line[1], curSong.getID(), curSong.getTitle(), curSong.getArtist(), curSong.getAlbum())
- line[2]+="%s%s/%s" % (line[2], sec2min(self.slrTime.value()), sec2min(status['length']))
+ line[1]="%s %s by %s [%s]"% (line[1], curSong.getTitle(), curSong.getArtist(), curSong.getAlbum())
+ line[2]="%s%s/%s" % (line[2], sec2min(self.slrTime.value()), sec2min(status['length']))
except:
print_exc()
pass