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 UI_APP_LIST_SEARCH_RESULT_H_ 6 #define UI_APP_LIST_SEARCH_RESULT_H_ 7 8 #include <vector> 9 10 #include "base/basictypes.h" 11 #include "base/observer_list.h" 12 #include "base/strings/string16.h" 13 #include "ui/app_list/app_list_export.h" 14 #include "ui/base/models/list_model.h" 15 #include "ui/base/range/range.h" 16 #include "ui/gfx/image/image_skia.h" 17 18 namespace ui { 19 class MenuModel; 20 } 21 22 namespace app_list { 23 24 class SearchResultObserver; 25 26 // SearchResult consists of an icon, title text and details text. Title and 27 // details text can have tagged ranges that are displayed differently from 28 // default style. 29 class APP_LIST_EXPORT SearchResult { 30 public: 31 // A tagged range in search result text. 32 struct APP_LIST_EXPORT Tag { 33 // Similar to ACMatchClassification::Style, the style values are not 34 // mutually exclusive. 35 enum Style { 36 NONE = 0, 37 URL = 1 << 0, 38 MATCH = 1 << 1, 39 DIM = 1 << 2, 40 }; 41 42 Tag(int styles, size_t start, size_t end) 43 : styles(styles), 44 range(start, end) { 45 } 46 47 int styles; 48 ui::Range range; 49 }; 50 typedef std::vector<Tag> Tags; 51 52 // Data representing an action that can be performed on this search result. 53 // An action could be represented as an icon set or as a blue button with 54 // a label. Icon set is chosen if label text is empty. Otherwise, a blue 55 // button with the label text will be used. 56 struct APP_LIST_EXPORT Action { 57 Action(const gfx::ImageSkia& base_image, 58 const gfx::ImageSkia& hover_image, 59 const gfx::ImageSkia& pressed_image, 60 const base::string16& tooltip_text); 61 Action(const base::string16& label_text, 62 const base::string16& tooltip_text); 63 ~Action(); 64 65 gfx::ImageSkia base_image; 66 gfx::ImageSkia hover_image; 67 gfx::ImageSkia pressed_image; 68 69 base::string16 tooltip_text; 70 base::string16 label_text; 71 }; 72 typedef std::vector<Action> Actions; 73 74 SearchResult(); 75 virtual ~SearchResult(); 76 77 const gfx::ImageSkia& icon() const { return icon_; } 78 void SetIcon(const gfx::ImageSkia& icon); 79 80 const base::string16& title() const { return title_; } 81 void set_title(const base::string16& title) { title_ = title;} 82 83 const Tags& title_tags() const { return title_tags_; } 84 void set_title_tags(const Tags& tags) { title_tags_ = tags; } 85 86 const base::string16& details() const { return details_; } 87 void set_details(const base::string16& details) { details_ = details; } 88 89 const Tags& details_tags() const { return details_tags_; } 90 void set_details_tags(const Tags& tags) { details_tags_ = tags; } 91 92 const Actions& actions() const { 93 return actions_; 94 } 95 void SetActions(const Actions& sets); 96 97 bool is_installing() const { return is_installing_; } 98 void SetIsInstalling(bool is_installing); 99 100 int percent_downloaded() const { return percent_downloaded_; } 101 void SetPercentDownloaded(int percent_downloaded); 102 103 void NotifyItemInstalled(); 104 void NotifyItemUninstalled(); 105 106 void AddObserver(SearchResultObserver* observer); 107 void RemoveObserver(SearchResultObserver* observer); 108 109 // Returns the context menu model for this item. 110 // Note the returned menu model is owned by this item. 111 virtual ui::MenuModel* GetContextMenuModel(); 112 113 private: 114 gfx::ImageSkia icon_; 115 116 base::string16 title_; 117 Tags title_tags_; 118 119 base::string16 details_; 120 Tags details_tags_; 121 122 Actions actions_; 123 124 bool is_installing_; 125 int percent_downloaded_; 126 127 ObserverList<SearchResultObserver> observers_; 128 129 DISALLOW_COPY_AND_ASSIGN(SearchResult); 130 }; 131 132 } // namespace app_list 133 134 #endif // UI_APP_LIST_SEARCH_RESULT_H_ 135