Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/***************************************************************************
qgscptcitybrowsermodel.h
qgscptcityarchive.h
---------------------
begin : August 2012
copyright : (C) 2009 by Martin Dobias
Expand All @@ -14,8 +14,8 @@
* *
***************************************************************************/

#ifndef QGSCPTCITYBROWSERMODEL_H
#define QGSCPTCITYBROWSERMODEL_H
#ifndef QGSCPTCITYARCHIVE_H
#define QGSCPTCITYARCHIVE_H

#include "qgsvectorcolorrampv2.h"

Expand All @@ -25,6 +25,77 @@
#include <QAction>

class QgsCptCityColorRampV2;
class QgsCptCityDataItem;
class QgsCptCitySelectionItem;

#define DEFAULT_CPTCITY_ARCHIVE "cpt-city-qgis-min"

class CORE_EXPORT QgsCptCityArchive
{
public:
QgsCptCityArchive( QString archiveName = DEFAULT_CPTCITY_ARCHIVE,
QString baseDir = QString() );
~QgsCptCityArchive();

QString baseDir() const;
static QString baseDir( QString archiveName );
static QString defaultBaseDir();
void setBaseDir( QString dirName ) { mBaseDir = dirName; }
bool loadSchemes( QString rootDir = "", bool reset = false );
/** Is the minimal (free to distribute) set of schemes available?
* Currently returns hasAllSchemes, because we don't have a minimal set yet. */
/* bool hasBasicSchemes(); */
/** Is the entire archive available? Currently tests that there is at least one scheme. */
/* bool hasAllSchemes(); */
bool isEmpty();

QStringList listDirNames( QString dirName = "", bool recursive = false );
QStringList listSchemeNames( QString dirName );
QgsCptCityArchive* colorRampFromSVGFile( QString svgFile );
QgsCptCityArchive* colorRampFromSVGString( QString svgString );

QString copyingFileName( const QString& dirName ) const;
QString descFileName( const QString& dirName ) const;
static QString findFileName( const QString & target, const QString & startDir, const QString & baseDir );
static QMap< QString, QString > copyingInfo( const QString& copyingFileName );

QString archiveName() const { return mArchiveName; }
QMap< QString, QStringList > schemeMap() const { return mSchemeMap; }
QMap< QString, QStringList > schemeVariants() const { return mSchemeVariants; }
QMap< QString, QString > dirNamesMap() const { return mDirNamesMap; }
QMap< QString, QStringList > selectionsMap() const { return mSelectionsMap; }
QVector< QgsCptCityDataItem* > rootItems() const { return mRootItems; }
QVector<QgsCptCityDataItem*> selectionItems() const { return mSelectionItems; }

static void initArchives( bool loadAll = false );
static void initArchive( QString archiveName, QString archiveBaseDir );
static void clearArchives();
static QgsCptCityArchive* defaultArchive();
static QString defaultArchiveName();
static QMap< QString, QgsCptCityArchive* > archiveRegistry();

protected:

QString mArchiveName;
QString mBaseDir;
QStringList mDirNames;
QMap< QString, QStringList > mSchemeMap; //key is archive, value is schemes
QMap< QString, QStringList > mSchemeVariants; //key is scheme, value is variants
QMap< QString, QString > mDirNamesMap; //key is name, value is description
QMap< QString, QStringList > mSelectionsMap;
static QString mDefaultArchiveName;
static QMap< QString, QgsCptCityArchive* > mArchiveRegistry;
static QMap< QString, QMap< QString, QString > > mCopyingInfoMap; // mapping of copyinginfo, key is fileName

// new stuff

// root items, namely directories at root of archive
QVector< QgsCptCityDataItem* > mRootItems;
// map of selections, each one corresponds to an .xml file
/* QMap< QString, QVector<QgsCptCitySelectionItem*> > mSelections; */
QVector<QgsCptCityDataItem*> mSelectionItems;

};

