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