示例#1
0
/*-----------------------------------------------------------------*/
int 
hTabIsInTable (hTab * htab, int key,
	       void *item, int (*compareFunc) (void *, void *))
{
  if (_findItem (htab, key, item, compareFunc))
    return 1;
  return 0;
}
示例#2
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;
}