/* * Copyright (c) 2021, Spencer Dixon * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Assistant { class Result : public RefCounted { public: enum class Kind { Unknown, App, Calculator, }; virtual ~Result() = default; virtual void activate() const = 0; RefPtr bitmap() { return m_bitmap; } String const& title() const { return m_title; } String const& subtitle() const { return m_subtitle; } Kind kind() const { return m_kind; } int score() const { return m_score; } bool equals(Result const& other) const { return kind() == other.kind() && title() == other.title() && subtitle() == other.subtitle(); } protected: Result(RefPtr bitmap, String title, String subtitle, int score = 0, Kind kind = Kind::Unknown) : m_bitmap(move(bitmap)) , m_title(move(title)) , m_subtitle(move(subtitle)) , m_score(score) , m_kind(kind) { } private: RefPtr m_bitmap; String m_title; String m_subtitle; int m_score { 0 }; Kind m_kind; }; class AppResult : public Result { public: AppResult(RefPtr bitmap, String title, String subtitle, NonnullRefPtr af, int score) : Result(move(bitmap), move(title), move(subtitle), score, Kind::App) , m_app_file(move(af)) { } ~AppResult() override = default; void activate() const override; private: NonnullRefPtr m_app_file; }; class CalculatorResult : public Result { public: explicit CalculatorResult(String title) : Result(GUI::Icon::default_icon("app-calculator").bitmap_for_size(16), move(title), "'Enter' will copy to clipboard"sv, 100, Kind::Calculator) { } ~CalculatorResult() override = default; void activate() const override; }; class Provider { public: virtual ~Provider() = default; virtual void query(const String&, Function>)> on_complete) = 0; }; class AppProvider : public Provider { public: void query(String const& query, Function>)> on_complete) override; }; class CalculatorProvider : public Provider { public: void query(String const& query, Function>)> on_complete) override; }; }