Index: ui/app_list/views/app_list_folder_view.cc |
diff --git a/ui/app_list/views/app_list_folder_view.cc b/ui/app_list/views/app_list_folder_view.cc |
deleted file mode 100644 |
index bdf417c5d1637112f63110b9686bae381de87766..0000000000000000000000000000000000000000 |
--- a/ui/app_list/views/app_list_folder_view.cc |
+++ /dev/null |
@@ -1,321 +0,0 @@ |
-// Copyright 2013 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 "ui/app_list/views/app_list_folder_view.h" |
- |
-#include <algorithm> |
- |
-#include "ui/accessibility/ax_view_state.h" |
-#include "ui/app_list/app_list_constants.h" |
-#include "ui/app_list/app_list_folder_item.h" |
-#include "ui/app_list/app_list_model.h" |
-#include "ui/app_list/views/app_list_item_view.h" |
-#include "ui/app_list/views/app_list_main_view.h" |
-#include "ui/app_list/views/apps_container_view.h" |
-#include "ui/app_list/views/apps_grid_view.h" |
-#include "ui/app_list/views/contents_view.h" |
-#include "ui/app_list/views/folder_background_view.h" |
-#include "ui/app_list/views/folder_header_view.h" |
-#include "ui/app_list/views/search_box_view.h" |
-#include "ui/compositor/scoped_layer_animation_settings.h" |
-#include "ui/events/event.h" |
-#include "ui/gfx/rect_conversions.h" |
-#include "ui/strings/grit/ui_strings.h" |
-#include "ui/views/controls/textfield/textfield.h" |
-#include "ui/views/view_model.h" |
-#include "ui/views/view_model_utils.h" |
- |
-namespace app_list { |
- |
-namespace { |
- |
-// Indexes of interesting views in ViewModel of AppListFolderView. |
-const int kIndexFolderHeader = 0; |
-const int kIndexChildItems = 1; |
- |
-// Threshold for the distance from the center of the item to the circle of the |
-// folder container ink bubble, beyond which, the item is considered dragged |
-// out of the folder boundary. |
-const int kOutOfFolderContainerBubbleDelta = 30; |
- |
-} // namespace |
- |
-AppListFolderView::AppListFolderView(AppsContainerView* container_view, |
- AppListModel* model, |
- AppListMainView* app_list_main_view) |
- : container_view_(container_view), |
- app_list_main_view_(app_list_main_view), |
- folder_header_view_(new FolderHeaderView(this)), |
- view_model_(new views::ViewModel), |
- model_(model), |
- folder_item_(NULL), |
- hide_for_reparent_(false) { |
- AddChildView(folder_header_view_); |
- view_model_->Add(folder_header_view_, kIndexFolderHeader); |
- |
- items_grid_view_ = new AppsGridView(app_list_main_view_); |
- items_grid_view_->set_folder_delegate(this); |
- items_grid_view_->SetLayout( |
- container_view->apps_grid_view()->cols(), |
- container_view->apps_grid_view()->rows_per_page()); |
- items_grid_view_->SetModel(model); |
- AddChildView(items_grid_view_); |
- view_model_->Add(items_grid_view_, kIndexChildItems); |
- |
- SetPaintToLayer(true); |
- SetFillsBoundsOpaquely(false); |
- |
- model_->AddObserver(this); |
-} |
- |
-AppListFolderView::~AppListFolderView() { |
- model_->RemoveObserver(this); |
-} |
- |
-void AppListFolderView::SetAppListFolderItem(AppListFolderItem* folder) { |
- accessible_name_ = ui::ResourceBundle::GetSharedInstance().GetLocalizedString( |
- IDS_APP_LIST_FOLDER_OPEN_FOLDER_ACCESSIBILE_NAME); |
- NotifyAccessibilityEvent(ui::AX_EVENT_ALERT, true); |
- |
- folder_item_ = folder; |
- items_grid_view_->SetItemList(folder_item_->item_list()); |
- folder_header_view_->SetFolderItem(folder_item_); |
-} |
- |
-void AppListFolderView::ScheduleShowHideAnimation(bool show, |
- bool hide_for_reparent) { |
- hide_for_reparent_ = hide_for_reparent; |
- |
- // Stop any previous animation. |
- layer()->GetAnimator()->StopAnimating(); |
- |
- // Hide the top items temporarily if showing the view for opening the folder. |
- if (show) |
- items_grid_view_->SetTopItemViewsVisible(false); |
- |
- // Set initial state. |
- layer()->SetOpacity(show ? 0.0f : 1.0f); |
- SetVisible(true); |
- UpdateFolderNameVisibility(true); |
- |
- ui::ScopedLayerAnimationSettings animation(layer()->GetAnimator()); |
- animation.SetTweenType( |
- show ? kFolderFadeInTweenType : kFolderFadeOutTweenType); |
- animation.AddObserver(this); |
- animation.SetTransitionDuration(base::TimeDelta::FromMilliseconds( |
- show ? kFolderTransitionInDurationMs : kFolderTransitionOutDurationMs)); |
- |
- layer()->SetOpacity(show ? 1.0f : 0.0f); |
-} |
- |
-gfx::Size AppListFolderView::GetPreferredSize() const { |
- const gfx::Size header_size = folder_header_view_->GetPreferredSize(); |
- const gfx::Size grid_size = items_grid_view_->GetPreferredSize(); |
- int width = std::max(header_size.width(), grid_size.width()); |
- int height = header_size.height() + grid_size.height(); |
- return gfx::Size(width, height); |
-} |
- |
-void AppListFolderView::Layout() { |
- CalculateIdealBounds(); |
- views::ViewModelUtils::SetViewBoundsToIdealBounds(*view_model_); |
-} |
- |
-bool AppListFolderView::OnKeyPressed(const ui::KeyEvent& event) { |
- return items_grid_view_->OnKeyPressed(event); |
-} |
- |
-void AppListFolderView::OnAppListItemWillBeDeleted(AppListItem* item) { |
- if (item == folder_item_) { |
- items_grid_view_->OnFolderItemRemoved(); |
- folder_header_view_->OnFolderItemRemoved(); |
- folder_item_ = NULL; |
- |
- // Do not change state if it is hidden. |
- if (hide_for_reparent_ || layer()->opacity() == 0.0f) |
- return; |
- |
- // If the folder item associated with this view is removed from the model, |
- // (e.g. the last item in the folder was deleted), reset the view and signal |
- // the container view to show the app list instead. |
- // Pass NULL to ShowApps() to avoid triggering animation from the deleted |
- // folder. |
- container_view_->ShowApps(NULL); |
- } |
-} |
- |
-void AppListFolderView::OnImplicitAnimationsCompleted() { |
- // Show the top items when the opening folder animation is done. |
- if (layer()->opacity() == 1.0f) |
- items_grid_view_->SetTopItemViewsVisible(true); |
- |
- // If the view is hidden for reparenting a folder item, it has to be visible, |
- // so that drag_view_ can keep receiving mouse events. |
- if (layer()->opacity() == 0.0f && !hide_for_reparent_) |
- SetVisible(false); |
- |
- // Set the view bounds to a small rect, so that it won't overlap the root |
- // level apps grid view during folder item reprenting transitional period. |
- if (hide_for_reparent_) |
- SetBoundsRect(gfx::Rect(bounds().x(), bounds().y(), 1, 1)); |
-} |
- |
-void AppListFolderView::CalculateIdealBounds() { |
- gfx::Rect rect(GetContentsBounds()); |
- if (rect.IsEmpty()) |
- return; |
- |
- gfx::Rect header_frame(rect); |
- gfx::Size size = folder_header_view_->GetPreferredSize(); |
- header_frame.set_height(size.height()); |
- view_model_->set_ideal_bounds(kIndexFolderHeader, header_frame); |
- |
- gfx::Rect grid_frame(rect); |
- grid_frame.Subtract(header_frame); |
- view_model_->set_ideal_bounds(kIndexChildItems, grid_frame); |
-} |
- |
-void AppListFolderView::StartSetupDragInRootLevelAppsGridView( |
- AppListItemView* original_drag_view, |
- const gfx::Point& drag_point_in_root_grid) { |
- // Converts the original_drag_view's bounds to the coordinate system of |
- // root level grid view. |
- gfx::RectF rect_f(original_drag_view->bounds()); |
- views::View::ConvertRectToTarget(items_grid_view_, |
- container_view_->apps_grid_view(), |
- &rect_f); |
- gfx::Rect rect_in_root_grid_view = gfx::ToEnclosingRect(rect_f); |
- |
- container_view_->apps_grid_view()-> |
- InitiateDragFromReparentItemInRootLevelGridView( |
- original_drag_view, rect_in_root_grid_view, drag_point_in_root_grid); |
-} |
- |
-gfx::Rect AppListFolderView::GetItemIconBoundsAt(int index) { |
- AppListItemView* item_view = items_grid_view_->GetItemViewAt(index); |
- // Icon bounds relative to AppListItemView. |
- const gfx::Rect icon_bounds = item_view->GetIconBounds(); |
- gfx::Rect to_apps_grid_view = item_view->ConvertRectToParent(icon_bounds); |
- gfx::Rect to_folder = |
- items_grid_view_->ConvertRectToParent(to_apps_grid_view); |
- |
- // Get the icon image's bound. |
- to_folder.ClampToCenteredSize( |
- gfx::Size(kGridIconDimension, kGridIconDimension)); |
- |
- return to_folder; |
-} |
- |
-void AppListFolderView::UpdateFolderViewBackground(bool show_bubble) { |
- if (hide_for_reparent_) |
- return; |
- |
- // Before showing the folder container inking bubble, hide the folder name. |
- if (show_bubble) |
- UpdateFolderNameVisibility(false); |
- |
- container_view_->folder_background_view()->UpdateFolderContainerBubble( |
- show_bubble ? FolderBackgroundView::SHOW_BUBBLE : |
- FolderBackgroundView::HIDE_BUBBLE); |
-} |
- |
-void AppListFolderView::UpdateFolderNameVisibility(bool visible) { |
- folder_header_view_->UpdateFolderNameVisibility(visible); |
-} |
- |
-bool AppListFolderView::IsPointOutsideOfFolderBoundary( |
- const gfx::Point& point) { |
- if (!GetLocalBounds().Contains(point)) |
- return true; |
- |
- gfx::Point center = GetLocalBounds().CenterPoint(); |
- float delta = (point - center).Length(); |
- return delta > container_view_->folder_background_view()-> |
- GetFolderContainerBubbleRadius() + kOutOfFolderContainerBubbleDelta; |
-} |
- |
-// When user drags a folder item out of the folder boundary ink bubble, the |
-// folder view UI will be hidden, and switch back to top level AppsGridView. |
-// The dragged item will seamlessly move on the top level AppsGridView. |
-// In order to achieve the above, we keep the folder view and its child grid |
-// view visible with opacity 0, so that the drag_view_ on the hidden grid view |
-// will keep receiving mouse event. At the same time, we initiated a new |
-// drag_view_ in the top level grid view, and keep it moving with the hidden |
-// grid view's drag_view_, so that the dragged item can be engaged in drag and |
-// drop flow in the top level grid view. During the reparenting process, the |
-// drag_view_ in hidden grid view will dispatch the drag and drop event to |
-// the top level grid view, until the drag ends. |
-void AppListFolderView::ReparentItem( |
- AppListItemView* original_drag_view, |
- const gfx::Point& drag_point_in_folder_grid) { |
- // Convert the drag point relative to the root level AppsGridView. |
- gfx::Point to_root_level_grid = drag_point_in_folder_grid; |
- ConvertPointToTarget(items_grid_view_, |
- container_view_->apps_grid_view(), |
- &to_root_level_grid); |
- StartSetupDragInRootLevelAppsGridView(original_drag_view, to_root_level_grid); |
- container_view_->ReparentFolderItemTransit(folder_item_); |
-} |
- |
-void AppListFolderView::DispatchDragEventForReparent( |
- AppsGridView::Pointer pointer, |
- const gfx::Point& drag_point_in_folder_grid) { |
- AppsGridView* root_grid = container_view_->apps_grid_view(); |
- gfx::Point drag_point_in_root_grid = drag_point_in_folder_grid; |
- ConvertPointToTarget(items_grid_view_, root_grid, &drag_point_in_root_grid); |
- root_grid->UpdateDragFromReparentItem(pointer, drag_point_in_folder_grid); |
-} |
- |
-void AppListFolderView::DispatchEndDragEventForReparent( |
- bool events_forwarded_to_drag_drop_host, |
- bool cancel_drag) { |
- container_view_->apps_grid_view()->EndDragFromReparentItemInRootLevel( |
- events_forwarded_to_drag_drop_host, cancel_drag); |
-} |
- |
-void AppListFolderView::HideViewImmediately() { |
- SetVisible(false); |
- hide_for_reparent_ = false; |
-} |
- |
-void AppListFolderView::CloseFolderPage() { |
- accessible_name_ = ui::ResourceBundle::GetSharedInstance().GetLocalizedString( |
- IDS_APP_LIST_FOLDER_CLOSE_FOLDER_ACCESSIBILE_NAME); |
- NotifyAccessibilityEvent(ui::AX_EVENT_ALERT, true); |
- |
- GiveBackFocusToSearchBox(); |
- if (items_grid_view()->dragging()) |
- items_grid_view()->EndDrag(true); |
- items_grid_view()->ClearAnySelectedView(); |
- container_view_->ShowApps(folder_item_); |
-} |
- |
-bool AppListFolderView::IsOEMFolder() const { |
- return folder_item_->folder_type() == AppListFolderItem::FOLDER_TYPE_OEM; |
-} |
- |
-void AppListFolderView::SetRootLevelDragViewVisible(bool visible) { |
- container_view_->apps_grid_view()->SetDragViewVisible(visible); |
-} |
- |
-void AppListFolderView::GetAccessibleState(ui::AXViewState* state) { |
- state->role = ui::AX_ROLE_BUTTON; |
- state->name = accessible_name_; |
-} |
- |
-void AppListFolderView::NavigateBack(AppListFolderItem* item, |
- const ui::Event& event_flags) { |
- CloseFolderPage(); |
-} |
- |
-void AppListFolderView::GiveBackFocusToSearchBox() { |
- app_list_main_view_->search_box_view()->search_box()->RequestFocus(); |
-} |
- |
-void AppListFolderView::SetItemName(AppListFolderItem* item, |
- const std::string& name) { |
- model_->SetItemName(item, name); |
-} |
- |
-} // namespace app_list |