void KateFileList::slotModChanged (Kate::Document *doc) { if (!doc) return; QListViewItem * item = firstChild(); while( item ) { if ( ((KateFileListItem *)item)->documentNumber() == doc->documentNumber() ) break; item = item->nextSibling(); } if ( ((KateFileListItem *)item)->document()->isModified() ) { m_editHistory.removeRef( (KateFileListItem *)item ); m_editHistory.prepend( (KateFileListItem *)item ); for ( uint i=0; i < m_editHistory.count(); i++ ) { m_editHistory.at( i )->setEditHistPos( i+1 ); repaintItem( m_editHistory.at( i ) ); } } else repaintItem( item ); }
/* Enormous list of ValueTree::Listener options... */ void valueTreePropertyChanged (ValueTree& treeWhosePropertyHasChanged, const Identifier& property) { if (t != treeWhosePropertyHasChanged) return; t.removeListener (this); // if (isSelected()) // propertiesEditor->setSource(t); repaintItem(); t.addListener (this); }
//============================================================================== void ProjectTreeViewBase::checkFileStatus() { const File file (getFile()); const bool nowMissing = file != File::nonexistent && ! file.exists(); if (nowMissing != isFileMissing) { isFileMissing = nowMissing; repaintItem(); } }
void ListView::contentsMousePressEvent(QMouseEvent *e) { if (e->button() == QObject::LeftButton){ m_pressedItem = itemAt(contentsToViewport(e->pos())); if (m_pressedItem && !m_pressedItem->isSelectable()) m_pressedItem = NULL; if (m_pressedItem) repaintItem(m_pressedItem); #if QT_VERSION < 300 m_mousePressPos = e->pos(); QTimer::singleShot(QApplication::startDragTime(), this, SLOT(startDrag())); #endif } QListView::contentsMousePressEvent(e); }
void KateFileList::slotNameChanged (Kate::Document *doc) { if (!doc) return; // ### using nextSibling to *only* look at toplevel items. // child items could be marks for example QListViewItem * item = firstChild(); while( item ) { if ( ((KateFileListItem*)item)->document() == doc ) { item->setText( 0, doc->docName() ); repaintItem( item ); break; } item = item->nextSibling(); } updateSort(); }
void KateFileList::slotViewChanged() { if(!viewManager->activeView()) return; Kate::View *view = viewManager->activeView(); uint dn = view->getDoc()->documentNumber(); QListViewItem *i = firstChild(); while(i) { if(((KateFileListItem *)i)->documentNumber() == dn) { break; } i = i->nextSibling(); } if(!i) return; KateFileListItem *item = (KateFileListItem *)i; setCurrentItem(item); // ### During load of file lists, all the loaded views gets active. // Do something to avoid shading them -- maybe not creating views, just // open the documents??? // int p = 0; // if ( m_viewHistory.count() ) // { // int p = m_viewHistory.findRef( item ); // only repaint items that needs it // } m_viewHistory.removeRef(item); m_viewHistory.prepend(item); for(uint i = 0; i < m_viewHistory.count(); i++) { m_viewHistory.at(i)->setViewHistPos(i + 1); repaintItem(m_viewHistory.at(i)); } }
void QtFileIconView::newDirectory() { setAutoArrange( FALSE ); selectAll( FALSE ); if ( viewDir.mkdir( QString( "New Folder %1" ).arg( ++newFolderNum ) ) ) { QFileInfo *fi = new QFileInfo( viewDir, QString( "New Folder %1" ).arg( newFolderNum ) ); QtFileIconViewItem *item = new QtFileIconViewItem( this, new QFileInfo( *fi ) ); item->setKey( QString( "000000%1" ).arg( fi->fileName() ) ); delete fi; repaintContents( contentsX(), contentsY(), contentsWidth(), contentsHeight(), FALSE ); ensureItemVisible( item ); item->setSelected( TRUE, TRUE ); setCurrentItem( item ); repaintItem( item ); qApp->processEvents(); item->rename(); } setAutoArrange( TRUE ); }
Float::Float( QWidget *parent, not_null<Window::Controller*> controller, not_null<HistoryItem*> item, Fn<void(bool visible)> toggleCallback, Fn<void(bool closed)> draggedCallback) : RpWidget(parent) , _controller(controller) , _item(item) , _toggleCallback(std::move(toggleCallback)) , _draggedCallback(std::move(draggedCallback)) { auto media = _item->media(); Assert(media != nullptr); auto document = media->document(); Assert(document != nullptr); Assert(document->isVideoMessage()); auto margin = st::mediaPlayerFloatMargin; auto size = 2 * margin + st::mediaPlayerFloatSize; resize(size, size); prepareShadow(); Auth().data().itemRepaintRequest( ) | rpl::start_with_next([this](auto item) { if (_item == item) { repaintItem(); } }, lifetime()); Auth().data().itemRemoved( ) | rpl::start_with_next([this](auto item) { if (_item == item) { detach(); } }, lifetime()); setCursor(style::cur_pointer); }
void UserListBase::drawUpdates() { m_bDirty = false; updTimer->stop(); QListViewItem *item; list<unsigned long>::iterator it; for (it = updGroups.begin(); it != updGroups.end(); ++it){ Group *group = getContacts()->group(*it); if (group == NULL) continue; switch (m_groupMode){ case 1: item = findGroupItem(group->id()); if (item){ static_cast<GroupItem*>(item)->update(group); repaintItem(item); }else{ new GroupItem(this, group, true); } break; case 2: for (item = firstChild(); item; item = item->nextSibling()){ UserViewItemBase *i = static_cast<UserViewItemBase*>(item); if (i->type() != DIV_ITEM) continue; DivItem *divItem = static_cast<DivItem*>(i); GroupItem *grpItem = findGroupItem(group->id(), divItem); if (grpItem){ grpItem->update(group); repaintItem(grpItem); }else{ new GroupItem(divItem, group, divItem->state() == DIV_OFFLINE); } } break; } } updGroups.clear(); DivItem *itemOnline = NULL; DivItem *itemOffline = NULL; if (updContacts.size()){ if (m_groupMode != 1){ for (item = firstChild(); item != NULL; item = item->nextSibling()){ UserViewItemBase *i = static_cast<UserViewItemBase*>(item); if (i->type() != DIV_ITEM) continue; DivItem *divItem = static_cast<DivItem*>(i); if (divItem->state() == DIV_ONLINE) itemOnline = divItem; if (divItem->state() == DIV_OFFLINE) itemOffline = divItem; } } } for (it = updContacts.begin(); it != updContacts.end(); ++it){ Contact *contact = getContacts()->contact(*it); if (contact == NULL) continue; ContactItem *contactItem; GroupItem *grpItem; unsigned style; string icons; unsigned status = getUserStatus(contact, style, icons); unsigned unread = getUnread(contact->id()); bool bShow = false; ListUserData *data = (ListUserData*)(contact->getUserData(CorePlugin::m_plugin->list_data_id)); if (data && data->ShowAllways) bShow = true; switch (m_groupMode){ case 0: if (status == STATUS_OFFLINE){ if (itemOnline){ contactItem = findContactItem(contact->id(), itemOnline); if (contactItem){ deleteItem(contactItem); if (itemOnline->firstChild() == NULL){ deleteItem(itemOnline); itemOnline = NULL; } } } if ((unread == 0) && !bShow && m_bShowOnline){ if (itemOffline){ contactItem = findContactItem(contact->id(), itemOffline); if (contactItem){ deleteItem(contactItem); if (itemOffline->firstChild() == NULL){ deleteItem(itemOffline); itemOffline = NULL; } } } break; } if (itemOffline == NULL){ itemOffline = new DivItem(this, DIV_OFFLINE); setOpen(itemOffline, true); } contactItem = findContactItem(contact->id(), itemOffline); if (contactItem){ if (contactItem->update(contact, status, style, icons.c_str(), unread)) addSortItem(itemOffline); repaintItem(contactItem); }else{ contactItem = new ContactItem(itemOffline, contact, status, style, icons.c_str(), unread); } }else{ if (itemOffline){ contactItem = findContactItem(contact->id(), itemOffline); if (contactItem){ deleteItem(contactItem); if (itemOffline->firstChild() == NULL){ deleteItem(itemOffline); itemOffline = NULL; } } } if (itemOnline == NULL){ itemOnline = new DivItem(this, DIV_ONLINE); setOpen(itemOnline, true); } contactItem = findContactItem(contact->id(), itemOnline); if (contactItem){ if (contactItem->update(contact, status, style, icons.c_str(), unread)) addSortItem(itemOnline); repaintItem(contactItem); }else{ contactItem = new ContactItem(itemOnline, contact, status, style, icons.c_str(), unread); } } break; case 1: contactItem = findContactItem(contact->id()); grpItem = NULL; if (contactItem){ grpItem = static_cast<GroupItem*>(contactItem->parent()); if (((status == STATUS_OFFLINE) && (unread == 0) && !bShow && m_bShowOnline) || (contact->getGroup() != grpItem->id())){ grpItem->m_nContacts--; if (contactItem->m_bOnline) grpItem->m_nContactsOnline--; addGroupForUpdate(grpItem->id()); deleteItem(contactItem); contactItem = NULL; grpItem = NULL; } } if ((status != STATUS_OFFLINE) || unread || bShow || !m_bShowOnline){ if (grpItem == NULL) grpItem = findGroupItem(contact->getGroup()); if (grpItem){ if (contactItem){ if (contactItem->update(contact, status, style, icons.c_str(), unread)) addSortItem(grpItem); repaintItem(contactItem); if (!m_bShowOnline && (contactItem->m_bOnline != (status != STATUS_OFFLINE))){ if (status == STATUS_OFFLINE){ grpItem->m_nContactsOnline--; contactItem->m_bOnline = false; }else{ grpItem->m_nContactsOnline++; contactItem->m_bOnline = true; } addGroupForUpdate(grpItem->id()); } }else{ contactItem = new ContactItem(grpItem, contact, status, style, icons.c_str(), unread); grpItem->m_nContacts++; if (!m_bShowOnline && (status != STATUS_OFFLINE)){ grpItem->m_nContactsOnline++; contactItem->m_bOnline = true; } addGroupForUpdate(grpItem->id()); } } } break; case 2: contactItem = findContactItem(contact->id(), itemOnline); grpItem = NULL; if (contactItem){ grpItem = static_cast<GroupItem*>(contactItem->parent()); if ((status == STATUS_OFFLINE) || (grpItem->id() != contact->getGroup())){ grpItem->m_nContacts--; addGroupForUpdate(grpItem->id()); deleteItem(contactItem); contactItem = NULL; } } if (itemOffline){ contactItem = findContactItem(contact->id(), itemOffline); grpItem = NULL; if (contactItem){ grpItem = static_cast<GroupItem*>(contactItem->parent()); if ((status != STATUS_OFFLINE) || (grpItem->id() != contact->getGroup())){ grpItem->m_nContacts--; addGroupForUpdate(grpItem->id()); deleteItem(contactItem); contactItem = NULL; if (m_bShowOnline && (grpItem->firstChild() == NULL)){ deleteItem(grpItem); grpItem = NULL; if (itemOffline->firstChild() == NULL){ deleteItem(itemOffline); itemOffline = NULL; } } } } } if ((unread == 0) && !bShow && (status == STATUS_OFFLINE) && m_bShowOnline) break; DivItem *divItem; if (status == STATUS_OFFLINE){ if (itemOffline == NULL){ itemOffline = new DivItem(this, DIV_OFFLINE); setOpen(itemOffline, true); } divItem = itemOffline; }else{ divItem = itemOnline; } grpItem = findGroupItem(contact->getGroup(), divItem); if (grpItem == NULL){ Group *grp = getContacts()->group(contact->getGroup()); if (grp == NULL) break; grpItem = new GroupItem(divItem, grp, true); } contactItem = findContactItem(contact->id(), grpItem); if (contactItem){ if (contactItem->update(contact, status, style, icons.c_str(), unread)) addSortItem(grpItem); }else{ new ContactItem(grpItem, contact, status, style, icons.c_str(), unread); grpItem->m_nContacts++; addGroupForUpdate(grpItem->id()); } } } updContacts.clear(); for (list<QListViewItem*>::iterator it_sort = sortItems.begin(); it_sort != sortItems.end(); ++it_sort){ (*it_sort)->sort(); } sortItems.clear(); }
void CardView::contentsMousePressEvent( QMouseEvent *e ) { Q3ScrollView::contentsMousePressEvent( e ); QPoint pos = contentsToViewport( e->pos() ); d->mLastClickPos = e->pos(); CardViewItem *item = itemAt( e->pos() ); if ( item == 0 ) { d->mLastClickOnItem = false; if ( d->mOnSeparator) { d->mResizeAnchor = e->x() + contentsX(); d->mColspace = (2 * d->mItemSpacing); int ccw = d->mItemWidth + d->mColspace + d->mSepWidth; d->mFirst = (contentsX() + d->mSepWidth) / ccw; d->mPressed = (d->mResizeAnchor + d->mSepWidth) / ccw; d->mSpan = d->mPressed - d->mFirst; d->mFirstX = d->mFirst * ccw; if ( d->mFirstX ) d->mFirstX -= d->mSepWidth; } else { selectAll( false ); } return; } d->mLastClickOnItem = true; CardViewItem *other = d->mCurrentItem; setCurrentItem( item ); // Always emit the selection emit clicked( item ); // The RMB click if ( e->button() & Qt::RightButton ) { // select current item item->setSelected( true ); emit contextMenuRequested( item, mapToGlobal( pos ) ); return; } // Check the selection type and update accordingly if ( d->mSelectionMode == CardView::Single ) { // make sure it isn't already selected if ( item->isSelected() ) return; bool b = signalsBlocked(); blockSignals( true ); selectAll( false ); blockSignals( b ); item->setSelected( true ); item->repaintCard(); emit selectionChanged( item ); } else if ( d->mSelectionMode == CardView::Multi ) { // toggle the selection item->setSelected( !item->isSelected() ); item->repaintCard(); emit selectionChanged(); } else if ( d->mSelectionMode == CardView::Extended ) { if ( (e->button() & Qt::LeftButton) && (e->modifiers() & Qt::ShiftModifier) ) { if ( item == other ) return; bool s = !item->isSelected(); if ( s && !(e->modifiers() & Qt::ControlModifier) ) { bool b = signalsBlocked(); blockSignals( true ); selectAll( false ); blockSignals( b ); } int from, to, a, b; a = d->mItemList.findRef( item ); b = d->mItemList.findRef( other ); from = a < b ? a : b; to = a > b ? a : b; CardViewItem *aItem; for ( ; from <= to; ++from ) { aItem = d->mItemList.at( from ); aItem->setSelected( s ); repaintItem( aItem ); } emit selectionChanged(); } else if ( (e->button() & Qt::LeftButton) && (e->modifiers() & Qt::ControlModifier) ) { item->setSelected( !item->isSelected() ); item->repaintCard(); emit selectionChanged(); } else if ( e->button() & Qt::LeftButton ) { bool b = signalsBlocked(); blockSignals( true ); selectAll( false ); blockSignals( b ); item->setSelected( true ); item->repaintCard(); emit selectionChanged(); } } }
void CardView::keyPressEvent( QKeyEvent *e ) { if ( !(childCount() && d->mCurrentItem) ) { e->ignore(); return; } uint pos = d->mItemList.findRef( d->mCurrentItem ); CardViewItem *aItem = 0; CardViewItem *old = d->mCurrentItem; switch ( e->key() ) { case Qt::Key_Up: if ( pos > 0 ) { aItem = d->mItemList.at( pos - 1 ); setCurrentItem( aItem ); } break; case Qt::Key_Down: if ( pos < d->mItemList.count() - 1 ) { aItem = d->mItemList.at( pos + 1 ); setCurrentItem( aItem ); } break; case Qt::Key_Left: { // look for an item in the previous/next column, starting from // the vertical middle of the current item. // FIXME use nice calculatd measures!!! QPoint aPoint( d->mCurrentItem->d->x, d->mCurrentItem->d->y ); aPoint -= QPoint( 30, -(d->mCurrentItem->height() / 2) ); aItem = itemAt( aPoint ); // maybe we hit some space below an item while ( !aItem && aPoint.y() > 27 ) { aPoint -= QPoint( 0, 16 ); aItem = itemAt( aPoint ); } if ( aItem ) setCurrentItem( aItem ); break; } case Qt::Key_Right: { // FIXME use nice calculated measures!!! QPoint aPoint( d->mCurrentItem->d->x + d->mItemWidth, d->mCurrentItem->d->y ); aPoint += QPoint( 30, (d->mCurrentItem->height() / 2) ); aItem = itemAt( aPoint ); while ( !aItem && aPoint.y() > 27 ) { aPoint -= QPoint( 0, 16 ); aItem = itemAt( aPoint ); } if ( aItem ) setCurrentItem( aItem ); break; } case Qt::Key_Home: aItem = d->mItemList.first(); setCurrentItem( aItem ); break; case Qt::Key_End: aItem = d->mItemList.last(); setCurrentItem( aItem ); break; case Qt::Key_PageUp: // PageUp { // QListView: "Make the item above the top visible and current" // TODO if contentsY(), pick the top item of the leftmost visible column if ( contentsX() <= 0 ) return; int cw = columnWidth(); int theCol = ( qMax( 0, ( contentsX() / cw) * cw ) ) + d->mItemSpacing; aItem = itemAt( QPoint( theCol + 1, d->mItemSpacing + 1 ) ); if ( aItem ) setCurrentItem( aItem ); break; } case Qt::Key_PageDown: // PageDown { // QListView: "Make the item below the bottom visible and current" // find the first not fully visible column. // TODO: consider if a partly visible (or even hidden) item at the // bottom of the rightmost column exists int cw = columnWidth(); int theCol = ( (( contentsX() + visibleWidth() ) / cw) * cw ) + d->mItemSpacing + 1; // if separators are on, we may need to we may be one column further right if only the spacing/sep is hidden if ( d->mDrawSeparators && cw - (( contentsX() + visibleWidth() ) % cw) <= int( d->mItemSpacing + d->mSepWidth ) ) theCol += cw; // make sure this is not too far right while ( theCol > contentsWidth() ) theCol -= columnWidth(); aItem = itemAt( QPoint( theCol, d->mItemSpacing + 1 ) ); if ( aItem ) setCurrentItem( aItem ); break; } case Qt::Key_Space: setSelected( d->mCurrentItem, !d->mCurrentItem->isSelected() ); emit selectionChanged(); break; case Qt::Key_Return: case Qt::Key_Enter: emit returnPressed( d->mCurrentItem ); emit executed( d->mCurrentItem ); break; case Qt::Key_Menu: emit contextMenuRequested( d->mCurrentItem, viewport()->mapToGlobal( itemRect(d->mCurrentItem).center() ) ); break; default: if ( (e->modifiers() & Qt::ControlModifier) && e->key() == Qt::Key_A ) { // select all selectAll( true ); break; } else if ( !e->text().isEmpty() && e->text()[ 0 ].isPrint() ) { // if we have a string, do autosearch } break; } // handle selection if ( aItem ) { if ( d->mSelectionMode == CardView::Extended ) { if ( e->modifiers() & Qt::ShiftModifier ) { // shift button: toggle range // if control button is pressed, leave all items // and toggle selection current->old current // otherwise, ?????? bool s = ! aItem->isSelected(); int from, to, a, b; a = d->mItemList.findRef( aItem ); b = d->mItemList.findRef( old ); from = a < b ? a : b; to = a > b ? a : b; if ( to - from > 1 ) { bool b = signalsBlocked(); blockSignals( true ); selectAll( false ); blockSignals( b ); } CardViewItem *item; for ( ; from <= to; ++from ) { item = d->mItemList.at( from ); item->setSelected( s ); repaintItem( item ); } emit selectionChanged(); } else if ( e->modifiers() & Qt::ControlModifier ) { // control button: do nothing } else { // no button: move selection to this item bool b = signalsBlocked(); blockSignals( true ); selectAll( false ); blockSignals( b ); setSelected( aItem, true ); emit selectionChanged(); } } } }
void ProjectTreeViewBase::valueTreePropertyChanged (ValueTree& tree, const Identifier& property) { if (tree == item.state) repaintItem(); }
void CtrlrValueTreeEditorItem::valueTreePropertyChanged (ValueTree &treeWhosePropertyHasChanged, const Identifier &property) { repaintItem(); }