From f5d5e297c656fb1304cccd72e9ac347c0bddbd09 Mon Sep 17 00:00:00 2001 From: Juan Prieto Date: Mon, 5 Oct 2009 22:44:40 +0000 Subject: [PATCH] Works with visual studio 2009 --- kernel/CMakeLists.txt | 1 + .../bbRegeneratePackageDoc.cpp | 12 +- kernel/cmake/BBTKBuildHtmlDocFromLatex.cmake | 3 + kernel/cmake/BBTKBuildLatexDoc.cmake | 5 +- kernel/doc/bbtkUsersGuide/bbCommand.png | Bin 1295413 -> 5 bytes kernel/doc/bbtkUsersGuide/bbFile0.png | Bin 16029 -> 5 bytes kernel/doc/bbtkUsersGuide/bbFiles.png | Bin 2603680 -> 5 bytes .../doc/bbtkUsersGuide/bbPackageBrowser.png | Bin 5288862 -> 5 bytes kernel/doc/bbtkWebSite/home.html | 29 +- kernel/src/CMakeLists.txt | 2 +- .../wx/treemultictrl/mac_collapse.xpm | 50 +- .../wx/treemultictrl/mac_expand.xpm | 50 +- .../ThirdParty/wx/treemultictrl/tmcimages.h | 84 +- .../wx/treemultictrl/win_checked_icon.xpm | 546 +-- .../wx/treemultictrl/win_tristate_icon.xpm | 546 +-- .../wx/treemultictrl/win_unchecked_icon.xpm | 546 +-- .../wx/treemultictrl/wxTreeMultiCtrl.cpp | 3970 ++++++++--------- .../wx/treemultictrl/wxTreeMultiCtrl.h | 658 +-- kernel/src/bbtkBlackBox.h | 9 +- kernel/src/bbtkComplexBlackBox.cxx | 21 +- kernel/src/bbtkComplexBlackBox.h | 5 +- kernel/src/bbtkFactory.cxx | 297 +- kernel/src/bbtkInterpreter.cxx | 99 +- kernel/src/bbtkUtilities.cxx | 46 +- .../toolsbbtk/bbs/appli/GUICreatePackage.bbs | 1 - packages/wx/src/bbwxSlider.cxx | 6 +- 26 files changed, 3506 insertions(+), 3480 deletions(-) diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index eeae142..3068544 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -30,3 +30,4 @@ SUBDIRS(install) #----------------------------------------------------------------------------- SUBDIRS(data) #----------------------------------------------------------------------------- +SUBDIRS(bin) \ No newline at end of file diff --git a/kernel/appli/bbRegeneratePackageDoc/bbRegeneratePackageDoc.cpp b/kernel/appli/bbRegeneratePackageDoc/bbRegeneratePackageDoc.cpp index cfae87e..b6a492f 100644 --- a/kernel/appli/bbRegeneratePackageDoc/bbRegeneratePackageDoc.cpp +++ b/kernel/appli/bbRegeneratePackageDoc/bbRegeneratePackageDoc.cpp @@ -45,7 +45,6 @@ void Usage() //========================================================================== int main(int argc, char **argv) { - std::string pack("-a"); if (argc==2) { @@ -68,34 +67,37 @@ int main(int argc, char **argv) Usage(); return 0; } - + try { std::string doc_path = bbtk::ConfigurationFile::GetInstance().Get_doc_path(); doc_path += bbtk::ConfigurationFile::GetInstance().Get_file_separator(); doc_path += "bbdoc"; doc_path += bbtk::ConfigurationFile::GetInstance().Get_file_separator(); - bbtk::Interpreter::Pointer I = bbtk::Interpreter::New(); I->SetCommandLine(true); I->SetThrow(false); +//std::cout<<"JCP bbRegeneratePackageDoc.cpp I->InterpretLine( exec freeze_no_error);"<InterpretLine( "exec freeze_no_error"); if (pack != "-a") { + I->InterpretLine( "include "+pack); I->InterpretLine( "include "+pack+"-appli"); bbtk::Package::Pointer p = I->GetExecuter()->GetFactory()->GetPackage(pack); - +//std::cout<<"JCP bbRegeneratePackageDoc.cpp RegenerateDoc(I->GetExecuter()->GetFactory()->GetPackage(pack),doc_path);"<GetExecuter()->GetFactory()->GetPackage(pack),doc_path); } else { -I->InterpretLine( "include *"); +std::cout<<"JCP bbRegeneratePackageDoc.cpp I->InterpretLine( include );"<InterpretLine( "include *"); bbtk::Factory::PackageMapType::const_iterator i; for (i = I->GetExecuter()->GetFactory()->GetPackageMap().begin(); i != I->GetExecuter()->GetFactory()->GetPackageMap().end(); ++i) { +std::cout<<" if (i->second->GetName()==user) continue;"<second->GetName()=="user") continue; RegenerateDoc(i->second,doc_path); } diff --git a/kernel/cmake/BBTKBuildHtmlDocFromLatex.cmake b/kernel/cmake/BBTKBuildHtmlDocFromLatex.cmake index cbbf5f2..d96acb1 100644 --- a/kernel/cmake/BBTKBuildHtmlDocFromLatex.cmake +++ b/kernel/cmake/BBTKBuildHtmlDocFromLatex.cmake @@ -7,6 +7,9 @@ MACRO(BBTK_BUILD_HTML_DOC_FROM_LATEX TEX_FILE OUTPUT_REL_PATH) SET(BUILD_PATH ${BBTK_DOC_BUILD_PATH}/${OUTPUT_REL_PATH}) #------------------------------------------------------------------------- + IF(WIN32) + SET(TTH_EXECUTABLE "${TTH_EXECUTABLE}/tth.exe") + ENDIF(WIN32) ADD_CUSTOM_COMMAND( OUTPUT ${BUILD_PATH}/${TEX_FILE}.html diff --git a/kernel/cmake/BBTKBuildLatexDoc.cmake b/kernel/cmake/BBTKBuildLatexDoc.cmake index bd07c4f..e62d358 100644 --- a/kernel/cmake/BBTKBuildLatexDoc.cmake +++ b/kernel/cmake/BBTKBuildLatexDoc.cmake @@ -1,6 +1,8 @@ MACRO(BBTK_BUILD_LATEX_DOC TEX_FILE OUTPUT_REL_PATH) + + # Need LaTeX SET(USE_LATEX ON CACHE BOOL "" FORCE) # Construct absolute build path @@ -12,6 +14,7 @@ MACRO(BBTK_BUILD_LATEX_DOC TEX_FILE OUTPUT_REL_PATH) ${BUILD_PATH}/${TEX_FILE}.tex COPYONLY ) + CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/../config.tex ${BUILD_PATH}/config.tex @@ -24,7 +27,7 @@ MACRO(BBTK_BUILD_LATEX_DOC TEX_FILE OUTPUT_REL_PATH) ) #--------------------------------------------------------------------------- FILE(TO_NATIVE_PATH ${BUILD_PATH} THE_BUILD_PATH) - +#message("BBTKBUILLATEXDOC;CMAKE LATEX COMPILER + ${LATEX_COMPILER}") # Have to run latex twice to get references, toc, etc. ADD_CUSTOM_COMMAND( OUTPUT ${BUILD_PATH}/${TEX_FILE}.aux diff --git a/kernel/doc/bbtkUsersGuide/bbCommand.png b/kernel/doc/bbtkUsersGuide/bbCommand.png index 63bbb6426bd5f0a3062c1f766f5eb04aed4fdf79..f1ad7558e4917c38d1dafc49f7bccac10219adee 100644 GIT binary patch literal 5 McmeAS@N?$^00ndbc>n+a literal 1295413 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 literal 16029 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%0A|RKtahPkP`;vywL42BH`9jSeSiw=<3?H;N!p= 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 N!7S{~SDJa>{y)GhTuuN0 diff --git a/kernel/doc/bbtkUsersGuide/bbFiles.png b/kernel/doc/bbtkUsersGuide/bbFiles.png index 392947ab68dd89d7c3e252d573dd2e82db1e8cab..f1ad7558e4917c38d1dafc49f7bccac10219adee 100644 GIT binary patch literal 5 McmeAS@N?$^00ndbc>n+a literal 2603680 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

1sB_P7$Ba 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

@3KuSH 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

