def __init__(self, parent=None): """Constructor.""" super(SettingsDialog, self).__init__(parent) self.setupUi(self) self.tabUserServices.setCurrentIndex(0) # init form self.fill_pages() # init services visibility tab self.dsManagerViewModel = DSManagerModel() self.treeViewForDS.setModel(self.dsManagerViewModel) self.treeViewForDS.header().setResizeMode( DSManagerModel.COLUMN_GROUP_DS, QtGui.QHeaderView.Stretch) showAllAction = self.toolBarForDSTreeView.addAction( QtGui.QIcon(":/images/themes/default/mActionShowAllLayers.png"), self.tr("Show all")) showAllAction.triggered.connect(self.dsManagerViewModel.checkAll) hideAllAction = self.toolBarForDSTreeView.addAction( QtGui.QIcon(":images/themes/default/mActionHideAllLayers.png"), self.tr("Hide all")) hideAllAction.triggered.connect(self.dsManagerViewModel.uncheckAll) self.dsManagerViewModel.sort(DSManagerModel.COLUMN_GROUP_DS) # signals self.btnGetContribPack.clicked.connect(self.get_contrib) self.accepted.connect(self.save_settings)
def __init__(self, parent=None): """Constructor.""" super(SettingsDialog, self).__init__(parent) self.setupUi(self) self.tabUserServices.setCurrentIndex(0) # init form self.fill_pages() # init services visibility tab self.dsManagerViewModel = DSManagerModel() self.treeViewForDS.setModel(self.dsManagerViewModel) self.treeViewForDS.header().setResizeMode(DSManagerModel.COLUMN_GROUP_DS, QtGui.QHeaderView.Stretch) showAllAction = self.toolBarForDSTreeView.addAction( QtGui.QIcon(":/images/themes/default/mActionShowAllLayers.png"), self.tr("Show all") ) showAllAction.triggered.connect(self.dsManagerViewModel.checkAll) hideAllAction = self.toolBarForDSTreeView.addAction( QtGui.QIcon(":images/themes/default/mActionHideAllLayers.png"), self.tr("Hide all") ) hideAllAction.triggered.connect(self.dsManagerViewModel.uncheckAll) self.dsManagerViewModel.sort(DSManagerModel.COLUMN_GROUP_DS) # signals self.btnGetContribPack.clicked.connect(self.get_contrib) self.accepted.connect(self.save_settings)
def __init__(self, parent=None): """Constructor.""" super(UserGroupsBox, self).__init__(parent) self.setupUi(self) self.feel_list() self.lstGroups.currentItemChanged.connect(self.on_sel_changed) self.lstGroups.itemDoubleClicked.connect(self.on_edit) self.btnEdit.clicked.connect(self.on_edit) self.btnAdd.clicked.connect(self.on_add) self.btnDelete.clicked.connect(self.on_delete) self.btnCopy.clicked.connect(self.on_copy) self.btnAdd.setIcon(QIcon(plugin_dir + '/icons/plus.svg')) self.btnEdit.setIcon(QIcon(plugin_dir + '/icons/compose.svg')) self.btnDelete.setIcon(QIcon(plugin_dir + '/icons/trash.svg')) self.btnCopy.setIcon(QIcon(plugin_dir + '/icons/copy.svg')) self.ds_model = DSManagerModel()
def __init__(self, parent=None): """Constructor.""" super(UserServicesBox, self).__init__(parent) self.setupUi(self) self.feel_list() self.lstServices.currentItemChanged.connect(self.on_sel_changed) self.lstServices.itemDoubleClicked.connect(self.on_edit) self.btnEdit.clicked.connect(self.on_edit) self.btnAdd.clicked.connect(self.on_add) self.btnDelete.clicked.connect(self.on_delete) self.btnCopy.clicked.connect(self.on_copy) self.btnAdd.setIcon(QIcon(":/plugins/QuickMapServices/icons/plus.svg")) self.btnEdit.setIcon(QIcon(":/plugins/QuickMapServices/icons/compose.svg")) self.btnDelete.setIcon(QIcon(":/plugins/QuickMapServices/icons/trash.svg")) self.btnCopy.setIcon(QIcon(":/plugins/QuickMapServices/icons/copy.svg")) self.ds_model = DSManagerModel()
class SettingsDialog(QtGui.QDialog, FORM_CLASS): def __init__(self, parent=None): """Constructor.""" super(SettingsDialog, self).__init__(parent) self.setupUi(self) self.tabUserServices.setCurrentIndex(0) # init form self.fill_pages() # init services visibility tab self.dsManagerViewModel = DSManagerModel() self.treeViewForDS.setModel(self.dsManagerViewModel) self.treeViewForDS.header().setResizeMode(DSManagerModel.COLUMN_GROUP_DS, QtGui.QHeaderView.Stretch) showAllAction = self.toolBarForDSTreeView.addAction( QtGui.QIcon(":/images/themes/default/mActionShowAllLayers.png"), self.tr("Show all") ) showAllAction.triggered.connect(self.dsManagerViewModel.checkAll) hideAllAction = self.toolBarForDSTreeView.addAction( QtGui.QIcon(":images/themes/default/mActionHideAllLayers.png"), self.tr("Hide all") ) hideAllAction.triggered.connect(self.dsManagerViewModel.uncheckAll) self.dsManagerViewModel.sort(DSManagerModel.COLUMN_GROUP_DS) # signals self.btnGetContribPack.clicked.connect(self.get_contrib) self.accepted.connect(self.save_settings) def fill_pages(self): # common self.chkMoveToLayersMenu.setChecked(PluginSettings.move_to_layers_menu()) self.chkEnableOTF3857.setChecked(PluginSettings.enable_otf_3857()) self.chkShowMessagesInBar.setChecked(PluginSettings.show_messages_in_bar()) # tiled layers self.spnConnCount.setValue(PluginSettings.default_tile_layer_conn_count()) self.spnCacheExp.setValue(QGISSettings.get_default_tile_expiry()) self.spnNetworkTimeout.setValue(QGISSettings.get_default_network_timeout()) # contrib pack def save_settings(self): # common PluginSettings.set_move_to_layers_menu(self.chkMoveToLayersMenu.isChecked()) PluginSettings.set_enable_otf_3857(self.chkEnableOTF3857.isChecked()) PluginSettings.set_show_messages_in_bar(self.chkShowMessagesInBar.isChecked()) # tiled layers PluginSettings.set_default_tile_layer_conn_count(self.spnConnCount.value()) QGISSettings.set_default_tile_expiry(self.spnCacheExp.value()) QGISSettings.set_default_network_timeout(self.spnNetworkTimeout.value()) # contrib pack # ds visibility self.dsManagerViewModel.saveSettings() def apply_settings(self): pass def get_contrib(self): QgsApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) try: ExtraSources().load_contrib_pack() QgsApplication.restoreOverrideCursor() info_message = self.tr('Last version of contrib pack was downloaded!') QMessageBox.information(self, PluginSettings.product_name(), info_message) self.dsManagerViewModel.resetModel() except: QgsApplication.restoreOverrideCursor() error_message = self.tr('Error on getting contrib pack: %s %s') % (sys.exc_type, sys.exc_value) QMessageBox.critical(self, PluginSettings.product_name(), error_message)
class UserGroupsBox(QGroupBox, FORM_CLASS): def __init__(self, parent=None): """Constructor.""" super(UserGroupsBox, self).__init__(parent) self.setupUi(self) self.feel_list() self.lstGroups.currentItemChanged.connect(self.on_sel_changed) self.lstGroups.itemDoubleClicked.connect(self.on_edit) self.btnEdit.clicked.connect(self.on_edit) self.btnAdd.clicked.connect(self.on_add) self.btnDelete.clicked.connect(self.on_delete) self.btnCopy.clicked.connect(self.on_copy) self.btnAdd.setIcon(QIcon(plugin_dir + '/icons/plus.svg')) self.btnEdit.setIcon(QIcon(plugin_dir + '/icons/compose.svg')) self.btnDelete.setIcon(QIcon(plugin_dir + '/icons/trash.svg')) self.btnCopy.setIcon(QIcon(plugin_dir + '/icons/copy.svg')) self.ds_model = DSManagerModel() def feel_list(self): self.lstGroups.clear() ds_groups = GroupsList(USER_GROUP_PATHS) for ds_group in ds_groups.groups.itervalues(): item = QListWidgetItem(QIcon(ds_group.icon), self.tr(ds_group.alias)) item.setData(Qt.UserRole, ds_group) self.lstGroups.addItem(item) def on_sel_changed(self, curr, prev): has_sel = curr is not None self.btnEdit.setEnabled(has_sel) self.btnDelete.setEnabled(has_sel) def on_add(self): edit_dialog = GroupEditDialog() edit_dialog.setWindowTitle(self.tr('Create group')) if edit_dialog.exec_() == QDialog.Accepted: self.feel_list() self.ds_model.resetModel() def on_edit(self): item = self.lstGroups.currentItem().data(Qt.UserRole) edit_dialog = GroupEditDialog() edit_dialog.setWindowTitle(self.tr('Edit group')) edit_dialog.set_group_info(item) if edit_dialog.exec_() == QDialog.Accepted: self.feel_list() self.ds_model.resetModel() def on_delete(self): res = QMessageBox.question(None, self.tr('Delete group'), self.tr('Delete selected group?'), QMessageBox.Yes, QMessageBox.No) if res == QMessageBox.Yes: group_info = self.lstGroups.currentItem().data(Qt.UserRole) dir_path = os.path.abspath( os.path.join(group_info.file_path, os.path.pardir)) shutil.rmtree(dir_path, True) self.feel_list() self.ds_model.resetModel() def on_copy(self): select_group_dialog = QDialog(self) select_group_dialog.resize(300, 400) select_group_dialog.setWindowTitle(self.tr("Choose source group")) layout = QVBoxLayout(select_group_dialog) select_group_dialog.setLayout(layout) groups_list_view = QTableView(self) layout.addWidget(groups_list_view) groups_list_view.setModel(self.ds_model) groups_list_view.setColumnHidden(DSManagerModel.COLUMN_VISIBILITY, True) groups_list_view.horizontalHeader().setResizeMode( DSManagerModel.COLUMN_GROUP_DS, QHeaderView.Stretch) groups_list_view.setSelectionMode(QTableView.NoSelection) groups_list_view.setAlternatingRowColors(True) groups_list_view.setShowGrid(False) groups_list_view.verticalHeader().setResizeMode( QHeaderView.ResizeToContents) groups_list_view.verticalHeader().hide() groups_list_view.clicked.connect( lambda index: select_group_dialog.accept() \ if self.ds_model.isGroup(index) and \ index.column() == DSManagerModel.COLUMN_GROUP_DS \ else None ) if select_group_dialog.exec_() == QDialog.Accepted: group_info = self.ds_model.data(groups_list_view.currentIndex(), Qt.UserRole) group_info.id += "_copy" edit_dialog = GroupEditDialog() edit_dialog.setWindowTitle(self.tr('Create group from existing')) edit_dialog.fill_group_info(group_info) if edit_dialog.exec_() == QDialog.Accepted: self.feel_list() self.ds_model.resetModel()
class SettingsDialog(QtGui.QDialog, FORM_CLASS): def __init__(self, parent=None): """Constructor.""" super(SettingsDialog, self).__init__(parent) self.setupUi(self) self.tabUserServices.setCurrentIndex(0) # init form self.fill_pages() # init services visibility tab self.dsManagerViewModel = DSManagerModel() self.treeViewForDS.setModel(self.dsManagerViewModel) self.treeViewForDS.header().setResizeMode( DSManagerModel.COLUMN_GROUP_DS, QtGui.QHeaderView.Stretch) showAllAction = self.toolBarForDSTreeView.addAction( QtGui.QIcon(":/images/themes/default/mActionShowAllLayers.png"), self.tr("Show all")) showAllAction.triggered.connect(self.dsManagerViewModel.checkAll) hideAllAction = self.toolBarForDSTreeView.addAction( QtGui.QIcon(":images/themes/default/mActionHideAllLayers.png"), self.tr("Hide all")) hideAllAction.triggered.connect(self.dsManagerViewModel.uncheckAll) self.dsManagerViewModel.sort(DSManagerModel.COLUMN_GROUP_DS) # signals self.btnGetContribPack.clicked.connect(self.get_contrib) self.accepted.connect(self.save_settings) def fill_pages(self): # common self.chkMoveToLayersMenu.setChecked( PluginSettings.move_to_layers_menu()) self.chkEnableOTF3857.setChecked(PluginSettings.enable_otf_3857()) self.chkShowMessagesInBar.setChecked( PluginSettings.show_messages_in_bar()) # tiled layers self.spnConnCount.setValue( PluginSettings.default_tile_layer_conn_count()) self.spnCacheExp.setValue(QGISSettings.get_default_tile_expiry()) self.spnNetworkTimeout.setValue( QGISSettings.get_default_network_timeout()) # contrib pack def save_settings(self): # common PluginSettings.set_move_to_layers_menu( self.chkMoveToLayersMenu.isChecked()) PluginSettings.set_enable_otf_3857(self.chkEnableOTF3857.isChecked()) PluginSettings.set_show_messages_in_bar( self.chkShowMessagesInBar.isChecked()) # tiled layers PluginSettings.set_default_tile_layer_conn_count( self.spnConnCount.value()) QGISSettings.set_default_tile_expiry(self.spnCacheExp.value()) QGISSettings.set_default_network_timeout( self.spnNetworkTimeout.value()) # contrib pack # ds visibility self.dsManagerViewModel.saveSettings() def apply_settings(self): pass def get_contrib(self): QgsApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) try: ExtraSources().load_contrib_pack() QgsApplication.restoreOverrideCursor() info_message = self.tr( 'Last version of contrib pack was downloaded!') QMessageBox.information(self, PluginSettings.product_name(), info_message) self.dsManagerViewModel.resetModel() except: QgsApplication.restoreOverrideCursor() error_message = self.tr('Error on getting contrib pack: %s %s') % ( sys.exc_type, sys.exc_value) QMessageBox.critical(self, PluginSettings.product_name(), error_message)
class UserServicesBox(QGroupBox, FORM_CLASS): def __init__(self, parent=None): """Constructor.""" super(UserServicesBox, self).__init__(parent) self.setupUi(self) self.feel_list() self.lstServices.currentItemChanged.connect(self.on_sel_changed) self.lstServices.itemDoubleClicked.connect(self.on_edit) self.btnEdit.clicked.connect(self.on_edit) self.btnAdd.clicked.connect(self.on_add) self.btnDelete.clicked.connect(self.on_delete) self.btnCopy.clicked.connect(self.on_copy) self.btnAdd.setIcon(QIcon(":/plugins/QuickMapServices/icons/plus.svg")) self.btnEdit.setIcon(QIcon(":/plugins/QuickMapServices/icons/compose.svg")) self.btnDelete.setIcon(QIcon(":/plugins/QuickMapServices/icons/trash.svg")) self.btnCopy.setIcon(QIcon(":/plugins/QuickMapServices/icons/copy.svg")) self.ds_model = DSManagerModel() def feel_list(self): self.lstServices.clear() ds_list = DataSourcesList(USER_DS_PATHS) for ds in ds_list.data_sources.itervalues(): item = QListWidgetItem(ds.action.icon(), ds.action.text()) item.setData(Qt.UserRole, ds) self.lstServices.addItem(item) def on_sel_changed(self, curr, prev): has_sel = curr is not None self.btnEdit.setEnabled(has_sel) self.btnDelete.setEnabled(has_sel) def on_add(self): edit_dialog = DsEditDialog() edit_dialog.setWindowTitle(self.tr("Create service")) if edit_dialog.exec_() == QDialog.Accepted: self.feel_list() self.ds_model.resetModel() def on_edit(self): item = self.lstServices.currentItem().data(Qt.UserRole) edit_dialog = DsEditDialog() edit_dialog.setWindowTitle(self.tr("Edit service")) edit_dialog.set_ds_info(item) if edit_dialog.exec_() == QDialog.Accepted: self.feel_list() self.ds_model.resetModel() def on_delete(self): res = QMessageBox.question( None, self.tr("Delete service"), self.tr("Delete selected service?"), QMessageBox.Yes, QMessageBox.No ) if res == QMessageBox.Yes: ds_info = self.lstServices.currentItem().data(Qt.UserRole) dir_path = os.path.abspath(os.path.join(ds_info.file_path, os.path.pardir)) shutil.rmtree(dir_path, True) self.feel_list() self.ds_model.resetModel() def on_copy(self): self.ds_model.sort(DSManagerModel.COLUMN_GROUP_DS) select_data_sources_dialog = QDialog(self) select_data_sources_dialog.setWindowTitle(self.tr("Choose source service")) layout = QVBoxLayout(select_data_sources_dialog) select_data_sources_dialog.setLayout(layout) list_view = QTreeView(self) layout.addWidget(list_view) list_view.setModel(self.ds_model) list_view.setColumnHidden(DSManagerModel.COLUMN_VISIBILITY, True) list_view.setAlternatingRowColors(True) list_view.header().setResizeMode(DSManagerModel.COLUMN_GROUP_DS, QHeaderView.ResizeToContents) list_view.clicked.connect( lambda index: select_data_sources_dialog.accept() if not self.ds_model.isGroup(index) and index.column() == DSManagerModel.COLUMN_GROUP_DS else None ) if select_data_sources_dialog.exec_() == QDialog.Accepted: data_source = self.ds_model.data(list_view.currentIndex(), Qt.UserRole) data_source.id += "_copy" edit_dialog = DsEditDialog() edit_dialog.setWindowTitle(self.tr("Create service from existing")) edit_dialog.fill_ds_info(data_source) if edit_dialog.exec_() == QDialog.Accepted: self.feel_list() self.ds_model.resetModel()
class UserGroupsBox(QGroupBox, FORM_CLASS): def __init__(self, parent=None): """Constructor.""" super(UserGroupsBox, self).__init__(parent) self.setupUi(self) self.feel_list() self.lstGroups.currentItemChanged.connect(self.on_sel_changed) self.lstGroups.itemDoubleClicked.connect(self.on_edit) self.btnEdit.clicked.connect(self.on_edit) self.btnAdd.clicked.connect(self.on_add) self.btnDelete.clicked.connect(self.on_delete) self.btnCopy.clicked.connect(self.on_copy) self.btnAdd.setIcon(QIcon(":/plugins/QuickMapServices/icons/plus.svg")) self.btnEdit.setIcon(QIcon(":/plugins/QuickMapServices/icons/compose.svg")) self.btnDelete.setIcon(QIcon(":/plugins/QuickMapServices/icons/trash.svg")) self.btnCopy.setIcon(QIcon(":/plugins/QuickMapServices/icons/copy.svg")) self.ds_model = DSManagerModel() def feel_list(self): self.lstGroups.clear() ds_groups = GroupsList(USER_GROUP_PATHS) for ds_group in ds_groups.groups.itervalues(): item = QListWidgetItem(QIcon(ds_group.icon), self.tr(ds_group.alias)) item.setData(Qt.UserRole, ds_group) self.lstGroups.addItem(item) def on_sel_changed(self, curr, prev): has_sel = curr is not None self.btnEdit.setEnabled(has_sel) self.btnDelete.setEnabled(has_sel) def on_add(self): edit_dialog = GroupEditDialog() edit_dialog.setWindowTitle(self.tr('Create group')) if edit_dialog.exec_() == QDialog.Accepted: self.feel_list() self.ds_model.resetModel() def on_edit(self): item = self.lstGroups.currentItem().data(Qt.UserRole) edit_dialog = GroupEditDialog() edit_dialog.setWindowTitle(self.tr('Edit group')) edit_dialog.set_group_info(item) if edit_dialog.exec_() == QDialog.Accepted: self.feel_list() self.ds_model.resetModel() def on_delete(self): res = QMessageBox.question(None, self.tr('Delete group'), self.tr('Delete selected group?'), QMessageBox.Yes, QMessageBox.No) if res == QMessageBox.Yes: group_info = self.lstGroups.currentItem().data(Qt.UserRole) dir_path = os.path.abspath(os.path.join(group_info.file_path, os.path.pardir)) shutil.rmtree(dir_path, True) self.feel_list() self.ds_model.resetModel() def on_copy(self): select_group_dialog = QDialog(self) select_group_dialog.setWindowTitle(self.tr("Choose source group")) layout = QVBoxLayout(select_group_dialog) select_group_dialog.setLayout(layout) groups_list_view = QTableView(self) layout.addWidget(groups_list_view) groups_list_view.setModel(self.ds_model) groups_list_view.setColumnHidden(DSManagerModel.COLUMN_VISIBILITY, True) groups_list_view.horizontalHeader().setResizeMode(DSManagerModel.COLUMN_GROUP_DS, QHeaderView.Stretch) groups_list_view.setSelectionMode(QTableView.NoSelection) groups_list_view.setAlternatingRowColors(True) groups_list_view.setShowGrid(False) groups_list_view.verticalHeader().setResizeMode(QHeaderView.ResizeToContents) groups_list_view.verticalHeader().hide() groups_list_view.clicked.connect( lambda index: select_group_dialog.accept() \ if self.ds_model.isGroup(index) and \ index.column() == DSManagerModel.COLUMN_GROUP_DS \ else None ) if select_group_dialog.exec_() == QDialog.Accepted: group_info = self.ds_model.data(groups_list_view.currentIndex(), Qt.UserRole) group_info.id += "_copy" edit_dialog = GroupEditDialog() edit_dialog.setWindowTitle(self.tr('Create group from existing')) edit_dialog.fill_group_info(group_info) if edit_dialog.exec_() == QDialog.Accepted: self.feel_list() self.ds_model.resetModel()
class UserServicesBox(QGroupBox, FORM_CLASS): def __init__(self, parent=None): """Constructor.""" super(UserServicesBox, self).__init__(parent) self.setupUi(self) self.feel_list() self.lstServices.currentItemChanged.connect(self.on_sel_changed) self.lstServices.itemDoubleClicked.connect(self.on_edit) self.btnEdit.clicked.connect(self.on_edit) self.btnAdd.clicked.connect(self.on_add) self.btnDelete.clicked.connect(self.on_delete) self.btnCopy.clicked.connect(self.on_copy) self.btnAdd.setIcon(QIcon(":/plugins/QuickMapServices/icons/plus.svg")) self.btnEdit.setIcon( QIcon(":/plugins/QuickMapServices/icons/compose.svg")) self.btnDelete.setIcon( QIcon(":/plugins/QuickMapServices/icons/trash.svg")) self.btnCopy.setIcon( QIcon(":/plugins/QuickMapServices/icons/copy.svg")) self.ds_model = DSManagerModel() def feel_list(self): self.lstServices.clear() ds_list = DataSourcesList(USER_DS_PATHS) for ds in ds_list.data_sources.itervalues(): item = QListWidgetItem(ds.action.icon(), ds.action.text()) item.setData(Qt.UserRole, ds) self.lstServices.addItem(item) def on_sel_changed(self, curr, prev): has_sel = curr is not None self.btnEdit.setEnabled(has_sel) self.btnDelete.setEnabled(has_sel) def on_add(self): edit_dialog = DsEditDialog() edit_dialog.setWindowTitle(self.tr('Create service')) if edit_dialog.exec_() == QDialog.Accepted: self.feel_list() self.ds_model.resetModel() def on_edit(self): item = self.lstServices.currentItem().data(Qt.UserRole) edit_dialog = DsEditDialog() edit_dialog.setWindowTitle(self.tr('Edit service')) edit_dialog.set_ds_info(item) if edit_dialog.exec_() == QDialog.Accepted: self.feel_list() self.ds_model.resetModel() def on_delete(self): res = QMessageBox.question(None, self.tr('Delete service'), self.tr('Delete selected service?'), QMessageBox.Yes, QMessageBox.No) if res == QMessageBox.Yes: ds_info = self.lstServices.currentItem().data(Qt.UserRole) dir_path = os.path.abspath( os.path.join(ds_info.file_path, os.path.pardir)) shutil.rmtree(dir_path, True) self.feel_list() self.ds_model.resetModel() def on_copy(self): self.ds_model.sort(DSManagerModel.COLUMN_GROUP_DS) select_data_sources_dialog = QDialog(self) select_data_sources_dialog.setWindowTitle( self.tr("Choose source service")) layout = QVBoxLayout(select_data_sources_dialog) select_data_sources_dialog.setLayout(layout) list_view = QTreeView(self) layout.addWidget(list_view) list_view.setModel(self.ds_model) list_view.setColumnHidden(DSManagerModel.COLUMN_VISIBILITY, True) list_view.setAlternatingRowColors(True) list_view.header().setResizeMode(DSManagerModel.COLUMN_GROUP_DS, QHeaderView.ResizeToContents) list_view.clicked.connect( lambda index: select_data_sources_dialog.accept() \ if not self.ds_model.isGroup(index) and \ index.column() == DSManagerModel.COLUMN_GROUP_DS \ else None ) if select_data_sources_dialog.exec_() == QDialog.Accepted: data_source = self.ds_model.data(list_view.currentIndex(), Qt.UserRole) data_source.id += "_copy" edit_dialog = DsEditDialog() edit_dialog.setWindowTitle(self.tr('Create service from existing')) edit_dialog.fill_ds_info(data_source) if edit_dialog.exec_() == QDialog.Accepted: self.feel_list() self.ds_model.resetModel()