Example #1
0
def _disconnect_icon():
    """Determine which icon to display if disconnect menu is toggled on/off.

    Returns:
        QtGui.QIcon
    """
    # Clipboard _disconnected and ignoring changes
    if settings.get_disconnect():
        return QtGui.QIcon.fromTheme('network-offline',
               QtGui.QIcon(resource_filename('icons/disconnect.png')))
    # Clipboard connected and monitoring
    else:
        return QtGui.QIcon.fromTheme('network-transmit-receive', 
               QtGui.QIcon(resource_filename('icons/connect.png')))
Example #2
0
    def setup_menu(self):
        """Create right click menu.
        """
        # Right click menu
        menu = QtGui.QMenu()

        # Open or hide main window
        toggle_act = menu.addAction(QtGui.QIcon.fromTheme('search', 
                                    QtGui.QIcon(
                                        resource_filename('icons/search.png'))),
                                    'Toggle')

        menu.addSeparator()

        # Disconnect from OS clipboard(s)
        self.disconnect_act = menu.addAction(_disconnect_icon(), 'Disconnect')
        self.disconnect_act.setCheckable(True)
        self.disconnect_act.setChecked(settings.get_disconnect())

        # Open settings dialog
        settings_act = menu.addAction(QtGui.QIcon.fromTheme('emblem-system', 
                                      QtGui.QIcon(resource_filename(
                                        'icons/settings.png'))), 'Settings')

        # Open about dialog
        about_act = menu.addAction(QtGui.QIcon.fromTheme('help-about', 
                                   QtGui.QIcon(
                                        resource_filename('icons/about.png'))), 
                                   'About')

        menu.addSeparator()

        # Exit application
        exit_act = menu.addAction(QtGui.QIcon.fromTheme('application-exit', 
                                  QtGui.QIcon(
                                    resource_filename('icons/exit.png'))),
                                  'Quit')

        # Connect menu triggered action to functions
        self.connect(toggle_act, QtCore.SIGNAL('triggered()'), 
                     self._emit_toggle_window)
        self.connect(self.disconnect_act, QtCore.SIGNAL('triggered()'), 
                     self._disconnect)
        self.connect(settings_act, QtCore.SIGNAL('triggered()'), 
                     self._emit_open_settings)
        self.connect(about_act, QtCore.SIGNAL("triggered()"), self._about)
        self.connect(exit_act, QtCore.SIGNAL("triggered()"), self._exit)

        self.setContextMenu(menu)
Example #3
0
    def __init__(self, parent=None):
        super(SystemTrayIcon, self).__init__(parent)
        self.parent = parent

        self.setIcon(QtGui.QIcon(resource_filename('icons/clipmanager.ico')))
        self.setToolTip(APP_NAME)
        self.setup_menu()
Example #4
0
 def __init__(self, parent=None):
     super(PreviewDialog, self).__init__(parent)
     self.parent = parent
     
     self.setWindowIcon(QtGui.QIcon(resource_filename('icons/clipmanager.ico')))
     self.setWindowTitle('Preview')
     self.resize(QtCore.QSize(500,300))
     self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
