// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ASH_IME_INPUT_METHOD_MENU_ITEM_H_
#define ASH_IME_INPUT_METHOD_MENU_ITEM_H_

#include <string>
#include <vector>
#include "ash/ash_export.h"

namespace ash {
namespace ime {

// A structure which represents a property for an input method engine.
struct ASH_EXPORT InputMethodMenuItem {
  InputMethodMenuItem(const std::string& in_key,
                      const std::string& in_label,
                      bool in_is_selection_item,
                      bool in_is_selection_item_checked);

  InputMethodMenuItem();
  ~InputMethodMenuItem();

  bool operator==(const InputMethodMenuItem& other) const;
  bool operator!=(const InputMethodMenuItem& other) const;

  // Debug print function.
  std::string ToString() const;

  std::string key;  // A key which identifies the property. Non-empty string.
                    // (e.g. "InputMode.HalfWidthKatakana")
  std::string label;  // A description of the property. Non-empty string.
                      // (e.g. "Switch to full punctuation mode", "Hiragana")
  bool is_selection_item;  // true if the property is a selection item.
  bool is_selection_item_checked;  // true if |is_selection_item| is true and
                                   // the selection_item is selected.
};
typedef std::vector<InputMethodMenuItem> InputMethodMenuItemList;

}  // namespace ime
}  // namespace ash

#endif  // ASH_IME_INPUT_METHOD_MENU_ITEM_H_
