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)
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)SearchBoxModel::SpeechButtonProperty::SpeechButtonProperty(
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const gfx::ImageSkia& on_icon,
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::string16& on_tooltip,
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const gfx::ImageSkia& off_icon,
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::string16& off_tooltip)
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : on_icon(on_icon),
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      on_tooltip(on_tooltip),
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      off_icon(off_icon),
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      off_tooltip(off_tooltip) {
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)SearchBoxModel::SpeechButtonProperty::~SpeechButtonProperty() {
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SearchBoxModel::SearchBoxModel() {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SearchBoxModel::~SearchBoxModel() {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBoxModel::SetIcon(const gfx::ImageSkia& icon) {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  icon_ = icon;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FOR_EACH_OBSERVER(SearchBoxModelObserver, observers_, IconChanged());
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void SearchBoxModel::SetSpeechRecognitionButton(
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    scoped_ptr<SearchBoxModel::SpeechButtonProperty> speech_button) {
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  speech_button_ = speech_button.Pass();
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  FOR_EACH_OBSERVER(SearchBoxModelObserver,
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                    observers_,
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                    SpeechRecognitionButtonPropChanged());
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void SearchBoxModel::SetHintText(const base::string16& hint_text) {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (hint_text_ == hint_text)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  hint_text_ = hint_text;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FOR_EACH_OBSERVER(SearchBoxModelObserver, observers_, HintTextChanged());
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBoxModel::SetSelectionModel(const gfx::SelectionModel& sel) {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (selection_model_ == sel)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  selection_model_ = sel;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FOR_EACH_OBSERVER(SearchBoxModelObserver,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    observers_,
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    SelectionModelChanged());
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void SearchBoxModel::SetText(const base::string16& text) {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (text_ == text)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Log that a new search has been commenced whenever the text box text
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // transitions from empty to non-empty.
69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (text_.empty() && !text.empty()) {
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    UMA_HISTOGRAM_ENUMERATION("Apps.AppListSearchCommenced", 1, 2);
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  text_ = text;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FOR_EACH_OBSERVER(SearchBoxModelObserver, observers_, TextChanged());
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBoxModel::AddObserver(SearchBoxModelObserver* observer) {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  observers_.AddObserver(observer);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBoxModel::RemoveObserver(SearchBoxModelObserver* observer) {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  observers_.RemoveObserver(observer);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace app_list
85