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

ash / system / video_conference / bubble / set_value_effects_view.h [blame]

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ASH_SYSTEM_VIDEO_CONFERENCE_BUBBLE_SET_VALUE_EFFECTS_VIEW_H_
#define ASH_SYSTEM_VIDEO_CONFERENCE_BUBBLE_SET_VALUE_EFFECTS_VIEW_H_

#include "ash/system/video_conference/effects/video_conference_tray_effects_manager_types.h"
#include "base/memory/raw_ptr.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/views/view.h"

namespace ash {

class TabSlider;
class VcHostedEffect;
class VideoConferenceTrayController;

namespace video_conference {

// The slider that allows user to pick a value for an effect of type
// `VcEffectType::kSetValue`. This view consists a label (for the effect name)
// and a tab slider that allows the user to select from one of several integer
// values.
class SetValueEffectSlider : public views::View {
  METADATA_HEADER(SetValueEffectSlider, views::View)

 public:
  SetValueEffectSlider(VideoConferenceTrayController* controller,
                       const VcHostedEffect* effect);

  SetValueEffectSlider(const SetValueEffectSlider&) = delete;
  SetValueEffectSlider& operator=(const SetValueEffectSlider&) = delete;

  ~SetValueEffectSlider() override = default;

  TabSlider* tab_slider() { return tab_slider_; }

  VcEffectId effect_id() { return effect_id_; }

 private:
  // Owned by the views hierarchy.
  raw_ptr<TabSlider> tab_slider_ = nullptr;

  // The id associated with this effect.
  const VcEffectId effect_id_;
};

// The set-value effects view that resides in the video conference bubble,
// containing all the `SetValueEffectSlider` views in this bubble.
class SetValueEffectsView : public views::View {
  METADATA_HEADER(SetValueEffectsView, views::View)

 public:
  explicit SetValueEffectsView(VideoConferenceTrayController* controller);
  SetValueEffectsView(const SetValueEffectsView&) = delete;
  SetValueEffectsView& operator=(const SetValueEffectsView&) = delete;
  ~SetValueEffectsView() override = default;
};

}  // namespace video_conference

}  // namespace ash

#endif  // ASH_SYSTEM_VIDEO_CONFERENCE_BUBBLE_SET_VALUE_EFFECTS_VIEW_H_