15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROMEOS_DBUS_IBUS_IBUS_LOOKUP_TABLE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROMEOS_DBUS_IBUS_IBUS_LOOKUP_TABLE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/chromeos_export.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dbus {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MessageWriter;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MessageReader;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace dbus
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The IBusLookupTable is one of IBusObjects. IBusLookupTable contains IBusTexts
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// but all of them are used as plain string. The overview of each data
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// structure is as follows:
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DATA STRUCTURE OVERVIEW:
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//  variant  struct {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   string "IBusLookupTable"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   array [
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     dict_entry (
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//       string "window_show_at_composition"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//       variant  variant  boolean false
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//       ]
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     )
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   ]
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   uint32 9  // Page size
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   uint32 1  // Cursor position
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   boolean true  // Cursor visibility.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   boolean true  // Round lookup table or not. Not used in Chrome.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   int32 1  // Orientation
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   array [  // Array of candidate text.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//    variant struct {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//      string "IBusText"
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//      array []
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//      string "Candidate Text"
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//      variant struct {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//       string "IBusAttrList"
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//       array []
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//       array []
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//       }
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     }
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     ... more IBusTexts
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   ]
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   array [  // Array of label text
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//    variant struct {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//      string "IBusText"
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//      array []
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//      string "1"
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//      variant struct {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//       string "IBusAttrList"
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//       array []
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//       array []
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//       }
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     }
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     ... more IBusTexts
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   ]
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//  }
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//  TODO(nona): Clean up the structure.(crbug.com/129403)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IBusLookupTable;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Pops a IBusLookupTable from |reader|.
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Returns false if an error occurs.
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CHROMEOS_EXPORT PopIBusLookupTable(dbus::MessageReader* reader,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        IBusLookupTable* table);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Appends a IBusLookupTable to |writer| except mozc_candidates_ in |table|.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CHROMEOS_EXPORT AppendIBusLookupTable(const IBusLookupTable& table,
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           dbus::MessageWriter* writer);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An representation of IBusLookupTable object which is used in dbus
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// communication with ibus-daemon.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CHROMEOS_EXPORT IBusLookupTable {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum Orientation {
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    HORIZONTAL = 0,
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    VERTICAL = 1,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Represents a candidate entry. In dbus communication, each
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // field is represented as IBusText, but attributes are not used in Chrome.
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // So just simple string is sufficient in this case.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct Entry {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Entry();
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~Entry();
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string value;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string label;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string annotation;
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::string description_title;
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::string description_body;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IBusLookupTable();
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~IBusLookupTable();
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns true if the given |table| is equal to myself.
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool IsEqual(const IBusLookupTable& table) const;
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Copies |table| to myself.
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CopyFrom(const IBusLookupTable& table);
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the number of candidates in one page.
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 page_size() const { return page_size_; }
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_page_size(uint32 page_size) { page_size_ = page_size; }
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the cursor index of the currently selected candidate.
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 cursor_position() const { return cursor_position_; }
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_cursor_position(uint32 cursor_position) {
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cursor_position_ = cursor_position;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns true if the cursor is visible.
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_cursor_visible() const { return is_cursor_visible_; }
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_is_cursor_visible(bool is_cursor_visible) {
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    is_cursor_visible_ = is_cursor_visible;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the orientation of lookup table.
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Orientation orientation() const { return orientation_; }
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_orientation(Orientation orientation) {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    orientation_ = orientation;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::vector<Entry>& candidates() const { return candidates_; }
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<Entry>* mutable_candidates() { return &candidates_; }
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool show_window_at_composition() const {
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return show_window_at_composition_;
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_show_window_at_composition(bool show_window_at_composition) {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    show_window_at_composition_ = show_window_at_composition;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 page_size_;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 cursor_position_;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_cursor_visible_;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Orientation orientation_;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<Entry> candidates_;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool show_window_at_composition_;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(IBusLookupTable);
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROMEOS_DBUS_IBUS_IBUS_LOOKUP_TABLE_H_
155