/** base class for all items in the model */
class CORE_EXPORT QgsCptCityDataItem : public QObject
Expand Down Expand Up @@ -185,13 +256,13 @@ class CORE_EXPORT QgsCptCityDirectoryItem : public QgsCptCityCollectionItem

};

/** A category: contains subdirectories and color ramps */
class CORE_EXPORT QgsCptCityCategoryItem : public QgsCptCityCollectionItem
/** A selection: contains subdirectories and color ramps */
class CORE_EXPORT QgsCptCitySelectionItem : public QgsCptCityCollectionItem
{
Q_OBJECT
public:
QgsCptCityCategoryItem( QgsCptCityDataItem* parent, QString name, QString path, QString info );
~QgsCptCityCategoryItem();
QgsCptCitySelectionItem( QgsCptCityDataItem* parent, QString name, QString path, QString info );
~QgsCptCitySelectionItem();

QVector<QgsCptCityDataItem*> createChildren();

Expand All @@ -206,7 +277,7 @@ class CORE_EXPORT QgsCptCityBrowserModel : public QAbstractItemModel

public:
explicit QgsCptCityBrowserModel( QObject *parent = 0,
QgsCptCityCollection* collection = QgsCptCityCollection::defaultCollection(),
QgsCptCityArchive* archive = QgsCptCityArchive::defaultArchive(),
QString viewName = "authors" );
~QgsCptCityBrowserModel();

Expand Down Expand Up @@ -292,7 +363,7 @@ class CORE_EXPORT QgsCptCityBrowserModel : public QAbstractItemModel
void removeRootItems();

QVector<QgsCptCityDataItem*> mRootItems;
QgsCptCityCollection* mCollection;
QgsCptCityArchive* mArchive;
QString mViewName;
};

Expand Down
625 changes: 10 additions & 615 deletions src/core/symbology-ng/qgsvectorcolorrampv2.cpp

Large diffs are not rendered by default.

57 changes: 0 additions & 57 deletions src/core/symbology-ng/qgsvectorcolorrampv2.h
Original file line number Diff line number Diff line change
Expand Up @@ -159,63 +159,6 @@ class CORE_EXPORT QgsVectorColorBrewerColorRampV2 : public QgsVectorColorRampV2
QList<QColor> mPalette;
};

#define DEFAULT_CPTCITY_COLLECTION "cpt-city-qgis-min"

class CORE_EXPORT QgsCptCityCollection
{
public:
QgsCptCityCollection( QString collectionName = DEFAULT_CPTCITY_COLLECTION,
QString baseDir = QString() );
~QgsCptCityCollection();

QString baseDir() const;
static QString baseDir( QString collectionName );
static QString defaultBaseDir();
void setBaseDir( QString dirName ) { mBaseDir = dirName; }
bool loadSchemes( QString rootDir = "", bool reset = false );
/** Is the minimal (free to distribute) set of schemes available?
* Currently returns hasAllSchemes, because we don't have a minimal set yet. */
/* bool hasBasicSchemes(); */
/** Is the entire archive available? Currently tests that there is at least one scheme. */
/* bool hasAllSchemes(); */
bool isEmpty();

QStringList listDirNames( QString dirName = "", bool recursive = false );
QStringList listSchemeNames( QString dirName );
QgsCptCityCollection* colorRampFromSVGFile( QString svgFile );
QgsCptCityCollection* colorRampFromSVGString( QString svgString );

QString copyingFileName( const QString& dirName ) const;
QString descFileName( const QString& dirName ) const;
static QMap< QString, QString > copyingInfo( const QString& copyingFileName );

QString collectionName() const { return mCollectionName; }
QMap< QString, QStringList > schemeMap() const { return mSchemeMap; }
QMap< QString, QStringList > schemeVariants() const { return mSchemeVariants; }
QMap< QString, QString > dirNamesMap() const { return mDirNamesMap; }
QMap< QString, QStringList > selectionsMap() const { return mSelectionsMap; }

static void initCollections( bool loadAll = false );
static void initCollection( QString collectionName, QString collectionBaseDir );
static void clearCollections();
static QgsCptCityCollection* defaultCollection();
static QString defaultCollectionName();
static QMap< QString, QgsCptCityCollection* > collectionRegistry();

protected:

QString mCollectionName;
QString mBaseDir;
QStringList mDirNames;
QMap< QString, QStringList > mSchemeMap; //key is collection, value is schemes
QMap< QString, QStringList > mSchemeVariants; //key is scheme, value is variants
QMap< QString, QString > mDirNamesMap; //key is name, value is description
QMap< QString, QStringList > mSelectionsMap;
static QString mDefaultCollectionName;
static QMap< QString, QgsCptCityCollection* > mCollectionRegistry;
static QMap< QString, QMap< QString, QString > > mCopyingInfoMap; // mapping of copyinginfo, key is fileName
};


