def __init__(self, iface: QgisInterface) -> None: super().__init__() self.iface = iface self.options = get_options() self.general_tab = GeneralWidget() self.general_tab.open_project.connect(self.on_open_project) self.general_tab.create_project.connect(self.on_create_project) self.general_tab.close_project.connect(self.on_close_project) self.domain_tab = DomainWidget(iface) self.datasets_tab = DatasetsWidget(iface) self.run_tab = RunWidget(iface) self.domain_tab.go_to_data_tab.connect(self.open_data_tab) self.datasets_tab.go_to_run_tab.connect(self.open_run_tab) self.run_tab.view_wrf_nc_file.connect(self.view_wrf_nc_file) self.addTab(WhiteScroll(self.general_tab), 'General') self.addTab(WhiteScroll(self.domain_tab), 'Domain') self.addTab(WhiteScroll(self.datasets_tab), 'Data') self.addTab(WhiteScroll(self.run_tab), 'Run') self.tabs = [self.general_tab, self.domain_tab, self.datasets_tab, self.run_tab] self.disable_project_dependent_tabs() self.project = Project.create() self.set_project_in_tabs() self.currentChanged.connect(self.on_tab_changed) Broadcast.options_updated.connect(self.update_project) Broadcast.open_project_from_object.connect(self.open_project_from_object)
def __init__(self, iface) -> None: super().__init__() self.options = get_options() self.msg_bar = MessageBar(iface) self.tree_widget = QTreeWidget() self.populate_tree() self.select_mandatory_hires_button = QPushButton( 'Select Mandatory Fields in Highest Resolution') self.select_mandatory_hires_button.clicked.connect( self.on_select_mandatory_hires_button_clicked) self.select_mandatory_lores_button = QPushButton( 'Select Mandatory Fields in Lowest Resolution') self.select_mandatory_lores_button.clicked.connect( self.on_select_mandatory_lores_button_clicked) self.download_button = QPushButton('Download Selected Datasets') self.download_button.clicked.connect(self.on_download_button_clicked) self.progress_bar = QProgressBar() self.progress_bar.setRange(0, PROGRESS_BAR_MAX) self.progress_bar.setTextVisible(False) self.progress_bar.hide() vbox = QVBoxLayout() vbox.addWidget(self.tree_widget) vbox.addWidget(self.select_mandatory_hires_button) vbox.addWidget(self.select_mandatory_lores_button) vbox.addWidget(self.download_button) vbox.addWidget(self.progress_bar) self.setLayout(vbox)
def __init__(self, iface: QgisInterface) -> None: super().__init__() self.iface = iface self.options = get_options() self.msg_bar = MessageBar(iface) self.wps_box, [open_namelist_wps, prepare_only_wps, run_geogrid, run_ungrib, run_metgrid, open_output_wps] = \ self.create_gbox_with_btns('WPS', [ 'Open Configuration', 'Prepare only', ['Run Geogrid', 'Run Ungrib', 'Run Metgrid'], 'Visualize Output' ]) self.wrf_box, [open_namelist_wrf, prepare_only_wrf, run_real, run_wrf, open_output_wrf] = \ self.create_gbox_with_btns('WRF', [ 'Open Configuration', 'Prepare only', ['Run Real', 'Run WRF'], 'Visualize Output' ]) self.control_box, [kill_program] = self.create_gbox_with_btns( 'Program control', ['Kill Program']) self.control_box.setVisible(False) self.stdout_box, self.stdout_textarea, self.stdout_highlighter = \ self.create_stdout_box() vbox = QVBoxLayout() vbox.addWidget(self.wps_box) vbox.addWidget(self.wrf_box) vbox.addWidget(self.control_box) vbox.addWidget(self.stdout_box) self.stdout_box.setSizePolicy( QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) self.setLayout(vbox) open_namelist_wps.clicked.connect(self.on_open_namelist_wps_clicked) prepare_only_wps.clicked.connect(self.on_prepare_only_wps_clicked) run_geogrid.clicked.connect(self.on_run_geogrid_clicked) run_ungrib.clicked.connect(self.on_run_ungrib_clicked) run_metgrid.clicked.connect(self.on_run_metgrid_clicked) open_output_wps.clicked.connect(self.on_open_output_wps_clicked) open_namelist_wrf.clicked.connect(self.on_open_namelist_wrf_clicked) prepare_only_wrf.clicked.connect(self.on_prepare_only_wrf_clicked) run_real.clicked.connect(self.on_run_real_clicked) run_wrf.clicked.connect(self.on_run_wrf_clicked) open_output_wrf.clicked.connect(self.on_open_output_wrf_clicked) kill_program.clicked.connect(self.on_kill_program_clicked)
def __init__(self) -> None: super().__init__() self.options = get_options() btn_new = QPushButton("Create GIS4WRF Project", clicked=self.on_create_project_button_clicked) btn_existing = QPushButton("Open GIS4WRF Project", clicked=self.on_open_project_button_clicked) self.current_project_label = QLabel() vbox = QVBoxLayout() title = """ <html> <h1>GIS4WRF simulation tools</h1> <br> </html> """ text = """ <html> <br> <p>The <em>Simulation</em> tab contains tools to help you prepare your simulations.</p> <p>Here, you will find four subtabs: <em>General</em>, <em>Domain</em>, <em>Data</em>, and <em>Run</em>. In the <em>General </em>subtab you can create or open GIS4WRF projects. The <em>Domain</em>, <em>Data </em>and <em>Run </em>subtabs contain tools to help you with the steps to define and run a WRF simulation such as defining datasets to use in your simulation, configure namelists and run WPS and WRF programs.</p> <p>More details on how to use these tools and examples can be found online at <a title="GIS4WRF Website -- Documentation and Tutorials" href="https://gis4wrf.github.io" target="_blank" rel="noopener">https://gis4wrf.github.io</a>.</p> </html> """ label_title = QLabel(title) label_text = QLabel(text) label_text.setWordWrap(True) label_text.setOpenExternalLinks(True) label_pixmap = QLabel() pixmap = QPixmap(GIS4WRF_LOGO_PATH) label_pixmap.setPixmap(pixmap) label_pixmap.setAlignment(Qt.AlignCenter) vbox.addWidget(label_title) vbox.addWidget(label_pixmap) vbox.addWidget(label_text) vbox.addStretch() vbox.addWidget(btn_new) vbox.addWidget(btn_existing) vbox.addWidget(self.current_project_label) self.setLayout(vbox)
def __init__(self) -> None: super().__init__() self.options = get_options() btn_new = QPushButton("Create GIS4WRF Project", clicked=self.on_create_project_button_clicked) btn_existing = QPushButton("Open GIS4WRF Project", clicked=self.on_open_project_button_clicked) self.current_project_label = QLabel() vbox = QVBoxLayout() page = Path('tab_simulation_general', 'index.html') vbox.addLayout(create_browser_layout(page)) vbox.addWidget(btn_new) vbox.addWidget(btn_existing) vbox.addWidget(self.current_project_label) self.setLayout(vbox)
def initGui(self) -> None: """Create the menu entries and toolbar icons inside the QGIS GUI. Note: This method is called by QGIS. """ self.init_logging() install_user_error_handler(self.iface) self.menu = '&' + PLUGIN_NAME self.add_action(GIS4WRF_LOGO_PATH, text=PLUGIN_NAME, callback=self.show_dock, add_to_toolbar=True, parent=self.iface.mainWindow(), status_tip='Run GIS4WRF') self.add_action(ADD_WRF_NETCDF_LAYER_ICON_PATH, text='Add WRF NetCDF Layer...', add_to_add_layer=True, add_to_menu=False, parent=self.iface.mainWindow(), callback=self.add_wrf_layer) self.add_action(ADD_BINARY_LAYER_ICON_PATH, text='Add WPS Binary Layer...', add_to_add_layer=True, add_to_menu=False, parent=self.iface.mainWindow(), callback=self.add_wps_binary_layer) self.add_action(ABOUT_ICON_PATH, text="About", callback=self.show_about, parent=self.iface.mainWindow()) self.add_action(BUG_ICON_PATH, text='Report a bug', callback=self.report_bug, parent=self.iface.mainWindow(), status_tip='Report a bug') self.options_factory = OptionsFactory() self.iface.registerOptionsWidgetFactory(self.options_factory) self.options = get_options() self.check_versions()
def __init__(self, parent): super().__init__(parent) self.options = get_options() self.vbox = QVBoxLayout() self.setLayout(self.vbox) self.working_dir, layout = create_file_input( is_folder=True, input_label='Working directory', value=self.options.working_dir, start_folder=self.options.working_dir) self.vbox.addLayout(layout) self.mpi_enabled, self.mpi_processes, self.wps_dir, self.wrf_dir, gbox = \ self.create_distribution_box() self.vbox.addWidget(gbox) self.rda_username, self.rda_password, gbox = self.create_rda_auth_input() self.vbox.addWidget(gbox) self.vbox.addStretch()
def __init__(self, iface: QgisInterface) -> None: super().__init__() self.iface = iface self.options = get_options() self.tab_active.connect(self.on_tab_active) self.create_geographical_data_box() self.create_meteorological_data_box() go_to_run_tab_btn = QPushButton('Continue to Run') go_to_run_tab_btn.clicked.connect(self.go_to_run_tab) vbox = QVBoxLayout() vbox.addWidget(self.gbox_geodata) vbox.addWidget(self.gbox_metdata) vbox.addWidget(go_to_run_tab_btn) self.setLayout(vbox) Broadcast.geo_datasets_updated.connect(self.populate_geog_data_tree) Broadcast.met_datasets_updated.connect(self.populate_met_data_tree) Broadcast.project_updated.connect(self.populate_geog_data_tree)
def __init__(self, iface) -> None: super().__init__() self.iface = iface self.options = get_options() self.msg_bar = MessageBar(iface) vbox = QVBoxLayout() self.setLayout(vbox) hbox = QHBoxLayout() vbox.addLayout(hbox) hbox.addWidget(QLabel('Dataset: ')) self.cbox_dataset = QComboBox() self.cbox_dataset.addItem('-') for index, (dataset_name, dataset_label) in enumerate(met_datasets.items()): self.cbox_dataset.addItem(dataset_name, dataset_name) self.cbox_dataset.setItemData(index + 1, dataset_label, Qt.ToolTipRole) self.cbox_dataset.currentIndexChanged.connect(self.on_dataset_changed) hbox.addWidget(self.cbox_dataset) hbox_product_name = QHBoxLayout() vbox.addLayout(hbox_product_name) hbox_product_name.addWidget(QLabel('Product: ')) self.cbox_product = QComboBox() self.cbox_product.currentIndexChanged.connect(self.on_product_changed) hbox_product_name.addWidget(self.cbox_product) hbox_start_datetime = QHBoxLayout() vbox.addLayout(hbox_start_datetime) self.dedit_start_date = QDateTimeEdit() self.dedit_start_date.setCalendarPopup(True) hbox_start_datetime.addWidget(QLabel('Start: ')) hbox_start_datetime.addWidget(self.dedit_start_date) hbox_end_datetime = QHBoxLayout() vbox.addLayout(hbox_end_datetime) self.dedit_end_date = QDateTimeEdit() self.dedit_end_date.setCalendarPopup(True) hbox_end_datetime.addWidget(QLabel('End: ')) hbox_end_datetime.addWidget(self.dedit_end_date) gbox_extent = QGroupBox('Extent') vbox.addWidget(gbox_extent) vbox_extent = QVBoxLayout() gbox_extent.setLayout(vbox_extent) hbox_extent = QHBoxLayout() vbox_extent.addLayout(hbox_extent) self.radio_global = QRadioButton('Global') self.radio_global.toggled.connect(self.on_extent_radio_button_clicked) hbox_extent.addWidget(self.radio_global) self.radio_subset = QRadioButton('Subset') self.radio_subset.toggled.connect(self.on_extent_radio_button_clicked) hbox_extent.addWidget(self.radio_subset) self.widget_extent = QWidget() vbox_extent.addWidget(self.widget_extent) grid_extent = QGridLayout() self.widget_extent.setLayout(grid_extent) self.widget_extent.hide() self.top = add_grid_lineedit(grid_extent, 0, 'North Latitude', LAT_VALIDATOR, '°', required=True) self.right = add_grid_lineedit(grid_extent, 1, 'East Longitude', LON_VALIDATOR, '°', required=True) self.left = add_grid_lineedit(grid_extent, 2, 'West Longitude', LON_VALIDATOR, '°', required=True) self.bottom = add_grid_lineedit(grid_extent, 3, 'South Latitude', LAT_VALIDATOR, '°', required=True) self.extent_from_active_layer = QPushButton('Set from Active Layer') grid_extent.addWidget(self.extent_from_active_layer, 4, 1) self.extent_from_active_layer.clicked.connect( self.on_extent_from_active_layer_button_clicked) self.radio_global.setChecked(True) self.tree = QListWidget() vbox_tree = QVBoxLayout() vbox.addLayout(vbox_tree) vbox_tree.addWidget(self.tree) self.btn_download = QPushButton('Download') self.btn_download.clicked.connect(self.on_download_button_clicked) vbox.addWidget(self.btn_download) self.progress_bar = QProgressBar() self.progress_bar.setRange(0, PROGRESS_BAR_MAX) self.progress_bar.setTextVisible(False) self.progress_bar.hide() vbox.addWidget(self.progress_bar)