1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_VIEWS_TASK_MANAGER_SEARCH_BAR_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_TASK_MANAGER_SEARCH_BAR_VIEW_H_
#include <string>
#include <string_view>
#include "base/functional/callback.h"
#include "base/memory/raw_ref.h"
#include "base/timer/timer.h"
#include "chrome/browser/ui/views/chrome_layout_provider.h"
#include "ui/base/interaction/element_identifier.h"
#include "ui/gfx/geometry/point.h"
#include "ui/views/controls/button/image_button.h"
#include "ui/views/controls/textfield/textfield.h"
#include "ui/views/controls/textfield/textfield_controller.h"
#include "ui/views/view.h"
namespace task_manager {
class TaskManagerSearchBarView : public views::View,
public views::TextfieldController {
METADATA_HEADER(TaskManagerSearchBarView, views::View)
public:
class Delegate {
public:
// Called when text in the textfield changes. Calls are throttled with
// a delay of kInputChangeCallbackDelay to avoid excessive triggering.
virtual void SearchBarOnInputChanged(std::u16string_view text) = 0;
protected:
virtual ~Delegate() = default;
};
DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(kInputField);
// The delay between the textfield text change and triggering
// `SearchBarOnInputChanged`, used to throttle fast user input.
static constexpr base::TimeDelta kInputChangeCallbackDelay =
base::Milliseconds(50);
TaskManagerSearchBarView(const std::u16string& placeholder,
const gfx::Insets& margins,
Delegate& delegate);
TaskManagerSearchBarView(const TaskManagerSearchBarView&) = delete;
TaskManagerSearchBarView& operator=(const TaskManagerSearchBarView&) = delete;
~TaskManagerSearchBarView() override;
// views::View:
void OnThemeChanged() override;
// views::TextfieldController:
bool HandleKeyEvent(views::Textfield* sender,
const ui::KeyEvent& key_event) override;
// Focus on the input field.
void Focus();
bool GetClearButtonVisibleStatusForTesting() const;
void SetInputTextForTesting(const std::u16string& text);
gfx::Point GetClearButtonScreenCenterPointForTesting() const;
// Updates related fields on the Textfield.
void UpdateTextfield();
private:
void OnInputChanged();
void OnClearPressed();
const raw_ref<Delegate> delegate_;
// Textfield placeholder color.
std::optional<ui::ColorId> textfield_placeholder_color_id_;
raw_ptr<views::Textfield> input_ = nullptr;
raw_ptr<views::Button> clear_ = nullptr;
base::CallbackListSubscription input_changed_subscription_;
base::OneShotTimer input_change_notification_timer_;
};
} // namespace task_manager
#endif // CHROME_BROWSER_UI_VIEWS_TASK_MANAGER_SEARCH_BAR_VIEW_H_
|