/*
 * 版权所有 (c) 2010-2011，The MiCode Open Source Community (www.micode.net)
 *
 * 本软件根据 Apache 许可证 2.0 版（"许可证"）发布；
 * 除非符合许可证，否则不得使用此文件。
 * 您可以在以下网址获取许可证副本：
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 * 除非法律要求或书面同意，软件
 * 根据许可证分发的内容按"原样"提供，
 * 不附带任何明示或暗示的保证或条件。
 * 请参阅许可证，了解有关权限和限制的具体语言。
 */

package net.micode.notes.ui;

import android.content.Context;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;

import net.micode.notes.R;

/**
 * 下拉菜单组件（封装PopupMenu功能）
 * 功能：
 * 1. 将按钮与PopupMenu关联，点击按钮显示下拉菜单
 * 2. 支持菜单项点击事件监听
 * 3. 提供查找菜单项和设置按钮标题的接口
 */
public class DropdownMenu {
    private Button mButton;         // 触发下拉菜单的按钮
    private PopupMenu mPopupMenu;   // 弹出式菜单
    private Menu mMenu;             // 菜单项集合

    /**
     * 构造方法：初始化下拉菜单
     * @param context 上下文
     * @param button 触发菜单的按钮
     * @param menuId 菜单布局资源ID
     */
    public DropdownMenu(Context context, Button button, int menuId) {
        mButton = button;
        // 设置按钮背景为下拉图标（自定义样式）
        mButton.setBackgroundResource(R.drawable.dropdown_icon);

        // 创建PopupMenu并关联到按钮
        mPopupMenu = new PopupMenu(context, mButton);
        mMenu = mPopupMenu.getMenu();

        // 从资源加载菜单项
        mPopupMenu.getMenuInflater().inflate(menuId, mMenu);

        // 设置按钮点击事件：点击时显示菜单
        mButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mPopupMenu.show();
            }
        });
    }

    /**
     * 设置菜单项点击事件监听器
     * @param listener 菜单项点击监听器
     */
    public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) {
        if (mPopupMenu != null) {
            mPopupMenu.setOnMenuItemClickListener(listener);
        }
    }

    /**
     * 查找指定ID的菜单项
     * @param id 菜单项ID
     * @return 对应的MenuItem对象
     */
    public MenuItem findItem(int id) {
        return mMenu.findItem(id);
    }

    /**
     * 设置按钮的标题文本
     * @param title 标题文本
     */
    public void setTitle(CharSequence title) {
        mButton.setText(title);
    }
}