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