Skip to content

Commit

Permalink
Move the grid settings into a dialog to set the number of views for t…
Browse files Browse the repository at this point in the history
…he response design window
  • Loading branch information
XavierCLL committed Dec 20, 2024
1 parent bb05b8a commit 5c63e2c
Show file tree
Hide file tree
Showing 6 changed files with 330 additions and 157 deletions.
10 changes: 8 additions & 2 deletions core/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@

from AcATaMa.core.response_design import ResponseDesign
from AcATaMa.gui.response_design_window import ResponseDesignWindow
from AcATaMa.gui.response_design_grid_settings import ResponseDesignGridSettings
from AcATaMa.utils.system_utils import wait_process, block_signals_to
from AcATaMa.utils.sampling_utils import fill_stratified_sampling_table
from AcATaMa.utils.qgis_utils import get_current_file_path_in, get_file_path_of_layer, load_and_select_filepath_in, \
Expand Down Expand Up @@ -217,6 +218,7 @@ def setup_path(_path):
# save sampling_layer style

data["dialog_size"] = response_design.dialog_size
data["response_design_grid_settings_first_open"] = ResponseDesignGridSettings.is_first_open
data["grid_view_widgets"] = {"columns": response_design.grid_columns, "rows": response_design.grid_rows}
data["current_sample_idx"] = response_design.current_sample_idx
data["sampling_unit_pixel_buffer"] = response_design.sampling_unit_pixel_buffer
Expand Down Expand Up @@ -582,8 +584,12 @@ def get_restore_path(_path):
# TODO:
# restore sampling_layer style

AcATaMa.dockwidget.grid_columns.setValue(yaml_config["grid_view_widgets"]["columns"])
AcATaMa.dockwidget.grid_rows.setValue(yaml_config["grid_view_widgets"]["rows"])
if "response_design_grid_settings_first_open" in yaml_config:
ResponseDesignGridSettings.is_first_open = yaml_config["response_design_grid_settings_first_open"]
else:
ResponseDesignGridSettings.is_first_open = False
AcATaMa.dockwidget.response_design_grid_settings.columns.setValue(yaml_config["grid_view_widgets"]["columns"])
AcATaMa.dockwidget.response_design_grid_settings.rows.setValue(yaml_config["grid_view_widgets"]["rows"])
response_design.dialog_size = yaml_config["dialog_size"]
response_design.grid_columns = yaml_config["grid_view_widgets"]["columns"]
response_design.grid_rows = yaml_config["grid_view_widgets"]["rows"]
Expand Down
45 changes: 20 additions & 25 deletions gui/acatama_dockwidget.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,12 @@
from AcATaMa.core.response_design import ResponseDesign
from AcATaMa.core.map import get_nodata_value
from AcATaMa.gui.response_design_window import ResponseDesignWindow
from AcATaMa.gui.response_design_grid_settings import ResponseDesignGridSettings
from AcATaMa.gui.sampling_design_window import SamplingDesignWindow
from AcATaMa.gui.sampling_report import SamplingReport
from AcATaMa.utils.others_utils import set_nodata_format
from AcATaMa.utils.qgis_utils import valid_file_selected_in, load_and_select_filepath_in, get_file_path_of_layer
from AcATaMa.utils.system_utils import error_handler, block_signals_to, output_file_is_OK
from AcATaMa.gui.sampling_report import SamplingReport
from AcATaMa.gui.about_dialog import AboutDialog

# plugin path
Expand Down Expand Up @@ -137,13 +138,12 @@ def setup_gui(self):
self.QPBtn_SaveAcatamaState.clicked.connect(self.file_dialog_save_acatama_state)
# save sampling + labeling
self.QPBtn_saveSamplingLabeled.clicked.connect(self.file_dialog_save_sampling_labeled)
# change grid config
self.grid_columns.valueChanged.connect(lambda: self.set_grid_setting("column"))
self.grid_rows.valueChanged.connect(lambda: self.set_grid_setting("row"))
# grid settings
self.response_design_grid_settings = ResponseDesignGridSettings()
self.QPBtn_GridSettings.clicked.connect(self.response_design_grid_settings.show)
# disable group box that depends on sampling file
self.QGBox_ResponseDesign.setDisabled(True)

# connect the action to the run method
# open response design window
self.QPBtn_OpenResponseDesignWindow.clicked.connect(self.open_response_design_window)

# ######### Analysis tab ######### #
Expand Down Expand Up @@ -282,22 +282,20 @@ def update_response_design_state(self, sampling_layer=None):
# grid settings
if sampling_layer in ResponseDesign.instances:
response_design = ResponseDesign.instances[sampling_layer]
with block_signals_to(self.QGBox_GridSettings):
self.grid_columns.setValue(response_design.grid_columns)
self.grid_rows.setValue(response_design.grid_rows)
self.response_design_grid_settings.columns.setValue(response_design.grid_columns)
self.response_design_grid_settings.rows.setValue(response_design.grid_rows)
else:
with block_signals_to(self.QGBox_GridSettings):
self.grid_columns.setValue(2)
self.grid_rows.setValue(1)
self.response_design_grid_settings.columns.setValue(2)
self.response_design_grid_settings.rows.setValue(1)
if not ResponseDesignWindow.is_opened:
# enable group box that depends on sampling file
self.QGBox_ResponseDesign.setEnabled(True)
else:
# return to default values
self.QPBar_LabelingStatus.setTextVisible(False)
self.QPBar_LabelingStatus.setValue(0)
self.grid_columns.setValue(2)
self.grid_rows.setValue(1)
self.response_design_grid_settings.columns.setValue(2)
self.response_design_grid_settings.rows.setValue(1)
# disable group box that depends on sampling file
self.QGBox_ResponseDesign.setDisabled(True)

