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_LOOKUP_TABLE_H_
      6 #define CHROMEOS_DBUS_IBUS_IBUS_LOOKUP_TABLE_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 #include "base/basictypes.h"
     11 #include "base/memory/scoped_ptr.h"
     12 #include "chromeos/chromeos_export.h"
     13 
     14 namespace dbus {
     15 class MessageWriter;
     16 class MessageReader;
     17 }  // namespace dbus
     18 
     19 namespace chromeos {
     20 
     21 // The IBusLookupTable is one of IBusObjects. IBusLookupTable contains IBusTexts
     22 // but all of them are used as plain string. The overview of each data
     23 // structure is as follows:
     24 //
     25 // DATA STRUCTURE OVERVIEW:
     26 //  variant  struct {
     27 //   string "IBusLookupTable"
     28 //   array [
     29 //     dict_entry (
     30 //       string "window_show_at_composition"
     31 //       variant  variant  boolean false
     32 //       ]
     33 //     )
     34 //   ]
     35 //   uint32 9  // Page size
     36 //   uint32 1  // Cursor position
     37 //   boolean true  // Cursor visibility.
     38 //   boolean true  // Round lookup table or not. Not used in Chrome.
     39 //   int32 1  // Orientation
     40 //   array [  // Array of candidate text.
     41 //    variant struct {
     42 //      string "IBusText"
     43 //      array []
     44 //      string "Candidate Text"
     45 //      variant struct {
     46 //       string "IBusAttrList"
     47 //       array []
     48 //       array []
     49 //       }
     50 //     }
     51 //     ... more IBusTexts
     52 //   ]
     53 //   array [  // Array of label text
     54 //    variant struct {
     55 //      string "IBusText"
     56 //      array []
     57 //      string "1"
     58 //      variant struct {
     59 //       string "IBusAttrList"
     60 //       array []
     61 //       array []
     62 //       }
     63 //     }
     64 //     ... more IBusTexts
     65 //   ]
     66 //  }
     67 //  TODO(nona): Clean up the structure.(crbug.com/129403)
     68 class IBusLookupTable;
     69 
     70 // Pops a IBusLookupTable from |reader|.
     71 // Returns false if an error occurs.
     72 bool CHROMEOS_EXPORT PopIBusLookupTable(dbus::MessageReader* reader,
     73                                         IBusLookupTable* table);
     74 // Appends a IBusLookupTable to |writer| except mozc_candidates_ in |table|.
     75 void CHROMEOS_EXPORT AppendIBusLookupTable(const IBusLookupTable& table,
     76                                            dbus::MessageWriter* writer);
     77 
     78 // An representation of IBusLookupTable object which is used in dbus
     79 // communication with ibus-daemon.
     80 class CHROMEOS_EXPORT IBusLookupTable {
     81  public:
     82   enum Orientation {
     83     HORIZONTAL = 0,
     84     VERTICAL = 1,
     85   };
     86 
     87   // Represents a candidate entry. In dbus communication, each
     88   // field is represented as IBusText, but attributes are not used in Chrome.
     89   // So just simple string is sufficient in this case.
     90   struct Entry {
     91     Entry();
     92     virtual ~Entry();
     93     std::string value;
     94     std::string label;
     95     std::string annotation;
     96     std::string description_title;
     97     std::string description_body;
     98   };
     99 
    100   IBusLookupTable();
    101   virtual ~IBusLookupTable();
    102 
    103   // Returns true if the given |table| is equal to myself.
    104   bool IsEqual(const IBusLookupTable& table) const;
    105 
    106   // Copies |table| to myself.
    107   void CopyFrom(const IBusLookupTable& table);
    108 
    109   // Returns the number of candidates in one page.
    110   uint32 page_size() const { return page_size_; }
    111   void set_page_size(uint32 page_size) { page_size_ = page_size; }
    112 
    113   // Returns the cursor index of the currently selected candidate.
    114   uint32 cursor_position() const { return cursor_position_; }
    115   void set_cursor_position(uint32 cursor_position) {
    116     cursor_position_ = cursor_position;
    117   }
    118 
    119   // Returns true if the cursor is visible.
    120   bool is_cursor_visible() const { return is_cursor_visible_; }
    121   void set_is_cursor_visible(bool is_cursor_visible) {
    122     is_cursor_visible_ = is_cursor_visible;
    123   }
    124 
    125   // Returns the orientation of lookup table.
    126   Orientation orientation() const { return orientation_; }
    127   void set_orientation(Orientation orientation) {
    128     orientation_ = orientation;
    129   }
    130 
    131   const std::vector<Entry>& candidates() const { return candidates_; }
    132   std::vector<Entry>* mutable_candidates() { return &candidates_; }
    133 
    134   bool show_window_at_composition() const {
    135     return show_window_at_composition_;
    136   }
    137   void set_show_window_at_composition(bool show_window_at_composition) {
    138     show_window_at_composition_ = show_window_at_composition;
    139   }
    140 
    141  private:
    142   uint32 page_size_;
    143   uint32 cursor_position_;
    144   bool is_cursor_visible_;
    145   Orientation orientation_;
    146   std::vector<Entry> candidates_;
    147   bool show_window_at_composition_;
    148 
    149   DISALLOW_COPY_AND_ASSIGN(IBusLookupTable);
    150 };
    151 
    152 }  // namespace chromeos
    153 
    154 #endif  // CHROMEOS_DBUS_IBUS_IBUS_LOOKUP_TABLE_H_
    155