def __draw_input_fields(self, arg, element, type): for i in xrange(len(arg)): if type == "in": label = "label_in%d" % i else: label = "label_out%d" % i if arg[i] == 'i': element.append(pg.wxIntProperty('Integer', label)) self.cmds_pg.Append(element[i]) elif arg[i] == 'f': element.append(pg.wxFloatProperty('Float', label)) self.cmds_pg.Append(element[i]) elif arg[i] == 's': if type == "in": element.append(pg.wxStringCallBackProperty('String', label, '' )) self.cmds_pg.Append(element[i]) dlg = browser.create_dialog(self, True) element[i].SetCallBackDialog(dlg) else: element.append(pg.wxStringProperty('String', label, '')) self.cmds_pg.Append(element[i]) elif arg[i] == 'b': element.append(pg.wxEnumProperty('Boolean', label,['True','False'],[1,0],2,0 )) self.cmds_pg.Append(element[i]) elif arg[i] == 'o': if type == "in": element.append(pg.wxStringCallBackProperty( 'Object', label, '' )) self.cmds_pg.Append(element[i]) dlg = browser.create_dialog(self, True) element[i].SetCallBackDialog(dlg) else: element.append(pg.wxStringProperty('Object', label, '')) self.cmds_pg.Append(element[i]) elif arg[i] == 'l': if type == "in": element.append(pg.wxStringProperty('List', label, '')) self.cmds_pg.Append(element[i]) else: element.append(pg.wxArrayStringProperty('List', label, '')) self.cmds_pg.Append(element[i]) else: element.append(pg.wxStringProperty('String', label, 'Unknow type!!!')) self.cmds_pg.Append(element[i])
def draw_input_fields(inspector_win, arg, element, type): for i in xrange(len(arg)): if type == "in": label = "label_in%d" % i else: label = "label_out%d" % i if arg[i] == 'i': element.append(pg.wxIntProperty('Integer', label)) inspector_win.cmds_pg.Append(element[i]) elif arg[i] == 'f': element.append(pg.wxFloatProperty('Float', label)) inspector_win.cmds_pg.Append(element[i]) elif arg[i] == 's': if type == "in": element.append(pg.wxStringCallBackProperty('String', label, '' )) inspector_win.cmds_pg.Append(element[i]) dlg = browser.create_dialog(inspector_win, True) element[i].SetCallBackDialog(dlg) else: element.append(pg.wxStringProperty('String', label, '')) inspector_win.cmds_pg.Append(element[i]) elif arg[i] == 'b': element.append(pg.wxEnumProperty('Boolean', label,['True','False'],[1,0],2 )) inspector_win.cmds_pg.Append(element[i]) elif arg[i] == 'o': if type == "in": element.append(pg.wxStringCallBackProperty( 'Object', label, '' )) inspector_win.cmds_pg.Append(element[i]) dlg = browser.create_dialog(inspector_win, True) element[i].SetCallBackDialog(dlg) else: element.append(pg.wxStringProperty('Object', label, '')) inspector_win.cmds_pg.Append(element[i]) elif arg[i] == 'l': if type == "in": element.append(pg.wxStringProperty('List', label, '')) inspector_win.cmds_pg.Append(element[i]) else: element.append(pg.wxArrayStringProperty('List', label, '')) inspector_win.cmds_pg.Append(element[i]) else: element.append(pg.wxStringProperty('String', label, 'Unknow type!!!')) inspector_win.cmds_pg.Append(element[i])
def check_string_subtypes(subtype, param_name, label): if subtype is not "": if "asset" == subtype: directory = mangle_path("wc:export/assets") + "\\" element = pg.wxFileProperty(param_name, label, directory) elif "texture" == subtype: directory = mangle_path("wc:export/textures") + "\\" element = pg.wxFileProperty(param_name, label, directory) elif "shader" == subtype: directory = mangle_path("wc:export/shader") + "\\" element = pg.wxFileProperty(param_name, label, directory) elif "file" == subtype: directory = mangle_path("wc:") element = pg.wxFileProperty(param_name, label, directory) elif "directory" == subtype: directory = mangle_path("home:") element = pg.wxDirProperty(param_name, label, directory) elif "entityobject" == subtype: element = pg.wxStringCallBackProperty(param_name, label, '') dlg = browser.create_dialog(True, "/sys/nobject/nentityobject") element.SetCallBackDialog(dlg) elif "nroot" == subtype: element = pg.wxStringCallBackProperty(param_name, label, '') dlg = browser.create_dialog(True, "/") element.SetCallBackDialog(dlg) elif "entityclass" == subtype: element = pg.wxStringCallBackProperty(param_name, label, '') dlg = grimoire.create_dialog(True) element.SetCallBackDialog(dlg) elif "nobjectclass" == subtype: element = pg.wxStringCallBackProperty(param_name, label, '') dlg = entitybrowser.create_dialog(self) element.SetCallBackDialog(dlg) else: # No subtype element = pg.wxStringProperty(param_name, label, '') return element
def check_string_subtypes(subtype, param_name, label): if subtype is not "": if "asset" == subtype: directory = mangle_path("wc:export/assets") + "\\" element = pg.wxFileProperty(param_name, label, directory) elif "texture" == subtype: directory = mangle_path("wc:export/textures") + "\\" element = pg.wxFileProperty(param_name, label, directory) elif "shader" == subtype: directory = mangle_path("wc:export/shader") + "\\" element = pg.wxFileProperty(param_name, label, directory) elif "file" == subtype: directory = mangle_path("wc:") element = pg.wxFileProperty(param_name, label, directory) elif "directory" == subtype: directory = mangle_path("home:") element = pg.wxDirProperty(param_name, label, directory) elif "entityobject" == subtype: element = pg.wxStringCallBackProperty(param_name, label, '' ) dlg = browser.create_dialog(True, "/sys/nobject/nentityobject") element.SetCallBackDialog(dlg) elif "nroot" == subtype: element = pg.wxStringCallBackProperty(param_name, label, '' ) dlg = browser.create_dialog(True, "/") element.SetCallBackDialog(dlg) elif "entityclass" == subtype: element = pg.wxStringCallBackProperty(param_name, label, '' ) dlg = grimoire.create_dialog(True) element.SetCallBackDialog(dlg) elif "nobjectclass" == subtype: element = pg.wxStringCallBackProperty(param_name, label, '' ) dlg = entitybrowser.create_dialog(self) element.SetCallBackDialog(dlg) else: # No subtype element = pg.wxStringProperty(param_name, label, '') return element
def __get_subtype_property(self, subtype, name, label): if "asset" == subtype: directory = servers.get_file_server().manglepath("wc:export/assets") + "\\" prop = pg.wxFileProperty(name, label, directory) elif "texture" == subtype: directory = servers.get_file_server().manglepath("wc:export/textures") + "\\" prop = pg.wxFileProperty(name, label, directory) elif "image" == subtype: directory = servers.get_file_server().manglepath("wc:export/textures") + "\\" prop = pg.wxAdvImageFileProperty(name, label) elif "shader" == subtype: directory = servers.get_file_server().manglepath("wc:export/shader") + "\\" prop = pg.wxFileProperty(name, label, directory) elif "file" == subtype: directory = servers.get_file_server().manglepath("wc:") prop = pg.wxFileProperty(name, label, directory) elif "material" == subtype: prop = pg.wxStringCallBackProperty(name, label, '') dlg = nodelibdlg.NodeLibDialog( self, nodelibdlg.SELECT, 'material', 'Material', "/usr/materials") prop.SetCallBackDialog(dlg) elif "directory" == subtype: directory = servers.get_file_server().manglepath("home:") prop = pg.wxDirProperty(name, label, directory) elif "entityobjectclass" == subtype: prop = pg.wxStringCallBackProperty(name, label, '' ) dlg = objbrowserwindow.create_dialog( self, True, "/sys/nobject/nentityobject" ) prop.SetCallBackDialog(dlg) prop = pg.wxStringProperty(name, label, '') elif "nroot" == subtype: prop = pg.wxStringCallBackProperty(name, label, '' ) dlg = objbrowserwindow.create_dialog( self, True, "/" ) prop.SetCallBackDialog(dlg) elif "entityclass" == subtype: prop = pg.wxStringCallBackProperty(name, label, '' ) dlg = grimoire.create_dialog(self, True) prop.SetCallBackDialog(dlg) elif "entityobject" == subtype: prop = pg.wxStringCallBackProperty(name, label, '' ) dlg = entitybrowser.create_dialog(self) prop.SetCallBackDialog(dlg) elif "musicsample" == subtype: prop = pg.wxStringCallBackProperty(name, label, '' ) dlg = musictabledlg.dialog_for_music_sample_selection(self) prop.SetCallBackDialog(dlg) elif "musicmood" == subtype: prop = pg.wxStringCallBackProperty(name, label, '' ) dlg = musictabledlg.dialog_for_music_mood_selection(self) prop.SetCallBackDialog(dlg) elif "musicstyle" == subtype: prop = pg.wxStringCallBackProperty(name, label, '' ) dlg = musictabledlg.dialog_for_music_style_selection(self) prop.SetCallBackDialog(dlg) else: print "Bad subtype" prop = pg.wxStringProperty(name, label, '') return prop
def append_property(self, parent_pid, name, format, data=None): """Add to the end a child property""" # Create a basic dictionary if format given is just the type if isinstance(format, str): format = { Format_Type: format, Format_Editor: None, Format_Max: None, Format_Min: None, Format_Step: None, Format_Subtype: None, Format_Flags: None, Format_Enums: None } # Create a property for the correct type label = self.__get_next_label() type = format[Format_Type] if type == Type_Bool: prop = pg.wxBoolProperty( name, label ) elif type == Type_Float: prop = self.__append_float_property( name, label, format ) elif type == Type_Int: prop = self.__append_int_property( parent_pid, name, label, format ) if not isinstance(prop, pg.wxPGProperty): return prop elif type == Type_Object: if format[Format_Subtype] != None: prop = self.__get_subtype_property( format[Format_Subtype], name, label ) else: prop = pg.wxStringProperty( name, label, '' ) elif type == Type_String: if format[Format_Subtype] != None: prop = self.__get_subtype_property( format[Format_Subtype], name, label ) else: prop = pg.wxStringProperty( name, label, '' ) elif type == Type_Vector2: pid = self.__append_vector2( parent_pid, name, format, data ) return pid elif type == Type_Vector3: if format[Format_Editor] == Editor_Color: # Color editor prop = pg.wxColourProperty( name, label, wx.BLACK) else: pid = self.__append_vector3( parent_pid, name, format, data ) return pid elif type == Type_Vector4 or type == Type_Quaternion: pid = self.__append_vector4( parent_pid, name, format, data ) return pid else: raise TypeError, "Type '%s' not supported" % type # Add the property to the control for simple types pid = self.__append_property( prop, parent_pid, name, format, data, label ) return pid
def draw_state_commands(self, obj): self.cmds_pg.Clear() if obj is None: self.Disable() return else: self.Enable() # Get the commands inspector = pynebula.new( "nobjinspector", "/editor/inspector" ) inspector.initcmdsstate(obj) # Navigate over the commands and build the interface. We need # the command definition to put it in the category. So first create # the grid properties but do not append them until the category # is placed with the full description. cmds_count = inspector.getcmdscount() self.cmd_list = list() # Command list self.cmd_name_list = list() # Store the categories self.undo_list = list() if cmds_count == 0: self.cmds_pg.Append( pg.wxPropertyCategory( str("State is EMPTY"), str("nostate") ) ) self.prev_state = list() # Storage state when the inspector is call for num_cmd in xrange(cmds_count): cmds_name_desc = inspector.getcmdname(num_cmd) + str(" (") undo_cmd = inspector.getcmdname(num_cmd) + str("(") args_count = inspector.getinargscount(num_cmd) self.element = list() # Start argument list for num_arg in xrange(args_count): label = "label_in" + str(num_cmd) + "-" + str(num_arg+1) arg_type = inspector.gettype(num_cmd, num_arg+1) # Type is Int if arg_type == 1: value = inspector.geti(num_cmd, num_arg+1) self.element.append( pg.wxIntProperty( 'Integer', label ) ) value_as_string = str(value) self.element[num_arg].SetValueFromString( value_as_string, 0 ) self.prev_state.append(value_as_string) cmds_name_desc = cmds_name_desc + value_as_string + ", " undo_cmd = undo_cmd + value_as_string + "," # Type is Float elif arg_type == 2: value = inspector.getf(num_cmd, num_arg+1) self.element.append( pg.wxFloatProperty( 'Float', label ) ) value_as_string = str(value) self.element[num_arg].SetValueFromString( value_as_string, 0 ) self.prev_state.append(value_as_string) undo_cmd = undo_cmd + value_as_string + "," temp = value_as_string.rsplit('.') value = temp[0] + '.' + temp[1][:2] cmds_name_desc = cmds_name_desc + value_as_string + ", " # Type if String elif arg_type == 3: value = inspector.gets(num_cmd, num_arg+1) self.element.append( pg.wxStringProperty( 'String', label, '' ) ) value_as_string = str(value) self.element[num_arg].SetValueFromString( value_as_string, 0 ) self.prev_state.append(value_as_string) cmds_name_desc = cmds_name_desc +\ '"' + value_as_string + '"' + ", " undo_cmd = undo_cmd + '"' + value_as_string + '"' + "," # Type is Boolean elif arg_type == 4: value = inspector.getb(num_cmd, num_arg+1) self.element.append( pg.wxEnumProperty( 'Boolean', label, ['True','False'], [1,0], 2 ) ) if value == 1: self.element[num_arg].SetValueFromString( str("True"), 0 ) cmds_name_desc = cmds_name_desc + str('True') + ", " self.prev_state.append('True') else: self.element[num_arg].SetValueFromString( str("False"), 0 ) cmds_name_desc = cmds_name_desc + str('False') + ", " self.prev_state.append('False') undo_cmd = undo_cmd + str(value) + "," # Type is Object elif arg_type == 5: value = inspector.geto(num_cmd, num_arg+1) self.element.append( pg.wxStringProperty( 'Object', label, '' ) ) full_name_as_string = str( value.getfullname() ) self.element[num_arg].SetValueFromString( full_name_as_string, 0 ) self.prev_state.append(full_name_as_string) cmds_name_desc = cmds_name_desc +\ str(value.getname()) + ", " undo_cmd = undo_cmd + "lookup(" + \ full_name_as_string + ")," # Type not implemented else: cjr.show_error_message("Unknown type!!!") # Write the command definition into the category and attach it if args_count > 0: cmds_name_desc = cmds_name_desc[:-2] + ")" undo_cmd = undo_cmd[:-1] + ")" else: cmds_name_desc = cmds_name_desc + ")" undo_cmd = undo_cmd + ")" category = pg.wxPropertyCategory( cmds_name_desc, "cmdLabel%d" % num_cmd ) self.cmds_pg.Append(category) self.cmd_name_list.append( inspector.getcmdprotoname(num_cmd) ) # Show the arguments (append to grid) recently created # and append them to a command list for num_arg in xrange(args_count): self.cmds_pg.Append(self.element[num_arg]) self.cmd_list.append(self.element) self.undo_list.append(undo_cmd) pynebula.delete("/editor/inspector") # Make de object the current nebulagui.nebula_object = obj self.object = obj # Refresh control self.cmds_pg.Refresh()
def __draw_input_fields(inspector, params, type): i = 0 for param in params: if type == "in": label = "label_in%d" % i else: label = "label_out%d" % i param_type = inspector.xml.get_param_type(param) param_name = inspector.xml.get_param_name(param) # Get posible attributes editor = "" min_value = "" max_value = "" default_value = "" step = "" subtype = "" for attr in inspector.xml.get_param_attrs(param): attr_type = inspector.xml.get_attr_type(attr) if "editor" == attr_type: editor = inspector.xml.get_attr_value(attr) if "min" == attr_type: min_value = inspector.xml.get_attr_value(attr) if "max" == attr_type: max_value = inspector.xml.get_attr_value(attr) if "default" == attr_type: default_value = inspector.xml.get_attr_value(attr) if "step" == attr_type: step = inspector.xml.get_attr_value(attr) if "subtype" == attr_type: subtype = inspector.xml.get_attr_value(attr) if param_type == 'i': if "spin" == editor: element = pg.wxIntProperty(param_name, label) elif "color" == editor: element = pg.wxColourProperty(param_name, label, wx.RED) elif "slider" == editor: element = pg.wxIntProperty(param_name, label) elif "enum" == editor: test_labels = ["uno", "dos", "tres"] test_values = [1, 2, 3] element = pg.wxEnumProperty(param_name, label, test_labels, test_values) elif "flags" == editor: element = pg.wxIntProperty("flags", label) else: element = pg.wxIntProperty(param_name, label) elif param_type == 'f': element = pg.wxFloatProperty('Float', label) elif param_type == 's': if "" == editor: if type == "in": element = check_string_subtypes(subtype, param_name, label) else: element = pg.wxStringProperty(param_name, label, '') elif "font" == editor: element = pg.wxFontProperty(param_name, label, wx.NORMAL_FONT) elif param_type == 'b': element = pg.wxEnumProperty('Boolean', label, ['True', 'False'], [1, 0], 2) elif param_type == 'o': if type == "in": element = check_string_subtypes(subtype, param_name, label) else: element = pg.wxStringProperty(param_name, label, '') elif param_type == 'l': if type == "in": element = pg.wxStringProperty('List', label, '') else: element = pg.wxArrayStringProperty('List', label, '') else: element = pg.wxStringProperty('String', label, 'Unknow type!!!') inspector.cmds_pg.Append(element) if "spin" == editor or "slider" == editor: inspector.cmds_pg.MakeIntegerSpinControl(label) if "in" == type: inspector.in_elements.append(element) else: inspector.out_elements.append(element) i = i + 1
def draw_state_commands(self, obj): self.cmds_pg.Clear() if obj is None: self.Disable() return else: self.Enable() # Get the commands inspector = pynebula.new("nobjinspector", "/editor/inspector") inspector.initcmdsstate(obj) # Navigate over the commands and build the interface. We need # the command definition to put it in the category. So first create # the grid properties but do not append them until the category # is placed with the full description. cmds_count = inspector.getcmdscount() self.cmd_list = list() # Command list self.cmd_name_list = list() # Store the categories self.undo_list = list() if cmds_count == 0: self.cmds_pg.Append( pg.wxPropertyCategory(str("State is EMPTY"), str("nostate"))) self.prev_state = list() # Storage state when the inspector is call for num_cmd in xrange(cmds_count): cmds_name_desc = inspector.getcmdname(num_cmd) + str(" (") undo_cmd = inspector.getcmdname(num_cmd) + str("(") args_count = inspector.getinargscount(num_cmd) self.element = list() # Start argument list for num_arg in xrange(args_count): label = "label_in" + str(num_cmd) + "-" + str(num_arg + 1) arg_type = inspector.gettype(num_cmd, num_arg + 1) # Type is Int if arg_type == 1: value = inspector.geti(num_cmd, num_arg + 1) self.element.append(pg.wxIntProperty('Integer', label)) value_as_string = str(value) self.element[num_arg].SetValueFromString( value_as_string, 0) self.prev_state.append(value_as_string) cmds_name_desc = cmds_name_desc + value_as_string + ", " undo_cmd = undo_cmd + value_as_string + "," # Type is Float elif arg_type == 2: value = inspector.getf(num_cmd, num_arg + 1) self.element.append(pg.wxFloatProperty('Float', label)) value_as_string = str(value) self.element[num_arg].SetValueFromString( value_as_string, 0) self.prev_state.append(value_as_string) undo_cmd = undo_cmd + value_as_string + "," temp = value_as_string.rsplit('.') value = temp[0] + '.' + temp[1][:2] cmds_name_desc = cmds_name_desc + value_as_string + ", " # Type if String elif arg_type == 3: value = inspector.gets(num_cmd, num_arg + 1) self.element.append( pg.wxStringProperty('String', label, '')) value_as_string = str(value) self.element[num_arg].SetValueFromString( value_as_string, 0) self.prev_state.append(value_as_string) cmds_name_desc = cmds_name_desc +\ '"' + value_as_string + '"' + ", " undo_cmd = undo_cmd + '"' + value_as_string + '"' + "," # Type is Boolean elif arg_type == 4: value = inspector.getb(num_cmd, num_arg + 1) self.element.append( pg.wxEnumProperty('Boolean', label, ['True', 'False'], [1, 0], 2)) if value == 1: self.element[num_arg].SetValueFromString( str("True"), 0) cmds_name_desc = cmds_name_desc + str('True') + ", " self.prev_state.append('True') else: self.element[num_arg].SetValueFromString( str("False"), 0) cmds_name_desc = cmds_name_desc + str('False') + ", " self.prev_state.append('False') undo_cmd = undo_cmd + str(value) + "," # Type is Object elif arg_type == 5: value = inspector.geto(num_cmd, num_arg + 1) self.element.append( pg.wxStringProperty('Object', label, '')) full_name_as_string = str(value.getfullname()) self.element[num_arg].SetValueFromString( full_name_as_string, 0) self.prev_state.append(full_name_as_string) cmds_name_desc = cmds_name_desc +\ str(value.getname()) + ", " undo_cmd = undo_cmd + "lookup(" + \ full_name_as_string + ")," # Type not implemented else: cjr.show_error_message("Unknown type!!!") # Write the command definition into the category and attach it if args_count > 0: cmds_name_desc = cmds_name_desc[:-2] + ")" undo_cmd = undo_cmd[:-1] + ")" else: cmds_name_desc = cmds_name_desc + ")" undo_cmd = undo_cmd + ")" category = pg.wxPropertyCategory(cmds_name_desc, "cmdLabel%d" % num_cmd) self.cmds_pg.Append(category) self.cmd_name_list.append(inspector.getcmdprotoname(num_cmd)) # Show the arguments (append to grid) recently created # and append them to a command list for num_arg in xrange(args_count): self.cmds_pg.Append(self.element[num_arg]) self.cmd_list.append(self.element) self.undo_list.append(undo_cmd) pynebula.delete("/editor/inspector") # Make de object the current nebulagui.nebula_object = obj self.object = obj # Refresh control self.cmds_pg.Refresh()
def __draw_input_fields(inspector, params, type): i = 0 for param in params: if type == "in": label = "label_in%d" % i else: label = "label_out%d" % i param_type = inspector.xml.get_param_type(param) param_name = inspector.xml.get_param_name(param) # Get posible attributes editor = "" min_value = "" max_value = "" default_value = "" step = "" subtype = "" for attr in inspector.xml.get_param_attrs(param): attr_type = inspector.xml.get_attr_type(attr) if "editor" == attr_type: editor = inspector.xml.get_attr_value(attr) if "min" == attr_type: min_value = inspector.xml.get_attr_value(attr) if "max" == attr_type: max_value = inspector.xml.get_attr_value(attr) if "default" == attr_type: default_value = inspector.xml.get_attr_value(attr) if "step" == attr_type: step = inspector.xml.get_attr_value(attr) if "subtype" == attr_type: subtype = inspector.xml.get_attr_value(attr) if param_type == 'i': if "spin" == editor: element = pg.wxIntProperty(param_name, label) elif "color" == editor: element = pg.wxColourProperty(param_name, label, wx.RED) elif "slider" == editor: element = pg.wxIntProperty(param_name, label) elif "enum" == editor: test_labels = ["uno", "dos", "tres"] test_values = [1, 2, 3] element = pg.wxEnumProperty( param_name, label, test_labels, test_values) elif "flags" == editor: element = pg.wxIntProperty("flags", label) else: element = pg.wxIntProperty(param_name, label) elif param_type == 'f': element = pg.wxFloatProperty('Float', label) elif param_type == 's': if "" == editor: if type == "in": element = check_string_subtypes(subtype, param_name, label) else: element = pg.wxStringProperty(param_name, label, '') elif "font" == editor: element = pg.wxFontProperty(param_name, label, wx.NORMAL_FONT) elif param_type == 'b': element = pg.wxEnumProperty('Boolean', label,['True','False'],[1,0],2) elif param_type == 'o': if type == "in": element = check_string_subtypes(subtype, param_name, label) else: element = pg.wxStringProperty(param_name, label, '') elif param_type == 'l': if type == "in": element = pg.wxStringProperty('List', label, '') else: element = pg.wxArrayStringProperty('List', label, '') else: element = pg.wxStringProperty('String', label, 'Unknow type!!!') inspector.cmds_pg.Append(element) if "spin" == editor or "slider" == editor: inspector.cmds_pg.MakeIntegerSpinControl(label) if "in" == type: inspector.in_elements.append(element) else: inspector.out_elements.append(element) i = i + 1