Selections work (a little bit)
authorinsilmaril
Tue, 04 Nov 2008 12:09:10 +0000
changeset 728a8a98a94899a
parent 727 96402b172173
child 729 7ddbe3fa34a1
Selections work (a little bit)
doxygen.config
mapeditor.cpp
mapeditor.h
selection.cpp
selection.h
version.h
vymmodel.cpp
vymmodel.h
vymview.cpp
     1.1 --- a/doxygen.config	Wed Oct 29 17:42:34 2008 +0000
     1.2 +++ b/doxygen.config	Tue Nov 04 12:09:10 2008 +0000
     1.3 @@ -1,4 +1,4 @@
     1.4 -# Doxyfile 1.5.0
     1.5 +# Doxyfile 1.5.5
     1.6  
     1.7  # This file describes the settings to be used by the documentation system
     1.8  # doxygen (www.doxygen.org) for a project
     1.9 @@ -14,10 +14,18 @@
    1.10  # Project related configuration options
    1.11  #---------------------------------------------------------------------------
    1.12  
    1.13 +# This tag specifies the encoding used for all characters in the config file 
    1.14 +# that follow. The default is UTF-8 which is also the encoding used for all 
    1.15 +# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
    1.16 +# iconv built into libc) for the transcoding. See 
    1.17 +# http://www.gnu.org/software/libiconv for the list of possible encodings.
    1.18 +
    1.19 +DOXYFILE_ENCODING      = UTF-8
    1.20 +
    1.21  # The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
    1.22  # by quotes) that should identify the project.
    1.23  
    1.24 -PROJECT_NAME           = "VYM - View Your Mind"
    1.25 +PROJECT_NAME           = 
    1.26  
    1.27  # The PROJECT_NUMBER tag can be used to enter a project or revision number. 
    1.28  # This could be handy for archiving the generated documentation or 
    1.29 @@ -30,7 +38,7 @@
    1.30  # If a relative path is entered, it will be relative to the location 
    1.31  # where doxygen was started. If left blank the current directory will be used.
    1.32  
    1.33 -OUTPUT_DIRECTORY       = doc
    1.34 +OUTPUT_DIRECTORY       = 
    1.35  
    1.36  # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
    1.37  # 4096 sub-directories (in 2 levels) under the output directory of each output 
    1.38 @@ -46,23 +54,14 @@
    1.39  # information to generate all constant output in the proper language. 
    1.40  # The default language is English, other supported languages are: 
    1.41  # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
    1.42 -# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, 
    1.43 -# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, 
    1.44 -# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, 
    1.45 -# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
    1.46 +# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, 
    1.47 +# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), 
    1.48 +# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, 
    1.49 +# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, 
    1.50 +# and Ukrainian.
    1.51  
    1.52  OUTPUT_LANGUAGE        = English
    1.53  
    1.54 -# This tag can be used to specify the encoding used in the generated output. 
    1.55 -# The encoding is not always determined by the language that is chosen, 
    1.56 -# but also whether or not the output is meant for Windows or non-Windows users. 
    1.57 -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
    1.58 -# forces the Windows encoding (this is the default for the Windows binary), 
    1.59 -# whereas setting the tag to NO uses a Unix-style encoding (the default for 
    1.60 -# all platforms other than Windows).
    1.61 -
    1.62 -USE_WINDOWS_ENCODING   = NO
    1.63 -
    1.64  # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
    1.65  # include brief member descriptions after the members that are listed in 
    1.66  # the file and class documentation (similar to JavaDoc). 
    1.67 @@ -135,11 +134,19 @@
    1.68  # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
    1.69  # will interpret the first line (until the first dot) of a JavaDoc-style 
    1.70  # comment as the brief description. If set to NO, the JavaDoc 
    1.71 -# comments will behave just like the Qt-style comments (thus requiring an 
    1.72 -# explicit @brief command for a brief description.
    1.73 +# comments will behave just like regular Qt-style comments 
    1.74 +# (thus requiring an explicit @brief command for a brief description.)
    1.75  
    1.76  JAVADOC_AUTOBRIEF      = NO
    1.77  
    1.78 +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
    1.79 +# interpret the first line (until the first dot) of a Qt-style 
    1.80 +# comment as the brief description. If set to NO, the comments 
    1.81 +# will behave just like regular Qt-style comments (thus requiring 
    1.82 +# an explicit \brief command for a brief description.)
    1.83 +
    1.84 +QT_AUTOBRIEF           = NO
    1.85 +
    1.86  # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
    1.87  # treat a multi-line C++ special comment block (i.e. a block of //! or /// 
    1.88  # comments) as a brief description. This used to be the default behaviour. 
    1.89 @@ -189,14 +196,26 @@
    1.90  OPTIMIZE_OUTPUT_FOR_C  = NO
    1.91  
    1.92  # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
    1.93 -# sources only. Doxygen will then generate output that is more tailored for Java. 
    1.94 -# For instance, namespaces will be presented as packages, qualified scopes 
    1.95 -# will look different, etc.
    1.96 +# sources only. Doxygen will then generate output that is more tailored for 
    1.97 +# Java. For instance, namespaces will be presented as packages, qualified 
    1.98 +# scopes will look different, etc.
    1.99  
   1.100  OPTIMIZE_OUTPUT_JAVA   = NO
   1.101  
   1.102 -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to 
   1.103 -# include (a tag file for) the STL sources as input, then you should 
   1.104 +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
   1.105 +# sources only. Doxygen will then generate output that is more tailored for 
   1.106 +# Fortran.
   1.107 +
   1.108 +OPTIMIZE_FOR_FORTRAN   = NO
   1.109 +
   1.110 +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
   1.111 +# sources. Doxygen will then generate output that is tailored for 
   1.112 +# VHDL.
   1.113 +
   1.114 +OPTIMIZE_OUTPUT_VHDL   = NO
   1.115 +
   1.116 +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
   1.117 +# to include (a tag file for) the STL sources as input, then you should 
   1.118  # set this tag to YES in order to let doxygen match functions declarations and 
   1.119  # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
   1.120  # func(std::string) {}). This also make the inheritance and collaboration 
   1.121 @@ -204,6 +223,17 @@
   1.122  
   1.123  BUILTIN_STL_SUPPORT    = NO
   1.124  
   1.125 +# If you use Microsoft's C++/CLI language, you should set this option to YES to
   1.126 +# enable parsing support.
   1.127 +
   1.128 +CPP_CLI_SUPPORT        = NO
   1.129 +
   1.130 +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
   1.131 +# Doxygen will parse them like normal C++ but will assume all classes use public 
   1.132 +# instead of private inheritance when no explicit protection keyword is present.
   1.133 +
   1.134 +SIP_SUPPORT            = NO
   1.135 +
   1.136  # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
   1.137  # tag is set to YES, then doxygen will reuse the documentation of the first 
   1.138  # member in the group (if any) for the other members of the group. By default 
   1.139 @@ -219,6 +249,16 @@
   1.140  
   1.141  SUBGROUPING            = YES
   1.142  
   1.143 +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
   1.144 +# is documented as struct, union, or enum with the name of the typedef. So 
   1.145 +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
   1.146 +# with name TypeT. When disabled the typedef will appear as a member of a file, 
   1.147 +# namespace, or class. And the struct will be named TypeS. This can typically 
   1.148 +# be useful for C code in case the coding convention dictates that all compound 
   1.149 +# types are typedef'ed and only the typedef is referenced, never the tag name.
   1.150 +
   1.151 +TYPEDEF_HIDES_STRUCT   = NO
   1.152 +
   1.153  #---------------------------------------------------------------------------
   1.154  # Build related configuration options
   1.155  #---------------------------------------------------------------------------
   1.156 @@ -253,6 +293,14 @@
   1.157  
   1.158  EXTRACT_LOCAL_METHODS  = NO
   1.159  
   1.160 +# If this flag is set to YES, the members of anonymous namespaces will be 
   1.161 +# extracted and appear in the documentation as a namespace called 
   1.162 +# 'anonymous_namespace{file}', where file will be replaced with the base 
   1.163 +# name of the file that contains the anonymous namespace. By default 
   1.164 +# anonymous namespace are hidden.
   1.165 +
   1.166 +EXTRACT_ANON_NSPACES   = NO
   1.167 +
   1.168  # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
   1.169  # undocumented members of documented classes, files or namespaces. 
   1.170  # If set to NO (the default) these members will be included in the 
   1.171 @@ -328,6 +376,12 @@
   1.172  
   1.173  SORT_BRIEF_DOCS        = NO
   1.174  
   1.175 +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
   1.176 +# hierarchy of group names into alphabetical order. If set to NO (the default) 
   1.177 +# the group names will appear in their defined order.
   1.178 +
   1.179 +SORT_GROUP_NAMES       = NO
   1.180 +
   1.181  # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
   1.182  # sorted by fully-qualified names, including namespaces. If set to 
   1.183  # NO (the default), the class list will be sorted only by class name, 
   1.184 @@ -390,8 +444,8 @@
   1.185  SHOW_DIRECTORIES       = NO
   1.186  
   1.187  # The FILE_VERSION_FILTER tag can be used to specify a program or script that 
   1.188 -# doxygen should invoke to get the current version for each file (typically from the 
   1.189 -# version control system). Doxygen will invoke the program by executing (via 
   1.190 +# doxygen should invoke to get the current version for each file (typically from 
   1.191 +# the version control system). Doxygen will invoke the program by executing (via 
   1.192  # popen()) the command <command> <input-file>, where <command> is the value of 
   1.193  # the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
   1.194  # provided by doxygen. Whatever the program writes to standard output 
   1.195 @@ -461,12 +515,20 @@
   1.196  
   1.197  INPUT                  = 
   1.198  
   1.199 +# This tag can be used to specify the character encoding of the source files 
   1.200 +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
   1.201 +# also the default input encoding. Doxygen uses libiconv (or the iconv built 
   1.202 +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
   1.203 +# the list of possible encodings.
   1.204 +
   1.205 +INPUT_ENCODING         = UTF-8
   1.206 +
   1.207  # If the value of the INPUT tag contains directories, you can use the 
   1.208  # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
   1.209  # and *.h) to filter out the source-files in the directories. If left 
   1.210  # blank the following patterns are tested: 
   1.211  # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
   1.212 -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
   1.213 +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
   1.214  
   1.215  FILE_PATTERNS          = 
   1.216  
   1.217 @@ -494,7 +556,15 @@
   1.218  # against the file with absolute path, so to exclude all test directories 
   1.219  # for example use the pattern */test/*
   1.220  
   1.221 -EXCLUDE_PATTERNS       = moc_*
   1.222 +EXCLUDE_PATTERNS       = 
   1.223 +
   1.224 +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
   1.225 +# (namespaces, classes, functions, etc.) that should be excluded from the 
   1.226 +# output. The symbol name can be a fully qualified name, a word, or if the 
   1.227 +# wildcard * is used, a substring. Examples: ANamespace, AClass, 
   1.228 +# AClass::ANamespace, ANamespace::*Test
   1.229 +
   1.230 +EXCLUDE_SYMBOLS        = 
   1.231  
   1.232  # The EXAMPLE_PATH tag can be used to specify one or more files or 
   1.233  # directories that contain example code fragments that are included (see 
   1.234 @@ -573,13 +643,13 @@
   1.235  # then for each documented function all documented 
   1.236  # functions referencing it will be listed.
   1.237  
   1.238 -REFERENCED_BY_RELATION = YES
   1.239 +REFERENCED_BY_RELATION = NO
   1.240  
   1.241  # If the REFERENCES_RELATION tag is set to YES (the default) 
   1.242  # then for each documented function all documented entities 
   1.243  # called/used by that function will be listed.
   1.244  
   1.245 -REFERENCES_RELATION    = YES
   1.246 +REFERENCES_RELATION    = NO
   1.247  
   1.248  # If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
   1.249  # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
   1.250 @@ -675,11 +745,44 @@
   1.251  
   1.252  # If the GENERATE_HTMLHELP tag is set to YES, additional index files 
   1.253  # will be generated that can be used as input for tools like the 
   1.254 -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
   1.255 +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
   1.256  # of the generated HTML documentation.
   1.257  
   1.258  GENERATE_HTMLHELP      = NO
   1.259  
   1.260 +# If the GENERATE_DOCSET tag is set to YES, additional index files 
   1.261 +# will be generated that can be used as input for Apple's Xcode 3 
   1.262 +# integrated development environment, introduced with OSX 10.5 (Leopard). 
   1.263 +# To create a documentation set, doxygen will generate a Makefile in the 
   1.264 +# HTML output directory. Running make will produce the docset in that 
   1.265 +# directory and running "make install" will install the docset in 
   1.266 +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
   1.267 +# it at startup.
   1.268 +
   1.269 +GENERATE_DOCSET        = NO
   1.270 +
   1.271 +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
   1.272 +# feed. A documentation feed provides an umbrella under which multiple 
   1.273 +# documentation sets from a single provider (such as a company or product suite) 
   1.274 +# can be grouped.
   1.275 +
   1.276 +DOCSET_FEEDNAME        = "Doxygen generated docs"
   1.277 +
   1.278 +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
   1.279 +# should uniquely identify the documentation set bundle. This should be a 
   1.280 +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
   1.281 +# will append .docset to the name.
   1.282 +
   1.283 +DOCSET_BUNDLE_ID       = org.doxygen.Project
   1.284 +
   1.285 +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
   1.286 +# documentation will contain sections that can be hidden and shown after the 
   1.287 +# page has loaded. For this to work a browser that supports 
   1.288 +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
   1.289 +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
   1.290 +
   1.291 +HTML_DYNAMIC_SECTIONS  = NO
   1.292 +
   1.293  # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
   1.294  # be used to specify the file name of the resulting .chm file. You 
   1.295  # can add a path in front of the file if the result should not be 
   1.296 @@ -744,7 +847,7 @@
   1.297  # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
   1.298  # generate Latex output.
   1.299  
   1.300 -GENERATE_LATEX         = NO
   1.301 +GENERATE_LATEX         = YES
   1.302  
   1.303  # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
   1.304  # If a relative path is entered the value of OUTPUT_DIRECTORY will be 
   1.305 @@ -792,13 +895,13 @@
   1.306  # contain links (just like the HTML output) instead of page references 
   1.307  # This makes the output suitable for online browsing using a pdf viewer.
   1.308  
   1.309 -PDF_HYPERLINKS         = NO
   1.310 +PDF_HYPERLINKS         = YES
   1.311  
   1.312  # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
   1.313  # plain latex in the generated Makefile. Set this option to YES to get a 
   1.314  # higher quality PDF documentation.
   1.315  
   1.316 -USE_PDFLATEX           = NO
   1.317 +USE_PDFLATEX           = YES
   1.318  
   1.319  # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
   1.320  # command to the generated LaTeX files. This will instruct LaTeX to keep 
   1.321 @@ -1085,6 +1188,15 @@
   1.322  
   1.323  CLASS_DIAGRAMS         = YES
   1.324  
   1.325 +# You can define message sequence charts within doxygen comments using the \msc 
   1.326 +# command. Doxygen will then run the mscgen tool (see 
   1.327 +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
   1.328 +# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
   1.329 +# the mscgen tool resides. If left empty the tool is assumed to be found in the 
   1.330 +# default search path.
   1.331 +
   1.332 +MSCGEN_PATH            = 
   1.333 +
   1.334  # If set to YES, the inheritance and collaboration graphs will hide 
   1.335  # inheritance and usage relations if the target is undocumented 
   1.336  # or is not a class.
   1.337 @@ -1142,19 +1254,19 @@
   1.338  
   1.339  INCLUDED_BY_GRAPH      = YES
   1.340  
   1.341 -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
   1.342 -# generate a call dependency graph for every global function or class method. 
   1.343 -# Note that enabling this option will significantly increase the time of a run. 
   1.344 -# So in most cases it will be better to enable call graphs for selected 
   1.345 -# functions only using the \callgraph command.
   1.346 +# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
   1.347 +# doxygen will generate a call dependency graph for every global function 
   1.348 +# or class method. Note that enabling this option will significantly increase 
   1.349 +# the time of a run. So in most cases it will be better to enable call graphs 
   1.350 +# for selected functions only using the \callgraph command.
   1.351  
   1.352  CALL_GRAPH             = NO
   1.353  
   1.354 -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
   1.355 -# generate a caller dependency graph for every global function or class method. 
   1.356 -# Note that enabling this option will significantly increase the time of a run. 
   1.357 -# So in most cases it will be better to enable caller graphs for selected 
   1.358 -# functions only using the \callergraph command.
   1.359 +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
   1.360 +# doxygen will generate a caller dependency graph for every global function 
   1.361 +# or class method. Note that enabling this option will significantly increase 
   1.362 +# the time of a run. So in most cases it will be better to enable caller 
   1.363 +# graphs for selected functions only using the \callergraph command.
   1.364  
   1.365  CALLER_GRAPH           = NO
   1.366  
   1.367 @@ -1187,41 +1299,33 @@
   1.368  
   1.369  DOTFILE_DIRS           = 
   1.370  
   1.371 -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
   1.372 -# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
   1.373 -# this value, doxygen will try to truncate the graph, so that it fits within 
   1.374 -# the specified constraint. Beware that most browsers cannot cope with very 
   1.375 -# large images.
   1.376 +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
   1.377 +# nodes that will be shown in the graph. If the number of nodes in a graph 
   1.378 +# becomes larger than this value, doxygen will truncate the graph, which is 
   1.379 +# visualized by representing a node as a red box. Note that doxygen if the 
   1.380 +# number of direct children of the root node in a graph is already larger than 
   1.381 +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
   1.382 +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
   1.383  
   1.384 -MAX_DOT_GRAPH_WIDTH    = 1024
   1.385 -
   1.386 -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
   1.387 -# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
   1.388 -# this value, doxygen will try to truncate the graph, so that it fits within 
   1.389 -# the specified constraint. Beware that most browsers cannot cope with very 
   1.390 -# large images.
   1.391 -
   1.392 -MAX_DOT_GRAPH_HEIGHT   = 1024
   1.393 +DOT_GRAPH_MAX_NODES    = 50
   1.394  
   1.395  # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
   1.396  # graphs generated by dot. A depth value of 3 means that only nodes reachable 
   1.397  # from the root by following a path via at most 3 edges will be shown. Nodes 
   1.398  # that lay further from the root node will be omitted. Note that setting this 
   1.399  # option to 1 or 2 may greatly reduce the computation time needed for large 
   1.400 -# code bases. Also note that a graph may be further truncated if the graph's 
   1.401 -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH 
   1.402 -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), 
   1.403 -# the graph is not depth-constrained.
   1.404 +# code bases. Also note that the size of a graph can be further restricted by 
   1.405 +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
   1.406  
   1.407  MAX_DOT_GRAPH_DEPTH    = 0
   1.408  
   1.409  # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
   1.410 -# background. This is disabled by default, which results in a white background. 
   1.411 -# Warning: Depending on the platform used, enabling this option may lead to 
   1.412 -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to 
   1.413 -# read).
   1.414 +# background. This is enabled by default, which results in a transparent 
   1.415 +# background. Warning: Depending on the platform used, enabling this option 
   1.416 +# may lead to badly anti-aliased labels on the edges of a graph (i.e. they 
   1.417 +# become hard to read).
   1.418  
   1.419 -DOT_TRANSPARENT        = NO
   1.420 +DOT_TRANSPARENT        = YES
   1.421  
   1.422  # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
   1.423  # files in one run (i.e. multiple -o and -T options on the command line). This 
     2.1 --- a/mapeditor.cpp	Wed Oct 29 17:42:34 2008 +0000
     2.2 +++ b/mapeditor.cpp	Tue Nov 04 12:09:10 2008 +0000
     2.3 @@ -43,7 +43,7 @@
     2.4  	model=vm;
     2.5  	model->setScene (mapScene);
     2.6  	model->registerEditor(this);
     2.7 -	model->addMapCenter();	//  FIXME create this in MapEditor until BO and MCO are independent of scene
     2.8 +//	model->addMapCenter();	//  FIXME create this in MapEditor until BO and MCO are independent of scene
     2.9  	model->makeDefault();	// No changes in model so far
    2.10  
    2.11      setScene (mapScene);
    2.12 @@ -82,15 +82,18 @@
    2.13  
    2.14  	QAction *a = new QAction( tr( "Edit heading","MapEditor" ), this);
    2.15  	a->setShortcut ( Qt::Key_Return );					//Edit heading
    2.16 -	//a->setShortcutContext (Qt::WindowShortcut);
    2.17  	addAction (a);
    2.18      connect( a, SIGNAL( triggered() ), this, SLOT( editHeading() ) );
    2.19  	a = new QAction( tr( "Edit heading","MapEditor" ), this);
    2.20  	a->setShortcut ( Qt::Key_Enter);					//Edit heading
    2.21 -	//a->setShortcutContext (Qt::WindowShortcut);
    2.22  	addAction (a);
    2.23      connect( a, SIGNAL( triggered() ), this, SLOT( editHeading() ) );
    2.24  
    2.25 +	// Selections
    2.26 +	selModel=vm->getSelectionModel();
    2.27 +	selectionColor =QColor (255,255,0);
    2.28 +	
    2.29 +
    2.30  	// Attributes	//FIXME testing only...
    2.31  	QString k;
    2.32  	AttributeDef *ad;
    2.33 @@ -273,12 +276,6 @@
    2.34  	}
    2.35  }
    2.36  
    2.37 -void MapEditor::updateSelection()
    2.38 -{
    2.39 -	// Tell selection to update geometries
    2.40 -	model->updateSelection();
    2.41 -}
    2.42 -
    2.43  AttributeTable* MapEditor::attributeTable()
    2.44  {
    2.45  	return attrTable;
    2.46 @@ -1041,26 +1038,71 @@
    2.47  	event->acceptProposedAction();
    2.48  }
    2.49  
    2.50 +void MapEditor::updateSelection(const QItemSelection &newsel,const QItemSelection &)
    2.51 +{
    2.52 +	cout << "ME::updateSelection\n";
    2.53  
    2.54 +	QGraphicsRectItem *sb;
    2.55  
    2.56 -bool isUnicode16(const QByteArray &d) 
    2.57 -{
    2.58 -  // TODO: make more precise check for unicode 16.
    2.59 -  // Guess unicode16 if any of second bytes are zero
    2.60 -  unsigned int length = max(0,d.size()-2)/2;
    2.61 -  for (unsigned int i = 0; i<length ; i++)
    2.62 -    if (d.at(i*2+1)==0) return true;
    2.63 -  return false;
    2.64 -}
    2.65 -      
    2.66 +	// Check if selection is empty
    2.67 +	if (newsel.indexes().isEmpty() )
    2.68 +	{
    2.69 +		if (!selboxList.isEmpty())
    2.70 +			while (!selboxList.isEmpty() )
    2.71 +				delete selboxList.takeFirst();
    2.72 +		return;		
    2.73 +	}
    2.74  
    2.75 -void MapEditor::setSelectionModel (QItemSelectionModel *sm)
    2.76 -{
    2.77 -	selModel=sm;
    2.78 +	if (selboxList.isEmpty())
    2.79 +	{
    2.80 +		sb = mapScene->addRect(
    2.81 +			QRectF(0,0,0,0), 
    2.82 +			QPen(selectionColor),
    2.83 +			selectionColor);
    2.84 +		sb->setZValue(Z_SELBOX);
    2.85 +		sb->show();
    2.86 +		selboxList.append (sb);
    2.87 +	} else
    2.88 +		sb=selboxList.first();
    2.89 +		
    2.90 +	QModelIndex index=newsel.indexes().first();	// TODO no multiselections yet
    2.91 +
    2.92 +	TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    2.93 +	LinkableMapObj *lmo=item->getLMO();
    2.94 +
    2.95 +	int w=0;	// FIXME what for?
    2.96 +	if (lmo)
    2.97 +	{
    2.98 +		QRectF bbox=lmo->getBBox();
    2.99 +		selboxList.first()->setRect (
   2.100 +			bbox.x()-w,bbox.y()-w, 
   2.101 +			bbox.width()+2*w, bbox.height()+2*w);
   2.102 +		selboxList.first()->setPen (selectionColor);	
   2.103 +		selboxList.first()->setBrush (selectionColor);	
   2.104 +	}
   2.105 +	
   2.106 +
   2.107 +
   2.108  }
   2.109  
   2.110 -QItemSelectionModel* MapEditor::selectionModel ()
   2.111 +void MapEditor::updateSelectionGeometry()	// FIXME VM only called from VM::animate...
   2.112  {
   2.113 -	return selModel;
   2.114 +	cout << "ME::updateSelectionGeometry\n";
   2.115 +
   2.116 +	// Tell selection to update geometries
   2.117 +	model->updateSelection();
   2.118  }
   2.119  
   2.120 +
   2.121 +void MapEditor::setSelectionColor (QColor col)
   2.122 +{
   2.123 +	selectionColor=col;
   2.124 +	updateSelectionGeometry();
   2.125 +}
   2.126 +
   2.127 +QColor MapEditor::getSelectionColor ()
   2.128 +{
   2.129 +	return selectionColor;
   2.130 +}
   2.131 +
   2.132 +
     3.1 --- a/mapeditor.h	Wed Oct 29 17:42:34 2008 +0000
     3.2 +++ b/mapeditor.h	Tue Nov 04 12:09:10 2008 +0000
     3.3 @@ -28,7 +28,6 @@
     3.4  public:
     3.5  	void toggleStandardFlag(QString);
     3.6  
     3.7 -	void updateSelection();				// update geometry of selection
     3.8  
     3.9  	AttributeTable* attributeTable();
    3.10      void testFunction1();				// just testing new stuff
    3.11 @@ -92,11 +91,21 @@
    3.12  
    3.13  	QPoint exportOffset;		// set before export, used in save
    3.14  
    3.15 -public:
    3.16 -	void setSelectionModel (QItemSelectionModel*);
    3.17 -	QItemSelectionModel* selectionModel();
    3.18 +//////////// Selection related
    3.19 +signals:
    3.20 +	void selectionChanged();			// Emitted when selection or its represantion changes
    3.21 +
    3.22  private:	
    3.23      QItemSelectionModel* selModel;	// we treat MapEditor as View here...
    3.24 +	QList <QGraphicsRectItem*> selboxList;
    3.25 +	QColor selectionColor;
    3.26 +
    3.27 +public slots:
    3.28 +	void updateSelection(const QItemSelection &,const QItemSelection &); // update selection
    3.29 +public:
    3.30 +	void updateSelectionGeometry();	// update geometry of selection
    3.31 +	void setSelectionColor (QColor c);
    3.32 +	QColor getSelectionColor ();
    3.33  
    3.34  };
    3.35  #endif
     4.1 --- a/selection.cpp	Wed Oct 29 17:42:34 2008 +0000
     4.2 +++ b/selection.cpp	Tue Nov 04 12:09:10 2008 +0000
     4.3 @@ -11,7 +11,6 @@
     4.4  
     4.5  Selection::Selection()
     4.6  {
     4.7 -	color= QColor(255,255,0);
     4.8  	blocked=false;
     4.9  }
    4.10  
    4.11 @@ -22,7 +21,7 @@
    4.12  void Selection::setModel (VymModel *m)
    4.13  {
    4.14  	model=m;
    4.15 -	scene=model->getScene();
    4.16 +	selModel=model->getSelectionModel();
    4.17  }
    4.18  
    4.19  void Selection::copy(const Selection &other)
    4.20 @@ -37,36 +36,28 @@
    4.21  	lastSelectList.clear();
    4.22  }
    4.23  
    4.24 -void Selection::update() // FIXME this needs to be adapted to several views
    4.25 +void Selection::update() // TODO this needs to be adapted to several views
    4.26  {
    4.27  	QRectF bbox;
    4.28 -	int w=0;
    4.29 +	//int w=0;
    4.30  	for (int i=0; i< selectList.count(); ++i) 
    4.31  	{
    4.32  		bbox=selectList.at(i)->getBBox();
    4.33 +		/* FIXME VM move to MapEditor
    4.34  		selboxList.at(i)->setRect (
    4.35  			bbox.x()-w,bbox.y()-w, 
    4.36  			bbox.width()+2*w, bbox.height()+2*w);
    4.37  		selboxList.at(i)->setPen (color);	
    4.38  		selboxList.at(i)->setBrush (color);	
    4.39 +		*/
    4.40  	}	
    4.41  }
    4.42  
    4.43 -void Selection::setColor (QColor col)
    4.44 -{
    4.45 -	color=col;
    4.46 -	update();
    4.47 -}
    4.48 -
    4.49 -QColor Selection::getColor ()
    4.50 -{
    4.51 -	return color;
    4.52 -}
    4.53 -
    4.54  bool Selection::select(LinkableMapObj *lmo)	// TODO no multiselections yet
    4.55  {
    4.56  	if (!selectList.isEmpty()) unselect();
    4.57  	selectList.append (lmo);
    4.58 +	/* FIXME VM move to ME
    4.59  	QGraphicsRectItem *sb = scene->addRect(
    4.60  		QRectF(0,0,0,0), 
    4.61  		QPen(color),
    4.62 @@ -74,6 +65,7 @@
    4.63  	sb->setZValue(Z_SELBOX);
    4.64  	sb->show();
    4.65  	selboxList.append (sb);
    4.66 +	*/
    4.67  	lmo->select();
    4.68  	update();
    4.69  	mainWindow->updateSatellites (model);	
    4.70 @@ -114,8 +106,10 @@
    4.71  			selectList.at(i)->unselect();
    4.72  		lastSelectList=selectList;
    4.73  		selectList.clear();
    4.74 -		while (!selboxList.isEmpty() )
    4.75 +		/* FIXME VM move to ME
    4.76 +		while (!selboxList.isEmpty() )	
    4.77  			delete selboxList.takeFirst();
    4.78 +		*/	
    4.79  
    4.80  	}	
    4.81  }
    4.82 @@ -188,10 +182,16 @@
    4.83  TreeItem* Selection::getBranchItem()
    4.84  {
    4.85  	BranchObj* bo=getBranch();
    4.86 -	if (bo) return bo->getTreeItem();
    4.87 +	if (bo) return bo->getTreeItem(); // FIXME VM get directly from treemodl
    4.88  	return NULL;
    4.89  }
    4.90  
    4.91 +QModelIndex Selection::getBranchIndex()
    4.92 +{
    4.93 +	return selModel->selectedIndexes().first();	// TODO no multiselections yet
    4.94 +
    4.95 +}
    4.96 +
    4.97  FloatImageObj* Selection::getFloatImage()
    4.98  {
    4.99  	if (!selectList.isEmpty())
     5.1 --- a/selection.h	Wed Oct 29 17:42:34 2008 +0000
     5.2 +++ b/selection.h	Tue Nov 04 12:09:10 2008 +0000
     5.3 @@ -4,6 +4,7 @@
     5.4  #include <QString>
     5.5  #include <QList>
     5.6  #include <QGraphicsScene>
     5.7 +#include <QItemSelectionModel>
     5.8  
     5.9  #include "treeitem.h"
    5.10  
    5.11 @@ -24,8 +25,6 @@
    5.12  	void clear();
    5.13  	void setModel (VymModel *);
    5.14  	void update();
    5.15 -	void setColor (QColor c);
    5.16 -	QColor getColor ();
    5.17  	bool select (LinkableMapObj*);
    5.18  	bool select (const QString &);
    5.19  	bool reselect ();
    5.20 @@ -40,17 +39,18 @@
    5.21  	LinkableMapObj * single();		// NULL, if multiple selected
    5.22  	BranchObj* getBranch();
    5.23  	TreeItem* getBranchItem();		
    5.24 +	QModelIndex getBranchIndex();	//!< Returns index of first selected branch or mapcenter
    5.25  	FloatImageObj* getFloatImage();
    5.26  
    5.27  	QString getSelectString();
    5.28  
    5.29  private:
    5.30 -	void init();
    5.31  	QList <LinkableMapObj*> selectList;
    5.32  	QList <LinkableMapObj*> lastSelectList;
    5.33 -	QList <QGraphicsRectItem*> selboxList;
    5.34 +
    5.35  	VymModel *model;
    5.36 -	QGraphicsScene *scene;
    5.37 +
    5.38 +	QItemSelectionModel *selModel;	//!< QSelectionModel is shared across views and initialized in setModel
    5.39  
    5.40  	QColor color;
    5.41  	bool blocked;					//!< if true, no new selection possible
     6.1 --- a/version.h	Wed Oct 29 17:42:34 2008 +0000
     6.2 +++ b/version.h	Tue Nov 04 12:09:10 2008 +0000
     6.3 @@ -7,7 +7,7 @@
     6.4  #define __VYM_VERSION "1.13.0"
     6.5  //#define __VYM_CODENAME "Codename: RC-1"
     6.6  #define __VYM_CODENAME "Codename: development version"
     6.7 -#define __VYM_BUILD_DATE "2008-10-29"
     6.8 +#define __VYM_BUILD_DATE "2008-11-04"
     6.9  
    6.10  
    6.11  bool checkVersion(const QString &);
     7.1 --- a/vymmodel.cpp	Wed Oct 29 17:42:34 2008 +0000
     7.2 +++ b/vymmodel.cpp	Tue Nov 04 12:09:10 2008 +0000
     7.3 @@ -86,6 +86,9 @@
     7.4  	// No MapEditor yet
     7.5  	mapEditor=NULL;
     7.6  
     7.7 +	// Also no scene yet (should not be needed anyway)  FIXME VM
     7.8 +	mapScene=NULL;
     7.9 +
    7.10  	// History 
    7.11  	mapNum++;
    7.12      mapChanged=false;
    7.13 @@ -120,6 +123,7 @@
    7.14  
    7.15  
    7.16  	// selections
    7.17 +	selModel=NULL;
    7.18  	selection.setModel (this);
    7.19  	selection.unselect();
    7.20  
    7.21 @@ -223,7 +227,7 @@
    7.22  				  xml.attribut("comment",comment) +
    7.23  			      xml.attribut("date",getDate()) +
    7.24  		          xml.attribut("backgroundColor", mapScene->backgroundBrush().color().name() ) +
    7.25 -		          xml.attribut("selectionColor", selection.getColor().name() ) +
    7.26 +		          xml.attribut("selectionColor", mapEditor->getSelectionColor().name() ) +
    7.27  		          xml.attribut("linkStyle", ls ) +
    7.28  		          xml.attribut("linkColor", defLinkColor.name() ) +
    7.29  		          xml.attribut("defXLinkColor", defXLinkColor.name() ) +
    7.30 @@ -1589,8 +1593,9 @@
    7.31  
    7.32  void VymModel::setScene (QGraphicsScene *s)
    7.33  {
    7.34 -	mapScene=s;
    7.35 -    init();	// Here we have a mapScene set, 
    7.36 +	cout << "VM::setscene scene="<<s<<endl;
    7.37 +	mapScene=s;	// FIXME VM should not be necessary anymore, move all occurences to MapEditor
    7.38 +    //init();	// Here we have a mapScene set, 
    7.39  			// which is (still) needed to create MapCenters
    7.40  }
    7.41  
    7.42 @@ -2000,6 +2005,7 @@
    7.43  MapCenterObj* VymModel::addMapCenter ()
    7.44  {
    7.45  	MapCenterObj *mco=addMapCenter (contextPos);
    7.46 +	cout <<"VM::addMCO ()  mapScene="<<mapScene<<endl;
    7.47  	selection.select (mco);
    7.48  	updateActions();
    7.49  	ensureSelectionVisible();
    7.50 @@ -2164,6 +2170,7 @@
    7.51  void VymModel::deleteSelection()
    7.52  {
    7.53  	BranchObj *bo = selection.getBranch();
    7.54 +	
    7.55  	if (bo && selection.type()==Selection::MapCenter)
    7.56  	{
    7.57  	//	BranchObj* par=(BranchObj*)(bo->getParObj());
    7.58 @@ -2183,10 +2190,11 @@
    7.59  	}
    7.60  	if (bo && selection.type()==Selection::Branch)
    7.61  	{
    7.62 -		//FIXME need to check if any animObj is part of Branch, remove from animated obj list then
    7.63 -
    7.64 -		// missing!!!!
    7.65 -
    7.66 +		QModelIndex ix=selection.getBranchIndex();
    7.67 +		if (ix.isValid())
    7.68 +		{
    7.69 +			cout << "VM::deleteSelection\n";
    7.70 +		}
    7.71  
    7.72  		BranchObj* par=(BranchObj*)bo->getParObj();
    7.73  		selection.unselect();
    7.74 @@ -4131,7 +4139,7 @@
    7.75  		bo->reposition();
    7.76  		i++;
    7.77  	} 
    7.78 -	mapEditor->updateSelection();
    7.79 +	emit (selectionChanged(selModel->selection(), selModel->selection()) );
    7.80  	mapScene->update();
    7.81  	if (!animObjList.isEmpty()) animationTimer->start();
    7.82  }
    7.83 @@ -4305,12 +4313,12 @@
    7.84  {
    7.85  	if ( !col.isValid() ) return;
    7.86  	saveState (
    7.87 -		QString("setSelectionColor (%1)").arg(selection.getColor().name()),
    7.88 +		QString("setSelectionColor (%1)").arg(mapEditor->getSelectionColor().name()),
    7.89  		QString("setSelectionColor (%1)").arg(col.name()),
    7.90  		QString("Set color of selection box to %1").arg(col.name())
    7.91  	);
    7.92  
    7.93 -	selection.setColor (col);
    7.94 +	mapEditor->setSelectionColor (col);
    7.95  }
    7.96  
    7.97  void VymModel::updateSelection()
    7.98 @@ -4322,7 +4330,7 @@
    7.99  {
   7.100  	if ( !col.isValid() ) return;
   7.101  	saveState (
   7.102 -		QString("setSelectionColor (%1)").arg(selection.getColor().name()),
   7.103 +		QString("setSelectionColor (%1)").arg(mapEditor->getSelectionColor().name()),
   7.104  		QString("setSelectionColor (%1)").arg(col.name()),
   7.105  		QString("Set color of selection box to %1").arg(col.name())
   7.106  	);
   7.107 @@ -4331,7 +4339,7 @@
   7.108  
   7.109  QColor VymModel::getSelectionColor()
   7.110  {
   7.111 -	return selection.getColor();
   7.112 +	return mapEditor->getSelectionColor();
   7.113  }
   7.114  
   7.115  void VymModel::setHideTmpMode (HideTmpMode mode)
   7.116 @@ -4359,6 +4367,12 @@
   7.117  void VymModel::setSelectionModel (QItemSelectionModel *sm)
   7.118  {
   7.119  	selModel=sm;
   7.120 +	cout << "VM::setSelModel  selModel="<<selModel<<endl;
   7.121 +}
   7.122 +
   7.123 +QItemSelectionModel* VymModel::getSelectionModel()
   7.124 +{
   7.125 +	return selModel;
   7.126  }
   7.127  
   7.128  void VymModel::setSelectionBlocked (bool b)
     8.1 --- a/vymmodel.h	Wed Oct 29 17:42:34 2008 +0000
     8.2 +++ b/vymmodel.h	Tue Nov 04 12:09:10 2008 +0000
     8.3 @@ -524,8 +524,12 @@
     8.4  	Selection selection;
     8.5  	QString latestSelectionString;	// select string of latest added object
     8.6  
     8.7 +signals:
     8.8 +	void selectionChanged(const QItemSelection &, const QItemSelection &);
     8.9 +
    8.10  public:
    8.11  	void setSelectionModel(QItemSelectionModel *);		// Set common selectionModel
    8.12 +	QItemSelectionModel* getSelectionModel();
    8.13  
    8.14  	void setSelectionBlocked(bool);
    8.15  	bool isSelectionBlocked();
     9.1 --- a/vymview.cpp	Wed Oct 29 17:42:34 2008 +0000
     9.2 +++ b/vymview.cpp	Tue Nov 04 12:09:10 2008 +0000
     9.3 @@ -12,18 +12,24 @@
     9.4  	treeview->setMinimumWidth (350);
     9.5  	treeview->setColumnWidth (0,350);
     9.6  
     9.7 -	// ItemSelectionModel
     9.8  	selModel=treeview->selectionModel();
     9.9 +	model->setSelectionModel (selModel);
    9.10  	connect (
    9.11  		selModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), 
    9.12  		this,SLOT (changeSelection(const QItemSelection &,const QItemSelection &)));
    9.13 -	model->setSelectionModel (selModel);
    9.14  
    9.15  	// Create good old MapEditor
    9.16  	MapEditor* me=model->getMapEditor();
    9.17  	if (!me) me=new MapEditor (model);
    9.18 +	connect (
    9.19 +		selModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), 
    9.20 +		me,SLOT (updateSelection(const QItemSelection &,const QItemSelection &)));
    9.21  
    9.22 -	me->setSelectionModel (selModel);
    9.23 +	// VymModel may want to update selection, e.g. during animation
    9.24 +	connect (
    9.25 +		model, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), 
    9.26 +		me,SLOT (updateSelection(const QItemSelection &,const QItemSelection &)));
    9.27 +
    9.28  
    9.29  	//me->viewport()->setFocus();
    9.30  	//FIXME me->setAntiAlias (actionViewToggleAntiAlias->isOn());
    9.31 @@ -41,8 +47,10 @@
    9.32  
    9.33  QItemSelectionModel* VymView::selectionModel() 
    9.34  {
    9.35 -	if (treeview) return selModel;
    9.36 -	else std::cout <<"hey, no treeview so far???\n";
    9.37 +	if (treeview) 
    9.38 +		return selModel;
    9.39 +	else 
    9.40 +		std::cout <<"VymView::selectionModel: hey, no treeview so far???\n";
    9.41  	return NULL;
    9.42  }
    9.43