Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(543)

Unified Diff: chrome/browser/chromeos/input_method/ibus_controller.h

Issue 7046069: Copy chromeos_input_method* from libcros as-is. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/chromeos/input_method/ibus_controller.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/input_method/ibus_controller.h
diff --git a/chrome/browser/chromeos/input_method/ibus_controller.h b/chrome/browser/chromeos/input_method/ibus_controller.h
new file mode 100644
index 0000000000000000000000000000000000000000..741319d04229bad3191963386bb22da74a340d85
--- /dev/null
+++ b/chrome/browser/chromeos/input_method/ibus_controller.h
@@ -0,0 +1,322 @@
+// Copyright (c) 2011 The Chromium OS 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 CHROMEOS_INPUT_METHOD_H_
+#define CHROMEOS_INPUT_METHOD_H_
+
+#include <sstream>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include <base/basictypes.h>
+#include <base/logging.h> // DCHECK
+#include <base/string_split.h>
+
+namespace chromeos {
+
+// A structure which represents an input method. All methods in this class have
+// to be in chromeos_input_method.h since Chrome also creates an instance of
+// the class.
+struct InputMethodDescriptor {
+ InputMethodDescriptor() {
+ }
+
+ // Do not call this function directly. Use CreateInputMethodDescriptor() in
+ // chromeos_input_method.cc whenever possible.
+ InputMethodDescriptor(const std::string& in_id,
+ const std::string& in_display_name,
+ const std::string& in_keyboard_layout,
+ const std::string& in_virtual_keyboard_layouts,
+ const std::string& in_language_code)
+ : virtual_keyboard_layouts_(in_virtual_keyboard_layouts),
+ id(in_id),
+ display_name(in_display_name),
+ keyboard_layout(in_keyboard_layout),
+ language_code(in_language_code) {
+ DCHECK(keyboard_layout.find(",") == std::string::npos);
+ }
+
+ bool operator==(const InputMethodDescriptor& other) const {
+ return (id == other.id);
+ }
+
+ // Debug print function.
+ std::string ToString() const {
+ std::stringstream stream;
+ stream << "id=" << id
+ << ", display_name=" << display_name
+ << ", keyboard_layout=" << keyboard_layout
+ << ", virtual_keyboard_layouts=" << virtual_keyboard_layouts_
+ << ", language_code=" << language_code;
+ return stream.str();
+ }
+
+ // TODO(yusukes): When libcros is moved to Chrome, do the following:
+ // 1. Change the type of the virtual_keyboard_layouts_ variable to
+ // std::vector<std::string> and rename it back to virtual_keyboard_layouts.
+ // 2. Remove the virtual_keyboard_layouts() function.
+ // We can't do them right now because it will break ABI compatibility...
+ std::vector<std::string> virtual_keyboard_layouts() const {
+ std::vector<std::string> layout_names;
+ base::SplitString(virtual_keyboard_layouts_, ',', &layout_names);
+ return layout_names;
+ }
+
+ // Preferred virtual keyboard layouts for the input method. Comma separated
+ // layout names in order of priority, such as "handwriting,us", could appear.
+ // Note: DO NOT ACCESS THIS VARIABLE DIRECTLY. USE virtual_keyboard_layouts()
+ // INSTEAD. SEE THE TODO ABOVE.
+ std::string virtual_keyboard_layouts_;
+
+ // An ID that identifies an input method engine (e.g., "t:latn-post",
+ // "pinyin", "hangul").
+ std::string id;
+ // An input method name which can be used in the UI (e.g., "Pinyin").
+ std::string display_name;
+ // A preferred physical keyboard layout for the input method (e.g., "us",
+ // "us(dvorak)", "jp"). Comma separated layout names do NOT appear.
+ std::string keyboard_layout;
+ // Language codes like "ko", "ja", "zh_CN", and "t".
+ // "t" is used for languages in the "Others" category.
+ std::string language_code;
+};
+typedef std::vector<InputMethodDescriptor> InputMethodDescriptors;
+
+// A structure which represents a property for an input method engine. For
+// details, please check a comment for the LanguageRegisterImePropertiesFunction
+// typedef below.
+// TODO(yusukes): Rename this struct. "InputMethodProperty" might be better?
+struct ImeProperty {
+ ImeProperty(const std::string& in_key,
+ const std::string& in_label,
+ bool in_is_selection_item,
+ bool in_is_selection_item_checked,
+ int in_selection_item_id)
+ : key(in_key),
+ label(in_label),
+ is_selection_item(in_is_selection_item),
+ is_selection_item_checked(in_is_selection_item_checked),
+ selection_item_id(in_selection_item_id) {
+ DCHECK(!key.empty());
+ }
+
+ ImeProperty()
+ : is_selection_item(false),
+ is_selection_item_checked(false),
+ selection_item_id(kInvalidSelectionItemId) {
+ }
+
+ // Debug print function.
+ std::string ToString() const {
+ std::stringstream stream;
+ stream << "key=" << key
+ << ", label=" << label
+ << ", is_selection_item=" << is_selection_item
+ << ", is_selection_item_checked=" << is_selection_item_checked
+ << ", selection_item_id=" << selection_item_id;
+ return stream.str();
+ }
+
+ std::string key; // A key which identifies the property. Non-empty string.
+ // (e.g. "InputMode.HalfWidthKatakana")
+ // DEPRECATED: TODO(yusukes): Remove this when it's ready.
+ std::string deprecated_icon_path;
+ 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.
+ int selection_item_id; // A group ID (>= 0) of the selection item.
+ // kInvalidSelectionItemId if |is_selection_item| is
+ // false.
+ static const int kInvalidSelectionItemId = -1;
+};
+typedef std::vector<ImeProperty> ImePropertyList;
+
+// A structure which represents a value of an input method configuration item.
+// This struct is used by SetImeConfig().
+// TODO(yusukes): Rename this struct. "InputMethodConfigValue" might be better?
+struct ImeConfigValue {
+ ImeConfigValue()
+ : type(kValueTypeString),
+ int_value(0),
+ bool_value(false) {
+ }
+
+ // Debug print function.
+ std::string ToString() const {
+ std::stringstream stream;
+ stream << "type=" << type;
+ switch (type) {
+ case kValueTypeString:
+ stream << ", string_value=" << string_value;
+ break;
+ case kValueTypeInt:
+ stream << ", int_value=" << int_value;
+ break;
+ case kValueTypeBool:
+ stream << ", bool_value=" << (bool_value ? "true" : "false");
+ break;
+ case kValueTypeStringList:
+ stream << ", string_list_value=";
+ for (size_t i = 0; i < string_list_value.size(); ++i) {
+ if (i) {
+ stream << ",";
+ }
+ stream << string_list_value[i];
+ }
+ break;
+ }
+ return stream.str();
+ }
+
+ enum ValueType {
+ kValueTypeString = 0,
+ kValueTypeInt,
+ kValueTypeBool,
+ kValueTypeStringList,
+ };
+
+ // A value is stored on |string_value| member if |type| is kValueTypeString.
+ // The same is true for other enum values.
+ ValueType type;
+
+ std::string string_value;
+ int int_value;
+ bool bool_value;
+ std::vector<std::string> string_list_value;
+};
+
+// A monitor function which is called when current input method is changed by a
+// user.
+typedef void(*LanguageCurrentInputMethodMonitorFunction)(
+ void* language_library, const InputMethodDescriptor& current_input_method);
+
+// A monitor function which is called when "RegisterProperties" signal is sent
+// from ibus-daemon. The signal contains a list of properties for a specific
+// input method engine. For example, Japanese input method might have the
+// following properties:
+//
+// ----------------------------------
+// key: InputMode.Hiragana
+// label: Hiragana
+// is_selection_item: true
+// is_selection_item_checked: true
+// selection_item_id: 1
+// ----------------------------------
+// key: InputMode.Katakana
+// label: Katakana
+// is_selection_item: true
+// is_selection_item_checked: false
+// selection_item_id: 1
+// ----------------------------------
+// ...
+// ----------------------------------
+typedef void(*LanguageRegisterImePropertiesFunction)(
+ void* language_library, const ImePropertyList& prop_list);
+
+// A monitor function which is called when "UpdateProperty" signal is sent
+// from ibus-daemon. The signal contains one or more properties which is updated
+// recently. Keys the signal contains are a subset of keys registered by the
+// "RegisterProperties" signal above. For example,
+// Japanese input method might send the following properties:
+//
+// ----------------------------------
+// key: InputMode.Hiragana
+// label: Hiragana
+// is_selection_item: true
+// is_selection_item_checked: false
+// selection_item_id: ...
+// ----------------------------------
+// key: InputMode.Katakana
+// label: Katakana
+// is_selection_item: true
+// is_selection_item_checked: true
+// selection_item_id: ...
+// ----------------------------------
+//
+// Note: Please do not use selection_item_ids in |prop_list|. Dummy values are
+// filled in the field.
+typedef void(*LanguageUpdateImePropertyFunction)(
+ void* language_library, const ImePropertyList& prop_list);
+
+// A monitor function which is called when ibus connects or disconnects.
+typedef void(*LanguageConnectionChangeMonitorFunction)(
+ void* language_library, bool connected);
+
+// Establishes IBus connection to the ibus-daemon. LanguageXXXFunction functions
+// will be called when status of input method engines is changed.
+class InputMethodStatusConnection;
+extern InputMethodStatusConnection* (*MonitorInputMethodStatus)(
+ void* language_library,
+ LanguageCurrentInputMethodMonitorFunction current_input_method,
+ LanguageRegisterImePropertiesFunction register_ime_properties,
+ LanguageUpdateImePropertyFunction update_ime_property,
+ LanguageConnectionChangeMonitorFunction connection_changed);
+
+// Stops ibus-daemon. Returns true on success.
+extern bool (*StopInputMethodProcess)(InputMethodStatusConnection* connection);
+
+// Gets all input method engines that are supported, including ones not active.
+// Caller has to delete the returned list. This function never returns NULL.
+extern InputMethodDescriptors* (*GetSupportedInputMethodDescriptors)();
+
+// Changes the current input method engine to |name|. Returns true on success.
+// Examples of names: "pinyin", "m17n:ar:kbd", "xkb:us:dvorak:eng".
+extern bool (*ChangeInputMethod)(
+ InputMethodStatusConnection* connection, const char* name);
+
+// Sets whether the input method property specified by |key| is activated.
+// If |activated| is true, activates the property. If |activated| is false,
+// deactivates the property.
+// TODO(yusukes): "SetInputMethodPropertyActivated" might be better?
+extern void (*SetImePropertyActivated)(InputMethodStatusConnection* connection,
+ const char* key,
+ bool activated);
+
+// Sets a configuration of ibus-daemon or IBus engines to |value|.
+// Returns true if the configuration is successfully set.
+//
+// To set 'panel/custom_font', |section| should be "panel", and
+// |config_name| should be "custom_font".
+// TODO(yusukes): "SetInputMethodConfig" might be better?
+extern bool (*SetImeConfig)(InputMethodStatusConnection* connection,
+ const char* section,
+ const char* config_name,
+ const ImeConfigValue& value);
+
+// Returns the keyboard overlay ID corresponding to |input_method_id|.
+// Returns an empty string if there is no corresponding keyboard overlay ID.
+extern std::string (*GetKeyboardOverlayId)(
+ const std::string& input_method_id);
+
+// Sends a handwriting stroke to ibus-daemon. The std::pair contains x and y
+// coordinates. (0.0, 0.0) represents the top-left corner of a handwriting area,
+// and (1.0, 1.0) does the bottom-right. For example, the second stroke for ロ
+// (Katakana character Ro) would be something like [(0,0), (1,0), (1,1)].
+// stroke.size() should always be >= 2 (i.e. a single dot is not allowed).
+typedef std::vector<std::pair<double, double> > HandwritingStroke;
+extern void (*SendHandwritingStroke)(
+ InputMethodStatusConnection* connection, const HandwritingStroke& stroke);
+
+// Clears the last N handwriting strokes. Pass zero for clearing all strokes.
+// TODO(yusukes): Currently ibus-daemon only accepts 0 for |n_strokes|.
+extern void (*CancelHandwriting)(InputMethodStatusConnection* connection,
+ int n_strokes);
+
+//
+// FUNCTIONS BELOW ARE ONLY FOR UNIT TESTS. DO NOT USE THEM.
+//
+bool InputMethodIdIsWhitelisted(const std::string& input_method_id);
+bool XkbLayoutIsSupported(const std::string& xkb_layout);
+InputMethodDescriptor CreateInputMethodDescriptor(
+ const std::string& id,
+ const std::string& display_name,
+ const std::string& raw_layout,
+ const std::string& language_code);
+
+} // namespace chromeos
+
+#endif // CHROMEOS_INPUT_METHOD_H_
« no previous file with comments | « no previous file | chrome/browser/chromeos/input_method/ibus_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698