def finish(self): Clickable.finish(self) ## self.e_color.stick_to(self, "right", "right") ## self.e_color.move((-2,0)) store(self, mode="h") self.fit_children() self._set_launcher()
def __init__(self, const_text="", var_text="", titles=None, ddlf_size="auto", show_select=True, click_cancel=True, finish=True): self.recenter = True self.const_text = const_text self.var_text = var_text self.click_cancel = click_cancel ## self.max_chars = float("inf") self.max_chars = 30 self.cut_text = ".." self.unlaunch_func = None ddlf_size = style.DDL_SIZE if ddlf_size is None else ddlf_size if not isinstance(titles, DropDownListFast): titles = [] if titles is None else titles self.launched = DropDownListFast(size=ddlf_size, titles=titles, x=2) else: self.launched = titles self.show_select = show_select self.launcher = None Clickable.__init__(self, self.const_text+self.var_text,finish=False) if finish: self.finish()
def __init__(self, params, text="", title=None, click_cancel=False, text_ok="Ok", text_cancel="Cancel", paramsetter_elements=None): """params can either be a varset or a paramsetter. title can either be a string or an element.""" if isinstance(params, ParamSetter): self.paramsetter = params else: self.paramsetter = ParamSetter(params, elements=paramsetter_elements) self.paramsetter.finish() self.click_cancel = click_cancel self.max_chars = float("inf") self.cut_text = ".." self.launcher = None e_title = _get_title(title) if e_title: elements = [e_title, self.paramsetter] else: elements = [self.paramsetter] box = launchmod.make_ok_cancel_box(elements, text_ok, text_cancel) self.launched = box Clickable.__init__(self, text)
def __init__(self, browser, const_text="", var_text="", show_select=True, click_cancel=False, text_ok="Ok", text_cancel="Cancel", finish=True): self.recenter = True self.const_text = const_text self.var_text = var_text self.click_cancel = click_cancel ## self.max_chars = float("inf") self.max_chars = 30 self.cut_text = ".." self.show_select = show_select self.launcher = None self.unlaunch_func = None box = launchmod.make_ok_cancel_box([browser], text_ok, text_cancel) self.launched = box self.browser = browser Clickable.__init__(self, self.const_text + self.var_text, finish=False) if finish: self.finish()
def __init__(self, params, text="", title=None, click_cancel=False, text_ok="Ok", text_cancel="Cancel", paramsetter_elements=None, finish=True): """params can either be a varset or a paramsetter. title can either be a string or an element.""" if isinstance(params, ParamSetter): self.paramsetter = params else: self.paramsetter = ParamSetter(params, elements=paramsetter_elements) self.click_cancel = click_cancel self.max_chars = float("inf") self.cut_text = ".." self.launcher = None e_title = _get_title(title) if e_title: elements = [e_title, self.paramsetter] else: elements = [self.paramsetter] box = launchmod.make_ok_cancel_box(elements, text_ok, text_cancel) self.launched = box Clickable.__init__(self, text, finish=False) if finish: self.finish()
def _get_name_element(self, name): painter = functions.obtain_valid_painter(painterstyle.DEF_PAINTER, size=style.SIZE) el = Clickable(name) el.set_painter(painter) el.finish() return el
def solo_blit(self): Clickable.solo_blit(self) if self._checked: clip = self.get_clip() r = self._check_img.get_rect() r.center = clip.center self.surface.blit(self._check_img, r)
def _set_path_elements(self, ycoord=None): self.remove_all_elements() i = 0 for s in self._path_list: e = Clickable(s) e.set_style("text") e.normal_params.params["font_size"] = style.PATH_FONT_SIZE e.press_params.params["font_size"] = style.PATH_FONT_SIZE e.finish() e.user_func = self._reaction_path e.user_params = {"n": i} e.set_jailed(self.father) ## e._lock_jail = True #so that in the future jail will always stay self.father self.add_elements([e]) i += 1 father = self if self.father.is_finished(): father = self.father fr = father.get_storer_rect() wtot = h_store(fr, self._elements, gap=0, xstart="auto", ycoord=ycoord) if wtot > fr.width: h_store(fr, self._elements, gap=0, ycoord=ycoord, xstart=fr.right - wtot - 2) self._n = len(self._elements)
def make_image_button(img_normal, img_pressed=None, img_hover=None, alpha=255, colorkey=None, text=""): e = Clickable(text) painter = ButtonImage(img_normal, img_pressed, img_hover, alpha, colorkey) e.set_painter(painter) e.finish() return e
def _reaction_press(self, pygame_event): Clickable._reaction_press(self, pygame_event) if self.current_state_key == constants.STATE_PRESSED: self.enter() elif self._activated: if not self.quit_on_click: self._value = self._inserted self.exit()
def _force_unpress(self): self._count = 0 Clickable._unpress(self) ## self._unhover_noblit() ev_untog = Event(constants.THORPY_EVENT, id=constants.EVENT_UNTOGGLE, el=self) post(ev_untog) self.toggled = False
def _press(self): Clickable._press(self) self._count += 1 if not self.toggled: ev_tog = Event(constants.THORPY_EVENT, id=constants.EVENT_TOGGLE, el=self) post(ev_tog) self.toggled = True
def __init__(self): Clickable.__init__(self) reac_rightclick = Reaction(parameters.BUTTON_UNPRESS_EVENT, self._reaction_rightpress, {"button": parameters.RIGHT_CLICK_BUTTON}, reac_name=constants.REAC_RIGHT_CLICK) self.add_reaction(reac_rightclick) self.normal_params.polite_set("painter size", (16, 16)) self.press_params.polite_set("painter size", (16, 16))
def __init__(self): Clickable.__init__(self) reac_rightclick = Reaction(parameters.BUTTON_UNPRESS_EVENT, self._reaction_rightpress, {"button": parameters.RIGHT_CLICK_BUTTON}, name=constants.REAC_RIGHT_CLICK) self.add_reaction(reac_rightclick) self.normal_params.polite_set("painter size", (16, 16)) self.press_params.polite_set("painter size", (16, 16))
def finish(self): Clickable.finish(self) # cursor is initialized in finish because _iwriter needs self.fusionner # to initialize... while not self._iwriter._is_small_enough(self._inserted) and self._inserted: self._inserted = self._inserted[:-1] self._iwriter.refresh_img() self.cursor = _Cursor(self) self.add_elements(list([self.cursor])) self._refresh_pos() self.cursor.finish() self._name_element.user_func = self.enter
def finish(self): Clickable.finish(self) # cursor is initialized in finish because _iwriter needs self.fusionner # to initialize... self.make_small_enough(self._inserted) if not self._iwriter._is_small_enough(self._inserted): functions.debug_msg("Inserter is too small for value", self._inserted) if self.auto_resize: self.set_size(self._iwriter.get_rect().inflate((2,2)).size) self._iwriter.refresh_img() self.cursor = _Cursor(self) self.add_elements(list([self.cursor])) self._refresh_pos() self.cursor.finish() self._name_element.user_func = self.enter
def _get_name_element(self, name): painter = functions.obtain_valid_painter(painterstyle.NAME_PAINTER, size=style.SIZE) el = Clickable(name) el.set_painter(painter) el.set_style(style.STYLE_NAME) el.finish() return el
def _get_name_element(self, name, namestyle): painter = functions.obtain_valid_painter( painterstyle.INSERTER_NAME_PAINTER, size=style.SIZE) el = Clickable(name, finish=False) el.set_painter(painter) if namestyle: el.set_style(namestyle) el.finish() return el
def __init__(self, browser, name_txt, file_txt, launcher_txt, normal_params=None, file_width=None, show_select=True, click_quit=False): """<browser> : the browser to be launched. Can either be a Browser instance or a BrowserLight instance. <name_txt> : the text that stands before the (optionnal) file name and the button to launch browser. <file_txt> : the default value shown to the user. <launcher_txt> : the text on the launcher button. """ file_width = style.FILE_WIDTH if file_width is None else file_width self.show_select = show_select if not self.show_select: file_txt = "" _Launcher.__init__(self, "", normal_params, click_quit) self._spawn = "center" self.file_width = file_width self._done_element = Clickable(style.OK_TXT) self._done_element.finish() self._cancel_element = Clickable(style.CANCEL_TXT) self._cancel_element.finish() g = Ghost([self._done_element, self._cancel_element]) g.finish() g.englobe_childrens() g.rank = float("inf") store(g, g.get_elements(), "h") # to launch : must not be in self._elements! self.browser = browser box = Box(elements=[self.browser, g], storer_params=None) box.finish() self.launched_element = box self._deny_child(self.launched_element) # launcher self.launcher_el = self.get_launcher_element(launcher_txt) self.launcher_el.user_func = self.launch_box # name self._name_element = self._get_name_element(name_txt) self._name_element.user_func = self.launch_box self._file_element = self._get_file_element(file_txt) self.add_elements( [self._name_element, self.launcher_el, self._file_element])
def get_launcher_element(self, name): size = (style.SIZE[0], style.Y_SMALL_SIZE) painter = functions.obtain_valid_painter( painterstyle.BROWSER_LAUNCHER_PAINTER, size=size) el = Clickable(name) el.set_painter(painter) el.set_style(style.STYLE_BROWSER_LAUNCHER) el.finish() return el
def __init__(self, browser, name_txt="", file_txt="", launcher_txt="", normal_params=None, file_width=None, show_select=True, click_quit=False): """<browser> : the browser to be launched. Can either be a Browser instance or a BrowserLight instance. <name_txt> : the text that stands before the (optionnal) file name and the button to launch browser. <file_txt> : the default value shown to the user. <launcher_txt> : the text on the launcher button. """ file_width = style.FILE_WIDTH if file_width is None else file_width self.show_select = show_select if not self.show_select: file_txt = "" _Launcher.__init__(self, "", normal_params, click_quit) self._spawn = "center" self.file_width = file_width self._done_element = Clickable(style.OK_TXT) self._done_element.finish() self._cancel_element = Clickable(style.CANCEL_TXT) self._cancel_element.finish() g = Ghost([self._done_element, self._cancel_element]) g.finish() g.fit_children() g.rank = float("inf") store(g, g.get_elements(), "h") # to launch : must not be in self._elements! self.browser = browser box = Box(elements=[self.browser, g], storer_params=None) box.finish() self.launched_element = box self._deny_child(self.launched_element) # launcher self.launcher_el = self.get_launcher_element(launcher_txt) self.launcher_el.user_func = self.launch_box # name self._name_element = self._get_name_element(name_txt) self._name_element.user_func = self.launch_box self._file_element = self._get_file_element(file_txt) self.add_elements([self._name_element, self.launcher_el, self._file_element])
def make_button(text, func=None, params=None): button = Clickable(text) button.finish() button.scale_to_title() if func: button.user_func = func if params: button.user_params = params return button
def __init__(self, colorsetter, text="", show_select=True, click_cancel=False): self.text = text self.show_select = show_select self.click_cancel = click_cancel if not isinstance(colorsetter, ColorSetter): self.colorsetter = ColorSetter.make(self.text, value=colorsetter) else: self.colorsetter = colorsetter self.old_color = self.colorsetter.get_value() self.launched = launchmod.make_ok_cancel_box([self.colorsetter], "Ok", "Cancel") #!!! text self.launcher = None self.e_color = get_example_element(self.colorsetter.get_color(), (20,20)) self.e_text = Element(self.text) self.e_text.set_style("text") self.e_text.finish() self.unlaunch_func = None Clickable.__init__(self, elements=[self.e_text, self.e_color])
def _get_name_element(self, name, namestyle): painter = functions.obtain_valid_painter( painterstyle.INSERTER_NAME_PAINTER, size=style.SIZE) el = Clickable(name) el.set_painter(painter) if namestyle: el.set_style(namestyle) el.finish() return el
def make_image_button_with_frame(img_normal, img_pressed=None, img_hover=None, alpha=255, colorkey=None, text=""): e = Clickable(text,finish=False) painter = ButtonImage(img_normal, img_pressed, img_hover, alpha, colorkey) e.set_painter(painter) e.finish() return e
def _get_launched_el(self, els, size, storer_params): _done_element = Clickable(style.OK_TXT) _cancel_element = Clickable(style.CANCEL_TXT) _done_element.finish() _cancel_element.finish() g = Ghost([_done_element, _cancel_element]) g.finish() g.englobe_childrens() g.rank = float("inf") store(g, g.get_elements(), "h") els += [g] box = Box(elements=els, size=size, storer_params=storer_params) box.finish() #box stores its elements return box, _done_element, _cancel_element
def __init__(self, browser, const_text="", var_text="", show_select=True, click_cancel=False, text_ok="Ok", text_cancel="Cancel"): self.recenter=True self.const_text = const_text self.var_text = var_text self.click_cancel = click_cancel ## self.max_chars = float("inf") self.max_chars = 30 self.cut_text = ".." self.show_select = show_select self.launcher = None self.unlaunch_func = None box = launchmod.make_ok_cancel_box([browser], text_ok, text_cancel) self.launched = box self.browser = browser Clickable.__init__(self, self.const_text+self.var_text)
def make_image_button(img_normal, img_pressed=None, img_hover=None, alpha=255, colorkey=None, text="", force_convert_alpha=False): e = Clickable(text,finish=False) painter = ImageButton(img_normal, img_pressed, img_hover, alpha, colorkey, force_convert_alpha=force_convert_alpha) e.set_painter(painter) e.finish() return e
def _set_path_elements(self, ycoord=None): self.remove_all_elements() i = 0 for s in self._path_list: e = Clickable(s) e.set_style("text") e.normal_params.params["font_size"] = style.PATH_FONT_SIZE e.press_params.params["font_size"] = style.PATH_FONT_SIZE e.finish() e.user_func = self._reaction_path e.user_params = {"n" : i} e.set_jailed(self.father) e._lock_jail = True self.add_elements([e]) i += 1 father = self if self.father.is_finished(): father = self.father fr = father.get_storer_rect() wtot = h_store(fr, self._elements, gap=0, xstart="auto", ycoord=ycoord) if wtot > fr.width: h_store(fr, self._elements, gap=0, ycoord=ycoord, xstart=fr.right - wtot-2) self._n = len(self._elements)
def _press(self): Clickable._press(self) self._count += 1
def _unpress(self): if self._count == 2: self._count = 0 Clickable._unpress(self)
def finish(self): Clickable.finish(self) self.add_arrow("bottom")
def unblit(self, rect=None): self._name_element.unblit(rect) Clickable.unblit(self, rect)
def set_font_size(self, size, state=None, center_title=True): """set font color for a given state""" Clickable.set_font_size(self, size, state, center_title) self._name_element.set_font_size(size, state, center_title)
def finish(self): Clickable.finish(self) self._set_launcher()
def _unhover(self): if not self._activated: Clickable._unhover(self) change_cursor(constants.CURSOR_NORMAL)
def _reaction_press(self, pygame_event): Clickable._reaction_press(self, pygame_event) if self.current_state_key == constants.STATE_PRESSED: self.check()
def finish(self): Clickable.finish(self) self._refresh_pos() self._name_element.user_func = self.check
class BrowserLauncher(_Launcher): def __init__(self, browser, name_txt="", file_txt="", launcher_txt="", normal_params=None, file_width=None, show_select=True, click_quit=False): """<browser> : the browser to be launched. Can either be a Browser instance or a BrowserLight instance. <name_txt> : the text that stands before the (optionnal) file name and the button to launch browser. <file_txt> : the default value shown to the user. <launcher_txt> : the text on the launcher button. """ file_width = style.FILE_WIDTH if file_width is None else file_width self.show_select = show_select if not self.show_select: file_txt = "" _Launcher.__init__(self, "", normal_params, click_quit) self._spawn = "center" self.file_width = file_width self._done_element = Clickable(style.OK_TXT) self._done_element.finish() self._cancel_element = Clickable(style.CANCEL_TXT) self._cancel_element.finish() g = Ghost([self._done_element, self._cancel_element]) g.finish() g.fit_children() g.rank = float("inf") store(g, g.get_elements(), "h") # to launch : must not be in self._elements! self.browser = browser box = Box(elements=[self.browser, g], storer_params=None) box.finish() self.launched_element = box self._deny_child(self.launched_element) # launcher self.launcher_el = self.get_launcher_element(launcher_txt) self.launcher_el.user_func = self.launch_box # name self._name_element = self._get_name_element(name_txt) self._name_element.user_func = self.launch_box self._file_element = self._get_file_element(file_txt) self.add_elements([self._name_element, self.launcher_el, self._file_element]) def finish(self): _Launcher.finish(self) self.launched_element.set_prison() self.browser.set_prison() self.browser._ddlf.set_prison() ## h_store(self, self.get_elements()) ## self.stick_to(self.launcher_el, "right", "left") def get_storer_rect(self): return self.get_family_rect(self.current_state_key, False) def get_launcher_element(self, name): size = (style.SIZE[0], style.Y_SMALL_SIZE) painter = functions.obtain_valid_painter( painterstyle.BROWSER_LAUNCHER_PAINTER, size=size) el = Clickable(name) el.set_painter(painter) el.set_style(style.STYLE_BROWSER_LAUNCHER) el.finish() return el def _get_file_element(self, name): painter = functions.obtain_valid_painter(painterstyle.NAME_PAINTER, size=style.SIZE) el = Element(name) el.set_painter(painter) el.set_style(style.STYLE_NAME) el.finish() return el def _refresh_pos(self): h_store(self.get_storer_rect(), self.get_elements()) def launch_box(self, done_no_save=True): self._launch(done_no_save) # ## special browserlauncher handling if self.browser._something_selected: if self.show_select: text = normpath(self.browser._selected._inserted) text = basename(text) self._file_element.set_text(text, size=(self.file_width, self.get_fus_rect().h), cut=True) helpjail = self.father self._name_element.add_basic_help(self.browser._selected._value, jail=helpjail) # ## self._unlaunch() def scale_to_title(self, margins=None, state=None): self.launcher_el.scale_to_title(margins, state) self._refresh_pos() ## def get_storer_rect(self): ## if not self.show_select: ## return self._name_element.get_storer_rect() ## else: ## return _Launcher.get_storer_rect(self)
def _hover(self): Clickable._hover(self) change_cursor(constants.CURSOR_TEXT)
def finish(self): Clickable.finish(self) self.add_arrow("top")