Expand Down Expand Up @@ -326,15 +324,6 @@ def reload_sampling_file(self):
iface.messageBar().pushMessage("AcATaMa", "No sampling file selected",
level=Qgis.Warning, duration=10)

@pyqtSlot()
def set_grid_setting(self, item):
sampling_layer = self.QCBox_SamplingFile.currentLayer()
if sampling_layer in ResponseDesign.instances:
response_design = ResponseDesign.instances[sampling_layer]
if item == "column":
response_design.grid_columns = self.grid_columns.value()
if item == "row":
response_design.grid_rows = self.grid_rows.value()

@pyqtSlot()
@error_handler
Expand Down Expand Up @@ -465,8 +454,14 @@ def open_response_design_window(self):
level=Qgis.Warning, duration=10)
return

self.response_design_window = \
ResponseDesignWindow(sampling_layer, self.grid_columns.value(), self.grid_rows.value())
# only open the response_design_grid_settings dialog the first time
if ResponseDesignGridSettings.is_first_open:
if not self.response_design_grid_settings.exec_():
return

self.response_design_window = ResponseDesignWindow(sampling_layer,
self.response_design_grid_settings.columns.value(),
self.response_design_grid_settings.rows.value())
# open dialog
self.response_design_window.show()

Expand Down
67 changes: 67 additions & 0 deletions gui/response_design_grid_settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# -*- coding: utf-8 -*-
"""
/***************************************************************************
AcATaMa
A QGIS plugin
AcATaMa is a Qgis plugin for Accuracy Assessment of Thematic Maps
-------------------
copyright : (C) 2017-2024 by Xavier C. Llano, SMByC
email : [email protected]
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
"""
import os

from qgis.PyQt import uic
from qgis.PyQt.QtWidgets import QDialog
from qgis.PyQt.QtCore import pyqtSlot

from AcATaMa.core.response_design import ResponseDesign

# plugin path
plugin_folder = os.path.dirname(os.path.dirname(__file__))
FORM_CLASS, _ = uic.loadUiType(os.path.join(
plugin_folder, 'ui', 'response_design_grid_settings.ui'))


class ResponseDesignGridSettings(QDialog, FORM_CLASS):
is_first_open = True

def __init__(self, parent=None):
"""Constructor."""
super(ResponseDesignGridSettings, self).__init__(parent)
self.setupUi(self)


@pyqtSlot()
def on_buttonBox_accepted(self):
from AcATaMa.gui.acatama_dockwidget import AcATaMaDockWidget as AcATaMa
sampling_layer = AcATaMa.dockwidget.QCBox_SamplingFile.currentLayer()
if sampling_layer in ResponseDesign.instances:
response_design = ResponseDesign.instances[sampling_layer]
response_design.grid_columns = self.columns.value()
response_design.grid_rows = self.rows.value()

if ResponseDesignGridSettings.is_first_open:
ResponseDesignGridSettings.is_first_open = False

self.accept()

@pyqtSlot()
def on_buttonBox_rejected(self):
from AcATaMa.gui.acatama_dockwidget import AcATaMaDockWidget as AcATaMa
sampling_layer = AcATaMa.dockwidget.QCBox_SamplingFile.currentLayer()
if sampling_layer in ResponseDesign.instances:
response_design = ResponseDesign.instances[sampling_layer]
self.columns.setValue(response_design.grid_columns)
self.rows.setValue(response_design.grid_rows)

self.reject()
4 changes: 2 additions & 2 deletions gui/response_design_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ def show(self):
# adjust some objects in the dockwidget while response design window is opened
AcATaMa.dockwidget.QGBox_ThematicMap.setDisabled(True)
AcATaMa.dockwidget.QGBox_SamplingDesign.setDisabled(True)
AcATaMa.dockwidget.QGBox_GridSettings.setDisabled(True)
AcATaMa.dockwidget.QPBtn_GridSettings.setDisabled(True)
AcATaMa.dockwidget.QPBtn_saveSamplingLabeled.setDisabled(True)
AcATaMa.dockwidget.QPBtn_OpenResponseDesignWindow.setText("Response design is opened, click to show")

Expand Down Expand Up @@ -647,7 +647,7 @@ def closing(self):
AcATaMa.dockwidget.QGBox_ThematicMap.setEnabled(True)
if not AccuracyAssessmentWindow.is_opened:
AcATaMa.dockwidget.QGBox_SamplingDesign.setEnabled(True)
AcATaMa.dockwidget.QGBox_GridSettings.setEnabled(True)
AcATaMa.dockwidget.QPBtn_GridSettings.setEnabled(True)
AcATaMa.dockwidget.QPBtn_saveSamplingLabeled.setEnabled(True)
AcATaMa.dockwidget.QPBtn_OpenResponseDesignWindow.setText("Response design window")
self.reject(is_ok_to_close=True)
Expand Down
Loading

0 comments on commit 5c63e2c

Please sign in to comment.