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