diff options
author | jerous <jerous@gmail.com> | 2008-05-29 17:39:41 +0200 |
---|---|---|
committer | jerous <jerous@gmail.com> | 2008-05-29 17:39:41 +0200 |
commit | d1eb448c18812e62e7409e69921068d1ebbc0c43 (patch) | |
tree | 8c50781c6a79b662ea1575fd7194fadd7a99d5b6 /winMain.py | |
parent | 140839de0b93df0024b4ff67bf9e0be041edbc28 (diff) |
autosize columns
Diffstat (limited to 'winMain.py')
-rw-r--r-- | winMain.py | 50 |
1 files changed, 41 insertions, 9 deletions
@@ -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 |