class ModuleWidget(VBox): add_func_key = Keymap.Key(pygame.KMOD_CTRL, pygame.K_f) def __init__(self, module_proxy): self.module = module_proxy.get() self.func_box = VBox(CacheMap(NormalWidgetMaker.make, self.module.declarations), relay_focus=True) VBox.__init__(self, List([ make_label(style.module_name, loop.namer.get_name(self.module)), self.func_box, ])) self.keymap.register_key( self.add_func_key, Keymap.keydown_noarg(self._add_func) ) def _add_func(self): """Add a new function""" func = nodes.Function( meta=nodes.Meta(name='new_func'), type=nodes.FunctionType(return_type=builtins.void(), parameters=List()), block=nodes.Block(statements=List()), ) index = self.func_box.index if index is None: index = 0 self.module.declarations.insert(index, func) self.func_box.set_index(index)
def __init__(self, block_proxy): self.block = block_proxy.get() self.ellipsis = make_label(style.ellipsis, '...', True) self.statement_box = VBox(CacheMap(StatementWidgetMaker.make, self.block.statements), relay_focus=True) self.proxy_widget = ProxyWidget(ValueContainer(self.statement_box)) VBox.__init__(self, List([ make_label(style.braces, '{'), indented(self.proxy_widget), make_label(style.braces, '}'), ])) self.info_shower = InfoShower(self.ellipsis.focus_keymap.obs_activation) self.info_shower.info_widget = self.statement_box self.keymap.register_key( self.insert_statement_key, Keymap.keydown_noarg(self._insert_statement) ) self.keymap.register_key( self.append_statement_key, Keymap.keydown_noarg(self._append_statement) ) self.block.statements.obs_list.add_observer(self, '_statement_list_') self._update_delete_registration() self._update_fold_state()
def __init__(self, widget): self.main_stack = StackWidget() self.main_stack.push(widget) from loop import loop keys_reflection_widget = KeysReflectionWidget(loop.global_keymap, style.key_name, style.keydoc_name) keys_reflection_widget.bg_color = (20,20,50) self.info_list = List([keys_reflection_widget]) info_box = HBox(self.info_list) info_box.selectable.set(False) info_box.bg_color = (20,50,20) VBox.__init__(self, List([ self.main_stack, SpacerWidget((10, 0)), info_box, ]), relay_focus=True) register_key = self.keymap.register_key register_key(self.offset_right_key, Keymap.keydown_noarg(self._offset_right)) register_key(self.offset_left_key, Keymap.keydown_noarg(self._offset_left)) register_key(self.offset_up_key, Keymap.keydown_noarg(self._offset_down)) register_key(self.offset_down_key, Keymap.keydown_noarg(self._offset_up))
def __init__(self, function_proxy): self.function_proxy = function_proxy self.function = function_proxy.get() VBox.__init__(self, List([ TypeWidgetMaker.make(self.function.type, self.function_proxy), NormalWidgetMaker.make(self.function.block), ]))
def __init__(self, module_proxy): self.module = module_proxy.get() self.func_box = VBox(CacheMap(NormalWidgetMaker.make, self.module.declarations), relay_focus=True) VBox.__init__(self, List([ make_label(style.module_name, loop.namer.get_name(self.module)), self.func_box, ])) self.keymap.register_key( self.add_func_key, Keymap.keydown_noarg(self._add_func) )
def __init__(self, widget): self.main_stack = StackWidget() self.main_stack.push(widget) from codegui.loop import loop keys_reflection_widget = KeysReflectionWidget(loop.global_keymap, style.key_name, style.keydoc_name) keys_reflection_widget.bg_color = (20,20,50) self.info_list = List([keys_reflection_widget]) info_box = VBox(self.info_list) info_box.selectable.set(False) info_box.bg_color = (20,50,20) Table.__init__(self, List([List([ self.main_stack, SpacerWidget((0, 10)), info_box, ])]), relay_focus=True)
def __init__(self, node_proxy): self.node_proxy = node_proxy self.node = node_proxy.get() cond_part = HBox(List([ make_label(style.while_, 'while'), make_label(style.paren, '('), NormalWidgetMaker.make(self.node.expr), make_label(style.paren, ')'), ]), relay_focus=True) cond_part.is_centered = True VBox.__init__(self, List([ cond_part, NormalWidgetMaker.make(self.node.block), ])) self.focus_keymap.register_key( self.convert_to_if_key, Keymap.keydown_noarg(self._convert_to_if) )
def __init__(self, enum_proxy, emphasize_value=None): self.enum = enum_proxy.get() self._comma = make_label(style.comma, ',') values_box = VBox(List([ self._value_widget(value_proxy, index!=len(self.enum.values)-1, emphasize_value) for index, value_proxy in enumerate(self.enum.values) ])) VBox.__init__(self, List([ HBox(List([ make_label(style.enum, 'enum'), make_label(style.space, ' '), make_label(style.type_, loop.namer.get_name(self.enum)), ]), relay_focus=True), make_label(style.braces, '{'), indented(values_box), HBox(List([ make_label(style.braces, '}'), make_label(style.semicolon, ';'), ]), relay_focus=True) ]))
class BlockWidget(VBox): default_folded = False kill_stmt_key = Keymap.Key(pygame.KMOD_CTRL, pygame.K_k) insert_statement_key = Keymap.Key(0, pygame.K_i) append_statement_key = Keymap.Key(0, pygame.K_o) plus_keys = (Keymap.Key(0, pygame.K_EQUALS), Keymap.Key(0, pygame.K_KP_PLUS)) minus_keys = (Keymap.Key(0, pygame.K_MINUS), Keymap.Key(0, pygame.K_KP_MINUS)) def __init__(self, block_proxy): self.block = block_proxy.get() self.ellipsis = make_label(style.ellipsis, '...', True) self.statement_box = VBox(CacheMap(StatementWidgetMaker.make, self.block.statements), relay_focus=True) self.proxy_widget = ProxyWidget(ValueContainer(self.statement_box)) VBox.__init__(self, List([ make_label(style.braces, '{'), indented(self.proxy_widget), make_label(style.braces, '}'), ])) self.info_shower = InfoShower(self.ellipsis.focus_keymap.obs_activation) self.info_shower.info_widget = self.statement_box self.keymap.register_key( self.insert_statement_key, Keymap.keydown_noarg(self._insert_statement) ) self.keymap.register_key( self.append_statement_key, Keymap.keydown_noarg(self._append_statement) ) self.block.statements.obs_list.add_observer(self, '_statement_list_') self._update_delete_registration() self._update_fold_state() def _statement_list_insert(self, index, item): self._update_delete_registration() def _statement_list_pop(self, index, value): self._update_delete_registration() def _statement_list_replace(self, index, old_value, new_value): self._update_delete_registration() def _update_delete_registration(self): if self.block.statements: self.statement_box.keymap.register_key( self.kill_stmt_key, Keymap.keydown_noarg(self._delete_selected_child) ) else: self.statement_box.keymap.unregister_key( self.kill_stmt_key) def _is_folded(self): return self.block.meta.get('folded', self.default_folded) def _update_fold_state(self): if self._is_folded(): for key in self.plus_keys: self.keymap.register_key(key, Keymap.keydown_noarg(self._unfold)) for key in self.minus_keys: self.keymap.unregister_key(key) widget = self.ellipsis else: for key in self.minus_keys: self.keymap.register_key(key, Keymap.keydown_noarg(self._fold)) for key in self.plus_keys: self.keymap.unregister_key(key) widget = self.statement_box self.proxy_widget.value_proxy.set(widget) def _fold(self): """Fold the code block""" self.block.meta['folded'] = True self._update_fold_state() def _unfold(self): """Unfold the code block""" self.block.meta['folded'] = False self._update_fold_state() def _delete_selected_child(self): """Delete block statement""" if self.statement_box.index is None or not self.block.statements: return self.block.statements.pop(self.statement_box.index) def _statement_index(self): index = self.statement_box.index if index is None: return 0 return index def _insert_statement(self): """New statement before cursor""" index = self._statement_index() self.block.statements.insert(index, nodes.Missing()) self.statement_box.set_index(index) def _append_statement(self): """New statement after cursor""" index = self._statement_index()+1 self.block.statements.insert(index, nodes.Missing()) self.statement_box.set_index(index)