Source code for profile_manager.gui.mdl_profiles
from pathlib import Path
from qgis.core import QgsApplication, QgsUserProfile, QgsUserProfileManager
from qgis.PyQt.QtCore import QModelIndex, QObject, Qt
from qgis.PyQt.QtGui import QStandardItemModel
from profile_manager.profiles.utils import qgis_profiles_path
[docs]
class ProfileListModel(QStandardItemModel):
"""QStandardItemModel to display available QGIS profile list"""
NAME_COL = 0
def __init__(self, parent: QObject = None):
"""
QStandardItemModel for profile list display
Args:
parent: QObject parent
"""
super().__init__(parent)
self.setHorizontalHeaderLabels([self.tr("Name")])
self.profile_manager = QgsUserProfileManager(str(qgis_profiles_path()))
# Connect to profile changes
self.profile_manager.setNewProfileNotificationEnabled(True)
self.profile_manager.profilesChanged.connect(self._update_available_profiles)
# Initialization of available profiles
self._update_available_profiles()
[docs]
def flags(self, index: QModelIndex) -> Qt.ItemFlags:
"""Define flags for an index.
Used to disable edition.
Args:
index (QModelIndex): data index
Returns:
Qt.ItemFlags: flags
"""
default_flags = super().flags(index)
return default_flags & ~Qt.ItemFlag.ItemIsEditable # Disable editing
def _update_available_profiles(self) -> None:
"""Update model with all available profiles in manager"""
self.removeRows(0, self.rowCount())
for profile_name in self.profile_manager.allProfiles():
self.insert_profile(profile_name)
[docs]
def insert_profile(self, profile_name: str) -> None:
"""Insert profile in model
Args:
profile_name (str): profile name
"""
# Get user profile
profile: QgsUserProfile = self.profile_manager.profileForName(profile_name)
if profile:
row = self.rowCount()
self.insertRow(row)
self.setData(self.index(row, self.NAME_COL), profile.name())
self.setData(
self.index(row, self.NAME_COL),
profile.icon(),
Qt.ItemDataRole.DecorationRole,
)
active_profile_folder_name = Path(QgsApplication.qgisSettingsDirPath()).name
profile_folder_name = Path(profile.folder()).name
if profile_folder_name == active_profile_folder_name:
font = QgsApplication.font()
font.setItalic(True)
self.setData(
self.index(row, self.NAME_COL), font, Qt.ItemDataRole.FontRole
)