2014-08-27 14:16:06 +02:00
/****************************************************************************
* *
2016-01-15 14:57:40 +01:00
* * Copyright ( C ) 2016 The Qt Company Ltd .
* * Contact : https : //www.qt.io/licensing/
2014-08-27 14:16:06 +02:00
* *
* * This file is part of Qt Creator .
* *
* * Commercial License Usage
* * Licensees holding valid commercial Qt licenses may use this file in
* * accordance with the commercial license agreement provided with the
* * Software or , alternatively , in accordance with the terms contained in
2016-01-15 14:57:40 +01:00
* * a written agreement between you and The Qt Company . For licensing terms
* * and conditions see https : //www.qt.io/terms-conditions. For further
* * information use the contact form at https : //www.qt.io/contact-us.
2014-08-27 14:16:06 +02:00
* *
2016-01-15 14:57:40 +01:00
* * GNU General Public License Usage
* * Alternatively , this file may be used under the terms of the GNU
* * General Public License version 3 as published by the Free Software
* * Foundation with exceptions as appearing in the file LICENSE . GPL3 - EXCEPT
* * included in the packaging of this file . Please review the following
* * information to ensure the GNU General Public License requirements will
* * be met : https : //www.gnu.org/licenses/gpl-3.0.html.
2014-08-27 14:16:06 +02:00
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# ifndef JSONWIZARD_H
# define JSONWIZARD_H
# include "../projectexplorer_export.h"
# include <coreplugin/generatedfile.h>
# include <utils/wizard.h>
2014-10-22 16:22:39 +02:00
# include <utils/macroexpander.h>
2014-08-27 14:16:06 +02:00
2015-12-07 11:27:07 +01:00
# include <QVariant>
2014-08-27 14:16:06 +02:00
namespace ProjectExplorer {
class JsonWizardGenerator ;
// Documentation inside.
class PROJECTEXPLORER_EXPORT JsonWizard : public Utils : : Wizard
{
Q_OBJECT
public :
class GeneratorFile {
public :
GeneratorFile ( ) : generator ( 0 ) { }
GeneratorFile ( const Core : : GeneratedFile & f , JsonWizardGenerator * g ) :
file ( f ) , generator ( g )
{ }
bool isValid ( ) const { return generator ; }
Core : : GeneratedFile file ;
JsonWizardGenerator * generator ;
} ;
typedef QList < GeneratorFile > GeneratorFiles ;
2014-11-10 13:54:59 +01:00
Q_PROPERTY ( GeneratorFiles generateFileList READ generateFileList )
2014-08-27 14:16:06 +02:00
explicit JsonWizard ( QWidget * parent = 0 ) ;
~ JsonWizard ( ) ;
void addGenerator ( JsonWizardGenerator * gen ) ;
2014-10-22 16:22:39 +02:00
Utils : : MacroExpander * expander ( ) ;
2014-08-27 14:16:06 +02:00
2014-11-10 13:54:59 +01:00
GeneratorFiles generateFileList ( ) ;
void commitToFileList ( const GeneratorFiles & list ) ;
2014-08-27 14:16:06 +02:00
2014-11-21 14:06:19 +01:00
QString stringValue ( const QString & n ) const ;
2014-08-27 14:16:06 +02:00
QVariant value ( const QString & n ) const ;
void setValue ( const QString & key , const QVariant & value ) ;
2015-12-07 10:52:59 +01:00
class OptionDefinition {
public :
2015-12-07 11:27:07 +01:00
QString key ( ) const { return m_key ; }
QString value ( Utils : : MacroExpander & expander ) const ;
bool condition ( Utils : : MacroExpander & expander ) const ;
private :
QString m_key ;
QString m_value ;
QVariant m_condition ;
QVariant m_evaluate ;
friend class JsonWizard ;
2015-12-07 10:52:59 +01:00
} ;
static QList < OptionDefinition > parseOptions ( const QVariant & v , QString * errorMessage ) ;
2014-10-15 14:45:31 +02:00
static bool boolFromVariant ( const QVariant & v , Utils : : MacroExpander * expander ) ;
2015-05-27 15:10:54 +02:00
static QString stringListToArrayString ( const QStringList & list ,
const Utils : : MacroExpander * expander ) ;
2014-08-27 14:16:06 +02:00
2014-09-18 15:20:06 +02:00
void removeAttributeFromAllFiles ( Core : : GeneratedFile : : Attribute a ) ;
2015-05-29 10:09:25 +02:00
QHash < QString , QVariant > variables ( ) const override ;
2014-08-27 14:16:06 +02:00
signals :
2014-11-10 13:54:59 +01:00
void preGenerateFiles ( ) ; // emitted before files are generated (can happen several times!)
void postGenerateFiles ( const JsonWizard : : GeneratorFiles & files ) ; // emitted after commitToFileList was called.
2014-08-27 14:16:06 +02:00
void prePromptForOverwrite ( const JsonWizard : : GeneratorFiles & files ) ; // emitted before overwriting checks are done.
void preFormatFiles ( const JsonWizard : : GeneratorFiles & files ) ; // emitted before files are formatted.
void preWriteFiles ( const JsonWizard : : GeneratorFiles & files ) ; // emitted before files are written to disk.
void postProcessFiles ( const JsonWizard : : GeneratorFiles & files ) ; // emitted before files are post-processed.
void filesReady ( const JsonWizard : : GeneratorFiles & files ) ; // emitted just after files are in final state on disk.
2015-04-23 15:02:59 +02:00
void filesPolished ( const JsonWizard : : GeneratorFiles & files ) ; // emitted just after additional files (e.g. settings) not directly related to the project were created.
2014-10-15 18:18:54 +02:00
void allDone ( const JsonWizard : : GeneratorFiles & files ) ; // emitted just after the wizard is done with the files. They are ready to be opened.
2014-08-27 14:16:06 +02:00
public slots :
2015-07-01 10:44:04 +02:00
void accept ( ) override ;
void reject ( ) override ;
2014-08-27 14:16:06 +02:00
2016-01-29 16:38:37 +02:00
private :
2015-01-20 14:45:03 +01:00
void handleNewPages ( int pageId ) ;
void handleError ( const QString & message ) ;
2015-05-29 10:09:25 +02:00
QString stringify ( const QVariant & v ) const override ;
QString evaluate ( const QVariant & v ) const override ;
2015-05-04 13:44:08 +02:00
void openFiles ( const GeneratorFiles & files ) ;
2014-08-27 14:16:06 +02:00
QList < JsonWizardGenerator * > m_generators ;
GeneratorFiles m_files ;
2014-10-22 16:22:39 +02:00
Utils : : MacroExpander m_expander ;
2014-08-27 14:16:06 +02:00
} ;
} // namespace ProjectExplorer
# endif // JSONWIZARD_H