Add methods to convert between component/index
This commit is contained in:
		
							parent
							
								
									9144ea262d
								
							
						
					
					
						commit
						8aa10754e2
					
				@ -407,22 +407,36 @@ void Model::emitColumnsChanged(const QModelIndex &parent)
 | 
			
		||||
  for (auto i = 0; i < count; ++i) emitColumnsChanged(index(0, 0, parent));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Model::Component *Model::toComponent(const QModelIndex &index) const
 | 
			
		||||
{
 | 
			
		||||
  return static_cast<Component *>(index.internalPointer());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QModelIndex Model::toIndex(const Model::Component &component, int column) const
 | 
			
		||||
{
 | 
			
		||||
  return createIndex(component.index, column,
 | 
			
		||||
                     const_cast<Model::Component *>(&component));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QModelIndex Model::index(int row, int column, const QModelIndex &parent) const
 | 
			
		||||
{
 | 
			
		||||
  if (!root_)
 | 
			
		||||
    return {};
 | 
			
		||||
  if (auto ptr = static_cast<Component *>(parent.internalPointer())) {
 | 
			
		||||
 | 
			
		||||
  if (auto ptr = toComponent(parent)) {
 | 
			
		||||
    SOFT_ASSERT(row >= 0 && row < int(ptr->children.size()), return {});
 | 
			
		||||
    return createIndex(row, column, ptr->children[row].get());
 | 
			
		||||
    return toIndex(*ptr->children[row], column);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (row < 0 && row >= int(root_->children.size()))
 | 
			
		||||
    return {};
 | 
			
		||||
  return createIndex(row, column, root_->children[row].get());
 | 
			
		||||
 | 
			
		||||
  return toIndex(*root_->children[row], column);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QModelIndex Model::parent(const QModelIndex &child) const
 | 
			
		||||
{
 | 
			
		||||
  auto ptr = static_cast<Component *>(child.internalPointer());
 | 
			
		||||
  auto ptr = toComponent(child);
 | 
			
		||||
  if (auto parent = ptr->parent)
 | 
			
		||||
    return createIndex(parent->index, 0, parent);
 | 
			
		||||
  return {};
 | 
			
		||||
@ -430,7 +444,7 @@ QModelIndex Model::parent(const QModelIndex &child) const
 | 
			
		||||
 | 
			
		||||
int Model::rowCount(const QModelIndex &parent) const
 | 
			
		||||
{
 | 
			
		||||
  if (auto ptr = static_cast<Component *>(parent.internalPointer())) {
 | 
			
		||||
  if (auto ptr = toComponent(parent)) {
 | 
			
		||||
    return ptr->children.size();
 | 
			
		||||
  }
 | 
			
		||||
  return root_ ? root_->children.size() : 0;
 | 
			
		||||
@ -463,7 +477,7 @@ QVariant Model::data(const QModelIndex &index, int role) const
 | 
			
		||||
  if ((role != Qt::DisplayRole && role != Qt::EditRole) || !index.isValid())
 | 
			
		||||
    return {};
 | 
			
		||||
 | 
			
		||||
  auto ptr = static_cast<Component *>(index.internalPointer());
 | 
			
		||||
  auto ptr = toComponent(index);
 | 
			
		||||
  SOFT_ASSERT(ptr, return {});
 | 
			
		||||
 | 
			
		||||
  switch (index.column()) {
 | 
			
		||||
@ -487,7 +501,7 @@ bool Model::setData(const QModelIndex &index, const QVariant &value, int role)
 | 
			
		||||
  if (!index.isValid() || role != Qt::EditRole)
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
  auto ptr = static_cast<Component *>(index.internalPointer());
 | 
			
		||||
  auto ptr = toComponent(index);
 | 
			
		||||
  SOFT_ASSERT(ptr, return false);
 | 
			
		||||
 | 
			
		||||
  if (index.column() != int(Column::Action))
 | 
			
		||||
@ -506,7 +520,7 @@ bool Model::setData(const QModelIndex &index, const QVariant &value, int role)
 | 
			
		||||
 | 
			
		||||
Qt::ItemFlags Model::flags(const QModelIndex &index) const
 | 
			
		||||
{
 | 
			
		||||
  auto ptr = static_cast<Component *>(index.internalPointer());
 | 
			
		||||
  auto ptr = toComponent(index);
 | 
			
		||||
  SOFT_ASSERT(ptr, return {});
 | 
			
		||||
  auto result = Qt::NoItemFlags | Qt::ItemIsSelectable;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -81,6 +81,8 @@ private:
 | 
			
		||||
  State currentState(const File& file) const;
 | 
			
		||||
  QString expanded(const QString& source) const;
 | 
			
		||||
  void emitColumnsChanged(const QModelIndex& parent);
 | 
			
		||||
  Component* toComponent(const QModelIndex& index) const;
 | 
			
		||||
  QModelIndex toIndex(const Component& component, int column) const;
 | 
			
		||||
 | 
			
		||||
  std::unique_ptr<Component> root_;
 | 
			
		||||
  std::map<QString, QString> expansions_;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user