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