def add_figure_widget(self, image_data, title='', caption = '', pvals=None, colors=None): children = [i for i in self.unsaved.children] if len(title) > 0: title = title + '.' if len(caption) > 0: caption = ' ' + caption html_str = '<b>'+title+'</b>' + caption html_widget = HTML(value=html_str) save_button = Button(description='Save Figure') save_button.image_data = image_data save_button.title = title save_button.caption = caption save_button.on_click(self.save_unsaved_figure) save_button.pvals = pvals save_button.colors = colors close_button = Button(description='Remove Figure') close_button.on_click(self.remove_unsaved_figure) restore_pvals = Button(description='Restore Parameter Values') restore_pvals.pvals = pvals if pvals is None: restore_pvals.visible = False if old_ipython is True: image_widget = Image() image_widget.value = image_data tab_widget = VBox(children=[image_widget, html_widget]) if colors is not None: html_widgets = self.colorbar_tabs(colors) tab_widget.description='Figure' tab_widget = Tab(children=[tab_widget]+html_widgets) else: image_widget = self._image_widget_new(image_data, colors=colors) tab_widget = VBox(children=[image_widget, html_widget]) toggle = Button(description='Hide') restore_pvals.on_click(self.restore_figure_pvals) if old_ipython is True: wi = Popup(children=[close_button, save_button, tab_widget, restore_pvals]) else: contents = VBox(children=[close_button, save_button, tab_widget, restore_pvals]) contents.width = '100%' wi = Popup(children=[contents]) wi.border = '1px solid black' save_button.wi = wi close_button.wi = wi children.append(wi) self.unsaved.children = children if colors is not None: if old_ipython is True: tab_widget.set_title(0, 'Figure') tab_widget.set_title(1, 'Colorbar')
def edit_parameters_widget(self): controller = self.controller if controller.ds is None: return pvals_widgets = [FloatText(description=i, value=controller.pvals[i]) for i in sorted(controller.pvals.keys())] wi = VBox(children=pvals_widgets) button = Button(value=False, description="Done") button.on_click(self.update_parameters) button.pvals = pvals_widgets button.wi = wi edit_pvals = VBox(description="Edit Parameters", children=[wi, button]) controller.update_child("Edit Parameters", edit_pvals)
def edit_symbols_widget(self): controller = self.controller if controller.ds is None: return symbols = {i:controller.symbols[i] for i in controller.symbols if i in controller.ds.dependent_variables + controller.ds.independent_variables} symbols.update({i:i for i in controller.ds.dependent_variables + controller.ds.independent_variables if i not in symbols}) self.symbols = symbols symbols_widgets = [Text(description=i, value=self.symbols[i]) for i in symbols] wi = VBox(children=symbols_widgets) button = Button(value=False, description='Done') button.on_click(self.update_symbols) button.symbols = symbols_widgets button.wi = wi edit_symbols = VBox(description='Edit Symbols', children=[wi, button]) controller.update_child('Edit Symbols', edit_symbols) wi.visible = True
def create_plot_widget(self): controller = self.controller options = self.controller.options if controller.ds is None: return xaxis = controller.defaults('xaxis') if xaxis is None: xaxis = controller.ds.independent_variables[0] yaxis = controller.defaults('yaxis') if yaxis is None: yaxis = controller.ds.independent_variables[1] center = controller.defaults('center_axes') range_x = controller.defaults('range_x') range_y = controller.defaults('range_y') xlabel = Dropdown( description='* X-Axis', values=controller.ds.independent_variables, options=controller.ds.independent_variables, value=xaxis) ylabel = Dropdown( description='* Y-Axis', values=['None'] + controller.ds.independent_variables, options=['None'] + controller.ds.independent_variables, value=yaxis) xmin = FloatText(description='* X-Min', value=range_x[0]) xmax = FloatText(description='* X-Max', value=range_x[1]) ymin = FloatText(description='* Y-Min', value=range_y[0]) ymax = FloatText(description='* Y-Max', value=range_y[1]) center_axes = Checkbox(description='Center Axes', value=center) boundaries = Checkbox(description='Draw Boundaries', value=False) plot_type = Dropdown(description='* Plot Type', values=self.widget_types, options=self.widget_types, value='Design Space (interactive)') title_widget = Text(description='Title') caption_widget = Textarea(description='Caption') included = controller.defaults('included_cases') if included is None: included = [] if isinstance(included, list) is False: included = [included] included_widget = Textarea(description='Only Cases', value=', '.join(included)) wi = VBox(children=[xlabel, ylabel, plot_type, xmin, xmax, ymin, ymax, center_axes, boundaries, title_widget, caption_widget, included_widget]) for i in [xlabel, ylabel, plot_type]: i.on_trait_change(self.update_field, 'value') plot_type.widget_container = wi button = Button(value=False, description='Add Plot') button.on_click(self.make_plot) button.xlabel = xlabel button.ylabel = ylabel button.xmin = xmin button.xmax = xmax button.ymin = ymin button.ymax = ymax button.center_axes = center_axes button.boundaries = boundaries button.plot_type = plot_type button.title = title_widget button.caption = caption_widget button.included = included_widget button.wi = wi self.title = title_widget self.caption = caption_widget self.boundaries = boundaries self.plot_type = plot_type self.xlabel = xlabel self.ylabel = ylabel self.ymin = ymin self.ymax = ymax self.xmin = xmin self.xmax = xmax add_plot = VBox(description='Add Plot', children=[wi, self.plot_data, button]) self.update_plot_widget('value', 'Design Space (Interactive)') return ('Create Plot', add_plot)
def edit_equations_widget(self, editing=False): kinetic_orders = self.options['kinetic_orders'] if kinetic_orders is None: kinetic_orders = [] name = Text(description='* Name', value=self.name) version = Text(description='Version', value=self.version) self.version_field = version equations=Textarea(description='* Equations', value='\n'.join(self.equations)) aux=Textarea(description='Auxiliary Variables', value=', '.join(self.auxiliary)) html = HTML(value='<b>Architectural Constraints</b>') constraints=Textarea(description='Parameters', value=', '.join(self.constraints) ) options_html = HTML(value='<b>Additional Options</b>') cyclical = Checkbox(description='Check for Cycles', value = self.cyclical) codominance = Checkbox(description='Check for Co-dominance', value = self.codominance) recast = Checkbox(description='Recast Equations', value = self.recast) replacements=Textarea(description='Kinetic Orders', value=', '.join( [i for i in kinetic_orders])) wi = VBox(children=[equations, aux, html, constraints, replacements, options_html, cyclical, codominance,recast, ]) button = Button(value=False, description='Create Design Space') button.on_click(self.make_design_space) button.equations = equations button.aux = aux button.constraints = constraints button.cyclical = cyclical button.codominance = codominance button.recast = recast button.replacements = replacements button.wi = wi button.name = name ## button.version = version load = Button(value=False, description='Load Data') load.on_click(self.load_widget) load.equations = equations ## load.version = version load.aux = aux load.constraints = constraints load.cyclical = cyclical load.codominance = codominance load.replacements = replacements load.wi = wi load.name = name load.button = button button.load = load edit_symbols = Button(value=False, description='Edit Symbols') edit_symbols.on_click(self.create_edit_symbols) edit_parameters = Button(value=False, description='Edit Parameters') edit_parameters.on_click(self.create_edit_parameters) button.edit_symbols = edit_symbols button.edit_parameters = edit_parameters edit_equations = VBox(description='Edit Equations', children=[name, version, wi, edit_symbols, edit_parameters, button, load]) wi.visible = False edit_symbols.visible = False edit_parameters.visible = False if self.ds is not None: wi.visible = True ## self.update_widgets() self.make_options_menu(button) if editing is True: self.make_design_space(button) return edit_equations