Example #5
0
    def setup_ui(self):
        """Display application name, version, company, and url.
        """
        app_name = QtCore.QCoreApplication.applicationName()
        app_version = QtCore.QCoreApplication.applicationVersion()
        app_org = QtCore.QCoreApplication.organizationName()
        app_domain = QtCore.QCoreApplication.organizationDomain()

        # Application logo
        # app_pixmap = QtGui.QPixmap('icons/app.ico')
        # scale_size = QtCore.QSize(50, 50)
        # app_pixmap = app_pixmap.scaled(scale_size, QtCore.Qt.IgnoreAspectRatio, 
        #                                QtCore.Qt.FastTransformation)
        # app_logo = QtGui.QLabel()
        # app_logo.setFixedSize(scale_size)
        # app_logo.setPixmap(app_pixmap)
        # app_logo.setAlignment(QtCore.Qt.AlignHCenter)

        # Company url. Todo: Remove mailto when I have a domain/company name
        company_url = QtGui.QLabel('<a href="%s">%s</a>' % (app_domain, 
                                                            app_domain))
        company_url.setTextFormat(QtCore.Qt.RichText)
        company_url.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction)
        company_url.setOpenExternalLinks(True)

        with open (resource_filename('license.txt'), 'r') as license_file:
            about_text = license_file.read()

        self.about_doc = QtGui.QTextEdit()
        self.about_doc.setReadOnly(True)
        self.about_doc.setPlainText(about_text)
        # about_doc.setHtml(about_text)

        # Close button
        button_box = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Close)

        layout = QtGui.QGridLayout()
        # layout.addWidget(app_logo, 0, 0, 4, 1)

        layout.addWidget(QtGui.QLabel('Name:'), 0, 0)
        layout.addWidget(QtGui.QLabel(app_name), 0, 1)

        layout.addWidget(QtGui.QLabel('Version:'), 1, 0)
        layout.addWidget(QtGui.QLabel(app_version), 1, 1)

        layout.addWidget(QtGui.QLabel('Company:'), 2, 0)
        layout.addWidget(QtGui.QLabel(app_org), 2, 1)

        layout.addWidget(QtGui.QLabel('Url:'), 3, 0)
        layout.addWidget(company_url, 3, 1)

        layout.addWidget(self.about_doc, 4, 0, 1, 4)
        layout.addWidget(button_box, 5, 0, 1, 4)

        self.setLayout(layout)

        button_box.rejected.connect(self.close)
Example #6
0
    def __init__(self, parent=None):
        super(SettingsDialog, self).__init__(parent)
        self.parent = parent

        self.setWindowIcon(QtGui.QIcon(resource_filename('icons/clipmanager.ico')))
        self.setWindowTitle('Settings')
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

        self.setup_ui()
Example #7
0
    def __init__(self, minimize=False):
        """Initialize main window, systemtray, global hotkey, and signals.

        Args:
            minimize: True, minimize to system tray.
                      False, bring window to front.
        """
        super(MainWindow, self).__init__()
        self.setWindowTitle(APP_NAME)
        self.setWindowIcon(QtGui.QIcon(utils.resource_filename('icons/clipmanager.ico')))

        # Remove minimize and maximize buttons from window title
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint|
                            QtCore.Qt.CustomizeWindowHint|
                            QtCore.Qt.WindowCloseButtonHint)

        # Connect to database and create tables
        self.db = database.create_connection(STORAGE_PATH)
        database.create_tables()

        # Create main widget that holds contents of clipboard history
        self.main_widget = MainWidget(self) 
        self.setCentralWidget(self.main_widget)

        # Create system tray icon
        if not QtGui.QSystemTrayIcon.isSystemTrayAvailable():
            logging.warn('cannot find a system tray.')
            QtGui.QMessageBox.warning(self, 'System Tray',
                                      'Cannot find a system tray.')
        
        self.tray_icon = systemtray.SystemTrayIcon(self)
        self.tray_icon.activated.connect(self._on_icon_activated)
        self.tray_icon.show()

        # Return OS specific global hot key binder and set it
        self.key_binder = hotkey.Binder(self)
        self._set_hot_key()

        # Toggle window from system tray right click menu
        self.connect(self.tray_icon, QtCore.SIGNAL('toggle-window()'),
                     self._on_toggle_window)

        # Open settings dialog from right click menu on system tray and view
        self.connect(self.tray_icon, QtCore.SIGNAL('open-settings()'), 
                     self._on_open_settings)

        self.connect(self.main_widget, QtCore.SIGNAL('open-settings()'), 
                     self._on_open_settings)

        # Show window
        if not minimize:
            self._on_toggle_window()
