# Copyright (c) 2007 Enough Project. # See LICENSE for details. from IdentifierWidget import IdentifierWidget from VariableDeclarationWidget import VariableDeclarationWidget import style class VariableWidget(IdentifierWidget): def __init__(self, variable_proxy): IdentifierWidget.__init__(self, variable_proxy, style.variable_name) self._info_shower.info_widget = VariableDeclarationWidget(variable_proxy) import nodes from widget_for import NormalWidgetMaker NormalWidgetMaker.register(nodes.Variable, VariableWidget)
# Copyright (c) 2007 Enough Project. # See LICENSE for details. from ccode import c_escape_str from LiteralWidget import LiteralWidget import style class LiteralStrWidget(LiteralWidget): escape_table = c_escape_str ldelimiter = rdelimiter = '"' ldelimiter_style = rdelimiter_style = style.literal_string_delimiter literal_style = style.literal_string example_frame_color = (255, 255, 255) example_style = style.example_string def _get_example_str(self): return self._get_string() import nodes from widget_for import NormalWidgetMaker NormalWidgetMaker.register(nodes.LiteralString, LiteralStrWidget)
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) NormalWidgetMaker.register(nodes.Block, BlockWidget)
def _allowed_text(self, text): return getattr(self, '_%s__allowed_text' % (self._mode,))(text) def _dec__value_of_string(self, text): return int(text) def _dec__string_of_value(self, value): return str(abs(value)) def _dec__allowed_text(self, value): return not value or value.isdigit() _dec__ldelimiter = '' def _oct__value_of_string(self, text): return int(text, 8) def _oct__string_of_value(self, value): return oct(long(abs(value)))[1:-1] def _oct__allowed_text(self, value): return all(c in '01234567' for c in value) _oct__ldelimiter = '0' def _hex__value_of_string(self, text): return int(text, 16) def _hex__string_of_value(self, value): return hex(long(abs(value)))[2:-1] def _hex__allowed_text(self, value): return all((c.isdigit() or c in 'abcdef') for c in value.lower()) _hex__ldelimiter = '0x' import nodes from widget_for import NormalWidgetMaker NormalWidgetMaker.register(nodes.LiteralInt, LiteralIntWidget)
# Copyright (c) 2007 Enough Project. # See LICENSE for details. from IdentifierWidget import IdentifierWidget from EnumWidget import EnumWidget import style class EnumValueWidget(IdentifierWidget): def __init__(self, variable_proxy): IdentifierWidget.__init__(self, variable_proxy, style.enum_value) self._info_shower.info_widget = EnumWidget(self.variable.enum, self.variable) import nodes from widget_for import NormalWidgetMaker NormalWidgetMaker.register(nodes.EnumValue, EnumValueWidget)
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) NormalWidgetMaker.register(nodes.Module, ModuleWidget)
# Copyright (c) 2007 Enough Project. # See LICENSE for details. from DefineWidget import DefineWidget from IdentifierWidget import IdentifierWidget import style class DefineValueWidget(IdentifierWidget): def __init__(self, variable_proxy): IdentifierWidget.__init__(self, variable_proxy, style.define_value) self._info_shower.info_widget = DefineWidget(variable_proxy) import nodes from widget_for import NormalWidgetMaker NormalWidgetMaker.register(nodes.Define, DefineValueWidget)