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()); }
//! //! 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()); }
//! //! 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; }
//! //! 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; }