class TriblerWindow(QMainWindow): resize_event = pyqtSignal() def __init__(self): super(TriblerWindow, self).__init__() self.navigation_stack = [] uic.loadUi('qt_resources/mainwindow.ui', self) # Remove the focus rect on OS X [widget.setAttribute(Qt.WA_MacShowFocusRect, 0) for widget in self.findChildren(QLineEdit) + self.findChildren(QListView) + self.findChildren(QTreeWidget)] self.subscribed_channels_list = self.findChild(QWidget, "subscribed_channels_list") self.channel_torrents_list = self.findChild(QWidget, "channel_torrents_list") self.top_menu_button = self.findChild(QToolButton, "top_menu_button") self.top_search_bar = self.findChild(QLineEdit, "top_search_bar") self.top_search_button = self.findChild(QToolButton, "top_search_button") self.my_profile_button = self.findChild(QToolButton, "my_profile_button") self.video_player_page = self.findChild(QWidget, "video_player_page") self.search_results_page = self.findChild(QWidget, "search_results_page") self.downloads_page = self.findChild(QWidget, "downloads_page") self.settings_page = self.findChild(QWidget, "settings_page") self.my_channel_page = self.findChild(QWidget, "my_channel_page") self.left_menu = self.findChild(QWidget, "left_menu") self.top_search_bar.returnPressed.connect(self.on_top_search_button_click) self.top_search_button.clicked.connect(self.on_top_search_button_click) self.top_menu_button.clicked.connect(self.on_top_menu_button_click) self.search_results_list.itemClicked.connect(self.on_channel_item_click) self.subscribed_channels_list.itemClicked.connect(self.on_channel_item_click) self.left_menu_home_button = self.findChild(QWidget, "left_menu_home_button") self.left_menu_home_button.clicked_menu_button.connect(self.clicked_menu_button) self.left_menu_my_channel_button = self.findChild(QWidget, "left_menu_my_channel_button") self.left_menu_my_channel_button.clicked_menu_button.connect(self.clicked_menu_button) self.left_menu_subscribed_button = self.findChild(QWidget, "left_menu_subscribed_button") self.left_menu_subscribed_button.clicked_menu_button.connect(self.clicked_menu_button) self.left_menu_downloads_button = self.findChild(QWidget, "left_menu_downloads_button") self.left_menu_downloads_button.clicked_menu_button.connect(self.clicked_menu_button) self.left_menu_videoplayer_button = self.findChild(QWidget, "left_menu_videoplayer_button") self.left_menu_videoplayer_button.clicked_menu_button.connect(self.clicked_menu_button) self.left_menu_settings_button = self.findChild(QWidget, "left_menu_settings_button") self.left_menu_settings_button.clicked_menu_button.connect(self.clicked_menu_button) self.menu_buttons = [self.left_menu_home_button, self.left_menu_my_channel_button, self.left_menu_subscribed_button, self.left_menu_videoplayer_button, self.left_menu_settings_button, self.left_menu_downloads_button] channel_back_button = self.findChild(QToolButton, "channel_back_button") channel_back_button.clicked.connect(self.on_page_back_clicked) self.channel_tab = self.findChild(QWidget, "channel_tab") self.channel_tab.initialize() self.channel_tab.clicked_tab_button.connect(self.on_channel_tab_button_clicked) self.channel_stacked_widget = self.findChild(QStackedWidget, "channel_stacked_widget") self.channel_comments_list = self.findChild(QTreeWidget, "channel_comments_list") self.channel_activities_list = self.findChild(QListWidget, "channel_activities_list") # TODO Martijn: for now, fill the comments and activity items on the channel details page with some dummy data for i in range(0, 10): parent_item = QTreeWidgetItem(self.channel_comments_list) widget_item = ChannelCommentListItem(self.channel_comments_list, 0) self.channel_comments_list.setItemWidget(parent_item, 0, widget_item) child_item = QTreeWidgetItem(self.channel_comments_list) widget_item = ChannelCommentListItem(self.channel_comments_list, 1) self.channel_comments_list.setItemWidget(child_item, 0, widget_item) for i in range(0, 10): item = QListWidgetItem(self.channel_activities_list) widget_item = ChannelActivityListItem(self.channel_activities_list) item.setSizeHint(widget_item.sizeHint()) self.channel_activities_list.setItemWidget(item, widget_item) # fetch the variables, needed for the video player port self.variables_request_mgr = TriblerRequestManager() self.variables_request_mgr.get_variables(self.received_variables) self.event_request_manager = EventRequestManager() self.event_request_manager.received_free_space.connect(self.received_free_space) self.event_request_manager.received_download_status.connect(self.downloads_page.received_download_status) self.video_player_page.initialize_player() self.search_results_page.initialize_search_results_page() self.settings_page.initialize_settings_page() self.my_channel_page.initialize_my_channel_page() self.downloads_page.initialize_downloads_page() self.stackedWidget.setCurrentIndex(PAGE_HOME) self.show() def received_free_space(self, free_space): self.statusBar.set_free_space(free_space) def received_subscribed_channels(self, results): items = [] for result in results['subscribed']: items.append((ChannelListItem, result)) self.subscribed_channels_list.set_data_items(items) def received_torrents_in_channel(self, results): items = [] for result in results['torrents']: items.append((ChannelTorrentListItem, result)) self.channel_torrents_list.set_data_items(items) def received_variables(self, variables): self.left_menu_home_button.selectMenuButton() self.video_player_page.video_player_port = variables["ports"]["video~port"] def on_top_search_button_click(self): self.clicked_menu_button("-") self.stackedWidget.setCurrentIndex(PAGE_SEARCH_RESULTS) self.search_results_page.perform_search(self.top_search_bar.text()) self.search_request_mgr = TriblerRequestManager() self.search_request_mgr.search_channels(self.top_search_bar.text(), self.search_results_page.received_search_results) def on_top_menu_button_click(self): if self.left_menu.isHidden(): self.left_menu.show() else: self.left_menu.hide() def on_channel_tab_button_clicked(self, button_name): if button_name == "channel_content_button": self.channel_stacked_widget.setCurrentIndex(PAGE_CHANNEL_CONTENT) elif button_name == "channel_comments_button": self.channel_stacked_widget.setCurrentIndex(PAGE_CHANNEL_COMMENTS) elif button_name == "channel_activity_button": self.channel_stacked_widget.setCurrentIndex(PAGE_CHANNEL_ACTIVITY) def clicked_menu_button(self, menu_button_name): # Deselect menu buttons for button in self.menu_buttons: button.unselectMenuButton() if menu_button_name == "left_menu_home_button": self.left_menu_home_button.selectMenuButton() self.stackedWidget.setCurrentIndex(PAGE_HOME) elif menu_button_name == "left_menu_my_channel_button": self.left_menu_my_channel_button.selectMenuButton() self.stackedWidget.setCurrentIndex(PAGE_MY_CHANNEL) self.my_channel_page.load_my_channel_overview() elif menu_button_name == "left_menu_videoplayer_button": self.left_menu_videoplayer_button.selectMenuButton() self.stackedWidget.setCurrentIndex(PAGE_VIDEO_PLAYER) elif menu_button_name == "left_menu_downloads_button": self.left_menu_downloads_button.selectMenuButton() self.stackedWidget.setCurrentIndex(PAGE_DOWNLOADS) elif menu_button_name == "left_menu_settings_button": self.left_menu_settings_button.selectMenuButton() self.stackedWidget.setCurrentIndex(PAGE_SETTINGS) self.settings_page.load_settings() elif menu_button_name == "left_menu_subscribed_button": self.left_menu_subscribed_button.selectMenuButton() self.subscribed_channels_request_manager = TriblerRequestManager() self.subscribed_channels_request_manager.get_subscribed_channels(self.received_subscribed_channels) self.stackedWidget.setCurrentIndex(PAGE_SUBSCRIBED_CHANNELS) self.navigation_stack = [] def on_channel_item_click(self, channel_list_item): channel_info = channel_list_item.data(Qt.UserRole) self.get_torents_in_channel_manager = TriblerRequestManager() self.get_torents_in_channel_manager.get_torrents_in_channel(str(channel_info['id']), self.received_torrents_in_channel) self.navigation_stack.append(self.stackedWidget.currentIndex()) self.stackedWidget.setCurrentIndex(PAGE_CHANNEL_DETAILS) # initialize the page about a channel channel_detail_pane = self.findChild(QWidget, "channel_details") channel_name_label = channel_detail_pane.findChild(QLabel, "channel_name_label") channel_num_subs_label = channel_detail_pane.findChild(QLabel, "channel_num_subs_label") channel_name_label.setText(channel_info['name']) channel_num_subs_label.setText(str(channel_info['votes'])) def on_page_back_clicked(self): prev_page = self.navigation_stack.pop() self.stackedWidget.setCurrentIndex(prev_page) def resizeEvent(self, event): self.resize_event.emit()