/*---------------------------------------------------------------------------* Project: NintendoWare File: lyt_Group.h Copyright (C)2009-2011 Nintendo/HAL Laboratory, Inc. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo and/or its licensed developers and are protected by national and international copyright laws. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. The content herein is highly confidential and should be handled accordingly. $Revision: 31311 $ *---------------------------------------------------------------------------*/ #ifndef NW_LYT_GROUP_H_ #define NW_LYT_GROUP_H_ #include #include #include #include namespace nw { namespace lyt { //--------------------------------------------------------------------------- //! :category 管理 //! //! @brief グループに属するペインへのリンクです。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- struct PaneLink { //! :private //! @brief リンク情報です。 ut::LinkListNode link; //! グループに属するペインへのポインタです。 Pane* target; }; //! @name 管理 //@{ //! @brief ペインへのリンクの一覧を保持します。 //! //! @since 2009/09/18 初版。 //! typedef ut::LinkList PaneLinkList; //@} //--------------------------------------------------------------------------- //! :category 管理 //! //! @brief ペインをグループで管理するためのクラスです。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- class Group { public: //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @details //! ペインのない状態で初期化します。 //! //! @since 2009/09/18 初版。 //! Group(); //! @brief コンストラクタです。 //! //! @details //! グループリソースをもとにペインを追加した状態で初期化します。 //! //! @param pResGroup グループリソースへのポインタです。 //! @param pRootPane ルートペインへのポインタです。 //! //! @since 2009/09/18 初版。 //! Group(const res::Group* pResGroup, Pane* pRootPane); //! @brief デストラクタです。 //! //! @since 2009/09/18 初版。 //! virtual ~Group(); //@} //---------------------------------------- //! @name 取得/設定 //@{ //! @brief グループの名前を取得します。 //! //! @return グループの名前を返します。 //! //! @since 2009/09/18 初版。 //! const char* GetName() const { return m_Name; } //! @brief グループに所属するペインの一覧を取得します。 //! //! @return ペインの一覧を返します。 //! //! @since 2009/09/18 初版。 //! PaneLinkList& GetPaneList() { return m_PaneLinkList; } //@} //---------------------------------------- //! @name 追加 //@{ //! @brief ペインを追加します。 //! //! @param pPane ペインへのポインタです。 //! //! @since 2009/09/18 初版。 //! void AppendPane(Pane* pPane); //@} //---------------------------------------- //! @name その他 //@{ //! @brief ユーザーがグループを構築したかどうかを判定します。 //! //! @return グループをユーザーが構築した場合は true を返します。 //! //! @since 2009/09/18 初版。 //! bool IsUserAllocated() const { return m_UserAllocated != 0; } //! @brief ユーザーが構築したグループであることを宣言します。 //! //! @details //! ユーザが構築したと宣言されたグループはライブラリによって解放されません。 //! //! @since 2010/08/27 初版。 //! void SetUserAllocated() { m_UserAllocated = 1; } //@} //! :private //! @brief リンク情報です。 ut::LinkListNode m_Link_; protected: //! @details :private void Init(); //! @details :private PaneLinkList m_PaneLinkList; //! @details :private char m_Name[ResourceNameStrMax + 1]; //! @details :private //! ユーザにより構築された場合は真 u8 m_UserAllocated; //! @details :private u8 m_Padding[2]; }; //! @name 管理 //@{ //! @brief グループの一覧を保持します。 //! //! @since 2009/09/18 初版。 //! typedef ut::LinkList GroupList; //@} //--------------------------------------------------------------------------- //! :category 管理 //! //! @brief グループを管理するためのクラスです。 //! //! @details //! Layout::GetGroupContainer() で取得します。 //! //! @since 2009/09/18 初版。 //--------------------------------------------------------------------------- class GroupContainer { public: //---------------------------------------- //! @name コンストラクタ/デストラクタ //@{ //! @brief コンストラクタです。 //! //! @since 2009/09/18 初版。 //! GroupContainer() {} //! @brief デストラクタです。 //! //! @since 2009/09/18 初版。 //! ~GroupContainer(); //@} //---------------------------------------- //! @name 取得/設定 //@{ //! @brief グループを追加します。 //! //! @param pGroup グループへのポインタです。 //! //! @since 2009/09/18 初版。 //! void AppendGroup(Group* pGroup); //@} //---------------------------------------- //! @name 取得/設定 //@{ //! @brief グループの一覧を取得します。 //! //! @return //! グループの一覧を返します。 //! //! @since 2009/09/18 初版。 //! GroupList& GetGroupList() { return m_GroupList; } //@} //---------------------------------------- //! @name 検索 //@{ //! @brief 名前でグループを検索します。 //! //! @param findName 検索するグループ名です。 //! //! @return 見つかった場合はグループへのポインタを、 //! 見つからなかった場合は NULL を返します。 //! //! @since 2009/09/18 初版。 //! Group* FindGroupByName(const char* findName); //@} protected: //! @details :private GroupList m_GroupList; }; } // namespace nw::lyt } // namespace nw #endif // NW_LYT_GROUP_H_