1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_UI_SEARCH_SEARCH_MODEL_H_ 6 #define CHROME_BROWSER_UI_SEARCH_SEARCH_MODEL_H_ 7 8 #include "base/basictypes.h" 9 #include "base/observer_list.h" 10 #include "chrome/common/search_types.h" 11 12 class SearchModelObserver; 13 14 // Represents whether a page supports Instant. 15 enum InstantSupportState { 16 INSTANT_SUPPORT_NO, 17 INSTANT_SUPPORT_YES, 18 INSTANT_SUPPORT_UNKNOWN, 19 }; 20 21 // An observable model for UI components that care about search model state 22 // changes. 23 class SearchModel { 24 public: 25 struct State { 26 State(); 27 State(const SearchMode& mode, 28 InstantSupportState instant_support, 29 bool voice_search_supported); 30 31 bool operator==(const State& rhs) const; 32 33 // The display mode of UI elements such as the toolbar, the tab strip, etc. 34 SearchMode mode; 35 36 // Does the current page support Instant? 37 InstantSupportState instant_support; 38 39 // Does the current page support voice search? 40 bool voice_search_supported; 41 }; 42 43 SearchModel(); 44 ~SearchModel(); 45 46 // Change the state. Change notifications are sent to observers. 47 void SetState(const State& state); 48 49 // Get the current state. 50 const State& state() const { return state_; } 51 52 // Change the mode. Change notifications are sent to observers. 53 void SetMode(const SearchMode& mode); 54 55 // Get the active mode. 56 const SearchMode& mode() const { return state_.mode; } 57 58 // Sets the page instant support state. Change notifications are sent to 59 // observers. 60 void SetInstantSupportState(InstantSupportState instant_support); 61 62 // Gets the instant support state of the page. 63 InstantSupportState instant_support() const { 64 return state_.instant_support; 65 } 66 67 // Sets the page voice search support state. Change notifications are sent to 68 // observers. 69 void SetVoiceSearchSupported(bool supported); 70 71 // Gets the voice search support state of the page. 72 bool voice_search_supported() const { return state_.voice_search_supported; } 73 74 // Add and remove observers. 75 void AddObserver(SearchModelObserver* observer); 76 void RemoveObserver(SearchModelObserver* observer); 77 78 private: 79 // Current state of model. 80 State state_; 81 82 // Observers. 83 ObserverList<SearchModelObserver> observers_; 84 85 DISALLOW_COPY_AND_ASSIGN(SearchModel); 86 }; 87 88 #endif // CHROME_BROWSER_UI_SEARCH_SEARCH_MODEL_H_ 89