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