ClipboardBrowser::ClipboardBrowser(QWidget *parent, const ClipboardBrowserSharedPtr &sharedData) : QListView(parent) , m_itemLoader() , m_tabName() , m_lastFiltered(-1) , m(this) , d(this) , m_invalidateCache(false) , m_expireAfterEditing(false) , m_editor(NULL) , m_sharedData(sharedData ? sharedData : ClipboardBrowserSharedPtr(new ClipboardBrowserShared)) , m_loadButton(NULL) , m_searchProgress(NULL) , m_dragTargetRow(-1) , m_dragStartPosition() , m_spinLock(0) , m_scrollSaver() { setLayoutMode(QListView::Batched); setBatchSize(1); setFrameShape(QFrame::NoFrame); setTabKeyNavigation(false); setSelectionMode(QAbstractItemView::ExtendedSelection); setWrapping(false); setLayoutMode(QListView::SinglePass); setEditTriggers(QAbstractItemView::NoEditTriggers); setAlternatingRowColors(true); initSingleShotTimer( &m_timerSave, 30000, this, SLOT(saveItems()) ); initSingleShotTimer( &m_timerScroll, 50 ); initSingleShotTimer( &m_timerUpdate, 10, this, SLOT(doUpdateCurrentPage()) ); initSingleShotTimer( &m_timerFilter, 10, this, SLOT(filterItems()) ); initSingleShotTimer( &m_timerExpire, 0, this, SLOT(expire()) ); // ScrollPerItem doesn't work well with hidden items setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); connect( verticalScrollBar(), SIGNAL(valueChanged(int)), SLOT(updateCurrentPage()) ); setAttribute(Qt::WA_MacShowFocusRect, 0); setAcceptDrops(true); connectModelAndDelegate(); }
ClipboardBrowser::ClipboardBrowser(QWidget *parent, const ClipboardBrowserSharedPtr &sharedData) : QListView(parent) , m_loaded(false) , m_id() , m_lastFilter() , m_update(false) , m( new ClipboardModel(this) ) , d( new ItemDelegate(viewport()) ) , m_timerSave( new QTimer(this) ) , m_timerScroll( new QTimer(this) ) , m_menu( new QMenu(this) ) , m_sharedData(sharedData ? sharedData : ClipboardBrowserSharedPtr(new ClipboardBrowserShared)) { setLayoutMode(QListView::Batched); setBatchSize(1); setFrameShadow(QFrame::Sunken); setTabKeyNavigation(false); setAlternatingRowColors(true); setSelectionMode(QAbstractItemView::ExtendedSelection); setWrapping(false); setLayoutMode(QListView::SinglePass); setEditTriggers(QAbstractItemView::EditKeyPressed); setSpacing(5); m_timerSave->setSingleShot(true); connect( m_timerSave, SIGNAL(timeout()), this, SLOT(saveItems()) ); m_timerScroll->setSingleShot(true); m_timerScroll->setInterval(50); // delegate for rendering and editing items setItemDelegate(d); // set new model QItemSelectionModel *old_model = selectionModel(); setModel(m); delete old_model; connect( d, SIGNAL(editingActive(bool)), SIGNAL(editingActive(bool)) ); connect( m, SIGNAL(rowsRemoved(QModelIndex,int,int)), d, SLOT(rowsRemoved(QModelIndex,int,int)) ); connect( m, SIGNAL(rowsInserted(QModelIndex, int, int)), d, SLOT(rowsInserted(QModelIndex, int, int)) ); connect( m, SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int)), d, SLOT(rowsMoved(QModelIndex, int, int, QModelIndex, int)) ); // save if data in model changed connect( m, SIGNAL(dataChanged(QModelIndex,QModelIndex)), SLOT(onDataChanged(QModelIndex,QModelIndex)) ); connect( m, SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(delayedSaveItems()) ); connect( m, SIGNAL(rowsInserted(QModelIndex, int, int)), SLOT(delayedSaveItems()) ); connect( m, SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int)), SLOT(delayedSaveItems()) ); // update on change connect( d, SIGNAL(rowSizeChanged(int)), SLOT(onRowSizeChanged(int)) ); connect( m, SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(updateCurrentPage()) ); connect( m, SIGNAL(rowsInserted(QModelIndex, int, int)), SLOT(updateCurrentPage()) ); connect( m, SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int)), SLOT(updateCurrentPage()) ); connect( verticalScrollBar(), SIGNAL(valueChanged(int)), SLOT(updateCurrentPage()) ); connect( verticalScrollBar(), SIGNAL(rangeChanged(int,int)), SLOT(updateCurrentPage()), Qt::QueuedConnection ); // ScrollPerItem doesn't work well with hidden items setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); setAttribute(Qt::WA_MacShowFocusRect, 0); }