/*! \internal Adds \a item to the grid. The items are added from top-left to bottom-right. */ void ColorPickerPopup::insertColor(const QColor &col, const QString &text, int index) { // Don't add colors that we have already. ColorPickerItem *existingItem = find(col); ColorPickerItem *lastSelectedItem = find(lastSelected()); if (existingItem) { if (lastSelectedItem && existingItem != lastSelectedItem) lastSelectedItem->setSelected(false); existingItem->setFocus(); existingItem->setSelected(true); return; } ColorPickerItem *item = new ColorPickerItem(this, col, text, this); if (lastSelectedItem) { lastSelectedItem->setSelected(false); } else { item->setSelected(true); lastSel = col; } item->setFocus(); connect(item, SIGNAL(selected()), SLOT(updateSelected())); if (index == -1) index = items.count(); items.insert((unsigned int)index, item); regenerateGrid(); update(); }
void QtGradientStopsModel::moveStops(double newPosition) { QtGradientStop *current = currentStop(); if (!current) return; double newPos = newPosition; if (newPos > 1) newPos = 1; else if (newPos < 0) newPos = 0; if (newPos == current->position()) return; double offset = newPos - current->position(); QtGradientStop *first = firstSelected(); QtGradientStop *last = lastSelected(); if (first && last) { // multiselection double maxOffset = 1.0 - last->position(); double minOffset = -first->position(); if (offset > maxOffset) offset = maxOffset; else if (offset < minOffset) offset = minOffset; } if (offset == 0) return; bool forward = (offset > 0) ? false : true; PositionStopMap stopList; QList<QtGradientStop *> selected = selectedStops(); QListIterator<QtGradientStop *> it(selected); while (it.hasNext()) { QtGradientStop *stop = it.next(); stopList[stop->position()] = stop; } stopList[current->position()] = current; PositionStopMap::ConstIterator itStop = forward ? stopList.constBegin() : stopList.constEnd(); while (itStop != (forward ? stopList.constEnd() : stopList.constBegin())) { if (!forward) --itStop; QtGradientStop *stop = itStop.value(); double pos = stop->position() + offset; if (pos > 1) pos = 1; if (pos < 0) pos = 0; if (current == stop) pos = newPos; QtGradientStop *oldStop = at(pos); if (oldStop && !stopList.values().contains(oldStop)) removeStop(oldStop); moveStop(stop, pos); if (forward) ++itStop; } }