def __init__(self, parent, playlist, show_controls=False, on_remove_clicked=None, on_edit_clicked=None): QWidget.__init__(self, parent) fc_playlist_list_item.__init__(self) self.setupUi(self) self.playlist_info = playlist self.edit_playlist_button.setIcon( QIcon(get_image_path("edit_white.png"))) self.remove_playlist_button.setIcon(QIcon( get_image_path("delete.png"))) self.playlist_name.setText(playlist["name"]) self.playlist_num_items.setText("%d items" % len(playlist["torrents"])) self.thumbnail_widget.initialize(playlist["name"], 24) self.controls_container.setHidden(True) self.show_controls = show_controls if on_remove_clicked is not None: self.remove_playlist_button.clicked.connect( lambda: on_remove_clicked(self)) if on_edit_clicked is not None: self.edit_playlist_button.clicked.connect( lambda: on_edit_clicked(self))
def update_subscribe_button(self, remote_response=None): if remote_response and 'subscribed' in remote_response: self.channel_info["subscribed"] = remote_response['subscribed'] if remote_response and 'votes' in remote_response: self.channel_info["votes"] = remote_response['votes'] if int(self.channel_info["subscribed"]): self.subscribe_button.setIcon(QIcon(QPixmap(get_image_path('subscribed_yes.png')))) else: self.subscribe_button.setIcon(QIcon(QPixmap(get_image_path('subscribed_not.png')))) self.num_subs_label.setText(str(self.channel_info["votes"])) if self.window().tribler_settings: # It could be that the settings are not loaded yet self.credit_mining_button.setHidden(not self.window().tribler_settings["credit_mining"]["enabled"]) if self.channel_info["public_key"] in self.window().tribler_settings["credit_mining"]["sources"]: self.credit_mining_button.setIcon(QIcon(QPixmap(get_image_path('credit_mining_yes.png')))) else: self.credit_mining_button.setIcon(QIcon(QPixmap(get_image_path('credit_mining_not.png')))) else: self.credit_mining_button.hide() # Disable channel control buttons for LEGACY_ENTRY channels hide_controls = (self.channel_info["status"] == 1000) self.num_subs_label.setHidden(hide_controls) self.subscribe_button.setHidden( hide_controls or ("my_channel" in self.channel_info and self.channel_info["my_channel"])) self.credit_mining_button.setHidden(hide_controls)
def update_subscribe_button(self, remote_response=None): if remote_response and 'subscribed' in remote_response: self.channel_info["subscribed"] = remote_response['subscribed'] if remote_response and 'votes' in remote_response: self.channel_info["votes"] = remote_response['votes'] if self.channel_info["subscribed"]: self.subscribe_button.setIcon( QIcon(QPixmap(get_image_path('subscribed_yes.png')))) else: self.subscribe_button.setIcon( QIcon(QPixmap(get_image_path('subscribed_not.png')))) self.num_subs_label.setText(str(self.channel_info["votes"])) if self.window( ).tribler_settings: # It could be that the settings are not loaded yet self.credit_mining_button.setHidden( not self.window().tribler_settings["credit_mining"]["enabled"]) if self.channel_info["dispersy_cid"] in self.window( ).tribler_settings["credit_mining"]["sources"]: self.credit_mining_button.setIcon( QIcon(QPixmap(get_image_path('credit_mining_yes.png')))) else: self.credit_mining_button.setIcon( QIcon(QPixmap(get_image_path('credit_mining_not.png')))) else: self.credit_mining_button.hide()
def enterEvent(self, _): if self.show_controls: self.controls_container.setHidden(False) self.edit_playlist_button.setIcon( QIcon(get_image_path('edit_white.png'))) self.remove_playlist_button.setIcon( QIcon(get_image_path('delete.png')))
def update_tray_icon(self, use_monochrome_icon): if use_monochrome_icon: self.tray_icon.setIcon( QIcon(QPixmap(get_image_path('monochrome_tribler.png')))) else: self.tray_icon.setIcon( QIcon(QPixmap(get_image_path('tribler.png')))) self.tray_icon.show()
def update_tray_icon(self, use_monochrome_icon): if not QSystemTrayIcon.isSystemTrayAvailable(): return if use_monochrome_icon: self.tray_icon.setIcon(QIcon(QPixmap(get_image_path('monochrome_tribler.png')))) else: self.tray_icon.setIcon(QIcon(QPixmap(get_image_path('tribler.png')))) self.tray_icon.show()
def update_tray_icon(self, use_monochrome_icon): if not QSystemTrayIcon.isSystemTrayAvailable() or not self.tray_icon: return if use_monochrome_icon: self.tray_icon.setIcon(QIcon(QPixmap(get_image_path('monochrome_tribler.png')))) else: self.tray_icon.setIcon(QIcon(QPixmap(get_image_path('tribler.png')))) self.tray_icon.show()
def update_subscribe_button(self): if self.channel_info["subscribed"]: self.subscribe_button.setIcon( QIcon(QPixmap(get_image_path('subscribed_yes.png')))) else: self.subscribe_button.setIcon( QIcon(QPixmap(get_image_path('subscribed_not.png')))) self.num_subs_label.setText(str(self.channel_info["votes"]))
def show_buttons(self): if not self.show_controls: self.remove_control_button_container.setHidden(True) self.control_buttons_container.setHidden(False) self.torrent_play_button.setIcon(QIcon(get_image_path('play.png'))) self.torrent_download_button.setIcon(QIcon(get_image_path('downloads.png'))) else: self.control_buttons_container.setHidden(True) self.remove_control_button_container.setHidden(False) self.remove_torrent_button.setIcon(QIcon(get_image_path('delete.png')))
def show_buttons(self): if not self.show_controls: self.remove_control_button_container.setHidden(True) self.control_buttons_container.setHidden(False) self.torrent_play_button.setIcon(QIcon(get_image_path('play.png'))) self.torrent_download_button.setIcon(QIcon(get_image_path('downloads.png'))) else: self.control_buttons_container.setHidden(True) self.remove_control_button_container.setHidden(False) self.remove_torrent_button.setIcon(QIcon(get_image_path('delete.png')))
def update_subscribe_button(self, remote_response=None): if remote_response and 'subscribed' in remote_response: self.channel_info["subscribed"] = remote_response['subscribed'] if remote_response and 'votes' in remote_response: self.channel_info["votes"] = remote_response['votes'] if self.channel_info["subscribed"]: self.subscribe_button.setIcon(QIcon(QPixmap(get_image_path('subscribed_yes.png')))) else: self.subscribe_button.setIcon(QIcon(QPixmap(get_image_path('subscribed_not.png')))) self.num_subs_label.setText(str(self.channel_info["votes"]))
def initialize_wallets_page(self): if not self.initialized: self.window().wallets_back_button.setIcon( QIcon(get_image_path('page_back.png'))) self.window().wallet_btc_overview_button.clicked.connect( lambda: self.initialize_wallet_info( 'BTC', self.window().wallet_btc_overview_button)) self.window().wallet_tbtc_overview_button.clicked.connect( lambda: self.initialize_wallet_info( 'TBTC', self.window().wallet_tbtc_overview_button)) self.window().wallet_mc_overview_button.clicked.connect( lambda: self.initialize_wallet_info( 'MB', self.window().wallet_mc_overview_button)) self.window().add_wallet_button.clicked.connect( self.on_add_wallet_clicked) self.window().wallet_mc_overview_button.hide() self.window().wallet_btc_overview_button.hide() self.window().wallet_tbtc_overview_button.hide() self.window().wallet_paypal_overview_button.hide() self.window().wallet_abn_overview_button.hide() self.window().wallet_rabo_overview_button.hide() self.window().wallet_info_tabs.hide() self.window().wallet_info_tabs.currentChanged.connect( self.tab_changed) self.initialized = True self.load_wallets()
def initialize_loading_page(self): svg_container = QGraphicsScene(self.window().loading_svg_view) svg_item = QGraphicsSvgItem() svg = QSvgRenderer(get_image_path("loading_animation.svg")) svg.repaintNeeded.connect(svg_item.update) svg_item.setSharedRenderer(svg) svg_container.addItem(svg_item) self.window().loading_svg_view.setScene(svg_container) self.window().core_manager.events_manager.upgrader_tick.connect(self.set_loading_text) self.window().core_manager.events_manager.upgrader_started.connect( lambda: self.set_loading_text("Upgrading...")) self.window().core_manager.events_manager.upgrader_finished.connect(lambda: self.loading_label.hide()) # Create a loading label that displays the status during upgrading self.loading_label = QLabel(self) self.loading_label.setStyleSheet("color: #ddd; font-size: 22px;") self.loading_label.setAlignment(Qt.AlignCenter) self.on_window_resize() self.loading_label.hide() # Hide the force shutdown button initially. Should be triggered by shutdown timer from main window. self.window().force_shutdown_btn.hide()
def initialize_with_channel(self, channel_info): self.playlists = [] self.torrents = [] self.loaded_channels = False self.loaded_playlists = False self.get_torents_in_channel_manager = None self.get_playlists_in_channel_manager = None self.channel_info = channel_info self.window().channel_torrents_list.set_data_items([(LoadingListItem, None)]) self.window().channel_preview_label.setHidden( channel_info['subscribed']) self.window().channel_back_button.setIcon( QIcon(get_image_path('page_back.png'))) self.get_torents_in_channel_manager = TriblerRequestManager() self.get_torents_in_channel_manager.perform_request( "channels/discovered/%s/torrents" % channel_info['dispersy_cid'], self.received_torrents_in_channel) self.get_playlists_in_channel_manager = TriblerRequestManager() self.get_playlists_in_channel_manager.perform_request( "channels/discovered/%s/playlists" % channel_info['dispersy_cid'], self.received_playlists_in_channel) # initialize the page about a channel self.window().channel_name_label.setText(channel_info['name']) self.window().num_subs_label.setText(str(channel_info['votes'])) self.window().subscription_widget.initialize_with_channel(channel_info) self.window().edit_channel_button.setHidden(True)
def initialize_with_channel(self, channel_info): self.playlists = [] self.torrents = [] self.loaded_channels = False self.loaded_playlists = False self.get_torents_in_channel_manager = None self.get_playlists_in_channel_manager = None self.channel_info = channel_info self.window().channel_torrents_list.set_data_items([(LoadingListItem, None)]) self.window().channel_torrents_detail_widget.hide() self.window().channel_preview_label.setHidden(channel_info['subscribed']) self.window().channel_back_button.setIcon(QIcon(get_image_path('page_back.png'))) self.get_torents_in_channel_manager = TriblerRequestManager() self.get_torents_in_channel_manager.perform_request("channels/discovered/%s/torrents" % channel_info['dispersy_cid'], self.received_torrents_in_channel) if len(channel_info['dispersy_cid']) == 148: # Check-hack for Channel2.0 style address self.loaded_playlists = True else: self.get_playlists_in_channel_manager = TriblerRequestManager() self.get_playlists_in_channel_manager.perform_request("channels/discovered/%s/playlists" % channel_info['dispersy_cid'], self.received_playlists_in_channel) # initialize the page about a channel self.window().channel_name_label.setText(channel_info['name']) self.window().num_subs_label.setText(str(channel_info['votes'])) self.window().subscription_widget.initialize_with_channel(channel_info)
def initialize(self, channel_info, playlist_info): self.channel_info = channel_info self.playlist_info = playlist_info self.window().edit_channel_details_manage_playlist_header.setText( "Manage torrents in playlist '%s'" % playlist_info['name']) self.window().manage_channel_playlist_torrents_back.setIcon( QIcon(get_image_path('page_back.png'))) self.window().playlist_manage_add_to_playlist.clicked.connect( self.on_add_clicked) self.window().playlist_manage_remove_from_playlist.clicked.connect( self.on_remove_clicked) self.window().edit_channel_manage_playlist_save_button.clicked.connect( self.on_save_clicked) self.window().manage_channel_playlist_torrents_back.clicked.connect( self.on_playlist_manage_back_clicked) # Load torrents in your channel self.request_mgr = TriblerRequestManager() self.request_mgr.perform_request( "channels/discovered/%s/torrents?disable_filter=1" % channel_info["identifier"], self.on_received_channel_torrents) self.torrents_in_playlist = [] self.torrents_in_channel = [] self.torrents_to_create = [] self.torrents_to_remove = [] self.pending_requests = [] self.requests_done = 0
def initialize_wallets_page(self): if not self.initialized: self.window().wallets_back_button.setIcon( QIcon(get_image_path('page_back.png'))) self.window().wallet_btc_overview_button.clicked.connect( lambda: self.load_transactions('BTC')) self.window().wallet_mc_overview_button.clicked.connect( lambda: self.load_transactions('MC')) self.window().wallet_paypal_overview_button.clicked.connect( lambda: self.load_transactions('PP')) self.window().wallet_abn_overview_button.clicked.connect( lambda: self.load_transactions('ABNA')) self.window().wallet_rabo_overview_button.clicked.connect( lambda: self.load_transactions('RABO')) self.window().add_wallet_button.clicked.connect( self.on_add_wallet_clicked) self.window().wallet_mc_overview_button.hide() self.window().wallet_btc_overview_button.hide() self.window().wallet_paypal_overview_button.hide() self.window().wallet_abn_overview_button.hide() self.window().wallet_rabo_overview_button.hide() self.initialized = True self.load_wallets()
def initialize(self, channel_info, playlist_info): self.channel_info = channel_info self.playlist_info = playlist_info self.window().edit_channel_details_manage_playlist_header.setText("Manage torrents in playlist '%s'" % playlist_info['name']) self.window().manage_channel_playlist_torrents_back.setIcon(QIcon(get_image_path('page_back.png'))) self.window().playlist_manage_add_to_playlist.clicked.connect(self.on_add_clicked) self.window().playlist_manage_remove_from_playlist.clicked.connect(self.on_remove_clicked) self.window().edit_channel_manage_playlist_save_button.clicked.connect(self.on_save_clicked) self.window().manage_channel_playlist_torrents_back.clicked.connect(self.on_playlist_manage_back_clicked) # Load torrents in your channel self.request_mgr = TriblerRequestManager() self.request_mgr.perform_request("channels/discovered/%s/torrents?disable_filter=1" % channel_info["identifier"], self.on_received_channel_torrents) self.torrents_in_playlist = [] self.torrents_in_channel = [] self.torrents_to_create = [] self.torrents_to_remove = [] self.pending_requests = [] self.requests_done = 0
def initialize_market_page(self): if not self.initialized: self.window().market_back_button.setIcon( QIcon(get_image_path('page_back.png'))) self.window( ).core_manager.events_manager.received_market_ask.connect( self.on_ask) self.window( ).core_manager.events_manager.received_market_bid.connect( self.on_bid) self.window( ).core_manager.events_manager.expired_market_ask.connect( self.on_ask_timeout) self.window( ).core_manager.events_manager.expired_market_bid.connect( self.on_bid_timeout) self.window( ).core_manager.events_manager.market_payment_received.connect( self.on_payment) self.window( ).core_manager.events_manager.market_payment_sent.connect( self.on_payment) self.window( ).core_manager.events_manager.market_transaction_complete.connect( self.on_transaction_complete) self.window().create_ask_button.clicked.connect( self.on_create_ask_clicked) self.window().create_bid_button.clicked.connect( self.on_create_bid_clicked) self.window().market_currency_type_button.clicked.connect( self.on_asset_type_clicked) self.window().market_transactions_button.clicked.connect( self.on_transactions_button_clicked) self.window().market_wallets_button.clicked.connect( self.on_wallets_button_clicked) self.window().market_orders_button.clicked.connect( self.on_orders_button_clicked) self.window().market_create_wallet_button.clicked.connect( self.on_wallets_button_clicked) # Sort asks ascending and bids descending self.window().asks_list.sortItems(0, Qt.AscendingOrder) self.window().bids_list.sortItems(2, Qt.DescendingOrder) self.window().asks_list.itemSelectionChanged.connect( lambda: self.on_tick_item_clicked(self.window().asks_list)) self.window().bids_list.itemSelectionChanged.connect( lambda: self.on_tick_item_clicked(self.window().bids_list)) self.window().tick_detail_container.hide() self.window().market_create_wallet_button.hide() self.window().create_ask_button.hide() self.window().create_bid_button.hide() self.initialized = True self.load_wallets()
def initialize(self, identifier): self.channel_identifier = identifier self.window().create_torrent_name_field.setText('') self.window().create_torrent_description_field.setText('') self.window().create_torrent_files_list.clear() self.window().seed_after_adding_checkbox.setChecked(True) self.window().edit_channel_create_torrent_progress_label.hide() if not self.initialized: self.window().manage_channel_create_torrent_back.setIcon( QIcon(get_image_path('page_back.png'))) self.window( ).create_torrent_files_list.customContextMenuRequested.connect( self.on_right_click_file_item) self.window().manage_channel_create_torrent_back.clicked.connect( self.on_create_torrent_manage_back_clicked) self.window().create_torrent_choose_files_button.clicked.connect( self.on_choose_files_clicked) self.window().create_torrent_choose_dir_button.clicked.connect( self.on_choose_dir_clicked) self.window().edit_channel_create_torrent_button.clicked.connect( self.on_create_clicked) self.initialized = True
def initialize_with_playlist(self, playlist): self.playlist = playlist self.window().playlist_name_label.setText(playlist["name"]) self.window().playlist_num_items_label.setText("%d items" % len(playlist["torrents"])) self.window().playlist_back_button.setIcon(QIcon(get_image_path('page_back.png'))) items = [] for result in playlist['torrents']: items.append((ChannelTorrentListItem, result)) self.window().playlist_torrents_list.set_data_items(items)
def on_playlist_item_clicked(self, item): playlist_info = item.data(Qt.UserRole) self.window().edit_channel_playlist_torrents_list.set_data_items([]) self.window().edit_channel_details_playlist_torrents_header.setText("Torrents in '%s'" % playlist_info['name']) self.window().edit_channel_playlist_torrents_back.setIcon(QIcon(get_image_path('page_back.png'))) self.viewing_playlist = playlist_info self.update_playlist_torrent_list() self.window().edit_channel_details_stacked_widget.setCurrentIndex(PAGE_EDIT_CHANNEL_PLAYLIST_TORRENTS)
def initialize_orders_page(self, wallets): if not self.initialized: self.window().orders_back_button.setIcon(QIcon(get_image_path('page_back.png'))) self.window().market_orders_list.sortItems(0, Qt.AscendingOrder) self.window().market_orders_list.customContextMenuRequested.connect(self.on_right_click_order) self.initialized = True self.wallets = wallets self.load_orders()
def initialize_with_playlist(self, playlist): self.playlist = playlist self.window().playlist_name_label.setText(playlist["name"]) self.window().playlist_num_items_label.setText( "%d items" % len(playlist["torrents"])) self.window().playlist_back_button.setIcon( QIcon(get_image_path('page_back.png'))) items = [] for result in playlist['torrents']: items.append((ChannelTorrentListItem, result)) self.window().playlist_torrents_list.set_data_items(items)
def on_playlist_item_clicked(self, item): playlist_info = item.data(Qt.UserRole) if not playlist_info: return self.window().edit_channel_playlist_torrents_list.set_data_items([]) self.window().edit_channel_details_playlist_torrents_header.setText("Torrents in '%s'" % playlist_info['name']) self.window().edit_channel_playlist_torrents_back.setIcon(QIcon(get_image_path('page_back.png'))) self.viewing_playlist = playlist_info self.update_playlist_torrent_list() self.window().edit_channel_details_stacked_widget.setCurrentIndex(PAGE_EDIT_CHANNEL_PLAYLIST_TORRENTS)
def initialize_discovering_page(self): svg_container = QGraphicsScene(self.window().discovering_svg_view) svg_item = QGraphicsSvgItem() svg = QSvgRenderer(get_image_path("loading_animation.svg")) svg.repaintNeeded.connect(svg_item.update) svg_item.setSharedRenderer(svg) svg_container.addItem(svg_item) self.window().discovering_svg_view.setScene(svg_container) self.window().core_manager.events_manager.discovered_channel.connect(self.on_discovered_channel)
def __init__(self, parent): QWidget.__init__(self, parent) fc_home_recommended_item.__init__(self) self.setupUi(self) self.show_torrent = True self.torrent_info = None self.channel_info = None self.download_uri = None self.dialog = None # Create the category label, shown on cells that display a torrent on the home page self.category_label = QLabel(self) self.category_label.setFixedHeight(24) self.category_label.setSizePolicy( QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed)) self.category_label.setStyleSheet(""" border: 2px solid white; border-radius: 12px; background-color: transparent; color: white; padding-left: 4px; padding-right: 4px; font-weight: bold; """) self.category_label.move(QPoint(6, 6)) self.category_label.show() # Create the dark overlay and download button over the thumbnail on hover self.dark_overlay = QWidget(self) self.dark_overlay.setStyleSheet( "background-color: rgba(0, 0, 0, 0.65);") self.dark_overlay.hide() self.download_button = QToolButton(self) self.download_button.setFixedSize(QSize(40, 40)) self.download_button.setStyleSheet(""" QToolButton { background-color: transparent; border: 2px solid white; border-radius: 20px; } QToolButton::hover { border: 2px solid #B5B5B5; } """) self.download_button.setIcon(QIcon(get_image_path('downloads.png'))) self.download_button.setIconSize(QSize(18, 18)) self.download_button.clicked.connect(self.on_download_button_clicked) self.download_button.hide()
def initialize_discovering_page(self): svg_container = QGraphicsScene(self.window().discovering_svg_view) svg_item = QGraphicsSvgItem() svg = QSvgRenderer(get_image_path("loading_animation.svg")) svg.repaintNeeded.connect(svg_item.update) svg_item.setSharedRenderer(svg) svg_container.addItem(svg_item) self.window().discovering_svg_view.setScene(svg_container) self.window().core_manager.events_manager.discovered_channel.connect( self.on_discovered_channel)
def initialize_transactions_page(self, wallets): if not self.initialized: self.window().core_manager.events_manager.market_payment_received.connect(self.on_payment) self.window().core_manager.events_manager.market_payment_sent.connect(self.on_payment) self.window().transactions_back_button.setIcon(QIcon(get_image_path('page_back.png'))) self.window().market_transactions_list.itemSelectionChanged.connect(self.on_transaction_item_clicked) self.window().market_transactions_list.sortItems(5, Qt.DescendingOrder) self.initialized = True self.window().market_payments_container.hide() self.wallets = wallets self.load_transactions()
def update_subscribe_button(self, remote_response=None): if remote_response and 'subscribed' in remote_response: self.channel_info["subscribed"] = remote_response['subscribed'] if remote_response and 'votes' in remote_response: self.channel_info["votes"] = remote_response['votes'] if self.channel_info["subscribed"]: self.subscribe_button.setIcon(QIcon(QPixmap(get_image_path('subscribed_yes.png')))) else: self.subscribe_button.setIcon(QIcon(QPixmap(get_image_path('subscribed_not.png')))) self.num_subs_label.setText(str(self.channel_info["votes"])) if self.window().tribler_settings: # It could be that the settings are not loaded yet self.credit_mining_button.setHidden(not self.window().tribler_settings["credit_mining"]["enabled"]) if self.channel_info["dispersy_cid"] in self.window().tribler_settings["credit_mining"]["sources"]: self.credit_mining_button.setIcon(QIcon(QPixmap(get_image_path('credit_mining_yes.png')))) else: self.credit_mining_button.setIcon(QIcon(QPixmap(get_image_path('credit_mining_not.png')))) else: self.credit_mining_button.hide()
def update_subscribe_button(self, remote_response=None): if remote_response and 'subscribed' in remote_response: self.channel_info["subscribed"] = remote_response['subscribed'] if remote_response and 'votes' in remote_response: self.channel_info["votes"] = remote_response['votes'] if int(self.channel_info["subscribed"]): self.subscribe_button.setIcon( QIcon(QPixmap(get_image_path('subscribed_yes.png')))) else: self.subscribe_button.setIcon( QIcon(QPixmap(get_image_path('subscribed_not.png')))) self.num_subs_label.setText(str(self.channel_info["votes"])) if self.window( ).tribler_settings: # It could be that the settings are not loaded yet self.credit_mining_button.setHidden( not self.window().tribler_settings["credit_mining"]["enabled"]) if self.channel_info["public_key"] in self.window( ).tribler_settings["credit_mining"]["sources"]: self.credit_mining_button.setIcon( QIcon(QPixmap(get_image_path('credit_mining_yes.png')))) else: self.credit_mining_button.setIcon( QIcon(QPixmap(get_image_path('credit_mining_not.png')))) else: self.credit_mining_button.hide() # Disable channel control buttons for LEGACY_ENTRY channels hide_controls = (self.channel_info["status"] == 1000) self.num_subs_label.setHidden(hide_controls) self.subscribe_button.setHidden(hide_controls or ("my_channel" in self.channel_info and self.channel_info["my_channel"])) self.credit_mining_button.setHidden(hide_controls)
def __init__(self, parent): QWidget.__init__(self, parent) fc_home_recommended_item.__init__(self) self.setupUi(self) self.show_torrent = True self.torrent_info = None self.channel_info = None self.download_uri = None self.dialog = None # Create the category label, shown on cells that display a torrent on the home page self.category_label = QLabel(self) self.category_label.setFixedHeight(24) self.category_label.setSizePolicy(QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed)) self.category_label.setStyleSheet(""" border: 2px solid white; border-radius: 12px; background-color: transparent; color: white; padding-left: 4px; padding-right: 4px; font-weight: bold; """) self.category_label.move(QPoint(6, 6)) self.category_label.show() # Create the dark overlay and download button over the thumbnail on hover self.dark_overlay = QWidget(self) self.dark_overlay.setStyleSheet("background-color: rgba(0, 0, 0, 0.65);") self.dark_overlay.hide() self.download_button = QToolButton(self) self.download_button.setFixedSize(QSize(40, 40)) self.download_button.setStyleSheet(""" QToolButton { background-color: transparent; border: 2px solid white; border-radius: 20px; } QToolButton::hover { border: 2px solid #B5B5B5; } """) self.download_button.setIcon(QIcon(get_image_path('downloads.png'))) self.download_button.setIconSize(QSize(18, 18)) self.download_button.clicked.connect(self.on_download_button_clicked) self.download_button.hide()
def __init__(self, parent, playlist, show_controls=False, on_remove_clicked=None, on_edit_clicked=None): QWidget.__init__(self, parent) fc_playlist_list_item.__init__(self) self.setupUi(self) self.playlist_info = playlist self.edit_playlist_button.setIcon(QIcon(get_image_path("edit_white.png"))) self.remove_playlist_button.setIcon(QIcon(get_image_path("delete.png"))) self.playlist_name.setText(playlist["name"]) self.playlist_num_items.setText("%d items" % len(playlist["torrents"])) self.thumbnail_widget.initialize(playlist["name"], 24) self.controls_container.setHidden(True) self.show_controls = show_controls if on_remove_clicked is not None: self.remove_playlist_button.clicked.connect(lambda: on_remove_clicked(self)) if on_edit_clicked is not None: self.edit_playlist_button.clicked.connect(lambda: on_edit_clicked(self))
def initialize_with_channel(self, channel_info): self.channel_info = channel_info self.window().channel_preview_label.setHidden(channel_info['subscribed']) self.window().channel_back_button.setIcon(QIcon(get_image_path('page_back.png'))) self.window().channel_page_container.content_table.setFocus() # initialize the page about a channel self.window().channel_name_label.setText(channel_info['name']) self.window().num_subs_label.setText(str(channel_info['votes'])) self.window().subscription_widget.initialize_with_channel(channel_info) self.window().channel_page_container.details_container.hide() self.model.channel_pk = channel_info['public_key'] self.window().channel_torrents_filter_input.setText("") self.load_torrents()
def initialize(self): self.window().create_torrent_name_field.setText('') self.window().create_torrent_description_field.setText('') self.window().create_torrent_files_list.clear() self.window().seed_after_adding_checkbox.setChecked(True) self.window().edit_channel_create_torrent_progress_label.hide() if not self.initialized: self.window().manage_channel_create_torrent_back.setIcon(QIcon(get_image_path('page_back.png'))) self.window().create_torrent_files_list.customContextMenuRequested.connect(self.on_right_click_file_item) self.window().manage_channel_create_torrent_back.clicked.connect(self.on_create_torrent_manage_back_clicked) self.window().create_torrent_choose_files_button.clicked.connect(self.on_choose_files_clicked) self.window().create_torrent_choose_dir_button.clicked.connect(self.on_choose_dir_clicked) self.window().edit_channel_create_torrent_button.clicked.connect(self.on_create_clicked) self.initialized = True
def initialize_with_channel(self, channel_info): self.channel_info = channel_info self.window().channel_preview_label.setHidden( channel_info['subscribed']) self.window().channel_back_button.setIcon( QIcon(get_image_path('page_back.png'))) self.window().channel_page_container.content_table.setFocus() # initialize the page about a channel self.window().channel_name_label.setText(channel_info['name']) self.window().num_subs_label.setText(str(channel_info['votes'])) self.window().subscription_widget.initialize_with_channel(channel_info) self.window().channel_page_container.details_container.hide() self.model.channel_pk = channel_info['public_key'] self.window().channel_torrents_filter_input.setText("") self.load_torrents()
def initialize(self, identifier): self.channel_identifier = identifier self.window().manage_channel_create_torrent_back.setIcon( QIcon(get_image_path('page_back.png'))) self.window().create_torrent_name_field.setText('') self.window().create_torrent_description_field.setText('') self.window().create_torrent_files_list.clear() self.window( ).create_torrent_files_list.customContextMenuRequested.connect( self.on_right_click_file_item) self.window().manage_channel_create_torrent_back.clicked.connect( self.on_create_torrent_manage_back_clicked) self.window().create_torrent_choose_files_button.clicked.connect( self.on_choose_files_clicked) self.window().create_torrent_choose_dir_button.clicked.connect( self.on_choose_dir_clicked) self.window().edit_channel_create_torrent_button.clicked.connect( self.on_create_clicked)
def initialize_transactions_page(self): if not self.initialized: self.window( ).core_manager.events_manager.market_payment_received.connect( self.on_payment) self.window( ).core_manager.events_manager.market_payment_sent.connect( self.on_payment) self.window().transactions_back_button.setIcon( QIcon(get_image_path('page_back.png'))) self.window( ).market_transactions_list.itemSelectionChanged.connect( self.on_transaction_item_clicked) self.window().market_transactions_list.sortItems( 5, Qt.DescendingOrder) self.initialized = True self.window().market_payments_container.hide() self.load_transactions()
def initialize_market_page(self): if not self.initialized: self.window().market_back_button.setIcon(QIcon(get_image_path('page_back.png'))) self.window().core_manager.events_manager.received_market_ask.connect(self.on_ask) self.window().core_manager.events_manager.received_market_bid.connect(self.on_bid) self.window().core_manager.events_manager.expired_market_ask.connect(self.on_ask_timeout) self.window().core_manager.events_manager.expired_market_bid.connect(self.on_bid_timeout) self.window().core_manager.events_manager.market_payment_received.connect(self.on_payment) self.window().core_manager.events_manager.market_payment_sent.connect(self.on_payment) self.window().core_manager.events_manager.market_transaction_complete.connect(self.on_transaction_complete) self.window().create_ask_button.clicked.connect(self.on_create_ask_clicked) self.window().create_bid_button.clicked.connect(self.on_create_bid_clicked) self.window().market_currency_type_button.clicked.connect(self.on_asset_type_clicked) self.window().market_transactions_button.clicked.connect(self.on_transactions_button_clicked) self.window().market_wallets_button.clicked.connect(self.on_wallets_button_clicked) self.window().market_orders_button.clicked.connect(self.on_orders_button_clicked) self.window().market_create_wallet_button.clicked.connect(self.on_wallets_button_clicked) # Sort asks ascending and bids descending self.window().asks_list.sortItems(0, Qt.AscendingOrder) self.window().bids_list.sortItems(2, Qt.DescendingOrder) self.window().asks_list.itemSelectionChanged.connect( lambda: self.on_tick_item_clicked(self.window().asks_list)) self.window().bids_list.itemSelectionChanged.connect( lambda: self.on_tick_item_clicked(self.window().bids_list)) self.window().tick_detail_container.hide() self.window().market_create_wallet_button.hide() self.window().create_ask_button.hide() self.window().create_bid_button.hide() self.initialized = True self.load_wallets()
def __init__(self, parent, download_uri): DialogContainer.__init__(self, parent) torrent_name = download_uri if torrent_name.startswith('file:'): torrent_name = torrent_name[5:] elif torrent_name.startswith('magnet:'): torrent_name = unquote_plus(torrent_name) self.download_uri = download_uri self.has_metainfo = False gui_settings = self.window().gui_settings uic.loadUi(get_ui_file_path('startdownloaddialog.ui'), self.dialog_widget) self.dialog_widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) self.dialog_widget.browse_dir_button.clicked.connect( self.on_browse_dir_clicked) self.dialog_widget.cancel_button.clicked.connect( lambda: self.button_clicked.emit(0)) self.dialog_widget.download_button.clicked.connect( self.on_download_clicked) self.dialog_widget.select_all_files_button.clicked.connect( self.on_all_files_selected_clicked) self.dialog_widget.deselect_all_files_button.clicked.connect( self.on_all_files_deselected_clicked) self.dialog_widget.destination_input.setStyleSheet(""" QComboBox { background-color: #444; border: none; color: #C0C0C0; padding: 4px; } QComboBox::drop-down { width: 20px; border: 1px solid #999; border-radius: 2px; } QComboBox QAbstractItemView { selection-background-color: #707070; color: #C0C0C0; } QComboBox::down-arrow { width: 12px; height: 12px; image: url('%s'); } """ % get_image_path('down_arrow_input.png')) if self.window().tribler_settings: # Set the most recent download locations in the QComboBox current_settings = get_gui_setting(self.window().gui_settings, "recent_download_locations", "") if len(current_settings) > 0: recent_locations = [ url.decode('hex') for url in current_settings.split(",") ] self.dialog_widget.destination_input.addItems(recent_locations) else: self.dialog_widget.destination_input.setCurrentText( self.window().tribler_settings['download_defaults'] ['saveas']) self.dialog_widget.torrent_name_label.setText(torrent_name) self.dialog_widget.anon_download_checkbox.stateChanged.connect( self.on_anon_download_state_changed) self.dialog_widget.anon_download_checkbox\ .setChecked(self.window().tribler_settings['download_defaults']['anonymity_enabled']) self.dialog_widget.safe_seed_checkbox\ .setChecked(self.window().tribler_settings['download_defaults']['safeseeding_enabled']) self.dialog_widget.safe_seed_checkbox.setEnabled( self.dialog_widget.anon_download_checkbox.isChecked()) self.perform_files_request() self.dialog_widget.files_list_view.setHidden(True) self.dialog_widget.download_files_container.setHidden(True) self.dialog_widget.adjustSize() self.on_anon_download_state_changed(None) self.on_main_window_resize()
def enterEvent(self, _): if self.show_controls: self.controls_container.setHidden(False) self.edit_playlist_button.setIcon(QIcon(get_image_path('edit_white.png'))) self.remove_playlist_button.setIcon(QIcon(get_image_path('delete.png')))
def __init__(self, core_args=None, core_env=None, api_port=None): QMainWindow.__init__(self) QCoreApplication.setOrganizationDomain("nl") QCoreApplication.setOrganizationName("TUDelft") QCoreApplication.setApplicationName("Tribler") QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps) self.gui_settings = QSettings() api_port = api_port or int(get_gui_setting(self.gui_settings, "api_port", DEFAULT_API_PORT)) dispatcher.update_worker_settings(port=api_port) self.navigation_stack = [] self.tribler_started = False self.tribler_settings = None self.debug_window = None self.core_manager = CoreManager(api_port) self.pending_requests = {} self.pending_uri_requests = [] self.download_uri = None self.dialog = None self.new_version_dialog = None self.start_download_dialog_active = False self.request_mgr = None self.search_request_mgr = None self.search_suggestion_mgr = None self.selected_torrent_files = [] self.vlc_available = True self.has_search_results = False self.last_search_query = None self.last_search_time = None self.start_time = time.time() self.exception_handler_called = False self.token_refresh_timer = None sys.excepthook = self.on_exception uic.loadUi(get_ui_file_path('mainwindow.ui'), self) TriblerRequestManager.window = self self.tribler_status_bar.hide() # Load dynamic widgets uic.loadUi(get_ui_file_path('torrent_channel_list_container.ui'), self.channel_page_container) self.channel_torrents_list = self.channel_page_container.items_list self.channel_torrents_detail_widget = self.channel_page_container.details_tab_widget self.channel_torrents_detail_widget.initialize_details_widget() self.channel_torrents_list.itemSelectionChanged.connect(self.channel_page.clicked_item) uic.loadUi(get_ui_file_path('torrent_channel_list_container.ui'), self.search_page_container) self.search_results_list = self.search_page_container.items_list self.search_torrents_detail_widget = self.search_page_container.details_tab_widget self.search_torrents_detail_widget.initialize_details_widget() self.search_results_list.itemClicked.connect(self.on_channel_item_click) self.search_results_list.itemSelectionChanged.connect(self.search_results_page.clicked_item) self.token_balance_widget.mouseReleaseEvent = self.on_token_balance_click def on_state_update(new_state): self.loading_text_label.setText(new_state) self.core_manager.core_state_update.connect(on_state_update) self.magnet_handler = MagnetHandler(self.window) QDesktopServices.setUrlHandler("magnet", self.magnet_handler, "on_open_magnet_link") self.debug_pane_shortcut = QShortcut(QKeySequence("Ctrl+d"), self) self.debug_pane_shortcut.activated.connect(self.clicked_menu_button_debug) # Remove the focus rect on OS X for widget in self.findChildren(QLineEdit) + self.findChildren(QListWidget) + self.findChildren(QTreeWidget): widget.setAttribute(Qt.WA_MacShowFocusRect, 0) self.menu_buttons = [self.left_menu_button_home, self.left_menu_button_search, self.left_menu_button_my_channel, self.left_menu_button_subscriptions, self.left_menu_button_video_player, self.left_menu_button_downloads, self.left_menu_button_discovered] self.video_player_page.initialize_player() self.search_results_page.initialize_search_results_page() self.settings_page.initialize_settings_page() self.subscribed_channels_page.initialize() self.edit_channel_page.initialize_edit_channel_page() self.downloads_page.initialize_downloads_page() self.home_page.initialize_home_page() self.loading_page.initialize_loading_page() self.discovering_page.initialize_discovering_page() self.discovered_page.initialize_discovered_page() self.trust_page.initialize_trust_page() self.stackedWidget.setCurrentIndex(PAGE_LOADING) # Create the system tray icon if QSystemTrayIcon.isSystemTrayAvailable(): self.tray_icon = QSystemTrayIcon() use_monochrome_icon = get_gui_setting(self.gui_settings, "use_monochrome_icon", False, is_bool=True) self.update_tray_icon(use_monochrome_icon) # Create the tray icon menu menu = self.create_add_torrent_menu() show_downloads_action = QAction('Show downloads', self) show_downloads_action.triggered.connect(self.clicked_menu_button_downloads) token_balance_action = QAction('Show token balance', self) token_balance_action.triggered.connect(lambda: self.on_token_balance_click(None)) quit_action = QAction('Quit Tribler', self) quit_action.triggered.connect(self.close_tribler) menu.addSeparator() menu.addAction(show_downloads_action) menu.addAction(token_balance_action) menu.addSeparator() menu.addAction(quit_action) self.tray_icon.setContextMenu(menu) else: self.tray_icon = None self.hide_left_menu_playlist() self.left_menu_button_debug.setHidden(True) self.top_menu_button.setHidden(True) self.left_menu.setHidden(True) self.token_balance_widget.setHidden(True) self.settings_button.setHidden(True) self.add_torrent_button.setHidden(True) self.top_search_bar.setHidden(True) # Set various icons self.top_menu_button.setIcon(QIcon(get_image_path('menu.png'))) self.search_completion_model = QStringListModel() completer = QCompleter() completer.setModel(self.search_completion_model) completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion) self.item_delegate = QStyledItemDelegate() completer.popup().setItemDelegate(self.item_delegate) completer.popup().setStyleSheet(""" QListView { background-color: #404040; } QListView::item { color: #D0D0D0; padding-top: 5px; padding-bottom: 5px; } QListView::item:hover { background-color: #707070; } """) self.top_search_bar.setCompleter(completer) # Toggle debug if developer mode is enabled self.window().left_menu_button_debug.setHidden( not get_gui_setting(self.gui_settings, "debug", False, is_bool=True)) # Start Tribler self.core_manager.start(core_args=core_args, core_env=core_env) self.core_manager.events_manager.received_search_result_channel.connect( self.search_results_page.received_search_result_channel) self.core_manager.events_manager.received_search_result_torrent.connect( self.search_results_page.received_search_result_torrent) self.core_manager.events_manager.torrent_finished.connect(self.on_torrent_finished) self.core_manager.events_manager.new_version_available.connect(self.on_new_version_available) self.core_manager.events_manager.tribler_started.connect(self.on_tribler_started) self.core_manager.events_manager.events_started.connect(self.on_events_started) self.core_manager.events_manager.low_storage_signal.connect(self.on_low_storage) # Install signal handler for ctrl+c events def sigint_handler(*_): self.close_tribler() signal.signal(signal.SIGINT, sigint_handler) self.installEventFilter(self.video_player_page) # Resize the window according to the settings center = QApplication.desktop().availableGeometry(self).center() pos = self.gui_settings.value("pos", QPoint(center.x() - self.width() * 0.5, center.y() - self.height() * 0.5)) size = self.gui_settings.value("size", self.size()) self.move(pos) self.resize(size) self.show()
def __init__(self, core_args=None, core_env=None, api_port=None): QMainWindow.__init__(self) QCoreApplication.setOrganizationDomain("nl") QCoreApplication.setOrganizationName("TUDelft") QCoreApplication.setApplicationName("Tribler") QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps) self.gui_settings = QSettings() api_port = api_port or int(get_gui_setting(self.gui_settings, "api_port", DEFAULT_API_PORT)) dispatcher.update_worker_settings(port=api_port) self.navigation_stack = [] self.tribler_started = False self.tribler_settings = None self.debug_window = None self.core_manager = CoreManager(api_port) self.pending_requests = {} self.pending_uri_requests = [] self.download_uri = None self.dialog = None self.new_version_dialog = None self.start_download_dialog_active = False self.request_mgr = None self.search_request_mgr = None self.search_suggestion_mgr = None self.selected_torrent_files = [] self.vlc_available = True self.has_search_results = False self.last_search_query = None self.last_search_time = None self.start_time = time.time() self.exception_handler_called = False self.token_refresh_timer = None self.shutdown_timer = None self.add_torrent_url_dialog_active = False sys.excepthook = self.on_exception uic.loadUi(get_ui_file_path('mainwindow.ui'), self) TriblerRequestManager.window = self self.tribler_status_bar.hide() self.token_balance_widget.mouseReleaseEvent = self.on_token_balance_click def on_state_update(new_state): self.loading_text_label.setText(new_state) self.core_manager.core_state_update.connect(on_state_update) self.magnet_handler = MagnetHandler(self.window) QDesktopServices.setUrlHandler("magnet", self.magnet_handler, "on_open_magnet_link") self.debug_pane_shortcut = QShortcut(QKeySequence("Ctrl+d"), self) self.debug_pane_shortcut.activated.connect(self.clicked_menu_button_debug) self.import_torrent_shortcut = QShortcut(QKeySequence("Ctrl+o"), self) self.import_torrent_shortcut.activated.connect(self.on_add_torrent_browse_file) self.add_torrent_url_shortcut = QShortcut(QKeySequence("Ctrl+i"), self) self.add_torrent_url_shortcut.activated.connect(self.on_add_torrent_from_url) # Remove the focus rect on OS X for widget in self.findChildren(QLineEdit) + self.findChildren(QListWidget) + self.findChildren(QTreeWidget): widget.setAttribute(Qt.WA_MacShowFocusRect, 0) self.menu_buttons = [self.left_menu_button_home, self.left_menu_button_search, self.left_menu_button_my_channel, self.left_menu_button_subscriptions, self.left_menu_button_video_player, self.left_menu_button_downloads, self.left_menu_button_discovered] self.video_player_page.initialize_player() self.search_results_page.initialize_search_results_page(self.gui_settings) self.settings_page.initialize_settings_page() self.subscribed_channels_page.initialize() self.edit_channel_page.initialize_edit_channel_page(self.gui_settings) self.downloads_page.initialize_downloads_page() self.home_page.initialize_home_page() self.loading_page.initialize_loading_page() self.discovering_page.initialize_discovering_page() self.discovered_page.initialize_discovered_page(self.gui_settings) self.channel_page.initialize_channel_page(self.gui_settings) self.trust_page.initialize_trust_page() self.token_mining_page.initialize_token_mining_page() self.stackedWidget.setCurrentIndex(PAGE_LOADING) # Create the system tray icon if QSystemTrayIcon.isSystemTrayAvailable(): self.tray_icon = QSystemTrayIcon() use_monochrome_icon = get_gui_setting(self.gui_settings, "use_monochrome_icon", False, is_bool=True) self.update_tray_icon(use_monochrome_icon) # Create the tray icon menu menu = self.create_add_torrent_menu() show_downloads_action = QAction('Show downloads', self) show_downloads_action.triggered.connect(self.clicked_menu_button_downloads) token_balance_action = QAction('Show token balance', self) token_balance_action.triggered.connect(lambda: self.on_token_balance_click(None)) quit_action = QAction('Quit Tribler', self) quit_action.triggered.connect(self.close_tribler) menu.addSeparator() menu.addAction(show_downloads_action) menu.addAction(token_balance_action) menu.addSeparator() menu.addAction(quit_action) self.tray_icon.setContextMenu(menu) else: self.tray_icon = None self.hide_left_menu_playlist() self.left_menu_button_debug.setHidden(True) self.top_menu_button.setHidden(True) self.left_menu.setHidden(True) self.token_balance_widget.setHidden(True) self.settings_button.setHidden(True) self.add_torrent_button.setHidden(True) self.top_search_bar.setHidden(True) # Set various icons self.top_menu_button.setIcon(QIcon(get_image_path('menu.png'))) self.search_completion_model = QStringListModel() completer = QCompleter() completer.setModel(self.search_completion_model) completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion) self.item_delegate = QStyledItemDelegate() completer.popup().setItemDelegate(self.item_delegate) completer.popup().setStyleSheet(""" QListView { background-color: #404040; } QListView::item { color: #D0D0D0; padding-top: 5px; padding-bottom: 5px; } QListView::item:hover { background-color: #707070; } """) self.top_search_bar.setCompleter(completer) # Toggle debug if developer mode is enabled self.window().left_menu_button_debug.setHidden( not get_gui_setting(self.gui_settings, "debug", False, is_bool=True)) # Start Tribler self.core_manager.start(core_args=core_args, core_env=core_env) self.core_manager.events_manager.torrent_finished.connect(self.on_torrent_finished) self.core_manager.events_manager.new_version_available.connect(self.on_new_version_available) self.core_manager.events_manager.tribler_started.connect(self.on_tribler_started) self.core_manager.events_manager.events_started.connect(self.on_events_started) self.core_manager.events_manager.low_storage_signal.connect(self.on_low_storage) self.core_manager.events_manager.credit_mining_signal.connect(self.on_credit_mining_error) self.core_manager.events_manager.tribler_shutdown_signal.connect(self.on_tribler_shutdown_state_update) self.core_manager.events_manager.upgrader_tick.connect( lambda text: self.show_status_bar("Upgrading Tribler database: " + text)) self.core_manager.events_manager.upgrader_finished.connect( lambda _: self.hide_status_bar()) self.core_manager.events_manager.received_search_result.connect( self.search_results_page.received_search_result) # Install signal handler for ctrl+c events def sigint_handler(*_): self.close_tribler() signal.signal(signal.SIGINT, sigint_handler) self.installEventFilter(self.video_player_page) # Resize the window according to the settings center = QApplication.desktop().availableGeometry(self).center() pos = self.gui_settings.value("pos", QPoint(center.x() - self.width() * 0.5, center.y() - self.height() * 0.5)) size = self.gui_settings.value("size", self.size()) self.move(pos) self.resize(size) self.show()
def __init__(self): QMainWindow.__init__(self) self.navigation_stack = [] self.feedback_dialog_is_open = False self.tribler_started = False self.tribler_settings = None self.debug_window = None self.core_manager = CoreManager() self.pending_requests = {} self.pending_uri_requests = [] self.download_uri = None self.dialog = None self.start_download_dialog_active = False self.request_mgr = None self.search_request_mgr = None self.search_suggestion_mgr = None self.selected_torrent_files = [] self.vlc_available = True self.has_search_results = False self.start_time = time.time() sys.excepthook = self.on_exception uic.loadUi(get_ui_file_path('mainwindow.ui'), self) TriblerRequestManager.window = self self.tribler_status_bar.hide() self.magnet_handler = MagnetHandler(self.window) QDesktopServices.setUrlHandler("magnet", self.magnet_handler, "on_open_magnet_link") QCoreApplication.setOrganizationDomain("nl") QCoreApplication.setOrganizationName("TUDelft") QCoreApplication.setApplicationName("Tribler") QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps) self.read_settings() # Remove the focus rect on OS X for widget in self.findChildren(QLineEdit) + self.findChildren( QListWidget) + self.findChildren(QTreeWidget): widget.setAttribute(Qt.WA_MacShowFocusRect, 0) self.menu_buttons = [ self.left_menu_button_home, self.left_menu_button_search, self.left_menu_button_my_channel, self.left_menu_button_subscriptions, self.left_menu_button_video_player, self.left_menu_button_downloads, self.left_menu_button_discovered ] self.video_player_page.initialize_player() self.search_results_page.initialize_search_results_page() self.settings_page.initialize_settings_page() self.subscribed_channels_page.initialize() self.edit_channel_page.initialize_edit_channel_page() self.downloads_page.initialize_downloads_page() self.home_page.initialize_home_page() self.loading_page.initialize_loading_page() self.discovering_page.initialize_discovering_page() self.discovered_page.initialize_discovered_page() self.trust_page.initialize_trust_page() self.stackedWidget.setCurrentIndex(PAGE_LOADING) # Create the system tray icon if QSystemTrayIcon.isSystemTrayAvailable(): self.tray_icon = QSystemTrayIcon() use_monochrome_icon = get_gui_setting(self.gui_settings, "use_monochrome_icon", False, is_bool=True) self.update_tray_icon(use_monochrome_icon) self.hide_left_menu_playlist() self.left_menu_button_debug.setHidden(True) self.top_menu_button.setHidden(True) self.left_menu.setHidden(True) self.trust_button.setHidden(True) self.settings_button.setHidden(True) self.add_torrent_button.setHidden(True) self.top_search_bar.setHidden(True) # Set various icons self.top_menu_button.setIcon(QIcon(get_image_path('menu.png'))) self.search_completion_model = QStringListModel() completer = QCompleter() completer.setModel(self.search_completion_model) completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion) self.item_delegate = QStyledItemDelegate() completer.popup().setItemDelegate(self.item_delegate) completer.popup().setStyleSheet(""" QListView { background-color: #404040; } QListView::item { color: #D0D0D0; padding-top: 5px; padding-bottom: 5px; } QListView::item:hover { background-color: #707070; } """) self.top_search_bar.setCompleter(completer) # Toggle debug if developer mode is enabled self.window().left_menu_button_debug.setHidden(not get_gui_setting( self.gui_settings, "debug", False, is_bool=True)) self.core_manager.start() self.core_manager.events_manager.received_search_result_channel.connect( self.search_results_page.received_search_result_channel) self.core_manager.events_manager.received_search_result_torrent.connect( self.search_results_page.received_search_result_torrent) self.core_manager.events_manager.torrent_finished.connect( self.on_torrent_finished) self.core_manager.events_manager.new_version_available.connect( self.on_new_version_available) self.core_manager.events_manager.tribler_started.connect( self.on_tribler_started) # Install signal handler for ctrl+c events def sigint_handler(*_): self.close_tribler() signal.signal(signal.SIGINT, sigint_handler) self.installEventFilter(self.video_player_page) self.show()
def initialize_player(self): vlc_available = True vlc = None try: from TriblerGUI import vlc except OSError: vlc_available = False if vlc and vlc.plugin_path: os.environ['VLC_PLUGIN_PATH'] = vlc.plugin_path if not vlc_available: self.window().vlc_available = False self.window().left_menu_button_video_player.setHidden(True) return self.instance = vlc.Instance() if not self.instance: self.window().vlc_available = False self.window().left_menu_button_video_player.setHidden(True) return self.mediaplayer = self.instance.media_player_new() self.window().video_player_widget.should_hide_video_widgets.connect( self.hide_video_widgets) self.window().video_player_widget.should_show_video_widgets.connect( self.show_video_widgets) self.window( ).video_player_position_slider.should_change_video_position.connect( self.on_should_change_video_time) self.window().video_player_volume_slider.valueChanged.connect( self.on_volume_change) self.window().video_player_volume_slider.setValue( self.mediaplayer.audio_get_volume()) self.window().video_player_volume_slider.setFixedWidth(0) self.window().video_player_play_pause_button.clicked.connect( self.on_play_pause_button_click) self.window().video_player_volume_button.clicked.connect( self.on_volume_button_click) self.window().video_player_full_screen_button.clicked.connect( self.on_full_screen_button_click) # Create play/pause and volume button images self.play_icon = QIcon(QPixmap(get_image_path("play.png"))) self.pause_icon = QIcon(QPixmap(get_image_path("pause.png"))) self.volume_on_icon = QIcon(QPixmap(get_image_path("volume_on.png"))) self.volume_off_icon = QIcon(QPixmap(get_image_path("volume_off.png"))) self.window().video_player_play_pause_button.setIcon(self.play_icon) self.window().video_player_volume_button.setIcon(self.volume_on_icon) self.window().video_player_full_screen_button.setIcon( QIcon(QPixmap(get_image_path("full_screen.png")))) self.window().video_player_info_button.setIcon( QIcon(QPixmap(get_image_path("info.png")))) self.window().video_player_info_button.hide() if sys.platform.startswith('linux'): self.mediaplayer.set_xwindow( self.window().video_player_widget.winId()) elif sys.platform == "win32": self.mediaplayer.set_hwnd( self.window().video_player_widget.winId()) elif sys.platform == "darwin": self.mediaplayer.set_nsobject( int(self.window().video_player_widget.winId())) self.manager = self.mediaplayer.event_manager() self.manager.event_attach(vlc.EventType.MediaPlayerBuffering, self.on_vlc_player_buffering) self.manager.event_attach(vlc.EventType.MediaPlayerPlaying, self.on_vlc_player_playing) self.update_timer = QTimer() self.update_timer.timeout.connect(self.on_update_timer_tick) self.update_timer.start(500) self.window().left_menu_playlist.playing_item_change.connect( self.change_playing_index) self.window().left_menu_playlist.item_should_play.connect( self.on_play_pause_button_click) self.window().left_menu_playlist.list_loaded.connect( self.on_files_list_loaded) self.window().video_player_play_pause_button.setEnabled(False)
def __init__(self, column_name, parent=None): ToggleControl.__init__(self, column_name, QIcon(get_image_path("subscribed_yes.png")), QIcon(get_image_path("subscribed_not.png")), QIcon(get_image_path("subscribed.png")), parent=parent)
class CommitStatusControl(QObject): # Column-level controls are stateless collections of methods for visualizing cell data and # triggering corresponding events. icon_border = 4 icon_size = 16 h = icon_size + 2 * icon_border w = h size = QSize(w, h) clicked = pyqtSignal(QModelIndex) new_icon = QIcon(get_image_path("plus.svg")) committed_icon = QIcon(get_image_path("check.svg")) todelete_icon = QIcon(get_image_path("minus.svg")) delete_action_icon = QIcon(get_image_path("delete.png")) restore_action_icon = QIcon(get_image_path("undo.svg")) def __init__(self, column_name, parent=None): QObject.__init__(self, parent=parent) self.column_name = column_name self.rect = QRect() self.last_index = QModelIndex() def paint(self, painter, rect, index): data_item = index.model().data_items[index.row()] if self.column_name not in data_item or data_item[self.column_name] == '': return state = data_item[self.column_name] icon = QIcon() if state == COMMIT_STATUS_COMMITTED: icon = self.committed_icon elif state == COMMIT_STATUS_NEW: icon = self.new_icon elif state == COMMIT_STATUS_TODELETE: icon = self.todelete_icon x = rect.left() + (rect.width() - self.w) / 2 y = rect.top() + (rect.height() - self.h) / 2 icon_rect = QRect(x, y, self.w, self.h) icon.paint(painter, icon_rect) self.rect = rect def paint_hover(self, painter, rect, index): data_item = index.model().data_items[index.row()] if self.column_name not in data_item or data_item[self.column_name] == '': return state = data_item[self.column_name] icon = QIcon() if state == COMMIT_STATUS_COMMITTED: icon = self.delete_action_icon elif state == COMMIT_STATUS_NEW: icon = self.delete_action_icon elif state == COMMIT_STATUS_TODELETE: icon = self.restore_action_icon x = rect.left() + (rect.width() - self.w) / 2 y = rect.top() + (rect.height() - self.h) / 2 icon_rect = QRect(x, y, self.w, self.h) icon.paint(painter, icon_rect) self.rect = rect def check_clicked(self, event, _, __, index): data_item = index.model().data_items[index.row()] if event.type() == QEvent.MouseButtonRelease and \ index.model().column_position[self.column_name] == index.column() and \ data_item[self.column_name] != '': self.clicked.emit(index) return True return False def size_hint(self, _, __): return self.size def on_mouse_moved(self, _, index): if self.last_index != index: # Handle the case when the cursor leaves the table if not index.model(): self.last_index = index return True elif index.model().column_position[self.column_name] == index.column(): self.last_index = index return True return False
def initialize_player(self): vlc_available = True vlc = None try: from TriblerGUI import vlc except OSError: vlc_available = False if vlc and vlc.plugin_path: os.environ['VLC_PLUGIN_PATH'] = vlc.plugin_path if not vlc_available: self.window().vlc_available = False self.window().left_menu_button_video_player.setHidden(True) return self.instance = vlc.Instance() if not self.instance: self.window().vlc_available = False self.window().left_menu_button_video_player.setHidden(True) return self.mediaplayer = self.instance.media_player_new() self.window().video_player_widget.should_hide_video_widgets.connect(self.hide_video_widgets) self.window().video_player_widget.should_show_video_widgets.connect(self.show_video_widgets) self.window().video_player_position_slider.should_change_video_position.connect( self.on_should_change_video_time) self.window().video_player_volume_slider.valueChanged.connect(self.on_volume_change) self.window().video_player_volume_slider.setValue(self.mediaplayer.audio_get_volume()) self.window().video_player_volume_slider.setFixedWidth(0) self.window().video_player_play_pause_button.clicked.connect(self.on_play_pause_button_click) self.window().video_player_volume_button.clicked.connect(self.on_volume_button_click) self.window().video_player_full_screen_button.clicked.connect(self.on_full_screen_button_click) # Create play/pause and volume button images self.play_icon = QIcon(QPixmap(get_image_path("play.png"))) self.pause_icon = QIcon(QPixmap(get_image_path("pause.png"))) self.volume_on_icon = QIcon(QPixmap(get_image_path("volume_on.png"))) self.volume_off_icon = QIcon(QPixmap(get_image_path("volume_off.png"))) self.window().video_player_play_pause_button.setIcon(self.play_icon) self.window().video_player_volume_button.setIcon(self.volume_on_icon) self.window().video_player_full_screen_button.setIcon(QIcon(QPixmap(get_image_path("full_screen.png")))) self.window().video_player_info_button.setIcon(QIcon(QPixmap(get_image_path("info.png")))) self.window().video_player_info_button.hide() if sys.platform.startswith('linux'): self.mediaplayer.set_xwindow(self.window().video_player_widget.winId()) elif sys.platform == "win32": self.mediaplayer.set_hwnd(self.window().video_player_widget.winId()) elif sys.platform == "darwin": self.mediaplayer.set_nsobject(int(self.window().video_player_widget.winId())) self.manager = self.mediaplayer.event_manager() self.manager.event_attach(vlc.EventType.MediaPlayerBuffering, self.on_vlc_player_buffering) self.manager.event_attach(vlc.EventType.MediaPlayerPlaying, self.on_vlc_player_playing) self.update_timer = QTimer() self.update_timer.timeout.connect(self.on_update_timer_tick) self.update_timer.start(500) self.window().left_menu_playlist.playing_item_change.connect(self.change_playing_index) self.window().left_menu_playlist.item_should_play.connect(self.on_play_pause_button_click) self.window().left_menu_playlist.list_loaded.connect(self.on_files_list_loaded) self.window().video_player_play_pause_button.setEnabled(False)
def __init__(self, parent, download_uri): DialogContainer.__init__(self, parent) torrent_name = download_uri if torrent_name.startswith('file:'): torrent_name = torrent_name[5:] elif torrent_name.startswith('magnet:'): torrent_name = unquote_plus(torrent_name) self.download_uri = download_uri self.has_metainfo = False uic.loadUi(get_ui_file_path('startdownloaddialog.ui'), self.dialog_widget) self.dialog_widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) self.dialog_widget.browse_dir_button.clicked.connect(self.on_browse_dir_clicked) self.dialog_widget.cancel_button.clicked.connect(lambda: self.button_clicked.emit(0)) self.dialog_widget.download_button.clicked.connect(self.on_download_clicked) self.dialog_widget.select_all_files_button.clicked.connect(self.on_all_files_selected_clicked) self.dialog_widget.deselect_all_files_button.clicked.connect(self.on_all_files_deselected_clicked) self.dialog_widget.destination_input.setStyleSheet(""" QComboBox { background-color: #444; border: none; color: #C0C0C0; padding: 4px; } QComboBox::drop-down { width: 20px; border: 1px solid #999; border-radius: 2px; } QComboBox QAbstractItemView { selection-background-color: #707070; color: #C0C0C0; } QComboBox::down-arrow { width: 12px; height: 12px; image: url('%s'); } """ % get_image_path('down_arrow_input.png')) if self.window().tribler_settings: # Set the most recent download locations in the QComboBox current_settings = get_gui_setting(self.window().gui_settings, "recent_download_locations", "") if len(current_settings) > 0: recent_locations = [url.decode('hex').decode('utf-8') for url in current_settings.split(",")] self.dialog_widget.destination_input.addItems(recent_locations) else: self.dialog_widget.destination_input.setCurrentText( self.window().tribler_settings['download_defaults']['saveas']) self.dialog_widget.torrent_name_label.setText(torrent_name) self.dialog_widget.anon_download_checkbox.stateChanged.connect(self.on_anon_download_state_changed) self.dialog_widget.anon_download_checkbox\ .setChecked(self.window().tribler_settings['download_defaults']['anonymity_enabled']) self.dialog_widget.safe_seed_checkbox\ .setChecked(self.window().tribler_settings['download_defaults']['safeseeding_enabled']) self.dialog_widget.safe_seed_checkbox.setEnabled(self.dialog_widget.anon_download_checkbox.isChecked()) self.perform_files_request() self.dialog_widget.files_list_view.setHidden(True) self.dialog_widget.download_files_container.setHidden(True) self.dialog_widget.adjustSize() self.on_anon_download_state_changed(None) self.on_main_window_resize()