Crazy Eddie's GUI System Mk-2
http://www.cegui.org.uk

Copyright 2004 - 2008 CEGUI Team & Contributing Authors


The following is a high-level view of changes made to the system between releases.

Release 0.6.2
=============
Added: Support for TreeEventArgs in the lua scripting module (patch from kripken, http://www.cegui.org.uk/phpBB2/viewtopic.php?t=3704)
Added: ScrolledItemListBase::ensureItemIsVisibleVert and ScrolledItemListBase::ensureItemIsVisibleHorz members to allow scrolling lists programmatically to ensure a specified item is visible.  See: http://www.cegui.org.uk/mantis/view.php?id=228
Added: Added ability to specify a function to be used as the error handler in calls to lua_pcall.  See: http://www.cegui.org.uk/mantis/view.php?id=239
Added: GUI Renderer module and supporting samples base app for DirectFB (http://www.directfb.org/).  Contributed by Keith Mok.  See: http://www.cegui.org.uk/mantis/view.php?id=233.  Needs additional testing!  SKIP ON MERGE - trunk will get it's own version via the mantis patch (then be rewritten for the new renderer model).
Added: Member to CEGUI::TreeItem to allow removal of sub-items.  see: http://www.cegui.org.uk/phpBB2/viewtopic.php?p=15563#15563
Added: Templatised addFactory static function to WindowFactory manager that allows the system to create - and therefore own - custom window factory objects; thus alleviating potential cleanup issues when using custom factories.  See: http://www.cegui.org.uk/mantis/view.php?id=249.

Modified: Modify Tree::setItemSelectState(TreeItem* item, bool state) to recurively check subitems also (else we fail when trying to set the selected state on a second level (or greater) item).  See: http://www.cegui.org.uk/phpBB2/viewtopic.php?p=16197#16197
Modified: Forward CEGUI::ScriptException from within the CEGUI::System script execution functions as opposed to translating them into less useful CEGUI::GenericException.  See: http://www.cegui.org.uk/phpBB2/viewtopic.php?t=3595
Modified: Enhanced existing logging to include memory addresses when an object is created or destroyed (for most objects).  See: http://www.cegui.org.uk/mantis/view.php?id=224
Modified: Added warning to WindowManager::loadWindowLayout documentation regarding possible invocation of incorrect overload when using a C string literal for the 'name_prefix'. (Issue is to be resolved in trunk.  Maintaining ABI and API compatibility with previous v0-6 releases prevents a fix in this branch).
Modified: Tree Code / documentation reformatting, correction and cleanup.
Modified: Mark Tree and related classes as deprecated.

Bug Fix: Issue in ComboDropList would cause InvalidRequestException whenever input capture was lost and the highlighted item was different to the last click-selected item.  See: http://www.cegui.org.uk/phpBB2/viewtopic.php?t=3693.
Bug Fix: Disable MSVC++ 4251 warning coming from CEGUITreeItem.h
Bug Fix: Event connection objects returned to lua subscribeEvent calls did not have the connected or disconnect members available for use (making the connection object useless).
Bug Fix: TinyXML parse failures were going unchecked.  See: http://www.cegui.org.uk/phpBB2/viewtopic.php?t=3688.
Bug Fix: Lua script module based 'executeScriptedEventHandler was still not returning correct value (missed when I did the LuaFunctor version of the same, see: http://www.cegui.org.uk/mantis/view.php?id=225 for original issue).
Bug Fix: Hopefully resolve issue where the use of FreeImage codec could result in pixel format of loaded data being incorrect.  See: http://www.cegui.org.uk/mantis/view.php?id=230.
Bug Fix: There was an issue where Windows could be created during system destruction - this fixes that by introducing a 'locked' state for WindowManager whereby any attempt to create a Window throws an InvalidRequestException.  See: http://www.cegui.org.uk/mantis/view.php?id=250.
Bug Fix: ScriptModule bindings were destroyed out of sequence meaning event handlers could still be fired that needed CEGUI bindings to exist.  See: http://www.cegui.org.uk/mantis/view.php?id=245.
Bug Fix: The functionality of the "rise on click" setting was totally broken (prize for longest standing issue?).  See: http://www.cegui.org.uk/mantis/view.php?id=244.
Bug Fix: When using the scrollwheel to change a CEGUI::Slider value, the direction of movement was the opposite to what would have been expected.  See: http://www.cegui.org.uk/mantis/view.php?id=238.
Bug Fix: PropertyDim documentation did not reflect the updated abilities of the class, and the documentation for the argument 'type' was not clear about how it should be used with regards to affecting interpretation of the property accessed.  Related to: http://www.cegui.org.uk/mantis/view.php?id=247.
Bug Fix: Endian problem with CEGUI::colour.  This change should fix this: http://www.cegui.org.uk/mantis/view.php?id=229
Bug Fix: The Window::getChild(const CEGUI::String&) function was incorrectly made recursive after the 0.5.x series of releases.  This fix restores the correct behaviour and adds a Window::getChildRecursive(const CEGUI::String&) function for the highly expensive recursive case.  See: http://www.cegui.org.uk/mantis/view.php?id=237
Bug Fix: The C++ side of the lua based event mechanism would always return true as if the event were handled, even if some other boolean value (i.e. false) were returned from the lua side.  See: http://www.cegui.org.uk/mantis/view.php?id=225
Bug Fix: Resolve issue where events were still being injected into an invisible GUI sheet / root window.  See: http://www.cegui.org.uk/mantis/view.php?id=226
Bug Fix: null window pointers to add/remove functions of TabControl were unchecked and would cause crashes.  See: http://www.cegui.org.uk/mantis/view.php?id=232
Bug Fix: Resolve incompatibility issue with Xerces-C++ 3.  See: http://www.cegui.org.uk/mantis/view.php?id=235
Bug Fix: Window::getChild and Window::recursiveChildSearch would use the starting window's prefix when testing the prefix + name case, this is incorrect and should have been using the prefix of the child being tested (load 2 windows from layouts, using different prefixes.  Add the second layout to the first as a child, then call getChild on the first layout window, passing the name of the second layout window, prior to the fix the call would have failed to find the child).
Bug Fix: Resolve inconsistency where Window::isChild did not consider the Window name prefix, whereas Window::getChild did. See: http://www.cegui.org.uk/mantis/view.php?id=215.
Bug Fix: Potential crash regarding sorted column ID, when queried by the property system.
Bug Fix: the value returned by System::getWindowContainingMouse was only updated when the mouse was moved, this caused potenial issues when windows were moved, sized, created, destroyed, or had their visible or enabled states changed.  See: http://www.cegui.org.uk/mantis/view.php?id=213.
Bug Fix: Programmatically made changes to Combobox selection were not reflected in the Editbox component of the Combobox.  See: http://www.cegui.org.uk/mantis/view.php?id=220.
Bug Fix: Vector out of bounds in Window::update (see: http://www.cegui.org.uk/mantis/view.php?id=221)
Bug Fix: Win32 helper did not consider window farme / decorations when creating windows, so the client area was always smaller than requested.  See: http://www.cegui.org.uk/phpBB2/viewtopic.php?p=15524.
Bug Fix: 'else' within preprocessor conditional sections with no guarantee that there was a prior 'if'.  See: http://www.cegui.org.uk/phpBB2/viewtopic.php?p=15524.
Bug Fix: Fix a couple of minor rendering issues with TaharezLook/ProgressBar.
Bug Fix: Resolves a bug where the progress content was drawn into, rather than clipped by, the intersection of the the full progress area and the current progress area.  NOTE: People relying on the old buggy behaviour can reproduce the same effect by multiplying appropriate part(s) of thier imagery area definitions by the "CurrentProgress" property in their looknfeel files.
Bug Fix: MinGW configure/make was not building with glew correctly.
Bug Fix: Issue with Tree related properties casting to Listbox.  See: http://www.cegui.org.uk/mantis/view.php?id=218
Bug Fix: Resolve issue where iterator at begining of range was decremented uncheked. See: http://www.cegui.org.uk/phpBB2/viewtopic.php?t=3408


Release 0.6.1
=============
Added: Batch files to invoke premake for VC9 files (seems to work fine)
Added: Added a supported value to represent infinity to enable the click generation timouts to be set to "no timeout".  See: http://www.cegui.org.uk/mantis/view.php?id=208
Added: Added Window::appendText and Window::insertText member functions.  See: http://www.cegui.org.uk/mantis/view.php?id=195
Added: Initial version of a sample base application using Direct3D 10.
Added: Initial code for the D3D 10 GUI Renderer, originally contributed by Rajko Stojadinovic.  See: http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2919
Added: IrrlichRenderer had no facility for notifying of display size changes.  This adds a setDisplaySize member for that purpose.  (Part of fixes for: http://www.cegui.org.uk/mantis/view.php?id=187).
Added: Logging of renderer resize event notifications (prelim work for issue: http://www.cegui.org.uk/mantis/view.php?id=187)
Added: New drag and drop demo.  Originally written to aid in debugging of an issue, but is otherwise useful as an example :)
Added: Added FPS readout in sample base app for Irrlicht.  (See: http://www.cegui.org.uk/mantis/view.php?id=176).

Modified: Changed Xcode build for the renderer frameworks so that headers retain their original subdirectory location; this aids in keeping client code portable.
Modified: Refactored tab removal code to eliminate repetition.
Modified: On linux, use installed system versions of tolua++ and TinyXML libraries if available (can be disabled to force continued use of internal versions).  See: http://www.cegui.org.uk/mantis/view.php?id=198

Major update of Mac Xcode project.  This attempts to achieve the following:
- Update all existing targets in relation to added and removed source files.
- Resolved some minor issues with custom scripts when rebuilding up to date targets.
- Added targets for Demo6, Demo7, Demo8, DragDropDemo, InstancedWindows, TextDemo and TreeDemo (completing the set).
- Added target for ceguitolua++ framework (needed for lua support and for lua samples to run).
- Use of precompiled dependencies package from within local tree (upload to follow shortly, pending resolution of final remaining issues).
- Dependency frameworks will now be embedded within whichever component uses them (as opposed to needing separate installation).
- Sample apps now correctly work with embedded CEGUI frameworks and so should run anywhere without additional installation.
- Modify samples app packaging to symlink the frameworks and datafiles, as opposed to actually copying - this vastly reduces the footprint of the development directory (at a small cost of flexibility).
- symlink the output sample apps into the ./Samples/bin directory (using subdirs for each config)
- Added required define in CEGUIConfig.h for Lua support
- Updated default ImageCodec in CEGUIConfig.h to be SILLY
- Big cleanup of the various targets so that common settings (virtually all settings, actually) can be set once at the project level rather than needing to be set separately on each target.

Bug Fix: Deleting/removing a menu item from a menu when the item had an active popup would result in a dangling pointer to the deleted/removed item.
Bug Fix: line endings and set missing svn:eol-style on all Tree related code files.
Bug Fix: Injection of mouse movements and mouse positions which did not actually reflect a change of mouse cursor position were still firing events and triggering side effects.  See: http://www.cegui.org.uk/mantis/view.php?id=202
Bug Fix: ItemListbox::removeItem() was not checking if removed item was the one referenced in d_lastSelected, so was leaving a dangling pointer.  See: http://www.cegui.org.uk/mantis/view.php?id=206
Bug Fix: The docs for the list widgets stated that the insert member would insert anitem after a given item, whereas the widget actually inserted the item before the given item.  See: http://www.cegui.org.uk/mantis/view.php?id=205
Bug Fix: Exception message in postD3DReset member of the D3D renderers was incorrectly stating the exception as coming from from preD3DReset.  See: http://www.cegui.org.uk/mantis/view.php?id=207
Bug Fix: double deletion issue in Corona based ImageCodec.
Bug Fix: MacRendererSelector had uninitialised member variable, causing incorrect behaviour.
Bug Fix: CEGUISamplesConfig.h is for Mac only now - removed conditionals that would bring in these options for Win32 (which uses premake).
Bug Fix: Fixed comment blocks to eliminate a constant stream of warnings (gcc) when building anything CEGUI related.
Bug Fix: Need to bring in CEGUIConfig.h when building CEGUILua.cpp in case we're on a Mac.
Bug Fix: Bug in CEGUIDevILImageCodec in which ILinfo structure is not inititalised to 0s prior to usage, causing random crashes.
Bug Fix: inclusion of config.h MUST be protected by a conditional that checks HAVE_CONFIG_H.
Bug Fix: Between the 0.5.0 and 0.6.0 releases the System::setDefaultXMLParserName function was bastardised to perform a function other than its intended purpose.  This fix restores the intended behaviour of setDefaultXMLParserName and adds functions for setting the XML parser after System instantiation correctly.  See: http://www.cegui.org.uk/mantis/view.php?id=186
Bug Fix: Issue of missing OpenGL render state initialisation when multitexture support is available.  See: http://www.cegui.org.uk/mantis/view.php?id=201.  NB: This also adds use of GLEW library (external (autotools) or embedded (all platforms)).
Bug Fix: uncomment part of cegui.lua configuration script that allows use of option to have Ogre in samples.
Bug Fix: pragmas for link libs in Ogre base app were incorrectly dependant on _WIN32 macro instead of _MSC_VER macro.
Bug Fix: Added extra pragma lines to bring in required OIS lib for the Ogre base app.
Bug Fix: Ogre base app now uses numKeyboards (was numKeyBoards) from OIS; this is what the OIS from the Ogre deps expects.
Bug Fix: Fixed documentation for MouseButton enumeration.  Thanks to 'alphasnd'.
Bug Fix: UpdateEventArgs::d_timeSinceLastFrame was not being initialised in constructor.
Bug Fix: Use linux SimpleTimer::currentTime for Apple Macs also.  Thanks go to alphasnd, see: http://www.cegui.org.uk/phpBB2/viewtopic.php?t=3247
Bug Fix: Resolve compilation issue on older gcc versions (gcc 3.x) where casting using functional notation is not good.  See: http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2317
Bug Fix: TabControl was subscribing to EventTextChanged on added content windows, but not releasing the connection when the content window was removed - causing UnknownObject exceptions and possible crashes when attempting to change the text on a window after it had been added to and then removed from a TabControl.  See: http://www.cegui.org.uk/mantis/view.php?id=192
Bug Fix: When linking on autotools based systems, ensure we explicitly link with the 'just built' versions of CEGUI libraries; this ensures that we are not inadvertently picking up old installed versions of the same libs.
Bug Fix: Updated Ogre base application to correctly respond to window resize events and inform the CEGUI renderer of the change.  Part of fixes for: http://www.cegui.org.uk/mantis/view.php?id=187
Bug Fix: Fixed samples under D3D 8.1 and 9 so that they correctly notify CEGUI when the window size changes.  Part of fixes for: http://www.cegui.org.uk/mantis/view.php?id=187.
Bug Fix: Under gcc/autotools the various libraries and modules were not linking against CEGUIBase (except on MinGW32).  See: http://www.cegui.org.uk/mantis/view.php?id=196
Bug Fix: Update Irrlicht sample base application to notify the renderer of the display size - in order that it may react properly to any changes.  (Part of fixes for: http://www.cegui.org.uk/mantis/view.php?id=187).
Bug Fix: When injecting mouse position change information using the System::injectMousePosition member, the resulting MouseEventArgs structure passed to event handlers always had the positional change delta information set to 0.  See: http://www.cegui.org.uk/mantis/view.php?id=194
Bug Fix: FrameWindow types had no realistic default minimum size specified, meaning the user could resize these windows to such an extent that they totally disappeared and we no longer usable.  See: http://www.cegui.org.uk/mantis/view.php?id=193
Bug Fix: Issue with detection and usage of glut library under Msys/MinGW.  See: http://www.cegui.org.uk/mantis/view.php?id=184
Bug Fix: Can't get correct error string on Win32 platform when dynamic module load failed.  See: http://www.cegui.org.uk/mantis/view.php?id=178
Bug Fix: Missing winmm library dependency for MinGW32 autotool based builds.  See: http://www.cegui.org.uk/mantis/view.php?id=183
Bug Fix: Hiding the active window would leave the hidden window active and receiving inputs; it was also possible to activate a hidden window which is not logical.  See: http://www.cegui.org.uk/mantis/view.php?id=188
Bug Fix: Time pulse injection under DirectX sample base app was either missing (DX 8.1) or broken (DX 9).  (See: http://www.cegui.org.uk/mantis/view.php?id=177).
Bug Fix: TreeDemo - Missing header on some systems, update antiquated time.h to ctime.
Bug Fix: Typos in the configure summary (Irrlict -> Irrlicht)
Bug Fix: tolua++cegui generator missing Lua_CFLAGS in autotools build.


Release 0.6.0
=============
Added: New text demo (rewrite of Demo4)
Added: First attempt at mingw32 / cross-compile support.
Added: Extend support of CEGUI_SAMPLE_DATAPATH environment variable to Windows platforms too.
Added: Missing Samples/datafiles/Makefile.am file
Added: Levia's GroupBox to the Lua module.
Added: Warning log level to the Lua module.
Added: Levia's GroupBox to the code and looknfeel. Thanks :)
Added: Exception type, line and file info - See http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2799
Added: CEGUIDeadException Macro to required.h for this purpose.
Added: Static Build Support
Added: Imagesets Added
Added: Tree Widget Added
Added: ScriptWindowHelper Added
Added: Tree Demo Added
Added: Instanced Windows Demo Added
Added: Tree & TreeItem Packages Added
Added: ScriptWindowHelper Package Added
Added: (MacOS) Got most of the samples to build and run, except FalagardDemo1 and Minesweeper.
Added: support for Expat XML parser on the Mac.

Removed: XMLRefSchema/Makefile.am - this is now no longer needed.

Modified: Applied ticket #173
Modified: Renamed Demo4 to TextDemo (in progress).
Modified: linux (and mingw32) will try with and without the 'lib' prefix when loading dynamic modules.
Modified: Applied this patch: http://www.cegui.org.uk/mantis/view.php?id=168
Modified: datafiles are now installed on linux (e.g. /usr/local/share/CEGUI/)
Modified: Minor change to update a contact address (main purpose of this is actually to test the svn change notification system).
Modified: RTTI and Loggers - See http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2816
Modified: Updated samples with new exception code
Modified: Applied large patches. For details see this thread: http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2766
Modified: setDefaultXMLParserName now unloads the default dynamic module and loads a new one provided you are not statically linking.
Modified: tolua++cegui changes in exception handlers.
Modified: Large Premake updates

Coding Standards: CEGUI does not use the NULL macro in code.
Coding Standards: the prefix used for data members on the CEGUI project is d_ and not m_

Bug Fix: Corona based image codec would not build.
Bug Fix: Resolve a thousand and one "deprecated conversion from string constant to 'char*'" warnings that spew forth from gcc 4.2.x.
Bug Fix: Lua 5.1 removes table.setn - update code to use alternate method of ensuring table is indeed empty.
Bug Fix: The CEGUIDeadException macro was causing the exceptions to be caught by value; this fixes it so they are caught by reference.
Bug Fix: Exception base class destructor should be public.
Bug Fix: Minor TextDemo fix - gcc does not like temporary objects passed as arguments for non-const function parameters.
Bug Fix: Autotool build fix for TextDemo.
Bug Fix: Small compile fix for VS
Bug Fix: Groupbox fix (disabled 'ristOnClick')
Bug Fix: Window::isTopOfZOrder had an incorrectly constructed loop control.  (http://www.cegui.org.uk/mantis/view.php?id=172)
Bug Fix: PixelAligned macro was incorrect when working with negative values.  (http://www.cegui.org.uk/mantis/view.php?id=167)
Bug Fix: Listbox and MulticolumnList were not re-sorting the list in resonse to calling handleUpdatedItemData which resulted in an incorrectly ordered list if items had changed in a manner that invalidated the current order (in the simplest case, just by changing an items text). (http://www.cegui.org.uk/mantis/view.php?id=162)
Bug Fix: The 'selected item' as returned by Combobox would revert to 0 after interaction with the user that did not end with a positive list selection - this is incorrect; any previous selection should be preserved if the user backs out of making a new selection in the list.  NB: A side effect of this fix is a change in the order that some events are fired.  Previously the droplist show/hide event came first (before any selection events), now the show/hide events come after any selection events. (http://www.cegui.org.uk/mantis/view.php?id=164).
Bug Fix: Slider thumb was not showing up when used within a TabControl.  Actual bug was related to thumb getting initialised with bad data caused by unchecked divide by zero in the Falagard window renderer. (http://www.cegui.org.uk/mantis/view.php?id=145)
Bug Fix: Invalidating only cached clipped areas for a window was not having the desired effect on child content.  Fix addresses http://www.cegui.org.uk/mantis/view.php?id=165
Bug Fix: Any window responding to a left mouse button down event would always report the event as 'unhandled' even though it may have taken action based on the event (thus, handling it).  Event is now marked as 'handled' if, but only if, the window has to take action such as activating the window or making a change in the z-order.  (http://www.cegui.org.uk/mantis/view.php?id=136)
Bug Fix: MultiLineEditbox::onCharacter should only say it handled the event if it really did.  (http://www.cegui.org.uk/mantis/view.php?id=155)
Bug Fix: Widgets with a push-button-esque behaviour were not behaving correctly as regards to being obscured by a window with mouse pass through enabled.(http://www.cegui.org.uk/mantis/view.php?id=154 and http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2971)
Bug Fix: We were incorrectly using the clock() function as a timer. (http://www.cegui.org.uk/mantis/view.php?id=153)
Bug Fix: Certain assign, append, and insert operations in CEGUI::String would illegally operate beyond the length of the object being assigned, appended or inserted. (http://www.cegui.org.uk/mantis/view.php?id=152)
Bug Fix: Bug where MultiColumnListProperties::MultiColumnListProperties::set was using String::substr incorrectly and accessing chars beyond the end of the string.  This fix is actually a total rewrite that makes the function a lot more robust, and removes a couple of other issues too.  (http://www.cegui.org.uk/mantis/view.php?id=171)
Bug Fix: Correctly check for dl and pthread libs. (http://www.cegui.org.uk/mantis/view.php?id=143)
Bug Fix: Lua was not correctly detected on (K)Ubuntu type systems (http://www.cegui.org.uk/mantis/view.php?id=138)
Bug Fix: Support lua 5.1 in CEGUILua.cpp (not sure of generator status with 5.1) (http://www.cegui.org.uk/mantis/view.php?id=161)
Bug Fix: CEGUIXercesParser was not compiling with 2.8 version of xerces-c++.  (http://www.cegui.org.uk/mantis/view.php?id=163).
Bug Fix: TaharezLook.looknfeel did not conform to the required schema (http://www.cegui.org.uk/mantis/view.php?id=163)
Bug Fix: Ogre and Irrlicht sample base apps still had CEGUI_SAMPLE_DATAPATH defines
Bug Fix: Demo8 restored to working state.
Bug Fix: Fixed bug in CreateWindow which would never allow empty name while having a prefix.
Bug Fix: Fixed/revamped TabControlDemo, because it didn't work anymore because of underlying code changes.
Bug Fix: Added re-sorting to a listbox after user 
Bug Fix: There was an incorrect compiler flag when bringing in the DevIL libs (autotools build).
Bug Fix: 'make dist' should now include everything required (on linux at least)
Bug Fix: Updated irrlicht support to 1.4 (and beyond?)
Bug Fix: Updated TreeDemo to build and run on linux
Bug Fix: Change TabPane into TabContentPane. Thanks to Liberator for pointing this inconsistency out.
Bug Fix: Autotools build was missing the CEGUIGroupBox files.
Bug Fix: Resorting of lists and trees happened High to Low. This should be the reverse i think.
Bug Fix: Resolved ticket 160: Missing #pragma warning(pop) in elements/CEGUISpinner.h 
Bug Fix: Resolved ticket 158: MultiColumnList Font NOT in ListHeaderSegment!
Bug Fix: Applied Liberator's tree fix patch.
Bug Fix: Applied ldb's OIS patch.
Bug Fix: Applied ldb's patch.
Bug Fix: Tree Node Button Fixes
Bug Fix: Static Call Fix in setDefaultXMLParserName
Bug Fix: Changed 'friend TreeItem;' into 'friend class TreeItem;' for non-MS compilers.  http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2598
Bug Fix: warnings of unused local variables in lua_CEGUI.cpp fixed.
Bug Fix: Fixed Memory Leak in Lua Scripting Module when it throws and helpe                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   