6@$ 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 A;s5{u diff --git a/kernel/doc/bbtkUsersGuide/bbPackageBrowser.png b/kernel/doc/bbtkUsersGuide/bbPackageBrowser.png index da99e5552d8fb0e1e3e540a6a987ed7892cbfb38..f1ad7558e4917c38d1dafc49f7bccac10219adee 100644 GIT binary patch literal 5 McmeAS@N?$^00ndbc>n+a literal 5288862 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

P8FX@A$9P#E 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ÙNY`_DiB>{Q2BzhQ*z-MhE)n9h|em$Ylw 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 U+>|SZ9$t0T=T`jY(`&!`Kexd_tN;K2 diff --git a/kernel/doc/bbtkWebSite/home.html b/kernel/doc/bbtkWebSite/home.html index 15b1f54..c4c90d2 100644 --- a/kernel/doc/bbtkWebSite/home.html +++ b/kernel/doc/bbtkWebSite/home.html @@ -8,32 +8,19 @@

-The Black Box Toolkit Documentation
-bbtk @BBTK_VERSION@ (@BBTK_VERSION_DATE@)
+User Documentation
+@PROJECT_VERSION@ (@PROJECT_VERSION_DATE@)

Follow this link if you need to build bbtk from -sources.
+ href="./install.html">this link if you need to build this application from sources.

-Read the users' guide if you -want to learn how to use bbtk development environnement (bbStudio) and -how to write black box scripts.
+Read the users' guide To find out more about this application.

-Read the package -developers' guide to learn how to create your own black boxes and -packages.
-
-Developers might also be interested in doxygen documentation of the -source code of bbtk library.
-
-The boxes lists contain the boxes of bbtk core packages (std,wx,vtk...) -for current version.
-
-All this documentation is also available from bbStudio.
+The futures developers in this project might be also interested in the doxygen documentation of the +source code.
+

diff --git a/kernel/src/CMakeLists.txt b/kernel/src/CMakeLists.txt index 1978b2d..96ce672 100644 --- a/kernel/src/CMakeLists.txt +++ b/kernel/src/CMakeLists.txt @@ -162,7 +162,7 @@ ENDIF(BBTK_USE_QT) # lib definition ADD_LIBRARY(bbtk SHARED ${SOURCES} ${SOURCES_H}) #----------------------------------------------------------------------------- -TARGET_LINK_LIBRARIES(bbtk ${BBTK_LINK_LIBRARIES} ${BOOST_LIBRARIES}) +TARGET_LINK_LIBRARIES(bbtk ${BBTK_LINK_LIBRARIES} ${BOOST_LIBRARIES} ${crea_LIBRARIES}) #----------------------------------------------------------------------------- IF(UNIX) SET_TARGET_PROPERTIES(bbtk PROPERTIES COMPILE_FLAGS -Wall) diff --git a/kernel/src/ThirdParty/wx/treemultictrl/mac_collapse.xpm b/kernel/src/ThirdParty/wx/treemultictrl/mac_collapse.xpm index d100ef6..8089da7 100644 --- a/kernel/src/ThirdParty/wx/treemultictrl/mac_collapse.xpm +++ b/kernel/src/ThirdParty/wx/treemultictrl/mac_collapse.xpm @@ -1,25 +1,25 @@ -/* XPM */ -static char *collapse_xpm[] = -{ -/* width height ncolors chars_per_pixel */ -"11 11 6 1", -/* colors */ -"A c None", -"B c #CCCCCCCCCCCC", -"C c #EEEEEEEEEEEE", -"D c #DDDDDDDDDDDD", -"E c #BBBBBBBBBBBB", -"F c #AAAAAAAAAAAA", -/* pixels */ -"ACAAAAAAAAA", -"ABEAAAAAAAA", -"AFEEBAAAAAA", -"AEEFEEDAAAA", -"AEFEFEFBCAA", -"AFEFEFEFEBA", -"AEEEFEFBCAA", -"AEFFEEDAAAA", -"AFEEDAAAAAA", -"ABBCAAAAAAA", -"ACAAAAAAAAA", -}; +/* XPM */ +static char *collapse_xpm[] = +{ +/* width height ncolors chars_per_pixel */ +"11 11 6 1", +/* colors */ +"A c None", +"B c #CCCCCCCCCCCC", +"C c #EEEEEEEEEEEE", +"D c #DDDDDDDDDDDD", +"E c #BBBBBBBBBBBB", +"F c #AAAAAAAAAAAA", +/* pixels */ +"ACAAAAAAAAA", +"ABEAAAAAAAA", +"AFEEBAAAAAA", +"AEEFEEDAAAA", +"AEFEFEFBCAA", +"AFEFEFEFEBA", +"AEEEFEFBCAA", +"AEFFEEDAAAA", +"AFEEDAAAAAA", +"ABBCAAAAAAA", +"ACAAAAAAAAA", +}; diff --git a/kernel/src/ThirdParty/wx/treemultictrl/mac_expand.xpm b/kernel/src/ThirdParty/wx/treemultictrl/mac_expand.xpm index d2a09e8..507cd8c 100644 --- a/kernel/src/ThirdParty/wx/treemultictrl/mac_expand.xpm +++ b/kernel/src/ThirdParty/wx/treemultictrl/mac_expand.xpm @@ -1,25 +1,25 @@ -/* XPM */ -static char *expand_xpm[] = -{ -/* width height ncolors chars_per_pixel */ -"11 11 6 1", -/* colors */ -"A c None", -"B c #CCCCCCCCCCCC", -"C c #EEEEEEEEEEEE", -"D c #DDDDDDDDDDDD", -"E c #BBBBBBBBBBBB", -"F c #AAAAAAAAAAAA", -/* pixels */ -"AAAAAAAAAAA", -"CBFEEFEEFBC", -"ABEFEEFEEEA", -"ACEFEFEFEAA", -"AADEFEFEBAA", -"AAAEEFEEAAA", -"AAADFEFDAAA", -"AAAABFBAAAA", -"AAAACECAAAA", -"AAAAABAAAAA", -"AAAAAAAAAAA", -}; +/* XPM */ +static char *expand_xpm[] = +{ +/* width height ncolors chars_per_pixel */ +"11 11 6 1", +/* colors */ +"A c None", +"B c #CCCCCCCCCCCC", +"C c #EEEEEEEEEEEE", +"D c #DDDDDDDDDDDD", +"E c #BBBBBBBBBBBB", +"F c #AAAAAAAAAAAA", +/* pixels */ +"AAAAAAAAAAA", +"CBFEEFEEFBC", +"ABEFEEFEEEA", +"ACEFEFEFEAA", +"AADEFEFEBAA", +"AAAEEFEEAAA", +"AAADFEFDAAA", +"AAAABFBAAAA", +"AAAACECAAAA", +"AAAAABAAAAA", +"AAAAAAAAAAA", +}; diff --git a/kernel/src/ThirdParty/wx/treemultictrl/tmcimages.h b/kernel/src/ThirdParty/wx/treemultictrl/tmcimages.h index ed94b73..23a4e78 100644 --- a/kernel/src/ThirdParty/wx/treemultictrl/tmcimages.h +++ b/kernel/src/ThirdParty/wx/treemultictrl/tmcimages.h @@ -1,42 +1,42 @@ -//--------------------------------------------------------------------------- -// $RCSfile: tmcimages.h,v $ -// $Source: /cvs/creatis/bbtk/kernel/src/ThirdParty/wx/treemultictrl/tmcimages.h,v $ -// $Revision: 1.1 $ -// $Date: 2008/03/28 13:42:19 $ -//--------------------------------------------------------------------------- -// Author: Jorgen Bodde -// Copyright: (c) Jorgen Bodde -// License: wxWidgets License -//--------------------------------------------------------------------------- - -#ifndef _TMCIMAGES_H_ -#define _TMCIMAGES_H_ - -// pics for the expand / collapse buttons -#ifdef __APPLE__ - #include "mac_collapse.xpm" - #include "mac_expand.xpm" -#else - #ifdef LINUX - #include "linux_collapse.xpm" - #include "linux_expand.xpm" - #else - #include "default_collapse.xpm" - #include "default_expand.xpm" - #endif -#endif - -#if(CHECKBOXVIEW) - // icons for checkbox states - #ifdef WINDOWS - #include "win_unchecked_icon.xpm" - #include "win_checked_icon.xpm" - #include "win_tristate_icon.xpm" - #else - #include "default_unchecked_icon.xpm" - #include "default_checked_icon.xpm" - #include "default_tristate_icon.xpm" - #endif // WINDOWS -#endif // #if(CHECKBOXVIEW) - -#endif // _TMCIMAGES_H_ +//--------------------------------------------------------------------------- +// $RCSfile: tmcimages.h,v $ +// $Source: /cvs/creatis/bbtk/kernel/src/ThirdParty/wx/treemultictrl/tmcimages.h,v $ +// $Revision: 1.2 $ +// $Date: 2009/10/05 22:44:50 $ +//--------------------------------------------------------------------------- +// Author: Jorgen Bodde +// Copyright: (c) Jorgen Bodde +// License: wxWidgets License +//--------------------------------------------------------------------------- + +#ifndef _TMCIMAGES_H_ +#define _TMCIMAGES_H_ + +// pics for the expand / collapse buttons +#ifdef __APPLE__ + #include "mac_collapse.xpm" + #include "mac_expand.xpm" +#else + #ifdef LINUX + #include "linux_collapse.xpm" + #include "linux_expand.xpm" + #else + #include "default_collapse.xpm" + #include "default_expand.xpm" + #endif +#endif + +#if(CHECKBOXVIEW) + // icons for checkbox states + #ifdef WINDOWS + #include "win_unchecked_icon.xpm" + #include "win_checked_icon.xpm" + #include "win_tristate_icon.xpm" + #else + #include "default_unchecked_icon.xpm" + #include "default_checked_icon.xpm" + #include "default_tristate_icon.xpm" + #endif // WINDOWS +#endif // #if(CHECKBOXVIEW) + +#endif // _TMCIMAGES_H_ diff --git a/kernel/src/ThirdParty/wx/treemultictrl/win_checked_icon.xpm b/kernel/src/ThirdParty/wx/treemultictrl/win_checked_icon.xpm index f1d550f..87dd66c 100644 --- a/kernel/src/ThirdParty/wx/treemultictrl/win_checked_icon.xpm +++ b/kernel/src/ThirdParty/wx/treemultictrl/win_checked_icon.xpm @@ -1,273 +1,273 @@ -/* XPM */ -static char *checked_icon[] = { -"13 13 256 3", -"000 c #1C5180", -"001 c #21A121", -"002 c #E2E2DD", -"003 c #E3E3DF", -"004 c #E5E5E1", -"005 c #E7E7E3", -"006 c #EAEAE6", -"007 c #ECECE9", -"008 c #EFEFEC", -"009 c #F1F1EF", -"010 c #F3F3F1", -"011 c #F5F5F3", -"012 c #F7F7F6", -"013 c #F9F9F8", -"014 c #FAFAF9", -"015 c #FCFCFB", -"016 c #FDFDFD", -"017 c #FEFEFE", -"018 c gray100", -"019 c black", -"020 c black", -"021 c black", -"022 c black", -"023 c black", -"024 c black", -"025 c black", -"026 c black", -"027 c black", -"028 c black", -"029 c black", -"030 c black", -"031 c black", -"032 c black", -"033 c black", -"034 c black", -"035 c black", -"036 c black", -"037 c black", -"038 c black", -"039 c black", -"040 c black", -"041 c black", -"042 c black", -"043 c black", -"044 c black", -"045 c black", -"046 c black", -"047 c black", -"048 c black", -"049 c black", -"050 c black", -"051 c black", -"052 c black", -"053 c black", -"054 c black", -"055 c black", -"056 c black", -"057 c black", -"058 c black", -"059 c black", -"060 c black", -"061 c black", -"062 c black", -"063 c black", -"064 c black", -"065 c black", -"066 c black", -"067 c black", -"068 c black", -"069 c black", -"070 c black", -"071 c black", -"072 c black", -"073 c black", -"074 c black", -"075 c black", -"076 c black", -"077 c black", -"078 c black", -"079 c black", -"080 c black", -"081 c black", -"082 c black", -"083 c black", -"084 c black", -"085 c black", -"086 c black", -"087 c black", -"088 c black", -"089 c black", -"090 c black", -"091 c black", -"092 c black", -"093 c black", -"094 c black", -"095 c black", -"096 c black", -"097 c black", -"098 c black", -"099 c black", -"100 c black", -"101 c black", -"102 c black", -"103 c black", -"104 c black", -"105 c black", -"106 c black", -"107 c black", -"108 c black", -"109 c black", -"110 c black", -"111 c black", -"112 c black", -"113 c black", -"114 c black", -"115 c black", -"116 c black", -"117 c black", -"118 c black", -"119 c black", -"120 c black", -"121 c black", -"122 c black", -"123 c black", -"124 c black", -"125 c black", -"126 c black", -"127 c black", -"128 c black", -"129 c black", -"130 c black", -"131 c black", -"132 c black", -"133 c black", -"134 c black", -"135 c black", -"136 c black", -"137 c black", -"138 c black", -"139 c black", -"140 c black", -"141 c black", -"142 c black", -"143 c black", -"144 c black", -"145 c black", -"146 c black", -"147 c black", -"148 c black", -"149 c black", -"150 c black", -"151 c black", -"152 c black", -"153 c black", -"154 c black", -"155 c black", -"156 c black", -"157 c black", -"158 c black", -"159 c black", -"160 c black", -"161 c black", -"162 c black", -"163 c black", -"164 c black", -"165 c black", -"166 c black", -"167 c black", -"168 c black", -"169 c black", -"170 c black", -"171 c black", -"172 c black", -"173 c black", -"174 c black", -"175 c black", -"176 c black", -"177 c black", -"178 c black", -"179 c black", -"180 c black", -"181 c black", -"182 c black", -"183 c black", -"184 c black", -"185 c black", -"186 c black", -"187 c black", -"188 c black", -"189 c black", -"190 c black", -"191 c black", -"192 c black", -"193 c black", -"194 c black", -"195 c black", -"196 c black", -"197 c black", -"198 c black", -"199 c black", -"200 c black", -"201 c black", -"202 c black", -"203 c black", -"204 c black", -"205 c black", -"206 c black", -"207 c black", -"208 c black", -"209 c black", -"210 c black", -"211 c black", -"212 c black", -"213 c black", -"214 c black", -"215 c black", -"216 c black", -"217 c black", -"218 c black", -"219 c black", -"220 c black", -"221 c black", -"222 c black", -"223 c black", -"224 c black", -"225 c black", -"226 c black", -"227 c black", -"228 c black", -"229 c black", -"230 c black", -"231 c black", -"232 c black", -"233 c black", -"234 c black", -"235 c black", -"236 c black", -"237 c black", -"238 c black", -"239 c black", -"240 c black", -"241 c black", -"242 c black", -"243 c black", -"244 c black", -"245 c black", -"246 c black", -"247 c black", -"248 c black", -"249 c black", -"250 c black", -"251 c black", -"252 c black", -"253 c black", -"254 c black", -"255 c black", -"000000000000000000000000000000000000000", -"000002002002003004005006007008009010000", -"000002002003004005006007008009010011000", -"000002003004005006007008009001011012000", -"000003004005006007008009001001012013000", -"000004005001007008009001001001013014000", -"000005006001001009001001001013014015000", -"000006007001001001001001013014015016000", -"000007008009001001001013014015016017000", -"000008009010011001013014015016017018000", -"000009010011012013014015016017018018000", -"000010011012013014015016017018018018000", -"000000000000000000000000000000000000000" -}; +/* XPM */ +static char *checked_icon[] = { +"13 13 256 3", +"000 c #1C5180", +"001 c #21A121", +"002 c #E2E2DD", +"003 c #E3E3DF", +"004 c #E5E5E1", +"005 c #E7E7E3", +"006 c #EAEAE6", +"007 c #ECECE9", +"008 c #EFEFEC", +"009 c #F1F1EF", +"010 c #F3F3F1", +"011 c #F5F5F3", +"012 c #F7F7F6", +"013 c #F9F9F8", +"014 c #FAFAF9", +"015 c #FCFCFB", +"016 c #FDFDFD", +"017 c #FEFEFE", +"018 c gray100", +"019 c black", +"020 c black", +"021 c black", +"022 c black", +"023 c black", +"024 c black", +"025 c black", +"026 c black", +"027 c black", +"028 c black", +"029 c black", +"030 c black", +"031 c black", +"032 c black", +"033 c black", +"034 c black", +"035 c black", +"036 c black", +"037 c black", +"038 c black", +"039 c black", +"040 c black", +"041 c black", +"042 c black", +"043 c black", +"044 c black", +"045 c black", +"046 c black", +"047 c black", +"048 c black", +"049 c black", +"050 c black", +"051 c black", +"052 c black", +"053 c black", +"054 c black", +"055 c black", +"056 c black", +"057 c black", +"058 c black", +"059 c black", +"060 c black", +"061 c black", +"062 c black", +"063 c black", +"064 c black", +"065 c black", +"066 c black", +"067 c black", +"068 c black", +"069 c black", +"070 c black", +"071 c black", +"072 c black", +"073 c black", +"074 c black", +"075 c black", +"076 c black", +"077 c black", +"078 c black", +"079 c black", +"080 c black", +"081 c black", +"082 c black", +"083 c black", +"084 c black", +"085 c black", +"086 c black", +"087 c black", +"088 c black", +"089 c black", +"090 c black", +"091 c black", +"092 c black", +"093 c black", +"094 c black", +"095 c black", +"096 c black", +"097 c black", +"098 c black", +"099 c black", +"100 c black", +"101 c black", +"102 c black", +"103 c black", +"104 c black", +"105 c black", +"106 c black", +"107 c black", +"108 c black", +"109 c black", +"110 c black", +"111 c black", +"112 c black", +"113 c black", +"114 c black", +"115 c black", +"116 c black", +"117 c black", +"118 c black", +"119 c black", +"120 c black", +"121 c black", +"122 c black", +"123 c black", +"124 c black", +"125 c black", +"126 c black", +"127 c black", +"128 c black", +"129 c black", +"130 c black", +"131 c black", +"132 c black", +"133 c black", +"134 c black", +"135 c black", +"136 c black", +"137 c black", +"138 c black", +"139 c black", +"140 c black", +"141 c black", +"142 c black", +"143 c black", +"144 c black", +"145 c black", +"146 c black", +"147 c black", +"148 c black", +"149 c black", +"150 c black", +"151 c black", +"152 c black", +"153 c black", +"154 c black", +"155 c black", +"156 c black", +"157 c black", +"158 c black", +"159 c black", +"160 c black", +"161 c black", +"162 c black", +"163 c black", +"164 c black", +"165 c black", +"166 c black", +"167 c black", +"168 c black", +"169 c black", +"170 c black", +"171 c black", +"172 c black", +"173 c black", +"174 c black", +"175 c black", +"176 c black", +"177 c black", +"178 c black", +"179 c black", +"180 c black", +"181 c black", +"182 c black", +"183 c black", +"184 c black", +"185 c black", +"186 c black", +"187 c black", +"188 c black", +"189 c black", +"190 c black", +"191 c black", +"192 c black", +"193 c black", +"194 c black", +"195 c black", +"196 c black", +"197 c black", +"198 c black", +"199 c black", +"200 c black", +"201 c black", +"202 c black", +"203 c black", +"204 c black", +"205 c black", +"206 c black", +"207 c black", +"208 c black", +"209 c black", +"210 c black", +"211 c black", +"212 c black", +"213 c black", +"214 c black", +"215 c black", +"216 c black", +"217 c black", +"218 c black", +"219 c black", +"220 c black", +"221 c black", +"222 c black", +"223 c black", +"224 c black", +"225 c black", +"226 c black", +"227 c black", +"228 c black", +"229 c black", +"230 c black", +"231 c black", +"232 c black", +"233 c black", +"234 c black", +"235 c black", +"236 c black", +"237 c black", +"238 c black", +"239 c black", +"240 c black", +"241 c black", +"242 c black", +"243 c black", +"244 c black", +"245 c black", +"246 c black", +"247 c black", +"248 c black", +"249 c black", +"250 c black", +"251 c black", +"252 c black", +"253 c black", +"254 c black", +"255 c black", +"000000000000000000000000000000000000000", +"000002002002003004005006007008009010000", +"000002002003004005006007008009010011000", +"000002003004005006007008009001011012000", +"000003004005006007008009001001012013000", +"000004005001007008009001001001013014000", +"000005006001001009001001001013014015000", +"000006007001001001001001013014015016000", +"000007008009001001001013014015016017000", +"000008009010011001013014015016017018000", +"000009010011012013014015016017018018000", +"000010011012013014015016017018018018000", +"000000000000000000000000000000000000000" +}; diff --git a/kernel/src/ThirdParty/wx/treemultictrl/win_tristate_icon.xpm b/kernel/src/ThirdParty/wx/treemultictrl/win_tristate_icon.xpm index 1731cb9..4ed4500 100644 --- a/kernel/src/ThirdParty/wx/treemultictrl/win_tristate_icon.xpm +++ b/kernel/src/ThirdParty/wx/treemultictrl/win_tristate_icon.xpm @@ -1,273 +1,273 @@ -/* XPM */ -static char *tristate_icon[] = { -"13 13 256 3", -"000 c #1C5180", -"001 c #6DBB6C", -"002 c #6EBC6C", -"003 c #6FBD6D", -"004 c #70BE6F", -"005 c #71BF70", -"006 c #72C071", -"007 c #73C172", -"008 c #73C273", -"009 c #74C274", -"010 c #75C374", -"011 c #75C475", -"012 c #76C476", -"013 c #76C576", -"014 c #E2E2DD", -"015 c #E3E3DF", -"016 c #E5E5E1", -"017 c #E7E7E3", -"018 c #EAEAE6", -"019 c #ECECE9", -"020 c #EFEFEC", -"021 c #F1F1EF", -"022 c #F3F3F1", -"023 c #F5F5F3", -"024 c #F7F7F6", -"025 c #F9F9F8", -"026 c #FAFAF9", -"027 c #FCFCFB", -"028 c #FDFDFD", -"029 c #FEFEFE", -"030 c gray100", -"031 c black", -"032 c black", -"033 c black", -"034 c black", -"035 c black", -"036 c black", -"037 c black", -"038 c black", -"039 c black", -"040 c black", -"041 c black", -"042 c black", -"043 c black", -"044 c black", -"045 c black", -"046 c black", -"047 c black", -"048 c black", -"049 c black", -"050 c black", -"051 c black", -"052 c black", -"053 c black", -"054 c black", -"055 c black", -"056 c black", -"057 c black", -"058 c black", -"059 c black", -"060 c black", -"061 c black", -"062 c black", -"063 c black", -"064 c black", -"065 c black", -"066 c black", -"067 c black", -"068 c black", -"069 c black", -"070 c black", -"071 c black", -"072 c black", -"073 c black", -"074 c black", -"075 c black", -"076 c black", -"077 c black", -"078 c black", -"079 c black", -"080 c black", -"081 c black", -"082 c black", -"083 c black", -"084 c black", -"085 c black", -"086 c black", -"087 c black", -"088 c black", -"089 c black", -"090 c black", -"091 c black", -"092 c black", -"093 c black", -"094 c black", -"095 c black", -"096 c black", -"097 c black", -"098 c black", -"099 c black", -"100 c black", -"101 c black", -"102 c black", -"103 c black", -"104 c black", -"105 c black", -"106 c black", -"107 c black", -"108 c black", -"109 c black", -"110 c black", -"111 c black", -"112 c black", -"113 c black", -"114 c black", -"115 c black", -"116 c black", -"117 c black", -"118 c black", -"119 c black", -"120 c black", -"121 c black", -"122 c black", -"123 c black", -"124 c black", -"125 c black", -"126 c black", -"127 c black", -"128 c black", -"129 c black", -"130 c black", -"131 c black", -"132 c black", -"133 c black", -"134 c black", -"135 c black", -"136 c black", -"137 c black", -"138 c black", -"139 c black", -"140 c black", -"141 c black", -"142 c black", -"143 c black", -"144 c black", -"145 c black", -"146 c black", -"147 c black", -"148 c black", -"149 c black", -"150 c black", -"151 c black", -"152 c black", -"153 c black", -"154 c black", -"155 c black", -"156 c black", -"157 c black", -"158 c black", -"159 c black", -"160 c black", -"161 c black", -"162 c black", -"163 c black", -"164 c black", -"165 c black", -"166 c black", -"167 c black", -"168 c black", -"169 c black", -"170 c black", -"171 c black", -"172 c black", -"173 c black", -"174 c black", -"175 c black", -"176 c black", -"177 c black", -"178 c black", -"179 c black", -"180 c black", -"181 c black", -"182 c black", -"183 c black", -"184 c black", -"185 c black", -"186 c black", -"187 c black", -"188 c black", -"189 c black", -"190 c black", -"191 c black", -"192 c black", -"193 c black", -"194 c black", -"195 c black", -"196 c black", -"197 c black", -"198 c black", -"199 c black", -"200 c black", -"201 c black", -"202 c black", -"203 c black", -"204 c black", -"205 c black", -"206 c black", -"207 c black", -"208 c black", -"209 c black", -"210 c black", -"211 c black", -"212 c black", -"213 c black", -"214 c black", -"215 c black", -"216 c black", -"217 c black", -"218 c black", -"219 c black", -"220 c black", -"221 c black", -"222 c black", -"223 c black", -"224 c black", -"225 c black", -"226 c black", -"227 c black", -"228 c black", -"229 c black", -"230 c black", -"231 c black", -"232 c black", -"233 c black", -"234 c black", -"235 c black", -"236 c black", -"237 c black", -"238 c black", -"239 c black", -"240 c black", -"241 c black", -"242 c black", -"243 c black", -"244 c black", -"245 c black", -"246 c black", -"247 c black", -"248 c black", -"249 c black", -"250 c black", -"251 c black", -"252 c black", -"253 c black", -"254 c black", -"255 c black", -"000000000000000000000000000000000000000", -"000014014014015016017018019020021022000", -"000014014015016017018019020021022023000", -"000014015001002003004005006007023024000", -"000015016002003004005006007008024025000", -"000016017003004005006007008009025026000", -"000017018004005006007008009010026027000", -"000018019005006007008009010011027028000", -"000019020006007008009010011012028029000", -"000020021007008009010011012013029030000", -"000021022023024025026027028029030030000", -"000022023024025026027028029030030030000", -"000000000000000000000000000000000000000" -}; +/* XPM */ +static char *tristate_icon[] = { +"13 13 256 3", +"000 c #1C5180", +"001 c #6DBB6C", +"002 c #6EBC6C", +"003 c #6FBD6D", +"004 c #70BE6F", +"005 c #71BF70", +"006 c #72C071", +"007 c #73C172", +"008 c #73C273", +"009 c #74C274", +"010 c #75C374", +"011 c #75C475", +"012 c #76C476", +"013 c #76C576", +"014 c #E2E2DD", +"015 c #E3E3DF", +"016 c #E5E5E1", +"017 c #E7E7E3", +"018 c #EAEAE6", +"019 c #ECECE9", +"020 c #EFEFEC", +"021 c #F1F1EF", +"022 c #F3F3F1", +"023 c #F5F5F3", +"024 c #F7F7F6", +"025 c #F9F9F8", +"026 c #FAFAF9", +"027 c #FCFCFB", +"028 c #FDFDFD", +"029 c #FEFEFE", +"030 c gray100", +"031 c black", +"032 c black", +"033 c black", +"034 c black", +"035 c black", +"036 c black", +"037 c black", +"038 c black", +"039 c black", +"040 c black", +"041 c black", +"042 c black", +"043 c black", +"044 c black", +"045 c black", +"046 c black", +"047 c black", +"048 c black", +"049 c black", +"050 c black", +"051 c black", +"052 c black", +"053 c black", +"054 c black", +"055 c black", +"056 c black", +"057 c black", +"058 c black", +"059 c black", +"060 c black", +"061 c black", +"062 c black", +"063 c black", +"064 c black", +"065 c black", +"066 c black", +"067 c black", +"068 c black", +"069 c black", +"070 c black", +"071 c black", +"072 c black", +"073 c black", +"074 c black", +"075 c black", +"076 c black", +"077 c black", +"078 c black", +"079 c black", +"080 c black", +"081 c black", +"082 c black", +"083 c black", +"084 c black", +"085 c black", +"086 c black", +"087 c black", +"088 c black", +"089 c black", +"090 c black", +"091 c black", +"092 c black", +"093 c black", +"094 c black", +"095 c black", +"096 c black", +"097 c black", +"098 c black", +"099 c black", +"100 c black", +"101 c black", +"102 c black", +"103 c black", +"104 c black", +"105 c black", +"106 c black", +"107 c black", +"108 c black", +"109 c black", +"110 c black", +"111 c black", +"112 c black", +"113 c black", +"114 c black", +"115 c black", +"116 c black", +"117 c black", +"118 c black", +"119 c black", +"120 c black", +"121 c black", +"122 c black", +"123 c black", +"124 c black", +"125 c black", +"126 c black", +"127 c black", +"128 c black", +"129 c black", +"130 c black", +"131 c black", +"132 c black", +"133 c black", +"134 c black", +"135 c black", +"136 c black", +"137 c black", +"138 c black", +"139 c black", +"140 c black", +"141 c black", +"142 c black", +"143 c black", +"144 c black", +"145 c black", +"146 c black", +"147 c black", +"148 c black", +"149 c black", +"150 c black", +"151 c black", +"152 c black", +"153 c black", +"154 c black", +"155 c black", +"156 c black", +"157 c black", +"158 c black", +"159 c black", +"160 c black", +"161 c black", +"162 c black", +"163 c black", +"164 c black", +"165 c black", +"166 c black", +"167 c black", +"168 c black", +"169 c black", +"170 c black", +"171 c black", +"172 c black", +"173 c black", +"174 c black", +"175 c black", +"176 c black", +"177 c black", +"178 c black", +"179 c black", +"180 c black", +"181 c black", +"182 c black", +"183 c black", +"184 c black", +"185 c black", +"186 c black", +"187 c black", +"188 c black", +"189 c black", +"190 c black", +"191 c black", +"192 c black", +"193 c black", +"194 c black", +"195 c black", +"196 c black", +"197 c black", +"198 c black", +"199 c black", +"200 c black", +"201 c black", +"202 c black", +"203 c black", +"204 c black", +"205 c black", +"206 c black", +"207 c black", +"208 c black", +"209 c black", +"210 c black", +"211 c black", +"212 c black", +"213 c black", +"214 c black", +"215 c black", +"216 c black", +"217 c black", +"218 c black", +"219 c black", +"220 c black", +"221 c black", +"222 c black", +"223 c black", +"224 c black", +"225 c black", +"226 c black", +"227 c black", +"228 c black", +"229 c black", +"230 c black", +"231 c black", +"232 c black", +"233 c black", +"234 c black", +"235 c black", +"236 c black", +"237 c black", +"238 c black", +"239 c black", +"240 c black", +"241 c black", +"242 c black", +"243 c black", +"244 c black", +"245 c black", +"246 c black", +"247 c black", +"248 c black", +"249 c black", +"250 c black", +"251 c black", +"252 c black", +"253 c black", +"254 c black", +"255 c black", +"000000000000000000000000000000000000000", +"000014014014015016017018019020021022000", +"000014014015016017018019020021022023000", +"000014015001002003004005006007023024000", +"000015016002003004005006007008024025000", +"000016017003004005006007008009025026000", +"000017018004005006007008009010026027000", +"000018019005006007008009010011027028000", +"000019020006007008009010011012028029000", +"000020021007008009010011012013029030000", +"000021022023024025026027028029030030000", +"000022023024025026027028029030030030000", +"000000000000000000000000000000000000000" +}; diff --git a/kernel/src/ThirdParty/wx/treemultictrl/win_unchecked_icon.xpm b/kernel/src/ThirdParty/wx/treemultictrl/win_unchecked_icon.xpm index 4a61e61..5cf3539 100644 --- a/kernel/src/ThirdParty/wx/treemultictrl/win_unchecked_icon.xpm +++ b/kernel/src/ThirdParty/wx/treemultictrl/win_unchecked_icon.xpm @@ -1,273 +1,273 @@ -/* XPM */ -static char *unchecked_icon[] = { -"13 13 256 3", -"000 c #1C5180", -"001 c #DCDCD7", -"002 c #DEDED9", -"003 c #E0E0DB", -"004 c #E2E2DE", -"005 c #E5E5E2", -"006 c #E8E8E5", -"007 c #ECECE9", -"008 c #EFEFEC", -"009 c #F1F1EF", -"010 c #F3F3F1", -"011 c #F5F5F4", -"012 c #F7F7F6", -"013 c #F9F9F8", -"014 c #FBFBFA", -"015 c #FDFDFC", -"016 c #FEFEFE", -"017 c gray100", -"018 c black", -"019 c black", -"020 c black", -"021 c black", -"022 c black", -"023 c black", -"024 c black", -"025 c black", -"026 c black", -"027 c black", -"028 c black", -"029 c black", -"030 c black", -"031 c black", -"032 c black", -"033 c black", -"034 c black", -"035 c black", -"036 c black", -"037 c black", -"038 c black", -"039 c black", -"040 c black", -"041 c black", -"042 c black", -"043 c black", -"044 c black", -"045 c black", -"046 c black", -"047 c black", -"048 c black", -"049 c black", -"050 c black", -"051 c black", -"052 c black", -"053 c black", -"054 c black", -"055 c black", -"056 c black", -"057 c black", -"058 c black", -"059 c black", -"060 c black", -"061 c black", -"062 c black", -"063 c black", -"064 c black", -"065 c black", -"066 c black", -"067 c black", -"068 c black", -"069 c black", -"070 c black", -"071 c black", -"072 c black", -"073 c black", -"074 c black", -"075 c black", -"076 c black", -"077 c black", -"078 c black", -"079 c black", -"080 c black", -"081 c black", -"082 c black", -"083 c black", -"084 c black", -"085 c black", -"086 c black", -"087 c black", -"088 c black", -"089 c black", -"090 c black", -"091 c black", -"092 c black", -"093 c black", -"094 c black", -"095 c black", -"096 c black", -"097 c black", -"098 c black", -"099 c black", -"100 c black", -"101 c black", -"102 c black", -"103 c black", -"104 c black", -"105 c black", -"106 c black", -"107 c black", -"108 c black", -"109 c black", -"110 c black", -"111 c black", -"112 c black", -"113 c black", -"114 c black", -"115 c black", -"116 c black", -"117 c black", -"118 c black", -"119 c black", -"120 c black", -"121 c black", -"122 c black", -"123 c black", -"124 c black", -"125 c black", -"126 c black", -"127 c black", -"128 c black", -"129 c black", -"130 c black", -"131 c black", -"132 c black", -"133 c black", -"134 c black", -"135 c black", -"136 c black", -"137 c black", -"138 c black", -"139 c black", -"140 c black", -"141 c black", -"142 c black", -"143 c black", -"144 c black", -"145 c black", -"146 c black", -"147 c black", -"148 c black", -"149 c black", -"150 c black", -"151 c black", -"152 c black", -"153 c black", -"154 c black", -"155 c black", -"156 c black", -"157 c black", -"158 c black", -"159 c black", -"160 c black", -"161 c black", -"162 c black", -"163 c black", -"164 c black", -"165 c black", -"166 c black", -"167 c black", -"168 c black", -"169 c black", -"170 c black", -"171 c black", -"172 c black", -"173 c black", -"174 c black", -"175 c black", -"176 c black", -"177 c black", -"178 c black", -"179 c black", -"180 c black", -"181 c black", -"182 c black", -"183 c black", -"184 c black", -"185 c black", -"186 c black", -"187 c black", -"188 c black", -"189 c black", -"190 c black", -"191 c black", -"192 c black", -"193 c black", -"194 c black", -"195 c black", -"196 c black", -"197 c black", -"198 c black", -"199 c black", -"200 c black", -"201 c black", -"202 c black", -"203 c black", -"204 c black", -"205 c black", -"206 c black", -"207 c black", -"208 c black", -"209 c black", -"210 c black", -"211 c black", -"212 c black", -"213 c black", -"214 c black", -"215 c black", -"216 c black", -"217 c black", -"218 c black", -"219 c black", -"220 c black", -"221 c black", -"222 c black", -"223 c black", -"224 c black", -"225 c black", -"226 c black", -"227 c black", -"228 c black", -"229 c black", -"230 c black", -"231 c black", -"232 c black", -"233 c black", -"234 c black", -"235 c black", -"236 c black", -"237 c black", -"238 c black", -"239 c black", -"240 c black", -"241 c black", -"242 c black", -"243 c black", -"244 c black", -"245 c black", -"246 c black", -"247 c black", -"248 c black", -"249 c black", -"250 c black", -"251 c black", -"252 c black", -"253 c black", -"254 c black", -"255 c black", -"000000000000000000000000000000000000000", -"000001001001002003004005006007008009000", -"000001001002003004005006007008009010000", -"000001002003004005006007008009010011000", -"000002003004005006007008009010011012000", -"000003004005006007008009010011012013000", -"000004005006007008009010011012013014000", -"000005006007008009010011012013014015000", -"000006007008009010011012013014015016000", -"000007008009010011012013014015016017000", -"000008009010011012013014015016017017000", -"000009010011012013014015016017017017000", -"000000000000000000000000000000000000000" -}; +/* XPM */ +static char *unchecked_icon[] = { +"13 13 256 3", +"000 c #1C5180", +"001 c #DCDCD7", +"002 c #DEDED9", +"003 c #E0E0DB", +"004 c #E2E2DE", +"005 c #E5E5E2", +"006 c #E8E8E5", +"007 c #ECECE9", +"008 c #EFEFEC", +"009 c #F1F1EF", +"010 c #F3F3F1", +"011 c #F5F5F4", +"012 c #F7F7F6", +"013 c #F9F9F8", +"014 c #FBFBFA", +"015 c #FDFDFC", +"016 c #FEFEFE", +"017 c gray100", +"018 c black", +"019 c black", +"020 c black", +"021 c black", +"022 c black", +"023 c black", +"024 c black", +"025 c black", +"026 c black", +"027 c black", +"028 c black", +"029 c black", +"030 c black", +"031 c black", +"032 c black", +"033 c black", +"034 c black", +"035 c black", +"036 c black", +"037 c black", +"038 c black", +"039 c black", +"040 c black", +"041 c black", +"042 c black", +"043 c black", +"044 c black", +"045 c black", +"046 c black", +"047 c black", +"048 c black", +"049 c black", +"050 c black", +"051 c black", +"052 c black", +"053 c black", +"054 c black", +"055 c black", +"056 c black", +"057 c black", +"058 c black", +"059 c black", +"060 c black", +"061 c black", +"062 c black", +"063 c black", +"064 c black", +"065 c black", +"066 c black", +"067 c black", +"068 c black", +"069 c black", +"070 c black", +"071 c black", +"072 c black", +"073 c black", +"074 c black", +"075 c black", +"076 c black", +"077 c black", +"078 c black", +"079 c black", +"080 c black", +"081 c black", +"082 c black", +"083 c black", +"084 c black", +"085 c black", +"086 c black", +"087 c black", +"088 c black", +"089 c black", +"090 c black", +"091 c black", +"092 c black", +"093 c black", +"094 c black", +"095 c black", +"096 c black", +"097 c black", +"098 c black", +"099 c black", +"100 c black", +"101 c black", +"102 c black", +"103 c black", +"104 c black", +"105 c black", +"106 c black", +"107 c black", +"108 c black", +"109 c black", +"110 c black", +"111 c black", +"112 c black", +"113 c black", +"114 c black", +"115 c black", +"116 c black", +"117 c black", +"118 c black", +"119 c black", +"120 c black", +"121 c black", +"122 c black", +"123 c black", +"124 c black", +"125 c black", +"126 c black", +"127 c black", +"128 c black", +"129 c black", +"130 c black", +"131 c black", +"132 c black", +"133 c black", +"134 c black", +"135 c black", +"136 c black", +"137 c black", +"138 c black", +"139 c black", +"140 c black", +"141 c black", +"142 c black", +"143 c black", +"144 c black", +"145 c black", +"146 c black", +"147 c black", +"148 c black", +"149 c black", +"150 c black", +"151 c black", +"152 c black", +"153 c black", +"154 c black", +"155 c black", +"156 c black", +"157 c black", +"158 c black", +"159 c black", +"160 c black", +"161 c black", +"162 c black", +"163 c black", +"164 c black", +"165 c black", +"166 c black", +"167 c black", +"168 c black", +"169 c black", +"170 c black", +"171 c black", +"172 c black", +"173 c black", +"174 c black", +"175 c black", +"176 c black", +"177 c black", +"178 c black", +"179 c black", +"180 c black", +"181 c black", +"182 c black", +"183 c black", +"184 c black", +"185 c black", +"186 c black", +"187 c black", +"188 c black", +"189 c black", +"190 c black", +"191 c black", +"192 c black", +"193 c black", +"194 c black", +"195 c black", +"196 c black", +"197 c black", +"198 c black", +"199 c black", +"200 c black", +"201 c black", +"202 c black", +"203 c black", +"204 c black", +"205 c black", +"206 c black", +"207 c black", +"208 c black", +"209 c black", +"210 c black", +"211 c black", +"212 c black", +"213 c black", +"214 c black", +"215 c black", +"216 c black", +"217 c black", +"218 c black", +"219 c black", +"220 c black", +"221 c black", +"222 c black", +"223 c black", +"224 c black", +"225 c black", +"226 c black", +"227 c black", +"228 c black", +"229 c black", +"230 c black", +"231 c black", +"232 c black", +"233 c black", +"234 c black", +"235 c black", +"236 c black", +"237 c black", +"238 c black", +"239 c black", +"240 c black", +"241 c black", +"242 c black", +"243 c black", +"244 c black", +"245 c black", +"246 c black", +"247 c black", +"248 c black", +"249 c black", +"250 c black", +"251 c black", +"252 c black", +"253 c black", +"254 c black", +"255 c black", +"000000000000000000000000000000000000000", +"000001001001002003004005006007008009000", +"000001001002003004005006007008009010000", +"000001002003004005006007008009010011000", +"000002003004005006007008009010011012000", +"000003004005006007008009010011012013000", +"000004005006007008009010011012013014000", +"000005006007008009010011012013014015000", +"000006007008009010011012013014015016000", +"000007008009010011012013014015016017000", +"000008009010011012013014015016017017000", +"000009010011012013014015016017017017000", +"000000000000000000000000000000000000000" +}; diff --git a/kernel/src/ThirdParty/wx/treemultictrl/wxTreeMultiCtrl.cpp b/kernel/src/ThirdParty/wx/treemultictrl/wxTreeMultiCtrl.cpp index 00cb190..6a5c157 100644 --- a/kernel/src/ThirdParty/wx/treemultictrl/wxTreeMultiCtrl.cpp +++ b/kernel/src/ThirdParty/wx/treemultictrl/wxTreeMultiCtrl.cpp @@ -1,1985 +1,1985 @@ -//--------------------------------------------------------------------------- -// $RCSfile: wxTreeMultiCtrl.cpp,v $ -// $Source: /cvs/creatis/bbtk/kernel/src/ThirdParty/wx/treemultictrl/wxTreeMultiCtrl.cpp,v $ -// $Revision: 1.1 $ -// $Date: 2008/03/28 13:42:19 $ -//--------------------------------------------------------------------------- -// Author: Jorgen Bodde -// Copyright: (c) Jorgen Bodde -// License: wxWidgets License -//--------------------------------------------------------------------------- - -#ifdef __GNUG__ - #pragma implementation "wxTreeMultiCtrl.h" -#endif - -// For compilers that support precompilation, includes "wx/wx.h". -#include "wx/wxprec.h" -#include "wx/treebase.h" - -#ifdef __BORLANDC__ - #pragma hdrstop -#endif - -#include "wx/arrimpl.cpp" - -#include "wx/treemultictrl/wxTreeMultiCtrl.h" -#include "wx/treemultictrl/wxTreeMultiEvent.h" -#include "tmcimages.h" - - - -//---------------------------------------------------------------------------- -// wxTreeMultiItem -//---------------------------------------------------------------------------- - -WX_DEFINE_OBJARRAY(wxArrayTreeMultiItem); - -//---------------------------------------------------------------------------- -// wxTreeMultiCtrl -//---------------------------------------------------------------------------- - -IMPLEMENT_DYNAMIC_CLASS(wxTreeMultiCtrl, wxScrolledWindow) - -// WDR: event table for wxTreeMultiCtrl -BEGIN_EVENT_TABLE(wxTreeMultiCtrl, wxScrolledWindow) - EVT_LEFT_DOWN (wxTreeMultiCtrl::OnMouseClick) - EVT_LEFT_DCLICK(wxTreeMultiCtrl::OnMouseClick) - EVT_RIGHT_DOWN (wxTreeMultiCtrl::OnRightMouseClick) - EVT_PAINT(wxTreeMultiCtrl::OnPaint) - EVT_SIZE(wxTreeMultiCtrl::OnSize) -// EVT_KEY_UP(wxTreeMultiCtrl::OnKey) -END_EVENT_TABLE() - -bool wxTreeMultiCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, - const wxSize& size, long style, const wxValidator & WXUNUSED(validator), - const wxString& name ) -{ - wxScrolledWindow::Create( parent, id, pos, size, style | wxTAB_TRAVERSAL, name); - - _create_called = true; - - // do the init - Init(); - - return TRUE; -} - -void wxTreeMultiCtrl::Init() -{ - _root.Clear(); - - _expandBmp = 0; - _collBmp = 0; - -#if(CHECKBOXVIEW) - _checkBmp = 0; - _uncheckBmp = 0; - _tristateBmp = 0; - - _checkHeight = 11; - _checkWidth = 11; - - _checkboxView = false; -#endif - - _gutterWidth = WXTMC_GUTTER_DEFAULT; - _iconWidth = 11; - _iconHeight = 11; - _maxHeight = 1;; - _iconDeltaY = 2; - _spacingY = WXTMC_YSPACING_DEFAULT; - _captionHeight = 13; - - // create two bitmap nodes for drawing - - _expandBmp = new wxBitmap(expand_xpm); - _collBmp = new wxBitmap(collapse_xpm); - - // calculate average font height for bitmap centering - - _iconWidth = _expandBmp->GetWidth(); - _iconHeight = _expandBmp->GetHeight(); - -#if(CHECKBOXVIEW) - // create bitmaps for checkboxes - _checkBmp = new wxBitmap(checked_icon); - _uncheckBmp = new wxBitmap(unchecked_icon); - _tristateBmp = new wxBitmap(tristate_icon); - - // adjust the height if the checkboxes are higher - // so that everything is alligned properly - _checkHeight = _checkBmp->GetHeight(); - _checkWidth = _checkBmp->GetWidth(); -#endif - - // remember the highest of the two bitmaps so there is - // always enough room - _maxHeight = _iconHeight; - -#if(CHECKBOXVIEW) - if(_maxHeight < _checkHeight) - _maxHeight = _checkHeight; -#endif - - // set standard highlighting brush - this->m_HilightBrush = new wxBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT),wxSOLID); - - // set standard DC font - _captionFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); - - // adjust bitmap icon y position so they are centered - AdjustIconsDeltaY(); - - // set virtual size to this window size - if (_create_called) { - wxSize wndsize = GetSize(); - SetVirtualSize(wndsize.GetWidth(), wndsize.GetWidth()); - } -} - -void wxTreeMultiCtrl::SetCaptionFont(const wxFont &font) -{ - _captionFont = font; - - // adjust the icons so that they are in the middle - AdjustIconsDeltaY(); - - RedrawFromNode(0); -}; - -void wxTreeMultiCtrl::AdjustIconsDeltaY() -{ - int x = 0, y = 0; - - if(_captionFont.Ok()) - GetTextExtent(wxT("jG"), &x, &y, 0, 0, &_captionFont); - _captionHeight = y; - - if(_maxHeight < _captionHeight) - _maxHeight = _captionHeight; - - // determine the center pos for the [+] - _iconDeltaY = abs(_maxHeight - _iconHeight) / 2 + 1; - if(_iconDeltaY < 1) - _iconDeltaY = 1; - -#if(CHECKBOXVIEW) - // determine the center pos for the checkbox - _checkDeltaY = abs(_maxHeight - _checkHeight) / 2 + 1; - if(_checkDeltaY < 1) - _checkDeltaY = 1; -#endif -} - -wxTreeMultiCtrl::~wxTreeMultiCtrl() -{ - // delete the bitmap resources - delete _expandBmp; - delete _collBmp; - -#if(CHECKBOXVIEW) - delete _checkBmp; - delete _uncheckBmp; - delete _tristateBmp; -#endif -} - -wxTreeMultiItem wxTreeMultiCtrl::AddRoot(const wxString &caption, const wxString &name) -{ - wxTreeMultiItem result((TreeMultiItemBase *)&_root); - result = AppendNode(result, caption, name); - - return result; -} - -wxTreeMultiItem wxTreeMultiCtrl::AppendWindow(const wxTreeMultiItem &ParentItem, wxWindow *window, const wxString &name, const wxTreeMultiWindowInfo &info, int flags) -{ - // add window only if the parent item is valid and... - wxCHECK(ParentItem.IsOk(), wxTreeMultiItem(0)); - - TreeMultiItemNode* parent = ParentItem.GetItem()->IsTreeMultiItemNode(); // also roots are nodes - - // ... is a node - wxCHECK(parent != NULL, wxTreeMultiItem(0)); - - // now, append node to the tree control: - wxTreeMultiItem NewWindowItem(this->InsertWindow(parent,wx_static_cast(size_t,parent->GetNodeCount()),window,name,info,flags)); - // redraw the stucture: - this->RedrawFromNode(parent); - // return the new window - return NewWindowItem; -} - -wxTreeMultiItem wxTreeMultiCtrl::InsertWindow(wxTreeMultiItem const& ParentItem, size_t Position, wxWindow *window, wxString const& name, wxTreeMultiWindowInfo const& info, int flags) -{ - // add window only if the parent item is valid and... - wxCHECK(ParentItem.IsOk(), wxTreeMultiItem(0)); - - TreeMultiItemNode* parent = ParentItem.GetItem()->IsTreeMultiItemNode(); // also roots are nodes - - // ... is a node - wxCHECK(parent != NULL, wxTreeMultiItem(0)); - - // now, append node to the tree control: - wxTreeMultiItem NewWindowItem(this->InsertWindow(parent,Position,window,name,info,flags)); - // redraw the stucture: - this->RedrawFromNode(parent); - // return the new window - return NewWindowItem; -} /* wxTreeMultiCtrl::InsertWindow(wxTreeMultiItem const&, size_t, wxWindow*, wxString const&, wxTreeMultiWindowInfo const&, int) */ - -wxTreeMultiItem wxTreeMultiCtrl::PrependWindow(wxTreeMultiItem const& ParentItem, wxWindow *window, const wxString &name, wxTreeMultiWindowInfo const& info, int flags) -{ - // add window only if the parent item is valid and... - wxCHECK(ParentItem.IsOk(), wxTreeMultiItem(0)); - - TreeMultiItemNode* parent = ParentItem.GetItem()->IsTreeMultiItemNode(); // also roots are nodes - - // ... is a node - wxCHECK(parent != NULL, wxTreeMultiItem(0)); - - // now, append node to the tree control: - wxTreeMultiItem NewWindowItem(this->InsertWindow(parent,0,window,name,info,flags)); - // redraw the stucture: - this->RedrawFromNode(parent); - // return the new window - return NewWindowItem; -} /* wxTreeMultiCtrl::PrependWindow(wxTreeMultiItem const&, wxWindow*, const wxString &, wxTreeMultiWindowInfo const&, int) */ - -wxTreeMultiItem wxTreeMultiCtrl::AppendNode(wxTreeMultiItem const& ParentItem, const wxString &caption, const wxString &name) -{ - // add window only if the parent item is valid and... - wxCHECK(ParentItem.IsOk(), wxTreeMultiItem(0)); - - TreeMultiItemNode* parent = ParentItem.GetItem()->IsTreeMultiItemNode(); // also roots are nodes - - // ... is a node - wxCHECK(parent != NULL, wxTreeMultiItem(0)); - - // now, append node to the tree control: - wxTreeMultiItem NewNodeItem(this->InsertNode(parent,wx_static_cast(size_t,parent->GetNodeCount()),caption,name)); - // redraw the structure: - this->RedrawFromNode(parent); - // return the new node: - return NewNodeItem; -} /* wxTreeMultiCtrl::AppendNode(wxTreeMultiItem const&, const wxString &, const wxString&) */ - -wxTreeMultiItem wxTreeMultiCtrl::InsertNode(wxTreeMultiItem const& ParentItem, size_t Position, wxString const& caption, wxString const& name) -{ - // add window only if the parent item is valid and... - wxCHECK(ParentItem.IsOk(), wxTreeMultiItem(0)); - - TreeMultiItemNode* parent = ParentItem.GetItem()->IsTreeMultiItemNode(); // also roots are nodes - - // ... is a node - wxCHECK(parent != NULL, wxTreeMultiItem(0)); - - // now, append node to the tree control: - wxTreeMultiItem NewNodeItem(this->InsertNode(parent,Position,caption,name)); - // redraw the structure: - this->RedrawFromNode(parent); - // return the new node: - return NewNodeItem; -} /* wxTreeMultiCtrl::InsertNode(wxTreeMultiItem const&, size_t, wxString const&, wxString const&) */ - -wxTreeMultiItem wxTreeMultiCtrl::PrependNode(wxTreeMultiItem const& ParentItem, wxString const& caption, wxString const& name) -{ - // add window only if the parent item is valid and... - wxCHECK(ParentItem.IsOk(), wxTreeMultiItem(0)); - - TreeMultiItemNode* parent = ParentItem.GetItem()->IsTreeMultiItemNode(); // also roots are nodes - - // ... is a node - wxCHECK(parent != NULL, wxTreeMultiItem(0)); - - // now, append node to the tree control: - wxTreeMultiItem NewNodeItem(this->InsertNode(parent,0,caption,name)); - // redraw the structure: - this->RedrawFromNode(parent); - // return the new node: - return NewNodeItem; -} /* wxTreeMultiCtrl::PrependNode(wxTreeMultiItem const&, wxString const&, wxString const&) */ - -bool wxTreeMultiCtrl::Delete(wxTreeMultiItem &item) -{ - bool redraw = true; - wxCHECK(item.IsOk(), false); - - wxTreeMultiItem nullItem(0); - - - // if item has been selected, remove it from the selected list: - size_t ItemIndex(this->GetSelectedItemIndex(item)); - - if (ItemIndex != this->GetSelectedItemCount()) - this->m_SelectedItems.RemoveAt(ItemIndex); - - // get parent, to delete item from - TreeMultiItemNode *p = item.GetItem()->GetParent(); - - // first check if it was visible, if so from the parent off - // it needs redrawing - redraw = item.GetItem()->IsVisible(); - if(p) - p->DeleteNode(item.GetItem()); - else - _root.DeleteNode(item.GetItem()); - - item = nullItem; - - // do redraw when node was visible - if(redraw) - RedrawFromNode(p); - - return true; -} - -void wxTreeMultiCtrl::DeleteChildren(const wxTreeMultiItem &item) -{ - if(item.IsNodeItem()) - { - TreeMultiItemNode *n = (TreeMultiItemNode *)item.GetItem(); - - // remove all children from the selected item list: - if (n->GetNodeCount() > 0) - { - // variable definitions and initializations: - int Cookie; - wxTreeMultiItem FirstItemIterator(this->GetFirstChild(item,Cookie)), LastItemIterator(this->GetLastChild(item)); - - for (;;) - { - size_t ItemIndex(this->GetSelectedItemIndex(item)); // variable definition and initialization - - if (ItemIndex != this->GetSelectedItemCount()) - this->m_SelectedItems.RemoveAt(ItemIndex); - if (FirstItemIterator == LastItemIterator) - break; // all children checked - else - FirstItemIterator = this->GetNext(FirstItemIterator); - } /* for */ - } /* if */ - // delete children: - n->Clear(); - // redraw: - RedrawFromNode(n); - } -} - -void wxTreeMultiCtrl::Expand(const wxTreeMultiItem &item, bool recursive) -{ - if(item.IsOk()) - { - TreeMultiItemNode *n = item.GetItem()->IsTreeMultiItemNode(); - if(!n) - n = item.GetItem()->GetParent(); - DoFold(n, true, recursive); - RedrawFromNode(item.GetItem()->IsTreeMultiItemNode()); - } -} - -void wxTreeMultiCtrl::Collapse(const wxTreeMultiItem &item, bool recursive) -{ - if(item.IsOk()) - { - TreeMultiItemNode *n = item.GetItem()->IsTreeMultiItemNode(); - if(!n) - n = item.GetItem()->GetParent(); - DoFold(n, false, recursive); - RedrawFromNode(item.GetItem()->IsTreeMultiItemNode()); - } -} - - -void wxTreeMultiCtrl::ExpandNodes(bool recursive) -{ - // go through all children and call DoFold recursively - for(int i = 0; i < _root.GetNodeCount(); i++) - DoFold(_root.GetNode(i), true, recursive); - RedrawFromNode(0); -} - -void wxTreeMultiCtrl::CollapseNodes(bool recursive) -{ - // go through all children and call DoFold recursively - for(int i = 0; i < _root.GetNodeCount(); i++) - DoFold(_root.GetNode(i), false, recursive); - RedrawFromNode(0); -} - -void wxTreeMultiCtrl::CollapseAndReset(const wxTreeMultiItem &item) -{ - if(item.IsNodeItem()) - { - TreeMultiItemNode *n = (TreeMultiItemNode *)item.GetItem(); - - // delete all kids - n->Clear(); - Collapse(item, false); - } -} - -// Selection manipulation -wxTreeMultiItem wxTreeMultiCtrl::GetFirstSelectedItem(void) const -{ - if (this->GetSelectedItemCount() > 0) - return this->m_SelectedItems[0]; - else - return wxTreeMultiItem(); -} /* wxTreeMultiCtrl::GetFirstSelectedItem(void) const */ - -wxTreeMultiItem wxTreeMultiCtrl::GetLastSelectedItem(void) const -{ - if (this->GetSelectedItemCount() > 0) - return this->m_SelectedItems[this->GetSelectedItemCount()-1]; - else - return wxTreeMultiItem(); -} /* wxTreeMultiCtrl::GetLastSelectedItem(void) const */ - -wxTreeMultiItem wxTreeMultiCtrl::GetSelectedItem(size_t Index) const -{ - if (Index < this->GetSelectedItemCount()) - return this->m_SelectedItems[Index]; - else - return wxTreeMultiItem(); -} /* wxTreeMultiCtrl::GetSelectedItem(size_t Index) const */ - -size_t wxTreeMultiCtrl::GetSelectedItemIndex(wxTreeMultiItem const& Item) const -{ - // attention: the function wxArray::Index() can NOT be used in a save manner as it only checks the address of an item - // element but it is not guaranteed that Item may not be a copy of the originally inserted item - const size_t NoOfSelectedItems = this->GetSelectedItemCount(); - - size_t Index(0); - - - while ((Index < NoOfSelectedItems) && (this->m_SelectedItems[Index] != Item)) - ++Index; - return Index; -} /* wxTreeMultiCtrl::GetSelectedItemIndex(wxTreeMultiItem const&) const */ - -void wxTreeMultiCtrl::SelectItem(wxTreeMultiItem const& Item, bool UnselectOthers, bool ExpandSelection) -{ - TreeMultiItemNode* NodePtr(Item.GetItem()->IsTreeMultiItemNode()); - - - // only nodes can be selected and they can only be selected if they are not already selected: - if ((NodePtr == NULL) || NodePtr->IsSelected()) - return; - - // inform that we are about to change: - wxTreeMultiEvent Event(wxEVT_COMMAND_TREE_MULTI_SEL_CHANGING,Item); // variable definition and initialization - - if (this->m_SelectedItems.GetCount() > 0) // the last item in the array is always the latest inserted item - Event.SetOldItem(this->m_SelectedItems.Last()); - Event.SetEventObject(this); - if (this->GetEventHandler()->ProcessEvent(Event) && !(Event.IsAllowed())) - return; // vetoed - - // make sure that the to be selected item can be seen: - this->Include(Item); - - // variable definition and initialization: - wxTreeMultiItem ExcludedParent(this->GetExcludedParent(Item)); - - while (ExcludedParent.IsOk()) - { - this->Include(ExcludedParent); - ExcludedParent = this->GetExcludedParent(Item); - } /* while */ - - // unselect items if necessary: - if (UnselectOthers) - this->UnselectAll(); - // expand selection if necessary: - if (ExpandSelection) - { - // variable definition: - wxTreeMultiItem FirstItemIterator, LastItemIterator; - wxTreeMultiItem LastSelectedItem; - - // determine the last selected item or the first item in case nothing has been selected before: - if (this->m_SelectedItems.GetCount() > 0) - LastSelectedItem = this->m_SelectedItems.Last(); - else - LastSelectedItem = this->GetFirstRoot(); - // determine the item from which to start and the one with which to end the selection: - if (Item.GetItem()->GetY() > LastSelectedItem.GetItem()->GetY()) - { - FirstItemIterator = LastSelectedItem; - LastItemIterator = Item; - } /* if */ - else - { - FirstItemIterator = Item; - LastItemIterator = LastSelectedItem; - } /* if */ - // select all items that are a node and are placed between the two limiting iterators (included the limits): - for (;;) - { - if (!(FirstItemIterator.IsSelected()) && FirstItemIterator.IsNodeItem()) - { - FirstItemIterator.GetItem()->Select(); - this->m_SelectedItems.Add(FirstItemIterator); - this->RefreshRect(wxRect(FirstItemIterator.GetItem()->GetX(), FirstItemIterator.GetItem()->GetY(), - FirstItemIterator.GetItem()->GetWidth(),FirstItemIterator.GetItem()->GetHeight())); - } /* if */ - if (FirstItemIterator == LastItemIterator) - break; // done - // continue iterating: - FirstItemIterator = this->GetNext(FirstItemIterator); - } /* for */ - } /* if */ - else // select passed item only - { - NodePtr->Select(); - this->m_SelectedItems.Add(NodePtr); - this->RefreshRect(wxRect(NodePtr->GetX(),NodePtr->GetY(),NodePtr->GetWidth(),NodePtr->GetHeight())); - } /* if */ - - // inform that we have selected the item: - Event.SetEventType(wxEVT_COMMAND_TREE_MULTI_SEL_CHANGED); - this->GetEventHandler()->ProcessEvent(Event); -} /* wxTreeMultiCtrl::SelectItem(wxTreeMultiItem const&, bool, bool) */ - -void wxTreeMultiCtrl::UnselectAll(void) -{ - const size_t NoOfSelectedItems = this->m_SelectedItems.GetCount(); - - - for (size_t i=0; iRefreshRect(wxRect(this->m_SelectedItems[i].GetItem()->GetX(), this->m_SelectedItems[i].GetItem()->GetY(), - this->m_SelectedItems[i].GetItem()->GetWidth(),this->m_SelectedItems[i].GetItem()->GetHeight())); - this->m_SelectedItems[i].GetItem()->Unselect(); - } /* for */ - this->m_SelectedItems.Clear(); -} /* wxTreeMultiCtrl::UnselectAll(void) */ - -void wxTreeMultiCtrl::Unselect(wxTreeMultiItem const& Item) -{ - size_t ItemIndex(this->GetSelectedItemIndex(Item)); - - - if (ItemIndex != this->GetSelectedItemCount()) - { - Item.GetItem()->Unselect(); - this->m_SelectedItems.RemoveAt(ItemIndex); - this->RefreshRect(wxRect(Item.GetItem()->GetX(),Item.GetItem()->GetY(),Item.GetItem()->GetWidth(),Item.GetItem()->GetHeight())); - } /* if */ -} /* wxTreeMultiCtrl::Unselect(wxTreeMultiItem const&) */ - -void wxTreeMultiCtrl::DoFold(TreeMultiItemBase *item, bool expand, bool recursive) -{ - - // go through all node objects on this level, and expand or - // collapse them - - if(item == 0) - return; - - // if this is a node, use it to go through all the subnodes (if needed) - // if not, then just exit. - - TreeMultiItemNode *node = item->IsTreeMultiItemNode(); - if(node) - { - node->Fold(expand); - - // go recursive - if(recursive) - { - TreeMultiItemNode *p; - for(int i = 0; i < node->GetNodeCount(); i++) - { - // get node, and if a real node, then call fold - p = node->GetNode(i)->IsTreeMultiItemNode(); - if(p) - p->Fold(expand); - - // go recursive for every node - DoFold(p, expand, recursive); - } - } - } -} - -void wxTreeMultiCtrl::Exclude(const wxTreeMultiItem &item) -{ - wxCHECK2(item.IsOk(), return); - - // exclude the item, and refresh - // if already excluded, skip - - if(!item.GetItem()->IsExcluded()) - { - item.GetItem()->SetExcluded(true); - RedrawFromParentNode(item.GetItem()); - } -} - -void wxTreeMultiCtrl::Include(const wxTreeMultiItem &item) -{ - wxCHECK2(item.IsOk(), return); - - // include the item, and refresh. If not - // excluded, do nothing - - if(item.GetItem()->IsExcluded()) - { - item.GetItem()->SetExcluded(false); - RedrawFromParentNode(item.GetItem()); - } -} - -wxTreeMultiItem wxTreeMultiCtrl::GetExcludedParent(const wxTreeMultiItem &item) -{ - wxCHECK(item.IsOk(), wxTreeMultiItem(0)); - - // go find the parent (including this one) that - // can be the excluded one - - TreeMultiItemNode *n = item.GetItem()->IsTreeMultiItemNode(); - if(n && n->IsExcluded()) - return wxTreeMultiItem(n); - - n = item.GetItem()->GetParent(); - while(n) - { - if(n->IsExcluded()) - return wxTreeMultiItem(n); - else - n = n->GetParent(); - } - - return wxTreeMultiItem(0); -} - -void wxTreeMultiCtrl::OnSize(wxSizeEvent &WXUNUSED(event)) -{ - RecalculateSpanSizes(); -} - -void wxTreeMultiCtrl::OnPaint(wxPaintEvent& WXUNUSED(event) ) -{ - wxPaintDC dc(this); - - PrepareDC(dc); - - // go recursive and draw the whole visible tree. - dc.SetFont(_captionFont); - for(int i = 0; i < _root.GetNodeCount(); i++) - DrawNode(_root.GetNode(i), dc); -} - -void wxTreeMultiCtrl::DrawNode(TreeMultiItemBase *b, wxDC &dc) -{ - // go through this item .. if it is a node, draw - // the caption, else reposition the window. - - if(!b) - return; - - // forget it if this node is not visible - if(b->IsVisible()) - { - int bmpOffsetX = b->GetX() - (_gutterWidth + _iconWidth); - -#if(CHECKBOXVIEW) - // now draw the checkbox if there is any, in the proper state - if(b->GetCheckbox()) - { - DrawCheckbox(b, dc); - - // adjust the bmpOffset because we also have a checkbox - bmpOffsetX -= _checkWidth; - } -#endif - - if(b->IsTreeMultiItemNode()) - { - // draw the node icon and the caption - TreeMultiItemNode *n = (TreeMultiItemNode *)b; - - // set background of caption item - if (n->IsSelected()) - { - dc.SetBrush(*(this->m_HilightBrush)); - dc.SetPen(wxPen(this->m_HilightBrush->GetColour(),1,wxSOLID)); - } /* if */ - else - { - dc.SetBrush(wxBrush(*wxWHITE,wxSOLID)); - dc.SetPen(wxPen(*wxWHITE,1,wxSOLID)); - } /* if */ - dc.DrawRectangle(n->GetX(),n->GetY(),n->GetWidth(),n->GetHeight()); - // draw caption - dc.DrawText(n->GetCaption(), n->GetX(), n->GetY()); - - // draw the bitmap for the state - if(n->IsExpanded()) - dc.DrawBitmap(*_expandBmp, bmpOffsetX, n->GetY() + _iconDeltaY, true); - else - dc.DrawBitmap(*_collBmp, bmpOffsetX, n->GetY() + _iconDeltaY, true); - - // now go through all the subnodes - for(int i = 0; i < n->GetNodeCount(); i++) - DrawNode(n->GetNode(i), dc); - - } - } -} - -#if(CHECKBOXVIEW) - -void wxTreeMultiCtrl::DrawCheckbox(TreeMultiItemBase *b, wxDC &dc, bool convertScrolled) -{ - wxCHECK2(b, return); - - wxBitmap *bmp; - int bmpOffsetX = b->GetX() - (_gutterWidth + _iconWidth); - - switch(b->GetCheckboxState()) - { - case 0: - bmp = _uncheckBmp; - break; - case 1: - bmp = _checkBmp; - break; - default: - bmp = _tristateBmp; - break; - } - - int x, xx, y, yy; - - if(b->IsTreeMultiItemWindow()) - { - xx = x = bmpOffsetX - ((TreeMultiItemWindow *)b)->GetFrontSpacing() + _checkWidth; - yy = y = b->GetY() + _checkDeltaY; - } - else - { - xx = x = bmpOffsetX; - yy = y = b->GetY() + _checkDeltaY; - } - - if(convertScrolled) - CalcScrolledPosition(x, y, &xx, &yy); - - dc.DrawBitmap(*bmp, xx, yy, true); -} - -#endif // #if(CHECKBOXVIEW) - -void wxTreeMultiCtrl::OnKey(wxKeyEvent &event) -{ - // check if we need to traverse to upper or lower - // control in the list - if(event.GetKeyCode() == WXK_TAB) - { - wxTreeMultiItem item = GetFocus(); - if(item.IsOk()) - { - // traverse down direction - if(!event.ShiftDown()) - item = FindNextVisibleWindowItem(item.GetItem()); - //else // traverse in up direction - // item = FindPreviousVisibleWindowItem(item); - - if(item.IsOk()) - { - TreeMultiItemWindow *w = item.GetItem()->IsTreeMultiItemWindow(); - if(w) - { - wxWindow *wnd = w->GetWindow(); - wnd->SetFocus(); - } - } - } - } - else - event.Skip(); -} - -void wxTreeMultiCtrl::OnMouseClick( wxMouseEvent &event ) -{ - // react on double click and left mouse down - if(event.LeftDown() || event.LeftDClick()) - { - // get translation point - wxPoint pt( event.GetPosition() ); - - int x = 0, y = 0; - CalcUnscrolledPosition( pt.x, pt.y, &x, &y ); - - // go check if we clicked a treenode - int flags; - wxPoint p(x,y); - wxTreeMultiItem id = HitTest(p, flags); - -#if(CHECKBOXVIEW) - if(flags == wxTMC_HITTEST_CHECKBOX) - { - // toggle the checkbox, and redraw - if(id.IsOk()) - { - TreeMultiItemBase *b = id.GetItem(); - b->SetCheckboxState((b->GetCheckboxState()+1) & 0x1); - - TreeMultiItemWindow *w = b->IsTreeMultiItemWindow(); - if(w) - { - // try to force a focus on the window. This could - // be extended by searching for the first edit control - // class but for now, just a focus is tried. - w->GetWindow()->Enable(b->GetCheckboxState() == 1); - w->GetWindow()->SetFocus(); - - // draw the checkbox in the state needed - wxClientDC dc(this); - DrawCheckbox(b, dc, true); - - // TODO: determine if the upper parents should be - // tristated or not - - ScanTristateCheckstates(b); - - } - else if(b->IsTreeMultiItemNode()) - { - // descend to all the children and set the state of the parent - SetRecursiveCheckState((TreeMultiItemNode *)b, b->GetCheckboxState() == 1); - RedrawFromNode((TreeMultiItemNode *)b); - } - } - } - else -#endif // #if(CHECKBOXVIEW) - { - // react on left mouse button, to fold and on - // right for caption doubleclick - int area = -1; - -// adjust behaviour for Linux (single click = always fold) -#ifndef LINUX - if(event.LeftDClick()) - area = wxTMC_HITTEST_CAPTION; - else - area = wxTMC_HITTEST_GUTTER; -#else - area = flags; -#endif - -// Linux (single or double click -> always fold - if (id.IsOk()) - { -#ifdef LINUX - // we have a valid item, if it is a node, then fold - TreeMultiItemNode *n = id.GetItem()->IsTreeMultiItemNode(); - if(n) - { - this->SelectItem(id); - Fold(n, !n->IsExpanded()); - } /* if */ -#else - if (event.LeftDown()) - if (flags == wxTMC_HITTEST_GUTTER) - { - TreeMultiItemNode *n = id.GetItem()->IsTreeMultiItemNode(); // for some reasons also windows may have set the flag - - if (n != NULL) - Fold(n, !n->IsExpanded()); - } /* if */ - else if (flags == wxTMC_HITTEST_CAPTION) - { - TreeMultiItemNode *n = id.GetItem()->IsTreeMultiItemNode(); // for some reasons also windows may have set the flag - - if (n != NULL) - { - this->SelectItem(id); - this->RedrawFromNode(n); - } /* if */ - } /* if */ -#endif - } /* if */ - else - this->UnselectAll(); - } - } -} - -void wxTreeMultiCtrl::OnRightMouseClick(wxMouseEvent& Event) -{ - if (Event.RightDown()) - if (Event.Dragging()) - this->UnselectAll(); - else - { - // variable definitions: - int Flags; - wxPoint Point; - - // translate mouse coordinates: - CalcUnscrolledPosition(Event.GetPosition().x,Event.GetPosition().y,&(Point.x),&(Point.y)); - // check if the mouse is above the caption of an item: - wxTreeMultiItem Item(this->HitTest(Point,Flags)); // variable definition and initialization - - if (Item.IsOk() && (Flags == wxTMC_HITTEST_CAPTION)) - { - this->SelectItem(Item); - this->RedrawFromNode(Item.GetItem()->IsTreeMultiItemNode()); - Event.Skip(); // window will convert right mouse click to a context menu event or proceed with - // a right mouse click event if the context menu event cannot be processed - } /* if */ - else - this->UnselectAll(); - } /* if */ - else - this->UnselectAll(); -} /* wxTreeMultiCtrl::OnRightMouseClick(wxMouseEvent&) */ - -wxTreeMultiItem wxTreeMultiCtrl::HitTest(wxPoint const& pt, int &flags) -{ - // scan all nodes to see which one matches - TreeMultiItemBase *b = 0; - for(int i = 0; i < _root.GetNodeCount() && !b; i++) - b = FindNodeByPoint(_root.GetNode(i), pt, flags); - - if(!b) - { - // none found, reset - flags = 0; - return wxTreeMultiItem(0); - } - - // return an item - return wxTreeMultiItem(b); -} - -TreeMultiItemBase *wxTreeMultiCtrl::FindNodeByPoint(TreeMultiItemBase *b, wxPoint const& pt, int &area) -{ - wxCHECK(b, 0); - - // if this layer is not visible, return with nothing. - if(!b->IsVisible()) - return 0; - - area = 0; - - // now see if our y is matching the mouse - if(pt.y >= b->GetY() && pt.y < (b->GetY() + b->GetHeight())) - { -#if(CHECKBOXVIEW) - // if we are checkboxed, calculate the checkbox position - if(b->GetCheckbox()) - { - int extraSpacing = 0, extraWidth = 0; - - // now for a windows item, this is minus the gutter. For a normal node it is X minus checkbox - if(b->IsTreeMultiItemWindow()) - { - extraWidth = _checkWidth; - extraSpacing = ((TreeMultiItemWindow *)b)->GetFrontSpacing(); - } - else - extraSpacing = 4; - - if(pt.x > (b->GetX() - extraSpacing - _checkWidth) && pt.x < (b->GetX() - extraSpacing + extraWidth)) - { - area = wxTMC_HITTEST_CHECKBOX; - return b; - } - } -#endif - - // allrighty we have something, now where and what is it (look with x) - if(pt.x < b->GetX()) - area = wxTMC_HITTEST_GUTTER; - - /** \todo Match only the real part of the caption, window (we assume x > GetX() which is the rest) - HOWEVER the window probably doesn't propagate the click event back to the parent, so we might - leave it like this so the use can click behind a window so it will be selected. - */ - else - { - // inside area, return proper flag - if(b->IsTreeMultiItemNode()) - area = wxTMC_HITTEST_CAPTION; - else - area = wxTMC_HITTEST_WINDOW; - } - - return b; - } - else - { - // not found, let's try our children if we have some - TreeMultiItemNode *n = b->IsTreeMultiItemNode(); - if(n) - { - TreeMultiItemBase *bb = 0; - for(int i = 0; i < n->GetNodeCount() && !bb; i++) - bb = FindNodeByPoint(n->GetNode(i), pt, area); - - // keep returning result to caller - return bb; - } - } - - return 0; -} - -wxTreeMultiItem wxTreeMultiCtrl::GetFocus() -{ - wxWindow *wnd = wxWindow::FindFocus(); - - // now find window that holds this item. if not - // visible it cannot have focus (should not have) - - wxTreeMultiItem item = FindWindowNode(wnd); - if(item.IsOk() && item.GetItem()->IsVisible()) - return item; - - return wxTreeMultiItem(0); -} - -#if(CHECKBOXVIEW) - -void wxTreeMultiCtrl::SetRecursiveCheckState(TreeMultiItemNode *n, bool check) -{ - int state = 0; - if(check) - state++; - - // go check all kids on this level - for(int i = 0; i < n->GetNodeCount(); i++) - { - // check all the nodes, and go deeper - n->GetNode(i)->SetCheckboxState(state); - if(n->GetNode(i)->IsTreeMultiItemNode()) - SetRecursiveCheckState((TreeMultiItemNode *)n->GetNode(i), check); - } -} - -void wxTreeMultiCtrl::ScanTristateCheckstates(TreeMultiItemBase *b) -{ - // check from the parent on, all node entries and see if they are - // checked or cleared or scattered - TreeMultiItemNode *p = b->GetParent(); - - if(p && p->GetCheckbox()) - { - bool foundcheck = false, foundclear = false; - for(size_t i = 0; i < (size_t)p->GetNodeCount(); ++i) - { - // only evaluate when checkboxed - if(p->GetNode(i)->IsTreeMultiItemWindow() && p->GetNode(i)->GetCheckbox()) - { - // record instance of a cleared checkbox - if(!p->GetNode(i)->GetCheckboxState()) - foundclear = true; - // record instance of checked checkbox - if(p->GetNode(i)->GetCheckboxState() == 1) - foundcheck = true; - } - } - - // if we have both check and clear, go tristate - // if all clear, clear parent and if all set, then set parent - if(foundclear && !foundcheck) - p->SetCheckboxState(0); - else if(!foundclear && foundcheck) - p->SetCheckboxState(1); - else if(foundclear && foundcheck) - p->SetCheckboxState(2); - - //wxClientDC dc; - //DrawCheckbox(p, dc, false); - RedrawFromNode(p); - } -} - -#endif // #if(CHECKBOXVIEW) - -wxTreeMultiItem wxTreeMultiCtrl::InsertNode(TreeMultiItemNode* ParentPtr, size_t Position, wxString const& Caption, wxString const& Name) -{ - int extX, extY; - - TreeMultiItemNode* NodePtr(new TreeMultiItemNode(ParentPtr,Caption,Name)); // generate new node pointer - - - // continue with initializing the new node: -#if(CHECKBOXVIEW) - // if checkbox view is desired, tag this item as a checkbox - // and set the state as 'false' - NodePtr->SetCheckbox(_checkboxView); - NodePtr->SetCheckboxState(0); -#endif - // calculate the height and width - this->GetTextExtent(Caption,&extX,&extY,0,0,&(this->_captionFont)); - NodePtr->SetHeight(extY); - NodePtr->SetWidth(extX); - // finally, insert node: - if (Position < (size_t)ParentPtr->GetNodeCount()) - ParentPtr->InsertNode(NodePtr,Position); - else - ParentPtr->AddNode(NodePtr); - // return the newly created node: - return wxTreeMultiItem(NodePtr); -} /* wxTreeMultiCtrl::InsertNode(TreeMultiItemNode*, size_t, wxString const&, wxString const&) */ - -wxTreeMultiItem wxTreeMultiCtrl::InsertWindow(TreeMultiItemNode* ParentPtr, size_t Position, wxWindow* WindowPtr, wxString const& Name, wxTreeMultiWindowInfo const& Info, int Flags) -{ - int WindowFlags; - - TreeMultiItemWindow* NewWindowPtr = new TreeMultiItemWindow(ParentPtr,Name); // generate new window pointer - - - // get flags from passed variable "Flags"; in case this variable does not contain any flags use the window's information flags: - if (Flags != 0) - WindowFlags = Flags; - else - WindowFlags = Info.GetFlags(); - - // continue with initializing the new window: -#if(CHECKBOXVIEW) - // if checkbox view is desired, tag this item as a checkbox - // and set the state as 'false' - NewWindowPtr->SetCheckbox(_checkboxView); -#endif - // if style wants us to change background, set it to our background - if (WindowFlags & wxTMC_BG_ADJUST_ALL) - { - // go through all children of this window, and set the - // background of it (recursively) - this->SetWindowBackgroundColour(WindowPtr,this->GetBackgroundColour(),WindowFlags); - } /* if */ - - // set the spacing: - NewWindowPtr->SetTopSpacing(Info.GetTopSpacing()); -#if(CHECKBOXVIEW) - // make sure that the checkboxes are at least indented enough - if (this->_checkboxView) - NewWindowPtr->SetFrontSpacing(Info.GetFrontSpacing() + this->_checkWidth); - else -#endif - NewWindowPtr->SetFrontSpacing(Info.GetFrontSpacing()); - // assign finally the window: - NewWindowPtr->AssignWindow(WindowPtr); - -#if(CHECKBOXVIEW) - // set the checkbox state after the window is assigned - NewWindowPtr->SetCheckboxState(Info.GetDefaultCheckState()); -#endif - - // if the window is not visible, set hide flag - this->ShowTreeMultiWindow(NewWindowPtr,NewWindowPtr->IsVisible()); - - // finally, insert the newly constructed window: - if (Position < (size_t)ParentPtr->GetNodeCount()) - ParentPtr->InsertNode(NewWindowPtr,Position); - else - ParentPtr->AddNode(NewWindowPtr); - // return the newly created window: - return wxTreeMultiItem(NewWindowPtr); -} /* wxTreeMultiCtrl::InsertWindow(TreeMultiItemNode*, size_t, wxWindow*, wxString const&, wxTreeMultiWindowInfo const&, int) */ - -void wxTreeMultiCtrl::RedrawFromParentNode(TreeMultiItemBase *n) -{ - TreeMultiItemNode *p = 0; - if(n) - p = n->GetParent(); - - RedrawFromNode(p); -} - -void wxTreeMultiCtrl::RedrawFromNode(TreeMultiItemNode *n) -{ - static int recalcMutex = 0; - bool visible = true; - - if(recalcMutex > 0) - return; - - recalcMutex ++; - - // when node is not visible or excluded - // then don't redraw. - - if(n) - visible = n->IsVisible(); - - if(visible) - { - int h, h1,w, w1; - GetVirtualSize(&w, &h); - - UpdateAllWindowVisibility(); - RecalculateNodePositions(); - RecalculateVirtualSize(); - - // why is this needed? Because folding or collapsing can change - // the state. When the virtual area gets smaller, we need to keep - // the largest one and the other way atound. And since we do not - // know here we are folding or collapsing, we remember the biggest - GetVirtualSize(&w1, &h1); - - if(h1 > h) - h = h1; - - // only refresh the part from x,y down - if(n) - { - int x, y; - CalcScrolledPosition(n->GetX(), n->GetY(), &x, &y); - if(h - y > 0) - { - wxRect rect(0, y, w, h - y); - RefreshRect(rect); - } - else - Refresh(); - } - else - Refresh(); // do a full refresh - } - - recalcMutex --; -} - -void wxTreeMultiCtrl::RecalculateNodePositions() -{ - int currentY = _spacingY; - // go recursive on every node, and store the information in the node - - for(int i = 0; i < _root.GetNodeCount(); i++) - currentY += CalculateNodeDimensions(_root.GetNode(i), currentY, 0); -} - -int wxTreeMultiCtrl::CalculateNodeDimensions(TreeMultiItemBase *b, int currentY, int level) -{ - int gutter = (_gutterWidth * 2) + _iconWidth; - int y = 0, topSpacing = 0; - - // return same if no proper object - wxCHECK(b, 0); - -#if(CHECKBOXVIEW) - if(b->GetCheckbox()) - gutter += _checkWidth; -#endif - - // if we are not visible, skip recalculation and descending - if(b->IsVisible()) - { - b->SetY(currentY); - - // if level is 0, calculate with front gutter, else without - y = currentY + b->GetHeight(); - if(b->IsTreeMultiItemNode()) - { - TreeMultiItemNode *n = (TreeMultiItemNode *)b; - - if(level == 0) - b->SetX(gutter); - else - b->SetX(gutter + (level * (_gutterWidth + _iconWidth))); - - // now do children of this node - - for(int i = 0; i < n->GetNodeCount(); i++) - y += CalculateNodeDimensions(n->GetNode(i), y + _spacingY, level+1); - } - else if(b->IsTreeMultiItemWindow()) - { - TreeMultiItemWindow *w = (TreeMultiItemWindow *)b; - - if(level == 0) - b->SetX(gutter + w->GetFrontSpacing()); - else - b->SetX(_gutterWidth + (level * (_gutterWidth + _iconWidth)) + w->GetFrontSpacing()); - - topSpacing = w->GetTopSpacing(); - - // reposition the window - - wxWindow *wnd = w->GetWindow(); - if(wnd) - { - int x = 0, y = 0; - CalcScrolledPosition(w->GetX(), w->GetY(), &x, &y); - wnd->SetSize(x, y, w->GetWidth(), w->GetHeight()); - } - } - - if(y > 0) - return (y - currentY) + _spacingY + topSpacing; // return delta - else - return 0; - } - - return 0; // not visible, thus we skip calculations -} - -void wxTreeMultiCtrl::RecalculateSpanSizes() -{ - for(int i = 0; i < _root.GetNodeCount(); i++) - CalculateNodeSpanning(_root.GetNode(i)); -} - -void wxTreeMultiCtrl::CalculateNodeSpanning(TreeMultiItemBase *b) -{ - // return same if no proper object - wxCHECK2(b, return); - - if(b->IsTreeMultiItemNode()) - { - TreeMultiItemNode *n = (TreeMultiItemNode *)b; - - // now do children of this node - - for(int i = 0; i < n->GetNodeCount(); i++) - CalculateNodeSpanning(n->GetNode(i)); - } - else if(b->IsTreeMultiItemWindow()) - { - TreeMultiItemWindow *w = (TreeMultiItemWindow *)b; - wxWindow *wnd = w->GetWindow(); - if(wnd) - { - // if the window is spanning, we adjust the width to the max width of the control - if(w->GetHorizontalSpan()) - { - wxSize tmcsize = GetClientSize(); - int maxwidth = tmcsize.GetWidth() - w->GetX() - 8; // extract 3 for border - - wxSizer *sz = wnd->GetSizer(); - if(sz) - { - if(maxwidth < sz->GetMinSize().GetWidth()) - maxwidth = sz->GetMinSize().GetWidth(); - } - - // prevent a size of 0 - if(maxwidth < 1) - maxwidth = 1; - - // set the size - w->SetWidth(maxwidth); - wnd->SetSize(w->GetWidth(), w->GetHeight()); - - // layout by sizer (not sure if this is needed) - if(wnd->GetSizer()) - wnd->GetSizer()->Layout(); - } - } - } -} - -void wxTreeMultiCtrl::RecalculateVirtualSize() -{ - // go through all the nodes, and store the largest x and largest y - - int x = 0, y = 0; - RecalculateVirtualSizeFromNode(&_root, x, y); - - // now adjust virtual size - SetVirtualSize(x, y); - AdjustScrollbars(x, y); -} - -void wxTreeMultiCtrl::AdjustScrollbars(int x, int y) -{ - // adjust scrollbars - // courtesy of treectrlg.cpp - - y += WXTMC_PIXELS_PER_UNIT+2; // one more scrollbar unit + 2 pixels - x += WXTMC_PIXELS_PER_UNIT+2; // one more scrollbar unit + 2 pixels - int x_pos = GetScrollPos( wxHORIZONTAL ); - int y_pos = GetScrollPos( wxVERTICAL ); - SetScrollbars( WXTMC_PIXELS_PER_UNIT, WXTMC_PIXELS_PER_UNIT, x/WXTMC_PIXELS_PER_UNIT, - y/WXTMC_PIXELS_PER_UNIT, x_pos, y_pos, true ); -} - -void wxTreeMultiCtrl::RecalculateVirtualSizeFromNode(const TreeMultiItemNode *node, int &x, int &y) -{ - if(node->IsExcluded()) - return; - - // if calulate this node's dimensions - if(x < (node->GetWidth() + node->GetX())) - x = node->GetWidth() + node->GetX(); - - y = node->GetY() + node->GetHeight(); - - // if this node is collapsed, no subnodes are visible, else - // go through all subnodes as well, node needs to be included as well - if(node->IsExpanded()) - { - TreeMultiItemBase *b; - for(int i = 0; i < node->GetNodeCount(); i++) - { - b = node->GetNode(i); - - // calculate x and y - if(x < (b->GetWidth() + b->GetX())) - x = b->GetWidth() + b->GetX(); - - y = b->GetY() + b->GetHeight(); - - if(b->IsTreeMultiItemNode()) - RecalculateVirtualSizeFromNode((TreeMultiItemNode *)b, x, y); - } - } -} - -void wxTreeMultiCtrl::SetWindowBackgroundColour(wxWindow *wnd, const wxColour &col, int flags) -{ - if(wnd) - { - // if we cannot change a button, make sure all button - // classes are not changed - - wxButton *btn = wxDynamicCast(wnd, wxButton); - if(!btn || ((flags & wxTMC_BG_ADJUST_BTN) != 0)) - wnd->SetBackgroundColour(col); - - // get every window, and make the background equal to the given one - wxWindowListNode *node = wnd->GetChildren().GetFirst(); - while (node) - { - SetWindowBackgroundColour(node->GetData(), col, flags); - node = node->GetNext(); - } - } -} - -void wxTreeMultiCtrl::ShowTreeMultiWindow(TreeMultiItemWindow *window, bool show) -{ - // show or hide window - if(window && window->GetWindow()) - window->GetWindow()->Show(show); -} - -void wxTreeMultiCtrl::UpdateAllWindowVisibility() -{ - // all roots are visible, but what lies beneath ... who knows - for(int i = 0; i < _root.GetNodeCount(); i++) - UpdateTreeMultiWindowVisibility(_root.GetNode(i), true); -} - -void wxTreeMultiCtrl::UpdateTreeMultiWindowVisibility(TreeMultiItemBase *b, bool show) -{ - if(b) - { - // this is done for performance issues. IsVisible can go all - // the way up the tree to check. However if show is already - // false, there is no need to check (some higher one is collapsed) - bool showMe = show; - - if(showMe) - showMe = b->IsVisible(); - - if(b->IsTreeMultiItemWindow()) - { - // if this level must be hidden, hide - ShowTreeMultiWindow((TreeMultiItemWindow*)b, showMe); - } - else if(b->IsTreeMultiItemNode()) - { - TreeMultiItemNode *node = (TreeMultiItemNode *)b; - - // if hidden, descend and hide all windows - for(int i = 0; i < node->GetNodeCount(); i++) - UpdateTreeMultiWindowVisibility(node->GetNode(i), showMe); - } - } -} - -wxTreeMultiItem wxTreeMultiCtrl::FindItem(const wxTreeMultiItem &item, const wxString &name, bool ignoreCase, bool skipFirst) -{ - if(item.IsOk()) - { - TreeMultiItemBase *b = item.GetItem(); - - // check this item first (or not) - - if(!skipFirst) - { - if(b->GetName().IsSameAs(name, !ignoreCase)) - return wxTreeMultiItem(b); - } - - if(b->IsTreeMultiItemNode()) - { - // now check whether we are a node, then go check children - - TreeMultiItemNode *n = (TreeMultiItemNode *)b; - wxTreeMultiItem result(0); - for(int i = 0; i < n->GetNodeCount() && !result.IsOk(); i++) - result = FindItem(wxTreeMultiItem(n->GetNode(i)), name, ignoreCase, false); - - return result; - } - } - - return wxTreeMultiItem(0); -} - -wxTreeMultiItem wxTreeMultiCtrl::FindWindowNode(wxWindow *wnd, TreeMultiItemNode *n) -{ - wxCHECK(wnd, wxTreeMultiItem(0)); - - // take root node if not assigned one - - if(!n) - n = (TreeMultiItemNode *)&_root; - - // check on this level for the wxWindow pointer - - TreeMultiItemWindow *w; - wxTreeMultiItem result(0); - for(int i = 0; i < n->GetNodeCount() && !result.IsOk(); i++) - { - // if window node - w = n->GetNode(i)->IsTreeMultiItemWindow(); - if(w && w->GetWindow() == wnd) - return wxTreeMultiItem(n); - - // if node, go deeper - if(n->GetNode(i)->IsTreeMultiItemNode()) - result = FindWindowNode(wnd, (TreeMultiItemNode*)n->GetNode(i)); - } - - return result; -} - -TreeMultiItemWindow *wxTreeMultiCtrl::FindNextVisibleWindowItem(TreeMultiItemBase *b, int index) -{ - wxCHECK(b, 0); - - // check on this level, go deeper with every node we got. When a node is not - // visible anymore, skip the node. - - TreeMultiItemWindow *value = 0; - if(b->IsVisible()) - { - // if we are already searching on a node with an index - - TreeMultiItemBase *bn = 0; - TreeMultiItemNode *n = b->IsTreeMultiItemNode(); - if(n) - { - for(int i = index + 1; i < n->GetNodeCount() && !value; i++) - { - bn = n->GetNode(i); - value = bn->IsTreeMultiItemWindow(); - - // assume a node, root when not a a window - if(!value) - value = FindNextVisibleWindowItem(bn, -1); - } - - } - else - { - if(b->IsTreeMultiItemWindow()) - { - // get parent first, and locate child as ptr - TreeMultiItemNode *p = b->GetParent(); - wxCHECK(p, 0); - - // go scan the parent from the given index, if - // the index is valid else there is no child with that index - - int idx = p->Index(b); - wxCHECK(idx >= 0, 0); - - value = FindNextVisibleWindowItem(p, idx); - } - } - } - - return value; - -} - -bool wxTreeMultiCtrl::GetBooleanValue(int wndId) -{ - wxWindow *wnd = wxWindow::FindWindow(wndId); - wxCHECK(wnd, false); - - // try a radio button - wxRadioButton *b = wxDynamicCast(wnd, wxRadioButton); - if(b) - return b->GetValue(); - - // try a check box - wxCheckBox *c = wxDynamicCast(wnd, wxCheckBox); - if(c) - return c->GetValue(); - - /** \todo For custom controls we should put something in wxMultiTreeItemData class - which can be overridden to retrieve the boolean value. It will also be passed - the pointer to the window, so the derived class can figure out how to get a boolean - value. - */ - - // generate assert or just return with false - wxCHECK(0, false); -} - -void wxTreeMultiCtrl::SetBooleanValue(int wndId, bool value) -{ - wxWindow *wnd = wxWindow::FindWindow(wndId); - wxCHECK2(wnd, return); - - // try a radio button - wxRadioButton *b = wxDynamicCast(wnd, wxRadioButton); - if(b) - { - b->SetValue(value); - return; - } - - // try a check box - wxCheckBox *c = wxDynamicCast(wnd, wxCheckBox); - if(c) - { - c->SetValue(value); - return; - } - - /** \todo For custom controls we should put something in wxMultiTreeItemData class - which can be overridden to retrieve the boolean value. It will also be passed - the pointer to the window, so the derived class can figure out how to get a boolean - value. - */ - - // generate assert - wxCHECK2(0, return); -} - -void wxTreeMultiCtrl::SetTextValue(int wndId, const wxString &value) -{ - wxWindow *wnd = wxWindow::FindWindow(wndId); - wxCHECK2(wnd, return); - - // try a radio button - wxTextCtrl *t = wxDynamicCast(wnd, wxTextCtrl); - if(t) - { - t->SetValue(value); - return; - } - - /** \todo For custom controls we should put something in wxMultiTreeItemData class - which can be overridden to retrieve the boolean value. It will also be passed - the pointer to the window, so the derived class can figure out how to get a boolean - value. - */ - - // generate assert - wxCHECK2(0, return); -} - -wxString wxTreeMultiCtrl::GetTextValue(int wndId) -{ - wxWindow *wnd = wxWindow::FindWindow(wndId); - wxCHECK(wnd, wxEmptyString); - - // try a radio button - wxTextCtrl *t = wxDynamicCast(wnd, wxTextCtrl); - if(t) - return t->GetValue(); - - // try a choice box - wxChoice *c1 = wxDynamicCast(wnd, wxChoice); - if(c1) - return c1->GetStringSelection(); - - // try a combo box - wxComboBox *c2 = wxDynamicCast(wnd, wxComboBox); - if(c2) - return c2->GetStringSelection(); - - // try a listbox - wxListBox *l = wxDynamicCast(wnd, wxListBox); - if(l) - return l->GetStringSelection(); - - /** \todo For custom controls we should put something in wxMultiTreeItemData class - which can be overridden to retrieve the boolean value. It will also be passed - the pointer to the window, so the derived class can figure out how to get a boolean - value. - */ - - // generate assert or just return with string - wxCHECK(0, wxEmptyString); -} - -int wxTreeMultiCtrl::GetSelectionValue(int wndId) -{ - wxWindow *wnd = wxWindow::FindWindow(wndId); - wxCHECK(wnd, -1); - - // try a choice box - wxChoice *c1 = wxDynamicCast(wnd, wxChoice); - if(c1) - return c1->GetSelection(); - - // try a combo box - wxComboBox *c2 = wxDynamicCast(wnd, wxComboBox); - if(c2) - return c2->GetSelection(); - - // try a listbox - wxListBox *l = wxDynamicCast(wnd, wxListBox); - if(l) - return l->GetSelection(); - - /** \todo For custom controls we should put something in wxMultiTreeItemData class - which can be overridden to retrieve the boolean value. It will also be passed - the pointer to the window, so the derived class can figure out how to get a boolean - value. - */ - - // generate assert or just return with string - wxCHECK(0, -1); -} - -void wxTreeMultiCtrl::GetSelectionValues(int wndId, wxArrayInt &sels) -{ - sels.Clear(); - - wxWindow *wnd = wxWindow::FindWindow(wndId); - wxCHECK2(wnd, return); - - // try a listbox - wxListBox *l = wxDynamicCast(wnd, wxListBox); - if(l) - { - l->GetSelections(sels); - return; - } - - /** \todo For custom controls we should put something in wxMultiTreeItemData class - which can be overridden to retrieve the boolean value. It will also be passed - the pointer to the window, so the derived class can figure out how to get a boolean - value. - */ - - // generate assert or just return with string - wxCHECK2(0, return); -} - -void wxTreeMultiCtrl::SetSelectionValue(int wndId, int sel) -{ - wxWindow *wnd = wxWindow::FindWindow(wndId); - wxCHECK2(wnd, return); - - // try a choice box - wxChoice *c1 = wxDynamicCast(wnd, wxChoice); - if(c1) - { - c1->SetSelection(sel); - return; - } - - // try a combo box - wxComboBox *c2 = wxDynamicCast(wnd, wxComboBox); - if(c2) - { - c2->SetSelection(sel); - return; - } - - // try a listbox - wxListBox *l = wxDynamicCast(wnd, wxListBox); - if(l) - { - l->SetSelection(sel); - return; - } - - /** \todo For custom controls we should put something in wxMultiTreeItemData class - which can be overridden to retrieve the boolean value. It will also be passed - the pointer to the window, so the derived class can figure out how to get a boolean - value. - */ - - // generate assert or just return with string - wxCHECK2(0, return); -} - - -wxTreeMultiItem wxTreeMultiCtrl::GetParent(wxTreeMultiItem const& item) const -{ - // check if valid or root item has been passed, both do not have parents: - if (!(item.IsOk()) || item.GetItem()->IsTreeMultiItemRoot()) - return wxTreeMultiItem(); - else - return wxTreeMultiItem(item.GetItem()->GetParent()); // GetParent() returns a valid pointer in case of a root item!! - // therefore, the check if the passed item is a root item is necessary -} /* wxTreeMultiCtrl::GetParent(wxTreeMultiItem const& item) const */ - -wxTreeMultiItem wxTreeMultiCtrl::GetFirstChild(const wxTreeMultiItem &item, int &cookie) const -{ - if(item.IsNodeItem()) - { - TreeMultiItemNode *n = (TreeMultiItemNode *)item.GetItem(); - - if(n->GetNodeCount() > 0) - { - cookie = 0; - return wxTreeMultiItem(n->GetNode(0)); - } - } - - // no children or no valid node - cookie = -1; - return wxTreeMultiItem(0); -} - -wxTreeMultiItem wxTreeMultiCtrl::GetNextChild(const wxTreeMultiItem &item, int &cookie) const -{ - if(item.IsNodeItem()) - { - TreeMultiItemNode *n = (TreeMultiItemNode *)item.GetItem(); - - if(cookie >= 0 && cookie < (n->GetNodeCount()-1)) - { - // increment cookie, return node - cookie ++; - return wxTreeMultiItem(n->GetNode(cookie)); - } - } - - // end of query, or no valid node - cookie = -1; - return wxTreeMultiItem(0); -} - -wxTreeMultiItem wxTreeMultiCtrl::GetLastChild(const wxTreeMultiItem &item) const -{ - if(item.IsNodeItem()) - { - TreeMultiItemNode *n = (TreeMultiItemNode *)item.GetItem(); - - if(n->GetNodeCount() > 0) - return wxTreeMultiItem(n->GetNode(n->GetNodeCount()-1)); - } - - return wxTreeMultiItem(0); -} - -wxTreeMultiItem wxTreeMultiCtrl::GetNextSibling(wxTreeMultiItem const& item) const -{ - // check if a valid item has been passed: - if (!(item.IsOk())) - return wxTreeMultiItem(); - - TreeMultiItemNode* ParentPtr(item.GetItem()->GetParent()); - - - if (ParentPtr != NULL) // the parent pointer is only null if the passed item is the root - { - // find the current item in the parent's list; the next sibling has an index that is one higher than the one of the current item: - int NextItemIndex(ParentPtr->Index(item.GetItem())+1); // variable definition and initialization - - if (NextItemIndex < ParentPtr->GetNodeCount()) - return ParentPtr->GetNode(NextItemIndex); - else - return wxTreeMultiItem(); - } /* if */ - else - return wxTreeMultiItem(); -} /* wxTreeMultiCtrl::GetNextSibling(wxTreeMultiItem const&) const */ - -wxTreeMultiItem wxTreeMultiCtrl::GetPrevSibling(wxTreeMultiItem const& item) const -{ - // check if a valid item has been passed: - if (!(item.IsOk())) - return wxTreeMultiItem(); - - TreeMultiItemNode* ParentPtr(item.GetItem()->GetParent()); - - - if (ParentPtr != NULL) - { - // find the current item in the parent's list; the next sibling has an index that is one higher than the one of the current item: - int PrevItemIndex(ParentPtr->Index(item.GetItem())-1); // variable definition and initialization - - if (PrevItemIndex >= 0) - return ParentPtr->GetNode(PrevItemIndex); - else - return wxTreeMultiItem(); - } /* if */ - else - return wxTreeMultiItem(); -} /* wxTreeMultiCtrl::GetPrevSibling(wxTreeMultiItem const&) const */ - -wxTreeMultiItem wxTreeMultiCtrl::GetNext(wxTreeMultiItem const& item) const -{ - // check if a valid item has been passed: - if (!(item.IsOk())) - return wxTreeMultiItem(); - - TreeMultiItemNode* NodePtr(item.GetItem()->IsTreeMultiItemNode()); // variable definition and initialization - - if ((NodePtr != NULL) && (NodePtr->GetNodeCount() > 0)) - return wxTreeMultiItem(NodePtr->First()); - else - { - // variable definitions and initializations: - wxTreeMultiItem Parent(item); - wxTreeMultiItem Sibling; - - do - { - Sibling = this->GetNextSibling(Parent); // try to find next sibling - Parent = this->GetParent(Parent); // get next ancestor - } while (!(Sibling.IsOk()) && Parent.IsOk()); - // in case the loop ended with Sibling.IsOk() "Sibling" contains a valid sibling otherwise an invalid - return Sibling; - } /* if */ -} /* wxTreeMultiCtrl::GetNextSibling(wxTreeMultiItem const&) const */ - -wxTreeMultiItem wxTreeMultiCtrl::GetPrevious(wxTreeMultiItem const& item) const -{ - // check if a valid item has been passed: - if (!(item.IsOk())) - return wxTreeMultiItem(); - - TreeMultiItemNode* NodePtr(item.GetItem()->IsTreeMultiItemNode()); // variable definition and initialization - - if ((NodePtr != NULL) && (NodePtr->GetNodeCount() > 0)) - return wxTreeMultiItem(NodePtr->Last()); - else - { - // variable definitions and initializations: - wxTreeMultiItem Parent(item); - wxTreeMultiItem Sibling; - - do - { - Sibling = this->GetPrevSibling(Parent); // try to find next sibling - Parent = this->GetParent(Parent); // get next ancestor - } while (!(Sibling.IsOk()) && Parent.IsOk()); - // in case the loop ended with Sibling.IsOk() "Sibling" contains a valid sibling otherwise an invalid - return Sibling; - } /* if */ -} /* wxTreeMultiCtrl::GetPrevious(wxTreeMultiItem const&) const */ - -// WDR: handler implementations for wxTreeMultiCtrl - -void wxTreeMultiCtrl::OnDraw(wxDC& dc) -{ - // go recursive and draw the whole visible tree. - dc.SetFont(_captionFont); - for(int i = 0; i < _root.GetNodeCount(); i++) - DrawNode(_root.GetNode(i), dc); -} /* */ +//--------------------------------------------------------------------------- +// $RCSfile: wxTreeMultiCtrl.cpp,v $ +// $Source: /cvs/creatis/bbtk/kernel/src/ThirdParty/wx/treemultictrl/wxTreeMultiCtrl.cpp,v $ +// $Revision: 1.2 $ +// $Date: 2009/10/05 22:44:50 $ +//--------------------------------------------------------------------------- +// Author: Jorgen Bodde +// Copyright: (c) Jorgen Bodde +// License: wxWidgets License +//--------------------------------------------------------------------------- + +#ifdef __GNUG__ + #pragma implementation "wxTreeMultiCtrl.h" +#endif + +// For compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" +#include "wx/treebase.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#include "wx/arrimpl.cpp" + +#include "wx/treemultictrl/wxTreeMultiCtrl.h" +#include "wx/treemultictrl/wxTreeMultiEvent.h" +#include "tmcimages.h" + + + +//---------------------------------------------------------------------------- +// wxTreeMultiItem +//---------------------------------------------------------------------------- + +WX_DEFINE_OBJARRAY(wxArrayTreeMultiItem); + +//---------------------------------------------------------------------------- +// wxTreeMultiCtrl +//---------------------------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxTreeMultiCtrl, wxScrolledWindow) + +// WDR: event table for wxTreeMultiCtrl +BEGIN_EVENT_TABLE(wxTreeMultiCtrl, wxScrolledWindow) + EVT_LEFT_DOWN (wxTreeMultiCtrl::OnMouseClick) + EVT_LEFT_DCLICK(wxTreeMultiCtrl::OnMouseClick) + EVT_RIGHT_DOWN (wxTreeMultiCtrl::OnRightMouseClick) + EVT_PAINT(wxTreeMultiCtrl::OnPaint) + EVT_SIZE(wxTreeMultiCtrl::OnSize) +// EVT_KEY_UP(wxTreeMultiCtrl::OnKey) +END_EVENT_TABLE() + +bool wxTreeMultiCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, + const wxSize& size, long style, const wxValidator & WXUNUSED(validator), + const wxString& name ) +{ + wxScrolledWindow::Create( parent, id, pos, size, style | wxTAB_TRAVERSAL, name); + + _create_called = true; + + // do the init + Init(); + + return TRUE; +} + +void wxTreeMultiCtrl::Init() +{ + _root.Clear(); + + _expandBmp = 0; + _collBmp = 0; + +#if(CHECKBOXVIEW) + _checkBmp = 0; + _uncheckBmp = 0; + _tristateBmp = 0; + + _checkHeight = 11; + _checkWidth = 11; + + _checkboxView = false; +#endif + + _gutterWidth = WXTMC_GUTTER_DEFAULT; + _iconWidth = 11; + _iconHeight = 11; + _maxHeight = 1;; + _iconDeltaY = 2; + _spacingY = WXTMC_YSPACING_DEFAULT; + _captionHeight = 13; + + // create two bitmap nodes for drawing + + _expandBmp = new wxBitmap(expand_xpm); + _collBmp = new wxBitmap(collapse_xpm); + + // calculate average font height for bitmap centering + + _iconWidth = _expandBmp->GetWidth(); + _iconHeight = _expandBmp->GetHeight(); + +#if(CHECKBOXVIEW) + // create bitmaps for checkboxes + _checkBmp = new wxBitmap(checked_icon); + _uncheckBmp = new wxBitmap(unchecked_icon); + _tristateBmp = new wxBitmap(tristate_icon); + + // adjust the height if the checkboxes are higher + // so that everything is alligned properly + _checkHeight = _checkBmp->GetHeight(); + _checkWidth = _checkBmp->GetWidth(); +#endif + + // remember the highest of the two bitmaps so there is + // always enough room + _maxHeight = _iconHeight; + +#if(CHECKBOXVIEW) + if(_maxHeight < _checkHeight) + _maxHeight = _checkHeight; +#endif + + // set standard highlighting brush + this->m_HilightBrush = new wxBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT),wxSOLID); + + // set standard DC font + _captionFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + + // adjust bitmap icon y position so they are centered + AdjustIconsDeltaY(); + + // set virtual size to this window size + if (_create_called) { + wxSize wndsize = GetSize(); + SetVirtualSize(wndsize.GetWidth(), wndsize.GetWidth()); + } +} + +void wxTreeMultiCtrl::SetCaptionFont(const wxFont &font) +{ + _captionFont = font; + + // adjust the icons so that they are in the middle + AdjustIconsDeltaY(); + + RedrawFromNode(0); +}; + +void wxTreeMultiCtrl::AdjustIconsDeltaY() +{ + int x = 0, y = 0; + + if(_captionFont.Ok()) + GetTextExtent(wxT("jG"), &x, &y, 0, 0, &_captionFont); + _captionHeight = y; + + if(_maxHeight < _captionHeight) + _maxHeight = _captionHeight; + + // determine the center pos for the [+] + _iconDeltaY = abs(_maxHeight - _iconHeight) / 2 + 1; + if(_iconDeltaY < 1) + _iconDeltaY = 1; + +#if(CHECKBOXVIEW) + // determine the center pos for the checkbox + _checkDeltaY = abs(_maxHeight - _checkHeight) / 2 + 1; + if(_checkDeltaY < 1) + _checkDeltaY = 1; +#endif +} + +wxTreeMultiCtrl::~wxTreeMultiCtrl() +{ + // delete the bitmap resources + delete _expandBmp; + delete _collBmp; + +#if(CHECKBOXVIEW) + delete _checkBmp; + delete _uncheckBmp; + delete _tristateBmp; +#endif +} + +wxTreeMultiItem wxTreeMultiCtrl::AddRoot(const wxString &caption, const wxString &name) +{ + wxTreeMultiItem result((TreeMultiItemBase *)&_root); + result = AppendNode(result, caption, name); + + return result; +} + +wxTreeMultiItem wxTreeMultiCtrl::AppendWindow(const wxTreeMultiItem &ParentItem, wxWindow *window, const wxString &name, const wxTreeMultiWindowInfo &info, int flags) +{ + // add window only if the parent item is valid and... + wxCHECK(ParentItem.IsOk(), wxTreeMultiItem(0)); + + TreeMultiItemNode* parent = ParentItem.GetItem()->IsTreeMultiItemNode(); // also roots are nodes + + // ... is a node + wxCHECK(parent != NULL, wxTreeMultiItem(0)); + + // now, append node to the tree control: + wxTreeMultiItem NewWindowItem(this->InsertWindow(parent,wx_static_cast(size_t,parent->GetNodeCount()),window,name,info,flags)); + // redraw the stucture: + this->RedrawFromNode(parent); + // return the new window + return NewWindowItem; +} + +wxTreeMultiItem wxTreeMultiCtrl::InsertWindow(wxTreeMultiItem const& ParentItem, size_t Position, wxWindow *window, wxString const& name, wxTreeMultiWindowInfo const& info, int flags) +{ + // add window only if the parent item is valid and... + wxCHECK(ParentItem.IsOk(), wxTreeMultiItem(0)); + + TreeMultiItemNode* parent = ParentItem.GetItem()->IsTreeMultiItemNode(); // also roots are nodes + + // ... is a node + wxCHECK(parent != NULL, wxTreeMultiItem(0)); + + // now, append node to the tree control: + wxTreeMultiItem NewWindowItem(this->InsertWindow(parent,Position,window,name,info,flags)); + // redraw the stucture: + this->RedrawFromNode(parent); + // return the new window + return NewWindowItem; +} /* wxTreeMultiCtrl::InsertWindow(wxTreeMultiItem const&, size_t, wxWindow*, wxString const&, wxTreeMultiWindowInfo const&, int) */ + +wxTreeMultiItem wxTreeMultiCtrl::PrependWindow(wxTreeMultiItem const& ParentItem, wxWindow *window, const wxString &name, wxTreeMultiWindowInfo const& info, int flags) +{ + // add window only if the parent item is valid and... + wxCHECK(ParentItem.IsOk(), wxTreeMultiItem(0)); + + TreeMultiItemNode* parent = ParentItem.GetItem()->IsTreeMultiItemNode(); // also roots are nodes + + // ... is a node + wxCHECK(parent != NULL, wxTreeMultiItem(0)); + + // now, append node to the tree control: + wxTreeMultiItem NewWindowItem(this->InsertWindow(parent,0,window,name,info,flags)); + // redraw the stucture: + this->RedrawFromNode(parent); + // return the new window + return NewWindowItem; +} /* wxTreeMultiCtrl::PrependWindow(wxTreeMultiItem const&, wxWindow*, const wxString &, wxTreeMultiWindowInfo const&, int) */ + +wxTreeMultiItem wxTreeMultiCtrl::AppendNode(wxTreeMultiItem const& ParentItem, const wxString &caption, const wxString &name) +{ + // add window only if the parent item is valid and... + wxCHECK(ParentItem.IsOk(), wxTreeMultiItem(0)); + + TreeMultiItemNode* parent = ParentItem.GetItem()->IsTreeMultiItemNode(); // also roots are nodes + + // ... is a node + wxCHECK(parent != NULL, wxTreeMultiItem(0)); + + // now, append node to the tree control: + wxTreeMultiItem NewNodeItem(this->InsertNode(parent,wx_static_cast(size_t,parent->GetNodeCount()),caption,name)); + // redraw the structure: + this->RedrawFromNode(parent); + // return the new node: + return NewNodeItem; +} /* wxTreeMultiCtrl::AppendNode(wxTreeMultiItem const&, const wxString &, const wxString&) */ + +wxTreeMultiItem wxTreeMultiCtrl::InsertNode(wxTreeMultiItem const& ParentItem, size_t Position, wxString const& caption, wxString const& name) +{ + // add window only if the parent item is valid and... + wxCHECK(ParentItem.IsOk(), wxTreeMultiItem(0)); + + TreeMultiItemNode* parent = ParentItem.GetItem()->IsTreeMultiItemNode(); // also roots are nodes + + // ... is a node + wxCHECK(parent != NULL, wxTreeMultiItem(0)); + + // now, append node to the tree control: + wxTreeMultiItem NewNodeItem(this->InsertNode(parent,Position,caption,name)); + // redraw the structure: + this->RedrawFromNode(parent); + // return the new node: + return NewNodeItem; +} /* wxTreeMultiCtrl::InsertNode(wxTreeMultiItem const&, size_t, wxString const&, wxString const&) */ + +wxTreeMultiItem wxTreeMultiCtrl::PrependNode(wxTreeMultiItem const& ParentItem, wxString const& caption, wxString const& name) +{ + // add window only if the parent item is valid and... + wxCHECK(ParentItem.IsOk(), wxTreeMultiItem(0)); + + TreeMultiItemNode* parent = ParentItem.GetItem()->IsTreeMultiItemNode(); // also roots are nodes + + // ... is a node + wxCHECK(parent != NULL, wxTreeMultiItem(0)); + + // now, append node to the tree control: + wxTreeMultiItem NewNodeItem(this->InsertNode(parent,0,caption,name)); + // redraw the structure: + this->RedrawFromNode(parent); + // return the new node: + return NewNodeItem; +} /* wxTreeMultiCtrl::PrependNode(wxTreeMultiItem const&, wxString const&, wxString const&) */ + +bool wxTreeMultiCtrl::Delete(wxTreeMultiItem &item) +{ + bool redraw = true; + wxCHECK(item.IsOk(), false); + + wxTreeMultiItem nullItem(0); + + + // if item has been selected, remove it from the selected list: + size_t ItemIndex(this->GetSelectedItemIndex(item)); + + if (ItemIndex != this->GetSelectedItemCount()) + this->m_SelectedItems.RemoveAt(ItemIndex); + + // get parent, to delete item from + TreeMultiItemNode *p = item.GetItem()->GetParent(); + + // first check if it was visible, if so from the parent off + // it needs redrawing + redraw = item.GetItem()->IsVisible(); + if(p) + p->DeleteNode(item.GetItem()); + else + _root.DeleteNode(item.GetItem()); + + item = nullItem; + + // do redraw when node was visible + if(redraw) + RedrawFromNode(p); + + return true; +} + +void wxTreeMultiCtrl::DeleteChildren(const wxTreeMultiItem &item) +{ + if(item.IsNodeItem()) + { + TreeMultiItemNode *n = (TreeMultiItemNode *)item.GetItem(); + + // remove all children from the selected item list: + if (n->GetNodeCount() > 0) + { + // variable definitions and initializations: + int Cookie; + wxTreeMultiItem FirstItemIterator(this->GetFirstChild(item,Cookie)), LastItemIterator(this->GetLastChild(item)); + + for (;;) + { + size_t ItemIndex(this->GetSelectedItemIndex(item)); // variable definition and initialization + + if (ItemIndex != this->GetSelectedItemCount()) + this->m_SelectedItems.RemoveAt(ItemIndex); + if (FirstItemIterator == LastItemIterator) + break; // all children checked + else + FirstItemIterator = this->GetNext(FirstItemIterator); + } /* for */ + } /* if */ + // delete children: + n->Clear(); + // redraw: + RedrawFromNode(n); + } +} + +void wxTreeMultiCtrl::Expand(const wxTreeMultiItem &item, bool recursive) +{ + if(item.IsOk()) + { + TreeMultiItemNode *n = item.GetItem()->IsTreeMultiItemNode(); + if(!n) + n = item.GetItem()->GetParent(); + DoFold(n, true, recursive); + RedrawFromNode(item.GetItem()->IsTreeMultiItemNode()); + } +} + +void wxTreeMultiCtrl::Collapse(const wxTreeMultiItem &item, bool recursive) +{ + if(item.IsOk()) + { + TreeMultiItemNode *n = item.GetItem()->IsTreeMultiItemNode(); + if(!n) + n = item.GetItem()->GetParent(); + DoFold(n, false, recursive); + RedrawFromNode(item.GetItem()->IsTreeMultiItemNode()); + } +} + + +void wxTreeMultiCtrl::ExpandNodes(bool recursive) +{ + // go through all children and call DoFold recursively + for(int i = 0; i < _root.GetNodeCount(); i++) + DoFold(_root.GetNode(i), true, recursive); + RedrawFromNode(0); +} + +void wxTreeMultiCtrl::CollapseNodes(bool recursive) +{ + // go through all children and call DoFold recursively + for(int i = 0; i < _root.GetNodeCount(); i++) + DoFold(_root.GetNode(i), false, recursive); + RedrawFromNode(0); +} + +void wxTreeMultiCtrl::CollapseAndReset(const wxTreeMultiItem &item) +{ + if(item.IsNodeItem()) + { + TreeMultiItemNode *n = (TreeMultiItemNode *)item.GetItem(); + + // delete all kids + n->Clear(); + Collapse(item, false); + } +} + +// Selection manipulation +wxTreeMultiItem wxTreeMultiCtrl::GetFirstSelectedItem(void) const +{ + if (this->GetSelectedItemCount() > 0) + return this->m_SelectedItems[0]; + else + return wxTreeMultiItem(); +} /* wxTreeMultiCtrl::GetFirstSelectedItem(void) const */ + +wxTreeMultiItem wxTreeMultiCtrl::GetLastSelectedItem(void) const +{ + if (this->GetSelectedItemCount() > 0) + return this->m_SelectedItems[this->GetSelectedItemCount()-1]; + else + return wxTreeMultiItem(); +} /* wxTreeMultiCtrl::GetLastSelectedItem(void) const */ + +wxTreeMultiItem wxTreeMultiCtrl::GetSelectedItem(size_t Index) const +{ + if (Index < this->GetSelectedItemCount()) + return this->m_SelectedItems[Index]; + else + return wxTreeMultiItem(); +} /* wxTreeMultiCtrl::GetSelectedItem(size_t Index) const */ + +size_t wxTreeMultiCtrl::GetSelectedItemIndex(wxTreeMultiItem const& Item) const +{ + // attention: the function wxArray::Index() can NOT be used in a save manner as it only checks the address of an item + // element but it is not guaranteed that Item may not be a copy of the originally inserted item + const size_t NoOfSelectedItems = this->GetSelectedItemCount(); + + size_t Index(0); + + + while ((Index < NoOfSelectedItems) && (this->m_SelectedItems[Index] != Item)) + ++Index; + return Index; +} /* wxTreeMultiCtrl::GetSelectedItemIndex(wxTreeMultiItem const&) const */ + +void wxTreeMultiCtrl::SelectItem(wxTreeMultiItem const& Item, bool UnselectOthers, bool ExpandSelection) +{ + TreeMultiItemNode* NodePtr(Item.GetItem()->IsTreeMultiItemNode()); + + + // only nodes can be selected and they can only be selected if they are not already selected: + if ((NodePtr == NULL) || NodePtr->IsSelected()) + return; + + // inform that we are about to change: + wxTreeMultiEvent Event(wxEVT_COMMAND_TREE_MULTI_SEL_CHANGING,Item); // variable definition and initialization + + if (this->m_SelectedItems.GetCount() > 0) // the last item in the array is always the latest inserted item + Event.SetOldItem(this->m_SelectedItems.Last()); + Event.SetEventObject(this); + if (this->GetEventHandler()->ProcessEvent(Event) && !(Event.IsAllowed())) + return; // vetoed + + // make sure that the to be selected item can be seen: + this->Include(Item); + + // variable definition and initialization: + wxTreeMultiItem ExcludedParent(this->GetExcludedParent(Item)); + + while (ExcludedParent.IsOk()) + { + this->Include(ExcludedParent); + ExcludedParent = this->GetExcludedParent(Item); + } /* while */ + + // unselect items if necessary: + if (UnselectOthers) + this->UnselectAll(); + // expand selection if necessary: + if (ExpandSelection) + { + // variable definition: + wxTreeMultiItem FirstItemIterator, LastItemIterator; + wxTreeMultiItem LastSelectedItem; + + // determine the last selected item or the first item in case nothing has been selected before: + if (this->m_SelectedItems.GetCount() > 0) + LastSelectedItem = this->m_SelectedItems.Last(); + else + LastSelectedItem = this->GetFirstRoot(); + // determine the item from which to start and the one with which to end the selection: + if (Item.GetItem()->GetY() > LastSelectedItem.GetItem()->GetY()) + { + FirstItemIterator = LastSelectedItem; + LastItemIterator = Item; + } /* if */ + else + { + FirstItemIterator = Item; + LastItemIterator = LastSelectedItem; + } /* if */ + // select all items that are a node and are placed between the two limiting iterators (included the limits): + for (;;) + { + if (!(FirstItemIterator.IsSelected()) && FirstItemIterator.IsNodeItem()) + { + FirstItemIterator.GetItem()->Select(); + this->m_SelectedItems.Add(FirstItemIterator); + this->RefreshRect(wxRect(FirstItemIterator.GetItem()->GetX(), FirstItemIterator.GetItem()->GetY(), + FirstItemIterator.GetItem()->GetWidth(),FirstItemIterator.GetItem()->GetHeight())); + } /* if */ + if (FirstItemIterator == LastItemIterator) + break; // done + // continue iterating: + FirstItemIterator = this->GetNext(FirstItemIterator); + } /* for */ + } /* if */ + else // select passed item only + { + NodePtr->Select(); + this->m_SelectedItems.Add(NodePtr); + this->RefreshRect(wxRect(NodePtr->GetX(),NodePtr->GetY(),NodePtr->GetWidth(),NodePtr->GetHeight())); + } /* if */ + + // inform that we have selected the item: + Event.SetEventType(wxEVT_COMMAND_TREE_MULTI_SEL_CHANGED); + this->GetEventHandler()->ProcessEvent(Event); +} /* wxTreeMultiCtrl::SelectItem(wxTreeMultiItem const&, bool, bool) */ + +void wxTreeMultiCtrl::UnselectAll(void) +{ + const size_t NoOfSelectedItems = this->m_SelectedItems.GetCount(); + + + for (size_t i=0; iRefreshRect(wxRect(this->m_SelectedItems[i].GetItem()->GetX(), this->m_SelectedItems[i].GetItem()->GetY(), + this->m_SelectedItems[i].GetItem()->GetWidth(),this->m_SelectedItems[i].GetItem()->GetHeight())); + this->m_SelectedItems[i].GetItem()->Unselect(); + } /* for */ + this->m_SelectedItems.Clear(); +} /* wxTreeMultiCtrl::UnselectAll(void) */ + +void wxTreeMultiCtrl::Unselect(wxTreeMultiItem const& Item) +{ + size_t ItemIndex(this->GetSelectedItemIndex(Item)); + + + if (ItemIndex != this->GetSelectedItemCount()) + { + Item.GetItem()->Unselect(); + this->m_SelectedItems.RemoveAt(ItemIndex); + this->RefreshRect(wxRect(Item.GetItem()->GetX(),Item.GetItem()->GetY(),Item.GetItem()->GetWidth(),Item.GetItem()->GetHeight())); + } /* if */ +} /* wxTreeMultiCtrl::Unselect(wxTreeMultiItem const&) */ + +void wxTreeMultiCtrl::DoFold(TreeMultiItemBase *item, bool expand, bool recursive) +{ + + // go through all node objects on this level, and expand or + // collapse them + + if(item == 0) + return; + + // if this is a node, use it to go through all the subnodes (if needed) + // if not, then just exit. + + TreeMultiItemNode *node = item->IsTreeMultiItemNode(); + if(node) + { + node->Fold(expand); + + // go recursive + if(recursive) + { + TreeMultiItemNode *p; + for(int i = 0; i < node->GetNodeCount(); i++) + { + // get node, and if a real node, then call fold + p = node->GetNode(i)->IsTreeMultiItemNode(); + if(p) + p->Fold(expand); + + // go recursive for every node + DoFold(p, expand, recursive); + } + } + } +} + +void wxTreeMultiCtrl::Exclude(const wxTreeMultiItem &item) +{ + wxCHECK2(item.IsOk(), return); + + // exclude the item, and refresh + // if already excluded, skip + + if(!item.GetItem()->IsExcluded()) + { + item.GetItem()->SetExcluded(true); + RedrawFromParentNode(item.GetItem()); + } +} + +void wxTreeMultiCtrl::Include(const wxTreeMultiItem &item) +{ + wxCHECK2(item.IsOk(), return); + + // include the item, and refresh. If not + // excluded, do nothing + + if(item.GetItem()->IsExcluded()) + { + item.GetItem()->SetExcluded(false); + RedrawFromParentNode(item.GetItem()); + } +} + +wxTreeMultiItem wxTreeMultiCtrl::GetExcludedParent(const wxTreeMultiItem &item) +{ + wxCHECK(item.IsOk(), wxTreeMultiItem(0)); + + // go find the parent (including this one) that + // can be the excluded one + + TreeMultiItemNode *n = item.GetItem()->IsTreeMultiItemNode(); + if(n && n->IsExcluded()) + return wxTreeMultiItem(n); + + n = item.GetItem()->GetParent(); + while(n) + { + if(n->IsExcluded()) + return wxTreeMultiItem(n); + else + n = n->GetParent(); + } + + return wxTreeMultiItem(0); +} + +void wxTreeMultiCtrl::OnSize(wxSizeEvent &WXUNUSED(event)) +{ + RecalculateSpanSizes(); +} + +void wxTreeMultiCtrl::OnPaint(wxPaintEvent& WXUNUSED(event) ) +{ + wxPaintDC dc(this); + + PrepareDC(dc); + + // go recursive and draw the whole visible tree. + dc.SetFont(_captionFont); + for(int i = 0; i < _root.GetNodeCount(); i++) + DrawNode(_root.GetNode(i), dc); +} + +void wxTreeMultiCtrl::DrawNode(TreeMultiItemBase *b, wxDC &dc) +{ + // go through this item .. if it is a node, draw + // the caption, else reposition the window. + + if(!b) + return; + + // forget it if this node is not visible + if(b->IsVisible()) + { + int bmpOffsetX = b->GetX() - (_gutterWidth + _iconWidth); + +#if(CHECKBOXVIEW) + // now draw the checkbox if there is any, in the proper state + if(b->GetCheckbox()) + { + DrawCheckbox(b, dc); + + // adjust the bmpOffset because we also have a checkbox + bmpOffsetX -= _checkWidth; + } +#endif + + if(b->IsTreeMultiItemNode()) + { + // draw the node icon and the caption + TreeMultiItemNode *n = (TreeMultiItemNode *)b; + + // set background of caption item + if (n->IsSelected()) + { + dc.SetBrush(*(this->m_HilightBrush)); + dc.SetPen(wxPen(this->m_HilightBrush->GetColour(),1,wxSOLID)); + } /* if */ + else + { + dc.SetBrush(wxBrush(*wxWHITE,wxSOLID)); + dc.SetPen(wxPen(*wxWHITE,1,wxSOLID)); + } /* if */ + dc.DrawRectangle(n->GetX(),n->GetY(),n->GetWidth(),n->GetHeight()); + // draw caption + dc.DrawText(n->GetCaption(), n->GetX(), n->GetY()); + + // draw the bitmap for the state + if(n->IsExpanded()) + dc.DrawBitmap(*_expandBmp, bmpOffsetX, n->GetY() + _iconDeltaY, true); + else + dc.DrawBitmap(*_collBmp, bmpOffsetX, n->GetY() + _iconDeltaY, true); + + // now go through all the subnodes + for(int i = 0; i < n->GetNodeCount(); i++) + DrawNode(n->GetNode(i), dc); + + } + } +} + +#if(CHECKBOXVIEW) + +void wxTreeMultiCtrl::DrawCheckbox(TreeMultiItemBase *b, wxDC &dc, bool convertScrolled) +{ + wxCHECK2(b, return); + + wxBitmap *bmp; + int bmpOffsetX = b->GetX() - (_gutterWidth + _iconWidth); + + switch(b->GetCheckboxState()) + { + case 0: + bmp = _uncheckBmp; + break; + case 1: + bmp = _checkBmp; + break; + default: + bmp = _tristateBmp; + break; + } + + int x, xx, y, yy; + + if(b->IsTreeMultiItemWindow()) + { + xx = x = bmpOffsetX - ((TreeMultiItemWindow *)b)->GetFrontSpacing() + _checkWidth; + yy = y = b->GetY() + _checkDeltaY; + } + else + { + xx = x = bmpOffsetX; + yy = y = b->GetY() + _checkDeltaY; + } + + if(convertScrolled) + CalcScrolledPosition(x, y, &xx, &yy); + + dc.DrawBitmap(*bmp, xx, yy, true); +} + +#endif // #if(CHECKBOXVIEW) + +void wxTreeMultiCtrl::OnKey(wxKeyEvent &event) +{ + // check if we need to traverse to upper or lower + // control in the list + if(event.GetKeyCode() == WXK_TAB) + { + wxTreeMultiItem item = GetFocus(); + if(item.IsOk()) + { + // traverse down direction + if(!event.ShiftDown()) + item = FindNextVisibleWindowItem(item.GetItem()); + //else // traverse in up direction + // item = FindPreviousVisibleWindowItem(item); + + if(item.IsOk()) + { + TreeMultiItemWindow *w = item.GetItem()->IsTreeMultiItemWindow(); + if(w) + { + wxWindow *wnd = w->GetWindow(); + wnd->SetFocus(); + } + } + } + } + else + event.Skip(); +} + +void wxTreeMultiCtrl::OnMouseClick( wxMouseEvent &event ) +{ + // react on double click and left mouse down + if(event.LeftDown() || event.LeftDClick()) + { + // get translation point + wxPoint pt( event.GetPosition() ); + + int x = 0, y = 0; + CalcUnscrolledPosition( pt.x, pt.y, &x, &y ); + + // go check if we clicked a treenode + int flags; + wxPoint p(x,y); + wxTreeMultiItem id = HitTest(p, flags); + +#if(CHECKBOXVIEW) + if(flags == wxTMC_HITTEST_CHECKBOX) + { + // toggle the checkbox, and redraw + if(id.IsOk()) + { + TreeMultiItemBase *b = id.GetItem(); + b->SetCheckboxState((b->GetCheckboxState()+1) & 0x1); + + TreeMultiItemWindow *w = b->IsTreeMultiItemWindow(); + if(w) + { + // try to force a focus on the window. This could + // be extended by searching for the first edit control + // class but for now, just a focus is tried. + w->GetWindow()->Enable(b->GetCheckboxState() == 1); + w->GetWindow()->SetFocus(); + + // draw the checkbox in the state needed + wxClientDC dc(this); + DrawCheckbox(b, dc, true); + + // TODO: determine if the upper parents should be + // tristated or not + + ScanTristateCheckstates(b); + + } + else if(b->IsTreeMultiItemNode()) + { + // descend to all the children and set the state of the parent + SetRecursiveCheckState((TreeMultiItemNode *)b, b->GetCheckboxState() == 1); + RedrawFromNode((TreeMultiItemNode *)b); + } + } + } + else +#endif // #if(CHECKBOXVIEW) + { + // react on left mouse button, to fold and on + // right for caption doubleclick + int area = -1; + +// adjust behaviour for Linux (single click = always fold) +#ifndef LINUX + if(event.LeftDClick()) + area = wxTMC_HITTEST_CAPTION; + else + area = wxTMC_HITTEST_GUTTER; +#else + area = flags; +#endif + +// Linux (single or double click -> always fold + if (id.IsOk()) + { +#ifdef LINUX + // we have a valid item, if it is a node, then fold + TreeMultiItemNode *n = id.GetItem()->IsTreeMultiItemNode(); + if(n) + { + this->SelectItem(id); + Fold(n, !n->IsExpanded()); + } /* if */ +#else + if (event.LeftDown()) + if (flags == wxTMC_HITTEST_GUTTER) + { + TreeMultiItemNode *n = id.GetItem()->IsTreeMultiItemNode(); // for some reasons also windows may have set the flag + + if (n != NULL) + Fold(n, !n->IsExpanded()); + } /* if */ + else if (flags == wxTMC_HITTEST_CAPTION) + { + TreeMultiItemNode *n = id.GetItem()->IsTreeMultiItemNode(); // for some reasons also windows may have set the flag + + if (n != NULL) + { + this->SelectItem(id); + this->RedrawFromNode(n); + } /* if */ + } /* if */ +#endif + } /* if */ + else + this->UnselectAll(); + } + } +} + +void wxTreeMultiCtrl::OnRightMouseClick(wxMouseEvent& Event) +{ + if (Event.RightDown()) + if (Event.Dragging()) + this->UnselectAll(); + else + { + // variable definitions: + int Flags; + wxPoint Point; + + // translate mouse coordinates: + CalcUnscrolledPosition(Event.GetPosition().x,Event.GetPosition().y,&(Point.x),&(Point.y)); + // check if the mouse is above the caption of an item: + wxTreeMultiItem Item(this->HitTest(Point,Flags)); // variable definition and initialization + + if (Item.IsOk() && (Flags == wxTMC_HITTEST_CAPTION)) + { + this->SelectItem(Item); + this->RedrawFromNode(Item.GetItem()->IsTreeMultiItemNode()); + Event.Skip(); // window will convert right mouse click to a context menu event or proceed with + // a right mouse click event if the context menu event cannot be processed + } /* if */ + else + this->UnselectAll(); + } /* if */ + else + this->UnselectAll(); +} /* wxTreeMultiCtrl::OnRightMouseClick(wxMouseEvent&) */ + +wxTreeMultiItem wxTreeMultiCtrl::HitTest(wxPoint const& pt, int &flags) +{ + // scan all nodes to see which one matches + TreeMultiItemBase *b = 0; + for(int i = 0; i < _root.GetNodeCount() && !b; i++) + b = FindNodeByPoint(_root.GetNode(i), pt, flags); + + if(!b) + { + // none found, reset + flags = 0; + return wxTreeMultiItem(0); + } + + // return an item + return wxTreeMultiItem(b); +} + +TreeMultiItemBase *wxTreeMultiCtrl::FindNodeByPoint(TreeMultiItemBase *b, wxPoint const& pt, int &area) +{ + wxCHECK(b, 0); + + // if this layer is not visible, return with nothing. + if(!b->IsVisible()) + return 0; + + area = 0; + + // now see if our y is matching the mouse + if(pt.y >= b->GetY() && pt.y < (b->GetY() + b->GetHeight())) + { +#if(CHECKBOXVIEW) + // if we are checkboxed, calculate the checkbox position + if(b->GetCheckbox()) + { + int extraSpacing = 0, extraWidth = 0; + + // now for a windows item, this is minus the gutter. For a normal node it is X minus checkbox + if(b->IsTreeMultiItemWindow()) + { + extraWidth = _checkWidth; + extraSpacing = ((TreeMultiItemWindow *)b)->GetFrontSpacing(); + } + else + extraSpacing = 4; + + if(pt.x > (b->GetX() - extraSpacing - _checkWidth) && pt.x < (b->GetX() - extraSpacing + extraWidth)) + { + area = wxTMC_HITTEST_CHECKBOX; + return b; + } + } +#endif + + // allrighty we have something, now where and what is it (look with x) + if(pt.x < b->GetX()) + area = wxTMC_HITTEST_GUTTER; + + /** \todo Match only the real part of the caption, window (we assume x > GetX() which is the rest) + HOWEVER the window probably doesn't propagate the click event back to the parent, so we might + leave it like this so the use can click behind a window so it will be selected. + */ + else + { + // inside area, return proper flag + if(b->IsTreeMultiItemNode()) + area = wxTMC_HITTEST_CAPTION; + else + area = wxTMC_HITTEST_WINDOW; + } + + return b; + } + else + { + // not found, let's try our children if we have some + TreeMultiItemNode *n = b->IsTreeMultiItemNode(); + if(n) + { + TreeMultiItemBase *bb = 0; + for(int i = 0; i < n->GetNodeCount() && !bb; i++) + bb = FindNodeByPoint(n->GetNode(i), pt, area); + + // keep returning result to caller + return bb; + } + } + + return 0; +} + +wxTreeMultiItem wxTreeMultiCtrl::GetFocus() +{ + wxWindow *wnd = wxWindow::FindFocus(); + + // now find window that holds this item. if not + // visible it cannot have focus (should not have) + + wxTreeMultiItem item = FindWindowNode(wnd); + if(item.IsOk() && item.GetItem()->IsVisible()) + return item; + + return wxTreeMultiItem(0); +} + +#if(CHECKBOXVIEW) + +void wxTreeMultiCtrl::SetRecursiveCheckState(TreeMultiItemNode *n, bool check) +{ + int state = 0; + if(check) + state++; + + // go check all kids on this level + for(int i = 0; i < n->GetNodeCount(); i++) + { + // check all the nodes, and go deeper + n->GetNode(i)->SetCheckboxState(state); + if(n->GetNode(i)->IsTreeMultiItemNode()) + SetRecursiveCheckState((TreeMultiItemNode *)n->GetNode(i), check); + } +} + +void wxTreeMultiCtrl::ScanTristateCheckstates(TreeMultiItemBase *b) +{ + // check from the parent on, all node entries and see if they are + // checked or cleared or scattered + TreeMultiItemNode *p = b->GetParent(); + + if(p && p->GetCheckbox()) + { + bool foundcheck = false, foundclear = false; + for(size_t i = 0; i < (size_t)p->GetNodeCount(); ++i) + { + // only evaluate when checkboxed + if(p->GetNode(i)->IsTreeMultiItemWindow() && p->GetNode(i)->GetCheckbox()) + { + // record instance of a cleared checkbox + if(!p->GetNode(i)->GetCheckboxState()) + foundclear = true; + // record instance of checked checkbox + if(p->GetNode(i)->GetCheckboxState() == 1) + foundcheck = true; + } + } + + // if we have both check and clear, go tristate + // if all clear, clear parent and if all set, then set parent + if(foundclear && !foundcheck) + p->SetCheckboxState(0); + else if(!foundclear && foundcheck) + p->SetCheckboxState(1); + else if(foundclear && foundcheck) + p->SetCheckboxState(2); + + //wxClientDC dc; + //DrawCheckbox(p, dc, false); + RedrawFromNode(p); + } +} + +#endif // #if(CHECKBOXVIEW) + +wxTreeMultiItem wxTreeMultiCtrl::InsertNode(TreeMultiItemNode* ParentPtr, size_t Position, wxString const& Caption, wxString const& Name) +{ + int extX, extY; + + TreeMultiItemNode* NodePtr(new TreeMultiItemNode(ParentPtr,Caption,Name)); // generate new node pointer + + + // continue with initializing the new node: +#if(CHECKBOXVIEW) + // if checkbox view is desired, tag this item as a checkbox + // and set the state as 'false' + NodePtr->SetCheckbox(_checkboxView); + NodePtr->SetCheckboxState(0); +#endif + // calculate the height and width + this->GetTextExtent(Caption,&extX,&extY,0,0,&(this->_captionFont)); + NodePtr->SetHeight(extY); + NodePtr->SetWidth(extX); + // finally, insert node: + if (Position < (size_t)ParentPtr->GetNodeCount()) + ParentPtr->InsertNode(NodePtr,Position); + else + ParentPtr->AddNode(NodePtr); + // return the newly created node: + return wxTreeMultiItem(NodePtr); +} /* wxTreeMultiCtrl::InsertNode(TreeMultiItemNode*, size_t, wxString const&, wxString const&) */ + +wxTreeMultiItem wxTreeMultiCtrl::InsertWindow(TreeMultiItemNode* ParentPtr, size_t Position, wxWindow* WindowPtr, wxString const& Name, wxTreeMultiWindowInfo const& Info, int Flags) +{ + int WindowFlags; + + TreeMultiItemWindow* NewWindowPtr = new TreeMultiItemWindow(ParentPtr,Name); // generate new window pointer + + + // get flags from passed variable "Flags"; in case this variable does not contain any flags use the window's information flags: + if (Flags != 0) + WindowFlags = Flags; + else + WindowFlags = Info.GetFlags(); + + // continue with initializing the new window: +#if(CHECKBOXVIEW) + // if checkbox view is desired, tag this item as a checkbox + // and set the state as 'false' + NewWindowPtr->SetCheckbox(_checkboxView); +#endif + // if style wants us to change background, set it to our background + if (WindowFlags & wxTMC_BG_ADJUST_ALL) + { + // go through all children of this window, and set the + // background of it (recursively) + this->SetWindowBackgroundColour(WindowPtr,this->GetBackgroundColour(),WindowFlags); + } /* if */ + + // set the spacing: + NewWindowPtr->SetTopSpacing(Info.GetTopSpacing()); +#if(CHECKBOXVIEW) + // make sure that the checkboxes are at least indented enough + if (this->_checkboxView) + NewWindowPtr->SetFrontSpacing(Info.GetFrontSpacing() + this->_checkWidth); + else +#endif + NewWindowPtr->SetFrontSpacing(Info.GetFrontSpacing()); + // assign finally the window: + NewWindowPtr->AssignWindow(WindowPtr); + +#if(CHECKBOXVIEW) + // set the checkbox state after the window is assigned + NewWindowPtr->SetCheckboxState(Info.GetDefaultCheckState()); +#endif + + // if the window is not visible, set hide flag + this->ShowTreeMultiWindow(NewWindowPtr,NewWindowPtr->IsVisible()); + + // finally, insert the newly constructed window: + if (Position < (size_t)ParentPtr->GetNodeCount()) + ParentPtr->InsertNode(NewWindowPtr,Position); + else + ParentPtr->AddNode(NewWindowPtr); + // return the newly created window: + return wxTreeMultiItem(NewWindowPtr); +} /* wxTreeMultiCtrl::InsertWindow(TreeMultiItemNode*, size_t, wxWindow*, wxString const&, wxTreeMultiWindowInfo const&, int) */ + +void wxTreeMultiCtrl::RedrawFromParentNode(TreeMultiItemBase *n) +{ + TreeMultiItemNode *p = 0; + if(n) + p = n->GetParent(); + + RedrawFromNode(p); +} + +void wxTreeMultiCtrl::RedrawFromNode(TreeMultiItemNode *n) +{ + static int recalcMutex = 0; + bool visible = true; + + if(recalcMutex > 0) + return; + + recalcMutex ++; + + // when node is not visible or excluded + // then don't redraw. + + if(n) + visible = n->IsVisible(); + + if(visible) + { + int h, h1,w, w1; + GetVirtualSize(&w, &h); + + UpdateAllWindowVisibility(); + RecalculateNodePositions(); + RecalculateVirtualSize(); + + // why is this needed? Because folding or collapsing can change + // the state. When the virtual area gets smaller, we need to keep + // the largest one and the other way atound. And since we do not + // know here we are folding or collapsing, we remember the biggest + GetVirtualSize(&w1, &h1); + + if(h1 > h) + h = h1; + + // only refresh the part from x,y down + if(n) + { + int x, y; + CalcScrolledPosition(n->GetX(), n->GetY(), &x, &y); + if(h - y > 0) + { + wxRect rect(0, y, w, h - y); + RefreshRect(rect); + } + else + Refresh(); + } + else + Refresh(); // do a full refresh + } + + recalcMutex --; +} + +void wxTreeMultiCtrl::RecalculateNodePositions() +{ + int currentY = _spacingY; + // go recursive on every node, and store the information in the node + + for(int i = 0; i < _root.GetNodeCount(); i++) + currentY += CalculateNodeDimensions(_root.GetNode(i), currentY, 0); +} + +int wxTreeMultiCtrl::CalculateNodeDimensions(TreeMultiItemBase *b, int currentY, int level) +{ + int gutter = (_gutterWidth * 2) + _iconWidth; + int y = 0, topSpacing = 0; + + // return same if no proper object + wxCHECK(b, 0); + +#if(CHECKBOXVIEW) + if(b->GetCheckbox()) + gutter += _checkWidth; +#endif + + // if we are not visible, skip recalculation and descending + if(b->IsVisible()) + { + b->SetY(currentY); + + // if level is 0, calculate with front gutter, else without + y = currentY + b->GetHeight(); + if(b->IsTreeMultiItemNode()) + { + TreeMultiItemNode *n = (TreeMultiItemNode *)b; + + if(level == 0) + b->SetX(gutter); + else + b->SetX(gutter + (level * (_gutterWidth + _iconWidth))); + + // now do children of this node + + for(int i = 0; i < n->GetNodeCount(); i++) + y += CalculateNodeDimensions(n->GetNode(i), y + _spacingY, level+1); + } + else if(b->IsTreeMultiItemWindow()) + { + TreeMultiItemWindow *w = (TreeMultiItemWindow *)b; + + if(level == 0) + b->SetX(gutter + w->GetFrontSpacing()); + else + b->SetX(_gutterWidth + (level * (_gutterWidth + _iconWidth)) + w->GetFrontSpacing()); + + topSpacing = w->GetTopSpacing(); + + // reposition the window + + wxWindow *wnd = w->GetWindow(); + if(wnd) + { + int x = 0, y = 0; + CalcScrolledPosition(w->GetX(), w->GetY(), &x, &y); + wnd->SetSize(x, y, w->GetWidth(), w->GetHeight()); + } + } + + if(y > 0) + return (y - currentY) + _spacingY + topSpacing; // return delta + else + return 0; + } + + return 0; // not visible, thus we skip calculations +} + +void wxTreeMultiCtrl::RecalculateSpanSizes() +{ + for(int i = 0; i < _root.GetNodeCount(); i++) + CalculateNodeSpanning(_root.GetNode(i)); +} + +void wxTreeMultiCtrl::CalculateNodeSpanning(TreeMultiItemBase *b) +{ + // return same if no proper object + wxCHECK2(b, return); + + if(b->IsTreeMultiItemNode()) + { + TreeMultiItemNode *n = (TreeMultiItemNode *)b; + + // now do children of this node + + for(int i = 0; i < n->GetNodeCount(); i++) + CalculateNodeSpanning(n->GetNode(i)); + } + else if(b->IsTreeMultiItemWindow()) + { + TreeMultiItemWindow *w = (TreeMultiItemWindow *)b; + wxWindow *wnd = w->GetWindow(); + if(wnd) + { + // if the window is spanning, we adjust the width to the max width of the control + if(w->GetHorizontalSpan()) + { + wxSize tmcsize = GetClientSize(); + int maxwidth = tmcsize.GetWidth() - w->GetX() - 8; // extract 3 for border + + wxSizer *sz = wnd->GetSizer(); + if(sz) + { + if(maxwidth < sz->GetMinSize().GetWidth()) + maxwidth = sz->GetMinSize().GetWidth(); + } + + // prevent a size of 0 + if(maxwidth < 1) + maxwidth = 1; + + // set the size + w->SetWidth(maxwidth); + wnd->SetSize(w->GetWidth(), w->GetHeight()); + + // layout by sizer (not sure if this is needed) + if(wnd->GetSizer()) + wnd->GetSizer()->Layout(); + } + } + } +} + +void wxTreeMultiCtrl::RecalculateVirtualSize() +{ + // go through all the nodes, and store the largest x and largest y + + int x = 0, y = 0; + RecalculateVirtualSizeFromNode(&_root, x, y); + + // now adjust virtual size + SetVirtualSize(x, y); + AdjustScrollbars(x, y); +} + +void wxTreeMultiCtrl::AdjustScrollbars(int x, int y) +{ + // adjust scrollbars + // courtesy of treectrlg.cpp + + y += WXTMC_PIXELS_PER_UNIT+2; // one more scrollbar unit + 2 pixels + x += WXTMC_PIXELS_PER_UNIT+2; // one more scrollbar unit + 2 pixels + int x_pos = GetScrollPos( wxHORIZONTAL ); + int y_pos = GetScrollPos( wxVERTICAL ); + SetScrollbars( WXTMC_PIXELS_PER_UNIT, WXTMC_PIXELS_PER_UNIT, x/WXTMC_PIXELS_PER_UNIT, + y/WXTMC_PIXELS_PER_UNIT, x_pos, y_pos, true ); +} + +void wxTreeMultiCtrl::RecalculateVirtualSizeFromNode(const TreeMultiItemNode *node, int &x, int &y) +{ + if(node->IsExcluded()) + return; + + // if calulate this node's dimensions + if(x < (node->GetWidth() + node->GetX())) + x = node->GetWidth() + node->GetX(); + + y = node->GetY() + node->GetHeight(); + + // if this node is collapsed, no subnodes are visible, else + // go through all subnodes as well, node needs to be included as well + if(node->IsExpanded()) + { + TreeMultiItemBase *b; + for(int i = 0; i < node->GetNodeCount(); i++) + { + b = node->GetNode(i); + + // calculate x and y + if(x < (b->GetWidth() + b->GetX())) + x = b->GetWidth() + b->GetX(); + + y = b->GetY() + b->GetHeight(); + + if(b->IsTreeMultiItemNode()) + RecalculateVirtualSizeFromNode((TreeMultiItemNode *)b, x, y); + } + } +} + +void wxTreeMultiCtrl::SetWindowBackgroundColour(wxWindow *wnd, const wxColour &col, int flags) +{ + if(wnd) + { + // if we cannot change a button, make sure all button + // classes are not changed + + wxButton *btn = wxDynamicCast(wnd, wxButton); + if(!btn || ((flags & wxTMC_BG_ADJUST_BTN) != 0)) + wnd->SetBackgroundColour(col); + + // get every window, and make the background equal to the given one + wxWindowListNode *node = wnd->GetChildren().GetFirst(); + while (node) + { + SetWindowBackgroundColour(node->GetData(), col, flags); + node = node->GetNext(); + } + } +} + +void wxTreeMultiCtrl::ShowTreeMultiWindow(TreeMultiItemWindow *window, bool show) +{ + // show or hide window + if(window && window->GetWindow()) + window->GetWindow()->Show(show); +} + +void wxTreeMultiCtrl::UpdateAllWindowVisibility() +{ + // all roots are visible, but what lies beneath ... who knows + for(int i = 0; i < _root.GetNodeCount(); i++) + UpdateTreeMultiWindowVisibility(_root.GetNode(i), true); +} + +void wxTreeMultiCtrl::UpdateTreeMultiWindowVisibility(TreeMultiItemBase *b, bool show) +{ + if(b) + { + // this is done for performance issues. IsVisible can go all + // the way up the tree to check. However if show is already + // false, there is no need to check (some higher one is collapsed) + bool showMe = show; + + if(showMe) + showMe = b->IsVisible(); + + if(b->IsTreeMultiItemWindow()) + { + // if this level must be hidden, hide + ShowTreeMultiWindow((TreeMultiItemWindow*)b, showMe); + } + else if(b->IsTreeMultiItemNode()) + { + TreeMultiItemNode *node = (TreeMultiItemNode *)b; + + // if hidden, descend and hide all windows + for(int i = 0; i < node->GetNodeCount(); i++) + UpdateTreeMultiWindowVisibility(node->GetNode(i), showMe); + } + } +} + +wxTreeMultiItem wxTreeMultiCtrl::FindItem(const wxTreeMultiItem &item, const wxString &name, bool ignoreCase, bool skipFirst) +{ + if(item.IsOk()) + { + TreeMultiItemBase *b = item.GetItem(); + + // check this item first (or not) + + if(!skipFirst) + { + if(b->GetName().IsSameAs(name, !ignoreCase)) + return wxTreeMultiItem(b); + } + + if(b->IsTreeMultiItemNode()) + { + // now check whether we are a node, then go check children + + TreeMultiItemNode *n = (TreeMultiItemNode *)b; + wxTreeMultiItem result(0); + for(int i = 0; i < n->GetNodeCount() && !result.IsOk(); i++) + result = FindItem(wxTreeMultiItem(n->GetNode(i)), name, ignoreCase, false); + + return result; + } + } + + return wxTreeMultiItem(0); +} + +wxTreeMultiItem wxTreeMultiCtrl::FindWindowNode(wxWindow *wnd, TreeMultiItemNode *n) +{ + wxCHECK(wnd, wxTreeMultiItem(0)); + + // take root node if not assigned one + + if(!n) + n = (TreeMultiItemNode *)&_root; + + // check on this level for the wxWindow pointer + + TreeMultiItemWindow *w; + wxTreeMultiItem result(0); + for(int i = 0; i < n->GetNodeCount() && !result.IsOk(); i++) + { + // if window node + w = n->GetNode(i)->IsTreeMultiItemWindow(); + if(w && w->GetWindow() == wnd) + return wxTreeMultiItem(n); + + // if node, go deeper + if(n->GetNode(i)->IsTreeMultiItemNode()) + result = FindWindowNode(wnd, (TreeMultiItemNode*)n->GetNode(i)); + } + + return result; +} + +TreeMultiItemWindow *wxTreeMultiCtrl::FindNextVisibleWindowItem(TreeMultiItemBase *b, int index) +{ + wxCHECK(b, 0); + + // check on this level, go deeper with every node we got. When a node is not + // visible anymore, skip the node. + + TreeMultiItemWindow *value = 0; + if(b->IsVisible()) + { + // if we are already searching on a node with an index + + TreeMultiItemBase *bn = 0; + TreeMultiItemNode *n = b->IsTreeMultiItemNode(); + if(n) + { + for(int i = index + 1; i < n->GetNodeCount() && !value; i++) + { + bn = n->GetNode(i); + value = bn->IsTreeMultiItemWindow(); + + // assume a node, root when not a a window + if(!value) + value = FindNextVisibleWindowItem(bn, -1); + } + + } + else + { + if(b->IsTreeMultiItemWindow()) + { + // get parent first, and locate child as ptr + TreeMultiItemNode *p = b->GetParent(); + wxCHECK(p, 0); + + // go scan the parent from the given index, if + // the index is valid else there is no child with that index + + int idx = p->Index(b); + wxCHECK(idx >= 0, 0); + + value = FindNextVisibleWindowItem(p, idx); + } + } + } + + return value; + +} + +bool wxTreeMultiCtrl::GetBooleanValue(int wndId) +{ + wxWindow *wnd = wxWindow::FindWindow(wndId); + wxCHECK(wnd, false); + + // try a radio button + wxRadioButton *b = wxDynamicCast(wnd, wxRadioButton); + if(b) + return b->GetValue(); + + // try a check box + wxCheckBox *c = wxDynamicCast(wnd, wxCheckBox); + if(c) + return c->GetValue(); + + /** \todo For custom controls we should put something in wxMultiTreeItemData class + which can be overridden to retrieve the boolean value. It will also be passed + the pointer to the window, so the derived class can figure out how to get a boolean + value. + */ + + // generate assert or just return with false + wxCHECK(0, false); +} + +void wxTreeMultiCtrl::SetBooleanValue(int wndId, bool value) +{ + wxWindow *wnd = wxWindow::FindWindow(wndId); + wxCHECK2(wnd, return); + + // try a radio button + wxRadioButton *b = wxDynamicCast(wnd, wxRadioButton); + if(b) + { + b->SetValue(value); + return; + } + + // try a check box + wxCheckBox *c = wxDynamicCast(wnd, wxCheckBox); + if(c) + { + c->SetValue(value); + return; + } + + /** \todo For custom controls we should put something in wxMultiTreeItemData class + which can be overridden to retrieve the boolean value. It will also be passed + the pointer to the window, so the derived class can figure out how to get a boolean + value. + */ + + // generate assert + wxCHECK2(0, return); +} + +void wxTreeMultiCtrl::SetTextValue(int wndId, const wxString &value) +{ + wxWindow *wnd = wxWindow::FindWindow(wndId); + wxCHECK2(wnd, return); + + // try a radio button + wxTextCtrl *t = wxDynamicCast(wnd, wxTextCtrl); + if(t) + { + t->SetValue(value); + return; + } + + /** \todo For custom controls we should put something in wxMultiTreeItemData class + which can be overridden to retrieve the boolean value. It will also be passed + the pointer to the window, so the derived class can figure out how to get a boolean + value. + */ + + // generate assert + wxCHECK2(0, return); +} + +wxString wxTreeMultiCtrl::GetTextValue(int wndId) +{ + wxWindow *wnd = wxWindow::FindWindow(wndId); + wxCHECK(wnd, wxEmptyString); + + // try a radio button + wxTextCtrl *t = wxDynamicCast(wnd, wxTextCtrl); + if(t) + return t->GetValue(); + + // try a choice box + wxChoice *c1 = wxDynamicCast(wnd, wxChoice); + if(c1) + return c1->GetStringSelection(); + + // try a combo box + wxComboBox *c2 = wxDynamicCast(wnd, wxComboBox); + if(c2) + return c2->GetStringSelection(); + + // try a listbox + wxListBox *l = wxDynamicCast(wnd, wxListBox); + if(l) + return l->GetStringSelection(); + + /** \todo For custom controls we should put something in wxMultiTreeItemData class + which can be overridden to retrieve the boolean value. It will also be passed + the pointer to the window, so the derived class can figure out how to get a boolean + value. + */ + + // generate assert or just return with string + wxCHECK(0, wxEmptyString); +} + +int wxTreeMultiCtrl::GetSelectionValue(int wndId) +{ + wxWindow *wnd = wxWindow::FindWindow(wndId); + wxCHECK(wnd, -1); + + // try a choice box + wxChoice *c1 = wxDynamicCast(wnd, wxChoice); + if(c1) + return c1->GetSelection(); + + // try a combo box + wxComboBox *c2 = wxDynamicCast(wnd, wxComboBox); + if(c2) + return c2->GetSelection(); + + // try a listbox + wxListBox *l = wxDynamicCast(wnd, wxListBox); + if(l) + return l->GetSelection(); + + /** \todo For custom controls we should put something in wxMultiTreeItemData class + which can be overridden to retrieve the boolean value. It will also be passed + the pointer to the window, so the derived class can figure out how to get a boolean + value. + */ + + // generate assert or just return with string + wxCHECK(0, -1); +} + +void wxTreeMultiCtrl::GetSelectionValues(int wndId, wxArrayInt &sels) +{ + sels.Clear(); + + wxWindow *wnd = wxWindow::FindWindow(wndId); + wxCHECK2(wnd, return); + + // try a listbox + wxListBox *l = wxDynamicCast(wnd, wxListBox); + if(l) + { + l->GetSelections(sels); + return; + } + + /** \todo For custom controls we should put something in wxMultiTreeItemData class + which can be overridden to retrieve the boolean value. It will also be passed + the pointer to the window, so the derived class can figure out how to get a boolean + value. + */ + + // generate assert or just return with string + wxCHECK2(0, return); +} + +void wxTreeMultiCtrl::SetSelectionValue(int wndId, int sel) +{ + wxWindow *wnd = wxWindow::FindWindow(wndId); + wxCHECK2(wnd, return); + + // try a choice box + wxChoice *c1 = wxDynamicCast(wnd, wxChoice); + if(c1) + { + c1->SetSelection(sel); + return; + } + + // try a combo box + wxComboBox *c2 = wxDynamicCast(wnd, wxComboBox); + if(c2) + { + c2->SetSelection(sel); + return; + } + + // try a listbox + wxListBox *l = wxDynamicCast(wnd, wxListBox); + if(l) + { + l->SetSelection(sel); + return; + } + + /** \todo For custom controls we should put something in wxMultiTreeItemData class + which can be overridden to retrieve the boolean value. It will also be passed + the pointer to the window, so the derived class can figure out how to get a boolean + value. + */ + + // generate assert or just return with string + wxCHECK2(0, return); +} + + +wxTreeMultiItem wxTreeMultiCtrl::GetParent(wxTreeMultiItem const& item) const +{ + // check if valid or root item has been passed, both do not have parents: + if (!(item.IsOk()) || item.GetItem()->IsTreeMultiItemRoot()) + return wxTreeMultiItem(); + else + return wxTreeMultiItem(item.GetItem()->GetParent()); // GetParent() returns a valid pointer in case of a root item!! + // therefore, the check if the passed item is a root item is necessary +} /* wxTreeMultiCtrl::GetParent(wxTreeMultiItem const& item) const */ + +wxTreeMultiItem wxTreeMultiCtrl::GetFirstChild(const wxTreeMultiItem &item, int &cookie) const +{ + if(item.IsNodeItem()) + { + TreeMultiItemNode *n = (TreeMultiItemNode *)item.GetItem(); + + if(n->GetNodeCount() > 0) + { + cookie = 0; + return wxTreeMultiItem(n->GetNode(0)); + } + } + + // no children or no valid node + cookie = -1; + return wxTreeMultiItem(0); +} + +wxTreeMultiItem wxTreeMultiCtrl::GetNextChild(const wxTreeMultiItem &item, int &cookie) const +{ + if(item.IsNodeItem()) + { + TreeMultiItemNode *n = (TreeMultiItemNode *)item.GetItem(); + + if(cookie >= 0 && cookie < (n->GetNodeCount()-1)) + { + // increment cookie, return node + cookie ++; + return wxTreeMultiItem(n->GetNode(cookie)); + } + } + + // end of query, or no valid node + cookie = -1; + return wxTreeMultiItem(0); +} + +wxTreeMultiItem wxTreeMultiCtrl::GetLastChild(const wxTreeMultiItem &item) const +{ + if(item.IsNodeItem()) + { + TreeMultiItemNode *n = (TreeMultiItemNode *)item.GetItem(); + + if(n->GetNodeCount() > 0) + return wxTreeMultiItem(n->GetNode(n->GetNodeCount()-1)); + } + + return wxTreeMultiItem(0); +} + +wxTreeMultiItem wxTreeMultiCtrl::GetNextSibling(wxTreeMultiItem const& item) const +{ + // check if a valid item has been passed: + if (!(item.IsOk())) + return wxTreeMultiItem(); + + TreeMultiItemNode* ParentPtr(item.GetItem()->GetParent()); + + + if (ParentPtr != NULL) // the parent pointer is only null if the passed item is the root + { + // find the current item in the parent's list; the next sibling has an index that is one higher than the one of the current item: + int NextItemIndex(ParentPtr->Index(item.GetItem())+1); // variable definition and initialization + + if (NextItemIndex < ParentPtr->GetNodeCount()) + return ParentPtr->GetNode(NextItemIndex); + else + return wxTreeMultiItem(); + } /* if */ + else + return wxTreeMultiItem(); +} /* wxTreeMultiCtrl::GetNextSibling(wxTreeMultiItem const&) const */ + +wxTreeMultiItem wxTreeMultiCtrl::GetPrevSibling(wxTreeMultiItem const& item) const +{ + // check if a valid item has been passed: + if (!(item.IsOk())) + return wxTreeMultiItem(); + + TreeMultiItemNode* ParentPtr(item.GetItem()->GetParent()); + + + if (ParentPtr != NULL) + { + // find the current item in the parent's list; the next sibling has an index that is one higher than the one of the current item: + int PrevItemIndex(ParentPtr->Index(item.GetItem())-1); // variable definition and initialization + + if (PrevItemIndex >= 0) + return ParentPtr->GetNode(PrevItemIndex); + else + return wxTreeMultiItem(); + } /* if */ + else + return wxTreeMultiItem(); +} /* wxTreeMultiCtrl::GetPrevSibling(wxTreeMultiItem const&) const */ + +wxTreeMultiItem wxTreeMultiCtrl::GetNext(wxTreeMultiItem const& item) const +{ + // check if a valid item has been passed: + if (!(item.IsOk())) + return wxTreeMultiItem(); + + TreeMultiItemNode* NodePtr(item.GetItem()->IsTreeMultiItemNode()); // variable definition and initialization + + if ((NodePtr != NULL) && (NodePtr->GetNodeCount() > 0)) + return wxTreeMultiItem(NodePtr->First()); + else + { + // variable definitions and initializations: + wxTreeMultiItem Parent(item); + wxTreeMultiItem Sibling; + + do + { + Sibling = this->GetNextSibling(Parent); // try to find next sibling + Parent = this->GetParent(Parent); // get next ancestor + } while (!(Sibling.IsOk()) && Parent.IsOk()); + // in case the loop ended with Sibling.IsOk() "Sibling" contains a valid sibling otherwise an invalid + return Sibling; + } /* if */ +} /* wxTreeMultiCtrl::GetNextSibling(wxTreeMultiItem const&) const */ + +wxTreeMultiItem wxTreeMultiCtrl::GetPrevious(wxTreeMultiItem const& item) const +{ + // check if a valid item has been passed: + if (!(item.IsOk())) + return wxTreeMultiItem(); + + TreeMultiItemNode* NodePtr(item.GetItem()->IsTreeMultiItemNode()); // variable definition and initialization + + if ((NodePtr != NULL) && (NodePtr->GetNodeCount() > 0)) + return wxTreeMultiItem(NodePtr->Last()); + else + { + // variable definitions and initializations: + wxTreeMultiItem Parent(item); + wxTreeMultiItem Sibling; + + do + { + Sibling = this->GetPrevSibling(Parent); // try to find next sibling + Parent = this->GetParent(Parent); // get next ancestor + } while (!(Sibling.IsOk()) && Parent.IsOk()); + // in case the loop ended with Sibling.IsOk() "Sibling" contains a valid sibling otherwise an invalid + return Sibling; + } /* if */ +} /* wxTreeMultiCtrl::GetPrevious(wxTreeMultiItem const&) const */ + +// WDR: handler implementations for wxTreeMultiCtrl + +void wxTreeMultiCtrl::OnDraw(wxDC& dc) +{ + // go recursive and draw the whole visible tree. + dc.SetFont(_captionFont); + for(int i = 0; i < _root.GetNodeCount(); i++) + DrawNode(_root.GetNode(i), dc); +} /* */ diff --git a/kernel/src/ThirdParty/wx/treemultictrl/wxTreeMultiCtrl.h b/kernel/src/ThirdParty/wx/treemultictrl/wxTreeMultiCtrl.h index d997e3e..e2c2123 100644 --- a/kernel/src/ThirdParty/wx/treemultictrl/wxTreeMultiCtrl.h +++ b/kernel/src/ThirdParty/wx/treemultictrl/wxTreeMultiCtrl.h @@ -1,11 +1,11 @@ -//--------------------------------------------------------------------------- -// $RCSfile: wxTreeMultiCtrl.h,v $ -// $Source: /cvs/creatis/bbtk/kernel/src/ThirdParty/wx/treemultictrl/wxTreeMultiCtrl.h,v $ -// $Revision: 1.1 $ -// $Date: 2008/03/28 13:42:19 $ -//--------------------------------------------------------------------------- -// Author: Jorgen Bodde -// Copyright: (c) Jorgen Bodde +//--------------------------------------------------------------------------- +// $RCSfile: wxTreeMultiCtrl.h,v $ +// $Source: /cvs/creatis/bbtk/kernel/src/ThirdParty/wx/treemultictrl/wxTreeMultiCtrl.h,v $ +// $Revision: 1.2 $ +// $Date: 2009/10/05 22:44:50 $ +//--------------------------------------------------------------------------- +// Author: Jorgen Bodde +// Copyright: (c) Jorgen Bodde // License: wxWidgets License //--------------------------------------------------------------------------- @@ -184,13 +184,13 @@ public: wxTreeMultiItem(TreeMultiItemBase *ptr) { _item = ptr; - }; - - // Returns the TreeMultiItemBase class. This shoult *NOT* be - // used if you don't know what you are doing! This means never use it. */ - TreeMultiItemBase *GetItem() const { - return _item; - }; + }; + + // Returns the TreeMultiItemBase class. This shoult *NOT* be + // used if you don't know what you are doing! This means never use it. */ + TreeMultiItemBase *GetItem() const { + return _item; + }; #endif // _NO_DOXYGEN_ @@ -198,21 +198,21 @@ public: classes from the wxTreeMultiCtrl. */ void operator=(const wxTreeMultiItem &item) { - _item = item._item; - }; - - /** Equality operator. It returns true if the items are identical or if both items are invalid. */ - bool operator==(wxTreeMultiItem const& item) const {return (this->GetItem() == item.GetItem());} - - /** Inequality operator. It returns true if the items are different or one of them is invalid. */ - bool operator!=(wxTreeMultiItem const& item) const {return (this->GetItem() != item.GetItem());} - - /** Returns the parent of the current wxTreeMultiItem. This means the wxTreeMultiNode is returned. It can - be useful to check or clear the checkbox at this level. */ - wxTreeMultiItem GetParent() const{ - wxCHECK(IsOk(), wxTreeMultiItem(0)); - return wxTreeMultiItem(_item->GetParent()); - }; + _item = item._item; + }; + + /** Equality operator. It returns true if the items are identical or if both items are invalid. */ + bool operator==(wxTreeMultiItem const& item) const {return (this->GetItem() == item.GetItem());} + + /** Inequality operator. It returns true if the items are different or one of them is invalid. */ + bool operator!=(wxTreeMultiItem const& item) const {return (this->GetItem() != item.GetItem());} + + /** Returns the parent of the current wxTreeMultiItem. This means the wxTreeMultiNode is returned. It can + be useful to check or clear the checkbox at this level. */ + wxTreeMultiItem GetParent() const{ + wxCHECK(IsOk(), wxTreeMultiItem(0)); + return wxTreeMultiItem(_item->GetParent()); + }; /** Validates if the wxTreeMultiItem is a valid instance to use in the wxTreeMultiCtrl. Returns TRUE when there is a member value is associated with it, or FALSE when not. This value can also be checked when this class is returned from a wxTreeMultiCtrl operation. For example: @@ -288,32 +288,32 @@ public: Use wxTreeMultiCtrl::GetExcludedParent() to get the node that hides this one. */ bool IsExcluded() { wxCHECK(_item, false); - return _item->IsExcluded(); - } - - /** Returns true if the item is selected. - Please note that currently only nodes can be selected. - */ - bool IsSelected(void) const - { - wxCHECK(this->GetItem(),false); - return this->GetItem()->IsSelected(); - } - /** Returns true if this node is visible. Please note that when this node is a child node of a collapsed - node, it is not visible. Also if this node is a child node of an excluded node, it is also not visible. - It does NOT return false when it's drawn somewhere outside of the visible area. */ + return _item->IsExcluded(); + } + + /** Returns true if the item is selected. + Please note that currently only nodes can be selected. + */ + bool IsSelected(void) const + { + wxCHECK(this->GetItem(),false); + return this->GetItem()->IsSelected(); + } + /** Returns true if this node is visible. Please note that when this node is a child node of a collapsed + node, it is not visible. Also if this node is a child node of an excluded node, it is also not visible. + It does NOT return false when it's drawn somewhere outside of the visible area. */ bool IsVisible() { wxCHECK(_item, false); return _item->IsVisible(); } - -}; - -WX_DECLARE_OBJARRAY(wxTreeMultiItem,wxArrayTreeMultiItem); - -/** \class wxTreeMultiWindowInfo - \ingroup classes - \brief This class contains information for every Window node to be added. + +}; + +WX_DECLARE_OBJARRAY(wxTreeMultiItem,wxArrayTreeMultiItem); + +/** \class wxTreeMultiWindowInfo + \ingroup classes + \brief This class contains information for every Window node to be added. This class can be used to modify the behaviour of the Window node to be added, and can be reused to pass along upon every wxTreeMultiCtrl::AppendWindow call. For example: @@ -362,25 +362,25 @@ private: #if(CHECKBOXVIEW) /** Checkstate for checkboxed property sheets */ bool _checkState; -#endif - -public: -#if(CHECKBOXVIEW) - wxTreeMultiWindowInfo(int flags, int frontSpacing, int topSpacing, bool checkState = false) - : _flags(flags) - , _frontSpacing(frontSpacing) - , _frontSpacingOrg(frontSpacing) - , _topSpacing(topSpacing) - , _checkState(checkState) -#else - wxTreeMultiWindowInfo(int flags, int frontSpacing, int topSpacing) - : _flags(flags) - , _frontSpacing(frontSpacing) - , _frontSpacingOrg(frontSpacing) - , _topSpacing(topSpacing) -#endif - { - // constructor +#endif + +public: +#if(CHECKBOXVIEW) + wxTreeMultiWindowInfo(int flags, int frontSpacing, int topSpacing, bool checkState = false) + : _flags(flags) + , _frontSpacing(frontSpacing) + , _frontSpacingOrg(frontSpacing) + , _topSpacing(topSpacing) + , _checkState(checkState) +#else + wxTreeMultiWindowInfo(int flags, int frontSpacing, int topSpacing) + : _flags(flags) + , _frontSpacing(frontSpacing) + , _frontSpacingOrg(frontSpacing) + , _topSpacing(topSpacing) +#endif + { + // constructor } /** Adds indent to original front spacing and increments it with that value (quick extra indent). The original value of FrontSpacing (see SetFrontSpacing() gets indented by multiplying @@ -574,22 +574,22 @@ private: bool _checkboxView; /** Height and weight for checkbox */ - int _checkHeight, _checkWidth; -#endif - - /** brush for highlighting nodes */ - wxBrush* m_HilightBrush; - - /** This captionFont is made equal to the font of the wxScrolledWindow. As extra the bold face - is set on it when this is wanted by the user (see flags) */ - wxFont _captionFont; - - /** list of selected items */ - wxArrayTreeMultiItem m_SelectedItems; - - /** Does the actual collapsing / expanding. So that Expand and Collapse aren't using the same code twice */ - void DoFold(TreeMultiItemBase *item, bool expand, bool recursive); - + int _checkHeight, _checkWidth; +#endif + + /** brush for highlighting nodes */ + wxBrush* m_HilightBrush; + + /** This captionFont is made equal to the font of the wxScrolledWindow. As extra the bold face + is set on it when this is wanted by the user (see flags) */ + wxFont _captionFont; + + /** list of selected items */ + wxArrayTreeMultiItem m_SelectedItems; + + /** Does the actual collapsing / expanding. So that Expand and Collapse aren't using the same code twice */ + void DoFold(TreeMultiItemBase *item, bool expand, bool recursive); + /** Redraws and recalculates the nodes from the current node. It will also clear all 'dirty' flags when they are recalculated */ void RedrawFromNode(TreeMultiItemNode *n); @@ -632,31 +632,31 @@ private: /** Recalculates totally needed virtual size of the wxTreeMultiCtrl. It will scan for the largest window, with the biggest size, and report that back */ - void RecalculateVirtualSize(); - - /** Adjusts scrollbars in window, usually done after virtual size (x,y) is recalculated */ - using wxScrolledWindow::AdjustScrollbars; - virtual void AdjustScrollbars(int x, int y); - - /** Recalculates and accumulates largest x and y */ + void RecalculateVirtualSize(); + + /** Adjusts scrollbars in window, usually done after virtual size (x,y) is recalculated */ + using wxScrolledWindow::AdjustScrollbars; + virtual void AdjustScrollbars(int x, int y); + + /** Recalculates and accumulates largest x and y */ void RecalculateVirtualSizeFromNode(const TreeMultiItemNode *node, int &x, int &y); - - /** Scans for TreeMultiItemBase node that contains x,y and in area returns a hittest constant to - indicate what matched */ - TreeMultiItemBase *FindNodeByPoint(TreeMultiItemBase *b, wxPoint const& pt, int &area); - - /** Scans for TreeMultiItemWindow that holds the wxWindow pointer. Does not scan in panels or does - a deep search. Reason, this function is used to advance to next TreeMultiItemWindow for focus + + /** Scans for TreeMultiItemBase node that contains x,y and in area returns a hittest constant to + indicate what matched */ + TreeMultiItemBase *FindNodeByPoint(TreeMultiItemBase *b, wxPoint const& pt, int &area); + + /** Scans for TreeMultiItemWindow that holds the wxWindow pointer. Does not scan in panels or does + a deep search. Reason, this function is used to advance to next TreeMultiItemWindow for focus on this wxScrolledWindow. If a sub window is found, it will skip other windows on that same level */ wxTreeMultiItem FindWindowNode(wxWindow *wnd, TreeMultiItemNode *n = 0); /** Finds next visible window item in chain. If not found use FindFirstVisibleItem to start from the - beginning */ - TreeMultiItemWindow *FindNextVisibleWindowItem(TreeMultiItemBase *b, int index = -1); - - /** Adjust the centering of the bitmap icons (collapse / expand) when the caption font changes. They need to - be centered in the middle of the font, so a bit of deltaY adjustment is needed */ - void AdjustIconsDeltaY(); + beginning */ + TreeMultiItemWindow *FindNextVisibleWindowItem(TreeMultiItemBase *b, int index = -1); + + /** Adjust the centering of the bitmap icons (collapse / expand) when the caption font changes. They need to + be centered in the middle of the font, so a bit of deltaY adjustment is needed */ + void AdjustIconsDeltaY(); /** Calculate the spanning of the individual nodes */ void CalculateNodeSpanning(TreeMultiItemBase *b); @@ -669,47 +669,47 @@ private: will get tristate if the checked items are scattered (some are some aren't). If all nodes in this node are checked, the parent node gets checked all the way up to the last one that matches criteria. If all are cleared, parent node gets cleared */ - void ScanTristateCheckstates(TreeMultiItemBase *b); -#endif - - /** \name Private add and delete methods - @{ - */ - - /** Inserts a node into the parent's node at the specified position. - As this is a private method error checking is limited. Therefore, it has to be guaranteed that this method - is only called with a valid parent node pointer. - The position is zero based. In case the position is equal or larger than the current number of - parent's elements the new node is appended. - The newly inserted node is being returned. - */ - wxTreeMultiItem InsertNode(TreeMultiItemNode* ParentPtr, size_t Position, wxString const& Caption, wxString const& Name); - - /** Inserts a window into the parent's node at the specified position. - As this is a private method error checking is limited. Therefore, it has to be guaranteed that this method - is only called with a valid parent node and window pointer. - The position is zero based. In case the position is equal or larger than the current number of - parent's elements the new node is appended. - The newly inserted window is being returned. - */ - wxTreeMultiItem InsertWindow(TreeMultiItemNode* ParentPtr, size_t Position, wxWindow* WindowPtr, wxString const& Name, - wxTreeMultiWindowInfo const& Info, int Flags); - - /** @} - */ -private: - void Init(); - + void ScanTristateCheckstates(TreeMultiItemBase *b); +#endif + + /** \name Private add and delete methods + @{ + */ + + /** Inserts a node into the parent's node at the specified position. + As this is a private method error checking is limited. Therefore, it has to be guaranteed that this method + is only called with a valid parent node pointer. + The position is zero based. In case the position is equal or larger than the current number of + parent's elements the new node is appended. + The newly inserted node is being returned. + */ + wxTreeMultiItem InsertNode(TreeMultiItemNode* ParentPtr, size_t Position, wxString const& Caption, wxString const& Name); + + /** Inserts a window into the parent's node at the specified position. + As this is a private method error checking is limited. Therefore, it has to be guaranteed that this method + is only called with a valid parent node and window pointer. + The position is zero based. In case the position is equal or larger than the current number of + parent's elements the new node is appended. + The newly inserted window is being returned. + */ + wxTreeMultiItem InsertWindow(TreeMultiItemNode* ParentPtr, size_t Position, wxWindow* WindowPtr, wxString const& Name, + wxTreeMultiWindowInfo const& Info, int Flags); + + /** @} + */ +private: + void Init(); + // handlers //--------- - //virtual void OnDraw(wxDC& dc); - void OnPaint(wxPaintEvent &event); - void OnMouseClick (wxMouseEvent& event); - void OnRightMouseClick(wxMouseEvent& Event); - void OnKey(wxKeyEvent &event); - void OnSize(wxSizeEvent &event); - + //virtual void OnDraw(wxDC& dc); + void OnPaint(wxPaintEvent &event); + void OnMouseClick (wxMouseEvent& event); + void OnRightMouseClick(wxMouseEvent& Event); + void OnKey(wxKeyEvent &event); + void OnSize(wxSizeEvent &event); + /** Recalculates the spanning controls */ void RecalculateSpanSizes(); @@ -765,66 +765,66 @@ public: */ /** Adds a root node to the wxTreeMultiItem. There can be many root nodes. Use this wxTreeMultiNode pointer to add - more subnodes to it. */ - wxTreeMultiItem AddRoot(const wxString &caption, const wxString &name = wxEmptyString); - - /** Adds a window to the tree control. Use this wxTreeMultiItem method to add a window class to the - current wxTreeMultiItem. The wxTreeMultiItem must point to a Node class. If this is not the case - an empty wxTreeMultiItem is returned. The mask is used to override the mask settings of the - wxTreeMultiWindowInfo class. This can be handy to set or clear extra flags only needed for certain - situations */ - wxTreeMultiItem AppendWindow(const wxTreeMultiItem &ParentItem, wxWindow *window = NULL, const wxString &name = wxEmptyString, - wxTreeMultiWindowInfo const& info = wxTreeMultiWindowInfoDefault, int flags = 0); - - /** Adds a window to the tree control. Use this method to add a window class at the specified position - of the parent's wxTreeMultiItem. In case the position is smaller than the current number of children all elements - are shifted upwards, otherwise the new window is appended to the parent's wxTreeMultiItem. - The parent wxTreeMultiItem must point to a Node class. If this is not the case an - empty wxTreeMultiItem is returned. - */ - wxTreeMultiItem InsertWindow(wxTreeMultiItem const& ParentItem, size_t Position, wxWindow *window = NULL, wxString const& Name = wxEmptyString, - wxTreeMultiWindowInfo const& info = wxTreeMultiWindowInfoDefault, int flags = 0); - - /** Adds a window to the tree control. Use this method to add a window class as the first element - of the parent's wxTreeMultiItem. The parent wxTreeMultiItem must point to a Node class. If this is not the case an - empty wxTreeMultiItem is returned. - */ - wxTreeMultiItem PrependWindow(wxTreeMultiItem const& ParentItem, wxWindow *window = NULL, const wxString &name = wxEmptyString, - wxTreeMultiWindowInfo const& info = wxTreeMultiWindowInfoDefault, int flags = 0); - - /** Adds a node to the tree control. Use this wxTreeMultiItem method to add a recursive subnode class as the last element - of the parent's wxTreeMultiItem. The parent wxTreeMultiItem must point to a Node class. If this is not the case - an empty wxTreeMultiItem is returned. A node can contain multiple nodes or window classes */ - wxTreeMultiItem AppendNode(wxTreeMultiItem const& ParentItem, const wxString &caption = wxEmptyString, - const wxString &name = wxEmptyString); - - /** Adds a node to the tree control. Use this method to add a recursive subnode class at the specified position - of the parent's wxTreeMultiItem. In case the position is smaller than the current number of nodes all elements - are shifted upwards, otherwise the new node is appended to the parent's wxTreeMultiItem. - The parent wxTreeMultiItem must point to a Node class. If this is not the case an - empty wxTreeMultiItem is returned. A node can contain multiple nodes or window classes. - */ - wxTreeMultiItem InsertNode(wxTreeMultiItem const& ParentItem, size_t Position, wxString const& caption, wxString const& name); - - /** Adds a node to the tree control. Use this method to add a recursive subnode class as the first element - of the parent's wxTreeMultiItem. The parent wxTreeMultiItem must point to a Node class. If this is not the case an - empty wxTreeMultiItem is returned. A node can contain multiple nodes or window classes. - */ - wxTreeMultiItem PrependNode(wxTreeMultiItem const& ParentItem, wxString const& caption = wxEmptyString, - wxString const& name = wxEmptyString); - - /** Delete item from the tree control. Whenever it is present, delete it. If not, return false. After - deletion the wxTreeMultiItem is 0, thus IsOk will return false */ - bool Delete(wxTreeMultiItem &item); - - /** Deletes all the items from the wxTreeMultiCtrl. */ - void DeleteAllItems(void) - { - this->_root.Clear(); - this->m_SelectedItems.Clear(); - Refresh(); - }; - + more subnodes to it. */ + wxTreeMultiItem AddRoot(const wxString &caption, const wxString &name = wxEmptyString); + + /** Adds a window to the tree control. Use this wxTreeMultiItem method to add a window class to the + current wxTreeMultiItem. The wxTreeMultiItem must point to a Node class. If this is not the case + an empty wxTreeMultiItem is returned. The mask is used to override the mask settings of the + wxTreeMultiWindowInfo class. This can be handy to set or clear extra flags only needed for certain + situations */ + wxTreeMultiItem AppendWindow(const wxTreeMultiItem &ParentItem, wxWindow *window = NULL, const wxString &name = wxEmptyString, + wxTreeMultiWindowInfo const& info = wxTreeMultiWindowInfoDefault, int flags = 0); + + /** Adds a window to the tree control. Use this method to add a window class at the specified position + of the parent's wxTreeMultiItem. In case the position is smaller than the current number of children all elements + are shifted upwards, otherwise the new window is appended to the parent's wxTreeMultiItem. + The parent wxTreeMultiItem must point to a Node class. If this is not the case an + empty wxTreeMultiItem is returned. + */ + wxTreeMultiItem InsertWindow(wxTreeMultiItem const& ParentItem, size_t Position, wxWindow *window = NULL, wxString const& Name = wxEmptyString, + wxTreeMultiWindowInfo const& info = wxTreeMultiWindowInfoDefault, int flags = 0); + + /** Adds a window to the tree control. Use this method to add a window class as the first element + of the parent's wxTreeMultiItem. The parent wxTreeMultiItem must point to a Node class. If this is not the case an + empty wxTreeMultiItem is returned. + */ + wxTreeMultiItem PrependWindow(wxTreeMultiItem const& ParentItem, wxWindow *window = NULL, const wxString &name = wxEmptyString, + wxTreeMultiWindowInfo const& info = wxTreeMultiWindowInfoDefault, int flags = 0); + + /** Adds a node to the tree control. Use this wxTreeMultiItem method to add a recursive subnode class as the last element + of the parent's wxTreeMultiItem. The parent wxTreeMultiItem must point to a Node class. If this is not the case + an empty wxTreeMultiItem is returned. A node can contain multiple nodes or window classes */ + wxTreeMultiItem AppendNode(wxTreeMultiItem const& ParentItem, const wxString &caption = wxEmptyString, + const wxString &name = wxEmptyString); + + /** Adds a node to the tree control. Use this method to add a recursive subnode class at the specified position + of the parent's wxTreeMultiItem. In case the position is smaller than the current number of nodes all elements + are shifted upwards, otherwise the new node is appended to the parent's wxTreeMultiItem. + The parent wxTreeMultiItem must point to a Node class. If this is not the case an + empty wxTreeMultiItem is returned. A node can contain multiple nodes or window classes. + */ + wxTreeMultiItem InsertNode(wxTreeMultiItem const& ParentItem, size_t Position, wxString const& caption, wxString const& name); + + /** Adds a node to the tree control. Use this method to add a recursive subnode class as the first element + of the parent's wxTreeMultiItem. The parent wxTreeMultiItem must point to a Node class. If this is not the case an + empty wxTreeMultiItem is returned. A node can contain multiple nodes or window classes. + */ + wxTreeMultiItem PrependNode(wxTreeMultiItem const& ParentItem, wxString const& caption = wxEmptyString, + wxString const& name = wxEmptyString); + + /** Delete item from the tree control. Whenever it is present, delete it. If not, return false. After + deletion the wxTreeMultiItem is 0, thus IsOk will return false */ + bool Delete(wxTreeMultiItem &item); + + /** Deletes all the items from the wxTreeMultiCtrl. */ + void DeleteAllItems(void) + { + this->_root.Clear(); + this->m_SelectedItems.Clear(); + Refresh(); + }; + /** Deletes all children of the current node. The wxTreeMultiItem needs to be of type Node to do this. Call GetParentNode to get the parent wxTreeMultiItem which is always a node. */ void DeleteChildren(const wxTreeMultiItem &item); @@ -863,61 +863,61 @@ public: Collapse(item, false); }; - /** @} - */ - - /** @name Selection manipulation - These methods allow you to select, unselect or test wxTreeMultiItems on selection. - Currently only items of type Node can be manipulated. - @{ - */ - - /** Returns the number of selected items. */ - size_t GetSelectedItemCount(void) const {return this->m_SelectedItems.GetCount();} - - /** Returns the first selected item. - If there is no selected item an invalid tree multi item is returned. - */ - wxTreeMultiItem GetFirstSelectedItem(void) const; - - /** Returns the last selected item. - If there is no selected item an invalid tree multi item is returned. - */ - wxTreeMultiItem GetLastSelectedItem(void) const; - - /** Returns a selected item with the specified index. - If there is no selected item with the passed index an invalide tree multi item is returned. - */ - wxTreeMultiItem GetSelectedItem(size_t Index) const; - - /** Returns the index of the selected item. - In case the item is not selected "GetSelectedItemCount()" - which is an invalid index - is returned. - */ - size_t GetSelectedItemIndex(wxTreeMultiItem const& Item) const; - - /** Selects the specified item AND in case - - UnselectOthers is set all other selected items are going to be unselected; - - ExpandSelection is set all items between the last selected item and the passed item - are selected, too (in case there this is the first selection all items between the first root - and the passed item are selected). - If the passed item is already selected the other parameters are ignored. - Please not that currently only nodes can be selected, therefore, if any other item is passed nothing will happen. - */ - void SelectItem(wxTreeMultiItem const& Item, bool UnselectOthers=true, bool ExpandSelection=false); - - /** Unselect all selected items. */ - void UnselectAll(void); - - /** Unselect specified item */ - void Unselect(wxTreeMultiItem const& Item); - - /** @} - */ - - - /** \name Visibility manipulation - These methods allow you to manipulate a certain wxTreeMultiItem to temporarily exclude or to include - the node from drawing. Whenever it is excluded, all operations can still be performed, however + /** @} + */ + + /** @name Selection manipulation + These methods allow you to select, unselect or test wxTreeMultiItems on selection. + Currently only items of type Node can be manipulated. + @{ + */ + + /** Returns the number of selected items. */ + size_t GetSelectedItemCount(void) const {return this->m_SelectedItems.GetCount();} + + /** Returns the first selected item. + If there is no selected item an invalid tree multi item is returned. + */ + wxTreeMultiItem GetFirstSelectedItem(void) const; + + /** Returns the last selected item. + If there is no selected item an invalid tree multi item is returned. + */ + wxTreeMultiItem GetLastSelectedItem(void) const; + + /** Returns a selected item with the specified index. + If there is no selected item with the passed index an invalide tree multi item is returned. + */ + wxTreeMultiItem GetSelectedItem(size_t Index) const; + + /** Returns the index of the selected item. + In case the item is not selected "GetSelectedItemCount()" - which is an invalid index - is returned. + */ + size_t GetSelectedItemIndex(wxTreeMultiItem const& Item) const; + + /** Selects the specified item AND in case + - UnselectOthers is set all other selected items are going to be unselected; + - ExpandSelection is set all items between the last selected item and the passed item + are selected, too (in case there this is the first selection all items between the first root + and the passed item are selected). + If the passed item is already selected the other parameters are ignored. + Please not that currently only nodes can be selected, therefore, if any other item is passed nothing will happen. + */ + void SelectItem(wxTreeMultiItem const& Item, bool UnselectOthers=true, bool ExpandSelection=false); + + /** Unselect all selected items. */ + void UnselectAll(void); + + /** Unselect specified item */ + void Unselect(wxTreeMultiItem const& Item); + + /** @} + */ + + + /** \name Visibility manipulation + These methods allow you to manipulate a certain wxTreeMultiItem to temporarily exclude or to include + the node from drawing. Whenever it is excluded, all operations can still be performed, however the node may not be visible. @{ */ @@ -943,13 +943,13 @@ public: \li wxTMC_HITTEST_GUTTER If the front part of the item is clicked (where the node is) \li wxTMC_HITTEST_WINDOW If located in the window area \li wxTMC_HITTEST_CAPTION If located on the caption of the MultiTreeItemNode - - Returned is the item which is located under the mouse, or none (IsOk = false) if - no item under the mouse */ - wxTreeMultiItem HitTest(wxPoint const& pt, int &flags); - - /** @name Find methods - These methods are used for finding a node in the wxTreeMultiCtrl. + + Returned is the item which is located under the mouse, or none (IsOk = false) if + no item under the mouse */ + wxTreeMultiItem HitTest(wxPoint const& pt, int &flags); + + /** @name Find methods + These methods are used for finding a node in the wxTreeMultiCtrl. @{ */ @@ -1065,13 +1065,13 @@ public: #if(CHECKBOXVIEW) /** Gets the checkbox state of the wxTreeMultiItem pointed out by "item". If the item does not have a checkbox - associated (or the item is not ok), it will return -1. If the checkbox is checked it will return 1, - unchecked is 0, and tri-state (usually only for caption nodes) it will return 2. This needs USE_CHECKBOXVIEW - set to YES, or CHECKBOXVIEW=1 during compile*/ - int GetCheckboxState(const wxTreeMultiItem &item, bool WXUNUSED(recursive)) { - wxCHECK(item.IsOk(), -1); - - // return the checkbox state + associated (or the item is not ok), it will return -1. If the checkbox is checked it will return 1, + unchecked is 0, and tri-state (usually only for caption nodes) it will return 2. This needs USE_CHECKBOXVIEW + set to YES, or CHECKBOXVIEW=1 during compile*/ + int GetCheckboxState(const wxTreeMultiItem &item, bool WXUNUSED(recursive)) { + wxCHECK(item.IsOk(), -1); + + // return the checkbox state TreeMultiItemBase *b = item.GetItem(); if(b->GetCheckbox()) return b->GetCheckboxState(); @@ -1135,26 +1135,26 @@ public: #endif /** @} - */ - - /** @name Iteration methods - Allows the user to iterate through a wxTreeMultiCtrl node, and get all the children or siblings. - To start an iteration from the lowest level the functions GetFirstRoot and GetLastRoot are provided. - @{ - */ - - /** Returns the first root. */ - wxTreeMultiItem GetFirstRoot(void) const {return wxTreeMultiItem(this->_root.First());} - - /** Returns the last root. */ - wxTreeMultiItem GetLastRoot(void) const {return wxTreeMultiItem(this->_root.Last());} - - /** Returns the items parent. */ - wxTreeMultiItem GetParent(wxTreeMultiItem const& item) const; - - /** Returns the first child of this node. The type of wxTreeMultiItem needs to be of Node. Whenever not succesful, - the item returned is not ok (IsOk = false). Upon success, a valid child is returned. The cookie variable doesn't - need to be initialized */ + */ + + /** @name Iteration methods + Allows the user to iterate through a wxTreeMultiCtrl node, and get all the children or siblings. + To start an iteration from the lowest level the functions GetFirstRoot and GetLastRoot are provided. + @{ + */ + + /** Returns the first root. */ + wxTreeMultiItem GetFirstRoot(void) const {return wxTreeMultiItem(this->_root.First());} + + /** Returns the last root. */ + wxTreeMultiItem GetLastRoot(void) const {return wxTreeMultiItem(this->_root.Last());} + + /** Returns the items parent. */ + wxTreeMultiItem GetParent(wxTreeMultiItem const& item) const; + + /** Returns the first child of this node. The type of wxTreeMultiItem needs to be of Node. Whenever not succesful, + the item returned is not ok (IsOk = false). Upon success, a valid child is returned. The cookie variable doesn't + need to be initialized */ wxTreeMultiItem GetFirstChild(const wxTreeMultiItem &item, int &cookie) const; /** Returns the next child in the iteration on the level of 'item'. Make sure you called GetFirstChild first @@ -1162,33 +1162,33 @@ public: wxTreeMultiItem GetNextChild(const wxTreeMultiItem &item, int &cookie) const; /** Returns the last child of this node. The type of 'item' needs to be of Node. Whenever not succesful, - the item returned is not ok (IsOk = false). Upon success, a valid last child is returned. */ - wxTreeMultiItem GetLastChild(const wxTreeMultiItem &item) const; - - /** Returns the next sibling of the passed item. */ - wxTreeMultiItem GetNextSibling(wxTreeMultiItem const& item) const; - - /** Returns the previous sibling of the passed item. */ - wxTreeMultiItem GetPrevSibling(wxTreeMultiItem const& item) const; - - /** Returns the next item. "Next" is defined by the following order: - - in case the current item has a child it is the first child of the current item; - - in case the current item has a next sibling as the next sibling; - - as the parent's (or one of its ancestor's) next sibling. - */ - wxTreeMultiItem GetNext(wxTreeMultiItem const& item) const; - - /** Returns the previous item. "Previous" is defined by the following order: - - in case the current item has a child it is the last child of the current item; - - in case the current item has a previous sibling it is the previous sibling; - - as the parent's (or one of its ancestor's) previous sibling. - */ - wxTreeMultiItem GetPrevious(wxTreeMultiItem const& item) const; - - - /** @} - */ - + the item returned is not ok (IsOk = false). Upon success, a valid last child is returned. */ + wxTreeMultiItem GetLastChild(const wxTreeMultiItem &item) const; + + /** Returns the next sibling of the passed item. */ + wxTreeMultiItem GetNextSibling(wxTreeMultiItem const& item) const; + + /** Returns the previous sibling of the passed item. */ + wxTreeMultiItem GetPrevSibling(wxTreeMultiItem const& item) const; + + /** Returns the next item. "Next" is defined by the following order: + - in case the current item has a child it is the first child of the current item; + - in case the current item has a next sibling as the next sibling; + - as the parent's (or one of its ancestor's) next sibling. + */ + wxTreeMultiItem GetNext(wxTreeMultiItem const& item) const; + + /** Returns the previous item. "Previous" is defined by the following order: + - in case the current item has a child it is the last child of the current item; + - in case the current item has a previous sibling it is the previous sibling; + - as the parent's (or one of its ancestor's) previous sibling. + */ + wxTreeMultiItem GetPrevious(wxTreeMultiItem const& item) const; + + + /** @} + */ + /** @name Get and set methods These methods allow you to set or get certain properties of the wxTreeMultiCtrl. @{ @@ -1206,13 +1206,13 @@ public: beginning. */ void SetCaptionFont(const wxFont &font); - /** @} - */ - - void OnDraw(wxDC& dc); - -private: - DECLARE_EVENT_TABLE() -}; + /** @} + */ + + void OnDraw(wxDC& dc); + +private: + DECLARE_EVENT_TABLE() +}; #endif diff --git a/kernel/src/bbtkBlackBox.h b/kernel/src/bbtkBlackBox.h index 83c27b3..7969728 100644 --- a/kernel/src/bbtkBlackBox.h +++ b/kernel/src/bbtkBlackBox.h @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbtkBlackBox.h,v $ Language: C++ - Date: $Date: 2009/06/11 09:51:42 $ - Version: $Revision: 1.28 $ + Date: $Date: 2009/10/05 22:44:48 $ + Version: $Revision: 1.29 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -639,7 +639,10 @@ namespace bbtk /// The default implementation is to issue 'delete this' /// but it can be redefined in inherited classes to handle special deletion mechanisms (e.g. ref counting, private destructors, such as vtk objects deletion with method Delete, etc.). /// \return The number of remaining references on the object after the call (if meaningfull...): used by bbtk to warn a user if another smart pointing system is still holding the object... - virtual int bbDelete() { delete this; return 0; } + +//JCP 21-09-20 09 delete this throws and exception change due to compiler version changing and boost version + virtual int bbDelete() {// delete this; + return 0; } //================================================================== diff --git a/kernel/src/bbtkComplexBlackBox.cxx b/kernel/src/bbtkComplexBlackBox.cxx index 05d6923..0c65247 100644 --- a/kernel/src/bbtkComplexBlackBox.cxx +++ b/kernel/src/bbtkComplexBlackBox.cxx @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbtkComplexBlackBox.cxx,v $ Language: C++ - Date: $Date: 2009/07/30 15:01:05 $ - Version: $Revision: 1.28 $ + Date: $Date: 2009/10/05 22:44:48 $ + Version: $Revision: 1.29 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -692,16 +692,25 @@ namespace bbtk #ifdef WIN32 - std::string command1 ("dot -Tpng -o " + + std::string currentexecpath( crea::System::GetDllAppPath("bbtk") +"\\dot_embedded\\"); + std::string command1 (currentexecpath + "dot -Tpng -o " + filename_png2 + " " + filename_dot2 ); + + std::string command1a(currentexecpath + "dot -T cmap -o " + + filename_cmap2 + " " + filename_dot2 ); + #else std::string command1 ("dot -Tpng:quartz -o " + filename_png2 + " " + filename_dot2 ); -#endif - - std::string command1a("dot -T cmap -o " + std::string command1a("dot -T cmap -o " + filename_cmap2 + " " + filename_dot2 ); +#endif + + + + // 1. Generating .dot file FILE *ff; ff = fopen(filename_dot.c_str(),"w"); diff --git a/kernel/src/bbtkComplexBlackBox.h b/kernel/src/bbtkComplexBlackBox.h index 7236a60..d70f8a0 100644 --- a/kernel/src/bbtkComplexBlackBox.h +++ b/kernel/src/bbtkComplexBlackBox.h @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbtkComplexBlackBox.h,v $ Language: C++ - Date: $Date: 2008/12/11 09:50:35 $ - Version: $Revision: 1.7 $ + Date: $Date: 2009/10/05 22:44:48 $ + Version: $Revision: 1.8 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -47,6 +47,7 @@ #include "bbtkComplexBlackBoxDescriptor.h" //#include "bbtkComplexBlackBoxInputDescriptor.h" //#include "bbtkComplexBlackBoxOutputDescriptor.h" +#include "creaSystem.h" #include namespace bbtk diff --git a/kernel/src/bbtkFactory.cxx b/kernel/src/bbtkFactory.cxx index 37563de..627bc80 100644 --- a/kernel/src/bbtkFactory.cxx +++ b/kernel/src/bbtkFactory.cxx @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbtkFactory.cxx,v $ Language: C++ - Date: $Date: 2009/06/08 14:50:03 $ - Version: $Revision: 1.45 $ + Date: $Date: 2009/10/05 22:44:48 $ + Version: $Revision: 1.46 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -148,153 +148,158 @@ namespace bbtk // same for Windows, with c:, d: ... // // lastname : string before the last / (if any), or user supplied name + + if(name != ""){ + bbtkDebugMessageInc("kernel",7,"Factory::LoadPackage(\""< package_paths; + std::string libname; // full path library name + std::string pkgname; // e.g. libbb.so + + std::string upath; + pkgname = Utilities::ExtractPackageName(name,upath); + bbtkMessage("debug",1,"Package name ["<0) // ------------------------------------- check user supplied location + { + if (name[0] != '.' && name[0] != '/' && name[1]!= ':') + { + bbtkError("Use absolute or relative path name! ["<::iterator i; + for (i=package_paths.begin();i!=package_paths.end();++i) + { + foundFile = false; + path = *i; +//std::cout<<"JCP bbtkFactory.cxx void Factory::LoadPackage = path "< Trying to load [" << libname << "]" < package_paths; - std::string libname; // full path library name - std::string pkgname; // e.g. libbb.so - - std::string upath; - pkgname = Utilities::ExtractPackageName(name,upath); - - bbtkMessage("debug",1,"Package name ["<0) // ------------------------------------- check user supplied location - { - if (name[0] != '.' && name[0] != '/' && name[1]!= ':') - { - bbtkError("Use absolute or relative path name! ["<::iterator i; - for (i=package_paths.begin();i!=package_paths.end();++i) - { - foundFile = false; - path = *i; - - // we *really* want '.' to be the current working directory - if (path == ".") - { - char buf[2048]; // for getcwd - char * currentDir = getcwd(buf, 2048); - std::string cwd(currentDir); - path = currentDir; - } - - libname = Utilities::MakeLibnameFromPath(path, pkgname); - - bbtkMessage("debug",2,"-> Trying to load [" << libname << "]" <getline(buf,500); std::string str(buf); - + //size 0 JCP 21-09-2009 int size=str.length(); - if ( str[ size-1 ]==13 ) + if(size != 0){ + if ( str[ size-1 ]==13 ) { str.erase(size-1,1); } - try - { - DoInterpretLine(str); - } - CATCH_MACRO; + try + { + DoInterpretLine(str); + } + CATCH_MACRO; + } + } CloseCurrentFile(); } @@ -718,6 +721,7 @@ namespace bbtk { mStatus = Interpreter_OK; mInsideComment = false; +//std::cout<<"JCP bbtkInterpreter.cxx Interpreter::InterpretLine("< Interpreter::DoInterpretLine(\"" < words; SplitLine(line,words); @@ -786,7 +789,7 @@ namespace bbtk // Command CommandInfoType command; InterpretCommand(words,command); - +//std::cout<<"JCP bbtkInterpreter command.keyword ="<(mFile.back()); @@ -844,7 +848,7 @@ namespace bbtk } return; } - +//std::cout<<" mVirtualExecuter->Create(words[1],words[2]); "<=4 + if(tfullPathScriptName.size()>=4){ + if (tfullPathScriptName.substr(tfullPathScriptName.size()-4, 3)==".bb") { - // The following is *NOT* a debug time message : - // It's a user intended message. - // Please don't remove it. - bbtkMessage("interpreter",2, - " [" <& words,"<second; bbtkDebugMessage("interpreter",9,"<== Interpreter::InterpretCommand(...)"<0){ + char c = path[path.size()-1]; #if defined(__GNUC__) if (c != '/') libname += "/libbb"; @@ -286,6 +287,8 @@ namespace bbtk libname += pkgname; libname += ".dll"; #endif + } + return libname; } @@ -294,23 +297,26 @@ namespace bbtk std::string Utilities::MakePkgnameFromPath(std::string path, std::string pkgname, bool addExt) { std::string libname = path; - char c = path[path.size()-1]; - if (c != '/' && c != '\\') - { - libname += ConfigurationFile::GetInstance().Get_file_separator (); - } - libname += pkgname; - if (addExt) - { - int l = libname.size(); - if (l>4) - { - if (libname.substr(l-4, 4) != ".bbs") - { - libname = libname + ".bbs"; - } - } - } + if(path.size()>0){ + char c = path[path.size()-1]; + if (c != '/' && c != '\\') + { + libname += ConfigurationFile::GetInstance().Get_file_separator (); + } + libname += pkgname; + if (addExt) + { + int l = libname.size(); + if (l>4) + { + if (libname.substr(l-4, 4) != ".bbs") + { + libname = libname + ".bbs"; + } + } + } + } + return libname; } // ======================================================================= diff --git a/packages/toolsbbtk/bbs/appli/GUICreatePackage.bbs b/packages/toolsbbtk/bbs/appli/GUICreatePackage.bbs index 9253935..7acc43d 100644 --- a/packages/toolsbbtk/bbs/appli/GUICreatePackage.bbs +++ b/packages/toolsbbtk/bbs/appli/GUICreatePackage.bbs @@ -114,7 +114,6 @@ new ConcatStrings concatStr connect descriptionStr.Out concatStr.In6 connect dquote.Out concatStr.In7 - new ExecSystemCommand command connect concatStr.Out command.In diff --git a/packages/wx/src/bbwxSlider.cxx b/packages/wx/src/bbwxSlider.cxx index 1b3db85..0b4e7b3 100644 --- a/packages/wx/src/bbwxSlider.cxx +++ b/packages/wx/src/bbwxSlider.cxx @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbwxSlider.cxx,v $ Language: C++ - Date: $Date: 2009/05/15 14:58:03 $ - Version: $Revision: 1.24 $ + Date: $Date: 2009/10/05 22:44:52 $ + Version: $Revision: 1.25 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -303,7 +303,7 @@ namespace bbwx void SliderWidget::OnResolutionOfSlider(wxScrollEvent& event) { int value = mwxSlider->GetValue(); - int delta = (int) (pow( 4 , mResolutionOfSlider->GetValue() )); + int delta = (int) (pow((double) 4 ,(double) mResolutionOfSlider->GetValue() )); int minTmp = value - delta/2; int maxTmp = value + delta/2; if (minTmp