| Index: chromeos/dbus/ibus/ibus_object.h
|
| diff --git a/chromeos/dbus/ibus/ibus_object.h b/chromeos/dbus/ibus/ibus_object.h
|
| index b6cf45cf8d007024355b559ba5548e57efdb3fed..66defa6220cf371fd64ab91a1e19e4ee16fcfdca 100644
|
| --- a/chromeos/dbus/ibus/ibus_object.h
|
| +++ b/chromeos/dbus/ibus/ibus_object.h
|
| @@ -5,17 +5,23 @@
|
| #ifndef CHROMEOS_DBUS_IBUS_IBUS_OBJECT_H_
|
| #define CHROMEOS_DBUS_IBUS_IBUS_OBJECT_H_
|
|
|
| +#include <map>
|
| #include <string>
|
| +
|
| #include "base/basictypes.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "chromeos/chromeos_export.h"
|
| #include "chromeos/dbus/ibus/ibus_property.h"
|
| #include "chromeos/dbus/ibus/ibus_text.h"
|
|
|
| +namespace base {
|
| +class Value;
|
| +} // namespace base
|
| +
|
| namespace dbus {
|
| class MessageReader;
|
| class MessageWriter;
|
| -} // dbus
|
| +} // namespace dbus
|
|
|
| namespace chromeos {
|
| // TODO(nona): Remove ibus namespace after complete libibus removal.
|
| @@ -75,6 +81,12 @@ namespace ibus {
|
| // // Craetes reader for IBusText
|
| // IBusObjectReader object_reader("IBusText", &reader);
|
| //
|
| +// // Initialize for reading attachment field.
|
| +// object_reader.Init();
|
| +//
|
| +// // Get attachment field.
|
| +// base::Value* value = object_reader.GetAttachment("annotation");
|
| +//
|
| // std::string text;
|
| // reader.PopString(&text); // Reading 1st value as string.
|
| //
|
| @@ -93,10 +105,6 @@ class CHROMEOS_EXPORT IBusObjectReader {
|
| // to read attachment field.
|
| bool Init();
|
|
|
| - // Reads IBusObject headers and checks if the type name is valid.
|
| - // Returns true and sets up reader for attachment reading on success.
|
| - bool InitWithAttachmentReader(dbus::MessageReader* reader);
|
| -
|
| // Reads IBusOBject with |reader| and checks if the type name is valid.
|
| bool InitWithParentReader(dbus::MessageReader* reader);
|
|
|
| @@ -129,6 +137,10 @@ class CHROMEOS_EXPORT IBusObjectReader {
|
| // Pops a IBusPropertyList.
|
| bool PopIBusPropertyList(ibus::IBusPropertyList* property_list);
|
|
|
| + // Gets attachment entry corresponding to |key|. Do not free returned value.
|
| + // Returns NULL if there is no entry.
|
| + const base::Value* GetAttachment(const std::string& key);
|
| +
|
| private:
|
| enum CheckResult {
|
| IBUS_OBJECT_VALID, // Already checked and valid type.
|
| @@ -136,15 +148,12 @@ class CHROMEOS_EXPORT IBusObjectReader {
|
| IBUS_OBJECT_NOT_CHECKED, // Not checked yet.
|
| };
|
|
|
| - // Reads IBusObject headers without attachment and checks if the type name
|
| - // is valid.
|
| - bool InitWithoutAttachment();
|
| -
|
| std::string type_name_;
|
| dbus::MessageReader* original_reader_;
|
| scoped_ptr<dbus::MessageReader> top_variant_reader_;
|
| scoped_ptr<dbus::MessageReader> contents_reader_;
|
| CheckResult check_result_;
|
| + std::map<std::string, base::Value*> attachments_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(IBusObjectReader);
|
| };
|
| @@ -158,6 +167,13 @@ class CHROMEOS_EXPORT IBusObjectReader {
|
| // // Creates writer for IBusText
|
| // IBusObjectWriter object_writer("IBusText", "sv", &writer);
|
| //
|
| +// // Add some attachments.
|
| +// base::Value* value = base::Value::CreateStringValue("Noun");
|
| +// object_writer.AddAttachment("annotation", *value);
|
| +//
|
| +// // Close header section.
|
| +// object_writer.CloseHeader();
|
| +//
|
| // const std::string text = "Sample Text";
|
| // writer.AppendString(text);
|
| //
|
| @@ -170,15 +186,28 @@ class CHROMEOS_EXPORT IBusObjectReader {
|
| // object_writer.CloseAll();
|
| class CHROMEOS_EXPORT IBusObjectWriter {
|
| public:
|
| + enum WriterState {
|
| + NOT_INITIALZED, // Created but not initialized.
|
| + HEADER_OPEN, // Ready for writing attachment field.
|
| + INITIALIZED // Ready for writing content values.
|
| + };
|
| +
|
| // |writer| must be released by caller.
|
| IBusObjectWriter(const std::string& type_name,
|
| const std::string& signature,
|
| dbus::MessageWriter* writer);
|
| virtual ~IBusObjectWriter();
|
|
|
| + // Closes header to write content values.
|
| + void CloseHeader();
|
| +
|
| // Appends IBusObject headers with |writer|, should be called once.
|
| void InitWithParentWriter(dbus::MessageWriter* writer);
|
|
|
| + // Adds an attachment, this function can be called only before CloseHeader
|
| + // function call.
|
| + bool AddAttachment(const std::string& key, const base::Value& value);
|
| +
|
| // The following functions delegate dbus::MessageReader's functions.
|
| void AppendString(const std::string& input);
|
| void AppendUint32(uint32 value);
|
| @@ -194,9 +223,6 @@ class CHROMEOS_EXPORT IBusObjectWriter {
|
| // Closes all opened containers.
|
| void CloseAll();
|
|
|
| - // Returns true if writer is initialized.
|
| - bool IsInitialized() const;
|
| -
|
| // Appends a IBusText.
|
| void AppendIBusText(const ibus::IBusText& text);
|
|
|
| @@ -217,8 +243,10 @@ class CHROMEOS_EXPORT IBusObjectWriter {
|
| std::string type_name_;
|
| std::string signature_;
|
| dbus::MessageWriter* original_writer_;
|
| + WriterState state_;
|
| scoped_ptr<dbus::MessageWriter> top_variant_writer_;
|
| scoped_ptr<dbus::MessageWriter> contents_writer_;
|
| + scoped_ptr<dbus::MessageWriter> attachment_writer_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(IBusObjectWriter);
|
| };
|
|
|