1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: lyt_Group.h 4 5 Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Revision: 23662 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NW_LYT_GROUP_H_ 17 #define NW_LYT_GROUP_H_ 18 19 #include <cstddef> 20 #include <nw/ut/ut_LinkList.h> 21 22 #include <nw/lyt/lyt_Pane.h> 23 #include <nw/lyt/lyt_Types.h> 24 25 namespace nw 26 { 27 namespace lyt 28 { 29 30 //--------------------------------------------------------------------------- 31 //! :category 管理 32 //! 33 //! @brief グループに属するペインへのリンクです。 34 //! 35 //! @since 2009/09/18 初版。 36 //--------------------------------------------------------------------------- 37 struct PaneLink 38 { 39 //! :private 40 //! @brief リンク情報です。 41 ut::LinkListNode link; 42 43 //! グループに属するペインへのポインタです。 44 Pane* target; 45 }; 46 47 //! @name 管理 48 //@{ 49 50 //! @brief ペインへのリンクの一覧を保持します。 51 //! 52 //! @since 2009/09/18 初版。 53 //! 54 typedef ut::LinkList<PaneLink, offsetof(PaneLink, link)> PaneLinkList; 55 56 //@} 57 58 //--------------------------------------------------------------------------- 59 //! :category 管理 60 //! 61 //! @brief ペインをグループで管理するためのクラスです。 62 //! 63 //! @since 2009/09/18 初版。 64 //--------------------------------------------------------------------------- 65 class Group 66 { 67 public: 68 //---------------------------------------- 69 //! @name コンストラクタ/デストラクタ 70 //@{ 71 72 //! @brief コンストラクタです。 73 //! 74 //! @details 75 //! ペインのない状態で初期化します。 76 //! 77 //! @since 2009/09/18 初版。 78 //! 79 Group(); 80 81 //! @brief コンストラクタです。 82 //! 83 //! @details 84 //! グループリソースをもとにペインを追加した状態で初期化します。 85 //! 86 //! @param pResGroup グループリソースへのポインタです。 87 //! @param pRootPane ルートペインへのポインタです。 88 //! 89 //! @since 2009/09/18 初版。 90 //! 91 Group(const res::Group* pResGroup, Pane* pRootPane); 92 93 //! @brief デストラクタです。 94 //! 95 //! @since 2009/09/18 初版。 96 //! 97 virtual ~Group(); 98 99 //@} 100 101 //---------------------------------------- 102 //! @name 取得/設定 103 //@{ 104 105 //! @brief グループの名前を取得します。 106 //! 107 //! @return グループの名前を返します。 108 //! 109 //! @since 2009/09/18 初版。 110 //! GetName()111 const char* GetName() const 112 { 113 return m_Name; 114 } 115 116 //! @brief グループに所属するペインの一覧を取得します。 117 //! 118 //! @return ペインの一覧を返します。 119 //! 120 //! @since 2009/09/18 初版。 121 //! GetPaneList()122 PaneLinkList& GetPaneList() 123 { 124 return m_PaneLinkList; 125 } 126 127 //@} 128 129 //---------------------------------------- 130 //! @name 追加 131 //@{ 132 133 //! @brief ペインを追加します。 134 //! 135 //! @param pPane ペインへのポインタです。 136 //! 137 //! @since 2009/09/18 初版。 138 //! 139 void AppendPane(Pane* pPane); 140 141 //@} 142 143 //---------------------------------------- 144 //! @name その他 145 //@{ 146 147 //! @brief ユーザーがグループを構築したかどうかを判定します。 148 //! 149 //! @return グループをユーザーが構築した場合は true を返します。 150 //! 151 //! @since 2009/09/18 初版。 152 //! IsUserAllocated()153 bool IsUserAllocated() const 154 { 155 return m_UserAllocated != 0; 156 } 157 158 //! @brief ユーザーが構築したグループであることを宣言します。 159 //! 160 //! @details 161 //! ユーザが構築したと宣言されたグループはライブラリによって解放されません。 162 //! 163 //! @since 2010/08/27 初版。 164 //! SetUserAllocated()165 void SetUserAllocated() 166 { 167 m_UserAllocated = 1; 168 } 169 170 //@} 171 172 //! :private 173 //! @brief リンク情報です。 174 ut::LinkListNode m_Link_; 175 176 private: 177 void Init(); 178 179 PaneLinkList m_PaneLinkList; 180 char m_Name[ResourceNameStrMax + 1]; 181 u8 m_UserAllocated; // ユーザにより構築された場合は真 182 u8 m_Padding[2]; 183 }; 184 185 //! @name 管理 186 //@{ 187 188 //! @brief グループの一覧を保持します。 189 //! 190 //! @since 2009/09/18 初版。 191 //! 192 typedef ut::LinkList<Group, offsetof(Group, m_Link_)> GroupList; 193 194 //@} 195 196 //--------------------------------------------------------------------------- 197 //! :category 管理 198 //! 199 //! @brief グループを管理するためのクラスです。 200 //! 201 //! @details 202 //! Layout::GetGroupContainer() で取得します。 203 //! 204 //! @since 2009/09/18 初版。 205 //--------------------------------------------------------------------------- 206 class GroupContainer 207 { 208 public: 209 //---------------------------------------- 210 //! @name コンストラクタ/デストラクタ 211 //@{ 212 213 //! @brief コンストラクタです。 214 //! 215 //! @since 2009/09/18 初版。 216 //! GroupContainer()217 GroupContainer() 218 {} 219 220 //! @brief デストラクタです。 221 //! 222 //! @since 2009/09/18 初版。 223 //! 224 ~GroupContainer(); 225 226 //@} 227 228 //---------------------------------------- 229 //! @name 取得/設定 230 //@{ 231 232 //! @brief グループを追加します。 233 //! 234 //! @param pGroup グループへのポインタです。 235 //! 236 //! @since 2009/09/18 初版。 237 //! 238 void AppendGroup(Group* pGroup); 239 240 //@} 241 242 //---------------------------------------- 243 //! @name 取得/設定 244 //@{ 245 246 //! @brief グループの一覧を取得します。 247 //! 248 //! @return 249 //! グループの一覧を返します。 250 //! 251 //! @since 2009/09/18 初版。 252 //! GetGroupList()253 GroupList& GetGroupList() 254 { 255 return m_GroupList; 256 } 257 258 //@} 259 260 //---------------------------------------- 261 //! @name 検索 262 //@{ 263 264 //! @brief 名前でグループを検索します。 265 //! 266 //! @param findName 検索するグループ名です。 267 //! 268 //! @return 見つかった場合はグループへのポインタを、 269 //! 見つからなかった場合は NULL を返します。 270 //! 271 //! @since 2009/09/18 初版。 272 //! 273 Group* FindGroupByName(const char* findName); 274 275 //@} 276 277 private: 278 GroupList m_GroupList; 279 280 }; 281 282 } // namespace nw::lyt 283 } // namespace nw 284 285 #endif // NW_LYT_GROUP_H_ 286 287