/*-----------------------------------------------------------------*/ int hTabIsInTable (hTab * htab, int key, void *item, int (*compareFunc) (void *, void *)) { if (_findItem (htab, key, item, compareFunc)) return 1; return 0; }
shared_ptr<Item> LocalMap::getItem(const Point& pos) { shared_ptr<Item> retval; auto it = _findItem(pos); if (it != _groundItems.end()) { retval = it->second; return retval; } return retval; }
void PartitionSplitterWidget::setSplitPartition( const QString& path, qint64 minSize, qint64 maxSize, qint64 preferredSize, const QString& newLabel ) { cDebug() << Q_FUNC_INFO << "path:" << path << "\nminSize:" << minSize << "\nmaxSize:" << maxSize << "\nprfSize:" << preferredSize; if ( m_itemToResize || m_itemToResizeNext || !m_itemToResizePath.isEmpty() ) { cDebug() << "NOTICE: trying to split partition but partition to split is already set."; // We need to remove the itemToResizeNext from wherever it is for ( int i = 0; i < m_items.count(); ++i ) { if ( m_items[ i ].itemPath == m_itemToResize->itemPath && i + 1 < m_items.count() ) { m_items[ i ].size = m_items[ i ].size + m_itemToResizeNext->size; m_items.removeAt( i + 1 ); m_itemToResizeNext = nullptr; break; } else if ( !m_items[ i ].children.isEmpty() ) { for ( int j = 0; j < m_items[ i ].children.count(); ++j ) { if ( m_items[ i ].children[ j ].itemPath == m_itemToResize->itemPath && j + 1 < m_items[ i ].children.count() ) { m_items[ i ].children[ j ].size = m_items[ i ].children[ j ].size + m_itemToResizeNext->size; m_items[ i ].children.removeAt( j + 1 ); m_itemToResizeNext = nullptr; break; } } if ( !m_itemToResizeNext ) break; } } m_itemToResize = nullptr; m_itemToResizePath.clear(); } PartitionSplitterItem* itemToResize = _findItem( m_items, [ path ]( PartitionSplitterItem& item ) -> bool { return path == item.itemPath; } ); if ( !itemToResize ) return; cDebug() << "itemToResize:" << itemToResize->itemPath; m_itemToResize = itemToResize; m_itemToResizePath = path; if ( preferredSize > maxSize ) preferredSize = maxSize; qint64 newSize = m_itemToResize->size - preferredSize; m_itemToResize->size = preferredSize; m_itemMinSize = minSize; m_itemMaxSize = maxSize; m_itemPrefSize = preferredSize; for ( int i = 0; i < m_items.count(); ++i ) { if ( m_items[ i ].itemPath == itemToResize->itemPath ) { m_items.insert( i+1, { "", QColor( "#c0392b" ), false, newSize, {} } ); m_itemToResizeNext = &( m_items[ i+1 ] ); break; } else if ( !m_items[ i ].children.isEmpty() ) { for ( int j = 0; j < m_items[ i ].children.count(); ++j ) { if ( m_items[ i ].children[ j ].itemPath == itemToResize->itemPath ) { m_items[ i ].children.insert( j+1, { "", QColor( "#c0392b" ), false, newSize, {} } ); m_itemToResizeNext = &( m_items[ i ].children[ j+1 ] ); break; } } if ( m_itemToResizeNext ) break; } } repaint(); emit partitionResized( m_itemToResize->itemPath, m_itemToResize->size, m_itemToResizeNext->size ); cDebug() << "Items updated. Status:"; foreach ( const PartitionSplitterItem& item, m_items ) cDebug() << "item" << item.itemPath << "size" << item.size; }