// Copyright 2020 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_BASE_MODELS_DIALOG_MODEL_FIELD_H_ #define UI_BASE_MODELS_DIALOG_MODEL_FIELD_H_ #include <optional> #include <string> #include "base/callback_list.h" #include "base/component_export.h" #include "base/containers/flat_set.h" #include "base/functional/callback.h" #include "base/gtest_prod_util.h" #include "base/memory/raw_ptr.h" #include "base/types/pass_key.h" #include "ui/base/accelerators/accelerator.h" #include "ui/base/interaction/element_identifier.h" #include "ui/base/models/combobox_model.h" #include "ui/base/models/image_model.h" #include "ui/base/ui_base_types.h" namespace ui { class DialogModelParagraph; class DialogModelCheckbox; class DialogModelCombobox; class DialogModelCustomField; class DialogModelMenuItem; class DialogModelTitleItem; class DialogModelSection; class DialogModelTextfield; class Event; class DialogModelFieldHost { … }; // TODO(pbos): Move this to separate header. // DialogModelLabel is an exception to below classes. This is not a // DialogModelField but rather represents a text label and styling. This is used // with DialogModelParagraph and DialogModelCheckbox for instance and has // support for styling text replacements and showing a link. class COMPONENT_EXPORT(UI_BASE) DialogModelLabel { … }; // These "field" classes represent entries in a DialogModel. They are owned // by the model and either created through the model or DialogModel::Builder. // These entries can be referred to by setting the field's ElementIdentifier in // construction parameters (::Params::SetId()). They can then // later be acquired through DialogModel::GetFieldByUniqueId() methods. // These fields own the data corresponding to their field. For instance, the // text of a textfield in a model is read using DialogModelTextfield::text() and // stays in sync with the visible dialog (through DialogModelHosts). class COMPONENT_EXPORT(UI_BASE) DialogModelField { … }; // Field class representing a paragraph. class COMPONENT_EXPORT(UI_BASE) DialogModelParagraph : public DialogModelField { … }; // Field class representing a checkbox with descriptive text. class COMPONENT_EXPORT(UI_BASE) DialogModelCheckbox : public DialogModelField { … }; // Field class representing a combobox and corresponding label to describe the // combobox: // // <label> [combobox] // Ex: Folder [My Bookmarks] class COMPONENT_EXPORT(UI_BASE) DialogModelCombobox : public DialogModelField { … }; // Field class representing a menu item: // // <icon> <label> // Ex: [icon] Open URL class COMPONENT_EXPORT(UI_BASE) DialogModelMenuItem : public DialogModelField { … }; // Field class representing a separator. class COMPONENT_EXPORT(UI_BASE) DialogModelSeparator : public DialogModelField { … }; // Field class representing a title. // TODO(pengchaocai): Remove DialogModelTitleItem once DialogModel supports // multiple sections and titles live in sections as optional strings. class COMPONENT_EXPORT(UI_BASE) DialogModelTitleItem : public DialogModelField { … }; // Field class representing a textfield and corresponding label to describe the // textfield: // // <label> [textfield] // Ex: Name [My email] class COMPONENT_EXPORT(UI_BASE) DialogModelTextfield : public DialogModelField { … }; // Field base class representing a "custom" field. Used for instance to inject // custom Views into dialogs that use DialogModel. class COMPONENT_EXPORT(UI_BASE) DialogModelCustomField : public DialogModelField { … }; // Field class representing a section. A section is a list of fields which may // include subsections too (tree structure). class COMPONENT_EXPORT(UI_BASE) DialogModelSection final : public DialogModelField { … }; } // namespace ui #endif // UI_BASE_MODELS_DIALOG_MODEL_FIELD_H_