#define DEFAULT_CPTCITY_SCHEMENAME "cb/div/BrBG_" //change this
#define DEFAULT_CPTCITY_VARIANTNAME "05"
Expand Down
52 changes: 26 additions & 26 deletions src/gui/symbology-ng/qgscptcitycolorrampv2dialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

#include "qgscptcitycolorrampv2dialog.h"

#include "qgscptcitybrowsermodel.h"
#include "qgscptcityarchive.h"
#include "qgsvectorcolorrampv2.h"
#include "qgslogger.h"
#include "qgsapplication.h"
Expand Down Expand Up @@ -138,27 +138,27 @@ void QgsCptCityColorRampV2Dialog::on_mBrowserView_clicked( const QModelIndex &in
// lblSchemeName->setText( "" );
populateVariants();
lblSchemePath->setText( item->path() );
updateCopyingInfo( mCollection->copyingInfo( mCollection->copyingFileName( item->path() ) ) );
updateCopyingInfo( mArchive->copyingInfo( mArchive->copyingFileName( item->path() ) ) );
}
}

void QgsCptCityColorRampV2Dialog::on_tabBar_currentChanged( int index )
{
if ( index == 0 )
{
mCollectionGroup = "selections";
mArchiveGroup = "selections";
mModel = mSelectionsModel;
}
else if ( index == 1 )
{
mModel = mAuthorsModel;
mCollectionGroup = "authors";
mArchiveGroup = "authors";
}
else
{
QgsDebugMsg( QString( "invalid index %1" ).arg( index ) );
mModel = mAuthorsModel;
mCollectionGroup = "authors";
mArchiveGroup = "authors";
}

// set model
Expand Down Expand Up @@ -187,8 +187,8 @@ void QgsCptCityColorRampV2Dialog::on_pbtnLicenseDetails_pressed()
{
path = item->path();
title = tr( "%1 directory details" ).arg( item->name() );
copyFile = mCollection->copyingFileName( path );
descFile = mCollection->descFileName( path );
copyFile = mArchive->copyingFileName( path );
descFile = mArchive->descFileName( path );
}
else if ( item )
{
Expand Down Expand Up @@ -333,24 +333,24 @@ bool QgsCptCityColorRampV2Dialog::eventFilter( QObject *obj, QEvent *event )
}
}

