| 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_
|
|
|