def __init__(self, extentions=[], folder=os.path.expanduser('~'), label='search file', **kwargs): self.extentions = extentions self.folder = folder self.selected_file = v.TextField(label='Selected file', class_='ml-5 mt-5', v_model=self.file) self.loading = v.ProgressLinear( indeterminate=False, color=COMPONENTS['PROGRESS_BAR']['color']) self.file_list = v.List(dense=True, color='grey lighten-4', flat=True, children=[ self.loading, v.ListItemGroup(children=self.get_items(), v_model='') ]) self.file_menu = v.Menu(min_width=300, children=[self.file_list], close_on_content_click=False, max_height='300px', v_slots=[{ 'name': 'activator', 'variable': 'x', 'children': Btn(icon='mdi-file-search', v_model=False, v_on='x.on', text=label) }]) super().__init__(row=True, class_='d-flex align-center mb-2', align_center=True, children=[ self.file_menu, self.selected_file, ], **kwargs) link((self.selected_file, 'v_model'), (self, 'file')) def on_file_select(change): new_value = change['new'] if new_value: if os.path.isdir(new_value): self.folder = new_value self.change_folder() elif os.path.isfile(new_value): self.file = new_value self.file_list.children[1].observe(on_file_select, 'v_model')
def __init__(self, extentions=[], folder=os.path.expanduser('~'), label='search file', v_model=None, **kwargs): self.extentions = extentions self.folder = folder self.selected_file = v.TextField(readonly=True, label='Selected file', class_='ml-5 mt-5', v_model=self.file) self.loading = v.ProgressLinear( indeterminate=False, background_color='grey darken-3', color=COMPONENTS['PROGRESS_BAR']['color']) self.file_list = v.List( dense=True, color='grey darken-3', flat=True, max_height='300px', style_='overflow: auto; border-radius: 0 0 0 0;', children=[v.ListItemGroup(children=self._get_items(), v_model='')]) self.file_menu = v.Menu(min_width=300, children=[self.loading, self.file_list], close_on_content_click=False, v_slots=[{ 'name': 'activator', 'variable': 'x', 'children': Btn(icon='mdi-file-search', v_model=False, v_on='x.on', text=label) }]) self.reload = v.Btn(icon=True, color='primary', children=[v.Icon(children=['mdi-cached'])]) super().__init__(row=True, class_='d-flex align-center mb-2', align_center=True, children=[ self.reload, self.file_menu, self.selected_file, ], **kwargs) link((self.selected_file, 'v_model'), (self, 'file')) link((self.selected_file, 'v_model'), (self, 'v_model')) self.file_list.children[0].observe(self._on_file_select, 'v_model') self.reload.on_event('click', self._on_reload)
def __init__(self, test_case_widget, lb_scheme_widget): """ Widget definition for simulation of lattice Boltzmann methods. Parameters ========== - test_case_widget: widget of the test case (see test_case.py). - lb_scheme_widget: widget of the lattice Boltzmann scheme (see lb_scheme.py). This widget is composed by a menu where you can modify the discretization parameters, the generator used to build the numerical kernel into pylbm and the desired outputs for post treatment. This widget is also composed by a main widget where the simulation can be started and a plot is given in real time for the available fields. A period can be modified to control the plot frequency and a snapshot of the current figure can be made. """ self.test_case_widget = test_case_widget self.lb_scheme_widget = lb_scheme_widget test_case = test_case_widget.get_case() tc_param = test_case_widget.parameters lb_case = lb_scheme_widget.get_case() lb_param = lb_scheme_widget.parameters self.stats = {} ## ## The menu ## # configure the default simulation name self.simulation_name = v.TextField(label='Simulation name', v_model='') self.update_name(None) self.simu_cfg = v.Select(label='Load simulation configuration', items=[], v_model=None) self.update_simu_cfg_list() self.discret = DiscretizationWidget(test_case_widget, lb_scheme_widget) self.codegen = v.Select(items=['auto', 'numpy', 'cython'], v_model='auto') self.save_fields = Save_widget( list(lb_scheme_widget.get_case().equation.get_fields().keys())) self.menu = [ self.simulation_name, self.simu_cfg, v.ExpansionPanels(children=[ self.discret, v.ExpansionPanel(children=[ v.ExpansionPanelHeader(children=['Code generator']), v.ExpansionPanelContent(children=[self.codegen]), ]), v.ExpansionPanel(children=[ v.ExpansionPanelHeader(children=['Field output request']), v.ExpansionPanelContent( children=[self.save_fields.widget]), ]), ], multiple=True, class_='pa-0') ] ## ## The main ## self.simu = simulation() self.simu.reset_fields( lb_scheme_widget.get_case().equation.get_fields()) self.start = v.Btn(v_model=True, children=['Start'], class_='ma-2', style_='width: 100px', color='success') self.startTooltip = Tooltip(self.start, tooltip='click to start the simulation') self.pause = v.Btn(children=['Pause'], class_='ma-2', style_='width: 100px', disabled=True, v_model=False) self.progress_bar = v.ProgressLinear(height=20, value=0, color='light-blue', striped=True) self.result = v.Select(items=list(self.simu.fields.keys()), v_model=list(self.simu.fields.keys())[0]) self.period = StrictlyPositiveIntField( label='Period', v_model=round(self.discret['nt'].value / nb_split_period)) self.snapshot = v.Btn(children=['Snapshot']) self.plot = Plot() self.iplot = 0 self.plot_output = v.Row(justify='center') self.dialog = DialogPath() self.main = [ v.Row(children=[ self.startTooltip, Tooltip(self.pause, tooltip='click to pause the simulation'), self.dialog, ]), self.progress_bar, v.Row( children=[ v.Col(children=[self.result], md=5, sm=12), v.Col(children=[self.period], md=5, sm=12), v.Col(children=[self.snapshot], md=2, sm=12), ], align='center', justify='space-around', ), self.plot_output, ] ## ## Widget events ## self.start.on_event('click', self.start_simulation) self.pause.on_event('click', self.on_pause_click) self.snapshot.on_event('click', self.take_snapshot) self.result.observe(self.replot, 'v_model') self.simu_cfg.observe(self.load_simu_cfg, 'v_model') self.discret['nt'].observe(self.change_period_by_nt, 'v_model') test_case_widget.select_case.observe(self.stop_simulation, 'v_model') lb_scheme_widget.select_case.observe(self.stop_simulation, 'v_model') lb_scheme_widget.select_case.observe(self.update_result, 'v_model') test_case_widget.select_case.observe(self.update_name, 'v_model') lb_scheme_widget.select_case.observe(self.update_name, 'v_model')
def __init__(self, app_dir="."): self.app_dir = app_dir self.main_loading = v.ProgressLinear(indeterminate=False) self.main_toolbar = self.create_main_toolbar() self.heatmap_plot = v.Container()