void QtGradientStopsModel::deleteStops() { QList<QtGradientStop *> selected = selectedStops(); QListIterator<QtGradientStop *> itSel(selected); while (itSel.hasNext()) { QtGradientStop *stop = itSel.next(); removeStop(stop); } QtGradientStop *current = currentStop(); if (current) removeStop(current); }
void QtGradientStopsModel::clear() { QList<QtGradientStop *> stopsList = stops().values(); QListIterator<QtGradientStop *> it(stopsList); while (it.hasNext()) removeStop(it.next()); }
QgsVectorGradientColorRampV2Dialog::QgsVectorGradientColorRampV2Dialog( QgsVectorGradientColorRampV2* ramp, QWidget* parent ) : QDialog( parent ), mRamp( ramp ) { setupUi( this ); connect( btnColor1, SIGNAL( clicked() ), this, SLOT( setColor1() ) ); connect( btnColor2, SIGNAL( clicked() ), this, SLOT( setColor2() ) ); // handle stops QgsVectorGradientColorRampV2::StopsMap stops = ramp->stops(); groupStops->setChecked( !stops.isEmpty() ); QgsVectorGradientColorRampV2::StopsMap::iterator i; QList<QTreeWidgetItem *> items; for ( i = stops.begin(); i != stops.end(); ++i ) { QStringList lst; lst << "." << QString::number( i.key()*100, 'f', 0 ); QTreeWidgetItem* item = new QTreeWidgetItem( lst ); setStopColor( item, i.value() ); item->setData( 0, StopOffsetRole, i.key() ); items.append( item ); } treeStops->insertTopLevelItems( 0, items ); treeStops->resizeColumnToContents( 0 ); treeStops->sortByColumn( 1, Qt::AscendingOrder ); treeStops->setSortingEnabled( true ); connect( groupStops, SIGNAL( toggled( bool ) ), this, SLOT( toggledStops( bool ) ) ); connect( btnAddStop, SIGNAL( clicked() ), this, SLOT( addStop() ) ); connect( btnRemoveStop, SIGNAL( clicked() ), this, SLOT( removeStop() ) ); connect( treeStops, SIGNAL( itemDoubleClicked( QTreeWidgetItem*, int ) ), this, SLOT( stopDoubleClicked( QTreeWidgetItem*, int ) ) ); updatePreview(); }
QgsVectorGradientColorRampV2Dialog::QgsVectorGradientColorRampV2Dialog( QgsVectorGradientColorRampV2* ramp, QWidget* parent ) : QDialog( parent ), mRamp( ramp ), mCurrentItem( 0 ) { setupUi( this ); #ifdef Q_WS_MAC setWindowModality( Qt::WindowModal ); #endif connect( btnColor1, SIGNAL( colorChanged( const QColor& ) ), this, SLOT( setColor1( const QColor& ) ) ); connect( btnColor2, SIGNAL( colorChanged( const QColor& ) ), this, SLOT( setColor2( const QColor& ) ) ); // handle stops updateStops(); connect( groupStops, SIGNAL( toggled( bool ) ), this, SLOT( toggledStops( bool ) ) ); connect( btnAddStop, SIGNAL( clicked() ), this, SLOT( addStop() ) ); connect( btnRemoveStop, SIGNAL( clicked() ), this, SLOT( removeStop() ) ); connect( treeStops, SIGNAL( itemDoubleClicked( QTreeWidgetItem*, int ) ), this, SLOT( stopDoubleClicked( QTreeWidgetItem*, int ) ) ); // fill type combobox cboType->blockSignals( true ); cboType->addItem( tr( "Discrete" ) ); cboType->addItem( tr( "Continous" ) ); if ( mRamp->isDiscrete() ) cboType->setCurrentIndex( 0 ); else cboType->setCurrentIndex( 1 ); cboType->blockSignals( false ); // information button if needed // QPushButton* button = buttonBox->addButton( tr( "Information" ), QDialogButtonBox::ActionRole ); if ( mRamp->info().isEmpty() ) btnInformation->setEnabled( false ); // else // connect( button, SIGNAL( pressed() ), this, SLOT( showInformation() ) ); updatePreview(); }
void GradientPreview::mouseReleaseEvent(QMouseEvent *m) { qApp->restoreOverrideCursor(); QRect insideRect = QRect(10, 43, width()-20, 13); if (isEditable) { QRect fpo; if (m->button() == Qt::LeftButton) { if ((Mpressed) && (ActStop > 0) && (ActStop != static_cast<int>(StopM.count()-1)) && (outside || !insideRect.contains(m->pos()))) { onlyselect = false; fill_gradient.removeStop(ActStop); ActStop = 0; repaint(); QList<VColorStop*> cstops = fill_gradient.colorStops(); emit selectedStop(cstops.at(ActStop)); } if ((m->y() < height()) && (m->y() > 43) && (m->x() > 0) && (m->x() < width()) && (ActStop == -1)) { QList<VColorStop*> cstops = fill_gradient.colorStops(); double newStop = static_cast<double>((m->x() - 10)) / (static_cast<double>(width())-20); QColor stopColor = (cstops.count() > 0) ? cstops.at(0)->color : QColor(255, 255, 255); QString stopName = (cstops.count() > 0) ? cstops.at(0)->name : QString("White"); int stopShade = (cstops.count() > 0) ? cstops.at(0)->shade : 100; fill_gradient.addStop(stopColor, newStop, 0.5, 1.0, stopName, stopShade); repaint(); onlyselect = false; cstops = fill_gradient.colorStops(); for (int yg = 0; yg < static_cast<int>(StopM.count()); ++yg) { fpo = QRect(static_cast<int>(StopM[yg])-4, 43, 8, 13); if (fpo.contains(m->pos())) { ActStop = yg; emit selectedStop(cstops.at(ActStop)); repaint(); break; } } } } else if (m->button() == Qt::RightButton) { Mpressed = false; QList<VColorStop*> cstops = fill_gradient.colorStops(); int stop = -1; for (int yg = 0; yg < static_cast<int>(StopM.count()); ++yg) { fpo = QRect(static_cast<int>(StopM[yg])-4, 43, 8, 13); if (fpo.contains(m->pos())) { stop = yg; break; } } contextStop = stop; mPos = m->pos(); QMenu *pmen = new QMenu(); setCursor(QCursor(Qt::ArrowCursor)); pmen->addAction( tr("Add Stop"), this, SLOT(addStop())); if (stop != -1) pmen->addAction( tr("Remove Stop"), this, SLOT(removeStop())); pmen->exec(QCursor::pos()); delete pmen; } } Mpressed = false; if ((!onlyselect) && (ActStop >= 0)){ emit gradientChanged(); QList<VColorStop*> cstops = fill_gradient.colorStops(); emit currStep(cstops.at(ActStop)->rampPoint); } }
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; } }