def __init__(self, parent=None): super(Dice, self).__init__(parent) self.application_dir = QCoreApplication.applicationDirPath() self.__project = Project( self ) # used as an empty default project, replaced by load_project() self.__desk = None self.__settings = None self.__home = None qmlRegisterType(Project, "DICE", 1, 0, "Project") self.__theme = Theme(self) self.__memory = MemoryInfo(self) self.__error = ErrorHandler(self) qmlRegisterType(MemoryInfo, "DICE", 1, 0, "MemoryInfo") qmlRegisterType(ErrorHandler, "DICE", 1, 0, "ErrorHandler") qmlRegisterType(BasicWrapper, "DICE", 1, 0, "BasicWrapper") qmlRegisterType(Camera, "DICE", 1, 0, "Camera") self.__app_log_buffer = {} self.__app_log_write_interval = 500 self.__app_log_writer = self.__init_log_writer() self.__qml_engine = None self.__qml_context = None self.__app_window = None self.__main_window = None self.__core_apps = CoreAppListModel(self) qmlRegisterType(CoreApp, "DICE", 1, 0, "CoreApp") qmlRegisterType(BasicApp, "DICE", 1, 0, "BasicApp") self.executor = ThreadPoolExecutor( max_workers=2) # TODO: set the max_workers from a configuration self.core_app_loaded.connect(self.__insert_core_app, Qt.QueuedConnection) self.__app_candidates = None self.__current_loading_core_app_index = 0 self.__load_next_core_app( ) # load the first core app in this thread, but the other in the executor