Example #8
0
    def __init__(self, parent=None):
        self._is_playing = False
        self._is_recording = False

        self._icon_blocked = QtGui.QIcon(utils.resource_filename(ICON_BLOCKED))
        self._icon_playing = QtGui.QIcon(utils.resource_filename(ICON_PLAYING))
        self._icon_paused = QtGui.QIcon(utils.resource_filename(ICON_PAUSED))
        self._icon_playing_and_recording = QtGui.QIcon(utils.resource_filename(ICON_PLAYING_AND_RECORDING))
        self._last_icon = None

        QtGui.QSystemTrayIcon.__init__(self, self._icon_playing, parent)

        self._last_tooltip = ""
        self._last_song_title = ""

        menu = QtGui.QMenu(parent)
        self._play_action = menu.addAction("Play", self.on_play_click)
        self._pause_action = menu.addAction("Pause", self.on_pause_click)

        menu.addSeparator()
        self._current_song_menu = menu.addMenu("Current song")
        self._add_to_fav_action = self._current_song_menu.addAction(
            "Add to favourites",
            self.on_add_to_fav_click
        )
        self._search_for_lyrics_action = self._current_song_menu.addAction(
            "Search for lyrics online", self.on_search_for_lyrics_click
        )
        self._current_song_menu.addSeparator()
        self._blacklist_action = self._current_song_menu.addAction(
            "Mark as advertisement (Blacklist)",
            self.on_blacklist_click
        )
        self._current_song_menu.addSeparator()
        self._start_recording_action = self._current_song_menu.addAction(
            "Record this song",
            self.on_record_click
        )

        menu.addSeparator()
        self._stations_menu = menu.addMenu("Stations")
        for station in config.stations:
            item = self._stations_menu.addAction(station['name'], functools.partial(self.on_station_select, station))
            item.setCheckable(True)

        menu.addSeparator()
        self._manage_menu = menu.addMenu("Manage")
        self._manage_blacklist_action = self._manage_menu.addAction(
            "Blacklist patterns...",
            self.on_manage_blacklist_click
        )
        self._manage_favourites_action = self._manage_menu.addAction(
            "Favourites...",
            self.on_manage_favourites_click
        )

        menu.addSeparator()
        self._exit_action = menu.addAction("Exit", self.on_exit_click)

        self.setContextMenu(menu)

        self.activated.connect(self.on_icon_click)
        self.show()

        dispatchers.player.station_changed += self.on_station_changed
        dispatchers.player.playing_state_changed += self.on_playing_state_changed
        dispatchers.player.song_changed += self.on_song_changed
        dispatchers.recorder.recording_stopped += self.on_recording_stopped
        dispatchers.recorder.recording_state_changed += self.on_recording_state_changed
Example #9
0
    def _create_context_menu(self):
        """Create right click menu item for items in list.
        """
        self.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)

        # Set item to clipboard
        apply_act = QtGui.QAction(QtGui.QIcon.fromTheme('list-add', 
                                  QtGui.QIcon(
                                    resource_filename('icons/add.png'))), 
                                  'Set to clipboard', self)
        apply_act.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Return))

        # Preview item's contents
        preview_act = QtGui.QAction(QtGui.QIcon.fromTheme('document', 
                                    QtGui.QIcon(
                                      resource_filename('icons/document.png'))), 
                                    'Preview', self)
        preview_act.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_F11))

        # Delete item
        delete_act = QtGui.QAction(QtGui.QIcon.fromTheme('list-remove', 
                                   QtGui.QIcon(
                                        resource_filename('icons/remove.png'))),
                                   'Delete', self)
        delete_act.setShortcut(QtGui.QKeySequence.Delete)

        seperator_1 = QtGui.QAction(self)
        seperator_1.setSeparator(True)

        # Open settings dialog
        settings_act = QtGui.QAction(QtGui.QIcon.fromTheme('emblem-system', 
                                     QtGui.QIcon(
                                      resource_filename('icons/settings.png'))),
                                     'Settings', self)

        seperator_2 = QtGui.QAction(self)
        seperator_2.setSeparator(True)

        # Exit
        exit_act = QtGui.QAction(QtGui.QIcon.fromTheme('application-exit', 
                                 QtGui.QIcon(
                                         resource_filename('icons/exit.png'))), 
                                 'Quit', self)

        self.addAction(apply_act)
        self.addAction(preview_act)
        self.addAction(delete_act)
        self.addAction(seperator_2)
        self.addAction(settings_act)
        self.addAction(seperator_1)
        self.addAction(exit_act)

        self.connect(apply_act, QtCore.SIGNAL('triggered()'), 
                     self._emit_set_clipboard)
        self.connect(preview_act, QtCore.SIGNAL('triggered()'), 
                     self._emit_open_preview)
        self.connect(delete_act, QtCore.SIGNAL('triggered()'),
                     self._delete_rows)
        self.connect(settings_act, QtCore.SIGNAL('triggered()'), 
                     self._emit_open_settings)
        self.connect(exit_act, QtCore.SIGNAL('triggered()'), self._exit)
