/**
 * 文件名称：DropdownMenu.java
 * 版权声明：版权所有 (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
 * 许可证声明：根据Apache License, Version 2.0（“许可证”）获得许可；
 * 除非遵守许可证，否则不得使用此文件。
 * 您可以在以下网址获得许可证的副本：
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 * 除非适用法律要求或书面同意，否则按“现状”分发的软件是在没有任何明示或暗示的
 * 保证和条件的情况下提供的，包括但不限于关于所有权、不侵犯第三方权利、适销性或
 * 适用于特定用途的任何保证和条件。有关权限和限制的具体语言，请参见许可证。
 */

package net.micode.notes.ui; // 定义包名

import android.content.Context; // 导入Context类，用于获取系统资源和服务
import android.view.Menu; // 导入Menu类，用于操作菜单
import android.view.MenuItem; // 导入MenuItem类，用于操作菜单项
import android.view.View; // 导入View类，用于操作视图
import android.view.View.OnClickListener; // 导入OnClickListener接口，用于设置点击事件
import android.widget.Button; // 导入Button类，用于操作按钮
import android.widget.PopupMenu; // 导入PopupMenu类，用于创建弹出菜单
import android.widget.PopupMenu.OnMenuItemClickListener; // 导入OnMenuItemClickListener接口，用于设置菜单项点击事件

import net.micode.notes.R; // 导入R类，用于访问资源文件

/**
 * DropdownMenu 类用于创建一个下拉菜单（Dropdown Menu）。
 */
public class DropdownMenu {
    // 成员变量
    private Button mButton; // 用于触发下拉菜单的按钮
    private PopupMenu mPopupMenu; // 弹出菜单对象
    private Menu mMenu; // 菜单对象

    /**
     * DropdownMenu 构造函数。
     * @param context 上下文环境，用于获取系统资源和服务。
     * @param button 用于触发下拉菜单的按钮。
     * @param menuId 菜单资源ID，用于从XML资源文件中加载菜单项。
     */
    public DropdownMenu(Context context, Button button, int menuId) {
        mButton = button; // 初始化按钮
        mButton.setBackgroundResource(R.drawable.dropdown_icon); // 设置按钮背景图标
        mPopupMenu = new PopupMenu(context, mButton); // 创建PopupMenu对象
        mMenu = mPopupMenu.getMenu(); // 获取PopupMenu的Menu对象
        mPopupMenu.getMenuInflater().inflate(menuId, mMenu); // 从XML资源文件中加载菜单项
        mButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mPopupMenu.show(); // 设置按钮点击事件，显示PopupMenu
            }
        });
    }

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

    /**
     * 查找具有指定ID的菜单项。
     * @param id 菜单项ID。
     * @return 返回找到的MenuItem对象，如果没有找到则返回null。
     */
    public MenuItem findItem(int id) {
        return mMenu.findItem(id); // 在Menu中查找指定ID的菜单项
    }

    /**
     * 设置触发下拉菜单的按钮文本。
     * @param title 按钮文本。
     */
    public void setTitle(CharSequence title) {
        mButton.setText(title); // 设置按钮文本
    }
}