Commit d3452e93 authored by Ahmed Mehfooz's avatar Ahmed Mehfooz Committed by Commit Bot

Add context menus for holding space items

Bug: 1127255
Change-Id: I7e3809428584b670c09f2e219f855805ddb17f2f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2405994
Commit-Queue: Ahmed Mehfooz <amehfooz@chromium.org>
Reviewed-by: default avatarDavid Black <dmblack@google.com>
Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#806838}
parent e1df5c80
...@@ -925,8 +925,12 @@ component("ash") { ...@@ -925,8 +925,12 @@ component("ash") {
"system/holding_space/holding_space_item_chip_view.h", "system/holding_space/holding_space_item_chip_view.h",
"system/holding_space/holding_space_item_chips_container.cc", "system/holding_space/holding_space_item_chips_container.cc",
"system/holding_space/holding_space_item_chips_container.h", "system/holding_space/holding_space_item_chips_container.h",
"system/holding_space/holding_space_screenshot_view.cc", "system/holding_space/holding_space_item_context_menu.cc",
"system/holding_space/holding_space_screenshot_view.h", "system/holding_space/holding_space_item_context_menu.h",
"system/holding_space/holding_space_item_screenshot_view.cc",
"system/holding_space/holding_space_item_screenshot_view.h",
"system/holding_space/holding_space_item_view.cc",
"system/holding_space/holding_space_item_view.h",
"system/holding_space/holding_space_tray.cc", "system/holding_space/holding_space_tray.cc",
"system/holding_space/holding_space_tray.h", "system/holding_space/holding_space_tray.h",
"system/holding_space/pinned_files_container.cc", "system/holding_space/pinned_files_container.cc",
......
...@@ -943,6 +943,15 @@ This file contains the strings for ash. ...@@ -943,6 +943,15 @@ This file contains the strings for ash.
<message name="IDS_ASH_HOLDING_SPACE_SCREENSHOTS_TITLE" desc="Title of the screenshots area in the holding space bubble."> <message name="IDS_ASH_HOLDING_SPACE_SCREENSHOTS_TITLE" desc="Title of the screenshots area in the holding space bubble.">
Screenshots Screenshots
</message> </message>
<message name="IDS_ASH_HOLDING_SPACE_CONTEXT_MENU_COPY_TO_CLIPBOARD" desc="Title of the option to copy items to clipboard.">
Copy to clipboard
</message>
<message name="IDS_ASH_HOLDING_SPACE_CONTEXT_MENU_PIN" desc="Title of the pin option in the holding space item context menu.">
Pin
</message>
<message name="IDS_ASH_HOLDING_SPACE_CONTEXT_MENU_SHOW_IN_FOLDER" desc="Title of the option to show item in its folder in the holding space item context menu.">
Show in folder
</message>
<!-- Phone Hub tray--> <!-- Phone Hub tray-->
<message name="IDS_ASH_PHONE_HUB_TRAY_ACCESSIBLE_NAME" desc="The accessible name of the Phone Hub tray bubble for screen readers."> <message name="IDS_ASH_PHONE_HUB_TRAY_ACCESSIBLE_NAME" desc="The accessible name of the Phone Hub tray bubble for screen readers.">
......
b1012145df7abf2c183a8b9f8fc6f3fdf8efd6f8
\ No newline at end of file
b1012145df7abf2c183a8b9f8fc6f3fdf8efd6f8
\ No newline at end of file
b1012145df7abf2c183a8b9f8fc6f3fdf8efd6f8
\ No newline at end of file
...@@ -5,11 +5,20 @@ ...@@ -5,11 +5,20 @@
#ifndef ASH_PUBLIC_CPP_HOLDING_SPACE_HOLDING_SPACE_CONSTANTS_H_ #ifndef ASH_PUBLIC_CPP_HOLDING_SPACE_HOLDING_SPACE_CONSTANTS_H_
#define ASH_PUBLIC_CPP_HOLDING_SPACE_HOLDING_SPACE_CONSTANTS_H_ #define ASH_PUBLIC_CPP_HOLDING_SPACE_HOLDING_SPACE_CONSTANTS_H_
#include "ash/public/cpp/app_menu_constants.h"
#include "ui/gfx/geometry/insets.h" #include "ui/gfx/geometry/insets.h"
#include "ui/gfx/geometry/size.h" #include "ui/gfx/geometry/size.h"
namespace ash { namespace ash {
// Context menu commands.
enum HoldingSpaceCommandId {
kTogglePinItem,
kCopyToClipboard,
kShowInFolder,
kMaxValue = kShowInFolder
};
// Appearance. // Appearance.
constexpr gfx::Insets kHoldingSpaceContainerPadding(16); constexpr gfx::Insets kHoldingSpaceContainerPadding(16);
constexpr int kHoldingSpaceContainerSeparation = 8; constexpr int kHoldingSpaceContainerSeparation = 8;
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "ash/public/cpp/holding_space/holding_space_item.h" #include "ash/public/cpp/holding_space/holding_space_item.h"
#include "ash/public/cpp/shelf_config.h" #include "ash/public/cpp/shelf_config.h"
#include "ash/style/ash_color_provider.h" #include "ash/style/ash_color_provider.h"
#include "ash/system/holding_space/holding_space_item_view.h"
#include "ash/system/tray/tray_constants.h" #include "ash/system/tray/tray_constants.h"
#include "ash/system/tray/tray_popup_item_style.h" #include "ash/system/tray/tray_popup_item_style.h"
#include "ash/system/tray/tray_popup_utils.h" #include "ash/system/tray/tray_popup_utils.h"
...@@ -15,8 +16,6 @@ ...@@ -15,8 +16,6 @@
#include "ash/system/user/rounded_image_view.h" #include "ash/system/user/rounded_image_view.h"
#include "ui/base/dragdrop/drag_drop_types.h" #include "ui/base/dragdrop/drag_drop_types.h"
#include "ui/gfx/paint_vector_icon.h" #include "ui/gfx/paint_vector_icon.h"
#include "ui/gfx/text_constants.h"
#include "ui/views/accessibility/view_accessibility.h"
#include "ui/views/animation/flood_fill_ink_drop_ripple.h" #include "ui/views/animation/flood_fill_ink_drop_ripple.h"
#include "ui/views/animation/ink_drop_impl.h" #include "ui/views/animation/ink_drop_impl.h"
#include "ui/views/background.h" #include "ui/views/background.h"
...@@ -30,7 +29,7 @@ ...@@ -30,7 +29,7 @@
namespace ash { namespace ash {
HoldingSpaceItemChipView::HoldingSpaceItemChipView(const HoldingSpaceItem* item) HoldingSpaceItemChipView::HoldingSpaceItemChipView(const HoldingSpaceItem* item)
: item_(item) { : HoldingSpaceItemView(item) {
auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>( auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kHorizontal, views::BoxLayout::Orientation::kHorizontal,
gfx::Insets(kHoldingSpaceChipPadding), kHoldingSpaceChipChildSpacing)); gfx::Insets(kHoldingSpaceChipPadding), kHoldingSpaceChipChildSpacing));
...@@ -38,7 +37,7 @@ HoldingSpaceItemChipView::HoldingSpaceItemChipView(const HoldingSpaceItem* item) ...@@ -38,7 +37,7 @@ HoldingSpaceItemChipView::HoldingSpaceItemChipView(const HoldingSpaceItem* item)
image_ = image_ =
AddChildView(std::make_unique<tray::RoundedImageView>(kTrayItemSize / 2)); AddChildView(std::make_unique<tray::RoundedImageView>(kTrayItemSize / 2));
label_ = AddChildView(std::make_unique<views::Label>(item_->text())); label_ = AddChildView(std::make_unique<views::Label>(item->text()));
label_->SetElideBehavior(gfx::ELIDE_MIDDLE); label_->SetElideBehavior(gfx::ELIDE_MIDDLE);
layout->SetFlexForView(label_, 1); layout->SetFlexForView(label_, 1);
...@@ -47,16 +46,11 @@ HoldingSpaceItemChipView::HoldingSpaceItemChipView(const HoldingSpaceItem* item) ...@@ -47,16 +46,11 @@ HoldingSpaceItemChipView::HoldingSpaceItemChipView(const HoldingSpaceItem* item)
AddPinButton(); AddPinButton();
SetPaintToLayer();
layer()->SetFillsBoundsOpaquely(false);
SetBackground(views::CreateRoundedRectBackground( SetBackground(views::CreateRoundedRectBackground(
AshColorProvider::Get()->GetControlsLayerColor( AshColorProvider::Get()->GetControlsLayerColor(
AshColorProvider::ControlsLayerType::kControlBackgroundColorInactive), AshColorProvider::ControlsLayerType::kControlBackgroundColorInactive),
kHoldingSpaceChipCornerRadius)); kHoldingSpaceChipCornerRadius));
GetViewAccessibility().OverrideName(item_->text());
SetFocusBehavior(FocusBehavior::ALWAYS);
SetInkDropMode(InkDropMode::ON_NO_GESTURE_HANDLER); SetInkDropMode(InkDropMode::ON_NO_GESTURE_HANDLER);
set_ink_drop_visible_opacity( set_ink_drop_visible_opacity(
ShelfConfig::Get()->GetInkDropRippleAttributes().inkdrop_opacity); ShelfConfig::Get()->GetInkDropRippleAttributes().inkdrop_opacity);
...@@ -68,7 +62,7 @@ HoldingSpaceItemChipView::HoldingSpaceItemChipView(const HoldingSpaceItem* item) ...@@ -68,7 +62,7 @@ HoldingSpaceItemChipView::HoldingSpaceItemChipView(const HoldingSpaceItem* item)
// Subscribe to be notified of changes to `item_`'s image. // Subscribe to be notified of changes to `item_`'s image.
image_subscription_ = image_subscription_ =
item_->image().AddImageSkiaChangedCallback(base::BindRepeating( item->image().AddImageSkiaChangedCallback(base::BindRepeating(
&HoldingSpaceItemChipView::Update, base::Unretained(this))); &HoldingSpaceItemChipView::Update, base::Unretained(this)));
Update(); Update();
...@@ -76,19 +70,6 @@ HoldingSpaceItemChipView::HoldingSpaceItemChipView(const HoldingSpaceItem* item) ...@@ -76,19 +70,6 @@ HoldingSpaceItemChipView::HoldingSpaceItemChipView(const HoldingSpaceItem* item)
HoldingSpaceItemChipView::~HoldingSpaceItemChipView() = default; HoldingSpaceItemChipView::~HoldingSpaceItemChipView() = default;
SkColor HoldingSpaceItemChipView::GetInkDropBaseColor() const {
return ShelfConfig::Get()->GetInkDropRippleAttributes().base_color;
}
int HoldingSpaceItemChipView::GetDragOperations(const gfx::Point& point) {
return ui::DragDropTypes::DRAG_COPY;
}
void HoldingSpaceItemChipView::WriteDragData(const gfx::Point& point,
ui::OSExchangeData* data) {
data->SetFilename(item_->file_path());
}
void HoldingSpaceItemChipView::OnMouseEvent(ui::MouseEvent* event) { void HoldingSpaceItemChipView::OnMouseEvent(ui::MouseEvent* event) {
switch (event->type()) { switch (event->type()) {
case ui::ET_MOUSE_ENTERED: case ui::ET_MOUSE_ENTERED:
...@@ -129,11 +110,11 @@ void HoldingSpaceItemChipView::AddPinButton() { ...@@ -129,11 +110,11 @@ void HoldingSpaceItemChipView::AddPinButton() {
void HoldingSpaceItemChipView::Update() { void HoldingSpaceItemChipView::Update() {
image_->SetImage( image_->SetImage(
item_->image().image_skia(), item()->image().image_skia(),
gfx::Size(kHoldingSpaceChipIconSize, kHoldingSpaceChipIconSize)); gfx::Size(kHoldingSpaceChipIconSize, kHoldingSpaceChipIconSize));
} }
BEGIN_METADATA(HoldingSpaceItemChipView, views::InkDropHostView) BEGIN_METADATA(HoldingSpaceItemChipView, HoldingSpaceItemView)
END_METADATA END_METADATA
} // namespace ash } // namespace ash
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include "ash/ash_export.h" #include "ash/ash_export.h"
#include "ash/public/cpp/holding_space/holding_space_image.h" #include "ash/public/cpp/holding_space/holding_space_image.h"
#include "ui/views/animation/ink_drop_host_view.h" #include "ash/system/holding_space/holding_space_item_view.h"
#include "ui/views/controls/button/button.h" #include "ui/views/controls/button/button.h"
#include "ui/views/metadata/metadata_header_macros.h" #include "ui/views/metadata/metadata_header_macros.h"
...@@ -28,7 +28,7 @@ class RoundedImageView; ...@@ -28,7 +28,7 @@ class RoundedImageView;
// A button with an image derived from a file's thumbnail and file's name as the // A button with an image derived from a file's thumbnail and file's name as the
// label. // label.
class ASH_EXPORT HoldingSpaceItemChipView : public views::InkDropHostView, class ASH_EXPORT HoldingSpaceItemChipView : public HoldingSpaceItemView,
public views::ButtonListener { public views::ButtonListener {
public: public:
METADATA_HEADER(HoldingSpaceItemChipView); METADATA_HEADER(HoldingSpaceItemChipView);
...@@ -38,10 +38,7 @@ class ASH_EXPORT HoldingSpaceItemChipView : public views::InkDropHostView, ...@@ -38,10 +38,7 @@ class ASH_EXPORT HoldingSpaceItemChipView : public views::InkDropHostView,
HoldingSpaceItemChipView& operator=(const HoldingSpaceItemChipView&) = delete; HoldingSpaceItemChipView& operator=(const HoldingSpaceItemChipView&) = delete;
~HoldingSpaceItemChipView() override; ~HoldingSpaceItemChipView() override;
// views::InkDropHostView: // HoldingSpaceItemView:
SkColor GetInkDropBaseColor() const override;
int GetDragOperations(const gfx::Point& point) override;
void WriteDragData(const gfx::Point& point, ui::OSExchangeData*) override;
void OnMouseEvent(ui::MouseEvent* event) override; void OnMouseEvent(ui::MouseEvent* event) override;
// views::ButtonListener: // views::ButtonListener:
...@@ -51,7 +48,6 @@ class ASH_EXPORT HoldingSpaceItemChipView : public views::InkDropHostView, ...@@ -51,7 +48,6 @@ class ASH_EXPORT HoldingSpaceItemChipView : public views::InkDropHostView,
void AddPinButton(); void AddPinButton();
void Update(); void Update();
const HoldingSpaceItem* const item_;
tray::RoundedImageView* image_ = nullptr; tray::RoundedImageView* image_ = nullptr;
views::Label* label_ = nullptr; views::Label* label_ = nullptr;
views::ToggleImageButton* pin_ = nullptr; views::ToggleImageButton* pin_ = nullptr;
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/system/holding_space/holding_space_item_context_menu.h"
#include "ash/public/cpp/holding_space/holding_space_constants.h"
#include "ash/strings/grit/ash_strings.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/models/simple_menu_model.h"
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/view.h"
namespace ash {
HoldingSpaceItemContextMenu::HoldingSpaceItemContextMenu() = default;
HoldingSpaceItemContextMenu::~HoldingSpaceItemContextMenu() = default;
ui::SimpleMenuModel* HoldingSpaceItemContextMenu::BuildMenuModel() {
context_menu_model_ = std::make_unique<ui::SimpleMenuModel>(this);
context_menu_model_->AddItem(
HoldingSpaceCommandId::kShowInFolder,
l10n_util::GetStringUTF16(
IDS_ASH_HOLDING_SPACE_CONTEXT_MENU_SHOW_IN_FOLDER));
context_menu_model_->AddItem(
HoldingSpaceCommandId::kCopyToClipboard,
l10n_util::GetStringUTF16(
IDS_ASH_HOLDING_SPACE_CONTEXT_MENU_COPY_TO_CLIPBOARD));
context_menu_model_->AddItem(
HoldingSpaceCommandId::kTogglePinItem,
l10n_util::GetStringUTF16(IDS_ASH_HOLDING_SPACE_CONTEXT_MENU_PIN));
return context_menu_model_.get();
}
void HoldingSpaceItemContextMenu::ShowContextMenuForViewImpl(
views::View* source,
const gfx::Point& point,
ui::MenuSourceType source_type) {
int run_types = views::MenuRunner::USE_TOUCHABLE_LAYOUT |
views::MenuRunner::CONTEXT_MENU |
views::MenuRunner::FIXED_ANCHOR;
context_menu_runner_ =
std::make_unique<views::MenuRunner>(BuildMenuModel(), run_types);
context_menu_runner_->RunMenuAt(
source->GetWidget(), nullptr /*button_controller*/,
source->GetBoundsInScreen(), views::MenuAnchorPosition::kBubbleRight,
source_type);
}
void HoldingSpaceItemContextMenu::ExecuteCommand(int command_id,
int event_flags) {
switch (command_id) {
case HoldingSpaceCommandId::kCopyToClipboard:
// TODO(crbug.com/1127240): Hookup API for copy to clipboard
break;
case HoldingSpaceCommandId::kShowInFolder:
// TODO(crbug.com/1127240): Hookup API for show in folder
break;
case HoldingSpaceCommandId::kTogglePinItem:
// TODO(crbug.com/1127240): Hookup API for toggling pin
break;
}
}
} // namespace ash
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_SYSTEM_HOLDING_SPACE_HOLDING_SPACE_ITEM_CONTEXT_MENU_H_
#define ASH_SYSTEM_HOLDING_SPACE_HOLDING_SPACE_ITEM_CONTEXT_MENU_H_
#include <memory>
#include "ash/ash_export.h"
#include "ui/base/models/simple_menu_model.h"
#include "ui/views/context_menu_controller.h"
namespace views {
class MenuRunner;
} // namespace views
namespace ash {
// This class handles creation of the context menu view and handling
// commands available in the menu.
class ASH_EXPORT HoldingSpaceItemContextMenu
: public views::ContextMenuController,
public ui::SimpleMenuModel::Delegate {
public:
HoldingSpaceItemContextMenu();
HoldingSpaceItemContextMenu(const HoldingSpaceItemContextMenu&) = delete;
HoldingSpaceItemContextMenu& operator=(const HoldingSpaceItemContextMenu&) =
delete;
~HoldingSpaceItemContextMenu() override;
// views::ContextMenuController:
void ShowContextMenuForViewImpl(views::View* source,
const gfx::Point& point,
ui::MenuSourceType source_type) override;
// SimpleMenuModel::Delegate:
void ExecuteCommand(int command_id, int event_flags) override;
private:
ui::SimpleMenuModel* BuildMenuModel();
std::unique_ptr<ui::SimpleMenuModel> context_menu_model_;
std::unique_ptr<views::MenuRunner> context_menu_runner_;
};
} // namespace ash
#endif // ASH_SYSTEM_HOLDING_SPACE_HOLDING_SPACE_ITEM_CONTEXT_MENU_H_
...@@ -2,57 +2,42 @@ ...@@ -2,57 +2,42 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "ash/system/holding_space/holding_space_screenshot_view.h" #include "ash/system/holding_space/holding_space_item_screenshot_view.h"
#include "ash/public/cpp/holding_space/holding_space_constants.h" #include "ash/public/cpp/holding_space/holding_space_constants.h"
#include "ash/public/cpp/holding_space/holding_space_image.h"
#include "ash/public/cpp/holding_space/holding_space_item.h" #include "ash/public/cpp/holding_space/holding_space_item.h"
#include "ash/system/tray/tray_constants.h" #include "ash/system/tray/tray_constants.h"
#include "ash/system/user/rounded_image_view.h" #include "ash/system/user/rounded_image_view.h"
#include "ui/base/dragdrop/drag_drop_types.h"
#include "ui/views/accessibility/view_accessibility.h" #include "ui/views/accessibility/view_accessibility.h"
#include "ui/views/layout/fill_layout.h" #include "ui/views/layout/fill_layout.h"
#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/metadata/metadata_impl_macros.h"
namespace ash { namespace ash {
HoldingSpaceScreenshotView::HoldingSpaceScreenshotView( HoldingSpaceItemScreenshotView::HoldingSpaceItemScreenshotView(
const HoldingSpaceItem* item) const HoldingSpaceItem* item)
: item_(item) { : HoldingSpaceItemView(item) {
SetLayoutManager(std::make_unique<views::FillLayout>()); SetLayoutManager(std::make_unique<views::FillLayout>());
SetPaintToLayer();
layer()->SetFillsBoundsOpaquely(false);
GetViewAccessibility().OverrideName(item_->text());
SetFocusBehavior(FocusBehavior::ALWAYS);
image_ = image_ =
AddChildView(std::make_unique<tray::RoundedImageView>(kTrayItemSize / 2)); AddChildView(std::make_unique<tray::RoundedImageView>(kTrayItemSize / 2));
// Subscribe to be notified of changes to `item_`'s image. // Subscribe to be notified of changes to `item_`'s image.
image_subscription_ = image_subscription_ =
item_->image().AddImageSkiaChangedCallback(base::BindRepeating( item->image().AddImageSkiaChangedCallback(base::BindRepeating(
&HoldingSpaceScreenshotView::Update, base::Unretained(this))); &HoldingSpaceItemScreenshotView::Update, base::Unretained(this)));
Update(); Update();
} }
HoldingSpaceScreenshotView::~HoldingSpaceScreenshotView() = default; HoldingSpaceItemScreenshotView::~HoldingSpaceItemScreenshotView() = default;
int HoldingSpaceScreenshotView::GetDragOperations(const gfx::Point& point) {
return ui::DragDropTypes::DRAG_COPY;
}
void HoldingSpaceScreenshotView::WriteDragData(const gfx::Point& point,
ui::OSExchangeData* data) {
data->SetFilename(item_->file_path());
}
void HoldingSpaceScreenshotView::Update() { void HoldingSpaceItemScreenshotView::Update() {
image_->SetImage(item_->image().image_skia(), kHoldingSpaceScreenshotSize); image_->SetImage(item()->image().image_skia(), kHoldingSpaceScreenshotSize);
} }
BEGIN_METADATA(HoldingSpaceScreenshotView, views::View) BEGIN_METADATA(HoldingSpaceItemScreenshotView, HoldingSpaceItemView)
END_METADATA END_METADATA
} // namespace ash } // namespace ash
...@@ -2,15 +2,13 @@ ...@@ -2,15 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef ASH_SYSTEM_HOLDING_SPACE_HOLDING_SPACE_SCREENSHOT_VIEW_H_ #ifndef ASH_SYSTEM_HOLDING_SPACE_HOLDING_SPACE_ITEM_SCREENSHOT_VIEW_H_
#define ASH_SYSTEM_HOLDING_SPACE_HOLDING_SPACE_SCREENSHOT_VIEW_H_ #define ASH_SYSTEM_HOLDING_SPACE_HOLDING_SPACE_ITEM_SCREENSHOT_VIEW_H_
#include <memory>
#include "ash/ash_export.h" #include "ash/ash_export.h"
#include "ash/public/cpp/holding_space/holding_space_image.h" #include "ash/public/cpp/holding_space/holding_space_image.h"
#include "ash/system/holding_space/holding_space_item_view.h"
#include "ui/views/metadata/metadata_header_macros.h" #include "ui/views/metadata/metadata_header_macros.h"
#include "ui/views/view.h"
namespace ash { namespace ash {
...@@ -20,24 +18,20 @@ namespace tray { ...@@ -20,24 +18,20 @@ namespace tray {
class RoundedImageView; class RoundedImageView;
} // namespace tray } // namespace tray
class ASH_EXPORT HoldingSpaceScreenshotView : public views::View { class ASH_EXPORT HoldingSpaceItemScreenshotView : public HoldingSpaceItemView {
public: public:
METADATA_HEADER(HoldingSpaceScreenshotView); METADATA_HEADER(HoldingSpaceItemScreenshotView);
explicit HoldingSpaceScreenshotView(const HoldingSpaceItem* item); explicit HoldingSpaceItemScreenshotView(const HoldingSpaceItem* item);
HoldingSpaceScreenshotView(const HoldingSpaceScreenshotView&) = delete; HoldingSpaceItemScreenshotView(const HoldingSpaceItemScreenshotView&) =
HoldingSpaceScreenshotView& operator=(const HoldingSpaceScreenshotView&) =
delete; delete;
~HoldingSpaceScreenshotView() override; HoldingSpaceItemScreenshotView& operator=(
const HoldingSpaceItemScreenshotView&) = delete;
// views::View: ~HoldingSpaceItemScreenshotView() override;
int GetDragOperations(const gfx::Point& point) override;
void WriteDragData(const gfx::Point& point, ui::OSExchangeData*) override;
private: private:
void Update(); void Update();
const HoldingSpaceItem* const item_;
tray::RoundedImageView* image_ = nullptr; tray::RoundedImageView* image_ = nullptr;
std::unique_ptr<HoldingSpaceImage::Subscription> image_subscription_; std::unique_ptr<HoldingSpaceImage::Subscription> image_subscription_;
...@@ -45,4 +39,4 @@ class ASH_EXPORT HoldingSpaceScreenshotView : public views::View { ...@@ -45,4 +39,4 @@ class ASH_EXPORT HoldingSpaceScreenshotView : public views::View {
} // namespace ash } // namespace ash
#endif // ASH_SYSTEM_HOLDING_SPACE_HOLDING_SPACE_SCREENSHOT_VIEW_H_ #endif // ASH_SYSTEM_HOLDING_SPACE_HOLDING_SPACE_ITEM_SCREENSHOT_VIEW_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/system/holding_space/holding_space_item_view.h"
#include "ash/public/cpp/holding_space/holding_space_constants.h"
#include "ash/public/cpp/holding_space/holding_space_item.h"
#include "ash/public/cpp/shelf_config.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/holding_space/holding_space_item_context_menu.h"
#include "ui/base/dragdrop/drag_drop_types.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/text_constants.h"
#include "ui/views/accessibility/view_accessibility.h"
#include "ui/views/controls/menu/menu_runner.h"
namespace ash {
HoldingSpaceItemView::HoldingSpaceItemView(const HoldingSpaceItem* item)
: item_(item),
context_menu_(std::make_unique<HoldingSpaceItemContextMenu>()) {
set_context_menu_controller(context_menu_.get());
SetPaintToLayer();
layer()->SetFillsBoundsOpaquely(false);
GetViewAccessibility().OverrideName(item->text());
SetFocusBehavior(FocusBehavior::ALWAYS);
}
HoldingSpaceItemView::~HoldingSpaceItemView() = default;
int HoldingSpaceItemView::GetDragOperations(const gfx::Point& point) {
return ui::DragDropTypes::DRAG_COPY;
}
SkColor HoldingSpaceItemView::GetInkDropBaseColor() const {
return ShelfConfig::Get()->GetInkDropRippleAttributes().base_color;
}
void HoldingSpaceItemView::WriteDragData(const gfx::Point& point,
ui::OSExchangeData* data) {
data->SetFilename(item_->file_path());
}
} // namespace ash
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_SYSTEM_HOLDING_SPACE_HOLDING_SPACE_ITEM_VIEW_H_
#define ASH_SYSTEM_HOLDING_SPACE_HOLDING_SPACE_ITEM_VIEW_H_
#include <memory>
#include "ash/ash_export.h"
#include "ui/base/dragdrop/drag_drop_types.h"
#include "ui/views/animation/ink_drop_host_view.h"
namespace ash {
class HoldingSpaceItem;
class HoldingSpaceItemContextMenu;
// Base class for HoldingSpaceItemChipView and HoldingSpaceItemScreenshotView.
class ASH_EXPORT HoldingSpaceItemView : public views::InkDropHostView {
public:
explicit HoldingSpaceItemView(const HoldingSpaceItem* item);
HoldingSpaceItemView(const HoldingSpaceItemView&) = delete;
HoldingSpaceItemView& operator=(const HoldingSpaceItemView&) = delete;
~HoldingSpaceItemView() override;
// views::InkDropHostView:
int GetDragOperations(const gfx::Point& point) override;
SkColor GetInkDropBaseColor() const override;
void WriteDragData(const gfx::Point& point, ui::OSExchangeData*) override;
const HoldingSpaceItem* item() const { return item_; }
private:
const HoldingSpaceItem* const item_;
std::unique_ptr<HoldingSpaceItemContextMenu> const context_menu_;
};
} // namespace ash
#endif // ASH_SYSTEM_HOLDING_SPACE_HOLDING_SPACE_ITEM_VIEW_H_
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include "ash/shelf/shelf_widget.h" #include "ash/shelf/shelf_widget.h"
#include "ash/shell.h" #include "ash/shell.h"
#include "ash/system/holding_space/holding_space_item_chip_view.h" #include "ash/system/holding_space/holding_space_item_chip_view.h"
#include "ash/system/holding_space/holding_space_screenshot_view.h" #include "ash/system/holding_space/holding_space_item_screenshot_view.h"
#include "ash/system/holding_space/holding_space_tray.h" #include "ash/system/holding_space/holding_space_tray.h"
#include "ash/system/status_area_widget.h" #include "ash/system/status_area_widget.h"
#include "ui/aura/window.h" #include "ui/aura/window.h"
...@@ -114,7 +114,7 @@ std::vector<views::View*> HoldingSpaceTestApi::GetPinnedFileChips() { ...@@ -114,7 +114,7 @@ std::vector<views::View*> HoldingSpaceTestApi::GetPinnedFileChips() {
std::vector<views::View*> HoldingSpaceTestApi::GetScreenshotViews() { std::vector<views::View*> HoldingSpaceTestApi::GetScreenshotViews() {
std::vector<views::View*> screenshot_views; std::vector<views::View*> screenshot_views;
if (holding_space_tray_->GetBubbleView()) { if (holding_space_tray_->GetBubbleView()) {
FindDescendentsOfClass<HoldingSpaceScreenshotView>( FindDescendentsOfClass<HoldingSpaceItemScreenshotView>(
holding_space_tray_->GetBubbleView()->GetViewByID( holding_space_tray_->GetBubbleView()->GetViewByID(
kHoldingSpaceRecentFilesContainerId), kHoldingSpaceRecentFilesContainerId),
&screenshot_views); &screenshot_views);
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#include "ash/public/cpp/holding_space/holding_space_model.h" #include "ash/public/cpp/holding_space/holding_space_model.h"
#include "ash/strings/grit/ash_strings.h" #include "ash/strings/grit/ash_strings.h"
#include "ash/system/holding_space/holding_space_item_chips_container.h" #include "ash/system/holding_space/holding_space_item_chips_container.h"
#include "ash/system/holding_space/holding_space_screenshot_view.h" #include "ash/system/holding_space/holding_space_item_screenshot_view.h"
#include "ash/system/tray/tray_constants.h" #include "ash/system/tray/tray_constants.h"
#include "ash/system/tray/tray_popup_item_style.h" #include "ash/system/tray/tray_popup_item_style.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
...@@ -48,7 +48,7 @@ RecentFilesContainer::RecentFilesContainer() { ...@@ -48,7 +48,7 @@ RecentFilesContainer::RecentFilesContainer() {
for (const auto& item : HoldingSpaceController::Get()->model()->items()) { for (const auto& item : HoldingSpaceController::Get()->model()->items()) {
if (item->type() == HoldingSpaceItem::Type::kScreenshot) { if (item->type() == HoldingSpaceItem::Type::kScreenshot) {
screenshots_container_->AddChildView( screenshots_container_->AddChildView(
std::make_unique<HoldingSpaceScreenshotView>(item.get())); std::make_unique<HoldingSpaceItemScreenshotView>(item.get()));
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment