bool StringOffsetProvider::setOffsetInListItem(int& offset, Visualization::VList* list, const QString& prefix, const QString& separator, const QString& /*postfix*/) { if (offset == 0) return list->moveCursor( Visualization::Item::MoveOnPosition, QPoint(0,0)); offset -= prefix.size(); QStringList components = StringOffsetProvider::components(list->node()); for (int i = 0; i<components.size(); ++i) { if (i>0) offset -= separator.size(); if (offset <= components[i].size()) { // If the offset is in a node before any visualized node go to the beginning of the list. if (i < list->rangeBegin() ) return list->moveCursor( Visualization::Item::MoveOnPosition, QPoint(0,0)); // If the offset is in a node after any visualized node go to the end of the list. if (i >= list->rangeEnd() ) return list->moveCursor( Visualization::Item::MoveOnPosition, QPoint(list->width()-1, list->height()-1)); if ( setOffsetInItem(offset, list->itemAt<Visualization::Item>(i - list->rangeBegin())) ) return true; } else offset -= components[i].size(); } if (offset == 0) // This most likely means that the components are empty return list->moveCursor( Visualization::Item::MoveOnPosition, QPoint(list->width()/2, list->height()/2)); else // This means we've reached the end return list->moveCursor( Visualization::Item::MoveOnPosition, QPoint(list->width()-1, list->height()-1)); }
bool StringOffsetProvider::setOffsetInListItem(int& offset, Visualization::VList* list, const QString& prefix, const QString& separator, const QString& /*postfix*/) { if (offset == 0) return list->moveCursor( Visualization::Item::MoveOnPosition, QPoint(0,0)); offset -= prefix.size(); QStringList components = StringOffsetProvider::components(list->node()); for (int i = 0; i<list->length(); ++i) { if (i>0) offset -= separator.size(); if (offset <= components[i].size()) { if ( setOffsetInItem(offset, list->at<Visualization::Item>(i)) ) return true; } else offset -= components[i].size(); } if (offset == 0) // This most likely means that the components are empty return list->moveCursor( Visualization::Item::MoveOnPosition, QPoint(list->width()/2, list->height()/2)); else // This means we've reached the end return list->moveCursor( Visualization::Item::MoveOnPosition, QPoint(list->width()-1, list->height()-1)); }
void CastStringOffsetProvider::setOffset(int offset) { QStringList components = this->components(); if (offset >0) offset -= components[0].size(); // Skip past the initial '(' int childIndex = 1; // Corresponds to the second child - the type name if (offset > components[1].size()) { offset -= components[1].size() + components[2].size(); childIndex = 0; if (offset < 0) offset = 0; } setOffsetInItem(offset, vis_->layout()->at<Visualization::Item>(childIndex)); }
void StaticStringOffsetProvider::setOffset(int offset) { setOffsetInItem(offset, vis_->item()); }