def setup_page(self, metadata): """Setup page (GUI components) from already existing metadata. Args: metadata (Dict[str, Any]): metadata object """ dialog = self.dialog title = metadata.get('title') if title: dialog.project_title.setText(title) message = metadata.get('message') if message: dialog.message_text.insertPlainText(message.get('text', '')) valid_until = message.get('valid_until') dialog.message_valid_until.setDate( datetime.datetime.strptime(valid_until, "%d.%m.%Y") ) expiration = metadata.get('expiration') if expiration: dialog.enable_expiration.setChecked(True) dialog.expiration.setDate( datetime.datetime.strptime(expiration, "%d.%m.%Y") ) authentication = metadata.get('authentication') if authentication: try: auth_index = AUTHENTICATION_OPTIONS.index(authentication) except ValueError: auth_index = 1 dialog.authentication.setCurrentIndex(auth_index) project_extent = list(metadata['extent']) extent_buffer = metadata.get('extent_buffer', 0) if extent_buffer != 0: project_extent = [ project_extent[0]+extent_buffer, project_extent[1]+extent_buffer, project_extent[2]-extent_buffer, project_extent[3]-extent_buffer ] extent_index = dialog.extent_layer.findData(project_extent) if extent_index < 0: extent_index = 0 dialog.extent_layer.setCurrentIndex(extent_index) dialog.use_mapcache.setChecked(metadata.get('use_mapcache') is True) dialog.extent_buffer.setValue(extent_buffer) # create list of all layers from layers metadata tree structure def extract_layers(layers_data, layers=None): if layers is None: layers = [] for layer_data in layers_data: if 'layers' in layer_data: extract_layers(layer_data['layers'], layers) else: layers.append(layer_data) return layers if metadata.get('base_layers'): for base_layer in extract_layers(metadata['base_layers']): if base_layer['type'] == 'blank': dialog.blank.setChecked(True) elif base_layer['type'] == 'osm': dialog.osm.setChecked(True) elif base_layer['type'] == 'mapbox': dialog.mapbox.setChecked(True) if 'mapid' in base_layer: index = dialog.mapbox_mapid.findText(base_layer['mapid']) if index >= 0: dialog.mapbox_mapid.setCurrentIndex(index) if 'apikey' in base_layer: dialog.mapbox_apikey.setText(base_layer['apikey']) elif base_layer['type'] == 'bing': dialog.bing.setChecked(True) for index, glayer in enumerate(BING_LAYERS): if glayer['name'] == base_layer['name']: dialog.bing_style.setCurrentIndex(index) break if 'apikey' in base_layer: dialog.bing_apikey.setText(base_layer['apikey']) else: # at least one base layer must be enabled (default is Blank) dialog.blank.setChecked(True) if base_layer['visible']: dialog.default_baselayer.setCurrentIndex( dialog.default_baselayer.findText(base_layer['name']) ) else: # at least one base layer must be enabled (default is Blank) dialog.blank.setChecked(True) overlays_data = extract_layers(metadata['overlays']) project_overlays = [layer_data['name'] for layer_data in overlays_data] hidden_overlays = [ layer_data['name'] for layer_data in overlays_data if layer_data.get('hidden') ] # Recursively setup layer widgets from prevoius info about layers types def load_layers_settings(group_item): for index in range(group_item.rowCount()): child_item = group_item.child(index) if child_item.data(Qt.UserRole): layer_name = child_item.text() child_item.setCheckState( Qt.Checked if layer_name in project_overlays else Qt.Unchecked ) if layer_name in hidden_overlays: layers_model = child_item.model() layers_model.columnItem(child_item, 1).setCheckState(Qt.Checked) else: load_layers_settings(child_item) load_layers_settings(dialog.treeView.model().invisibleRootItem()) max_res = metadata['tile_resolutions'][0] min_res = metadata['tile_resolutions'][-1] min_scale, max_scale = self.plugin.resolutions_to_scales( to_decimal_array([min_res, max_res]) ) min_scale_index = dialog.min_scale.findText("1:{0}".format(min_scale)) max_scale_index = dialog.max_scale.findText("1:{0}".format(max_scale)) dialog.min_scale.setCurrentIndex( min_scale_index if min_scale_index != -1 else dialog.min_scale.count() - 1 ) dialog.max_scale.setCurrentIndex( max_scale_index if min_scale_index != -1 else 0 )
1000000, 500000, 250000, 100000, 50000, 25000, 10000, 5000, 2500, 1000, 500 ) layer_resolutions = to_decimal_array( """156543.03390625,78271.516953125,39135.7584765625,19567.87923828125,9783.939619140625, 4891.9698095703125,2445.9849047851562,1222.9924523925781,611.4962261962891,305.74811309814453, 152.87405654907226,76.43702827453613,38.218514137268066,19.109257068634033,9.554628534317017, 4.777314267158508,2.388657133579254,1.194328566789627,0.5971642833948135""" ) layer_extent = [-16319611.284727, -5615981.3413867, 16319611.284727, 5615981.3413867] BLANK_LAYER = { 'name': 'Blank', 'type': 'blank', 'metadata': { 'abstract': 'Blank base map layer.', 'keyword_list': 'blank, world map' } } OSM_LAYER = { 'name': 'OpenStreetMap', 'type': 'osm', 'resolutions': layer_resolutions,
def setup_config_page_from_metadata(self, metadata): dialog = self.dialog title = metadata.get('title') if title: dialog.project_title.setText(title) message = metadata.get('message') if message: dialog.message_text.insertPlainText(message.get('text', '')) valid_until = message.get('valid_until') dialog.message_valid_until.setDate(datetime.datetime.strptime(valid_until, "%d.%m.%Y")) expiration = metadata.get('expiration') if expiration: dialog.enable_expiration.setChecked(True) dialog.expiration.setDate(datetime.datetime.strptime(expiration, "%d.%m.%Y")) authentication = metadata.get('authentication') if authentication: # backward compatibility if type(authentication) is dict: if authentication.get('allow_anonymous') and not authentication.get('require_superuser'): dialog.authentication.setCurrentIndex(0) if not authentication.get('allow_anonymous'): dialog.authentication.setCurrentIndex(1) else: auth_index = AUTHENTICATION_OPTIONS.index(authentication) if authentication in AUTHENTICATION_OPTIONS else 1 dialog.authentication.setCurrentIndex(auth_index) project_extent = list(metadata['extent']) extent_buffer = metadata.get('extent_buffer', 0) if extent_buffer != 0: project_extent = [ project_extent[0]+extent_buffer, project_extent[1]+extent_buffer, project_extent[2]-extent_buffer, project_extent[3]-extent_buffer ] extent_index = dialog.extent_layer.findData(project_extent) if extent_index < 0: extent_index = 0 dialog.extent_layer.setCurrentIndex(extent_index) dialog.use_mapcache.setChecked(metadata.get('use_mapcache') is True) dialog.extent_buffer.setValue(extent_buffer) # create list of all layers from layers metadata tree structure def extract_layers(layers_data, layers=None): if layers is None: layers = [] for layer_data in layers_data: if 'layers' in layer_data: extract_layers(layer_data['layers'], layers) else: layers.append(layer_data) return layers if metadata.get('base_layers'): for base_layer in extract_layers(metadata['base_layers']): if base_layer['type'] == 'BLANK': dialog.blank.setChecked(True) elif base_layer['type'] == 'OSM': dialog.osm.setChecked(True) elif base_layer['type'] == 'google': for index, glayer in enumerate(GOOGLE_LAYERS, 1): if glayer['name'] == base_layer['name']: dialog.google.setCurrentIndex(index); break if base_layer['visible']: dialog.default_baselayer.setCurrentIndex(dialog.default_baselayer.findData(base_layer['name'])) overlays_data = extract_layers(metadata['overlays']) geojson_overlays = metadata.get('vector_layers', {}).get('layers', {}).keys() project_overlays = [layer_data['name'] for layer_data in overlays_data] project_overlays.extend(geojson_overlays) hidden_overlays = [layer_data['name'] for layer_data in overlays_data if layer_data.get('hidden')] overlays_with_export_to_drawings = [layer_data['name'] for layer_data in overlays_data if layer_data.get('export_to_drawings')] def load_layers_settings(group_item): for index in range(group_item.rowCount()): child_item = group_item.child(index) if child_item.data(Qt.UserRole): layer_name = child_item.text() child_item.setCheckState(Qt.Checked if layer_name in project_overlays else Qt.Unchecked) layers_model = child_item.model() vector_item = layers_model.columnItem(child_item, 1) export_item = layers_model.columnItem(child_item, 2) if vector_item.isCheckable(): vector_item.setCheckState(Qt.Checked if layer_name in geojson_overlays else Qt.Unchecked) if export_item.isCheckable(): export_item.setCheckState(Qt.Checked if layer_name in overlays_with_export_to_drawings else Qt.Unchecked) layers_model.columnItem(child_item, 3).setCheckState(Qt.Checked if layer_name in hidden_overlays else Qt.Unchecked) else: load_layers_settings(child_item) load_layers_settings(dialog.treeView.model().invisibleRootItem()) max_res = metadata['tile_resolutions'][0] min_res = metadata['tile_resolutions'][-1] min_scale, max_scale = self.plugin.resolutions_to_scales(to_decimal_array([min_res, max_res])) min_scale_index = dialog.min_scale.findText("1:{0}".format(min_scale)) max_scale_index = dialog.max_scale.findText("1:{0}".format(max_scale)) dialog.min_scale.setCurrentIndex(min_scale_index if min_scale_index != -1 else dialog.min_scale.count()-1) dialog.max_scale.setCurrentIndex(max_scale_index if min_scale_index != -1 else 0)