00001 /* 00002 ** ClanLib SDK 00003 ** Copyright (c) 1997-2011 The ClanLib Team 00004 ** 00005 ** This software is provided 'as-is', without any express or implied 00006 ** warranty. In no event will the authors be held liable for any damages 00007 ** arising from the use of this software. 00008 ** 00009 ** Permission is granted to anyone to use this software for any purpose, 00010 ** including commercial applications, and to alter it and redistribute it 00011 ** freely, subject to the following restrictions: 00012 ** 00013 ** 1. The origin of this software must not be misrepresented; you must not 00014 ** claim that you wrote the original software. If you use this software 00015 ** in a product, an acknowledgment in the product documentation would be 00016 ** appreciated but is not required. 00017 ** 2. Altered source versions must be plainly marked as such, and must not be 00018 ** misrepresented as being the original software. 00019 ** 3. This notice may not be removed or altered from any source distribution. 00020 ** 00021 ** Note: Some of the libraries ClanLib may link to may have additional 00022 ** requirements or restrictions. 00023 ** 00024 ** File Author(s): 00025 ** 00026 ** Magnus Norddahl 00027 */ 00028 00029 #pragma once 00030 00031 #include "api_csslayout.h" 00032 #include "css_layout_user_data.h" 00033 #include "../Core/System/uniqueptr.h" 00034 00035 class CL_CSSLayoutText; 00036 class CL_CSSLayoutElement; 00037 class CL_CSSLayoutObject; 00038 class CL_CSSLayoutNode_Impl; 00039 00040 class CL_API_CSSLAYOUT CL_CSSLayoutNode 00041 { 00042 public: 00043 CL_CSSLayoutNode(); 00044 00045 bool is_null() const; 00046 bool is_text() const; 00047 bool is_element() const; 00048 bool is_object() const; 00049 CL_CSSLayoutText to_text() const; 00050 CL_CSSLayoutElement to_element() const; 00051 CL_CSSLayoutObject to_object() const; 00052 00053 CL_CSSLayoutNode get_parent() const; 00054 CL_CSSLayoutNode get_next_sibling() const; 00055 CL_CSSLayoutNode get_prev_sibling() const; 00056 CL_CSSLayoutNode get_first_child() const; 00057 CL_CSSLayoutNode get_last_child() const; 00058 00059 CL_CSSLayoutUserData *get_user_data(); 00060 const CL_CSSLayoutUserData *get_user_data() const; 00061 void set_user_data(CL_CSSLayoutUserData *data) { CL_UniquePtr<CL_CSSLayoutUserData> cmd(data); set_user_data(cmd); } 00062 void set_user_data(CL_UniquePtr<CL_CSSLayoutUserData> &data); 00063 00064 CL_String print_node() const; 00065 00066 bool operator==(const CL_CSSLayoutNode &other) const; 00067 bool operator!=(const CL_CSSLayoutNode &other) const; 00068 00069 protected: 00070 CL_SharedPtr<CL_CSSLayoutNode_Impl> impl; 00071 CL_CSSLayoutNode(const CL_SharedPtr<CL_CSSLayoutNode_Impl> &impl); 00072 friend class CL_CSSLayout; 00073 friend class CL_CSSLayoutElement; 00074 friend class CL_CSSLayout_Impl; 00075 };