/*
 * 版权所有 (c) 2010-2011，MiCode 开源社区 (www.micode.net)
 * 根据 Apache 许可证 2.0 版本（"许可证"）授权；
 * 除非符合许可证的规定，否则不得使用本文件。
 * 您可以从以下网址获取许可证副本：
 * http://www.apache.org/licenses/LICENSE-2.0
 * 除非适用法律要求或书面同意，本软件按"原样"分发，
 * 没有任何明示或暗示的保证或条件。
 * 详见许可证中规定的权限和限制。
 * （注：这是一份标准的Apache许可证2.0版本的开源声明）
 */
// 定义包路径
package net.micode.notes.ui;

// 导入Android相关类库
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;           // 资源ID引用

/**
 * 下拉菜单封装类
 * 将PopupMenu与Button绑定，简化下拉菜单的实现
 */
public class DropdownMenu {
    // 成员变量
    private Button mButton;         // 触发菜单的按钮
    private PopupMenu mPopupMenu;   // 弹出菜单实例
    private Menu mMenu;            // 菜单对象

    /**
     * 构造函数
     * @param context 上下文对象
     * @param button 绑定的按钮控件
     * @param menuId 菜单资源ID（R.menu.xxx ）
     */
    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() {
            @Override
            public void onClick(View v) {
                mPopupMenu.show();   // 显示弹出菜单
            }
        });
    }

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

    /**
     * 查找菜单项
     * @param id 菜单项ID（R.id.xxx ）
     * @return 找到的MenuItem对象
     */
    public MenuItem findItem(int id) {
        return mMenu.findItem(id);
    }

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