Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(720)

Unified Diff: views/controls/tree/tree_view.h

Issue 8655001: views: Move table and tree directories to ui/views/controls/. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: exclude native_widget_win_unittest too Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « views/controls/table/table_view_unittest.cc ('k') | views/controls/tree/tree_view.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: views/controls/tree/tree_view.h
diff --git a/views/controls/tree/tree_view.h b/views/controls/tree/tree_view.h
deleted file mode 100644
index dac2804ed685440b2276bea9a88cd00459fa45e8..0000000000000000000000000000000000000000
--- a/views/controls/tree/tree_view.h
+++ /dev/null
@@ -1,342 +0,0 @@
-// Copyright (c) 2011 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 VIEWS_CONTROLS_TREE_TREE_VIEW_H_
-#define VIEWS_CONTROLS_TREE_TREE_VIEW_H_
-#pragma once
-
-#include <windows.h>
-#include <commctrl.h>
-
-#include <map>
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "ui/base/keycodes/keyboard_codes.h"
-#include "ui/base/models/tree_model.h"
-#include "views/controls/native_control.h"
-
-namespace views {
-
-class TreeView;
-
-// TreeViewController ---------------------------------------------------------
-
-// Controller for the treeview.
-class TreeViewController {
- public:
- // Notification that the selection of the tree view has changed. Use
- // GetSelectedNode to find the current selection.
- virtual void OnTreeViewSelectionChanged(TreeView* tree_view) = 0;
-
- // Returns true if the node can be edited. This is only used if the
- // TreeView is editable.
- virtual bool CanEdit(TreeView* tree_view, ui::TreeModelNode* node) {
- return true;
- }
-
- // Invoked when a key is pressed on the tree view.
- virtual void OnTreeViewKeyDown(ui::KeyboardCode keycode) {}
-};
-
-// TreeView -------------------------------------------------------------------
-
-// TreeView displays hierarchical data as returned from a TreeModel. The user
-// can expand, collapse and edit the items. A Controller may be attached to
-// receive notification of selection changes and restrict editing.
-class VIEWS_EXPORT TreeView : public NativeControl, ui::TreeModelObserver {
- public:
- TreeView();
- virtual ~TreeView();
-
- // Is dragging enabled? The default is false.
- void set_drag_enabled(bool drag_enabled) { drag_enabled_ = drag_enabled; }
- bool drag_enabled() const { return drag_enabled_; }
-
- // Sets the model. TreeView does not take ownership of the model.
- void SetModel(ui::TreeModel* model);
- ui::TreeModel* model() const { return model_; }
-
- // Sets whether to automatically expand children when a parent node is
- // expanded. The default is false. If true, when a node in the tree is
- // expanded for the first time, its children are also automatically expanded.
- // If a node is subsequently collapsed and expanded again, the children
- // will not be automatically expanded.
- void set_auto_expand_children(bool auto_expand_children) {
- auto_expand_children_ = auto_expand_children;
- }
-
- // Sets whether the user can edit the nodes. The default is true. If true,
- // the Controller is queried to determine if a particular node can be edited.
- void SetEditable(bool editable);
-
- // Sets whether lines are drawn from the root node to child nodes (and
- // whether plus boxes show up next to the root node.) The default is false.
- // If root_shown_ is false, the children of the root act as the roots in the
- // native control, and so this setting takes effect for them.
- void set_lines_at_root(bool lines_at_root) {
- lines_at_root_ = lines_at_root;
- }
-
- // Overridden from View:
- virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
-
- // Edits the specified node. This cancels the current edit and expands
- // all parents of node.
- void StartEditing(ui::TreeModelNode* node);
-
- // Cancels the current edit. Does nothing if not editing.
- void CancelEdit();
-
- // Commits the current edit. Does nothing if not editing.
- void CommitEdit();
-
- // If the user is editing a node, it is returned. If the user is not
- // editing a node, NULL is returned.
- ui::TreeModelNode* GetEditingNode();
-
- // Selects the specified node. This expands all the parents of node.
- void SetSelectedNode(ui::TreeModelNode* node);
-
- // Returns the selected node, or NULL if nothing is selected.
- ui::TreeModelNode* GetSelectedNode();
-
- // Make sure node and all its parents are expanded.
- void Expand(ui::TreeModelNode* node);
-
- // Invoked from ExpandAll(). Expands the supplied node and recursively
- // invokes itself with all children.
- void ExpandAll(ui::TreeModelNode* node);
-
- // Returns true if the specified node is expanded.
- bool IsExpanded(ui::TreeModelNode* node);
-
- // Sets whether the root is shown. If true, the root node of the tree is
- // shown, if false only the children of the root are shown. The default is
- // true.
- void SetRootShown(bool root_visible);
-
- // Begin TreeModelObserver implementation.
- // These methods shouldn't be called directly. The model is responsible for
- // firing them.
- virtual void TreeNodesAdded(ui::TreeModel* model,
- ui::TreeModelNode* parent,
- int start,
- int count) OVERRIDE;
- virtual void TreeNodesRemoved(ui::TreeModel* model,
- ui::TreeModelNode* parent,
- int start,
- int count) OVERRIDE;
- virtual void TreeNodeChanged(ui::TreeModel* model,
- ui::TreeModelNode* node) OVERRIDE;
- // End TreeModelObserver implementation.
-
- // Sets the controller, which may be null. TreeView does not take ownership
- // of the controller.
- void SetController(TreeViewController* controller) {
- controller_ = controller;
- }
-
- // Sets whether enter is processed when not editing. If true, enter will
- // expand/collapse the node. If false, enter is passed to the focus manager
- // so that an enter accelerator can be enabled. The default is false.
- //
- // NOTE: Changing this has no effect after the hwnd has been created.
- void SetProcessesEnter(bool process_enter) {
- process_enter_ = process_enter;
- }
- bool GetProcessedEnter() { return process_enter_; }
-
- // Sets when the ContextMenuController is notified. If true, the
- // ContextMenuController is only notified when a node is selected and the
- // mouse is over a node. The default is true.
- void SetShowContextMenuOnlyWhenNodeSelected(bool value) {
- show_context_menu_only_when_node_selected_ = value;
- }
- bool GetShowContextMenuOnlyWhenNodeSelected() {
- return show_context_menu_only_when_node_selected_;
- }
-
- // If true, a right click selects the node under the mouse. The default
- // is true.
- void SetSelectOnRightMouseDown(bool value) {
- select_on_right_mouse_down_ = value;
- }
- bool GetSelectOnRightMouseDown() { return select_on_right_mouse_down_; }
-
- protected:
- // Overriden to return a location based on the selected node.
- virtual gfx::Point GetKeyboardContextMenuLocation();
-
- // Creates and configures the tree_view.
- virtual HWND CreateNativeControl(HWND parent_container);
-
- // Invoked when the native control sends a WM_NOTIFY message to its parent.
- // Handles a variety of potential TreeView messages.
- virtual LRESULT OnNotify(int w_param, LPNMHDR l_param);
-
- // Invoked when the native control send a WM_DESTROY message to its parent.
- virtual void OnDestroy();
-
- // We pay attention to key down for two reasons: to circumvent VK_ENTER from
- // toggling the expaned state when processes_enter_ is false, and to have F2
- // start editting.
- virtual bool OnKeyDown(ui::KeyboardCode virtual_key_code);
-
- virtual void OnContextMenu(const POINT& location);
-
- // Returns the TreeModelNode for |tree_item|.
- ui::TreeModelNode* GetNodeForTreeItem(HTREEITEM tree_item);
-
- // Returns the tree item for |node|.
- HTREEITEM GetTreeItemForNode(ui::TreeModelNode* node);
-
- private:
- // See notes in TableView::TableViewWrapper for why this is needed.
- struct TreeViewWrapper {
- explicit TreeViewWrapper(TreeView* view) : tree_view(view) { }
- TreeView* tree_view;
- };
-
- // Internally used to track the state of nodes. NodeDetails are lazily created
- // as the user expands nodes.
- struct NodeDetails {
- NodeDetails(int id, ui::TreeModelNode* node)
- : id(id), node(node), tree_item(NULL), loaded_children(false) {}
-
- // Unique identifier for the node. This corresponds to the lParam of
- // the tree item.
- const int id;
-
- // The node from the model.
- ui::TreeModelNode* node;
-
- // From the native TreeView.
- //
- // This should be treated as const, but can't due to timing in creating the
- // entry.
- HTREEITEM tree_item;
-
- // Whether the children have been loaded.
- bool loaded_children;
- };
-
- // Cleanup all resources used by treeview.
- void Cleanup();
-
- // Make sure the tree view is observing the tree model.
- void AddObserverToModel();
-
- // Make sure the tree view is no longer observing the tree model.
- void RemoveObserverFromModel();
-
- // Deletes the root items from the treeview. This is used when the model
- // changes.
- void DeleteRootItems();
-
- // Creates the root items in the treeview from the model. This is used when
- // the model changes.
- void CreateRootItems();
-
- // Creates and adds an item to the treeview. parent_item identifies the
- // parent and is null for root items. after dictates where among the
- // children of parent_item the item is to be created. node is the node from
- // the model.
- void CreateItem(HTREEITEM parent_item, HTREEITEM after,
- ui::TreeModelNode* node);
-
- // Removes entries from the map for item. This method will also
- // remove the items from the TreeView because the process of
- // deleting an item will send an TVN_GETDISPINFO message, consulting
- // our internal map data.
- void RecursivelyDelete(NodeDetails* node);
-
- // Returns the NodeDetails by node from the model.
- NodeDetails* GetNodeDetails(ui::TreeModelNode* node);
-
- // Returns the NodeDetails by identifier (lparam of the HTREEITEM).
- NodeDetails* GetNodeDetailsByID(int id);
-
- // Returns the NodeDetails by HTREEITEM.
- NodeDetails* GetNodeDetailsByTreeItem(HTREEITEM tree_item);
-
- // Creates the image list to use for the tree.
- HIMAGELIST CreateImageList();
-
- // Returns the HTREEITEM for |node|. This is intended to be called when a
- // model mutation event occur with |node| as the parent. This returns null
- // if the user has never expanded |node| or all of its parents.
- HTREEITEM GetTreeItemForNodeDuringMutation(ui::TreeModelNode* node);
-
- // The window function installed on the treeview.
- static LRESULT CALLBACK TreeWndProc(HWND window,
- UINT message,
- WPARAM w_param,
- LPARAM l_param);
-
- // Handle to the tree window.
- HWND tree_view_;
-
- // The model, may be null.
- ui::TreeModel* model_;
-
- // Maps from id to NodeDetails.
- std::map<int, NodeDetails*> id_to_details_map_;
-
- // Maps from model entry to NodeDetails.
- std::map<ui::TreeModelNode*, NodeDetails*> node_to_details_map_;
-
- // Whether to automatically expand children when a parent node is expanded.
- bool auto_expand_children_;
-
- // Whether the user can edit the items.
- bool editable_;
-
- // Next id to create. Any time an item is added this is incremented by one.
- int next_id_;
-
- // The controller.
- TreeViewController* controller_;
-
- // Node being edited. If null, not editing.
- ui::TreeModelNode* editing_node_;
-
- // Whether or not the root is shown in the tree.
- bool root_shown_;
-
- // Whether lines are drawn from the root to the children.
- bool lines_at_root_;
-
- // Whether enter should be processed by the tree when not editing.
- bool process_enter_;
-
- // Whether we notify context menu controller only when mouse is over node
- // and node is selected.
- bool show_context_menu_only_when_node_selected_;
-
- // Whether the selection is changed on right mouse down.
- bool select_on_right_mouse_down_;
-
- // A wrapper around 'this', used for subclassing the TreeView control.
- TreeViewWrapper wrapper_;
-
- // Original handler installed on the TreeView.
- WNDPROC original_handler_;
-
- bool drag_enabled_;
-
- // Has an observer been added to the model?
- bool observer_added_;
-
- // Did the model return a non-empty set of icons from GetIcons?
- bool has_custom_icons_;
-
- HIMAGELIST image_list_;
-
- DISALLOW_COPY_AND_ASSIGN(TreeView);
-};
-
-} // namespace views
-
-#endif // VIEWS_CONTROLS_TREE_TREE_VIEW_H_
« no previous file with comments | « views/controls/table/table_view_unittest.cc ('k') | views/controls/tree/tree_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698