Example #10
0
    def __init__(self, parent=None):        
        super(MainWidget, self).__init__(parent)
        self.parent = parent

        # Ignore clipboard change when user sets item to clipboard
        self.ignore_created = False

        # Monitor clipboards
        self.clipboard_monitor = clipboards.ClipBoards(self)

        # Create view, model, and proxy
        self.view_main = view.ListView(self)
        self.model_main = model.MainSqlTableModel(self)
        
        self.proxy_main = searchbox.SearchFilterProxyModel(self)
        self.proxy_main.setSourceModel(self.model_main)

        # self.proxy_main = QtGui.QSortFilterProxyModel(self)
        # self.proxy_main.setFilterKeyColumn(TITLEFULL)
        # self.proxy_main.setSourceModel(self.model_main)
        # self.proxy_main.setDynamicSortFilter(True)
        # self.proxy_main.setFilterCaseSensitivity(QtCore.Qt.CaseInsensitive)

        self.view_main.setModel(self.proxy_main)
        self.view_main.setModelColumn(TITLESHORT)
        
        # Pass view and proxy pointers to search box class
        self.search_box = searchbox.SearchBox(self.view_main, self.proxy_main)

        settings_button = QtGui.QPushButton(self)
        settings_button.setIcon(QtGui.QIcon.fromTheme('emblem-system', 
                                QtGui.QIcon(
                                  utils.resource_filename('icons/settings.png')
                                )))
        settings_button.setToolTip('Settings...')

        # Create layout
        layout = QtGui.QGridLayout(self)
        layout.addWidget(self.search_box, 0, 0)
        layout.addWidget(settings_button, 0, 1)
        layout.addWidget(self.view_main, 1, 0, 1, 2)
        self.setLayout(layout)

        # Set clipboard contents if return pressed or from right click menu
        self.connect(self.search_box, QtCore.SIGNAL('returnPressed()'), 
                     self.on_set_clipboard)
        
        # Search proxy model
        self.connect(self.search_box, QtCore.SIGNAL('textChanged(QString)'), 
                     self.proxy_main.setFilterFixedString)

        # Check selection in view during search
        self.connect(self.search_box, QtCore.SIGNAL('textChanged(QString)'), 
                     self.check_selection)

        # Set clipboard data from signal by view
        self.connect(self.view_main, QtCore.SIGNAL('set-clipboard()'), 
                     self.on_set_clipboard)

        # Open settings dialog from button next to search box
        self.connect(settings_button, QtCore.SIGNAL('clicked()'), 
                     self._emit_open_settings)

        # Open settings dialog from right click menu of the view
        self.connect(self.view_main, QtCore.SIGNAL('open-settings()'),
                     self._emit_open_settings)

        # Show preview of selected item in view
        self.connect(self.view_main,
                     QtCore.SIGNAL('open-preview(QModelIndex)'), 
                     self._on_open_preview)

        # Clipboard dataChanged() emits to append new item to model->view
        self.connect(self.clipboard_monitor,
                     QtCore.SIGNAL('new-item(QMimeData)'), self._on_new_item)