# -*- encoding: UTF-8 -*- import uiconfig from richtext import RichTextBase, pop, TAG_TEXT from richtextedit import EditBase class EntryRichText(RichTextBase): def __init__(self, pos=(0,0), hiddenset=0): RichTextBase.__init__(self, pos, (1000,1000), True) self.hiddenset = hiddenset self._text_font = uiconfig.entry_font self._text_color = uiconfig.entry_color self.width = 0 def formatting(self): import status xpos = self.x objs = self.objs[:] objs.reverse() while objs: o = pop(objs) o2 = pop(objs) while o2 and o.join(o2): self.handle_join(o, o2) o2 = pop(objs) if o2: objs.append(o2) last_o = None for o in self.objs: o.move(xpos, self.y) if not status.password_style: o.show() o.dirty = False xpos += o.width() if status.password_style: xpos = self.x obj = [] import copy for o in self.objs: obj.append(copy.copy(o)) for o in obj: if not o._ul: o.set_text(len(o.get_text())*'*') o.move(xpos, self.y) o.show() o.dirty = False xpos += o.width() self.width = xpos self.set_clip(self.clip) class Entry(EditBase): def __init__(self, pos, size, bgcolor=None): EditBase.__init__(self, pos, size, bgcolor) self.richtext = EntryRichText(pos) self.richtext.set_clip(self.clip) self.children.append(self.richtext) self._hscroll_offset = 2 self._scroll = False def free(self): EditBase.free(self) self.richtext = None def backspace(self, count=1): EditBase.backspace(self, count=count) self.check_hscroll_offset() def cursor_backward(self): EditBase.cursor_backward(self) self.check_hscroll_offset() def cursor_forward(self): EditBase.cursor_forward(self) self.check_hscroll_offset() def cursor_start(self): EditBase.cursor_start(self) self.check_hscroll_offset() def cursor_end(self): EditBase.cursor_end(self) self.check_hscroll_offset() def is_cursor_end(self): if EditBase.cursor_end_pos(self) > 0: return True return False def is_cursor_show(self): if self.richtext.cursor_hidden: return False else: return True def set_text(self, text): EditBase.set_text(self, text) self.check_hscroll_offset() def insert_unicode_text(self, text, ul=False): if text == '\n': return EditBase.insert_unicode_text(self, text, ul=ul) self.check_hscroll_offset() def check_hscroll_offset(self): cx, cy, ch = self.richtext.cursor_pos_height() w = self.richtext.width clip_pos = self.clip.geometry_get() if cx < clip_pos[0] + 2: self._hscroll_offset += clip_pos[0] - cx + 20 -2 if abs(self._hscroll_offset)%11 != 0: if self._hscroll_offset < 0: self._hscroll_offset = -((abs(self._hscroll_offset)/11)*11 + 11) else: self._hscroll_offset = (abs(self._hscroll_offset)/11)*11 + 11 self._hscroll_offset += 2 if self._hscroll_offset > 2: self._hscroll_offset = 2 elif cx > clip_pos[0] + clip_pos[2]: self._hscroll_offset -= cx - (clip_pos[2] + clip_pos[0])+2 if self._hscroll_offset <= 0: self._hscroll_offset = -(int(float(abs(self._hscroll_offset)/14)*14) + 14) else: self._hscroll_offset = int(float(abs(self._hscroll_offset)/14)*14) + 14 ''' elif cx > clip_pos[0] + 2 + clip_pos[2]: self._hscroll_offset -= cx - (clip_pos[2] + clip_pos[0]) -2 if abs(self._hscroll_offset)%11 != 0: if self._hscroll_offset < 0: self._hscroll_offset = -(int(float(abs(self._hscroll_offset)/11)*11) + 11) else: self._hscroll_offset = int(float(abs(self._hscroll_offset)/11)*11) + 11 self._hscroll_offset += 2 ''' self.richtext.move(clip_pos[0] + self._hscroll_offset, clip_pos[1]) self.richtext.cursor.queue_update() # KA: [20080311] phonebook UI class SearchEntry(EditBase): def __init__(self, pos, size): EditBase.__init__(self, pos, size) self.richtext = EntryRichText(pos) self.richtext.set_clip(self.clip) self.children.append(self.richtext) self._hscroll_offset = 2 self._scroll = False def free(self): EditBase.free(self) self.richtext = None def backspace(self, count=1): EditBase.backspace(self, count=count) self.check_hscroll_offset() def cursor_backward(self): EditBase.cursor_backward(self) self.check_hscroll_offset() def cursor_forward(self): EditBase.cursor_forward(self) self.check_hscroll_offset() def cursor_start(self): EditBase.cursor_start(self) self.check_hscroll_offset() def cursor_end(self): EditBase.cursor_end(self) self.check_hscroll_offset() def set_text(self, text): EditBase.set_text(self, text) self.check_hscroll_offset() def insert_unicode_text(self, text, ul=False): if text == '\n': return EditBase.insert_unicode_text(self, text, ul=ul) self.check_hscroll_offset() def check_hscroll_offset(self): cx, cy, ch = self.richtext.cursor_pos_height() w = self.richtext.width clip_pos = self.clip.geometry_get() if cx < clip_pos[0] + 2: self._hscroll_offset += clip_pos[0] - cx + 20 -2 if abs(self._hscroll_offset)%11 != 0: if self._hscroll_offset < 0: self._hscroll_offset = -((abs(self._hscroll_offset)/11)*11 + 11) else: self._hscroll_offset = (abs(self._hscroll_offset)/11)*11 + 11 self._hscroll_offset += 2 if self._hscroll_offset > 2: self._hscroll_offset = 2 elif cx > clip_pos[0] + clip_pos[2]: self._hscroll_offset -= cx - (clip_pos[2] + clip_pos[0]) +2 if self._hscroll_offset < 0: self._hscroll_offset = -(int(float(abs(self._hscroll_offset)/14)*14) + 14) else: self._hscroll_offset = int(float(abs(self._hscroll_offset)/14)*14) + 14 ''' elif cx > clip_pos[0] + 2 + clip_pos[2]: self._hscroll_offset -= cx - (clip_pos[2] + clip_pos[0]) -2 if abs(self._hscroll_offset)%11 != 0: if self._hscroll_offset < 0: self._hscroll_offset = -((abs(self._hscroll_offset)/11)*11 + 11) else: self._hscroll_offset = (abs(self._hscroll_offset)/11)*11 + 11 self._hscroll_offset += 2 ''' self.richtext.move(clip_pos[0] + self._hscroll_offset, clip_pos[1]) self.richtext.cursor.queue_update() def showFocus(self): self.background.color = uiconfig.color_select self.clip.color = uiconfig.color_select self.richtext.set_clip(self.clip) EditBase.cursor_show(self) def lostFocus(self): self.background.color = uiconfig.color_white self.clip.color = uiconfig.color_white self.richtext.set_clip(self.clip) EditBase.cursor_hide(self) # KA: [20080311] phonebook UI ==