// delay initialization and update collection if it has changed
// delay initialization and update archive if it has changed
void QgsCptCityColorRampV2Dialog::showEvent( QShowEvent * e )
{
// setup collections
if ( QgsCptCityCollection::collectionRegistry().isEmpty() )
// setup archives
if ( QgsCptCityArchive::archiveRegistry().isEmpty() )
{
QgsCptCityCollection::initCollections( true );
QgsCptCityArchive::initArchives( true );
}
mCollection = QgsCptCityCollection::defaultCollection();
// if empty collection, try loading again - this may happen after installing new package
if ( ! mCollection || mCollection->isEmpty() )
mArchive = QgsCptCityArchive::defaultArchive();
// if empty archive, try loading again - this may happen after installing new package
if ( ! mArchive || mArchive->isEmpty() )
{
QgsCptCityCollection::initCollections( true );
mCollection = QgsCptCityCollection::defaultCollection();
QgsCptCityArchive::initArchives( true );
mArchive = QgsCptCityArchive::defaultArchive();
}

// show information on how to install cpt-city files if none are found
if ( ! mCollection || mCollection->isEmpty() )
if ( ! mArchive || mArchive->isEmpty() )
{
// QgsDialog dlg( this );
// dlg.setWindowTitle( tr( "cpt-city gradient files not found" ) );
Expand All @@ -363,7 +363,7 @@ void QgsCptCityColorRampV2Dialog::showEvent( QShowEvent * e )
"(you must enable Experimental plugins in the plugin manager) "
"and use it to download latest cpt-city package.\n"
"You can install the entire cpt-city archive or a selection for QGIS.\n\n"
"2) Download the complete collection (in svg format) "
"2) Download the complete archive (in svg format) "
"and unzip it to your QGis settings directory [%1] .\n\n"
"This file can be found at [%2]\nand current file is [%3]"
).arg( QgsApplication::qgisSettingsDirPath()
Expand All @@ -380,18 +380,18 @@ void QgsCptCityColorRampV2Dialog::showEvent( QShowEvent * e )
return;
}

if ( ! mCollection )
if ( ! mArchive )
return;
QgsDebugMsg( "collection: " + mCollection->collectionName() );
QgsDebugMsg( "archive: " + mArchive->archiveName() );

// model / view
QgsDebugMsg( "loading model/view objects" );
if ( mAuthorsModel )
delete mAuthorsModel;
mAuthorsModel = new QgsCptCityBrowserModel( mBrowserView, mCollection, "authors" );
mAuthorsModel = new QgsCptCityBrowserModel( mBrowserView, mArchive, "authors" );
if ( mSelectionsModel )
delete mSelectionsModel;
mSelectionsModel = new QgsCptCityBrowserModel( mBrowserView, mCollection, "selections" );
mSelectionsModel = new QgsCptCityBrowserModel( mBrowserView, mArchive, "selections" );
mModel = mSelectionsModel;
mBrowserView->setModel( mModel );
mBrowserView->setSelectionMode( QAbstractItemView::SingleSelection );
Expand All @@ -409,7 +409,7 @@ void QgsCptCityColorRampV2Dialog::showEvent( QShowEvent * e )
cboVariantName->setIconSize( QSize( 100, 15 ) );
lblPreview->installEventFilter( this ); // mouse click on preview label shows svg render

// populate tree widget - if item not found in selections collection, look for in authors
// populate tree widget - if item not found in selections archive, look for in authors
// try to apply selection to view
QModelIndex modelIndex = mModel->findPath( mRamp->schemeName() );
if ( modelIndex == QModelIndex() )
Expand All @@ -431,14 +431,14 @@ void QgsCptCityColorRampV2Dialog::showEvent( QShowEvent * e )
// updatePreview();
}
tabBar->blockSignals( false );
if ( mCollection->collectionName() == DEFAULT_CPTCITY_COLLECTION )
if ( mArchive->archiveName() == DEFAULT_CPTCITY_ARCHIVE )
tabBar->setCurrentIndex( 1 );

QDialog::showEvent( e );

