// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- /* * Copyright (C) 2010-2014 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by: Neil Jagdish Patel */ #ifndef SEARCH_BAR_H #define SEARCH_BAR_H #include #include #include #include #include "unity-shared/Introspectable.h" namespace nux { class AbstractPaintLayer; class LayeredLayout; class LinearLayout; class SpaceLayout; class VLayout; } namespace unity { class IconTexture; class IMTextEntry; class SearchBarSpinner; class StaticCairoText; class SearchBar : public unity::debug::Introspectable, public nux::View { NUX_DECLARE_OBJECT_TYPE(SearchBar, nux::View); public: typedef nux::ObjectPtr Ptr; SearchBar(NUX_FILE_LINE_PROTO); SearchBar(bool show_filter_hint, NUX_FILE_LINE_PROTO); void ForceLiveSearch(); void SetSearchFinished(); nux::TextEntry* text_entry() const; nux::View* show_filters() const; nux::RWProperty search_string; nux::Property search_hint; nux::Property showing_filters; nux::Property can_refine_search; nux::ROProperty im_active; nux::ROProperty im_preedit; nux::ROProperty in_live_search; nux::Property live_search_wait; nux::Property scale; sigc::signal activated; sigc::signal search_changed; sigc::signal live_search_reached; private: void OnFontChanged(); void OnSearchHintChanged(); void Draw(nux::GraphicsEngine& GfxContext, bool force_draw); void DrawContent(nux::GraphicsEngine& GfxContext, bool force_draw); void OnMouseButtonDown(int x, int y, unsigned long button_flags, unsigned long key_flags); void OnEndKeyFocus(); void UpdateBackground(bool force); void OnSearchChanged(nux::TextEntry* text_entry); void OnClearClicked(int x, int y, unsigned long button_flags, unsigned long key_flags); void OnEntryActivated(); void OnShowingFiltersChanged(bool is_showing); bool OnLiveSearchTimeout(); bool OnSpinnerStartCb(); bool set_search_string(std::string const& string); bool show_filter_hint_; std::string GetName() const; void AddProperties(debug::IntrospectionData&); bool AcceptKeyNavFocus(); bool ShouldBeHighlighted(); void UpdateSearchBarSize(); void UpdateScale(double scale); std::unique_ptr bg_layer_; std::unique_ptr highlight_layer_; nux::HLayout* layout_; nux::HLayout* entry_layout_; nux::LayeredLayout* layered_layout_; StaticCairoText* hint_; nux::LinearLayout* expander_layout_; IMTextEntry* pango_entry_; nux::View* expander_view_; nux::HLayout* filter_layout_; StaticCairoText* show_filters_; nux::VLayout* arrow_layout_; nux::SpaceLayout* arrow_top_space_; nux::SpaceLayout* arrow_bottom_space_; IconTexture* expand_icon_; int last_width_; int last_height_; glib::SignalManager sig_manager_; glib::Source::UniquePtr live_search_timeout_; glib::Source::UniquePtr start_spinner_timeout_; SearchBarSpinner* spinner_; }; } #endif