def show_message(self, message, value=None): if value not in self.notification_pool: if value is not None: self.notification_pool.append(value) self.tray_icon.showMessage( "Blender Launcher", message, QIcon(taskbar_icon_paths[get_taskbar_icon_color()]), 10000)
def __init__(self, app): super().__init__() self.setupUi(self) self.setAcceptDrops(True) # Server self.server = QLocalServer() self.server.listen("blender-launcher-server") self.server.newConnection.connect(self.new_connection) # Global scope self.app = app self.favorite = None self.status = "None" self.app_state = AppState.IDLE self.cashed_builds = [] self.notification_pool = [] self.windows = [self] self.manager = PoolManager(num_pools=50, maxsize=10) self.timer = None self.started = True self.latest_tag = "" self.new_downloads = False # Setup window self.setWindowTitle("Blender Launcher") self.app.setWindowIcon( QIcon(taskbar_icon_paths[get_taskbar_icon_color()])) # Setup font QFontDatabase.addApplicationFont( ":/resources/fonts/OpenSans-SemiBold.ttf") self.font = QFont("Open Sans SemiBold", 10) self.font.setHintingPreference(QFont.PreferNoHinting) self.app.setFont(self.font) # Setup style file = QFile(":/resources/styles/global.qss") file.open(QFile.ReadOnly | QFile.Text) self.style_sheet = QTextStream(file).readAll() self.app.setStyleSheet(self.style_sheet) # Check library folder if is_library_folder_valid() is False: self.dlg = DialogWindow( self, title="Information", text="First, choose where Blender<br>builds will be stored", accept_text="Continue", cancel_text=None, icon=DialogIcon.INFO) self.dlg.accepted.connect(self.set_library_folder) else: create_library_folders(get_library_folder()) self.draw()
def show_message(self, message, value=None, type=None): if (type == MessageType.DOWNLOADFINISHED and get_enable_download_notifications() is False): return elif (type == MessageType.NEWBUILDS and get_enable_new_builds_notifications() is False): return if value not in self.notification_pool: if value is not None: self.notification_pool.append(value) self.tray_icon.showMessage( "Blender Launcher", message, QIcon(taskbar_icon_paths[get_taskbar_icon_color()]), 10000)
def draw(self, polish=False): self.HeaderLayout = QHBoxLayout() self.HeaderLayout.setContentsMargins(1, 1, 1, 0) self.HeaderLayout.setSpacing(0) self.CentralLayout.addLayout(self.HeaderLayout) self.SettingsButton = \ QPushButton(QIcon(":resources/icons/settings.svg"), "") self.SettingsButton.setIconSize(QSize(20, 20)) self.SettingsButton.setFixedSize(36, 32) self.SettingsButton.setToolTip("Show settings window") self.WikiButton = \ QPushButton(QIcon(":resources/icons/wiki.svg"), "") self.WikiButton.setIconSize(QSize(20, 20)) self.WikiButton.setFixedSize(36, 32) self.WikiButton.setToolTip("Open documentation") self.MinimizeButton = \ QPushButton(QIcon(":resources/icons/minimize.svg"), "") self.MinimizeButton.setIconSize(QSize(20, 20)) self.MinimizeButton.setFixedSize(36, 32) self.CloseButton = \ QPushButton(QIcon(":resources/icons/close.svg"), "") self.CloseButton.setIconSize(QSize(20, 20)) self.CloseButton.setFixedSize(36, 32) self.HeaderLabel = QLabel("Blender Launcher") self.HeaderLabel.setAlignment(Qt.AlignCenter) self.HeaderLayout.addWidget(self.SettingsButton, 0, Qt.AlignLeft) self.HeaderLayout.addWidget(self.WikiButton, 0, Qt.AlignLeft) self.HeaderLayout.addWidget(self.HeaderLabel, 1) self.HeaderLayout.addWidget(self.MinimizeButton, 0, Qt.AlignRight) self.HeaderLayout.addWidget(self.CloseButton, 0, Qt.AlignRight) self.SettingsButton.setProperty("HeaderButton", True) self.WikiButton.setProperty("HeaderButton", True) self.MinimizeButton.setProperty("HeaderButton", True) self.CloseButton.setProperty("HeaderButton", True) self.CloseButton.setProperty("CloseButton", True) # Tab layout self.TabWidget = QTabWidget() self.CentralLayout.addWidget(self.TabWidget) self.LibraryTab = QWidget() self.LibraryTabLayout = QVBoxLayout() self.LibraryTabLayout.setContentsMargins(0, 0, 0, 0) self.LibraryTab.setLayout(self.LibraryTabLayout) self.TabWidget.addTab(self.LibraryTab, "Library") self.DownloadsTab = QWidget() self.DownloadsTabLayout = QVBoxLayout() self.DownloadsTabLayout.setContentsMargins(0, 0, 0, 0) self.DownloadsTab.setLayout(self.DownloadsTabLayout) self.TabWidget.addTab(self.DownloadsTab, "Downloads") self.LibraryToolBox = BaseToolBoxWidget(self) self.LibraryStableListWidget = \ self.LibraryToolBox.add_list_widget( "Stable Releases", "LibraryStableListWidget", "Nothing to show yet", "Commit Time", extended_selection=True) self.LibraryDailyListWidget = \ self.LibraryToolBox.add_list_widget( "Daily Builds", "LibraryDailyListWidget", "Nothing to show yet", "Commit Time", extended_selection=True) self.LibraryExperimentalListWidget = \ self.LibraryToolBox.add_list_widget( "Experimental Branches", "LibraryExperimentalListWidget", "Nothing to show yet", "Commit Time", extended_selection=True) self.LibraryCustomListWidget = \ self.LibraryToolBox.add_list_widget( "Custom Builds", "LibraryCustomListWidget", "Nothing to show yet", "Commit Time", show_reload=True, extended_selection=True) self.LibraryTab.layout().addWidget(self.LibraryToolBox) self.DownloadsToolBox = BaseToolBoxWidget(self) self.DownloadsStableListWidget = \ self.DownloadsToolBox.add_list_widget( "Stable Releases", "DownloadsStableListWidget", "No new builds available", "Upload Time", False) self.DownloadsDailyListWidget = \ self.DownloadsToolBox.add_list_widget( "Daily Builds", "DownloadsDailyListWidget", "No new builds available", "Upload Time",) self.DownloadsExperimentalListWidget = \ self.DownloadsToolBox.add_list_widget( "Experimental Branches", "DownloadsExperimentalListWidget", "No new builds available", "Upload Time",) self.DownloadsTab.layout().addWidget(self.DownloadsToolBox) self.LibraryToolBox.setCurrentIndex(get_default_library_page()) self.DownloadsToolBox.setCurrentIndex(get_default_downloads_page()) # Connect buttons self.SettingsButton.clicked.connect(self.show_settings_window) self.WikiButton.clicked.connect(lambda: webbrowser.open( "https://github.com/DotBow/Blender-Launcher/wiki")) self.MinimizeButton.clicked.connect(self.showMinimized) self.CloseButton.clicked.connect(self.close) self.StatusBar.setContentsMargins(0, 0, 0, 2) self.StatusBar.setFont(self.font) self.statusbarLabel = QLabel() self.statusbarLabel.setIndent(8) self.NewVersionButton = QPushButton() self.NewVersionButton.hide() self.NewVersionButton.clicked.connect(self.show_update_window) self.statusbarVersion = QLabel(self.app.applicationVersion()) self.statusbarVersion.setToolTip( "The version of Blender Laucnher that is currently run") self.StatusBar.addPermanentWidget(self.statusbarLabel, 1) self.StatusBar.addPermanentWidget(self.NewVersionButton) self.StatusBar.addPermanentWidget(self.statusbarVersion) # Draw library self.draw_library() # Setup tray icon context Menu quit_action = QAction("Quit", self) quit_action.triggered.connect(self.quit) hide_action = QAction("Hide", self) hide_action.triggered.connect(self.close) show_action = QAction("Show", self) show_action.triggered.connect(self._show) launch_favorite_action = QAction( QIcon(":resources/icons/favorite.svg"), "Blender", self) launch_favorite_action.triggered.connect(self.launch_favorite) tray_menu = QMenu() tray_menu.setFont(self.font) tray_menu.addAction(launch_favorite_action) tray_menu.addAction(show_action) tray_menu.addAction(hide_action) tray_menu.addAction(quit_action) # Setup tray icon self.tray_icon = QSystemTrayIcon(self) self.tray_icon.setIcon( QIcon(taskbar_icon_paths[get_taskbar_icon_color()])) self.tray_icon.setToolTip("Blender Launcher") self.tray_icon.activated.connect(self.tray_icon_activated) self.tray_icon.setContextMenu(tray_menu) self.tray_icon.messageClicked.connect(self._show) self.tray_icon.show() # Forse style update if polish is True: self.style().unpolish(self.app) self.style().polish(self.app) # Show window if get_launch_minimized_to_tray() is False: self._show()
def __init__(self, parent): super().__init__() self.setWindowFlag(Qt.SubWindow) self.parent = parent self.setupUi(self) self.setWindowTitle("Settings") self.HeaderLayout = QHBoxLayout() self.HeaderLayout.setContentsMargins(36, 1, 1, 0) self.HeaderLayout.setSpacing(0) self.CentralLayout.addLayout(self.HeaderLayout) self.CloseButton = \ QPushButton(QIcon(":resources/icons/close.svg"), "") self.CloseButton.setIconSize(QSize(20, 20)) self.CloseButton.setFixedSize(36, 32) self.CloseButton.setProperty("HeaderButton", True) self.CloseButton.setProperty("CloseButton", True) self.CloseButton.clicked.connect(self.close) self.HeaderLabel = QLabel("Settings") self.HeaderLabel.setAlignment(Qt.AlignCenter) self.HeaderLayout.addWidget(self.HeaderLabel, 1) self.HeaderLayout.addWidget(self.CloseButton, 0, Qt.AlignRight) # Library Folder self.LibraryFolderLineEdit = QLineEdit() self.LibraryFolderLineEdit.setText(str(get_library_folder())) self.LibraryFolderLineEdit.setContextMenuPolicy(Qt.NoContextMenu) self.LibraryFolderLineEdit.setReadOnly(True) self.LibraryFolderLineEdit.setCursorPosition(0) self.SetLibraryFolderButton = \ QPushButton(QIcon(":resources/icons/folder.svg"), "") self.SetLibraryFolderButton.clicked.connect(self.set_library_folder) self.ReloadLibraryFolderContentButton = QPushButton( "Reload Library Folder Content") self.ReloadLibraryFolderContentButton.clicked.connect( lambda: self.parent.draw_library(True)) self.LibraryFolderLayout = QHBoxLayout() self.LibraryFolderLayout.setContentsMargins(0, 0, 0, 0) self.LibraryFolderLayout.setSpacing(0) self.LibraryFolderLayout.addWidget(self.LibraryFolderLineEdit) self.LibraryFolderLayout.addWidget(self.SetLibraryFolderButton) # Launch When System Starts self.LaunchWhenSystemStartsCheckBox = QCheckBox( "Launch When System Starts") self.LaunchWhenSystemStartsCheckBox.setChecked( get_launch_when_system_starts()) self.LaunchWhenSystemStartsCheckBox.clicked.connect( self.toggle_launch_when_system_starts) # Launch Minimized To Tray self.LaunchMinimizedToTrayCheckBox = QCheckBox( "Launch Minimized To Tray") self.LaunchMinimizedToTrayCheckBox.setChecked( get_launch_minimized_to_tray()) self.LaunchMinimizedToTrayCheckBox.clicked.connect( self.toggle_launch_minimized_to_tray) # High Dpi Scaling self.EnableHighDpiScalingCheckBox = \ QCheckBox("Enable High DPI Scaling") self.EnableHighDpiScalingCheckBox.clicked.connect( self.toggle_enable_high_dpi_scaling) self.EnableHighDpiScalingCheckBox.setChecked( get_enable_high_dpi_scaling()) # Taskbar Icon Color self.TaskbarIconColorComboBox = QComboBox() self.TaskbarIconColorComboBox.addItems(taskbar_icon_colors.keys()) self.TaskbarIconColorComboBox.setCurrentIndex( get_taskbar_icon_color()) self.TaskbarIconColorComboBox.activated[str].connect( self.change_taskbar_icon_color) # Default Library Page self.DefaultLibraryPageComboBox = QComboBox() self.DefaultLibraryPageComboBox.addItems(library_pages.keys()) self.DefaultLibraryPageComboBox.setCurrentIndex( get_default_library_page()) self.DefaultLibraryPageComboBox.activated[str].connect( self.change_default_library_page) # Default Downloads Page self.DefaultDownloadsPageComboBox = QComboBox() self.DefaultDownloadsPageComboBox.addItems(downloads_pages.keys()) self.DefaultDownloadsPageComboBox.setCurrentIndex( get_default_downloads_page()) self.DefaultDownloadsPageComboBox.activated[str].connect( self.change_default_downloads_page) # Notifications self.EnableNewBuildsNotifications = QCheckBox( "When New Builds Are Available") self.EnableNewBuildsNotifications.clicked.connect( self.toggle_enable_new_builds_notifications) self.EnableNewBuildsNotifications.setChecked( get_enable_new_builds_notifications()) self.EnableDownloadNotifications = QCheckBox( "When Downloading Is Finished") self.EnableDownloadNotifications.clicked.connect( self.toggle_enable_download_notifications) self.EnableDownloadNotifications.setChecked( get_enable_download_notifications()) # Mark As Favorite self.MarkAsFavorite = QComboBox() self.MarkAsFavorite.addItems(favorite_pages.keys()) self.MarkAsFavorite.setCurrentIndex( get_mark_as_favorite()) self.MarkAsFavorite.activated[str].connect( self.change_mark_as_favorite) # Layout self.SettingsLayout = QFormLayout() self.SettingsLayout.setContentsMargins(6, 6, 6, 6) self.SettingsLayout.setSpacing(6) self.SettingsLayout.setRowWrapPolicy(QFormLayout.DontWrapRows) self.SettingsLayout.setFieldGrowthPolicy( QFormLayout.AllNonFixedFieldsGrow) self.SettingsLayout.setLabelAlignment(Qt.AlignLeft) self.CentralLayout.addLayout(self.SettingsLayout) self.SettingsLayout.addRow(QLabel("Library Folder:")) self.SettingsLayout.addRow(self.LibraryFolderLayout) self.SettingsLayout.addRow( self.ReloadLibraryFolderContentButton) self.SettingsLayout.addRow(QLabel("System:")) if get_platform() == 'Windows': self.SettingsLayout.addRow(self.LaunchWhenSystemStartsCheckBox) self.SettingsLayout.addRow(self.LaunchMinimizedToTrayCheckBox) self.SettingsLayout.addRow(self.EnableHighDpiScalingCheckBox) self.SettingsLayout.addRow(QLabel("Interface:")) self.SettingsLayout.addRow( "Taskbar Icon Color", self.TaskbarIconColorComboBox) self.SettingsLayout.addRow( "Default Library Page", self.DefaultLibraryPageComboBox) self.SettingsLayout.addRow( "Default Downloads Page", self.DefaultDownloadsPageComboBox) self.SettingsLayout.addRow(QLabel("Notifications:")) self.SettingsLayout.addRow(self.EnableNewBuildsNotifications) self.SettingsLayout.addRow(self.EnableDownloadNotifications) self.SettingsLayout.addRow(QLabel("Service:")) self.SettingsLayout.addRow( "Mark New Build As Favorite", self.MarkAsFavorite) self.resize(self.sizeHint()) self.show()