diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..eb1557129 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +root = true + +[*.{h,cpp}] +indent_size = 4 +indent_style = tab + +[*.{pro,pri}] +indent_size = 4 +indent_style = tab + +[*.ui] +indent_size = 1 +indent_style = space + +[*.{frag,prog,vert}] +indent_size = 4 +indent_style = tab diff --git a/.gitignore b/.gitignore index 77ba94d1b..23c75da21 100644 --- a/.gitignore +++ b/.gitignore @@ -1,27 +1,74 @@ -# generated ones +# Generated +.moc/ +.obj/ +.qrc/ +.ui/ +[Bb]in/ +[Dd]ebug/ +[Rr]elease/ +GeneratedFiles/ Makefile Makefile.Debug Makefile.Release +nifskope_plugin_import.cpp moc_*.cpp qrc_*.cpp ui_*.h +*.tags -# compiled +# Intermediate *.o +*.obj +*.bak +*.ilk +*.log +*.tmp -# eclipse project +# Eclipse project .project .cproject .settings -# qtcreator +# Qt Creator NifSkope.pro.user +.qmake.stash -# binary +# Binaries NifSkope +NifSkope.exe -# VC build dirs -release -debug -# VC debug file +# VC Project +*.cd +*.filters +*.psess +*.sln +*.sln.docstates +*.suo +*.vcxproj +*.vcxproj.user +*.vcproj +*.vcproj.user +*.vsp +*.vspscc +*.vssscc +*.vspx + + +# VC Cache +.vs/ +ipch/ +*.aps +*.cachefile +*.ncb +*.opendb +*.opensdf +*.sdf +*.VC.db +*.VC.VC.opendb + +# VC Debug vc100.pdb + +# OS +[Tt]humbs.db +*.DS_Store diff --git a/.gitmodules b/.gitmodules index f9d3204ea..219658bb9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,12 @@ [submodule "docsys"] - path = docsys - url = git://niftools.git.sourceforge.net/gitroot/niftools/nifdocsys + path = build/docsys + url = https://github.com/niftools/nifdocsys.git [submodule "qhull"] - path = qhull - url = git://gitorious.org/qhull/qhull.git + path = lib/qhull + url = https://github.com/qhull/qhull.git +[submodule "lib/zlib"] + path = lib/zlib + url = https://github.com/madler/zlib.git +[submodule "lib/gli"] + path = lib/gli + url = https://github.com/g-truc/gli.git diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..30202d4c6 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,43 @@ +dist: trusty +sudo: required +language: cpp +os: + - linux + - osx +addons: + apt: + sources: + - sourceline: 'ppa:beineri/opt-qt571-trusty' + packages: [ + # static analysis + clang-3.6, + # qt5 requirement + qt57-meta-minimal + ] +matrix: + fast_finish: true + include: + - os: linux + env: + ANALYZE="scan-build-3.6 --use-cc clang-3.6 --use-c++ clang++-3.6 " + compiler: clang + allow_failures: + - env: ANALYZE="scan-build-3.6 --use-cc clang-3.6 --use-c++ clang++-3.6 " + +before_install: + - if [ "${TRAVIS_OS_NAME}" = "linux" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi + - if [ "${TRAVIS_OS_NAME}" = "linux" ]; then sudo apt-get update -qq; fi + - if [ "${TRAVIS_OS_NAME}" = "linux" ]; then QT_ENV_SCRIPT=$(find /opt -name 'qt*-env.sh'); source $QT_ENV_SCRIPT; fi + - if [ "${TRAVIS_OS_NAME}" = "osx" ]; then brew update; brew install qt@5.7; export PATH="/usr/local/opt/qt@5.7/bin:$PATH"; fi + +install: + - if [ "${TRAVIS_OS_NAME}" = "linux" ]; then sudo apt-get install -qq g++-6; fi + - if [ "${TRAVIS_OS_NAME}" = "linux" ]; then sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 90; fi + +script: + - qmake --version + - qmake -makefile NifSkope.pro + - ${ANALYZE}make -j4 + +notifications: + email: false diff --git a/CHANGELOG.TXT b/CHANGELOG.md similarity index 99% rename from CHANGELOG.TXT rename to CHANGELOG.md index c983ad9bd..1e6435510 100644 --- a/CHANGELOG.TXT +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ == CHANGELOG == +**NOTE: This changelog is not maintained for prerelease versions** + +You may view the changes since 1.1.3 here: https://github.com/jonwd7/nifskope/releases + + This is version 1.1.3 of NifSkope. changes since 1.1.2: diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md new file mode 100644 index 000000000..e69de29bb diff --git a/DOXYGEN.md b/DOXYGEN.md new file mode 100644 index 000000000..e799ff843 --- /dev/null +++ b/DOXYGEN.md @@ -0,0 +1,110 @@ +Main Page {#mainpage} +========= + +[TOC] + + +Introduction {#intro} +======== + +%NifSkope is a graphical program that allows you to open NIF files, view their contents, edit them, and write them back out again. It is written in C++ using OpenGL and the Qt framework. + +The main application resides in the NifSkope class; rendering takes place via GLView. A central feature of Qt is the [Signals and Slots](http://doc.qt.io/qt-5/signalsandslots.html) mechanism, which is used extensively for communication between classes. A NIF is internally represented as a NifModel, and blocks are referenced by means of QModelIndex or QPersistentModelIndex. + +Various functions can be performed on a NIF via the Spell system; this is a good place to start if you want to learn about how a NIF is typically structured and how the blocks are manipulated. + + +Reading and parsing a NIF {#parsing} +======== + +The NIF specification is currently described by [nif.xml](https://github.com/niftools/nifxml) and parsed using NifXmlHandler. + + +Detailed Information {#detailed} +======== + +- @ref ui_programming +- @ref viewport_details + +[Signals and Slots]: http://doc.qt.io/qt-5/signalsandslots.html + + + + +@page ui_programming UI Programming + +[TOC] + +%NifSkope uses [Qt Designer] and [.ui files] to define the layout of most of its UI and uses [Signals and Slots] to allow communication between UI and non-UI code. %NifSkope makes partial use of QMetaObject's [auto-connection] features. + +The UI is styled with a Qt-specific subset of CSS dubbed [QSS]. Most of the style is defined in `style.qss` which is installed alongside NifSkope.exe, though stylesheets can also be defined in C++ using QWidget::setStyleSheet(). + + +See also: [Designing a UI]. + +[Designing a UI]: http://doc.qt.io/qt-5/gettingstartedqt.html#designing-a-ui +[Qt Designer]: http://doc.qt.io/qt-5/qtdesigner-manual.html +[.ui files]: http://doc.qt.io/qt-5/designer-using-a-ui-file.html +[Signals and Slots]: http://doc.qt.io/qt-5/signalsandslots.html +[auto-connection]: http://doc.qt.io/qt-5/designer-using-a-ui-file.html#widgets-and-dialogs-with-auto-connect +[QSS]: http://doc.qt.io/qt-5/stylesheet-reference.html + + + + +@page viewport_details Viewport + +[TOC] + +The main viewport class is GLView. Each frame is painted to the viewport via GLView::paintGL(). The viewport scenegraph is managed by a Scene class. A scene consists of: + +- Node, a physical object in the scene such as NiNode, BSFadeNode, etc. + - Mesh, e.g. NiTriShape + - Particles + - LODNode, BillboardNode +- Property, a property of a physical object in the scene. + +Nodes {#nodes} +======== + +The Node class is the base class for any physical object in a Scene. A Node can have children which are stored in a NodeList. [Properties] are stored with the Node via a PropertyList. + + +Properties {#properties} +======== + +The Property class is the %NifSkope analog to NiProperty blocks. Ideally anything that inherits NiProperty in nif.xml should have a Property subclass implementation. Not all Properties require any kind of manifestation in the scene but they are nevertheless encapsulated and tracked by a Property class. + + +Animation {#animation} +======== + +Anything that should animate must implement the IControllable interface. To animate an IControllable, you create a Controller. These Controllers are then made a `friend class` in the class which implements IControllable. There are currently very few Controllers implemented when it comes to reaching feature parity with the NIF specification: + +| %NifSkope class | NIF Block | +|--------------------------------|----------------------------------| +| KeyframeController | NiKeyframeController | +| TransformController | NiTransformController | +| MultiTargetTransformController | NiMultiTargetTransformController | +| VisibilityController | NiVisController | +| MorphController | NiGeomMorpherController | +| UVController | NiUVController | +| ParticleController | NiParticleSystemController | +| AlphaController | NiAlphaController | +| MaterialColorController | NiMaterialColorController | +| TexFlipController | NiFlipController | +| TexTransController | NiTextureTransformController | + +Newer Bethesda NIFs mostly use Bethesda proprietary (BS*) blocks, none of which are currently supported. This includes `BSKeyframeController, BSEffectShaderPropertyFloatController, BSEffectShaderPropertyColorController, BSLightingShaderPropertyFloatController, BSLightingShaderPropertyColorController` to name a few. + +To utilize [Controllers] a class must implement IControllable's methods: + +- IControllable::clear() +- IControllable::update() +- IControllable::transform() +- IControllable::setController() + +[Properties]: @ref Property +[Controllers]: @ref Controller + + diff --git a/Doxyfile.in b/Doxyfile.in deleted file mode 100644 index f705c51f4..000000000 --- a/Doxyfile.in +++ /dev/null @@ -1,1257 +0,0 @@ -# Doxyfile 1.5.2 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file that -# follow. The default is UTF-8 which is also the encoding used for all text before -# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into -# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of -# possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = NifSkope - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = @VERSION@ - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = apidocs - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, -# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, -# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, -# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to -# include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = - -# This tag can be used to specify the character encoding of the source files that -# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default -# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. -# See http://www.gnu.org/software/libiconv for the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = release debug qhull docsys .git - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = moc_* GLee.* - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the output. -# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, -# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentstion. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = ALL - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = UNICODE QT_LARGEFILE_SUPPORT FSENGINE EDIT_ON_ACTIVATE QT_THREAD_SUPPORT QT_DLL QT_XML_LIB QT_OPENGL_LIB QT_GUI_LIB QT_NETWORK_LIB QT_CORE_LIB QT_NEEDS_QMAIN Q_OS_WIN32 Q_OS_LINUX - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = "qt.tag = http://qt.nokia.com/doc/4.6/" - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to -# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to -# specify the directory where the mscgen tool resides. If left empty the tool is assumed to -# be found in the default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a caller dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen will always -# show the root nodes and its direct children regardless of this setting. - -DOT_GRAPH_MAX_NODES = 50 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/LICENSE.TXT b/LICENSE.md similarity index 82% rename from LICENSE.TXT rename to LICENSE.md index 49d7496f3..68b04db2a 100644 --- a/LICENSE.TXT +++ b/LICENSE.md @@ -1,6 +1,6 @@ NIFSKOPE LICENSE -Copyright (c) 2005-2012, NIF File Format Library and Tools. +Copyright (c) 2005-2014, NIF File Format Library and Tools. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -29,13 +29,13 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. CREDITS -The Windows build of NifSkope uses Havok(R) for the generation of mopp code. -(C)Copyright 1999-2008 Havok.com Inc. (and its Licensors). +The Windows build of NifSkope uses Havok(R) for the generation of MOPP code. +Copyright (c) 1999-2014 Havok.com Inc. (and its Licensors). All Rights Reserved. See www.havok.com for details. -NifSkope uses Qhull for the generation of convex hulls, from www.qhull.org. -Copyright (c) 1993-2010 C.B. Barber and The Geometry Center; see -Qhull_COPYING.txt for details and http://gitorious.org/qhull/ for the source. +NifSkope uses Qhull for the generation of convex hulls, from http://www.qhull.org. +Copyright (c) 1993-2012 C.B. Barber and The Geometry Center. +See Qhull_COPYING.txt for details and http://gitorious.org/qhull/ for the source. NOTICE diff --git a/NifMopp.dll b/NifMopp.dll deleted file mode 100644 index de6596423..000000000 Binary files a/NifMopp.dll and /dev/null differ diff --git a/NifSkope.pro b/NifSkope.pro index 9d6250e5c..1c0bc5a69 100644 --- a/NifSkope.pro +++ b/NifSkope.pro @@ -1,261 +1,549 @@ +############################### +## BUILD OPTIONS +############################### + TEMPLATE = app -LANGUAGE = C++ TARGET = NifSkope -QT += xml opengl network +QT += xml opengl network widgets -CONFIG += qt debug_and_release debug_and_release_target thread warn_on +# Require Qt 5.7 or higher +contains(QT_VERSION, ^5\\.[0-6]\\..*) { + message("Cannot build NifSkope with Qt version $${QT_VERSION}") + error("Minimum required version is Qt 5.7") +} -CONFIG += fsengine +# C++11/14 Support +CONFIG += c++14 -unix:!macx { - LIBS += -lGLU +# Dependencies +CONFIG += nvtristrip qhull zlib lz4 fsengine gli + +# Debug/Release options +CONFIG(debug, debug|release) { + # Debug Options + BUILD = debug + CONFIG += console +} else { + # Release Options + BUILD = release + CONFIG -= console + DEFINES += QT_NO_DEBUG_OUTPUT } +# TODO: Get rid of this define +# uncomment this if you want the text stats gl option +# DEFINES += USE_GL_QPAINTER + +#TRANSLATIONS += \ +# res/lang/NifSkope_de.ts \ +# res/lang/NifSkope_fr.ts + +# Require explicit +DEFINES += \ + QT_NO_CAST_FROM_BYTEARRAY \ # QByteArray deprecations + QT_NO_URL_CAST_FROM_STRING \ # QUrl deprecations + QT_DISABLE_DEPRECATED_BEFORE=0x050300 #\ # Disable all functions deprecated as of 5.3 + + # Useful for tracking down strings not using + # QObject::tr() for translations. + # QT_NO_CAST_FROM_ASCII \ + # QT_NO_CAST_TO_ASCII + + +VISUALSTUDIO = false +*msvc* { + ###################################### + ## Detect Visual Studio vs Qt Creator + ###################################### + # Qt Creator = shadow build + # Visual Studio = no shadow build + + # Strips PWD (source) from OUT_PWD (build) to test if they are on the same path + # - contains() does not work + # - equals( PWD, $${OUT_PWD} ) is not sufficient + REP = $$replace(OUT_PWD, $${PWD}, "") + + # Test if Build dir is outside Source dir + # if REP == OUT_PWD, not Visual Studio + !equals( REP, $${OUT_PWD} ):VISUALSTUDIO = true + unset(REP) -macx{ - LIBS += -framework CoreFoundation + # Set OUT_PWD to ./bin so that qmake doesn't clutter PWD + # Unfortunately w/ VS qmake still creates empty debug/release folders in PWD. + # They are never used but get auto-generated because of CONFIG += debug_and_release + $$VISUALSTUDIO:OUT_PWD = $${_PRO_FILE_PWD_}/bin } -# uncomment this if you want all the messages to be logged to stdout -#CONFIG += console +############################### +## FUNCTIONS +############################### -# uncomment this if you want the text stats gl option -#DEFINES += USE_GL_QPAINTER +include(NifSkope_functions.pri) -DESTDIR = . + +############################### +## MACROS +############################### + +# NifSkope Version +VER = $$getVersion() +# NifSkope Revision +REVISION = $$getRevision() # NIFSKOPE_VERSION macro -DEFINES += NIFSKOPE_VERSION=\\\"$$cat(VERSION)\\\" - -# build NIFSKOPE_REVISION macro -GIT_HEAD = $$cat(.git/HEAD) -# at this point GIT_HEAD either contains commit hash, or symbolic ref: -# GIT_HEAD = 303c05416ecceb3368997c86676a6e63e968bc9b -# GIT_HEAD = ref: refs/head/feature/blabla -contains(GIT_HEAD, "ref:") { - # resolve symbolic ref - GIT_HEAD = .git/$$member(GIT_HEAD, 1) - # GIT_HEAD now points to the file containing hash, - # e.g. .git/refs/head/feature/blabla - exists($$GIT_HEAD) { - GIT_HEAD = $$cat($$GIT_HEAD) - } else { - clear(GIT_HEAD) - } +DEFINES += NIFSKOPE_VERSION=\\\"$${VER}\\\" + +# NIFSKOPE_REVISION macro +!isEmpty(REVISION) { + DEFINES += NIFSKOPE_REVISION=\\\"$${REVISION}\\\" } -count(GIT_HEAD, 1) { - # single component, hopefully the commit hash - # fetch first seven characters (abbreviated hash) - GIT_HEAD ~= s/^(.......).*/\\1/ - DEFINES += NIFSKOPE_REVISION=\\\"$$GIT_HEAD\\\" + + +############################### +## OUTPUT DIRECTORIES +############################### + +# build_pass is necessary +# Otherwise it will create empty .moc, .ui, etc. dirs on the drive root +build_pass|!debug_and_release { + win32:equals( VISUALSTUDIO, true ) { + # Visual Studio + DESTDIR = $${_PRO_FILE_PWD_}/bin/$${BUILD} + # INTERMEDIATE FILES + INTERMEDIATE = $${DESTDIR}/../GeneratedFiles/$${BUILD} + } else { + # Qt Creator + DESTDIR = $${OUT_PWD}/$${BUILD} + # INTERMEDIATE FILES + INTERMEDIATE = $${DESTDIR}/../GeneratedFiles/ + } + + UI_DIR = $${INTERMEDIATE}/.ui + MOC_DIR = $${INTERMEDIATE}/.moc + RCC_DIR = $${INTERMEDIATE}/.qrc + OBJECTS_DIR = $${INTERMEDIATE}/.obj } +############################### +## TARGETS +############################### + +include(NifSkope_targets.pri) + + +############################### +## PROJECT SCOPES +############################### + +INCLUDEPATH += src lib + HEADERS += \ - basemodel.h \ - config.h \ - gl/dds/BlockDXT.h \ - gl/dds/Color.h \ - gl/dds/ColorBlock.h \ - gl/dds/Common.h \ - gl/dds/dds_api.h \ - gl/dds/DirectDrawSurface.h \ - gl/dds/Image.h \ - gl/dds/PixelFormat.h \ - gl/dds/Stream.h \ - gl/glcontrolable.h \ - gl/glcontroller.h \ - gl/GLee.h \ - gl/glmarker.h \ - gl/glmesh.h \ - gl/glnode.h \ - gl/glparticles.h \ - gl/glproperty.h \ - gl/glscene.h \ - gl/gltex.h \ - gl/gltexloaders.h \ - gl/gltools.h \ - gl/marker/constraints.h \ - gl/marker/furniture.h \ - gl/renderer.h \ - glview.h \ - hacking.h \ - importex/3ds.h \ - kfmmodel.h \ - message.h \ - nifexpr.h \ - nifitem.h \ - nifmodel.h \ - nifproxy.h \ - nifskope.h \ - niftypes.h \ - nifvalue.h \ - NvTriStrip/NvTriStrip.h \ - NvTriStrip/NvTriStripObjects.h \ - NvTriStrip/qtwrapper.h \ - NvTriStrip/VertexCache.h \ - options.h \ - qhull/src/libqhull/geom.h \ - qhull/src/libqhull/io.h \ - qhull/src/libqhull/libqhull.h \ - qhull/src/libqhull/mem.h \ - qhull/src/libqhull/merge.h \ - qhull/src/libqhull/poly.h \ - qhull/src/libqhull/qhull_a.h \ - qhull/src/libqhull/qset.h \ - qhull/src/libqhull/random.h \ - qhull/src/libqhull/stat.h \ - qhull/src/libqhull/user.h \ - qhull.h \ - spellbook.h \ - spells/blocks.h \ - spells/mesh.h \ - spells/misc.h \ - spells/skeleton.h \ - spells/stringpalette.h \ - spells/tangentspace.h \ - spells/texture.h \ - spells/transform.h \ - widgets/colorwheel.h \ - widgets/copyfnam.h \ - widgets/fileselect.h \ - widgets/floatedit.h \ - widgets/floatslider.h \ - widgets/groupbox.h \ - widgets/inspect.h \ - widgets/nifcheckboxlist.h \ - widgets/nifeditors.h \ - widgets/nifview.h \ - widgets/refrbrowser.h \ - widgets/uvedit.h \ - widgets/valueedit.h \ - widgets/xmlcheck.h \ - ui/about_dialog.h + src/data/nifitem.h \ + src/data/niftypes.h \ + src/data/nifvalue.h \ + src/gl/marker/constraints.h \ + src/gl/marker/furniture.h \ + src/gl/bsshape.h \ + src/gl/controllers.h \ + src/gl/glcontroller.h \ + src/gl/glmarker.h \ + src/gl/glmesh.h \ + src/gl/glnode.h \ + src/gl/glparticles.h \ + src/gl/glproperty.h \ + src/gl/glscene.h \ + src/gl/gltex.h \ + src/gl/gltexloaders.h \ + src/gl/gltools.h \ + src/gl/icontrollable.h \ + src/gl/renderer.h \ + src/io/material.h \ + src/io/nifstream.h \ + src/lib/importex/3ds.h \ + src/lib/nvtristripwrapper.h \ + src/lib/qhull.h \ + src/model/basemodel.h \ + src/model/kfmmodel.h \ + src/model/nifmodel.h \ + src/model/nifproxymodel.h \ + src/model/undocommands.h \ + src/spells/blocks.h \ + src/spells/mesh.h \ + src/spells/misc.h \ + src/spells/sanitize.h \ + src/spells/skeleton.h \ + src/spells/stringpalette.h \ + src/spells/tangentspace.h \ + src/spells/texture.h \ + src/spells/transform.h \ + src/ui/widgets/colorwheel.h \ + src/ui/widgets/fileselect.h \ + src/ui/widgets/floatedit.h \ + src/ui/widgets/floatslider.h \ + src/ui/widgets/groupbox.h \ + src/ui/widgets/inspect.h \ + src/ui/widgets/lightingwidget.h \ + src/ui/widgets/nifcheckboxlist.h \ + src/ui/widgets/nifeditors.h \ + src/ui/widgets/nifview.h \ + src/ui/widgets/refrbrowser.h \ + src/ui/widgets/uvedit.h \ + src/ui/widgets/valueedit.h \ + src/ui/widgets/xmlcheck.h \ + src/ui/about_dialog.h \ + src/ui/checkablemessagebox.h \ + src/ui/settingsdialog.h \ + src/ui/settingspane.h \ + src/xml/nifexpr.h \ + src/glview.h \ + src/message.h \ + src/nifskope.h \ + src/spellbook.h \ + src/version.h \ + lib/dds.h \ + lib/dxgiformat.h \ + lib/half.h SOURCES += \ - basemodel.cpp \ - gl/dds/BlockDXT.cpp \ - gl/dds/ColorBlock.cpp \ - gl/dds/dds_api.cpp \ - gl/dds/DirectDrawSurface.cpp \ - gl/dds/Image.cpp \ - gl/dds/Stream.cpp \ - gl/glcontroller.cpp \ - gl/GLee.cpp \ - gl/glmarker.cpp \ - gl/glmesh.cpp \ - gl/glnode.cpp \ - gl/glparticles.cpp \ - gl/glproperty.cpp \ - gl/glscene.cpp \ - gl/gltex.cpp \ - gl/gltexloaders.cpp \ - gl/gltools.cpp \ - gl/renderer.cpp \ - glview.cpp \ - importex/3ds.cpp \ - importex/importex.cpp \ - importex/obj.cpp \ - importex/col.cpp \ - kfmmodel.cpp \ - kfmxml.cpp \ - message.cpp \ - nifdelegate.cpp \ - nifexpr.cpp \ - nifmodel.cpp \ - nifproxy.cpp \ - nifskope.cpp \ - niftypes.cpp \ - nifvalue.cpp \ - nifxml.cpp \ - NvTriStrip/NvTriStrip.cpp \ - NvTriStrip/NvTriStripObjects.cpp \ - NvTriStrip/qtwrapper.cpp \ - NvTriStrip/VertexCache.cpp \ - options.cpp \ - qhull.cpp \ - spellbook.cpp \ - spells/animation.cpp \ - spells/blocks.cpp \ - spells/bounds.cpp \ - spells/color.cpp \ - spells/flags.cpp \ - spells/fo3only.cpp \ - spells/havok.cpp \ - spells/headerstring.cpp \ - spells/light.cpp \ - spells/material.cpp \ - spells/mesh.cpp \ - spells/misc.cpp \ - spells/moppcode.cpp \ - spells/morphctrl.cpp \ - spells/normals.cpp \ - spells/optimize.cpp \ - spells/sanitize.cpp \ - spells/skeleton.cpp \ - spells/stringpalette.cpp \ - spells/strippify.cpp \ - spells/tangentspace.cpp \ - spells/texture.cpp \ - spells/transform.cpp \ - widgets/colorwheel.cpp \ - widgets/copyfnam.cpp \ - widgets/fileselect.cpp \ - widgets/floatedit.cpp \ - widgets/floatslider.cpp \ - widgets/groupbox.cpp \ - widgets/inspect.cpp \ - widgets/nifcheckboxlist.cpp \ - widgets/nifeditors.cpp \ - widgets/nifview.cpp \ - widgets/refrbrowser.cpp \ - widgets/uvedit.cpp \ - widgets/valueedit.cpp \ - widgets/xmlcheck.cpp \ - ui/about_dialog.cpp + src/data/niftypes.cpp \ + src/data/nifvalue.cpp \ + src/gl/bsshape.cpp \ + src/gl/controllers.cpp \ + src/gl/glcontroller.cpp \ + src/gl/glmarker.cpp \ + src/gl/glmesh.cpp \ + src/gl/glnode.cpp \ + src/gl/glparticles.cpp \ + src/gl/glproperty.cpp \ + src/gl/glscene.cpp \ + src/gl/gltex.cpp \ + src/gl/gltexloaders.cpp \ + src/gl/gltools.cpp \ + src/gl/renderer.cpp \ + src/io/material.cpp \ + src/io/nifstream.cpp \ + src/lib/importex/3ds.cpp \ + src/lib/importex/importex.cpp \ + src/lib/importex/obj.cpp \ + src/lib/importex/col.cpp \ + src/lib/nvtristripwrapper.cpp \ + src/lib/qhull.cpp \ + src/model/basemodel.cpp \ + src/model/kfmmodel.cpp \ + src/model/nifdelegate.cpp \ + src/model/nifmodel.cpp \ + src/model/nifproxymodel.cpp \ + src/model/undocommands.cpp \ + src/spells/animation.cpp \ + src/spells/blocks.cpp \ + src/spells/bounds.cpp \ + src/spells/color.cpp \ + src/spells/flags.cpp \ + src/spells/fo3only.cpp \ + src/spells/havok.cpp \ + src/spells/headerstring.cpp \ + src/spells/light.cpp \ + src/spells/materialedit.cpp \ + src/spells/mesh.cpp \ + src/spells/misc.cpp \ + src/spells/moppcode.cpp \ + src/spells/morphctrl.cpp \ + src/spells/normals.cpp \ + src/spells/optimize.cpp \ + src/spells/sanitize.cpp \ + src/spells/skeleton.cpp \ + src/spells/stringpalette.cpp \ + src/spells/strippify.cpp \ + src/spells/tangentspace.cpp \ + src/spells/texture.cpp \ + src/spells/transform.cpp \ + src/ui/widgets/colorwheel.cpp \ + src/ui/widgets/fileselect.cpp \ + src/ui/widgets/floatedit.cpp \ + src/ui/widgets/floatslider.cpp \ + src/ui/widgets/groupbox.cpp \ + src/ui/widgets/inspect.cpp \ + src/ui/widgets/lightingwidget.cpp \ + src/ui/widgets/nifcheckboxlist.cpp \ + src/ui/widgets/nifeditors.cpp \ + src/ui/widgets/nifview.cpp \ + src/ui/widgets/refrbrowser.cpp \ + src/ui/widgets/uvedit.cpp \ + src/ui/widgets/valueedit.cpp \ + src/ui/widgets/xmlcheck.cpp \ + src/ui/about_dialog.cpp \ + src/ui/checkablemessagebox.cpp \ + src/ui/settingsdialog.cpp \ + src/ui/settingspane.cpp \ + src/xml/kfmxml.cpp \ + src/xml/nifexpr.cpp \ + src/xml/nifxml.cpp \ + src/glview.cpp \ + src/main.cpp \ + src/message.cpp \ + src/nifskope.cpp \ + src/nifskope_ui.cpp \ + src/spellbook.cpp \ + src/version.cpp \ + lib/half.cpp RESOURCES += \ - nifskope.qrc + res/nifskope.qrc FORMS += \ - ui/about_dialog.ui + src/ui/about_dialog.ui \ + src/ui/checkablemessagebox.ui \ + src/ui/nifskope.ui \ + src/ui/settingsdialog.ui \ + src/ui/settingsgeneral.ui \ + src/ui/settingsrender.ui \ + src/ui/settingsresources.ui \ + src/ui/widgets/lightingwidget.ui + + +############################### +## DEPENDENCY SCOPES +############################### fsengine { - DEFINES += FSENGINE + INCLUDEPATH += lib/fsengine + HEADERS += \ + lib/fsengine/bsa.h \ + lib/fsengine/fsengine.h \ + lib/fsengine/fsmanager.h + SOURCES += \ + lib/fsengine/bsa.cpp \ + lib/fsengine/fsengine.cpp \ + lib/fsengine/fsmanager.cpp +} + +nvtristrip { + INCLUDEPATH += lib/NvTriStrip + HEADERS += \ + lib/NvTriStrip/NvTriStrip.h \ + lib/NvTriStrip/NvTriStripObjects.h \ + lib/NvTriStrip/VertexCache.h + SOURCES += \ + lib/NvTriStrip/NvTriStrip.cpp \ + lib/NvTriStrip/NvTriStripObjects.cpp \ + lib/NvTriStrip/VertexCache.cpp +} + +qhull { + !*msvc*:QMAKE_CFLAGS += -isystem ../nifskope/lib/qhull/src + !*msvc*:QMAKE_CXXFLAGS += -isystem ../nifskope/lib/qhull/src + else:INCLUDEPATH += lib/qhull/src + HEADERS += $$files($$PWD/lib/qhull/src/libqhull/*.h, false) +} + +gli { + !*msvc*:QMAKE_CXXFLAGS += -isystem ../nifskope/lib/gli/gli -isystem ../nifskope/lib/gli/external + else:INCLUDEPATH += lib/gli/gli lib/gli/external + HEADERS += $$files($$PWD/lib/gli/gli/*.hpp, true) + HEADERS += $$files($$PWD/lib/gli/gli/*.inl, true) + HEADERS += $$files($$PWD/lib/gli/external/glm/*.hpp, true) + HEADERS += $$files($$PWD/lib/gli/external/glm/*.inl, true) +} + +zlib { + !*msvc*:QMAKE_CFLAGS += -isystem ../nifskope/lib/zlib + !*msvc*:QMAKE_CXXFLAGS += -isystem ../nifskope/lib/zlib + else:INCLUDEPATH += lib/zlib + HEADERS += $$files($$PWD/lib/zlib/*.h, false) + SOURCES += $$files($$PWD/lib/zlib/*.c, false) +} + +lz4 { + DEFINES += LZ4_STATIC XXH_PRIVATE_API + HEADERS += \ - fsengine/bsa.h \ - fsengine/fsengine.h \ - fsengine/fsmanager.h + lib/lz4frame.h \ + lib/xxhash.h + SOURCES += \ - fsengine/bsa.cpp \ - fsengine/fsengine.cpp \ - fsengine/fsmanager.cpp + lib/lz4frame.c \ + lib/xxhash.c +} + +############################### +## COMPILER SCOPES +############################### + +QMAKE_CXXFLAGS_RELEASE -= -O +QMAKE_CXXFLAGS_RELEASE -= -O1 +QMAKE_CXXFLAGS_RELEASE -= -O2 + +win32 { + RC_FILE = res/icon.rc + DEFINES += EDIT_ON_ACTIVATE +} + +# MSVC +# Both Visual Studio and Qt Creator +# Required: msvc2013 or higher +*msvc* { + + # Grab _MSC_VER from the mkspecs that Qt was compiled with + # e.g. VS2015 = 1900, VS2017 = 1910 + _MSC_VER = $$find(QMAKE_COMPILER_DEFINES, "_MSC_VER") + _MSC_VER = $$split(_MSC_VER, =) + _MSC_VER = $$member(_MSC_VER, 1) + + # Reject unsupported MSVC versions + !isEmpty(_MSC_VER):lessThan(_MSC_VER, 1900) { + error("NifSkope only supports MSVC 2015 or later. If this is too prohibitive you may use Qt Creator with MinGW.") + } + + # So VCProj Filters do not flatten headers/source + CONFIG -= flat + + # COMPILER FLAGS + + # Optimization flags + QMAKE_CXXFLAGS_RELEASE *= -O2 + # Multithreaded compiling for Visual Studio + QMAKE_CXXFLAGS += -MP + + # Standards conformance to match GCC and clang + !isEmpty(_MSC_VER):greaterThan(_MSC_VER, 1900) { + QMAKE_CXXFLAGS += /permissive- /std:c++latest + } + + # LINKER FLAGS + + # Relocate .lib and .exp files to keep release dir clean + QMAKE_LFLAGS += /IMPLIB:$$syspath($${INTERMEDIATE}/NifSkope.lib) + + # PDB location + QMAKE_LFLAGS_DEBUG += /PDB:$$syspath($${INTERMEDIATE}/nifskope.pdb) +} + + +# MinGW, GCC +# Recommended: GCC 4.8.1+ +*-g++ { + + # COMPILER FLAGS + + # Optimization flags + QMAKE_CXXFLAGS_DEBUG -= -O0 -g + QMAKE_CXXFLAGS_DEBUG *= -Og -g3 + QMAKE_CXXFLAGS_RELEASE *= -O3 -mfpmath=sse + + # C++11 Support + QMAKE_CXXFLAGS_RELEASE *= -std=c++14 + + # Extension flags + QMAKE_CXXFLAGS_RELEASE *= -msse2 -msse } win32 { - # useful for MSVC2005 - CONFIG += embed_manifest_exe - CONFIG -= flat - - RC_FILE = icon.rc - DEFINES += EDIT_ON_ACTIVATE - - # Ignore specific errors that are very common in the code - # CFLAGS += /Zc:wchar_t- - # QMAKE_CFLAGS += /Zc:wchar_t- /wd4305 - # QMAKE_CXXFLAGS += /Zc:forScope- /Zc:wchar_t- /wd4305 - - # add specific libraries to msvc builds - MSVCPROJ_LIBS += winmm.lib Ws2_32.lib imm32.lib + # GL libs for Qt 5.5+ + LIBS += -lopengl32 -lglu32 } -win32:console { - LIBS += -lqtmain +unix:!macx { + LIBS += -lGLU } -console { - DEFINES += NO_MESSAGEHANDLER +macx { + LIBS += -framework CoreFoundation } -TRANSLATIONS += lang/NifSkope_de.ts lang/NifSkope_fr.ts + +# Pre/Post Link in build_pass only +build_pass|!debug_and_release { + +############################### +## QMAKE_PRE_LINK +############################### + + # Find `sed` command + SED = $$getSed() + + !isEmpty(SED) { + # Replace @VERSION@ with number from build/VERSION + # Copy build/README.md.in > README.md + QMAKE_PRE_LINK += $${SED} -e s/@VERSION@/$${VER}/ $${PWD}/build/README.md.in > $${PWD}/README.md $$nt + } + + +############################### +## QMAKE_POST_LINK +############################### + +win32:contains(QT_ARCH, i386) { + DEP += \ + dep/NifMopp.dll + copyFiles( $$DEP ) +} + + XML += \ + build/docsys/nifxml/nif.xml \ + build/docsys/kfmxml/kfm.xml + + QSS += \ + res/style.qss + + #LANG += \ + # res/lang + + SHADERS += \ + res/shaders + + READMES += \ + CHANGELOG.md \ + LICENSE.md \ + README.md + + copyDirs( $$SHADERS, shaders ) + #copyDirs( $$LANG, lang ) + copyFiles( $$XML $$QSS ) + + # Copy Readmes and rename to TXT + copyFiles( $$READMES,,,, md:txt ) + + win32:!static { + # Copy DLLs to build dir + copyFiles( $$QtBins(),, true ) + + platforms += \ + $$[QT_INSTALL_PLUGINS]/platforms/qminimal$${DLLEXT} \ + $$[QT_INSTALL_PLUGINS]/platforms/qwindows$${DLLEXT} + + imageformats += \ + $$[QT_INSTALL_PLUGINS]/imageformats/qjpeg$${DLLEXT} \ + $$[QT_INSTALL_PLUGINS]/imageformats/qtga$${DLLEXT} \ + $$[QT_INSTALL_PLUGINS]/imageformats/qwebp$${DLLEXT} + + copyFiles( $$platforms, platforms, true ) + copyFiles( $$imageformats, imageformats, true ) + } + +} # end build_pass + + +# Build Messages +# (Add `buildMessages` to CONFIG to use) +buildMessages:build_pass|buildMessages:!debug_and_release { + CONFIG(debug, debug|release) { + message("Debug Mode") + } CONFIG(release, release|debug) { + message("Release Mode") + } + + message(mkspec _______ $$QMAKESPEC) + message(cxxflags _____ $$QMAKE_CXXFLAGS) + message(arch _________ $$QMAKE_TARGET.arch) + message(src __________ $$PWD) + message(build ________ $$OUT_PWD) + message(Qt binaries __ $$[QT_INSTALL_BINS]) + + build_pass:equals( VISUALSTUDIO, true ) { + message(Visual Studio __ Yes) + } + + #message($$CONFIG) +} # vim: set filetype=config : diff --git a/NifSkope_functions.pri b/NifSkope_functions.pri new file mode 100644 index 000000000..ad95f8136 --- /dev/null +++ b/NifSkope_functions.pri @@ -0,0 +1,272 @@ +############################### +## Functions +############################### + +# Shortcut for ends of commands +nt = $$escape_expand(\\n\\t) + +# Sanitize filepath for OS +defineReplace(syspath) { + path = $$1 + path ~= s,/,$${QMAKE_DIR_SEP},g + + return($$path) +} + + +# Get command for sed +defineReplace(getSed) { + sedbin = "" + + win32 { + PROG = C:/Program Files (x86) + !exists($$PROG) { + PROG = C:/Program Files + } + + GNUWIN32 = $${PROG}/GnuWin32/bin + CYGWIN = C:/cygwin/bin + CYGWIN64 = C:/cygwin64/bin + SEDPATH = /sed.exe + + exists($${GNUWIN32}$${SEDPATH}) { + sedbin = $${GNUWIN32}$${SEDPATH} + } else:exists($${CYGWIN}$${SEDPATH}) { + sedbin = $${CYGWIN}$${SEDPATH} + } else:exists($${CYGWIN64}$${SEDPATH}) { + sedbin = $${CYGWIN64}$${SEDPATH} + } else { + #message(Neither GnuWin32 or Cygwin were found) + sedbin = $$system(where sed 2> NUL) + } + + !isEmpty(sedbin) { + sedbin = \"$${sedbin}\" + } + } + + unix { + sedbin = sed + } + + return($$sedbin) +} + + +# Get command for 7z +defineReplace(get7z) { + _7zbin = "" + + win32 { + _7zbin = C:/Program Files/7-Zip/7z.exe + + !exists($$_7zbin) { + _7zbin = C:/Program Files (x86)/7-Zip/7z.exe + } + !exists($$_7zbin) { + return() + } + } + + unix { + # TODO: Untested + _7zbin = $$system(which unzip 2>/dev/null) + } + + return(\"$$_7zbin\") +} + + +_VERSION = +_REVISION = + +# Retrieve NifSkope version +defineReplace(getVersion) { + # I turned this into a function because I didn't want + # the Version/Revision macros to have to straddle the + # includes. (VERSION needed to come before, REVISION after) + !isEmpty(_VERSION):return($$_VERSION) + + _VERSION = $$cat(build/VERSION) + export(_VERSION) + return($$_VERSION) +} + +# Retrieve NifSkope revision +defineReplace(getRevision) { + + !isEmpty(_REVISION):return($$_REVISION) + + GIT_HEAD = $$cat(.git/HEAD) + # At this point GIT_HEAD either contains commit hash, or symbolic ref: + # GIT_HEAD = 303c05416ecceb3368997c86676a6e63e968bc9b + # GIT_HEAD = ref: refs/head/feature/blabla + contains(GIT_HEAD, "ref:") { + # Resolve symbolic ref + GIT_HEAD = .git/$$member(GIT_HEAD, 1) + # GIT_HEAD now points to the file containing hash, + # e.g. .git/refs/head/feature/blabla + exists($$GIT_HEAD) { + GIT_HEAD = $$cat($$GIT_HEAD) + } else { + clear(GIT_HEAD) + } + } + count(GIT_HEAD, 1) { + # Single component, hopefully the commit hash + # Fetch first seven characters (abbreviated hash) + GIT_HEAD ~= s/^(.......).*/\\1/ + _REVISION = $$GIT_HEAD + export(_REVISION) + return($$_REVISION) + } + return() +} + +# Format Qt Version +defineReplace(QtHex) { + + maj = $$QT_MAJOR_VERSION + min = $$QT_MINOR_VERSION + pat = $$QT_PATCH_VERSION + + greaterThan(min, 9) { + equals(min, 10):min=a + equals(min, 11):min=b + equals(min, 12):min=c + equals(min, 13):min=d + equals(min, 14):min=e + equals(min, 15):min=f + greaterThan(min, 15):min=f + # Stop. They won't go this high. + } + + greaterThan(pat, 9) { + equals(pat, 10):pat=a + equals(pat, 11):pat=b + equals(pat, 12):pat=c + equals(pat, 13):pat=d + equals(pat, 14):pat=e + equals(pat, 15):pat=f + greaterThan(pat, 15):pat=f + # Stop. They won't go this high. + } + + return(0x0$${maj}0$${min}0$${pat}) +} + +# Format string for Qt DLL + +DLLSTRING = $$quote(Qt5%1) +CONFIG(debug, debug|release) { + DLLEXT = $$quote(d.dll) +} else { + DLLEXT = $$quote(.dll) +} + +# Returns list of absolute paths to Qt DLLs required by project +defineReplace(QtBins) { + modules = $$eval(QT) + list = + + for(m, modules) { + list += $$sprintf($$[QT_INSTALL_BINS]/$${DLLSTRING}, $$m)$${DLLEXT} + } + + *-g++ { + # Copies libgcc*-*, libstdc++-*, libwinpthread-* + # Note: As of Qt 5.5, changed `lib*` to `lib*-*` in order to avoid unneeded libs. + list += \ + $$[QT_INSTALL_BINS]/lib*-*.dll + } + + return($$list) +} + +# Copies the given files to the destination directory +defineTest(copyFiles) { + files = $$1 + subdir = $$2 + abs = $$3 + rename = $$4 # for renaming ONE file, no wildcards + regexp = $$5 # for file extension renaming, no wildcards + + !isEmpty(rename):!isEmpty(regexp):message(WARNING: Cannot use both 4th and 5th param of copyFiles) + + unset(oldext) + unset(newext) + unset(newfile) + + # If `abs` wasn't passed in, make it false + # (For whatever reason true/false don't pass in as true/false + # even after using $$eval()) + isEmpty(abs) { + abs = false + } else { + abs = true + } + + ddir = $$syspath($${DESTDIR}$${QMAKE_DIR_SEP}$${subdir}) + QMAKE_POST_LINK += $$sprintf($$QMAKE_MKDIR_CMD, $${ddir}) $$nt + + for(FILE, files) { + fileabs = $${PWD}$${QMAKE_DIR_SEP}$${FILE} + $$abs { + fileabs = $${FILE} + } + + !isEmpty(regexp) { + oldext = $$section(regexp, :, 0, 0) + newext = $$section(regexp, :, 1, 1) + newfile = $$section(FILE, /, -1) + newfile ~= s,.$${oldext},.$${newext},g + } + + fileabs = $$syspath($${fileabs}) + + QMAKE_POST_LINK += $$QMAKE_COPY $${fileabs} $${ddir}$${rename}$${newfile} $$nt + } + + export(QMAKE_POST_LINK) + unset(ddir) +} + +# Copies the given dirs to the destination directory +defineTest(copyDirs) { + dirs = $$1 + subdir = $$2 + abs = $$3 + + # If `abs` wasn't passed in, make it false + # (For whatever reason true/false don't pass in as true/false + # even after using $$eval()) + isEmpty(abs) { + abs = false + } else { + abs = true + } + + ddir = $$syspath($${DESTDIR}$${QMAKE_DIR_SEP}$${subdir}) + QMAKE_POST_LINK += $$sprintf($$QMAKE_MKDIR_CMD, $${ddir}) $$nt + + for(DIR, dirs) { + dirabs = $${PWD}$${QMAKE_DIR_SEP}$${DIR} + $$abs { + dirabs = $${FILE} + } + + dirabs = $$syspath($${dirabs}) + + # Fix copy for subdir on unix, also assure clean subdirs (no extra files) + !isEmpty(subdir) { + win32:*msvc*:QMAKE_POST_LINK += rd /s /q $${ddir} $$nt + else:!unix:QMAKE_POST_LINK += rm -rf $${ddir} $$nt + unix:QMAKE_POST_LINK += rm -rf $${ddir} $$nt + } + + QMAKE_POST_LINK += $$QMAKE_COPY_DIR $${dirabs} $${ddir} $$nt + } + + export(QMAKE_POST_LINK) + unset(ddir) +} diff --git a/NifSkope_targets.pri b/NifSkope_targets.pri new file mode 100644 index 000000000..05324c26b --- /dev/null +++ b/NifSkope_targets.pri @@ -0,0 +1,189 @@ +############################### +## TARGETS +############################### +# Note: dir or file in build dir cannot be named the same as the target +# e.g. "docs" target will fail if a "docs" folder is in OUT_PWD + +win32:EXE = ".exe" +else:EXE = "" + +############################### +## lupdate / lrelease +############################### + +QMAKE_LUPDATE = $$[QT_INSTALL_BINS]/lupdate$${EXE} +exists($$QMAKE_LUPDATE) { + # Make target for Updating .ts + updatets.target = updatets + updatets.commands += cd $${_PRO_FILE_PWD_} && $$[QT_INSTALL_BINS]/lupdate $${_PRO_FILE_} $$nt + updatets.CONFIG += no_check_exist no_link no_clean + + QMAKE_EXTRA_TARGETS += updatets +} else { + message("lupdate could not be found, ignoring make target") +} + +QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease$${EXE} +exists($$QMAKE_LRELEASE) { + # Build Step for Releasing .ts->.qm + updateqm.input = TRANSLATIONS + updateqm.output = $$syspath($${DESTDIR}/lang/${QMAKE_FILE_BASE}.qm) + updateqm.commands = $$[QT_INSTALL_BINS]/lrelease ${QMAKE_FILE_IN} -qm $$syspath($${DESTDIR}/lang/${QMAKE_FILE_BASE}.qm) $$nt + updateqm.CONFIG += no_check_exist no_link no_clean target_predeps + + QMAKE_EXTRA_COMPILERS += updateqm +} else { + message("lrelease could not be found, ignoring build step") +} + +############################### +## Docsys +############################### +# Creates NIF docs for NifSkope release +# +# Requirements: +# Python, jom (or make/mingw32-make) +# +# Usage: +# jom release-docs +# +# "release-docs" is an alias for: +# jom -f Makefile.Release docs +#______________________________ + +docs.target = docs + +# Vars +docsys = $$syspath($${PWD}/build/docsys) +indoc = doc$${QMAKE_DIR_SEP} +outdoc = $$syspath($${DESTDIR}/doc) + +# COMMANDS + +docs.commands += $$sprintf($$QMAKE_MKDIR_CMD, $${outdoc}) $$nt +docs.commands += cd $${docsys} # cd ./build/docsys +docs.commands += && python nifxml_doc.py # invoke python +# Move *.html files out of ./build/docsys/doc +win32:docs.commands += && move /Y $${indoc}*.html $${outdoc} +else:docs.commands += && mv -f $${indoc}*.html $${outdoc} +# Copy CSS and ICO +docs.commands += && $${QMAKE_COPY} $${indoc}*.* $${outdoc} +# Clean up .pyc files so submodule doesn't become "dirty" +docs.commands += && $${QMAKE_DEL_FILE} *.pyc $$nt + +docs.CONFIG += recursive + + +############################### +## Doxygen +############################### +# Creates NifSkope API docs +# +# Requirements: +# Doxygen (http://www.stack.nl/~dimitri/doxygen/download.html) +# sed +# - Windows: http://gnuwin32.sourceforge.net/packages/sed.htm +# jom (or make/mingw32-make) +# To automatically extract tags.zip: +# 7-zip (Windows) +# unzip (Linux) +# +# Usage: +# jom release-doxygen +# +# "release-doxygen" is an alias for: +# +# jom -f Makefile.Release doxygen +#______________________________ + +doxygen.target = doxygen + +# Vars +doxyfile = $$syspath($${OUT_PWD}/Doxyfile) +doxyfilein = $$syspath($${PWD}/build/doxygen/Doxyfile.in) + +# Paths +qhgen = $$[QT_INSTALL_BINS]/qhelpgenerator$${EXE} +win32:dot = C:/Program Files (x86)/Graphviz2.38/bin +unix:dot = $$system(which dot 2>/dev/null) +_7z = $$get7z() + +# Doxyfile.in Replacements + +INPUT = $$re_escape($${PWD}/src) +OUTPUT = $$re_escape($${OUT_PWD}/apidocs) +ROOT = $$re_escape($${PWD}) + +GENERATE_QHP = NO +exists($$qhgen):GENERATE_QHP = YES + +HAVE_DOT = NO +DOT_PATH = " " # Using space because sed on Windows errors on s%@DOT_PATH@%%g for some reason +exists($$dot) { + HAVE_DOT = YES + DOT_PATH = $$re_escape($${dot}) +} + +TAGS = $${PWD}/build/doxygen/tags +BINS = $$re_escape($$[QT_INSTALL_BINS]) + +# Find `sed` command +SED = $$getSed() + +# Parse Doxyfile.in +!isEmpty(SED) { + +!isEmpty(_7z) { + win32:doxygen.commands += $${_7z} x $${TAGS}$${QMAKE_DIR_SEP}tags.zip \"-o$${TAGS}\" -aoa $$nt + unix:doxygen.commands += $${_7z} -o $${TAGS}$${QMAKE_DIR_SEP}tags.zip -d $${TAGS} $$nt +} + +doxygen.commands += $${SED} -e \"s%@VERSION@%$$getVersion()%g;\ + s%@REVISION@%$$getRevision()%g;\ + s%@OUTPUT@%$${OUTPUT}%g;\ + s%@INPUT@%$${INPUT}%g;\ + s%@PWD@%$${ROOT}%g;\ + s%@QT_VER@%$$QtHex()%g;\ + s%@GENERATE_QHP@%$${GENERATE_QHP}%g;\ + s%@HAVE_DOT@%$${HAVE_DOT}%g;\ + s%@DOT_PATH@%$${DOT_PATH}%g;\ + s%@QT_INSTALL_BINS@%$${BINS}%g\" \ + $${doxyfilein} > $${doxyfile} $$nt + +# Run Doxygen +doxygen.commands += doxygen $${doxyfile} $$nt + +} else { + +} # end isEmpty + +doxygen.CONFIG += recursive + + +############################### +## ADD TARGETS +############################### + +QMAKE_EXTRA_TARGETS += docs doxygen + + + +# Unset Vars + +unset(docsys) +unset(indoc) +unset(out) +unset(outdoc) + +unset(doxyfilein) +unset(doxyfile) + +unset(INPUT) +unset(OUTPUT) +unset(ROOT) +unset(GENERATE_QHP) +unset(HAVE_DOT) +unset(DOT_PATH) +unset(BINS) +unset(TAGS) +unset(_7z) diff --git a/NvTriStrip/qtwrapper.cpp b/NvTriStrip/qtwrapper.cpp deleted file mode 100644 index 127166bbe..000000000 --- a/NvTriStrip/qtwrapper.cpp +++ /dev/null @@ -1,79 +0,0 @@ -#include "qtwrapper.h" - -#include "NvTriStrip.h" - -QList< QVector > stripify( QVector triangles, bool stitch ) -{ - if (triangles.count() <= 0) - return QList< QVector >(); - unsigned short * data = (unsigned short *) malloc( triangles.count() * 3 * sizeof( unsigned short ) ); - for ( int t = 0; t < triangles.count(); t++ ) - { - data[ t * 3 + 0 ] = triangles[t][0]; - data[ t * 3 + 1 ] = triangles[t][1]; - data[ t * 3 + 2 ] = triangles[t][2]; - } - - PrimitiveGroup * groups = 0; - unsigned short numGroups = 0; - - SetStitchStrips( stitch ); - //SetCacheSize( 64 ); - GenerateStrips( data, triangles.count()*3, &groups, &numGroups ); - free( data ); - - QList< QVector > strips; - - if ( !groups ) - return strips; - - for ( int g = 0; g < numGroups; g++ ) - { - if ( groups[g].type == PT_STRIP ) - { - QVector< quint16 > strip( groups[g].numIndices, 0 ); - for ( quint32 s = 0; s < groups[g].numIndices; s++ ) - { - strip[s] = groups[g].indices[s]; - } - strips.append( strip ); - } - } - - delete [] groups; - - return strips; -} - -QVector triangulate( QVector strip ) -{ - QVector tris; - quint16 a, b = strip.value( 0 ), c = strip.value( 1 ); - bool flip = false; - for ( int s = 2; s < strip.count(); s++ ) - { - a = b; - b = c; - c = strip.value( s ); - if ( a != b && b != c && c != a ) - { - if ( ! flip ) - tris.append( Triangle( a, b, c ) ); - else - tris.append( Triangle( a, c, b ) ); - } - flip = ! flip; - } - return tris; -} - -QVector triangulate( QList< QVector > strips ) -{ - QVector tris; - foreach( QVector strip, strips ) - { - tris += triangulate( strip ); - } - return tris; -} - diff --git a/NvTriStrip/qtwrapper.h b/NvTriStrip/qtwrapper.h deleted file mode 100644 index 2e6469ce8..000000000 --- a/NvTriStrip/qtwrapper.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef NVTRISTRIP_WRAPPER_H -#define NVTRISTRIP_WRAPPER_H - -#include "../niftypes.h" - -#include -#include - -QList< QVector > stripify( QVector triangles, bool stitch = true ); - -QVector triangulate( QVector strips ); -QVector triangulate( QList< QVector > strips ); - -#endif diff --git a/README.md b/README.md new file mode 100644 index 000000000..9c6a6d88e --- /dev/null +++ b/README.md @@ -0,0 +1,46 @@ +# NifSkope 2.0.dev7 + +NifSkope is a tool for opening and editing the NetImmerse file format (NIF). NIF is used by video games such as Morrowind, Oblivion, Skyrim, Fallout 3, Fallout: New Vegas, Civilization IV, and more. + +### Download + +You can download the latest official release from [GitHub](https://github.com/niftools/nifskope/releases). More frequent development builds are posted in the [NifTools Discord](https://discord.gg/ZFjdN4x), pinned to #software. + + +### Discussion & Help + +- Visit the [NifTools Discord](https://discord.gg/ZFjdN4x). To receive support use the #software channel. +- Visit the [NifTools.org](https://forum.niftools.org/) forum. To receive support for NifSkope please use the [Support subforum](https://forum.niftools.org/24-nifskope/). + +### Issues + +Anyone can [report issues at GitHub](https://github.com/niftools/nifskope/issues) or in the NifTools.org [Support subforum](https://forum.niftools.org/24-nifskope/). + + +### Contribute + +You can fork the latest source from [GitHub](https://github.com/niftools/nifskope). See [Fork A Repo](https://help.github.com/articles/fork-a-repo) on how to send your contributions upstream. To grab all submodules, make sure to use `--recursive` like so: + +``` +git clone --recursive git://github.com//nifskope.git +``` + +For information about development: + +- Visit our [Discord #dev channel](https://discord.gg/zvWZrrJ). +- Visit the NifTools.org [development subforum](https://forum.niftools.org/6-nifskope-development/). +- Refer to our [GitHub wiki](https://github.com/niftools/nifskope/wiki#wiki-development) for information on compilation. + + +### Miscellaneous + +Refer to these other documents in your installation folder or at the links provided: + +## [TROUBLESHOOTING](https://github.com/niftools/nifskope/blob/develop/TROUBLESHOOTING.md) + +## [CHANGELOG](https://github.com/niftools/nifskope/blob/develop/CHANGELOG.md) + +## [CONTRIBUTORS](https://github.com/niftools/nifskope/blob/develop/CONTRIBUTORS.md) + +## [LICENSE](https://github.com/niftools/nifskope/blob/develop/LICENSE.md) + diff --git a/TODO.TXT b/TODO.TXT deleted file mode 100644 index 433a9449d..000000000 --- a/TODO.TXT +++ /dev/null @@ -1,24 +0,0 @@ -To do: - -- Verify this TODO list -- Copy/Paste from 20.0.0.5 to 20.2.0.7 does not work as expected -- Size update not calculated correctly after string edits and array edits -- Initialise arrays from XML defaults -- Multitexturing of particles (eg. Tribunal.bsa\meshes\i\act_rockslide01.nif, Bloodmoon.bsa\meshes\w\w_art_ice_mace.nif) -- doxygen documentation of all classes and files -- Display all particle systems (eg. Florensia) -- Tag old releases -- Check i18n of strings, use QLocale for numbers -- Fix constraints display and spells -- Implement realtime mouse-driven scaling of UV data -- Investigate splitting a Morrowind anim.nif to xAnim.nif and xAnim.kf -- Fix endianness!!! Use QDataStream >> with custom operators -- Link "Update Center/Radius" spell from NiTriShape, not just the data -- Call "Update Center/Radius" spell automatically when scaling vertices or as sanitize spell -- Fix minor bugs in UV editor when data is shared across multiple shapes -- Track down all qWarning() uses where QMessageBox is more appropriate -- Use qAssert more often for debugging -- Force combine spells, etc. - see #3012991 -- Investigate adding a QScriptEngine for spells -- support 20.5.0.0+ NIFs using new NiDataStream format (compile in debug mode to see existing support) - diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md new file mode 100644 index 000000000..e69de29bb diff --git a/VERSION b/VERSION deleted file mode 100644 index 781dcb07c..000000000 --- a/VERSION +++ /dev/null @@ -1 +0,0 @@ -1.1.3 diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 000000000..c749cb52a --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,50 @@ +version: "{build}" + +platform: + - win32 + - x64 + +configuration: + - debug + - release + +matrix: + fast_finish: true + +os: Visual Studio 2015 + +# We want the git revision for versioning, +# so shallow clones don't work. +clone_depth: 1 + +clone_folder: C:\projects\nifskope + +install: + - if %PLATFORM%==win32 set QTDIR=C:\Qt\5.7\msvc2015 + - if %PLATFORM%==x64 set QTDIR=C:\Qt\5.7\msvc2015_64 + - set PATH=%PATH%;%QTDIR%\bin; + +build_script: + - git submodule update --init --recursive # Appveyor doesn't clone recursively. + - qmake CONFIG+=%CONFIGURATION% -Wall -spec win32-msvc2015 -tp vc NifSkope.pro + - msbuild NifSkope.vcxproj /t:Build /p:Configuration=%configuration% /m:2 /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" + +after_build: + - if %CONFIGURATION%==debug set DEBUG_POSTFIX=_debug + - set BUILD_DIR=%APPVEYOR_BUILD_FOLDER%\bin\%CONFIGURATION% + - set BUILD_NAME=nifskope_%platform%%DEBUG_POSTFIX%.zip + - 7z a %BUILD_NAME% %BUILD_DIR% + - 7z rn %BUILD_NAME% %CONFIGURATION% NifSkope + +test: off + +artifacts: + - path: nifskope_win32.zip + name: nifskope_win32 + - path: nifskope_x64.zip + name: nifskope_x64 + - path: nifskope_win32_debug.zip + name: nifskope_win32_debug + - path: nifskope_x64_debug.zip + name: nifskope_x64_debug + diff --git a/basemodel.cpp b/basemodel.cpp deleted file mode 100644 index c08a62d16..000000000 --- a/basemodel.cpp +++ /dev/null @@ -1,667 +0,0 @@ -/***** BEGIN LICENSE BLOCK ***** - -BSD License - -Copyright (c) 2005-2012, NIF File Format Library and Tools -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. The name of the NIF File Format Library and Tools project may not be - used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -***** END LICENCE BLOCK *****/ - -#include "basemodel.h" -#include "niftypes.h" -#include "options.h" - -#include -#include -#include -#include - -//! \file basemodel.cpp BaseModel and BaseModelEval - -BaseModel::BaseModel( QObject * parent ) : QAbstractItemModel( parent ) -{ - msgMode = EmitMessages; - root = new NifItem( 0 ); -} - -BaseModel::~BaseModel() -{ - delete root; -} - -void BaseModel::msg( const Message & m ) const -{ - switch ( msgMode ) - { - case EmitMessages: - emit sigMessage( m ); - return; - case CollectMessages: - default: - messages.append( m ); - return; - } -} - - -/* - * array functions - */ - -bool BaseModel::isArray( const QModelIndex & index ) const -{ - return ! itemArr1( index ).isEmpty(); -} - -int BaseModel::getArraySize( NifItem * array ) const -{ - // shortcut for speed - if ( array->arr1().isEmpty() ) return 0; - return evaluateInt( array, array->arr1expr() ); -} - -bool BaseModel::updateArray( const QModelIndex & array ) -{ - NifItem * item = static_cast( array.internalPointer() ); - if ( ! ( array.isValid() && item && array.model() == this ) ) - return false; - return updateArrayItem( item, false ); -} - -bool BaseModel::updateArray( const QModelIndex & parent, const QString & name ) -{ - return updateArray( getIndex( parent, name ) ); -} - -/* - * item value functions - */ - -QString BaseModel::itemName( const QModelIndex & index ) const -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( ! ( index.isValid() && item && index.model() == this ) ) return QString(); - return item->name(); -} - -QString BaseModel::itemType( const QModelIndex & index ) const -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( ! ( index.isValid() && item && index.model() == this ) ) return QString(); - return item->type(); -} - -QString BaseModel::itemTmplt( const QModelIndex & index ) const -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( ! ( index.isValid() && item && index.model() == this ) ) return QString(); - return item->temp(); -} - - -NifValue BaseModel::getValue( const QModelIndex & index ) const -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( ! ( index.isValid() && item && index.model() == this ) ) return NifValue(); - return item->value(); -} - -// where is -// NifValue BaseModel::getValue( const QModelIndex & parent, const QString & name ) const -// ? - -QString BaseModel::itemArg( const QModelIndex & index ) const -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( ! ( index.isValid() && item && index.model() == this ) ) return QString(); - return item->arg(); -} - -QString BaseModel::itemArr1( const QModelIndex & index ) const -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( ! ( index.isValid() && item && index.model() == this ) ) return QString(); - return item->arr1(); -} - -QString BaseModel::itemArr2( const QModelIndex & index ) const -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( ! ( index.isValid() && item && index.model() == this ) ) return QString(); - return item->arr2(); -} - -QString BaseModel::itemCond( const QModelIndex & index ) const -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( ! ( index.isValid() && item && index.model() == this ) ) return QString(); - return item->cond(); -} - -quint32 BaseModel::itemVer1( const QModelIndex & index ) const -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( ! ( index.isValid() && item && index.model() == this ) ) return 0; - return item->ver1(); -} - -quint32 BaseModel::itemVer2( const QModelIndex & index ) const -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( ! ( index.isValid() && item && index.model() == this ) ) return 0; - return item->ver2(); -} - -QString BaseModel::itemText( const QModelIndex & index ) const -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( ! ( index.isValid() && item && index.model() == this ) ) return QString(); - return item->text(); -} - - -bool BaseModel::setValue( const QModelIndex & index, const NifValue & val ) -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( ! ( index.isValid() && item && index.model() == this ) ) return false; - return setItemValue( item, val ); -} - -bool BaseModel::setValue( const QModelIndex & parent, const QString & name, const NifValue & val ) -{ - NifItem * parentItem = static_cast( parent.internalPointer() ); - if ( ! ( parent.isValid() && parentItem && parent.model() == this ) ) - return false; - - NifItem * item = getItem( parentItem, name ); - if ( item ) - return setItemValue( item, val ); - else - return false; -} - - -/* - * QAbstractModel interface - */ - -QModelIndex BaseModel::index( int row, int column, const QModelIndex & parent ) const -{ - NifItem * parentItem; - - if ( ! ( parent.isValid() && parent.model() == this ) ) - parentItem = root; - else - parentItem = static_cast( parent.internalPointer() ); - - NifItem * childItem = ( parentItem ? parentItem->child( row ) : 0 ); - if ( childItem ) - return createIndex( row, column, childItem ); - else - return QModelIndex(); -} - -QModelIndex BaseModel::parent( const QModelIndex & child ) const -{ - if ( ! ( child.isValid() && child.model() == this ) ) - return QModelIndex(); - - NifItem *childItem = static_cast( child.internalPointer() ); - if ( ! childItem ) return QModelIndex(); - NifItem *parentItem = childItem->parent(); - - if ( parentItem == root || ! parentItem ) - return QModelIndex(); - - return createIndex( parentItem->row(), 0, parentItem ); -} - -int BaseModel::rowCount( const QModelIndex & parent ) const -{ - NifItem * parentItem; - - if ( ! ( parent.isValid() && parent.model() == this ) ) - parentItem = root; - else - parentItem = static_cast( parent.internalPointer() ); - - return ( parentItem ? parentItem->childCount() : 0 ); -} - -QVariant BaseModel::data( const QModelIndex & index, int role ) const -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( ! ( index.isValid() && item && index.model() == this ) ) - return QVariant(); - - int column = index.column(); - - if (role == NifSkopeDisplayRole) - role = Qt::DisplayRole; - - switch ( role ) - { - case Qt::DisplayRole: - { - switch ( column ) - { - case NameCol: return item->name(); - case TypeCol: return item->type(); - case ValueCol: return item->value().toString(); - case ArgCol: return item->arg(); - case Arr1Col: return item->arr1(); - case Arr2Col: return item->arr2(); - case CondCol: return item->cond(); - case Ver1Col: return ver2str( item->ver1() ); - case Ver2Col: return ver2str( item->ver2() ); - case VerCondCol: return item->vercond(); - default: return QVariant(); - } - } - case Qt::EditRole: - { - switch ( column ) - { - case NameCol: return item->name(); - case TypeCol: return item->type(); - case ValueCol: return item->value().toVariant(); - case ArgCol: return item->arg(); - case Arr1Col: return item->arr1(); - case Arr2Col: return item->arr2(); - case CondCol: return item->cond(); - case Ver1Col: return ver2str( item->ver1() ); - case Ver2Col: return ver2str( item->ver2() ); - case VerCondCol: return item->vercond(); - default: return QVariant(); - } - } - case Qt::ToolTipRole: - { - QString tip; - switch ( column ) - { - case ValueCol: - { - switch ( item->value().type() ) - { - case NifValue::tWord: - case NifValue::tShort: - { - quint16 s = item->value().toCount(); - return QString( "dec: %1
hex: 0x%2" ).arg( s ).arg( s, 4, 16, QChar( '0' ) ); - } - case NifValue::tBool: - case NifValue::tInt: - case NifValue::tUInt: - { - quint32 i = item->value().toCount(); - return QString( "dec: %1
hex: 0x%2" ).arg( i ).arg( i, 8, 16, QChar( '0' ) ); - } - case NifValue::tFloat: - { - float f = item->value().toFloat(); - quint32 i = item->value().toCount(); - return QString( "float: %1
data: 0x%2" ).arg( f ).arg( i, 8, 16, QChar( '0' ) ); - } - case NifValue::tFlags: - { - quint16 f = item->value().toCount(); - return QString( "dec: %1
hex: 0x%2
bin: 0b%3" ).arg( f ).arg( f, 4, 16, QChar( '0' ) ).arg( f, 16, 2, QChar( '0' ) ); - } - case NifValue::tVector3: - return item->value().get().toHtml(); - case NifValue::tMatrix: - return item->value().get().toHtml(); - case NifValue::tQuat: - case NifValue::tQuatXYZW: - return item->value().get().toHtml(); - case NifValue::tColor3: - { - Color3 c = item->value().get(); - return QString( "R %1
G %2
B %3" ).arg( c[0] ).arg( c[1] ).arg( c[2] ); - } - case NifValue::tColor4: - { - Color4 c = item->value().get(); - return QString( "R %1
G %2
B %3
A %4" ).arg( c[0] ).arg( c[1] ).arg( c[2] ).arg( c[3] ); - } - default: - break; - } - } break; - default: - break; - } - } return QVariant(); - case Qt::BackgroundColorRole: - { - if ( column == ValueCol && item->value().isColor() ) - { - return item->value().toColor(); - } - } return QVariant(); - default: - return QVariant(); - } -} - -bool BaseModel::setData( const QModelIndex & index, const QVariant & value, int role ) -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( ! ( index.isValid() && role == Qt::EditRole && index.model() == this && item ) ) - return false; - - switch ( index.column() ) - { - case BaseModel::NameCol: - item->setName( value.toString() ); - break; - case BaseModel::TypeCol: - item->setType( value.toString() ); - break; - case BaseModel::ValueCol: - item->value().fromVariant( value ); - break; - case BaseModel::ArgCol: - item->setArg( value.toString() ); - break; - case BaseModel::Arr1Col: - item->setArr1( value.toString() ); - break; - case BaseModel::Arr2Col: - item->setArr2( value.toString() ); - break; - case BaseModel::CondCol: - item->setCond( value.toString() ); - break; - case BaseModel::Ver1Col: - item->setVer1( str2ver( value.toString() ) ); - break; - case BaseModel::Ver2Col: - item->setVer2( str2ver( value.toString() ) ); - break; - case BaseModel::VerCondCol: - item->setVerCond( value.toString() ); - break; - default: - return false; - } - - emit dataChanged( index, index ); - - return true; -} - -QVariant BaseModel::headerData( int section, Qt::Orientation orientation, int role ) const -{ - Q_UNUSED(orientation); - if ( role != Qt::DisplayRole ) - return QVariant(); - switch ( role ) - { - case Qt::DisplayRole: - switch ( section ) - { - case NameCol: return tr("Name"); - case TypeCol: return tr("Type"); - case ValueCol: return tr("Value"); - case ArgCol: return tr("Argument"); - case Arr1Col: return tr("Array1"); - case Arr2Col: return tr("Array2"); - case CondCol: return tr("Condition"); - case Ver1Col: return tr("since"); - case Ver2Col: return tr("until"); - case VerCondCol: return tr("Version Condition"); - default: return QVariant(); - } - default: - return QVariant(); - } -} - -Qt::ItemFlags BaseModel::flags( const QModelIndex & index ) const -{ - if ( !index.isValid() ) return Qt::ItemIsEnabled; - Qt::ItemFlags flags = Qt::ItemIsSelectable; - if ( evalCondition( index, true ) ) - flags |= Qt::ItemIsEnabled; - switch( index.column() ) - { - case TypeCol: - return flags; - case ValueCol: - if ( itemArr1( index ).isEmpty() ) - return flags | Qt::ItemIsEditable; - else - return flags; - default: - return flags | Qt::ItemIsEditable; - } -} - -/* - * load and save - */ - -bool BaseModel::loadFromFile( const QString & filename ) -{ - QFile f( filename ); - bool x = f.open( QIODevice::ReadOnly ) && load( f ); - folder = filename.left( qMax( filename.lastIndexOf( "\\" ), filename.lastIndexOf( "/" ) ) ); - return x; -} - -bool BaseModel::saveToFile( const QString & filename ) const -{ - QFile f( filename ); - return f.open( QIODevice::WriteOnly ) && save( f ); -} - -/* - * searching - */ - -NifItem * BaseModel::getItem( NifItem * item, const QString & name ) const -{ - if ( ! item || item == root ) return 0; - - int slash = name.indexOf( "/" ); - if ( slash > 0 ) - { - QString left = name.left( slash ); - QString right = name.right( name.length() - slash - 1 ); - - if ( left == ".." ) - return getItem( item->parent(), right ); - else - return getItem( getItem( item, left ), right ); - } - - for ( int c = 0; c < item->childCount(); c++ ) - { - NifItem * child = item->child( c ); - - if ( child->name() == name && evalCondition( child ) ) - return child; - } - - return 0; -} - -/* -* Uses implicit load order -*/ -NifItem * BaseModel::getItemX( NifItem * item, const QString & name ) const -{ - if ( ! item || ! item->parent() ) return 0; - - NifItem * parent = item->parent(); - for ( int c = item->row() - 1; c >= 0; c-- ) - { - NifItem * child = parent->child( c ); - - if ( child && child->name() == name && evalCondition( child ) ) - return child; - } - - return getItemX( parent, name ); -} - -NifItem * BaseModel::findItemX( NifItem * item, const QString & name ) const -{ - while (item) { - NifItem *r = getItem (item, name); - if (r) - return r; - item = item->parent(); - } - return 0; -} - -QModelIndex BaseModel::getIndex( const QModelIndex & parent, const QString & name ) const -{ - NifItem * parentItem = static_cast( parent.internalPointer() ); - if ( ! ( parent.isValid() && parentItem && parent.model() == this ) ) - return QModelIndex(); - - NifItem * item = getItem( parentItem, name ); - if ( item ) - return createIndex( item->row(), 0, item ); - else - return QModelIndex(); -} - -/* - * conditions and version - */ - -//! Helper class for evaluating condition expressions -class BaseModelEval -{ -public: - //! Model - const BaseModel * model; - //! Item - const NifItem * item; - //! Constructor - BaseModelEval(const BaseModel * model, const NifItem * item) { - this->model = model; - this->item = item; - } - - //! Evaluation function - QVariant operator()(const QVariant &v) const { - if ( v.type() == QVariant::String ) { - QString left = v.toString(); - const NifItem * i = item; - // resolve "ARG" - while ( left == "ARG" ) { - if ( ! i->parent() ) return false; - i = i->parent(); - left = i->arg(); - } - // resolve reference to sibling - const NifItem * sibling = model->getItem( i->parent(), left ); - if (sibling) { - if ( sibling->value().isCount() ) - return QVariant( sibling->value().toCount() ); - else if ( sibling->value().isFileVersion() ) - return QVariant( sibling->value().toFileVersion() ); - // this is tricky to understand - // we check whether the reference is an array - // if so, we get the current item's row number (i->row()) - // and get the sibling's child at that row number - // this is used for instance to describe array sizes of strips - else if ( sibling->childCount() > 0 ) { - const NifItem * i2 = sibling->child( i->row() ); - if ( i2 && i2->value().isCount() ) - return QVariant(i2->value().toCount()); - } - else { - qDebug() << ("can't convert " + left + " to a count"); - } - } - // resolve reference to block type - // is the condition string a type? - if (model->isAncestorOrNiBlock(left)) { - // get the type of the current block - const NifItem * block = i; - while (block->parent() && block->parent()->parent() ) { - block = block->parent(); - }; - return QVariant(model->inherits(block->name(), left)); - } - return QVariant(0); - } - return v; - } -}; - -int BaseModel::evaluateInt( NifItem * item, const Expression & expr ) const -{ - if ( ! item || item == root ) - return -1; - - BaseModelEval functor(this, item); - return expr.evaluateUInt(functor); -} - -bool BaseModel::evalCondition( NifItem * item, bool chkParents ) const -{ - if ( ! evalVersion( item, chkParents ) ) - return false; - - if ( item == root ) - return true; - - if ( chkParents && item->parent() ) - if ( ! evalCondition( item->parent(), true ) ) - return false; - - QString cond = item->cond(); - if ( cond.isEmpty() ) - return true; - - BaseModelEval functor(this, item); - return item->condexpr().evaluateBool(functor); -} - -bool BaseModel::evalVersion( const QModelIndex & index, bool chkParents ) const -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( index.isValid() && index.model() == this && item ) - return evalVersion( item, chkParents ); - return false; -} - -bool BaseModel::evalCondition( const QModelIndex & index, bool chkParents ) const -{ - NifItem * item = static_cast( index.internalPointer() ); - if ( index.isValid() && index.model() == this && item ) - return evalCondition( item, chkParents ); - return false; -} - diff --git a/build/README.md.in b/build/README.md.in new file mode 100644 index 000000000..e7fd2df0e --- /dev/null +++ b/build/README.md.in @@ -0,0 +1,46 @@ +# NifSkope @VERSION@ + +NifSkope is a tool for opening and editing the NetImmerse file format (NIF). NIF is used by video games such as Morrowind, Oblivion, Skyrim, Fallout 3, Fallout: New Vegas, Civilization IV, and more. + +### Download + +You can download the latest official release from [GitHub](https://github.com/niftools/nifskope/releases). More frequent development builds are posted in the [NifTools Discord](https://discord.gg/ZFjdN4x), pinned to #software. + + +### Discussion & Help + +- Visit the [NifTools Discord](https://discord.gg/ZFjdN4x). To receive support use the #software channel. +- Visit the [NifTools.org](https://forum.niftools.org/) forum. To receive support for NifSkope please use the [Support subforum](https://forum.niftools.org/24-nifskope/). + +### Issues + +Anyone can [report issues at GitHub](https://github.com/niftools/nifskope/issues) or in the NifTools.org [Support subforum](https://forum.niftools.org/24-nifskope/). + + +### Contribute + +You can fork the latest source from [GitHub](https://github.com/niftools/nifskope). See [Fork A Repo](https://help.github.com/articles/fork-a-repo) on how to send your contributions upstream. To grab all submodules, make sure to use `--recursive` like so: + +``` +git clone --recursive git://github.com//nifskope.git +``` + +For information about development: + +- Visit our [Discord #dev channel](https://discord.gg/zvWZrrJ). +- Visit the NifTools.org [development subforum](https://forum.niftools.org/6-nifskope-development/). +- Refer to our [GitHub wiki](https://github.com/niftools/nifskope/wiki#wiki-development) for information on compilation. + + +### Miscellaneous + +Refer to these other documents in your installation folder or at the links provided: + +## [TROUBLESHOOTING](https://github.com/niftools/nifskope/blob/develop/TROUBLESHOOTING.md) + +## [CHANGELOG](https://github.com/niftools/nifskope/blob/develop/CHANGELOG.md) + +## [CONTRIBUTORS](https://github.com/niftools/nifskope/blob/develop/CONTRIBUTORS.md) + +## [LICENSE](https://github.com/niftools/nifskope/blob/develop/LICENSE.md) + diff --git a/README.txt.in b/build/README.txt.in similarity index 100% rename from README.txt.in rename to build/README.txt.in diff --git a/build/VERSION b/build/VERSION new file mode 100644 index 000000000..589a5b993 --- /dev/null +++ b/build/VERSION @@ -0,0 +1 @@ +2.0.dev7 diff --git a/build/docsys b/build/docsys new file mode 160000 index 000000000..07dc05fe2 --- /dev/null +++ b/build/docsys @@ -0,0 +1 @@ +Subproject commit 07dc05fe2c09ac8f1defd4e94c90fe60202cb191 diff --git a/build/doxygen/Doxyfile.in b/build/doxygen/Doxyfile.in new file mode 100644 index 000000000..8ca900d52 --- /dev/null +++ b/build/doxygen/Doxyfile.in @@ -0,0 +1,2363 @@ +# Doxyfile 1.8.6 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = NifSkope + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = @VERSION@ + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is included in +# the documentation. The maximum height of the logo should not exceed 55 pixels +# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo +# to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = "@OUTPUT@" + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = "@INPUT@" \ + "@PWD@" + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = YES + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a +# new page for each member. If set to NO, the documentation of a member will be +# part of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. +# +# Note For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by by putting a % sign in front of the word +# or globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 3 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO these classes will be included in the various overviews. This option has +# no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the +# todo list. This list is created by putting \todo commands in the +# documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the +# test list. This list is created by putting \test commands in the +# documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES the list +# will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. Do not use file names with spaces, bibtex cannot handle them. See +# also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO doxygen will only warn about wrong or incomplete parameter +# documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. +# Note: If this tag is empty the current directory is searched. + +INPUT = "@INPUT@" \ + "@PWD@/lib/fsengine" \ + "@PWD@/lib/NvTriStrip" \ + "@PWD@/DOXYGEN.md" + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank the +# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, +# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, +# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, +# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, +# *.qsf, *.as and *.js. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.ii \ + *.ixx \ + *.ipp \ + *.inl \ + *.idl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.cs \ + *.markdown \ + *.md + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = moc_* \ + GLee.* + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER ) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = "@PWD@/DOXYGEN.md" + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES, then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more acurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# compiled with the --with-libclang option. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- +# defined cascading style sheet that is included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefor more robust against future updates. +# Doxygen will copy the style sheet file to the output directory. For an example +# see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = "@PWD@/build/doxygen/extra.css" + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the stylesheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.NifSkope + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler ( hhc.exe). If non-empty +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated ( +# YES) or that it should be included in the master .chm file ( NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated ( +# YES) or a normal table of contents ( NO) in the .chm file. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = @GENERATE_QHP@ + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = ./NifSkope.qch + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = NifSkope + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = NifSkope + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = @QT_INSTALL_BINS@/qhelpgenerator + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using prerendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /