void SizeDialogBase::setupConstraints()
{
    setMinimumLength(!canShrink() ? partition().length() : qMax(partition().sectorsUsed(), partition().minimumSectors()));
    setMaximumLength(!canGrow() ? partition().length() : qMin(maximumLastSector() - minimumFirstSector() + 1, partition().maximumSectors()));

    dialogWidget().partResizerWidget().setMinimumLength(minimumLength());
    dialogWidget().partResizerWidget().setMaximumLength(maximumLength());

    dialogWidget().labelMinSize().setText(Capacity::formatByteSize(minimumLength() * device().logicalSectorSize()));
    dialogWidget().labelMaxSize().setText(Capacity::formatByteSize(maximumLength() * device().logicalSectorSize()));

    dialogWidget().spinCapacity().setEnabled(canShrink() || canGrow());

    dialogWidget().partResizerWidget().setMaximumFirstSector(maximumFirstSector());
    dialogWidget().partResizerWidget().setMinimumLastSector(minimumLastSector());

    const qint64 totalCapacity = sectorsToDialogUnit(device(), maximumLastSector() - minimumFirstSector() + 1);

    const qint64 minCapacity = sectorsToDialogUnit(device(), minimumLength());
    const qint64 maxCapacity = sectorsToDialogUnit(device(), maximumLength());
    dialogWidget().spinCapacity().setRange(minCapacity, maxCapacity);

    const qint64 maxFree = totalCapacity - minCapacity;

    dialogWidget().spinFreeBefore().setRange(0, maxFree);
    dialogWidget().spinFreeAfter().setRange(0, maxFree);

    detailsWidget().spinFirstSector().setRange(minimumFirstSector(), maximumLastSector());
    detailsWidget().spinLastSector().setRange(minimumFirstSector(), maximumLastSector());

    onAlignToggled(align());
}
示例#2
0
//!
//! Copy the vector contents from given vector. This vector might grow to
//! accomodate the source. If it cannot grow, items at the tail end will
//! be dropped.
//!
const D64Vec& D64Vec::operator =(const D64Vec& vec)
{

    // Prevent self assignment.
    if (this == &vec)
    {
        return *this;
    }

    // Might need to grow to accomodate source.
    // Might need to truncate if not growable.
    unsigned int curCap = capacity();
    unsigned int minCap = vec.numItems_;
    if (minCap > curCap)
    {
        if (canGrow())
        {
            delete[] item_;
            item_ = new item_t[setNextCap(minCap)];
        }
        else
        {
            minCap = curCap; //truncate copy
        }
    }

    // Initialize used items.
    memcpy(item_, vec.item_, minCap * sizeof(*item_));
    numItems_ = minCap;

    // Return reference to self.
    return *this;
}
void SizeDialogBase::setupDialog()
{
    dialogWidget().spinFreeBefore().setValue(sectorsToDialogUnit(device(), partition().firstSector() - minimumFirstSector()));
    dialogWidget().spinFreeAfter().setValue(sectorsToDialogUnit(device(), maximumLastSector() - partition().lastSector()));

    dialogWidget().spinCapacity().setValue(Capacity(partition().capacity()).toDouble(preferredUnit()));

    dialogWidget().spinFreeBefore().setSuffix(QStringLiteral(" ") + Capacity::unitName(preferredUnit()));
    dialogWidget().spinFreeAfter().setSuffix(QStringLiteral(" ") + Capacity::unitName(preferredUnit()));
    dialogWidget().spinCapacity().setSuffix(QStringLiteral(" ") + Capacity::unitName(preferredUnit()));

    detailsWidget().spinFirstSector().setValue(partition().firstSector());
    detailsWidget().spinLastSector().setValue(partition().lastSector());

    detailsWidget().checkAlign().setChecked(Config::alignDefault());

    if (canGrow() || canShrink())
        dialogWidget().partResizerWidget().init(device(), partition(), minimumFirstSector(), maximumLastSector(), false, canMove());
    else
        dialogWidget().partResizerWidget().init(device(), partition(), minimumFirstSector(), maximumLastSector(), true, canMove());
    dialogWidget().partResizerWidget().setAlign(Config::alignDefault());
}
示例#4
0
//!
//! Add count entries to the tail end. Use item for the new values.
//! Return number of entries successfully added. This number can be
//! less than count if growth is required but the vector cannot grow.
//!
unsigned int D64Vec::add(size_t count, item_t item)
{
    if (count == 0)
    {
        unsigned int numAdds = 0;
        return numAdds;
    }

    if (count == 1)
    {
        bool ok = add(item);
        unsigned int numAdds = ok? 1: 0;
        return numAdds;
    }

    // Might need to grow to accomodate new entries.
    // Not all new entries can be accomodated if not growable.
    unsigned int curCap = capacity();
    unsigned int minCap = static_cast<unsigned int>(numItems_ + count);
    if (minCap > curCap)
    {
        if (canGrow())
        {
            resize(minCap);
        }
        else
        {
            count = curCap - numItems_;
        }
    }

    size_t iEnd = numItems_ + count;
    for (size_t i = numItems_; i < iEnd; item_[i++] = item);
    numItems_ = static_cast<unsigned int>(iEnd);
    unsigned int numAdds = static_cast<unsigned int>(count);
    return numAdds;
}
示例#5
0
//!
//! Add given items. Return number of items successfully added. This
//! number can be less than the given item count if growth is required
//! but this vector cannot grow.
//!
unsigned int D64Vec::add(const item_t* raw, size_t itemCount)
{
    if (itemCount == 0)
    {
        unsigned int numAdds = 0;
        return numAdds;
    }

    if (itemCount == 1)
    {
        bool ok = add(raw[0]);
        unsigned int numAdds = ok? 1: 0;
        return numAdds;
    }

    // Might need to grow to accomodate new entries.
    // Not all new entries can be accomodated if not growable.
    unsigned int curCap = capacity();
    unsigned int minCap = static_cast<unsigned int>(numItems_ + itemCount);
    if (minCap > curCap)
    {
        if (canGrow())
        {
            resize(minCap);
        }
        else
        {
            itemCount = curCap - numItems_;
        }
    }

    memcpy(item_ + numItems_, raw, itemCount * sizeof(*item_));
    unsigned int numAdds = static_cast<unsigned int>(itemCount);
    numItems_ += numAdds;
    return numAdds;
}