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