Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
    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()
Beispiel #7
0
    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()
Beispiel #8
0
    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)
Beispiel #9
0
    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)