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: 26780 $ 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 protected: 177 //! @details :private 178 void Init(); 179 180 //! @details :private 181 PaneLinkList m_PaneLinkList; 182 183 //! @details :private 184 char m_Name[ResourceNameStrMax + 1]; 185 186 //! @details :private 187 //! ユーザにより構築された場合は真 188 u8 m_UserAllocated; 189 190 //! @details :private 191 u8 m_Padding[2]; 192 }; 193 194 //! @name 管理 195 //@{ 196 197 //! @brief グループの一覧を保持します。 198 //! 199 //! @since 2009/09/18 初版。 200 //! 201 typedef ut::LinkList<Group, offsetof(Group, m_Link_)> GroupList; 202 203 //@} 204 205 //--------------------------------------------------------------------------- 206 //! :category 管理 207 //! 208 //! @brief グループを管理するためのクラスです。 209 //! 210 //! @details 211 //! Layout::GetGroupContainer() で取得します。 212 //! 213 //! @since 2009/09/18 初版。 214 //--------------------------------------------------------------------------- 215 class GroupContainer 216 { 217 public: 218 //---------------------------------------- 219 //! @name コンストラクタ/デストラクタ 220 //@{ 221 222 //! @brief コンストラクタです。 223 //! 224 //! @since 2009/09/18 初版。 225 //! GroupContainer()226 GroupContainer() 227 {} 228 229 //! @brief デストラクタです。 230 //! 231 //! @since 2009/09/18 初版。 232 //! 233 ~GroupContainer(); 234 235 //@} 236 237 //---------------------------------------- 238 //! @name 取得/設定 239 //@{ 240 241 //! @brief グループを追加します。 242 //! 243 //! @param pGroup グループへのポインタです。 244 //! 245 //! @since 2009/09/18 初版。 246 //! 247 void AppendGroup(Group* pGroup); 248 249 //@} 250 251 //---------------------------------------- 252 //! @name 取得/設定 253 //@{ 254 255 //! @brief グループの一覧を取得します。 256 //! 257 //! @return 258 //! グループの一覧を返します。 259 //! 260 //! @since 2009/09/18 初版。 261 //! GetGroupList()262 GroupList& GetGroupList() 263 { 264 return m_GroupList; 265 } 266 267 //@} 268 269 //---------------------------------------- 270 //! @name 検索 271 //@{ 272 273 //! @brief 名前でグループを検索します。 274 //! 275 //! @param findName 検索するグループ名です。 276 //! 277 //! @return 見つかった場合はグループへのポインタを、 278 //! 見つからなかった場合は NULL を返します。 279 //! 280 //! @since 2009/09/18 初版。 281 //! 282 Group* FindGroupByName(const char* findName); 283 284 //@} 285 286 protected: 287 //! @details :private 288 GroupList m_GroupList; 289 290 }; 291 292 } // namespace nw::lyt 293 } // namespace nw 294 295 #endif // NW_LYT_GROUP_H_ 296 297