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)#include "ui/app_list/search_box_model.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/metrics/histogram.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/app_list/search_box_model_observer.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace app_list {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)SearchBoxModel::ButtonProperty::ButtonProperty(
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const gfx::ImageSkia& icon,
14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::string16& tooltip)
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    : icon(icon),
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      tooltip(tooltip) {
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)SearchBoxModel::ButtonProperty::~ButtonProperty() {
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SearchBoxModel::SearchBoxModel() {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SearchBoxModel::~SearchBoxModel() {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBoxModel::SetIcon(const gfx::ImageSkia& icon) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  icon_ = icon;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FOR_EACH_OBSERVER(SearchBoxModelObserver, observers_, IconChanged());
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void SearchBoxModel::SetSpeechRecognitionButton(
34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    scoped_ptr<SearchBoxModel::ButtonProperty> speech_button) {
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  speech_button_ = speech_button.Pass();
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  FOR_EACH_OBSERVER(SearchBoxModelObserver,
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                    observers_,
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                    SpeechRecognitionButtonPropChanged());
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void SearchBoxModel::SetHintText(const base::string16& hint_text) {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (hint_text_ == hint_text)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  hint_text_ = hint_text;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FOR_EACH_OBSERVER(SearchBoxModelObserver, observers_, HintTextChanged());
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBoxModel::SetSelectionModel(const gfx::SelectionModel& sel) {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (selection_model_ == sel)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  selection_model_ = sel;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FOR_EACH_OBSERVER(SearchBoxModelObserver,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    observers_,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    SelectionModelChanged());
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void SearchBoxModel::SetText(const base::string16& text) {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (text_ == text)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Log that a new search has been commenced whenever the text box text
64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // transitions from empty to non-empty.
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (text_.empty() && !text.empty()) {
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    UMA_HISTOGRAM_ENUMERATION("Apps.AppListSearchCommenced", 1, 2);
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  text_ = text;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FOR_EACH_OBSERVER(SearchBoxModelObserver, observers_, TextChanged());
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBoxModel::AddObserver(SearchBoxModelObserver* observer) {
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  observers_.AddObserver(observer);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBoxModel::RemoveObserver(SearchBoxModelObserver* observer) {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  observers_.RemoveObserver(observer);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace app_list
81