Home | History | Annotate | Download | only in ibus
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROMEOS_DBUS_IBUS_IBUS_COMPONENT_H_
      6 #define CHROMEOS_DBUS_IBUS_IBUS_COMPONENT_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 #include "base/basictypes.h"
     11 #include "chromeos/chromeos_export.h"
     12 
     13 namespace dbus {
     14 class MessageWriter;
     15 class MessageReader;
     16 }  // namespace dbus
     17 
     18 namespace chromeos {
     19 
     20 // The IBusComponents is one of IBusObjects and it contains one or more
     21 // IBusEngineDesc object which describes details of engine information. This
     22 // object is in used an engine's initialization.
     23 //
     24 // DATA STRUCTURE OVERVIEW:
     25 //
     26 // IBusEngineDesc: (signature is "ssssssssusss")
     27 // variant  struct {
     28 //     string "IBusEngineDesc"
     29 //     array []
     30 //     string "_ext_ime"  // The engine name.
     31 //     string "Mock IME"  // The long engine name.
     32 //     string "Mock IME"  // The engine description.
     33 //     string "en"  // The language identifier.
     34 //     string ""  // The license name field.(not in use).
     35 //     string "MockExtensionIME"  // The author name.
     36 //     string ""  // The icon path (not in use).
     37 //     string "us"  // The keyboard layout.
     38 //     uint32 0  // The engine rank. (not in use).
     39 //     string ""  // The hotkey to switch IME.(not in use)
     40 //     string ""  // The symbol character of this engine (not in use).
     41 //     string ""  // The command line to execute this engine (not in use).
     42 // }
     43 //
     44 // IBusComponent: (signature is "ssssssssavav")
     45 // variant       struct {
     46 //     string "IBusComponent"
     47 //     array []
     48 //     string "org.freedesktop.IBus._extension_ime"  // The component name.
     49 //     string "Mock IME with Extension API" // The component description.
     50 //     string ""  // The version of component.(not in use)
     51 //     string ""  // The license name field. (not in use).
     52 //     string "MockExtensionIME" // The author name.
     53 //     string ""  // The URL to home page(not in use).
     54 //     string ""  // The executable path to component (not in use).
     55 //     string ""  // The text domain field(not in use).
     56 //     array []  // The observed path object array(not in use).
     57 //     array [
     58 //         variant  struct {
     59 //             string "IBusEngineDesc"
     60 //             array []
     61 //             string "_ext_ime"
     62 //             string "Mock IME with Extension API"
     63 //             string "Mock IME with Extension API"
     64 //             string "en"
     65 //             string ""
     66 //             string "MockExtensionIME"
     67 //             string ""
     68 //             string "us"
     69 //             uint32 0
     70 //             string ""
     71 //             string ""
     72 //             string ""
     73 //         }
     74 //     ]
     75 // }
     76 class IBusComponent;
     77 
     78 // Pops a IBusComponent from |reader|.
     79 // Returns false if an error occurs.
     80 bool CHROMEOS_EXPORT PopIBusComponent(dbus::MessageReader* reader,
     81                                       IBusComponent* ibus_component);
     82 
     83 // Appends a IBusComponent to |writer|.
     84 void CHROMEOS_EXPORT AppendIBusComponent(const IBusComponent& ibus_component,
     85                                          dbus::MessageWriter* writer);
     86 
     87 // Handles IBusComponent object which is used in dbus communication with
     88 // ibus-daemon. The IBusComponent is one of IBusObjects and it contains array of
     89 // IBusEngineDesc. The IBusEngineDesc is another IBusObject, but it is
     90 // represented as member structure of IBusComponent because it is only used in
     91 // IBusComponent.
     92 class CHROMEOS_EXPORT IBusComponent {
     93  public:
     94   struct EngineDescription {
     95     EngineDescription();
     96     EngineDescription(const std::string& engine_id,
     97                       const std::string& display_name,
     98                       const std::string& description,
     99                       const std::string& language_code,
    100                       const std::string& author);
    101     ~EngineDescription();
    102     std::string engine_id;  // The engine id.
    103     std::string display_name;  // The display name.
    104     std::string description;  // The engine description.
    105     std::string language_code;  // The engine's language(ex. "en").
    106     std::string author;  // The author of engine.
    107   };
    108 
    109   IBusComponent();
    110   virtual ~IBusComponent();
    111 
    112   // The component name (ex. "org.freedesktop.IBus.Mozc").
    113   const std::string& name() const { return name_; }
    114   void set_name(const std::string& name) { name_ = name;}
    115 
    116   // The component description.
    117   const std::string& description() const { return description_; }
    118   void set_description(const std::string& description) {
    119     description_ = description;
    120   }
    121 
    122   // The component author (ex. "Google Inc.").
    123   const std::string& author() const { return author_; }
    124   void set_author(const std::string& author) { author_ = author; }
    125 
    126   // The array of engine description data.
    127   const std::vector<EngineDescription>& engine_description() const {
    128     return engine_description_;
    129   }
    130   std::vector<EngineDescription>* mutable_engine_description() {
    131     return &engine_description_;
    132   }
    133 
    134  private:
    135   std::string name_;
    136   std::string description_;
    137   std::string author_;
    138 
    139   std::vector<EngineDescription> engine_description_;
    140 
    141   DISALLOW_COPY_AND_ASSIGN(IBusComponent);
    142 };
    143 
    144 }  // namespace chromeos
    145 
    146 #endif  // CHROMEOS_DBUS_IBUS_IBUS_COMPONENT_H_
    147