make message popups a bit more sane

This commit is contained in:
Nick 2011-02-21 16:30:49 +01:00
parent e1a3a431f0
commit 3db7bcbfc7
1 changed files with 24 additions and 13 deletions

View File

@ -259,25 +259,36 @@ class MessagePopup(Popup):
def __init__(self, parent_mode, title, message): def __init__(self, parent_mode, title, message):
self.message = message self.message = message
self.width= int(parent_mode.cols/2) self.width= int(parent_mode.cols/2)
lns = self._split_message(self.message) lns = self._split_message()
height = max(len(lns),self._min_height) Popup.__init__(self,parent_mode,title,height_req=len(lns))
Popup.__init__(self,parent_mode,title,height_req=(height+2))
lft = height - len(lns)
if lft:
for i in range(0,int(lft/2)):
lns.insert(0,"")
self._lines = lns self._lines = lns
def _split_message(self,message): def _split_message(self):
ret = [] ret = []
wl = (self.width-2) wl = (self.width-2)
for i in range(0,len(self.message),wl):
l = self.message[i:i+wl] s1 = self.message.split("\n")
lp = (wl-len(self._strip_re.sub('',l)))/2
ret.append("%s%s"%(lp*" ",l)) for s in s1:
while len(self._strip_re.sub('',s)) > wl:
sidx = s.rfind(" ",0,wl-1)
sidx += 1
if sidx > 0:
ret.append(s[0:sidx])
s = s[sidx:]
else:
# can't find a reasonable split, just split at width
ret.append(s[0:wl])
s = s[wl:]
if s:
ret.append(s)
for i in range(len(ret),self._min_height):
ret.append(" ")
return ret return ret
def handle_resize(self): def handle_resize(self):
Popup.handle_resize(self) Popup.handle_resize(self)
self.clear() self.clear()
self._lines = self._split_message(self.message) self._lines = self._split_message()