// show error message to use color ramp manager to get more gradients
if ( mCollection->collectionName() == DEFAULT_CPTCITY_COLLECTION &&
QgsCptCityCollection::collectionRegistry().count() == 1 )
if ( mArchive->archiveName() == DEFAULT_CPTCITY_ARCHIVE &&
QgsCptCityArchive::archiveRegistry().count() == 1 )
{
QString helpText = tr( "You can download a more complete set of cpt-city gradients "
"by installing the \"Color Ramp Manager\" plugin "
Expand Down
6 changes: 3 additions & 3 deletions src/gui/symbology-ng/qgscptcitycolorrampv2dialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#include "ui_qgscptcitycolorrampv2dialogbase.h"

class QgsCptCityColorRampV2;
class QgsCptCityCollection;
class QgsCptCityArchive;
class QgsCptCityBrowserModel;

class GUI_EXPORT QgsCptCityColorRampV2Dialog : public QDialog, private Ui::QgsCptCityColorRampV2DialogBase
Expand Down Expand Up @@ -49,8 +49,8 @@ class GUI_EXPORT QgsCptCityColorRampV2Dialog : public QDialog, private Ui::QgsCp
bool eventFilter( QObject *obj, QEvent *event );

QgsCptCityColorRampV2* mRamp;
QgsCptCityCollection* mCollection;
QString mCollectionGroup;
QgsCptCityArchive* mArchive;
QString mArchiveGroup;

/* void refreshModel( const QModelIndex& index ); */
void showEvent( QShowEvent * event );
Expand Down
4 changes: 2 additions & 2 deletions tests/src/core/testqgsrasterlayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include <qgsmaplayerregistry.h>
#include "qgssinglebandpseudocolorrenderer.h"
#include "qgsvectorcolorrampv2.h"
#include "qgscptcityarchive.h"

//qgis unit test includes
#include <qgsrenderchecker.h>
Expand Down Expand Up @@ -256,7 +257,7 @@ void TestQgsRasterLayer::colorRamp2()
void TestQgsRasterLayer::colorRamp3()
{
// cpt-city ramp, discrete
QgsCptCityCollection::initCollections();
QgsCptCityArchive::initArchives();
QVERIFY( testColorRamp( "raster_colorRamp3",
new QgsCptCityColorRampV2( "cb/div/BrBG", "_10" ),
QgsColorRampShader::DISCRETE, 10 ) );
Expand All @@ -265,7 +266,6 @@ void TestQgsRasterLayer::colorRamp3()
void TestQgsRasterLayer::colorRamp4()
{
// cpt-city ramp, continuous
QgsCptCityCollection::initCollections();
QVERIFY( testColorRamp( "raster_colorRamp4",
new QgsCptCityColorRampV2( "grass/elevation", "" ),
QgsColorRampShader::DISCRETE, 10 ) );
Expand Down
7 changes: 6 additions & 1 deletion tests/src/core/testqgsstylev2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include "qgsconfig.h"
#include "qgslogger.h"
#include "qgsvectorcolorrampv2.h"
#include "qgscptcityarchive.h"

#include "qgsstylev2.h"

Expand Down Expand Up @@ -83,7 +84,7 @@ void TestStyleV2::initTestCase()
// mStyle->clear();

// cpt-city ramp, small selection available in <testdir>/cpt-city
QgsCptCityCollection::initCollections();
QgsCptCityArchive::initArchives();
}

void TestStyleV2::cleanupTestCase()
Expand Down Expand Up @@ -163,6 +164,8 @@ void TestStyleV2::testLoadColorRamps()
colorTests.insert( "test_cc3", qMakePair( 0.25, QColor( "#7f7f7f" ) ) );
colorTests.insert( "test_cc3", qMakePair( 0.66, QColor( "#ffad00" ) ) );

QgsDebugMsg( "loaded colorRamps: " + colorRamps.join( " " ) );

foreach ( QString name, colorRampsTest )
{
QgsDebugMsg( "colorRamp " + name );
Expand Down Expand Up @@ -191,6 +194,8 @@ void TestStyleV2::testSaveLoad()
mStyle->load( QgsApplication::userStyleV2Path() );

QStringList colorRamps = mStyle->colorRampNames();
QgsDebugMsg( "loaded colorRamps: " + colorRamps.join( " " ) );

QStringList colorRampsTest = QStringList() << "test_gradient";

foreach ( QString name, colorRampsTest )
Expand Down